Saltar al contenido principal

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​

idstring
ID único de la llamada. Consistente en todos los webhooks que refieren a la misma llamada.
session.idstring
ID de sesión que agrupa todos los intentos de llamada al mismo cliente.
startedAtstring
Fecha y hora de inicio de la llamada en ISO 8601.
endedReasonstring
Motivo por el que finalizó la llamada (por ejemplo customer-ended-call, user-not-contacted).
messagesarray
Transcripción completa de la conversación.
customer.namestring
Opcional. Presente cuando se proporcionó un nombre al crear la llamada.
customer.phoneNumberstring
Número telefónico de destino en formato E.164.
variableValuesobject
Variables de entrada proporcionadas al crear la llamada.
durationSecondsinteger
Duración total de la llamada en segundos.
detailsURLstring
URL para ver detalles de la llamada en el dashboard.
recordingURLstring
Opcional. URL para descargar la grabación de audio. Presente solo cuando hay una grabación disponible.
analysis.successEvaluationboolean
Si el criterio de éxito se cumplió o no.
analysis.structuredDataobject
Variables de salida y sus respectivos valores.
analysis.summarystring
Resumen en lenguaje natural de la llamada.

Detalles 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):

IntentoDemora tras el intento anterior
1— (entrega inicial)
25 segundos
315 segundos
445 segundos
52 min 15 seg
66 min 45 seg
720 min 15 seg
81 hr 45 seg
93 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.