Webhooks signés
Plutôt que d’interroger l’API en boucle, laisse WhatSetter pousser les événements chez toi dès qu’ils se produisent.
Les événements
Section intitulée « Les événements »| Événement | Déclenché quand |
|---|---|
contact.qualified |
L’agent qualifie un lead (tes critères du prompt) |
contact.not_qualified |
L’agent écarte un lead |
booking.created |
Un rendez-vous est pris dans la conversation |
message.received |
Un lead répond |
agent.disconnected |
Un numéro WhatsApp se déconnecte |
S’abonner
Section intitulée « S’abonner »curl -X POST "https://app.whatsetter.com/api/v1/webhooks" \ -H "Authorization: Bearer ws_live_TA_CLE" \ -H "Content-Type: application/json" \ -d '{"url":"https://ton-serveur.com/webhooks/whatsetter","events":["contact.qualified","booking.created"]}'La réponse contient le secret de signature (whsec_…) — montré une seule
fois, stocke-le immédiatement. Endpoint HTTPS obligatoire.
Teste ta réception à tout moment :
POST /v1/webhooks/{id}/test t’envoie un événement signé avec
"is_test": true.
Vérifier la signature
Section intitulée « Vérifier la signature »Chaque livraison est signée HMAC-SHA256 du corps brut :
X-Whatsetter-Event: booking.createdX-Whatsetter-Delivery: <id unique>X-Whatsetter-Signature: sha256=<hex>import crypto from 'node:crypto';
function verify(rawBody, header, secret) { const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(rawBody) // le corps BRUT, avant tout JSON.parse .digest('hex'); return crypto.timingSafeEqual(Buffer.from(header), Buffer.from(expected));}Livraison
Section intitulée « Livraison »- Au moins une fois : en cas d’incident réseau, un même événement peut
arriver deux fois — déduplique sur l’
event_iddu payload. - Réponds
2xxrapidement (fais ton traitement en asynchrone) ; tout autre code est considéré comme un échec.

