Ir al contenido

Webhooks firmados

En lugar de consultar la API en bucle, deja que WhatSetter te empuje los eventos en cuanto suceden.

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
Terminal window
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.

Cada entrega va firmada HMAC-SHA256 del cuerpo bruto:

X-Whatsetter-Event: booking.created
X-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));
}
  • Al menos una vez: tras un incidente de red, un mismo evento puede llegar dos veces. Deduplica con el event_id del payload.
  • Responde 2xx rápido (procesa en asíncrono); cualquier otro código cuenta como fallo.