Sign inGet started

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"
}
typeChampCe qu'il contient
buttonbuttonLe slug et le text d'un bouton de réponse ou d'un bouton de réponse rapide d'un template
listlistLe 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 :
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