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:
startedringingansweredbusycancelledunanswereddisconnectedrejectedfailedhuman/machinetimeoutcompletedrecordinputtransfer
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:
- Intento de alcanzar el
fallback_answer_urldos veces - 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:
- Intento de alcanzar el
fallback_answer_urldos veces - 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) |