Los endpoints de API de llamadas proporcionan acceso a los objetos de llamada. Se crea un objeto de llamada para cada llamada que se realiza hacia y desde Contact Center AI Platform (CCAI Platform).
Los siguientes son los endpoints de API de llamadas:
Actualiza los atributos de datos reservados durante una llamada
Cómo obtener atributos de datos reservados durante una llamada
Pasa parámetros de datos a agentes virtuales a mitad de la sesión
Objeto Call
A continuación, se muestra un ejemplo del objeto de llamada:
[
{
"id": 0,
"parent_id": 0,
"lang": "en",
"call_type": "Voice Scheduled (API)",
"status": "scheduled",
"created_at": "2018-06-07T19:49:52.896Z",
"queued_at": "2018-06-07T19:49:52.896Z",
"assigned_at": "2018-06-07T19:49:52.896Z",
"connected_at": "2018-06-07T19:49:52.896Z",
"ends_at": "2018-06-07T19:49:52.896Z",
"scheduled_at": "2018-06-07T19:49:52.896Z",
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": 0,
"has_feedback": true,
"voip_provider": "voip_provider_twilio",
"out_ticket_id": "string",
"out_ticket_url": "string",
"verified": true,
"recording_url": "string",
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_details": "string",
"fail_reason": "nothing",
"support_number": "string",
"selected_menu": {
"id": 0,
"name": "string",
"parent_id": 0,
"position": 0,
"deleted": true,
"hidden": "string",
"menu_type": "ivr_menu",
"output_msg": "string"
},
"menu_path": {
"items_count": 0,
"name": "string",
"materialized_path": "string"
},
"agent_info": {
"id": 0,
"name": "string",
"last_name": "string",
"first_name": "string",
"agent_number": "string",
"avatar_url": "string"
},
"end_user": {
"id": 0,
"identifier": "string",
"out_contact_id": "string"
},
"photos": [
{
"id": 0,
"photo_type": "photo",
"url": "string"
}
],
"videos": [
{
"id": 0,
"url": "string"
}
],
"transfers": [
{
"id": 0,
"status": "transferring",
"fail_reason": "nothing",
"created_at": "2018-06-07T19:49:52.896Z",
"from_menu": {
"items_count": 0,
"name": "string",
"materialized_path": "string"
},
"to_menu": {
"items_count": 0,
"name": "string",
"materialized_path": "string"
},
"from_agent": {
"id": 0,
"name": "string",
"last_name": "string",
"first_name": "string",
"agent_number": "string",
"avatar_url": "string"
},
"to_agent": {
"id": 0,
"name": "string",
"last_name": "string",
"first_name": "string",
"agent_number": "string",
"avatar_url": "string"
}
}
],
"participants": [
{
"id": 0,
"type": "end_user",
"status": "waiting",
"call_id": 0,
"user_id": 0,
"end_user_id": 0,
"call_duration": 0,
"hold_duration": 0,
"connected_at": "2018-06-07T19:49:52.896Z",
"ended_at": "2018-06-07T19:49:52.896Z",
"fail_reason": "nothing"
}
]
}
]
Definiciones de los estados de las llamadas
El campo de estado puede tener cualquiera de los siguientes estados:
| Estado de la llamada | Descripción |
|---|---|
| Seleccionando | Es el estado que se produce cuando un usuario final llama al centro de contacto, pero aún navega por las opciones del menú antes de que se lo coloque en un menú de hoja. |
| En cola | Es el estado que se produce después de que el usuario final selecciona un nodo de menú de hoja y, luego, inicia una solicitud de llamada para que se realice una transmisión Deltacast o Multicast a un agente. |
| Asignado | Es el estado que se produce cuando se selecciona un agente para recibir la llamada del usuario final. Esto ocurre cuando un agente atiende una llamada. |
| Conectando | Es el estado que se produce después de que se asigna un agente y se establece una conexión entre el usuario final y el agente. |
| Conectado | Es el estado que se produce cuando la llamada estableció una conexión y el agente y el usuario final se encuentran en una llamada. |
| Finalizado | Es el estado que se produce cuando finaliza una llamada después de que se conectó. |
| Con errores | Es el estado que se produce cuando una llamada finaliza antes de que se conecte correctamente. También se proporcionará un motivo de falla para obtener más detalles. |
| Cambiando | Es el estado que se produce cuando falla una llamada mientras se intenta conectar y CCAI Platform intenta conectar la llamada con un proveedor de VoIP diferente. |
| Recuperada | Es el estado que se produce cuando se devuelve una llamada fallida. Esta nueva llamada es un elemento secundario de la llamada original. Se recuperaron las notas que indican que la devolución de llamada finalizó sin errores. |
| Programado | Es el estado que se produce cuando un usuario final programa una llamada futura con In-Web o In-App. |
| Solo de acción | Es el estado que se produce cuando una llamada que administra el proveedor de telefonía de nuestro cliente se conecta a nuestro SDK para iOS o Android. |
| Se completó la acción | Es el estado que se produce cuando una llamada que administra el proveedor de telefonía de nuestro cliente se conecta a nuestro SDK para iOS o Android y finaliza. |
| Se desvió la pelota | Es el estado que se produce según la configuración de las colas de capacidad excedida o las llamadas fuera de horario. Las opciones de desvío incluyen el buzón de voz y la programación de llamadas, entre otras. La desviación variará según el canal (en la app, IVR, en la Web) |
| Mensaje de voz | Es el estado que se produce cuando un usuario final se desvía a una opción de mensaje de voz y elige dejar un mensaje de voz para que se escuche más tarde. Este estado se presenta cuando el usuario final está dejando el mensaje de voz. |
| Mensaje de voz recibido | Estado que se produce después de que un usuario final deja un mensaje de voz y un agente no lo escucha |
| Lectura de mensajes de voz | Estado que se produce cuando un agente abre el mensaje de voz para escucharlo. |
Definiciones de los tipos de llamadas
El campo call_type solo puede tener uno de los siguientes valores:
| Tipo de llamada | Descripción |
|---|---|
| Voz saliente (API) | Llamada realizada desde la API de llamada saliente. |
| Entrante de voz (API) | Llamada realizada desde la API de llamadas entrantes. |
| Voice Scheduled (API) | Llamada realizada desde la API de llamadas programadas. |
Códigos de respuesta de la API comunes
Las siguientes son las respuestas de la API más comunes:
| Código de respuesta | Significado |
|---|---|
| 201 | La solicitud a la API se realizó correctamente y creará una llamada |
| 202 | La solicitud a la API se realizó correctamente, pero se requiere una intervención manual dentro del widget para completar la acción. |
| 400 | tipo de llamada no válido: asegúrate de que se admita call_type |
| 400 | El agente no está disponible para atender esta llamada |
| 400 | Falta un parámetro: Verifica que se hayan agregado los parámetros obligatorios |
| 404 | No se encontró el recurso. Revisa tu subdominio |
Llamada saliente: end_user_number
| Parámetro | Obligatorio | Tipo de datos | Definición |
|---|---|---|---|
| call_tye | TRUE | String | Llama a tye para crear. Por el momento, están disponibles "Voice Outbound (API)" y "OutboundCall" (obsoleto) |
| agent_email | TRUE | String | Es la dirección de correo electrónico del agente que se asignará a la llamada saliente. |
| ticket_id | FALSO | String | el ID del ticket de CRM y llamará al usuario final vinculado al ticket. |
| end_user_number | FALSO | String | Es el número de teléfono del usuario final que se marcará. ticket_id tiene una prioridad más alta que end_user_number. |
| outbound_number | FALSO | String | Es un número de salida con el formato correcto que se administra desde Configuración > Números de teléfono > Administración de números de teléfono. Se usará el número de salida predeterminado cuando esté vacío |
| lang | FALSO | String | Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en") |
Extremo:
Method: POST
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"outbound_number": "+1 760-867-5309",
"end_user_number": "123123",
"lang": "en"
}
Ejemplo de solicitud y respuestas
En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.
Error : El agente no está disponible para atender esta llamada
En este ejemplo, se muestra la situación de falla cuando el agente no está disponible para recibir la llamada.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : El agente no está disponible para atender esta llamada
{
"message": "Agent is not available to take this call"
}
Código de estado: 400
Crea una llamada saliente con el número del usuario final
En este ejemplo, se muestra cómo realizar una llamada saliente para un número de usuario final específico.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 859-657-9625",
"outbound_number": "+1 339-219-5276",
"lang": "en"
}
Respuesta: Crea una llamada saliente con end_user_number
{
"id": 397,
"lang": "en",
"call_type": "Voice Outbound (API)",
"status": "assigned",
"created_at": "2019-06-07T01:27:30.406Z",
"queued_at": null,
"assigned_at": "2019-06-07T01:27:30.441Z",
"connected_at": null,
"ends_at": null,
"scheduled_at": null,
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"voip_provider": "voip_provider_twilio",
"out_ticket_id": null,
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": null,
"menu_path": null,
"agent_info": {
"id": 1,
"agent_number": null,
"name": "Admin UJET",
"last_name": "UJET",
"first_name": "Admin",
"avatar_url": "https://somedomain.com/avatar.jpg"
},
"end_user": null,
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 610,
"type": "agent",
"status": "waiting",
"call_id": 397,
"user_id": 1,
"end_user_id": null,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
},
{
"id": 611,
"type": "end_user",
"status": "waiting",
"call_id": 397,
"user_id": null,
"end_user_id": null,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": null,
"offer_events": [],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Crea una llamada saliente con el ID del ticket
En este ejemplo, se muestra la creación de una llamada saliente con un ID de ticket específico.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"ticket_id": "71450",
"outbound_number": "+1 339-219-5276",
"lang": "en"
}
Respuesta: Crea una llamada saliente con ticket_id
{
"id": 398,
"lang": "en",
"call_type": "Voice Outbound (API)",
"status": "assigned",
"created_at": "2019-06-07T01:28:47.955Z",
"queued_at": null,
"assigned_at": "2019-06-07T01:28:47.971Z",
"connected_at": null,
"ends_at": null,
"scheduled_at": null,
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"voip_provider": "voip_provider_twilio",
"out_ticket_id": "71450",
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": null,
"menu_path": null,
"agent_info": {
"id": 1,
"agent_number": null,
"name": "Admin UJET",
"last_name": "UJET",
"first_name": "Admin",
"avatar_url": "https://somedomain.com/avatar.png"
},
"end_user": {
"id": 67,
"identifier": null,
"out_contact_id": "381630957514"
},
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 612,
"type": "agent",
"status": "waiting",
"call_id": 398,
"user_id": 1,
"end_user_id": null,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
},
{
"id": 613,
"type": "end_user",
"status": "waiting",
"call_id": 398,
"user_id": null,
"end_user_id": 67,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": null,
"offer_events": [],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Error : Se requiere el ID del ticket o el número del usuario final
En este ejemplo, se muestra el caso de error en el que se requieren el ID del ticket o el número del usuario final, pero no se proporcionan.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : Se requiere ticket_id o end_user_number
{
"message": "ticket_id or end_user_number required"
}
Código de estado: 400
Error : No es un correo electrónico de agente válido
En este ejemplo, se muestra la falla cuando la dirección de correo electrónico proporcionada para un agente no es válida.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : No es un correo electrónico de agente válido
{
"message": "Not a valid agent email"
}
Código de estado: 400
Error : Se requiere el correo electrónico del agente
En este ejemplo, se muestra la falla cuando no se proporciona una dirección de correo electrónico para el agente.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : Se requiere el correo electrónico del agente
{
"message": "Agent email required"
}
Código de estado: 400
Error : El agente no tiene acceso para realizar llamadas
En este ejemplo, se muestra la falla cuando el agente especificado no tiene permiso para realizar llamadas salientes.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : El agente no tiene acceso para realizar llamadas
{
"message": "Agent does not have access to make calls"
}
Código de estado: 400
Error : end_user_number no tiene el formato correcto
En este ejemplo, se muestra la situación de falla en la que el número de usuario final proporcionado no tiene el formato correcto.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
"message": "end_user_number is not well-formed"
}
Código de estado: 400
Error : No se encontró el contacto
En este ejemplo, se muestra la situación de falla en la que no existe el contacto proporcionado.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"ticket_id": 1,
"lang": "en"
}
Respuesta: Error : No se encontró el contacto
{
"message": "Contact not found"
}
Código de estado: 400
Aceptada : Se debe elegir un número de salida
En este ejemplo, se acepta la llamada saliente, pero el agente debe elegir el número saliente que usará antes de realizar la llamada.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"outbound_number": "+1 760-867-5309",
"end_user_number": "123123",
"lang": "en"
}
Respuesta
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Código de estado: 200
Error : Tipo de llamada no válido
En este ejemplo, se muestra la situación de falla en la que el tipo de llamada proporcionado no es válido.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Respuesta: Error : Tipo de llamada no válido
{
"message": "Invalid call type"
}
Código de estado: 400
Solicita el adaptador de llamadas con varios números salientes
En este caso, se le solicita al adaptador de llamadas que proporcione varios números salientes.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"outbound_number": "+1 760-867-5309",
"end_user_number": "123123",
"lang": "en"
}
Respuesta
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 859-657-9625",
"lang": "en"
}
Código de estado: 200
Aceptado : El agente debe realizar una llamada saliente con el ID del ticket
En este ejemplo, se muestra una solicitud en la que el agente debe realizar una llamada saliente en función del ID de ticket proporcionado.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Código de estado: 202
Llamada saliente: ticket_id
| Parámetro | Obligatorio | Tipo de datos | Definición |
|---|---|---|---|
| call_type | TRUE | String | Es el tipo de llamada que se creará. Por el momento, están disponibles "Voice Outbound (API)" y "OutboundCall" (obsoleto) |
| agent_email | TRUE | String | Es la dirección de correo electrónico del agente que se asignará a la llamada saliente. |
| ticket_id | FALSO | String | el ID del ticket de CRM y llamará al usuario final vinculado al ticket. |
| end_user_number | FALSO | String | Es el número de teléfono del usuario final que se marcará. ticket_id tiene una prioridad más alta que end_user_number. |
| outbound_number | FALSO | String | Es un número de salida con el formato correcto que se administra desde Configuración > Números de teléfono > Administración de números de teléfono. Se usará el número de salida predeterminado cuando esté vacío |
| lang | FALSO | String | Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en") |
Extremo:
Method: POST
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-867-5309",
"ticket_id": "123123",
"lang": "en"
}
Ejemplo de solicitud y respuestas
En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.
Error : Se requiere el ID del ticket o el número del usuario final
En este ejemplo, faltan el ID del ticket o el número del usuario final, pero son obligatorios.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : Se requiere ticket_id o end_user_number
{
"message": "ticket_id or end_user_number required"
}
Código de estado: 400
Error : Se requiere el correo electrónico del agente
En este ejemplo, se muestra la situación de falla en la que no se proporciona el correo electrónico del agente, pero es obligatorio.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : Se requiere el correo electrónico del agente
{
"message": "Agent email required"
}
Código de estado: 400
Crea una llamada saliente con el número del usuario final
En este ejemplo, se muestra cómo crear una llamada saliente proporcionando el número del usuario final.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 859-657-9625",
"outbound_number": "+1 339-219-5276",
"lang": "en"
}
Respuesta: Crea una llamada saliente con end_user_number
{
"id": 397,
"lang": "en",
"call_type": "Voice Outbound (API)",
"status": "assigned",
"created_at": "2019-06-07T01:27:30.406Z",
"queued_at": null,
"assigned_at": "2019-06-07T01:27:30.441Z",
"connected_at": null,
"ends_at": null,
"scheduled_at": null,
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"voip_provider": "voip_provider_twilio",
"out_ticket_id": null,
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reaso": "not_voicemail",
"deflection": "n_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": null,
"menu_path": null,
"agent_info": {
"id": 1,
"agent_number": null,
"name": "Admin UJET",
"last_name": "UJET",
"first_name": "Admin",
"avatar_url": "https://somedomain.com/default-profile.png"
},
"end_user": null,
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 610,
"type": "agent",
"status": "waiting",
"call_id": 397,
"user_id": 1,
"end_user_id": null,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
},
{
"id": 611,
"type": "end_user",
"status": "waiting",
"call_id": 397,
"user_id": null,
"end_user_id": null,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": null,
"offer_events": [],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Error : Tipo de llamada no válido
En este ejemplo, mostramos la situación de falla en la que el tipo de llamada proporcionado no es válido.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "ScheduledCall",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Respuesta: Error : Tipo de llamada no válido
{
"message": "Invalid call type"
}
Código de estado: 400
Solicita el adaptador de llamadas con varios números salientes
En este ejemplo, se muestra cómo solicitar al adaptador de llamadas varios números de teléfono salientes.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 859-657-9625",
"lang": "en"
}
Código de estado: 202
Aceptado : El agente debe realizar una llamada saliente con el ID del ticket
En este ejemplo, mostramos cómo realizar una llamada saliente con un ID de ticket y el agente acepta la solicitud.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : El agente no tiene acceso para realizar llamadas
{
"message": "Agent does not have access to make calls"
}
Código de estado: 400
Crea una llamada saliente con el ID del ticket.
En este ejemplo, mostramos la situación de crear una llamada saliente con un ID de ticket.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"ticket_id": "71450",
"outbound_number": "+1 339-219-5276",
"lang": "en"
}
Respuesta: Crea una llamada saliente con ticket_id
{
"id": 398,
"lang": "en",
"call_type": "Voice Outbound (API)",
"status": "assigned",
"created_at": "2019-06-07T01:28:47.955Z",
"queued_at": null,
"assigned_at": "2019-06-07T01:28:47.971Z",
"connected_at": null,
"ends_at": null,
"scheduled_at": null,
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"voip_provider": "voip_provider_twilio",
"out_ticket_id": "71450",
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": null,
"menu_path": null,
"agent_info": {
"id": 1,
"agent_number": null,
"name": "Admin UJET",
"last_name": "UJET",
"first_name": "Admin",
"avatar_url": "https://somedomain.com/default-profile.png"
},
"end_user": {
"id": 67,
"identifier": null,
"out_contact_id": "381630957514"
},
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 612,
"type": "agent",
"status": "waiting",
"call_id": 398,
"user_id": 1,
"end_user_id": null,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
},
{
"id": 613,
"type": "end_user",
"status": "waiting",
"call_id": 398,
"user_id": null,
"end_user_id": 67,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": null,
"offer_events": [],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Aceptada : Se debe elegir un número de salida
En este ejemplo, se muestra la situación en la que se crea una solicitud de llamada saliente con la necesidad de elegir un número saliente y, luego, se acepta.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Código de estado: 202
Error : El agente no está disponible para atender esta llamada
En este ejemplo, mostramos la situación de falla en la que se crea una llamada, pero el agente no está disponible para aceptarla.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : El agente no está disponible para atender esta llamada
{
"message": "Agent is not available to take this call"
}
Código de estado: 400
Error : El número del usuario final no tiene el formato correcto
En este ejemplo, mostramos la situación de falla en la que el número de teléfono del usuario final proporcionado tiene un formato incorrecto.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
"message": "end_user_number is not well-formed"
}
Código de estado: 400
Error : No es un correo electrónico de agente válido
En este ejemplo, mostramos la situación de falla en la que el correo electrónico del agente proporcionado no es válido.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Respuesta: Error : No es un correo electrónico de agente válido
{
"message": "Not a valid agent email"
}
Código de estado: 400
Error : No se encontró el contacto
En este ejemplo, mostramos la situación de falla en la que no se pudo encontrar el contacto proporcionado.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"ticket_id": 1,
"lang": "en"
}
Respuesta: Error : No se encontró el contacto
{
"message": "Contact not found"
}
Código de estado: 400
Llamada entrante
| Parámetro | Obligatorio | Tipo de datos | Definición |
|---|---|---|---|
| call_type | TRUE | String | Es el tipo de llamada que se creará. Usa "Voice Inbound (API)" o "IncomingCall" (obsoleto) para crear una llamada entrante. |
| menu_id | TRUE | Número entero | Es el ID del menú al que se atribuirá la llamada. Solo se aceptan IDs de menú web y de IVR. |
| end_user_number | TRUE | String | Es el número de teléfono del usuario final al que se llamará. Si se pasan ticket_id y end_user_number, ticket_id tendrá prioridad. |
| lang | FALSO | String | Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en") |
| ticket_id | FALSO | String | Es el ID del ticket de CRM. Se marcará el número de teléfono del usuario final vinculado al ticket. Si se pasan un ticket_id y un end_user_number, el ticket_id tendrá prioridad. |
| outbound_number | FALSO | String | Es el número de teléfono saliente que se usará para la llamada. Se usará el número de teléfono saliente global predeterminado si no se pasa la entrada o no es válida. Los números salientes se administran desde Configuración > Cola > EDITAR / VER > Seleccionar una cola > Números de teléfono salientes. |
| recording_permission | FALSO | String | El valor solo se evalúa si la función "Opciones de grabación de llamadas" está configurada en "Pedir permiso al usuario para grabar". Se puede configurar en Configuración > Cola > EDITAR / VER > Seleccionar una cola > Opciones de grabación de llamadas. Si el valor es "recording_permission_not_asked" (predeterminado) o "recording_permission_denied", no se grabará la llamada. Si el valor es "recording_permission_granted", se grabará la llamada. |
Extremo:
Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"ticket_id": "76517",
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Ejemplo de solicitud y respuestas
En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.
Error : El número del usuario final no tiene el formato correcto
En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el número de usuario final proporcionado tiene un formato incorrecto.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 999-657-12",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
"message": "end_user_number is not well formed"
}
Código de estado: 400
Error : El menú está en el estado "redireccionamiento manual", por lo que no se pueden aceptar llamadas
En este ejemplo, mostramos la situación de falla en la que una llamada se enruta a un ID de menú, pero el menú está en estado de redireccionamiento manual y, por lo tanto, no puede recibir llamadas entrantes.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "redireccionamiento manual" y no puede aceptar llamadas
{
"message": "Menu is in 'manual redirection' state, can't accept calls"
}
Código de estado: 400
Error : Tipo de llamada no válido
En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el tipo de llamada proporcionado no es válido.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "InvalidCallType",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : Tipo de llamada no válido
{
"message": "Invalid call type"
}
Código de estado: 400
Error : El ID del menú es obligatorio
En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el ID de menú proporcionado no es válido.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id is required
{
"message": "menu_id is required"
}
Código de estado: 400
Error : Solo se permiten IDs de menú de IVR y para dispositivos móviles
En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el ID de menú proporcionado no es un ID de menú de IVR o de dispositivo móvil.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 50,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : Solo se permiten IDs de menú de IVR y de dispositivos móviles
{
"message": "Only IVR and mobile menu IDs are permitted"
}
Código de estado: 400
Crea una llamada entrante con el número del usuario final
En este ejemplo, se muestra cómo crear una llamada entrante con un número de usuario final específico.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+82-10-6861-2345",
"recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada entrante con end_user_number
{
"id": 515,
"lang": "en",
"call_type": "Voice Inbound (API)",
"status": "queued",
"created_at": "2019-09-10T00:19:14.000Z",
"queued_at": "2019-09-10T00:19:14.421Z",
"assigned_at": null,
"connected_at": null,
"ends_at": null,
"scheduled_at": null,
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"out_ticket_id": null,
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": {
"id": 9,
"name": "Lock Star",
"parent_id": null,
"position": 0,
"deleted": false,
"menu_type": "ivr_menu",
"output_msg": "You selected Lock Star.",
"hidden": false
},
"menu_path": {
"items_count": 1,
"name": "Lock Star",
"materialized_path": "9"
},
"agent_info": null,
"end_user": {
"id": 75,
"identifier": null,
"out_contact_id": "389391400633"
},
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 820,
"type": "end_user",
"status": "waiting",
"call_id": 515,
"user_id": null,
"end_user_id": 75,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": "cascade",
"offer_events": [
{
"casting_time": "2019-09-10T00:19:14.000Z",
"group": "Group 1"
}
],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Error : El menú está en el estado "fuera del horario de atención", por lo que no se pueden aceptar llamadas entrantes
En este ejemplo, se muestra la falla cuando el ID del menú proporcionado está en estado fuera del horario de atención.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "fuera del horario de atención", no se pueden aceptar llamadas entrantes
{
"message": "Menu is in 'after hours' state, can't accept incoming calls"
}
Código de estado: 400
Error : El idioma no está disponible
En este ejemplo, se muestra la solicitud de error cuando el idioma especificado no está disponible.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "fr",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : El idioma no está disponible
{
"message": "Language 'fr' is not available"
}
Código de estado: 400
Crea una llamada entrante con el ID del ticket
En este ejemplo, se muestra la solicitud para crear una llamada entrante con un ID de ticket asociado.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"ticket_id": "76517",
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada entrante con ticket_id
{
"id": 519,
"lang": "en",
"call_type": "Voice Inbound (API)",
"status": "queued",
"created_at": "2019-09-10T05:12:26.000Z",
"queued_at": "2019-09-10T05:12:26.295Z",
"assigned_at": null,
"connected_at": null,
"ends_at": null,
"scheduled_at": null,
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"out_ticket_id": "76517",
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": {
"id": 9,
"name": "Lock Star",
"parent_id": null,
"position": 0,
"deleted": false,
"menu_type": "ivr_menu",
"output_msg": "You selected Lock Star.",
"hidden": false
},
"menu_path": {
"items_count": 1,
"name": "Lock Star",
"materialized_path": "9"
},
"agent_info": null,
"end_user": {
"id": 75,
"identifier": null,
"out_contact_id": "389391400633"
},
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 826,
"type": "end_user",
"status": "waiting",
"call_id": 519,
"user_id": null,
"end_user_id": 75,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": "cascade",
"offer_events": [
{
"casting_time": "2019-09-10T05:12:26.000Z",
"group": "Group 1"
}
],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Error : No se encontró el idioma
En este ejemplo, se muestra la falla cuando no se encuentra el idioma proporcionado.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "xy",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el idioma
{
"message": "Language 'xy' is not found"
}
Código de estado: 400
Error : No se encontró el ID de menú
En este ejemplo, se muestra la falla cuando no se encuentra el ID de menú proporcionado.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9999,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el parámetro menu_id
{
"message": "menu_id 9999 is not found"
}
Código de estado: 400
Error : El formato de menu_id no es correcto
En este ejemplo, se muestra el error que se produce cuando el ID de menú proporcionado no es correcto.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": "menu_999",
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id no tiene el formato correcto
{
"message": "menu_id is not well formed"
}
Código de estado: 400
Error : Se requiere el número del usuario final
En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero no se proporcionó el número de teléfono del usuario final.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : Se requiere end_user_number
{
"message": "end_user_number is required"
}
Código de estado: 400
Llamada programada
| Parámetro | Obligatorio | Tipo de datos | Definición |
|---|---|---|---|
| call_type | TRUE | String | Es el tipo de llamada que se creará. Usa "Voice Scheduled (API)" o "ScheduledCall" (obsoleto) para crear una llamada programada. |
| menu_id | TRUE | Número entero | Es el ID del menú al que se atribuirá la llamada. Solo se aceptan IDs de menú para dispositivos móviles y la Web. |
| call_id | FALSO | Número entero | Es el ID de la llamada anterior, que se vinculará como la llamada superior de la nueva llamada programada que se creó. Cuando se usa el ID de llamada, menu_id puede ser opcional. |
| end_user_number | TRUE | String | Es el número de teléfono del usuario final al que se llamará. Si se pasan ticket_id y end_user_number, ticket_id tendrá prioridad. |
| lang | FALSO | String | Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en") |
| ticket_id | FALSO | String | Es el ID del ticket de CRM. Se marcará el número de teléfono del usuario final vinculado al ticket. Si se pasan un ticket_id y un end_user_number, el ticket_id tendrá prioridad. |
| scheduled_at | TRUE | String | Es la hora programada de la llamada. Usa el formato ISO 8601 para una hora futura válida. |
| recording_permission | FALSO | String | El valor solo se evalúa si la función "Opciones de grabación de llamadas" está configurada en "Pedir permiso al usuario para grabar". Se puede configurar en Configuración > Cola > EDITAR / VER > Seleccionar una cola > Opciones de grabación de llamadas. Si el valor es "recording_permission_not_asked" (predeterminado) o "recording_permission_denied", no se grabará la llamada. Si el valor es "recording_permission_granted", se grabará la llamada. |
Extremo:
Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"ticket_id": "76517",
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Ejemplo de solicitud y respuestas
En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.
Error : end_user_number no tiene el formato correcto
En este ejemplo, se muestra el error debido a que el end_user_namber no tiene el formato correcto.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 999-657-12",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
"message": "end_user_number is not well formed"
}
Código de estado: 400
Error : El menú está en el estado "redireccionamiento manual", por lo que no se pueden aceptar llamadas
En este ejemplo, se muestra la falla cuando el ID de menú especificado se configura para el redireccionamiento del menú y no puede aceptar llamadas.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "redireccionamiento manual" y no puede aceptar llamadas
{
"message": "Menu is in 'manual redirection' state, can't accept calls"
}
Código de estado: 400
Error : Tipo de llamada no válido
En este ejemplo, se muestra la falla cuando se realiza una solicitud y el tipo de llamada no es válido.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "InvalidCallType",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : Tipo de llamada no válido
{
"message": "Invalid call type"
}
Código de estado: 400
Error : El parámetro menu_id es obligatorio
En este ejemplo, se muestran la solicitud y la respuesta cuando no se proporciona un ID de menú, pero es obligatorio.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id is required
{
"message": "menu_id is required"
}
Código de estado: 400
Error : Solo se permiten IDs de menú para dispositivos móviles y la Web
En este ejemplo, se muestra una solicitud que falla cuando se proporciona un ID de menú que no es un ID de menú web o para dispositivos móviles.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 50,
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : Solo se permiten IDs de menú para dispositivos móviles y la Web
{
"message": "Only mobile and web menu IDs are permitted"
}
Código de estado: 400
Crea una llamada programada con el ID del menú
En este ejemplo, se muestra cómo crear una llamada programada con un ID de menú específico.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+82-10-6861-2345",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada programada con el ID del menú
{
"id": 515,
"lang": "en",
"call_type": "Voice Inbound (API)",
"status": "queued",
"created_at": "2019-09-10T00:19:14.000Z",
"queued_at": null,
"assigned_at": null,
"connected_at": null,
"ends_at": null,
"scheduled_at": "2019-09-15T00:19:14.421Z",
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"out_ticket_id": null,
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": {
"id": 9,
"name": "Lock Star",
"parent_id": null,
"position": 0,
"deleted": false,
"menu_type": "ivr_menu",
"output_msg": "You selected Lock Star.",
"hidden": false
},
"menu_path": {
"items_count": 1,
"name": "Lock Star",
"materialized_path": "9"
},
"agent_info": null,
"end_user": {
"id": 75,
"identifier": null,
"out_contact_id": "389391400633"
},
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 820,
"type": "end_user",
"status": "waiting",
"call_id": 515,
"user_id": null,
"end_user_id": 75,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": "cascade",
"offer_events": [
{
"casting_time": "2019-09-10T00:19:14.000Z",
"group": "Group 1"
}
],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Crea una llamada programada con el ID de llamada
En este ejemplo, se muestra cómo crear una llamada programada con un ID de llamada específico.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"call_id": 514,
"end_user_number": "+82-10-6861-2345",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada programada con el ID de llamada
{
"id": 515,
"lang": "en",
"call_type": "Voice Inbound (API)",
"status": "queued",
"created_at": "2019-09-10T00:19:14.000Z",
"queued_at": null,
"assigned_at": null,
"connected_at": null,
"ends_at": null,
"scheduled_at": "2019-09-15T00:19:14.421Z",
"wait_duration": 0,
"call_duration": 0,
"hold_duration": 0,
"rating": null,
"has_feedback": false,
"out_ticket_id": null,
"out_ticket_url": null,
"verified": false,
"recording_url": null,
"recording_permission": "not_asked",
"voicemail_reason": "not_voicemail",
"deflection": "no_deflection",
"disconnected_by": "disconnected_by_unknown",
"fail_reason": "nothing",
"fail_details": null,
"support_number": null,
"selected_menu": {
"id": 9,
"name": "Lock Star",
"parent_id": null,
"position": 0,
"deleted": false,
"menu_type": "ivr_menu",
"output_msg": "You selected Lock Star.",
"hidden": false
},
"menu_path": {
"items_count": 1,
"name": "Lock Star",
"materialized_path": "9"
},
"agent_info": null,
"end_user": {
"id": 75,
"identifier": null,
"out_contact_id": "389391400633"
},
"photos": [],
"videos": [],
"transfers": [],
"deflection_details": [],
"participants": [
{
"id": 820,
"type": "end_user",
"status": "waiting",
"call_id": 515,
"user_id": null,
"end_user_id": 75,
"call_duration": null,
"hold_duration": null,
"connected_at": null,
"ended_at": null,
"fail_reason": "nothing"
}
],
"offer_type": "cascade",
"offer_events": [
{
"casting_time": "2019-09-10T00:19:14.000Z",
"group": "Group 1"
}
],
"answer_type": "manual",
"outbound_number": "+1 339-219-5276"
}
Código de estado: 201
Error : El menú está en el estado "fuera del horario de atención", por lo que no se pueden aceptar llamadas entrantes
En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el menú proporcionado está fuera del horario de atención y, por lo tanto, no puede recibir llamadas entrantes.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "fuera del horario de atención", no se pueden aceptar llamadas entrantes
{
"message": "Menu is in 'after hours' state, can't accept incoming calls"
}
Código de estado: 400
Error : El idioma no está disponible
En este ejemplo, se muestra la falla cuando el idioma especificado no es válido.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "fr",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : El idioma no está disponible
{
"message": "Language 'fr' is not available"
}
Código de estado: 400
Error : No se encontró el idioma
En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el idioma no es válido o no está disponible.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "xy",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el idioma
{
"message": "Language 'xy' is not found"
}
Código de estado: 400
Error : No se encontró el ID del menú
En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el ID de menú proporcionado no es válido y no se encuentra.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9999,
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el ID del menú
{
"message": "menu_id 9999 is not found"
}
Código de estado: 400
Error : El ID del menú no tiene el formato correcto
En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el ID de menú proporcionado tiene un formato incorrecto.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": "menu_999",
"end_user_number": "+1 859-657-9625",
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id no tiene el formato correcto
{
"message": "menu_id is not well formed"
}
Código de estado: 400
Error : El número de usuario final es obligatorio
En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero no se proporcionó el número del usuario final.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : Se requiere end_user_number
{
"message": "end_user_number is required"
}
Código de estado: 400
Error : Se requiere scheduled_at
En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero falta el valor de la hora de programación, que es obligatorio.
Solicitud
Encabezados:
| Clave | Valor | Descripción |
|---|---|---|
| Content-Type | application/json |
Cuerpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Respuesta: Error : Se requiere scheduled_at
{
"message": "scheduled_at is required"
}
Código de estado: 400
Cómo obtener atributos de datos reservados durante una llamada
Extremo
Method: GET
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag
Ejemplo de solicitud y respuestas
En esta sección, se incluye un ejemplo de solicitud y respuesta para el extremo.
Listo
En este ejemplo, se muestra una llamada exitosa.
Solicitud
Variables de URL
| Clave | Valor | Descripción |
|---|---|---|
| id | integer | (Obligatorio) |
Respuesta
{
"verified_customer": "boolean",
"bad_actor": "boolean",
"repeat_customer": "boolean"
}
Código de estado 0
Actualiza los atributos de datos reservados durante una llamada
Extremo
Method: PATCH
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag
Variables de URL
| Clave | Valor | Descripción |
|---|---|---|
| id | integer | (Obligatorio) |
Body
{
"verified_customer": "boolean",
"bad_actor": "boolean",
"repeat_customers": "boolean"
}
Pasa parámetros de datos a agentes virtuales a mitad de la sesión
Para usar la API de apps con el objetivo de pasar parámetros de datos a agentes virtuales en medio de una sesión de llamada, consulta Pasa parámetros de datos a agentes virtuales en medio de una sesión.