Aller au contenu

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.

É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
Fenêtre de terminal
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.

Chaque livraison est signée HMAC-SHA256 du corps brut :

X-Whatsetter-Event: booking.created
X-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));
}
  • Au moins une fois : en cas d’incident réseau, un même événement peut arriver deux fois — déduplique sur l’event_id du payload.
  • Réponds 2xx rapidement (fais ton traitement en asynchrone) ; tout autre code est considéré comme un échec.