Webhooks posteriores a la llamada
Recibe notificaciones cuando terminan las llamadas y se completa el análisis mediante webhooks.
Resumen
Los webhooks posteriores a la llamada te permiten recibir información detallada sobre una llamada después de que se complete el análisis. Cuando están activados, ElevenLabs enviará una solicitud POST a la ruta de API que especifiques con datos completos de la llamada.
ElevenLabs admite tres tipos de webhooks posteriores a la llamada:
- Webhooks de transcripción (
post_call_transcription): contienen datos completos de la conversación, incluidas transcripciones, resultados del análisis y metadatos - Webhooks de audio (
post_call_audio): contienen datos mínimos con el audio de toda la conversación codificado en base64 - Webhooks de error al iniciar la llamada (
call_initiation_failure): contienen información sobre intentos fallidos de iniciar una llamada, incluidos los motivos del error y los metadatos
Activar webhooks posteriores a la llamada
Puedes activar los webhooks posteriores a la llamada para todos los agentes de tu espacio de trabajo desde la página de configuración de ElevenAgents.

Los webhooks posteriores a la llamada deben devolver un código de estado 200 para considerarse correctos. Los webhooks que fallan repetidamente se desactivan automáticamente si hay 10 o más fallos consecutivos y la última entrega correcta fue hace más de 7 días o nunca se han entregado correctamente.
Los webhooks posteriores a la llamada se pueden reintentar automáticamente si fallan. Consulta los reintentos de webhooks.
Autenticación
Es importante que el listener valide todos los webhooks entrantes. Actualmente, los webhooks admiten autenticación mediante firmas HMAC. Configura la autenticación HMAC de esta forma:
- Almacena de forma segura el secreto compartido generado al crear el webhook
- Verifica la cabecera ElevenLabs-Signature en tu ruta de API mediante el SDK
El SDK de JavaScript incluye constructEvent; el SDK de Python incluye construct_event con rawBody, sig_header y secret (en Python no se llaman payload / signature). Ambos verifican la firma, validan la marca de tiempo y analizan la carga útil JSON.
Python
JavaScript
Ejemplo de controlador de webhook con FastAPI:
Cabeceras de solicitud personalizadas
Además de la validación de firma HMAC, puedes incluir cabeceras personalizadas en cada entrega de webhook. Esto resulta útil para enviar claves de API, tokens bearer u otras cabeceras de autenticación que requiera la ruta de API receptora.
Panel de control
CLI
SDK
Actualmente no se pueden configurar cabeceras personalizadas desde el panel de control de ElevenAgents. Usa el SDK o la API para establecer cabeceras personalizadas.
Las cabeceras personalizadas funcionan junto con la autenticación HMAC. auth_type debe seguir establecido en hmac,
y las cabeceras personalizadas se envían además de la cabecera ElevenLabs-Signature.
Las cabeceras personalizadas son de solo escritura. La ruta de API para listar webhooks
no devuelve request_headers en su respuesta, por lo que no puedes consultar qué cabeceras están
configuradas para un webhook.
Listas de IP permitidas
Para mayor seguridad, puedes añadir las IP de salida estáticas de ElevenLabs a tu lista de IP permitidas. Consulta listas de IP permitidas para ver la lista completa de direcciones IP.
Usar una lista de IP permitidas junto con la validación de firma HMAC proporciona varias capas de seguridad.
Anulaciones de webhook por agente
De forma predeterminada, todos los agentes de tu espacio de trabajo usan el webhook configurado en los ajustes del espacio de trabajo. Puedes anularlo para cada agente y enviar datos posteriores a la llamada a rutas de API distintas para agentes diferentes.
Panel de control
CLI
SDK
Abre los ajustes del agente
Ve a tu agente en el panel de control de ElevenAgents y entra en Configuración.
post_call_webhook_id debe hacer referencia a un webhook que ya exista en tu espacio de trabajo. También puedes especificar qué tipos de eventos enviar mediante el array events:
Estructura de la respuesta del webhook
ElevenLabs envía tres tipos distintos de webhooks posteriores a la llamada, cada uno con estructuras de datos diferentes:
Webhooks de transcripción (post_call_transcription)
Contienen datos completos de la conversación, incluidas transcripciones completas, resultados del análisis y metadatos.
Campos de nivel superior
Estructura del objeto de datos
El objeto data contiene:
Webhooks de audio (post_call_audio)
Contienen datos mínimos con el audio de toda la conversación como MP3 codificado en base64.
Campos de nivel superior
Estructura del objeto de datos
El objeto data contiene únicamente:
Los webhooks de audio contienen únicamente los tres campos enumerados anteriormente. NO incluyen datos de transcripción, metadatos, resultados del análisis ni ningún otro detalle de la conversación.
Webhooks de error al iniciar la llamada (call_initiation_failure)
Contienen información sobre intentos de iniciar llamadas de telefonía, incluidos los motivos del error y los metadatos del proveedor de telefonía.
Los eventos de webhook de error al iniciar la llamada se envían cuando una llamada no se puede iniciar debido a errores de conexión, a que el usuario rechaza la llamada o a que no contesta. Si una llamada va al buzón de voz o la responde un servicio automatizado, no se envía ningún webhook de error al iniciar la llamada porque esta se inició correctamente.
Campos de nivel superior
Estructura del objeto de datos
El objeto data contiene:
Para las llamadas salientes realizadas mediante Twilio, failure_reason se deriva del CallStatus de Twilio: busy y no-answer se transmiten sin cambios, y failed se informa como unknown. Otros estados de llamada de Twilio no envían un webhook de error al iniciar la llamada.
Estructura del objeto de metadatos
La estructura del objeto metadata varía según si la llamada saliente se realizó mediante Twilio o mediante trunking SIP. El objeto incluye un campo type que distingue entre ambos y un campo body con detalles específicos del proveedor.
Metadatos SIP (type: "sip"):
El objeto body de los metadatos SIP contiene:
Metadatos de Twilio (type: "twilio"):
Ejemplos de cargas útiles de webhook
Ejemplo de webhook de transcripción
Ejemplo de webhook de audio
Ejemplos de webhook de error al iniciar la llamada
Ejemplo de metadatos de Twilio
Ejemplo de metadatos SIP
Entrega de webhooks de audio
Los webhooks de audio se entregan por separado de los webhooks de transcripción y contienen solo los campos esenciales necesarios para identificar la conversación, junto con los datos de audio codificados en base64.
Puedes activar o desactivar los webhooks de audio con el interruptor “Enviar datos de audio” en la configuración de tu webhook. Esta opción se puede configurar tanto a nivel del espacio de trabajo (en los ajustes de ElevenAgents) como a nivel del agente (en las anulaciones de webhook de cada agente).
Entrega por streaming
Los webhooks de audio se entregan como solicitudes HTTP en streaming con la cabecera transfer-encoding: chunked para gestionar archivos de audio grandes de forma eficiente. Cada solicitud agota el tiempo de espera después de 5 minutos.
Reintentos
Cuando los reintentos están activados en el webhook, las entregas de audio fallidas se reintentan con la misma programación que los webhooks de transcripción. Un reintento vuelve a enviar toda la carga útil de audio, así que elimina duplicados mediante conversation_id. Consulta los reintentos de webhooks para conocer la programación, los errores que admiten reintento y los límites de tamaño de audio.
Procesar webhooks de audio
Como los webhooks de audio se entregan mediante codificación de transferencia por fragmentos, tendrás que gestionar correctamente los datos en streaming:
Los webhooks de audio pueden contener archivos grandes, así que asegúrate de que la ruta de API de tu webhook pueda gestionar solicitudes en streaming y tenga suficiente capacidad de memoria y almacenamiento. El audio se entrega en formato MP3.
Casos de uso
Seguimientos automatizados de llamadas
Los webhooks posteriores a la llamada te permiten crear flujos de trabajo automatizados que se activan inmediatamente después de que termine una llamada. Estas son algunas aplicaciones prácticas:
Integración con CRM
Actualiza tu sistema de gestión de relaciones con clientes con los datos de la conversación en cuanto se complete una llamada:
Conversaciones con estado
Mantén el contexto de la conversación entre varias interacciones almacenando y recuperando el estado:
- Cuando comienza una llamada, proporciona el ID de usuario como variable dinámica.
- Cuando termina una llamada, configura la ruta de API de tu webhook para almacenar los datos de la conversación en tu base de datos, basándote en el ID de usuario extraído de
dynamic_variables. - Cuando el usuario vuelva a llamar, puedes recuperar este contexto y pasarlo a la nueva conversación en una variable dinámica
{{previous_topics}}. - Esto crea una experiencia fluida en la que el agente “recuerda” las interacciones anteriores.