Webhooks
Fin de Llamada
Envía una notificación HTTP a tu endpoint cuando finaliza una llamada, independientemente del intento. El payload contiene la transcripción completa, la grabación, la duración y el análisis de la llamada finalizada.
Entrega
- Método:
POST - Content-Type:
application/json - Timeout de la petición: 30 segundos. Si tu endpoint no responde en 30s, tratamos el intento como fallido y reintentamos.
- Autorización: Si se ha configurado un bearer token para el agente, las peticiones incluyen un header
Authorization: Bearer <token>.
Payload
idstringsession.idstringstartedAtstringendedReasonstringcustomer-ended-call, user-not-contacted).messagesarraycustomer.namestringcustomer.phoneNumberstringvariableValuesobjectdurationSecondsintegerdetailsURLstringrecordingURLstringanalysis.successEvaluationbooleananalysis.structuredDataobjectanalysis.summarystringDetalles de los Mensajes
El campo messages contiene la transcripción completa de la conversación:
role: Rol del participante (system,agent,user)message: Contenido del mensaje
Respuesta a los eventos
Regresa cualquier código HTTP 2xx para confirmar la recepción. No inspeccionamos el cuerpo de la respuesta.
Cualquiera de los siguientes se trata como un fallo y dispara un reintento:
- Una respuesta 3xx, 4xx o 5xx
- Un error de red (conexión rechazada, fallo de DNS, error de TLS)
- Sin respuesta dentro del timeout de 30 segundos
Tu endpoint debe ser idempotente. Dado que reintentamos ante cualquier respuesta no-2xx, el mismo evento puede ser entregado más de una vez. Deduplica usando id.
Intenta responder en mucho menos de 30 segundos — idealmente confirma de inmediato (por ejemplo, encolando el evento del lado de tu sistema) y realiza cualquier procesamiento pesado de forma asíncrona.
Política de reintentos
Las entregas fallidas se reintentan automáticamente con backoff exponencial (cada demora es 3× la anterior):
| Intento | Demora tras el intento anterior |
|---|---|
| 1 | — (entrega inicial) |
| 2 | 5 segundos |
| 3 | 15 segundos |
| 4 | 45 segundos |
| 5 | 2 min 15 seg |
| 6 | 6 min 45 seg |
| 7 | 20 min 15 seg |
| 8 | 1 hr 45 seg |
| 9 | 3 hr 2 min 15 seg |
Después de nueve intentos el evento se descarta y no se reenviará. Si tu endpoint estuvo caído por más tiempo que la ventana de reintentos, deberías reconciliar el estado usando nuestra API en lugar de esperar un reenvío.