> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shortext.ny-corp.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Types de messages WhatsApp

> L'apparence de chaque type de message WhatsApp sur le téléphone, et le payload qui l'envoie par l'API Shortext.

Chaque message envoyé par l'API suit le [format des messages](https://docs.shortext.ny-corp.io/fr/api-reference/message-format.md) : un `type` et un `content`. Cette page montre, pour WhatsApp, l'apparence de chaque type pour votre contact et l'objet `message` exact à envoyer, avec `POST /conversations` ou `POST /conversations/{id}/messages`.

> [!NOTE]
>
> À l'exception des modèles, ces messages ne sont remis que dans la [fenêtre de 24 heures](https://docs.shortext.ny-corp.io/fr/channels/whatsapp.md#la-fenêtre-de-24-heures) ouverte par le dernier message du contact.

## Texte

Un texte de 4 096 caractères au plus. Quand le texte contient une URL commençant par `http://` ou `https://`, WhatsApp affiche un aperçu de la première, ou un lien cliquable si aucun aperçu n'est disponible.

![Un message texte sur WhatsApp](https://mintcdn.com/n-ycorp/_ZaOYbkIIjdke_qI/images/text-message.png?fit=max\&auto=format\&n=_ZaOYbkIIjdke_qI\&q=85\&s=ff3bc9d19810e66ad43a89d74f28cb69)

```json theme={null}
{
  "type": "text",
  "content": {
    "text": "Votre commande A-1042 a quitté notre entrepôt. Suivez-la ici : https://www.example.com/track/A-1042"
  }
}
```

## Boutons de réponse

Jusqu'à **trois boutons** que le contact touche pour répondre. Chaque bouton a un `id` (256 caractères au plus, qui vous est renvoyé quand le contact le touche) et un `title` (20 caractères au plus).

![Un message avec des boutons de réponse](https://mintcdn.com/n-ycorp/_ZaOYbkIIjdke_qI/images/interactive-button-reply.png?fit=max\&auto=format\&n=_ZaOYbkIIjdke_qI\&q=85\&s=d6be9cb4814b41f4259ddabd1aca47e6)

```json theme={null}
{
  "type": "interactive",
  "content": {
    "type": "button",
    "header": { "type": "text", "value": "Livraison" },
    "body": "Quand souhaitez-vous être livré ?",
    "footer": "Choisissez un créneau",
    "action": [
      { "id": "slot_morning", "title": "Matin" },
      { "id": "slot_evening", "title": "Soir" }
    ]
  }
}
```

Quand le contact touche un bouton, son choix revient sous forme de message, reçu par l'agent et par votre [webhook](https://docs.shortext.ny-corp.io/fr/api-reference/webhooks.md) `message.received`.

![Le choix du contact](https://mintcdn.com/n-ycorp/_ZaOYbkIIjdke_qI/images/interactive-button-sample-response.png?fit=max\&auto=format\&n=_ZaOYbkIIjdke_qI\&q=85\&s=851324f955fabca69c0715d228bbe036)

| Champ | Limites |
| - | - |
| `header` | Facultatif. `{ "type": "text", "value": "..." }` (60 caractères au plus), ou `image`, `video`, `document` avec l'URL du média dans `value` (et `filename` pour un document). |
| `body` | Obligatoire. Le texte du message. |
| `footer` | Facultatif, 60 caractères au plus. |
| `action` | Obligatoire. 1 à 3 boutons `{ "id", "title" }`. |

## Lien d'appel à l'action

Un bouton qui ouvre une URL : une page de paiement, de suivi, un formulaire.

```json theme={null}
{
  "type": "interactive",
  "content": {
    "type": "cta_url",
    "header": { "type": "text", "value": "Votre facture" },
    "body": "La facture A-1042 est prête : 25 000 XAF.",
    "footer": "Paiement sécurisé",
    "action": {
      "parameters": {
        "display_text": "Payer",
        "url": "https://www.example.com/pay/A-1042"
      }
    }
  }
}
```

| Champ | Limites |
| - | - |
| `header` | Facultatif. `text` (60 caractères au plus) ou `image` (URL dans `value`). |
| `action.parameters.display_text` | Obligatoire, 20 caractères au plus. |
| `action.parameters.url` | Obligatoire, 200 caractères au plus. |

## Médias

Images, vidéos, documents et fichiers audio ou vocaux, à partir d'une URL publique que Shortext télécharge.

```json Image theme={null}
{
  "type": "media",
  "content": {
    "media_type": "image",
    "media_url": "https://cdn.example.com/products/x1.jpg",
    "caption": "Le X1 est de retour en stock"
  }
}
```

```json Vidéo theme={null}
{
  "type": "media",
  "content": {
    "media_type": "video",
    "media_url": "https://cdn.example.com/tutorials/setup.mp4",
    "caption": "Comment configurer votre X1"
  }
}
```

```json Document theme={null}
{
  "type": "media",
  "content": {
    "media_type": "document",
    "media_url": "https://cdn.example.com/invoices/A-1042.pdf",
    "filename": "Facture A-1042.pdf",
    "caption": "Votre facture"
  }
}
```

```json Audio theme={null}
{
  "type": "media",
  "content": {
    "media_type": "audio",
    "media_url": "https://cdn.example.com/messages/welcome.ogg"
  }
}
```

La légende (1 024 caractères au plus) s'affiche sous les images, les vidéos et les documents ; les messages audio n'en ont pas. WhatsApp applique ses propres limites de taille et de format aux fichiers.

## Modèle

Le seul message que vous pouvez envoyer hors de la fenêtre de 24 heures : un modèle approuvé, avec son en-tête, ses variables et ses boutons. Donnez la valeur de ses boutons dynamiques dans `content.buttons` (`{ "0": "A-1042" }`) et, pour un modèle d'authentification, le code dans `content.code`. Voir [Envoyer un modèle WhatsApp](https://docs.shortext.ny-corp.io/fr/api-reference/guides/send-a-template.md).

```json theme={null}
{
  "type": "template",
  "content": {
    "template_name": "order_shipped",
    "language": "fr",
    "header": { "url": "https://cdn.example.com/parcels/A-1042.jpg" },
    "body": { "name": "Brice", "order": "A-1042" }
  }
}
```

## Flow WhatsApp

Ouvre un [Flow WhatsApp](https://developers.facebook.com/docs/whatsapp/flows) créé dans Meta Business Manager : un formulaire sur plusieurs écrans (réservation, inscription, sondage) à l'intérieur de WhatsApp.

```json theme={null}
{
  "type": "interactive",
  "content": {
    "type": "flow",
    "header": { "type": "text", "value": "Réserver une visite" },
    "body": "Choisissez une date et une heure pour votre rendez-vous.",
    "action": {
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "booking-237699999999",
        "flow_id": "1234567890123456",
        "mode": "published",
        "flow_cta": "Réserver",
        "flow_action": "navigate",
        "flow_action_payload": { "screen": "APPOINTMENT", "data": { "shop": "Douala" } }
      }
    }
  }
}
```

| Champ | Limites |
| - | - |
| `header` | Facultatif. `text` ou `image`. |
| `action.parameters.flow_message_version` | Obligatoire, une chaîne, par exemple `"3"`. |
| `action.parameters.flow_token` | Obligatoire. Votre propre jeton, renvoyé avec les réponses du flow. |
| `action.parameters.flow_id` ou `flow_name` | L'un des deux : l'identifiant numérique ou le nom du flow. |
| `action.parameters.mode` | Obligatoire : `published`, ou `draft` pour tester un flow pas encore publié. |
| `action.parameters.flow_cta` | Obligatoire, le texte du bouton, 30 caractères au plus. |
| `action.parameters.flow_action` | Obligatoire : `navigate` (ouvrir un écran) ou `data_exchange` (votre endpoint fournit le premier écran). |
| `action.parameters.flow_action_payload` | Facultatif avec `navigate` : le premier `screen` et ses `data`. |

## Demande de paiement

Demande au contact de payer un montant. Vous donnez le montant ; Shortext crée le lien de paiement et envoie un message avec un bouton **Payer** qui mène à sa page de paiement sécurisée.

```json theme={null}
{
  "type": "interactive",
  "content": {
    "type": "payment",
    "body": "Votre commande A-1042 est prête à être livrée.",
    "action": {
      "parameters": {
        "amount": 25000,
        "currency": "XAF",
        "order_id": "A-1042",
        "callback_url": "https://api.example.com/payments/callback"
      }
    }
  }
}
```

| Champ | Description |
| - | - |
| `body` | Obligatoire. Shortext y ajoute le montant (et la référence de la commande). |
| `action.parameters.amount` | Obligatoire, un nombre. |
| `action.parameters.currency` | Obligatoire, par exemple `XAF` ou `EUR`. |
| `action.parameters.order_id` | Facultatif, votre référence de commande. |
| `action.parameters.callback_url` | Facultatif, votre URL à prévenir du paiement. |

Le bouton affiche « Pay {montant} {devise} ». Sans en-tête, Shortext ajoute un en-tête image avec la référence de la commande. N'envoyez ni `display_text` ni `url` : Shortext construit le bouton.

## Carrousel

Plusieurs cartes que le contact fait défiler, chacune avec une image ou une vidéo, un texte et un bouton lien.

`content.action` est transmis tel quel à WhatsApp : utilisez l'objet `action` du [message carrousel interactif de Meta](https://developers.facebook.com/docs/whatsapp/cloud-api/messages/interactive-media-carousel-messages).

```json theme={null}
{
  "type": "interactive",
  "content": {
    "type": "carousel",
    "body": "Nos nouveautés",
    "action": {
      "cards": [
        {
          "card_index": 0,
          "type": "cta_url",
          "header": { "type": "image", "image": { "link": "https://cdn.example.com/products/x1.jpg" } },
          "body": { "text": "X1, 120 000 XAF" },
          "action": { "name": "cta_url", "parameters": { "display_text": "Voir le X1", "url": "https://www.example.com/x1" } }
        },
        {
          "card_index": 1,
          "type": "cta_url",
          "header": { "type": "image", "image": { "link": "https://cdn.example.com/products/x2.jpg" } },
          "body": { "text": "X2, 150 000 XAF" },
          "action": { "name": "cta_url", "parameters": { "display_text": "Voir le X2", "url": "https://www.example.com/x2" } }
        }
      ]
    }
  }
}
```

Chaque carte demande un en-tête de type `image` ou `video` et un texte de 160 caractères au plus.

## Pas encore disponible

Les **listes** (un menu d'options regroupées en sections) et les **réponses rapides** ne peuvent pas encore être envoyées par l'API. Cette page sera mise à jour quand elles le pourront.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.