Extremos de llamadas

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:

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
***Cuerpo:*** ```json { "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 tiene acceso para realizar llamadas En este ejemplo, mostramos la situación de error en la que se envía una solicitud de creación de llamada, pero el agente no tiene acceso 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

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.