Referencia de los Webhooks de la Voice API

Vonage utiliza webhooks junto con su Voice API para permitir que tu aplicación interactúe con la llamada. Hay dos puntos finales de webhook obligatorios y uno opcional:

  • Respuesta webhook se envía cuando se contesta una llamada. Esto es tanto para llamadas entrantes como salientes.
  • Evento webhook se envía para todos los eventos que se producen durante una llamada. Tu aplicación puede registrar, reaccionar o ignorar cada tipo de evento.
  • URL alternativa se utiliza cuando el webhook de Respuesta o Evento falla o devuelve un estado de error HTTP.
  • Errores también se envían al punto final del webhook de eventos si se producen.

Para más información general, consulte nuestro guía de webhooks.

Webhooks firmados

Los webhooks firmados son una forma de verificar que la solicitud proviene de Vonage y que su carga útil no ha sido alterada durante el tránsito. Voice API, al igual que Mensajes y Despacho admiten retrollamadas firmadas por defecto. Véase Descodificación de webhooks firmados para aprender a descodificar una firma JWT entrante.

Respuesta Webhook

Cuando se responde a una llamada entrante, se envía una solicitud HTTP a la aplicación answer_url que especificó al configurar la aplicación. Para las llamadas salientes, especifique el answer_url cuando hagas la llamada.

Por defecto, el webhook de respuesta será un GET pero se puede sustituir por POST estableciendo el answer_method campo. Para las llamadas entrantes, estos valores se configuran al crear la aplicación. Para las llamadas salientes, estos valores se especifican al realizar una llamada.

Responder a los campos de datos del webhook

Campo Ejemplo Descripción
to 442079460000 El número que ha contestado a la llamada. (Este es el número virtual vinculado a en su aplicación.)
from 447700900000 El número que llamó to. Puede tratarse de un número de teléfono fijo o móvil, o de otro número virtual si la llamada se ha realizado mediante programación.
from_user JaneDoe El nombre de usuario que llamó a to sólo si la llamada se realizó utilizando el Client SDK. En este caso, from estará ausente (es decir, from y from_user nunca estarán presentes los dos a la vez).
endpoint_type phone El tipo de canal de voz que respondió a la llamada. Los valores posibles son phone, sip, websocket, app, vbc.
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab Un identificador único para esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab Un identificador único para esta conversación
region_url https://api-ap-3.vonage.com Punto final de la API regional que debe utilizarse para controlar la llamada con API REST; ver la lista completa de regiones aquí
custom_data { "key": "value" } Un objeto de datos personalizado, opcionalmente pasado como parámetro en el comando serverCall cuando se inicia una llamada desde una aplicación que utiliza el método Client SDK

Transmisión de datos adicionales con cabeceras SIP

Además de los campos anteriores, puede especificar cualquier encabezado adicional que necesite al utilizar SIP Connect. Todas las cabeceras deben empezar por X- y se enviará a su answer_url con el prefijo SipHeader_. Por ejemplo, si añade una cabecera de X-UserId con un valor de 1938ND9Vonage añadirá SipHeader_X-UserId=1938ND9 a la solicitud realizada a su answer_url.

Advertencia: Las cabeceras que empiezan por X-Nexmo no se enviará a su answer_url

Vonage admite X- y las cabeceras De usuario a usuario cabecera. Estos mecanismos pueden utilizarse individualmente o juntos dentro de la misma llamada.

La cabecera Usuario-a-Usuario le permite enviar datos contextuales durante una llamada desde su equipo SIP a su aplicación Voice API. Para utilizar este encabezado, su equipo SIP debe enviar un encabezado Usuario-a-Usuario a su dominio SIP Programable. Además, su aplicación Voice API necesitará recibir el webhook de respuesta que contiene el contenido de esta cabecera.

En Cabecera de usuario a usuario debe tener el siguiente formato: SipHeader_User-to-User=1234567890abcdef;encoding=hex

La cabecera Usuario-a-Usuario se valida únicamente para garantizar que contiene caracteres válidos y que no supera los 256 caracteres. El contenido en sí no se valida.

Ejemplos de campos de datos de webhook de respuesta

Para un GET las variables estarán en la URL, así:

/answer.php?to=442079460000&from=447700900000&conversation_uuid=CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab&uuid=aaaaaaaa-bbbb-cccc-dddd-0123456789ab&SipHeader_X-UserId=1938ND9

Si ajusta el answer_method a POST entonces recibirá la petición con datos en formato JSON en el cuerpo:

{
  "from": "442079460000",
  "to": "447700900000",
  "uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
  "conversation_uuid": "CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
  "SipHeader_X-UserId": "1938ND9"
}

Respuesta al webhook de respuesta

Vonage espera que devuelvas un OCN en formato JSON que contiene las acciones a realizar.

Evento webhook

Las solicitudes HTTP de webhook de eventos llegarán al punto final de webhook de eventos cuando se produzca algún cambio de estado en una llamada. La URL será la event_url que especificó al crear su aplicación, a menos que lo anule estableciendo un event_url al iniciar una llamada.

Por defecto, las solicitudes entrantes son POST con un cuerpo JSON. Puede anular el método para GET configurando el event_method además del event_url. Se espera que su sistema responda a la solicitud HTTP. Si su sistema no acusa recibo del evento o responde con un 429, 502, 503 o 504, se intentará reintentarlo. Para los eventos que requieren que se devuelva una OCN, se utilizará la URL de reserva. Consulte la página URL alternativa para más información.

El formato de los datos incluidos depende del suceso que se haya producido:

Comenzó

Indica que se ha creado la convocatoria.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status started Estado de la llamada
direction outbound Dirección de llamada, puede ser inbound o outbound
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

Timbre

El destino de la llamada está sonando.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status ringing Estado de la llamada
direction outbound Dirección de llamada, puede ser inbound o outbound
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

Respuesta

Se respondió a la llamada.

Campo Ejemplo Descripción
start_time null Este campo no se admite actualmente.
rate 0.12 Coste de la convocatoria en euros
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status answered Estado de la llamada
direction inbound Dirección de llamada, puede ser inbound o outbound
network null Tipo de red utilizada en la llamada
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

Ocupado

El destino está en línea con otra persona que llama.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status busy Estado de la llamada
direction outbound Dirección de llamada, esto será outbound en este contexto
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
sip_code 404 El código de estado SIP devuelto (por ejemplo, 404, 480o 487) a través del event_url, que proporciona detalles adicionales sobre el motivo de la finalización o el fallo de la llamada. Véanse los códigos de estado SIP descritos aquí.

Volver a la lista de webhooks de eventos

Cancelado

Una llamada saliente es cancelada por el emisor antes de ser contestada.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status cancelled Estado de la llamada
direction outbound Dirección de llamada, esto será outbound en este contexto
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

Sin respuesta

El destinatario está ilocalizable o ha rechazado la llamada.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status unanswered Estado de la llamada
detail unavailable Indica si el abonado no está disponible temporalmente (unavailable) o el transportista no pudo producir una respuesta en un plazo de tiempo adecuado (timeout)
direction outbound Dirección de llamada, esto será outbound en este contexto
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
sip_code 404 El código de estado SIP devuelto (por ejemplo, 404, 480o 487) a través del event_url, que proporciona detalles adicionales sobre el motivo de la finalización o el fallo de la llamada. Véanse los códigos de estado SIP descritos aquí.

Volver a la lista de webhooks de eventos

Desconectado

Si la conexión WebSocket finaliza desde el lado de la aplicación por cualquier motivo, se enviará la llamada de retorno de evento desconectado, si la respuesta contiene una NCCO, se procesará, si no hay NCCO, continuará la ejecución normal.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status disconnected Estado de la llamada
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

Rechazado

Vonage rechazó la llamada antes de que se conectara.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status rejected Estado de la llamada
detail restricted Indica si to o from Numbers no son válidos (invalid_number), la llamada rechazada por el operador (restricted) o rechazado por el destinatario (declined)
direction outbound Dirección de llamada, esto será outbound en este contexto
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
sip_code 404 El código de estado SIP devuelto (por ejemplo, 404, 480o 487) a través del event_url, que proporciona detalles adicionales sobre el motivo de la finalización o el fallo de la llamada. Véanse los códigos de estado SIP descritos aquí.

Volver a la lista de webhooks de eventos

Fallido

No se ha podido conectar la llamada saliente.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status failed Estado de la llamada
detail cannot_route Indica que el destino no es compatible o está bloqueado para la Account (cannot_route), el número no está disponible (number_out_of_service) o se ha producido un error en el servidor (internal_error)
direction outbound Dirección de llamada, esto será outbound en este contexto
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
sip_code 404 El código de estado SIP devuelto (por ejemplo, 404, 480o 487) a través del event_url, que proporciona detalles adicionales sobre el motivo de la finalización o el fallo de la llamada. Véanse los códigos de estado SIP descritos aquí.

Volver a la lista de webhooks de eventos

Humano / Máquina

Para una llamada saliente realizada mediante programación, si el machine_detection un evento con el estado human o machine se enviará en función de si una persona ha respondido a la llamada o no.

Campo Ejemplo Descripción
call_uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria (Nota call_uuidno uuid como en algunos otros puntos finales)
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
status human Estado de la llamada, puede ser human si una persona respondió o machine si la llamada fue contestada por el buzón de voz u otro servicio automatizado
sub_state beep_start Estado avanzado de detección de máquina, cuando la llamada es contestada por el buzón de voz, o máquina de fax, y se detecta el pitido. Los valores posibles son beep_start para el buzón de voz, fax para fax y beep_timeout.
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

Tiempo de espera

Si la duración de la fase de timbre supera el valor de ringing_timeout se enviará este evento.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status timeout Estado de la llamada
direction outbound Dirección de llamada, esto será outbound en este contexto
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

Completado

La llamada ha terminado, este evento también incluye datos de resumen sobre la llamada.

Campo Ejemplo Descripción
end_time 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
network GB-FIXED Tipo de red utilizada en la llamada
duration 2 Duración de la llamada (en segundos)
start_time 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
rate 0.00450000 Coste por minuto de la llamada (EUR)
price 0.00015000 Coste total de la convocatoria (EUR)
from 442079460000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
status completed Estado de la llamada
direction entrada Dirección de llamada, puede ser inbound o outbound
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
disconnected_by user Puede ser uno de dos valores:
platform - La llamada ha sido finalizada por la plataforma Voice API, por ejemplo, la OCN ha finalizado su última acción y la llamada se ha desconectado.
user - La llamada fue terminada por el usuario, por ejemplo, el usuario colgó la llamada, rechazó la llamada o no contestó.
sip_code 404 El código de estado SIP devuelto (por ejemplo, 404, 480o 487) a través del event_url, que proporciona detalles adicionales sobre el motivo de la finalización o el fallo de la llamada. Véanse los códigos de estado SIP descritos aquí.

Volver a la lista de webhooks de eventos

Registro

Este webhook llega cuando una NCCO con una acción "record" ha finalizado. Al crear una acción de registro, puede establecer un eventUrl para que este evento sea enviado. Esto puede ser útil si desea utilizar un código separado para manejar este tipo de evento.

Campo Ejemplo Descripción
start_time 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
recording_url https://api.nexmo.com/v1/files/bbbbbbbb-aaaa-cccc-dddd-0123456789ab Dónde descargar la grabación
size 12222 Tamaño del archivo de grabación (en bytes)
recording_uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab Un identificador único para esta grabación
end_time 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Transcripción

Campo Ejemplo Descripción
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
type record La acción NCCO de tipo registro
recording_uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab Un identificador único para esta grabación
status transcribed Estado de la transcripción
transcription_url https://api.nexmo.com/v1/files/bbbbbbbb-aaaa-cccc-dddd-0123456789ab La URL del archivo que contiene la transcripción de la grabación

Volver a la lista de webhooks de eventos

Entrada

Vonage envía este webhook cuando finaliza una OCNC con una acción de "entrada".

Campo Ejemplo Descripción
from 447700900000 Número del que procede la llamada
to 447700900000 Número al que se ha efectuado la llamada
dtmf véase más abajo Resultados de la captura DTMF
speech véase más abajo Resultados del reconocimiento de voz
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único para esta llamada. La propiedad podría no aparecer cuando una entrada alcanza un tiempo de espera DTMF.
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Resultados de la captura DTMF

Campo Ejemplo Descripción
digits 42 Los botones pulsados por el usuario
timed_out true Si la entrada DTMF ha expirado: true si así fuera, false si no

Resultados del reconocimiento de voz

Campo Ejemplo Descripción
timeout_reason end_on_silence_timeout Indica si la entrada terminó cuando el usuario dejó de hablar (end_on_silence_timeout), por tiempo de espera de duración máxima (max_duration) o si el usuario no ha dicho nada (start_timeout)
results véase más abajo Conjunto de objetos de texto reconocidos
error ERR1: Failed to analyze audio Mensaje de error.
recording_url https://api-us.nexmo.com/v1/files/eeeeeee-ffff-0123-4567-0123456789ab Grabación de voz. Incluido si saveAudio se establece en true en el input acción. Requiere autorización JWT para la descarga, véase Descargar una grabación.
Texto transcrito
Campo Ejemplo Descripción
text sales Texto transcrito que representa las palabras pronunciadas por el usuario.
confidence 0.9405097 La confianza estimada entre 0,0 y 1,0. Un número más alto indica una mayor probabilidad estimada de que las palabras reconocidas sean correctas.

Véase también el ejemplo completo de carga útil mostrado en Referencia OCNC

Volver a la lista de webhooks de eventos

Transferencia

Este webhook es enviado por Vonage cuando un tramo ha sido transferido de una conversación a otra. Esto se puede hacer usando un NCCO o la función transfer acción

Campo Ejemplo Descripción
conversation_uuid_from CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab La identificación de la conversación que la pierna estaba originalmente en
conversation_uuid_to CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab La identificación de la conversación que la pierna fue trasladado a
uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)

Volver a la lista de webhooks de eventos

URL alternativa

Se accede al webhook fallback cuando el webhook de respuesta o el webhook de evento, cuando se espera que el evento responda con una NCCO, devuelve un estado de error HTTP o es inalcanzable. Los datos que se devuelven desde la URL de retorno son los mismos que se recibirían en la URL de respuesta original o en la URL de evento, con la adición de dos nuevos parámetros, reason y original_request:

{
  "reason": "Connection closed.",
  "original_request": {
    "url": "https://api.example.com/webhooks/event",
    "type": "event"
  }
}

Si hubo una conexión cerrada o restablecida, un tiempo de espera o un código de estado HTTP de 429, 503 o 504 durante la OCN inicial el answer_url se intenta dos veces, entonces:

  1. Intento de alcanzar el fallback_answer_url dos veces
  2. Si no hay éxito, se termina la llamada

Si hubo una conexión cerrada o restablecida, un tiempo de espera o un código de estado HTTP de 429, 503 o 504 durante una llamada en curso el event_url para eventos que se espera que devuelvan un NCCO (por ejemplo, la devolución de un input o notify acción) se intenta dos veces, entonces:

  1. Intento de alcanzar el fallback_answer_url dos veces
  2. Si no hay éxito, continúa el flujo de llamadas

Errores

El punto final de eventos también recibirá webhooks en caso de error. Esto puede ser útil a la hora de depurar tu aplicación.

Campo Ejemplo Descripción
reason Syntax error in NCCO. Invalid value type or action. Información sobre la naturaleza del error
conversation_uuid CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta conversación
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)