x-api-key. Un abonnement webhook est
toujours rattaché à une session (pas au compte entier) — cohérent avec le
reste de l’API (statuts récurrents, contacts).
La création et la suppression d’un abonnement webhook se font depuis le
dashboard WaaConnect, pas via l’API à clé.
Seule la lecture (liste des abonnements actifs) est disponible ici.
Catalogue d’events
Passez
events: ["*"] à la création pour tout recevoir, ou une liste
explicite pour ne recevoir que certains events.
Format de l’enveloppe
Tous les events partagent la même structure :eventId est unique par event — utilisez-le pour dédupliquer si vous
recevez un retry après avoir déjà traité l’event.
data selon l’event
chatType, fromPhone et identifiants @lid
WhatsApp adresse aujourd’hui beaucoup de contacts via un identifiant
opaque @lid (ex: 39741751881852@lid) plutôt que le JID classique basé
sur le numéro de téléphone (@s.whatsapp.net) — une évolution du
protocole liée à la confidentialité du numéro, pas une anomalie.
chatType(individual/group/status/broadcast) permet d’identifier directement le type de conversation sans avoir à parserchatIdvous-même.fromPhoneest une tentative de résolution du numéro réel derrière un@lid. Peut êtrenullsi la correspondance n’est pas encore connue (typiquement pour un tout nouveau contact) — pas de garantie de résolution immédiate ni systématique.
Pour répondre à un message reçu, utilisez
chatId comme destinataire
(to de Envoyer un message texte).
Dans un groupe, from désigne le membre qui a écrit, pas le groupe
lui-même — n’utilisez jamais from comme destinataire dans ce cas.@lid fonctionne — pas besoin d’attendre ou
d’avoir la résolution fromPhone pour répondre :
- L’URL/numéro passé en
toest utilisé tel quel dès qu’il contient déjà un@(donc unchatIden@lidn’est jamais reformaté à tort comme un numéro). - WhatsApp/Baileys gère nativement le chiffrement vers un destinataire
@lid. - Nuance : l’étape interne de vérification “ce numéro existe-t-il sur
WhatsApp ?” n’est pas supportée par WhatsApp pour un
@lid— elle est silencieusement ignorée pour ce cas précis (pas d’erreur), et l’envoi part quand même normalement vers lechatIdd’origine.
fromPhone, quand il est renseigné (non null), fonctionne aussi comme
destinataire — c’est un JID classique, sans particularité.
Sécurité — vérifier la signature
Chaque requête envoyée à votre URL inclut deux headers :X-Waaconnect-Event: le type d’event (ex:message.received)X-Waaconnect-Signature:sha256=<hmac>— HMAC-SHA256 du corps JSON brut, signé avec lesecretrenvoyé à la création de l’abonnement.
Fiabilité
- Livraison via une file dédiée avec retry : 5 tentatives, backoff exponentiel (5s / 25s / 125s / …), timeout 8s par tentative.
- Après épuisement des tentatives, l’event n’est plus retenté — votre
endpoint doit répondre
2xxrapidement pour être considéré comme reçu.

