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 :
Exemple de code
{
"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 :
Exemple de code
{
"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 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 pour le côté envoi.
Les deux taps qui arrivent ailleurs
Deux types interactifs répondent sans aucun interactive_reply :
- Une demande de localisation revient sous forme d'une localisation entrante ordinaire.
- Une demande d'informations de contact revient sous forme de fiches de contact, avec origin défini sur contact_request.
Un bouton de lien 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 :
Exemple de code
{
"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 : l'enveloppe entrante, la récupération des médias et le webhook whatsapp.received
- Messages interactifs WhatsApp : les six types sur lesquels un destinataire peut taper
- Boutons de réponse WhatsApp : le côté envoi d'un tap sur un bouton
- Menus de liste WhatsApp : le côté envoi d'un choix de ligne
Ressources associées
Poursuivez avec la documentation, les guides et les exemples sur ce sujet. Les ressources sont en anglais.
Regarder le guideConnecting WhatsApp to Bird: from buying a number to a live channelComprendre le conceptWhat is the 24-hour customer service window on WhatsApp?Utiliser l'outilWhatsApp message builderExplorer la fonctionnalitéWhatsApp
Essayez la pratique et obtenez un guide d'implémentation