Skip to main content
Cuando tus agentes terminan llamadas (o fallan), Ryvo te manda un evento a una URL que tú configuras. Útil para:
  • Actualizar el deal en tu CRM con el resultado de la llamada.
  • Disparar un follow-up automatizado si la llamada falló.
  • Loggear el resumen de cada conversación en tu data warehouse.

Configurar tu webhook

  1. Entra a app.ryvo.so/developers.
  2. En la sección Webhook, agrega tu URL pública (HTTPS obligatorio).
  3. Copia el signing secret que generamos. Solo se muestra una vez: guárdalo en un secret manager. Lo necesitas para verificar la firma de cada evento.
La URL del webhook debe ser pública y aceptar peticiones POST. Si está detrás de un firewall o requiere auth, los eventos no van a llegar.

Eventos disponibles

Por cada ocurrencia recibes un solo evento: el canónico (conversation.*) si te suscribiste a él, o su alias (call.*) si no. Nunca los dos.
Las suscripciones creadas con el comodín * reciben únicamente la familia call.*. Para recibir conversation.* o analysis.ready hay que nombrarlos explícitamente en la lista de eventos del webhook. Desde el portal hoy sólo se eligen los call.*; si necesitas los otros, escríbenos a team@ryvo.so y los activamos en tu webhook.
Los agentes construidos con el Constructor (Ryvo Engine) emiten por ahora únicamente analysis.ready. Los eventos de inicio y fin de llamada del Engine llegarán cuando se abra el marcado por API.

Shape de un evento

Todos los eventos comparten esta estructura:
Dentro de data, dos identificadores distintos:
  • call_id: el handle call_… que te devolvió POST /v1/calls. Úsalo para casar el evento con la llamada que tú disparaste.
  • id: el identificador de la conversación en Ryvo. Es null en conversation.started porque en ese momento la conversación todavía no existe.

conversation.started / call.initiated

conversation.ended / call.completed

status puede ser completed, failure o unknown según el resultado del análisis de la llamada. El resumen nunca incluye la transcripción completa.

conversation.ended / call.failed (no se pudo iniciar)

analysis.ready

Las llaves de evaluation_results y data_collection son los identificadores que definiste en el Constructor (Análisis después de cada conversación).

Headers de cada delivery

Reintentos automáticos

Si tu endpoint responde con un código que no es 2xx o se cuelga más de 10 segundos, reintentamos automáticamente con backoff exponencial: Después del 4to intento fallido, marcamos la entrega como exhausted y no volvemos a intentar. Puedes ver el historial en app.ryvo.so/developers.

Idempotencia del lado del receptor

Aunque hagamos retry solo en errores, un mismo evento puede llegarte 2 veces (ej. tu endpoint procesó OK pero la respuesta 200 se perdió en la red). Por eso te mandamos X-Ryvo-Event-Id: guarda los IDs procesados y descarta duplicados.

Responde rápido

Tu endpoint debe responder 200 en menos de 10 segundos. Si necesitas hacer trabajo lento (LLM call, sync a una API externa), responde 200 inmediato y procesa async (cola, background job).

Próximos pasos

Verificar firmas

Cómo validar que el evento viene de Ryvo y no de un atacante.

Probar tu webhook

Desde el portal puedes mandarte un evento de prueba.