Webhooks firmados
En lugar de consultar la API en bucle, deja que WhatSetter te empuje los eventos en cuanto suceden.
Los eventos
Sección titulada «Los eventos»| Evento | Se dispara cuando |
|---|---|
contact.qualified |
El agente califica un lead (tus criterios del prompt) |
contact.not_qualified |
El agente descarta un lead |
booking.created |
Se agenda una reunión en la conversación |
message.received |
Un lead responde |
agent.disconnected |
Un número de WhatsApp se desconecta |
Suscribirse
Sección titulada «Suscribirse»curl -X POST "https://app.whatsetter.com/api/v1/webhooks" \ -H "Authorization: Bearer ws_live_TU_CLAVE" \ -H "Content-Type: application/json" \ -d '{"url":"https://tu-servidor.com/webhooks/whatsetter","events":["contact.qualified","booking.created"]}'La respuesta contiene el secreto de firma (whsec_…). Se muestra una
sola vez, guárdalo de inmediato. Solo endpoints HTTPS.
Prueba tu receptor cuando quieras:
POST /v1/webhooks/{id}/test te envía un evento firmado con
"is_test": true.
Verificar la firma
Sección titulada «Verificar la firma»Cada entrega va firmada HMAC-SHA256 del cuerpo bruto:
X-Whatsetter-Event: booking.createdX-Whatsetter-Delivery: <id único>X-Whatsetter-Signature: sha256=<hex>import crypto from 'node:crypto';
function verify(rawBody, header, secret) { const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(rawBody) // el cuerpo BRUTO, antes de cualquier JSON.parse .digest('hex'); return crypto.timingSafeEqual(Buffer.from(header), Buffer.from(expected));}Entrega
Sección titulada «Entrega»- Al menos una vez: tras un incidente de red, un mismo evento puede
llegar dos veces. Deduplica con el
event_iddel payload. - Responde
2xxrápido (procesa en asíncrono); cualquier otro código cuenta como fallo.

