Webhook signé envoyé à chaque changement de statut de livraison (envoyé, livré, lu, échoué) d’un message WhatsApp que vous envoyezLe Webhook des accusés de lecture délivre un rappel HTTP signé à votre serveur chaque fois qu’un message WhatsApp que vous envoyez change de statut —
sent, delivered, read ou failed. Utilisez-le pour le suivi de livraison, la confirmation de lecture et les pistes d’audit.
Il est configuré par expéditeur WhatsApp : différents expéditeurs peuvent donc pointer vers des points de terminaison différents.
Configuration du webhook
Pour activer les accusés de lecture pour un expéditeur :- Modifiez votre expéditeur WhatsApp et ouvrez la section Read Receipts Webhook
- Saisissez votre Webhook URL et enregistrez
- Un Signing Secret est généré automatiquement — utilisez-le pour vérifier la signature de chaque requête
whatsapp_message_id renvoyé par les points de terminaison Envoyer un modèle de message et Envoyer un message libre, afin que vous puissiez rattacher chaque mise à jour au message d’origine.
Format de la requête
Le webhook est envoyé sous forme de requête POST vers l’URL que vous avez configurée, avec un corps JSON et un en-têteX-Signature-256.
Structure de la charge utile
string
Le type d’événement. Valeur :
message_statusinteger
Identifiant numérique du message — le même
whatsapp_message_id que celui renvoyé lors de l’envoi du message. Utilisez-le pour corréler la mise à jour de statut avec l’envoi d’origine.string
Identifiant de message du fournisseur pour les messages envoyés via Twilio, ou
nullstring
Identifiant de message du fournisseur (
wamid WhatsApp) pour les messages envoyés via l’API Meta Cloud, ou nullstring
Identifiant unique (UUID) de la conversation à laquelle appartient le message, ou
nullstring
Identifiant unique (UUID) de l’assistant connecté à l’expéditeur, ou
nullobject
L’expéditeur WhatsApp depuis lequel le message a été envoyé
string
Le numéro de téléphone du destinataire
string
Le numéro de téléphone de l’expéditeur
string
Sens du message. Valeur :
outboundstring
Le nouveau statut de livraison. Valeurs possibles :
sent, delivered, read, failed, undeliveredinteger
Code d’erreur du fournisseur lorsque
status vaut failed ou undelivered, sinon nullstring
Message d’erreur brut du fournisseur en cas d’échec du message, sinon
nullstring
Description lisible de l’erreur, sinon
nullstring
Horodatage ISO 8601 du moment où la plateforme a enregistré le changement de statut, dans le fuseau horaire configuré par le propriétaire du numéro WhatsApp
string
Horodatage ISO 8601 de l’heure d’événement propre à l’opérateur, dans le fuseau horaire configuré par le propriétaire. Présent pour les messages envoyés via l’API Meta Cloud ;
null via Twilio (le rappel de statut de Twilio n’inclut pas d’heure d’événement). Préférez ce champ lorsqu’il est présent — c’est l’heure de référence de l’opérateur.Vérification de la signature
Chaque requête inclut un en-têteX-Signature-256 contenant un HMAC-SHA256 du corps brut de la requête, signé avec le Signing Secret de votre expéditeur :
Comportement des nouvelles tentatives
Si votre point de terminaison renvoie un statut non-2xx ou si la requête échoue, la livraison est retentée :
Les erreurs serveur (5xx) et les limitations de débit (429) déclenchent une nouvelle tentative. Les erreurs client (4xx) sont considérées comme un point de terminaison mal configuré et ne déclenchent pas de nouvelle tentative.
Remarques importantes
- Le webhook est configuré par expéditeur — chaque expéditeur peut avoir sa propre URL et son propre secret.
- Les événements déclenchés par le bouton Make test request dans les paramètres de l’expéditeur incluent un champ
test: truesupplémentaire et utilisent des valeurs d’exemple. Les vraies mises à jour de statut n’incluent jamaistest. readne se déclenche que si le destinataire a activé les accusés de lecture dans ses paramètres de confidentialité WhatsApp.deliveredse déclenche toujours.- Les statuts peuvent arriver dans le désordre ou être renvoyés par le fournisseur. Nous ne transmettons que la véritable progression, de sorte que vous ne recevrez pas de
deliveredaprès unreadpour le même message — mais vous devriez tout de même traiter le webhook comme la source de vérité et dédupliquer parwhatsapp_message_id+status. timestampest toujours l’heure à laquelle la plateforme a enregistré le changement (dans le fuseau horaire du propriétaire du numéro).provider_timestampest l’heure de référence de l’opérateur lorsqu’elle est disponible — préférez-la pour plus de précision, et repliez-vous surtimestamplorsqu’elle vautnull.- Utilisez Regenerate dans les paramètres de l’expéditeur pour faire tourner le secret de signature s’il venait à être exposé.