Los extremos de la API de llamadas proporcionan acceso a los objetos de llamadas. Se crea un objeto de llamada para cada llamada que se realiza hacia y desde Contact Center AI Platform (CCAI Platform).
A continuación, se indican los extremos de la API de llamadas:
Actualiza los atributos de datos reservados durante una llamada
Cómo obtener atributos de datos reservados durante una llamada
Cómo pasar parámetros de datos a los agentes virtuales durante la sesión
Objeto de llamada
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 estar en cualquiera de los siguientes estados:
| Estado de la llamada | Descripción |
|---|---|
| Seleccionando | Estado que se produce cuando un usuario final llama al centro de contacto, pero aún navega por las opciones del menú antes de llegar a un menú hoja. |
| En cola | Es el estado que se produce después de que el usuario final selecciona un nodo de menú hoja y solicita una llamada para que se transmita a un agente a través de Deltacast o Multicast. |
| Asignado | 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 | Estado que se produce cuando la llamada estableció una conexión y el agente y el usuario final están en una llamada. |
| Finalizado | Estado que se produce cuando finaliza una llamada después de que se conectó. |
| Con errores | Estado que se produce cuando una llamada finaliza antes de que se conecte correctamente. También se proporcionará un motivo de falla para obtener detalles adicionales. |
| Cambiando | Estado que se produce cuando falla una llamada mientras se intenta conectar y la Plataforma de CCAI 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 secundaria de la llamada original. Notas recuperadas que indican que la devolución de llamada finalizó sin errores. |
| Programado | Estado que se produce cuando un usuario final programó una llamada futura con In-Web o In-App. |
| Solo de acción | Estado que se produce cuando una llamada que controla el proveedor de telefonía propio de nuestro cliente se conecta a nuestro SDK para iOS o Android. |
| Solo acción finalizada | Estado que se produce cuando una llamada que controla 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 por capacidad excedida o las llamadas fuera de horario. Entre las opciones de desvío, se 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 y en la Web). |
| Mensaje de voz | Estado que se produce cuando se desvía a un usuario final a una opción de mensaje de voz y este decide dejar un mensaje de voz para escucharlo más tarde. Este estado está presente 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 abrió el mensaje de voz para escucharlo. |
Definiciones de tipos de llamadas
El campo call_type solo puede tener uno de los siguientes valores:
| Tipo de llamada | Descripción |
|---|---|
| Llamadas salientes de voz (API) | Es una llamada realizada desde la API de Outbound Call. |
| Llamada entrante de voz (API) | Llamada realizada desde la API de Incoming Call. |
| Programada por voz (API) | Llamada realizada desde la API de Scheduled Call. |
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 se creará una llamada. |
| 202 | La solicitud a la API se realizó correctamente, pero se requiere 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. Comprueba tu subdominio. |
Llamada saliente: end_user_number
| Parámetro | Obligatorio | Tipo de datos | Definición |
|---|---|---|---|
| call_tye | TRUE | String | Llamada a tye para crear. Por el momento, están disponibles "Voice Outbound (API)" y "OutboundCall" (obsoleto). |
| agent_email | TRUE | String | Dirección de correo electrónico del agente que se asignará a la llamada saliente. |
| ticket_id | FALSO | String | ID del ticket de CRM, y marcará al usuario final asociado al ticket. |
| end_user_number | FALSO | String | Es el número de teléfono del usuario final que realizará la llamada. ticket_id tiene mayor prioridad que end_user_number. |
| outbound_number | FALSO | String | Número de salida bien formado que se administra desde Configuración > Números de teléfono > Administración de números de teléfono. Si está vacío, se usará el número de salida predeterminado. |
| lang | FALSO | String | Idioma de la llamada. Se usan códigos ISO 639-1. (Valor predeterminado: "en") |
Endpoint:
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 falla 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 el error que se produce 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 el error que se produce 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 el error 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 error 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
Aceptado : Debes elegir un número saliente
En este ejemplo, se acepta la llamada saliente, pero el agente debe elegir el número saliente que se usará antes de que se realice 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 error 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
Solicitar el adaptador de llamadas con varios números salientes
En este caso, se le solicita al adaptador de llamadas 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 según el 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 | Dirección de correo electrónico del agente que se asignará a la llamada saliente. |
| ticket_id | FALSO | String | ID del ticket de CRM, y marcará al usuario final asociado al ticket. |
| end_user_number | FALSO | String | Es el número de teléfono del usuario final que realizará la llamada. ticket_id tiene mayor prioridad que end_user_number. |
| outbound_number | FALSO | String | Número de salida bien formado que se administra desde Configuración > Números de teléfono > Administración de números de teléfono. Si está vacío, se usará el número de salida predeterminado. |
| lang | FALSO | String | Idioma de la llamada. Se usan códigos ISO 639-1. (Valor predeterminado: "en") |
Endpoint:
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 escenario de falla del 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, mostramos 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, se muestra la situación de error 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
Solicitar el adaptador de llamadas con varios números salientes
En este ejemplo, mostramos 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 cómo 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
Aceptado : Debes elegir un número saliente
En este ejemplo, mostramos 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 error 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 de 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 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 es un correo electrónico de agente válido
En este ejemplo, mostramos la situación de falla en la que la dirección de correo electrónico del agente proporcionada 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 : No se encontró el contacto
En este ejemplo, mostramos la situación de error en la que no se pudo ubicar 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 IVR y de menú web. |
| end_user_number | TRUE | String | Es el número de teléfono del usuario final al que se llamará. Si se pasan un ticket_id y un end_user_number, el ticket_id tendrá prioridad. |
| lang | FALSO | String | Idioma de la llamada. Se usan códigos ISO 639-1. (Valor predeterminado: "en") |
| ticket_id | FALSO | String | Es el ID del ticket del CRM. Se marcará el número de teléfono del usuario final asociado 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 una entrada o si esta no es válida. Los números salientes se administran en Configuración > Cola > EDITAR / VER > Selecciona 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 como "Pedir permiso al usuario para grabar". Se puede configurar en Configuración > Cola > EDITAR / VER > Selecciona 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. |
Endpoint:
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 no tiene el formato correcto.
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 estado de "redireccionamiento manual", no se pueden aceptar llamadas
En este ejemplo, mostramos la situación de error en la que se enruta una llamada a un ID de menú, pero ese 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 estado de "redireccionamiento manual", no se pueden 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 error 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 : Se requiere el ID del menú
En este ejemplo, mostramos la situación de error 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 : Se requiere menu_id
{
"message": "menu_id is required"
}
Código de estado: 400
Error : Solo se permiten los IDs de IVR y del menú 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 IVR ni de menú para dispositivos móviles.
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 los IDs de IVR y del menú para 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 estado "fuera de horario", no se pueden aceptar llamadas entrantes
En este ejemplo, se muestra la falla cuando el ID del menú proporcionado está en estado fuera de horario.
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 estado "fuera de horario", 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ó menu_id
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ó menu_id
{
"message": "menu_id 9999 is not found"
}
Código de estado: 400
Error : menu_id no tiene el formato correcto
En este ejemplo, se muestra el error 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 los 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 principal de la nueva llamada programada creada. 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 un ticket_id y un end_user_number, el ticket_id tendrá prioridad. |
| lang | FALSO | String | Idioma de la llamada. Se usan códigos ISO 639-1. (Valor predeterminado: "en") |
| ticket_id | FALSO | String | Es el ID del ticket del CRM. Se marcará el número de teléfono del usuario final asociado al ticket. Si se pasan un ticket_id y un end_user_number, el ticket_id tendrá prioridad. |
| scheduled_at | TRUE | String | Hora programada de la llamada. Usa el formato ISO 8601 para una fecha y hora futuras válidas. |
| recording_permission | FALSO | String | El valor solo se evalúa si la función "Opciones de grabación de llamadas" está configurada como "Pedir permiso al usuario para grabar". Se puede configurar en Configuración > Cola > EDITAR / VER > Selecciona 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. |
Endpoint:
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 parámetro end_user_number 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 estado de "redireccionamiento manual", no se pueden aceptar llamadas
En este ejemplo, se muestra la falla cuando el ID de menú especificado se establece en redireccionamiento de 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 estado de "redireccionamiento manual", no se pueden 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 : Se requiere menu_id
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 : Se requiere menu_id
{
"message": "menu_id is required"
}
Código de estado: 400
Error : Solo se permiten IDs de menú web y para dispositivos móviles
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ú web y para dispositivos móviles
{
"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 estado "fuera de horario", 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 estado "fuera de horario", 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 error 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 error 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 del menú proporcionado 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": "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 : Se requiere el número del usuario final
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 programado, 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"
}
Cómo pasar parámetros de datos a los agentes virtuales durante la sesión
Para usar la API de Apps y pasar parámetros de datos a los agentes virtuales durante una sesión de llamada, consulta Cómo pasar parámetros de datos a agentes virtuales durante la sesión.