# Recevoir les réponses interactives WhatsApp

Un tap sur un bouton de réponse, une ligne de liste ou un bouton de réponse rapide d'un template arrive comme un message entrant distinct portant `interactive_reply`. La branche vous renvoie le handle que vous avez défini à l'envoi, de sorte qu'un flux se branche sur votre propre identifiant plutôt que sur le libellé que le contact a vu.

## Ce que porte une réponse interactive entrante

`type` indique le type de tap, et le champ du même nom le contient :

```json
{
  "id": "wam_01kyb2m4xq7whs0d8n3prv6tez",
  "direction": "inbound",
  "from": { "phone_number": "+14155550100" },
  "to": { "phone_number": "+13124495569" },
  "status": "received",
  "in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
  "interactive_reply": {
    "type": "button",
    "button": { "slug": "cancel-booking", "text": "Cancel" }
  },
  "created_at": "2026-08-25T09:04:11Z"
}
```

| `type`   | Champ    | Ce qu'il contient                                                                                         |
| -------- | -------- | --------------------------------------------------------------------------------------------------------- |
| `button` | `button` | Le `slug` et le `text` d'un bouton de réponse ou d'un bouton de réponse rapide d'un template              |
| `list`   | `list`   | Le `slug` et le `text` de la ligne choisie par le contact, plus sa `description` lorsqu'elle en avait une |

Une ligne de liste remplace `button` par `list` et ajoute la deuxième ligne qu'affichait la ligne :

```json
{
  "interactive_reply": {
    "type": "list",
    "list": {
      "slug": "priority_express",
      "text": "Priority Mail Express",
      "description": "Next day to 2 days"
    }
  }
}
```

`slug` est le handle que vous avez déclaré et que le contact n'a jamais vu ; `text` est le libellé qu'il a lu. Branchez-vous sur `slug`. Les libellés sont reformulés et traduits, et lors d'un tap sur un bouton de réponse rapide d'un template, le `slug` est le payload déclaré par ce template, que WhatsApp fixe au propre libellé du bouton.

La liste des types est ouverte : WhatsApp ajoute des types interactifs au fil du temps. Traitez un `type` que vous ne reconnaissez pas comme un type futur plutôt qu'une erreur, et rabattez-vous sur la journalisation du message au lieu de faire échouer la lecture.

## Relier un tap à ce que vous avez envoyé

`in_reply_to_message_id` identifie le message qui portait le bouton ou le menu, ce qui vous permet de savoir à quelle question cette réponse appartient. WhatsApp ne le signale pas à chaque tap, et la résolution peut aussi échouer ; dans ce cas, le champ est omis plutôt que renvoyé vide. La page [réponses citées](/docs/guides/whatsapp/receiving-whatsapp#quoted-replies) du hub explique ce qu'un échec signifie et combien de temps un message cité reste résolvable.

Lorsque la corrélation doit être fiable, placez votre propre référence dans le `slug` lui-même, ou dans `metadata` à l'envoi, plutôt que de dépendre du champ. Consultez [citer un message](/docs/guides/whatsapp/sending-whatsapp#quoting-a-message) pour le côté envoi.

## Les deux taps qui arrivent ailleurs

Deux types interactifs répondent sans aucun `interactive_reply` :

- Une [demande de localisation](/docs/guides/whatsapp/message-types/interactive/location-requests) revient sous forme d'une [localisation](/docs/guides/whatsapp/receiving-whatsapp/location) entrante ordinaire.
- Une [demande d'informations de contact](/docs/guides/whatsapp/message-types/interactive/contact-info-requests) revient sous forme de [fiches de contact](/docs/guides/whatsapp/receiving-whatsapp/contact-cards), avec `origin` défini sur `contact_request`.

Un [bouton de lien](/docs/guides/whatsapp/message-types/interactive/cta-url-buttons) ne renvoie rien : le contact quitte pour l'URL, et aucun message entrant n'enregistre le tap. Une intégration qui surveille uniquement `interactive_reply` manque les trois.

## Le payload du webhook

`whatsapp.received` porte la branche `interactive_reply` sur l'enveloppe d'événement, de sorte qu'un bot peut répondre à un tap sans relire le message :

```json
{
  "type": "whatsapp.received",
  "timestamp": "2026-08-25T09:04:11.118Z",
  "data": {
    "whatsapp_id": "wam_01kyb2m4xq7whs0d8n3prv6tez",
    "workspace_id": "ws_01ky7m235keycbnwyajabe1a6b",
    "direction": "inbound",
    "from": { "phone_number": "+14155550100", "display_name": "Alex Rivera" },
    "to": { "phone_number": "+13124495569" },
    "in_reply_to_message_id": "wam_01kya19eknftrs2s6p82asmvnh",
    "interactive_reply": {
      "type": "button",
      "button": { "slug": "cancel-booking", "text": "Cancel" }
    },
    "tags": null,
    "metadata": null
  }
}
```

## Points à surveiller

- **`interactive` et `interactive_reply` sont des directions opposées.** `interactive` est ce que vous avez envoyé et n'arrive jamais en entrant ; `interactive_reply` est ce que le contact a tapé et n'apparaît jamais sur un message sortant.
- **Un tap réinitialise la fenêtre de service.** C'est un message entrant, il rouvre donc 24 heures de réponses libres de la même manière qu'un texte.
- **Un contact peut taper deux fois sur le même bouton.** Rien ne déduplique les taps, chacun est donc un message distinct avec son propre ID. Rendez l'action que vous effectuez sur un `slug` idempotente.
- **Un tap sur un ancien menu arrive quand même.** Un contact qui fait défiler vers le haut peut taper sur un bouton datant de plusieurs jours. Vérifiez que le flux est encore ouvert au lieu de supposer que le tap répond à votre dernier message.

## Étapes suivantes

- [Fonctionnement de la réception](/docs/guides/whatsapp/receiving-whatsapp) : l'enveloppe entrante, la récupération des médias et le webhook `whatsapp.received`
- [Messages interactifs WhatsApp](/docs/guides/whatsapp/message-types/interactive) : les six types sur lesquels un destinataire peut taper
- [Boutons de réponse WhatsApp](/docs/guides/whatsapp/message-types/interactive/reply-buttons) : le côté envoi d'un tap sur un bouton
- [Menus de liste WhatsApp](/docs/guides/whatsapp/message-types/interactive/list-menus) : le côté envoi d'un choix de ligne

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/products/whatsapp) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
