Catálogo de eventos
SIVO emite los siguientes eventos disponibles para webhook:
- call.created — nueva llamada (inbound u outbound).
- call.answered — agente acepta.
- call.transferred — transferencia ciega/atendida/3-way.
- call.ended — colgado con CDR completo.
- call.recorded — grabación disponible con URL pre-firmada.
- transcript.segment — segmento de transcripción live.
- transcript.completed — transcripción final consolidada.
- queue.entered — llamada entra en cola ACD.
- queue.abandoned — caller cuelga antes de ser atendido.
- agent.status_changed — Available / On Call / On Break / Logged Out.
- agent.paused — pausa con motivo.
- ivr.completed — flujo IVR finalizado con variables capturadas.
- ai_agent.completed — conversación IA terminada con exit_reason.
Firma HMAC SHA-256
Cada request lleva en el header X-Sivo-Signature: sha256=<hex>
el HMAC del body con tu webhook_secret. Cómo verificarlo en
Node.js:
const crypto = require('crypto');
const signature = req.headers['x-sivo-signature'];
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.rawBody)
.digest('hex');
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send('invalid signature');
} Reintentos con backoff exponencial
Si tu endpoint devuelve un status fuera de 2xx, SIVO reintenta hasta 6 veces con backoff exponencial: 5s, 30s, 2min, 10min, 1h, 6h. Tras el sexto fallo, el evento pasa a la dead-letter queue consultable desde el dashboard. Puedes reintentarlo manualmente o descargarlo como JSON.
Idempotencia
Cada webhook lleva un X-Sivo-Event-Id único. Si tu pipeline lo
recibe dos veces (por timeout en tu lado, por ejemplo), descártalo. SIVO
nunca cambia el ID en un reintento.
Configuración
- Múltiples endpoints por tenant — uno para CRM, otro para BI, otro para Slack.
- Filtros por evento — suscribe solo a lo que te interesa.
- Tester integrado — dispara un evento sintético desde el dashboard para validar tu endpoint.
- Logs por endpoint con últimos 100 envíos + status + latencia.
Limitaciones
- Body máximo 256 KB.
- Timeout 10s — si tu endpoint tarda más, contarán como fallo. Mejor encolar internamente y responder 200 inmediato.
- HTTPS obligatorio (no aceptamos HTTP plano).