Passer au contenu principal
Les webhooks envoient des événements à votre serveur au moment où ils se produisent : un contact écrit, un message est remis, une personne prend une conversation en main, un client termine la connexion de son numéro WhatsApp. Préférez-les à l’interrogation répétée de l’API.

Créer un endpoint

Créez les endpoints dans le tableau de bord (Développeur > Webhooks) ou par l’API (POST /webhooks, permission Gérer les intégrations) :
La réponse contient le secret de signature, affiché une seule fois. Conservez-le avec vos autres secrets.
Un endpoint reçoit les charges utiles dans la version de l’API utilisée pour le créer (api_version) : une nouvelle version de l’API ne change donc jamais ce que vous recevez.

Événements

GET /webhooks/events renvoie le catalogue. De nouveaux types d’événements peuvent apparaître à tout moment : ignorez ceux que vous ne traitez pas.

Charge utile

Chaque livraison est un POST avec un corps JSON :
data dépend du type :

En-têtes

Vérifier la signature

Vérifiez chaque requête avant de lui faire confiance :
  1. Lisez le corps brut, avant toute analyse JSON : le réencoder change les octets et casse la signature.
  2. Rejetez les requêtes dont l’horodatage s’écarte de plus de 5 minutes de votre horloge (rejeu).
  3. Comparez attendu avec X-Shortext-Signature en temps constant.

Répondre et dédoublonner

  • Répondez avec n’importe quel statut 2xx en moins de 10 secondes. Faites le traitement après avoir répondu, dans une file.
  • Tout le reste (autre statut, délai dépassé, redirection, erreur réseau) est un échec et sera relancé.
  • Un même événement peut arriver plusieurs fois. Dédoublonnez sur l’id de l’événement (evt_...), identique lors des relances et des nouvelles livraisons.
  • Les événements peuvent arriver dans le désordre : appuyez-vous sur created_at et sur l’API quand l’ordre compte.

Relances

Une livraison échouée est relancée avec un délai croissant : après 10 secondes, 1 minute, 5 minutes, 30 minutes, 2 heures, 6 heures et 12 heures, soit 8 tentatives sur environ 21 heures. Après la dernière, la livraison est marquée en échec. Un endpoint qui échoue sans interruption pendant 72 heures est désactivé : is_enabled passe à false et disabled_reason en donne la raison. Corrigez votre serveur, puis réactivez l’endpoint (PUT /webhooks/{id} avec "is_enabled": true).

Tester, inspecter et relivrer