Referencia de los Webhooks de la Voice API

Vonage utiliza webhooks junto con su Voice API para que tu aplicación pueda interactuar con la llamada. Hay dos puntos de conexión de webhooks obligatorios y uno opcional:

  • Respuesta webhook se envía cuando se contesta una llamada. Esto es tanto para llamadas entrantes como salientes.
  • Webhook de eventos 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 «Answer» o «Event» falla o devuelve un estado de error HTTP.
  • Errores también se envían al punto final del webhook del evento si se producen.

Para más información general, consulte nuestro Guía sobre 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 descifrar la firma de un JWT recibido.

Webhook de respuesta

Cuando se responde a una llamada entrante, se envía una solicitud HTTP a la aplicación answer_url que has especificado al configurar la aplicación. Para las llamadas salientes, especifica el answer_url cuando llames.

Por defecto, el webhook de respuesta será un GET pero se puede sustituir por POST estableciendo el answer_method campo. En el caso de las llamadas entrantes, estos valores se configuran al crear la aplicación. En el caso de 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 solicitud.)
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ó to solo si la llamada se ha realizado mediante el Client SDK. En este caso, from no estará presente (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 llamada
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; consulta la lista completa de regiones aquí
custom_data { "key": "value" } Un objeto de datos personalizado, que se puede pasar opcionalmente como parámetro en el 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ñades un encabezado de X-UserId con un valor de 1938ND9, Vonage añadirá SipHeader_X-UserId=1938ND9 a la solicitud realizada a su answer_url.

Advertencia: Los encabezados que empiezan por X-Nexmo no se enviará a tu 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.

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

El encabezado «User-to-User» solo se valida para garantizar que contenga caracteres válidos y que no supere los 256 caracteres. El contenido en sí no se valida de ninguna otra forma.

Ejemplos de campos de datos de los webhooks de respuesta

Para un GET En la solicitud, las variables aparecerán en la URL, de esta forma:

/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 configuras 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.

Webhook de eventos

Las solicitudes HTTP del webhook de eventos llegarán al punto final del webhook de eventos cuando se produzca cualquier 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 solicitudes con un cuerpo JSON. Puedes sobrescribir el método para GET configurando el event_method además del event_url. Se espera que tu sistema responda a la solicitud HTTP. Si su sistema no confirma el evento o, por el contrario, responde con un código 429, 502, 503 o 504, se intentará volver a realizar la solicitud. Para los eventos que requieran la devolución de un NCCO, se utilizará entonces la URL de reserva. Consulte el URL alternativa Consulte esta sección para obtener 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 El número al que se realizó 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 la 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 El número al que se realizó 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 la 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

Respondido

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 El número al que se realizó 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 la 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 destinatario está en línea con otra persona que llama.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 El número al que se realizó 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, 480, o 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 El número al que se realizó 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

O bien no se puede contactar con el destinatario, o bien este ha rechazado la llamada.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 El número al que se realizó 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, 480, o 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 El número al que se realizó 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 El número al que se realizó 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, 480, o 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 establecer la llamada saliente.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 El número al que se realizó 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, 480, o 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

Persona / Máquina

En el caso de 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 la persona ha contestado la llamada o no.

Campo Ejemplo Descripción
call_uuid aaaaaaaa-bbbb-cccc-dddd-0123456789ab El identificador único de esta convocatoria (Nota call_uuid, no uuid como en algunos otros puntos finales)
from 442079460000 Número del que procede la llamada
to 447700900000 El número al que se realizó 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 de detección avanzada de dispositivos: cuando la llamada es atendida por el buzón de voz o por un 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 especificado ringing_timeout durante ese tiempo, se enviará este evento.

Campo Ejemplo Descripción
from 442079460000 Número del que procede la llamada
to 447700900000 El número al que se realizó 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 El tipo de red que se utilizó 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 El número al que se realizó 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 la llamada: puede ser inbound o outbound
timestamp 2020-01-01T12:00:00.000Z Sello de tiempo (formato ISO 8601)
disconnected_by user Puede tener uno de estos 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, 480, o 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 se activa cuando finaliza una acción «record» de NCCO. Al crear una acción «record», puedes 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 El 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 El número al que se realizó la llamada
dtmf véase más abajo Resultados de la captura de 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 fuera así, 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 máximo (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. Se incluye si saveAudio el indicador está activado en true en el input Acción. Requiere autorización JWT para la descarga; consulta 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 estimación de confianza oscila entre 0,0 y 1,0. Un valor 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 que se muestra 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 El ID de la conversación en la que se encontraba inicialmente ese tramo
conversation_uuid_to CON-aaaaaaaa-bbbb-cccc-dddd-0123456789ab El ID de la conversación a la que se transfirió la etapa
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 de reserva cuando el webhook de respuesta o el webhook de evento —en los casos en que se espera que el evento responda con un NCCO— devuelve un estado de error HTTP o no está accesible. Los datos que se devuelven desde la URL de reserva son los mismos que se recibirían en la URL de respuesta original o en la URL de evento, con la incorporació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 Si se intenta dos veces, entonces:

  1. Intenta ponerte en contacto con 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, el resultado de un input o notify acción) se intenta dos veces, entonces:

  1. Intenta ponerte en contacto con el fallback_answer_url dos veces
  2. Si no se consigue, continuar con el flujo de la llamada

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)