Extremos de llamadas

Los endpoints de API de llamadas proporcionan acceso a los objetos de llamada. Se crea un objeto de llamada para cada llamada que se realiza hacia y desde Contact Center AI Platform (CCAI Platform).

Los siguientes son los endpoints de API de llamadas:

Objeto Call

A continuación, se muestra un ejemplo del objeto de llamada:

[
  {
    "id": 0,
    "parent_id": 0,
    "lang": "en",
    "call_type": "Voice Scheduled (API)",
    "status": "scheduled",
    "created_at": "2018-06-07T19:49:52.896Z",
    "queued_at": "2018-06-07T19:49:52.896Z",
    "assigned_at": "2018-06-07T19:49:52.896Z",
    "connected_at": "2018-06-07T19:49:52.896Z",
    "ends_at": "2018-06-07T19:49:52.896Z",
    "scheduled_at": "2018-06-07T19:49:52.896Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": 0,
    "has_feedback": true,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "string",
    "out_ticket_url": "string",
    "verified": true,
    "recording_url": "string",
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_details": "string",
    "fail_reason": "nothing",
    "support_number": "string",
    "selected_menu": {
      "id": 0,
      "name": "string",
      "parent_id": 0,
      "position": 0,
      "deleted": true,
      "hidden": "string",
      "menu_type": "ivr_menu",
      "output_msg": "string"
    },
    "menu_path": {
      "items_count": 0,
      "name": "string",
      "materialized_path": "string"
    },
    "agent_info": {
      "id": 0,
      "name": "string",
      "last_name": "string",
      "first_name": "string",
      "agent_number": "string",
      "avatar_url": "string"
    },
    "end_user": {
      "id": 0,
      "identifier": "string",
      "out_contact_id": "string"
    },
    "photos": [
      {
        "id": 0,
        "photo_type": "photo",
        "url": "string"
      }
    ],
    "videos": [
      {
        "id": 0,
        "url": "string"
      }
    ],
    "transfers": [
      {
        "id": 0,
        "status": "transferring",
        "fail_reason": "nothing",
        "created_at": "2018-06-07T19:49:52.896Z",
        "from_menu": {
          "items_count": 0,
          "name": "string",
          "materialized_path": "string"
        },
        "to_menu": {
          "items_count": 0,
          "name": "string",
          "materialized_path": "string"
        },
        "from_agent": {
          "id": 0,
          "name": "string",
          "last_name": "string",
          "first_name": "string",
          "agent_number": "string",
          "avatar_url": "string"
        },
        "to_agent": {
          "id": 0,
          "name": "string",
          "last_name": "string",
          "first_name": "string",
          "agent_number": "string",
          "avatar_url": "string"
        }
      }
    ],
    "participants": [
      {
        "id": 0,
        "type": "end_user",
        "status": "waiting",
        "call_id": 0,
        "user_id": 0,
        "end_user_id": 0,
        "call_duration": 0,
        "hold_duration": 0,
        "connected_at": "2018-06-07T19:49:52.896Z",
        "ended_at": "2018-06-07T19:49:52.896Z",
        "fail_reason": "nothing"
      }
    ]
  }
]

Definiciones de los estados de las llamadas

El campo de estado puede tener cualquiera de los siguientes estados:

Estado de la llamada Descripción
Seleccionando Es el estado que se produce cuando un usuario final llama al centro de contacto, pero aún navega por las opciones del menú antes de que se lo coloque en un menú de hoja.
En cola Es el estado que se produce después de que el usuario final selecciona un nodo de menú de hoja y, luego, inicia una solicitud de llamada para que se realice una transmisión Deltacast o Multicast a un agente.
Asignado Es el estado que se produce cuando se selecciona un agente para recibir la llamada del usuario final. Esto ocurre cuando un agente atiende una llamada.
Conectando Es el estado que se produce después de que se asigna un agente y se establece una conexión entre el usuario final y el agente.
Conectado Es el estado que se produce cuando la llamada estableció una conexión y el agente y el usuario final se encuentran en una llamada.
Finalizado Es el estado que se produce cuando finaliza una llamada después de que se conectó.
Con errores Es el estado que se produce cuando una llamada finaliza antes de que se conecte correctamente. También se proporcionará un motivo de falla para obtener más detalles.
Cambiando Es el estado que se produce cuando falla una llamada mientras se intenta conectar y CCAI Platform intenta conectar la llamada con un proveedor de VoIP diferente.
Recuperada Es el estado que se produce cuando se devuelve una llamada fallida. Esta nueva llamada es un elemento secundario de la llamada original. Se recuperaron las notas que indican que la devolución de llamada finalizó sin errores.
Programado Es el estado que se produce cuando un usuario final programa una llamada futura con In-Web o In-App.
Solo de acción Es el estado que se produce cuando una llamada que administra el proveedor de telefonía de nuestro cliente se conecta a nuestro SDK para iOS o Android.
Se completó la acción Es el estado que se produce cuando una llamada que administra el proveedor de telefonía de nuestro cliente se conecta a nuestro SDK para iOS o Android y finaliza.
Se desvió la pelota Es el estado que se produce según la configuración de las colas de capacidad excedida o las llamadas fuera de horario. Las opciones de desvío incluyen el buzón de voz y la programación de llamadas, entre otras. La desviación variará según el canal (en la app, IVR, en la Web)
Mensaje de voz Es el estado que se produce cuando un usuario final se desvía a una opción de mensaje de voz y elige dejar un mensaje de voz para que se escuche más tarde. Este estado se presenta cuando el usuario final está dejando el mensaje de voz.
Mensaje de voz recibido Estado que se produce después de que un usuario final deja un mensaje de voz y un agente no lo escucha
Lectura de mensajes de voz Estado que se produce cuando un agente abre el mensaje de voz para escucharlo.

Definiciones de los tipos de llamadas

El campo call_type solo puede tener uno de los siguientes valores:

Tipo de llamada Descripción
Voz saliente (API) Llamada realizada desde la API de llamada saliente.
Entrante de voz (API) Llamada realizada desde la API de llamadas entrantes.
Voice Scheduled (API) Llamada realizada desde la API de llamadas programadas.

Códigos de respuesta de la API comunes

Las siguientes son las respuestas de la API más comunes:

Código de respuesta Significado
201 La solicitud a la API se realizó correctamente y creará una llamada
202 La solicitud a la API se realizó correctamente, pero se requiere una intervención manual dentro del widget para completar la acción.
400 tipo de llamada no válido: asegúrate de que se admita call_type
400 El agente no está disponible para atender esta llamada
400 Falta un parámetro: Verifica que se hayan agregado los parámetros obligatorios
404 No se encontró el recurso. Revisa tu subdominio

Llamada saliente: end_user_number

Parámetro Obligatorio Tipo de datos Definición
call_tye TRUE String Llama a tye para crear. Por el momento, están disponibles "Voice Outbound (API)" y "OutboundCall" (obsoleto)
agent_email TRUE String Es la dirección de correo electrónico del agente que se asignará a la llamada saliente.
ticket_id FALSO String el ID del ticket de CRM y llamará al usuario final vinculado al ticket.
end_user_number FALSO String Es el número de teléfono del usuario final que se marcará. ticket_id tiene una prioridad más alta que end_user_number.
outbound_number FALSO String Es un número de salida con el formato correcto que se administra desde Configuración > Números de teléfono > Administración de números de teléfono. Se usará el número de salida predeterminado cuando esté vacío
lang FALSO String Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en")

Extremo:

Method: POST
Type: RAW
URL: https://{subdomain}.​{domain}​/apps/api/v1/calls

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}

Ejemplo de solicitud y respuestas

En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.

Error : El agente no está disponible para atender esta llamada

En este ejemplo, se muestra la situación de falla cuando el agente no está disponible para recibir la llamada.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respuesta: Error : El agente no está disponible para atender esta llamada
{
    "message": "Agent is not available to take this call"
}

Código de estado: 400

Crea una llamada saliente con el número del usuario final

En este ejemplo, se muestra cómo realizar una llamada saliente para un número de usuario final específico.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Respuesta: Crea una llamada saliente con end_user_number
{
    "id": 397,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:27:30.406Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:27:30.441Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/avatar.jpg"
    },
    "end_user": null,
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 610,
            "type": "agent",
            "status": "waiting",
            "call_id": 397,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 611,
            "type": "end_user",
            "status": "waiting",
            "call_id": 397,
            "user_id": null,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Código de estado: 201

Crea una llamada saliente con el ID del ticket

En este ejemplo, se muestra la creación de una llamada saliente con un ID de ticket específico.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "ticket_id": "71450",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Respuesta: Crea una llamada saliente con ticket_id
{
    "id": 398,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:28:47.955Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:28:47.971Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "71450",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/avatar.png"
    },
    "end_user": {
        "id": 67,
        "identifier": null,
        "out_contact_id": "381630957514"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 612,
            "type": "agent",
            "status": "waiting",
            "call_id": 398,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 613,
            "type": "end_user",
            "status": "waiting",
            "call_id": 398,
            "user_id": null,
            "end_user_id": 67,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Código de estado: 201

Error : Se requiere el ID del ticket o el número del usuario final

En este ejemplo, se muestra el caso de error en el que se requieren el ID del ticket o el número del usuario final, pero no se proporcionan.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respuesta: Error : Se requiere ticket_id o end_user_number

{
    "message": "ticket_id or end_user_number required"
}

Código de estado: 400

Error : No es un correo electrónico de agente válido

En este ejemplo, se muestra la falla cuando la dirección de correo electrónico proporcionada para un agente no es válida.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respuesta: Error : No es un correo electrónico de agente válido

{
    "message": "Not a valid agent email"
}

Código de estado: 400

Error : Se requiere el correo electrónico del agente

En este ejemplo, se muestra la falla cuando no se proporciona una dirección de correo electrónico para el agente.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respuesta: Error : Se requiere el correo electrónico del agente

{
    "message": "Agent email required"
}

Código de estado: 400

Error : El agente no tiene acceso para realizar llamadas

En este ejemplo, se muestra la falla cuando el agente especificado no tiene permiso para realizar llamadas salientes.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respuesta: Error : El agente no tiene acceso para realizar llamadas
{
    "message": "Agent does not have access to make calls"
}

Código de estado: 400

Error : end_user_number no tiene el formato correcto

En este ejemplo, se muestra la situación de falla en la que el número de usuario final proporcionado no tiene el formato correcto.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
    "message": "end_user_number is not well-formed"
}

Código de estado: 400

Error : No se encontró el contacto

En este ejemplo, se muestra la situación de falla en la que no existe el contacto proporcionado.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "ticket_id": 1,
    "lang": "en"
}
Respuesta: Error : No se encontró el contacto
{
    "message": "Contact not found"
}

Código de estado: 400

Aceptada : Se debe elegir un número de salida

En este ejemplo, se acepta la llamada saliente, pero el agente debe elegir el número saliente que usará antes de realizar la llamada.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}
Respuesta
{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Código de estado: 200

Error : Tipo de llamada no válido

En este ejemplo, se muestra la situación de falla en la que el tipo de llamada proporcionado no es válido.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respuesta: Error : Tipo de llamada no válido
{
    "message": "Invalid call type"
}

Código de estado: 400

Solicita el adaptador de llamadas con varios números salientes

En este caso, se le solicita al adaptador de llamadas que proporcione varios números salientes.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}
Respuesta
{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "lang": "en"
}

Código de estado: 200

Aceptado : El agente debe realizar una llamada saliente con el ID del ticket

En este ejemplo, se muestra una solicitud en la que el agente debe realizar una llamada saliente en función del ID de ticket proporcionado.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Código de estado: 202

Llamada saliente: ticket_id

Parámetro Obligatorio Tipo de datos Definición
call_type TRUE String Es el tipo de llamada que se creará. Por el momento, están disponibles "Voice Outbound (API)" y "OutboundCall" (obsoleto)
agent_email TRUE String Es la dirección de correo electrónico del agente que se asignará a la llamada saliente.
ticket_id FALSO String el ID del ticket de CRM y llamará al usuario final vinculado al ticket.
end_user_number FALSO String Es el número de teléfono del usuario final que se marcará. ticket_id tiene una prioridad más alta que end_user_number.
outbound_number FALSO String Es un número de salida con el formato correcto que se administra desde Configuración > Números de teléfono > Administración de números de teléfono. Se usará el número de salida predeterminado cuando esté vacío
lang FALSO String Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en")

Extremo:

Method: POST
Type: RAW
URL: https://{subdomain}.{domain}​/apps/api/v1/calls

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "ticket_id": "123123",
    "lang": "en"
}

Ejemplo de solicitud y respuestas

En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.

Error : Se requiere el ID del ticket o el número del usuario final

En este ejemplo, faltan el ID del ticket o el número del usuario final, pero son obligatorios.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Respuesta: Error : Se requiere ticket_id o end_user_number

{
    "message": "ticket_id or end_user_number required"
}

Código de estado: 400

Error : Se requiere el correo electrónico del agente

En este ejemplo, se muestra la situación de falla en la que no se proporciona el correo electrónico del agente, pero es obligatorio.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respuesta: Error : Se requiere el correo electrónico del agente
{
    "message": "Agent email required"
}

Código de estado: 400

Crea una llamada saliente con el número del usuario final

En este ejemplo, se muestra cómo crear una llamada saliente proporcionando el número del usuario final.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Respuesta: Crea una llamada saliente con end_user_number
{
    "id": 397,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:27:30.406Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:27:30.441Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reaso": "not_voicemail",
    "deflection": "n_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/default-profile.png"
    },
    "end_user": null,
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 610,
            "type": "agent",
            "status": "waiting",
            "call_id": 397,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 611,
            "type": "end_user",
            "status": "waiting",
            "call_id": 397,
            "user_id": null,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Código de estado: 201

Error : Tipo de llamada no válido

En este ejemplo, mostramos la situación de falla en la que el tipo de llamada proporcionado no es válido.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "ScheduledCall",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respuesta: Error : Tipo de llamada no válido
{
    "message": "Invalid call type"
}

Código de estado: 400

Solicita el adaptador de llamadas con varios números salientes

En este ejemplo, se muestra cómo solicitar al adaptador de llamadas varios números de teléfono salientes.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "lang": "en"
}

Código de estado: 202

Aceptado : El agente debe realizar una llamada saliente con el ID del ticket

En este ejemplo, mostramos cómo realizar una llamada saliente con un ID de ticket y el agente acepta la solicitud.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json
***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 falla 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

Aceptada : Se debe elegir un número de salida

En este ejemplo, se muestra la situación en la que se crea una solicitud de llamada saliente con la necesidad de elegir un número saliente y, luego, se acepta.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Código de estado: 202

Error : El agente no está disponible para atender esta llamada

En este ejemplo, mostramos la situación de falla en la que se crea una llamada, pero el agente no está disponible para aceptarla.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respuesta: Error : El agente no está disponible para atender esta llamada
{
    "message": "Agent is not available to take this call"
}

Código de estado: 400

Error : El número del usuario final no tiene el formato correcto

En este ejemplo, mostramos la situación de falla en la que el número de teléfono del usuario final proporcionado tiene un formato incorrecto.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
    "message": "end_user_number is not well-formed"
}

Código de estado: 400

Error : No es un correo electrónico de agente válido

En este ejemplo, mostramos la situación de falla en la que el correo electrónico del agente proporcionado no es válido.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Respuesta: Error : No es un correo electrónico de agente válido
{
    "message": "Not a valid agent email"
}

Código de estado: 400

Error : No se encontró el contacto

En este ejemplo, mostramos la situación de falla en la que no se pudo encontrar el contacto proporcionado.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "ticket_id": 1,
    "lang": "en"
}
Respuesta: Error : No se encontró el contacto
{
    "message": "Contact not found"
}

Código de estado: 400

Llamada entrante

Parámetro Obligatorio Tipo de datos Definición
call_type TRUE String Es el tipo de llamada que se creará. Usa "Voice Inbound (API)" o "IncomingCall" (obsoleto) para crear una llamada entrante.
menu_id TRUE Número entero Es el ID del menú al que se atribuirá la llamada. Solo se aceptan IDs de menú web y de IVR.
end_user_number TRUE String Es el número de teléfono del usuario final al que se llamará. Si se pasan ticket_id y end_user_number, ticket_id tendrá prioridad.
lang FALSO String Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en")
ticket_id FALSO String Es el ID del ticket de CRM. Se marcará el número de teléfono del usuario final vinculado al ticket. Si se pasan un ticket_id y un end_user_number, el ticket_id tendrá prioridad.
outbound_number FALSO String Es el número de teléfono saliente que se usará para la llamada. Se usará el número de teléfono saliente global predeterminado si no se pasa la entrada o no es válida. Los números salientes se administran desde Configuración > Cola > EDITAR / VER > Seleccionar una cola > Números de teléfono salientes.
recording_permission FALSO String El valor solo se evalúa si la función "Opciones de grabación de llamadas" está configurada en "Pedir permiso al usuario para grabar". Se puede configurar en Configuración > Cola > EDITAR / VER > Seleccionar una cola > Opciones de grabación de llamadas. Si el valor es "recording_permission_not_asked" (predeterminado) o "recording_permission_denied", no se grabará la llamada. Si el valor es "recording_permission_granted", se grabará la llamada.

Extremo:

Method: POST
Type: RAW
URL: https://{​{subdomain}​}.{​{domain}​}/apps/api/v1/calls

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}

Ejemplo de solicitud y respuestas

En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.

Error : El número del usuario final no tiene el formato correcto

En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el número de usuario final proporcionado tiene un formato incorrecto.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 999-657-12",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
    "message": "end_user_number is not well formed"
}

Código de estado: 400

Error : El menú está en el estado "redireccionamiento manual", por lo que no se pueden aceptar llamadas

En este ejemplo, mostramos la situación de falla en la que una llamada se enruta a un ID de menú, pero el menú está en estado de redireccionamiento manual y, por lo tanto, no puede recibir llamadas entrantes.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "redireccionamiento manual" y no puede aceptar llamadas
{
    "message": "Menu is in 'manual redirection' state, can't accept calls"
}

Código de estado: 400

Error : Tipo de llamada no válido

En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el tipo de llamada proporcionado no es válido.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "InvalidCallType",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : Tipo de llamada no válido
{
    "message": "Invalid call type"
}

Código de estado: 400

Error : El ID del menú es obligatorio

En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el ID de menú proporcionado no es válido.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id is required
{
    "message": "menu_id is required"
}

Código de estado: 400

Error : Solo se permiten IDs de menú de IVR y para dispositivos móviles

En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero el ID de menú proporcionado no es un ID de menú de IVR o de dispositivo móvil.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 50,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : Solo se permiten IDs de menú de IVR y de dispositivos móviles
{
    "message": "Only IVR and mobile menu IDs are permitted"
}

Código de estado: 400

Crea una llamada entrante con el número del usuario final

En este ejemplo, se muestra cómo crear una llamada entrante con un número de usuario final específico.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+82-10-6861-2345",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada entrante con end_user_number
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": "2019-09-10T00:19:14.421Z",
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Código de estado: 201

Error : El menú está en el estado "fuera del horario de atención", por lo que no se pueden aceptar llamadas entrantes

En este ejemplo, se muestra la falla cuando el ID del menú proporcionado está en estado fuera del horario de atención.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "fuera del horario de atención", no se pueden aceptar llamadas entrantes
{
    "message": "Menu is in 'after hours' state, can't accept incoming calls"
}

Código de estado: 400

Error : El idioma no está disponible

En este ejemplo, se muestra la solicitud de error cuando el idioma especificado no está disponible.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "fr",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : El idioma no está disponible
{
    "message": "Language 'fr' is not available"
}

Código de estado: 400

Crea una llamada entrante con el ID del ticket

En este ejemplo, se muestra la solicitud para crear una llamada entrante con un ID de ticket asociado.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada entrante con ticket_id
{
    "id": 519,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T05:12:26.000Z",
    "queued_at": "2019-09-10T05:12:26.295Z",
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": "76517",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 826,
            "type": "end_user",
            "status": "waiting",
            "call_id": 519,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T05:12:26.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Código de estado: 201

Error : No se encontró el idioma

En este ejemplo, se muestra la falla cuando no se encuentra el idioma proporcionado.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "xy",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el idioma
{
    "message": "Language 'xy' is not found"
}

Código de estado: 400

Error : No se encontró el ID de menú

En este ejemplo, se muestra la falla cuando no se encuentra el ID de menú proporcionado.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9999,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el parámetro menu_id
{
    "message": "menu_id 9999 is not found"
}

Código de estado: 400

Error : El formato de menu_id no es correcto

En este ejemplo, se muestra el error que se produce cuando el ID de menú proporcionado no es correcto.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": "menu_999",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id no tiene el formato correcto
{
    "message": "menu_id is not well formed"
}

Código de estado: 400

Error : Se requiere el número del usuario final

En este ejemplo, mostramos la situación de falla en la que se crea una llamada entrante, pero no se proporcionó el número de teléfono del usuario final.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : Se requiere end_user_number
{
    "message": "end_user_number is required"
}

Código de estado: 400

Llamada programada

Parámetro Obligatorio Tipo de datos Definición
call_type TRUE String Es el tipo de llamada que se creará. Usa "Voice Scheduled (API)" o "ScheduledCall" (obsoleto) para crear una llamada programada.
menu_id TRUE Número entero Es el ID del menú al que se atribuirá la llamada. Solo se aceptan IDs de menú para dispositivos móviles y la Web.
call_id FALSO Número entero Es el ID de la llamada anterior, que se vinculará como la llamada superior de la nueva llamada programada que se creó. Cuando se usa el ID de llamada, menu_id puede ser opcional.
end_user_number TRUE String Es el número de teléfono del usuario final al que se llamará. Si se pasan ticket_id y end_user_number, ticket_id tendrá prioridad.
lang FALSO String Es el idioma de la llamada. Usa códigos ISO 639-1. (Valor predeterminado: "en")
ticket_id FALSO String Es el ID del ticket de CRM. Se marcará el número de teléfono del usuario final vinculado al ticket. Si se pasan un ticket_id y un end_user_number, el ticket_id tendrá prioridad.
scheduled_at TRUE String Es la hora programada de la llamada. Usa el formato ISO 8601 para una hora futura válida.
recording_permission FALSO String El valor solo se evalúa si la función "Opciones de grabación de llamadas" está configurada en "Pedir permiso al usuario para grabar". Se puede configurar en Configuración > Cola > EDITAR / VER > Seleccionar una cola > Opciones de grabación de llamadas. Si el valor es "recording_permission_not_asked" (predeterminado) o "recording_permission_denied", no se grabará la llamada. Si el valor es "recording_permission_granted", se grabará la llamada.

Extremo:

Method: POST
Type: RAW
URL: https://{​{subdomain}​}.{​{domain}​}/apps/api/v1/calls

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}

Ejemplo de solicitud y respuestas

En las siguientes secciones, se proporcionan ejemplos de solicitudes al extremo.

Error : end_user_number no tiene el formato correcto

En este ejemplo, se muestra el error debido a que el end_user_namber no tiene el formato correcto.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 999-657-12",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : end_user_number no tiene el formato correcto
{
    "message": "end_user_number is not well formed"
}

Código de estado: 400

Error : El menú está en el estado "redireccionamiento manual", por lo que no se pueden aceptar llamadas

En este ejemplo, se muestra la falla cuando el ID de menú especificado se configura para el redireccionamiento del menú y no puede aceptar llamadas.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "redireccionamiento manual" y no puede aceptar llamadas
{
    "message": "Menu is in 'manual redirection' state, can't accept calls"
}

Código de estado: 400

Error : Tipo de llamada no válido

En este ejemplo, se muestra la falla cuando se realiza una solicitud y el tipo de llamada no es válido.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "InvalidCallType",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : Tipo de llamada no válido
{
    "message": "Invalid call type"
}

Código de estado: 400

Error : El parámetro menu_id es obligatorio

En este ejemplo, se muestran la solicitud y la respuesta cuando no se proporciona un ID de menú, pero es obligatorio.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id is required
{
    "message": "menu_id is required"
}

Código de estado: 400

Error : Solo se permiten IDs de menú para dispositivos móviles y la Web

En este ejemplo, se muestra una solicitud que falla cuando se proporciona un ID de menú que no es un ID de menú web o para dispositivos móviles.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 50,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : Solo se permiten IDs de menú para dispositivos móviles y la Web
{
    "message": "Only mobile and web menu IDs are permitted"
}

Código de estado: 400

Crea una llamada programada con el ID del menú

En este ejemplo, se muestra cómo crear una llamada programada con un ID de menú específico.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+82-10-6861-2345",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada programada con el ID del menú
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": null,
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Código de estado: 201

Crea una llamada programada con el ID de llamada

En este ejemplo, se muestra cómo crear una llamada programada con un ID de llamada específico.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "call_id": 514,
    "end_user_number": "+82-10-6861-2345",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Crea una llamada programada con el ID de llamada
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": null,
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Código de estado: 201

Error : El menú está en el estado "fuera del horario de atención", por lo que no se pueden aceptar llamadas entrantes

En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el menú proporcionado está fuera del horario de atención y, por lo tanto, no puede recibir llamadas entrantes.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : El menú está en el estado "fuera del horario de atención", no se pueden aceptar llamadas entrantes
{
    "message": "Menu is in 'after hours' state, can't accept incoming calls"
}

Código de estado: 400

Error : El idioma no está disponible

En este ejemplo, se muestra la falla cuando el idioma especificado no es válido.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "fr",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : El idioma no está disponible
{
    "message": "Language 'fr' is not available"
}

Código de estado: 400

Error : No se encontró el idioma

En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el idioma no es válido o no está disponible.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "xy",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el idioma
{
    "message": "Language 'xy' is not found"
}

Código de estado: 400

Error : No se encontró el ID del menú

En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el ID de menú proporcionado no es válido y no se encuentra.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9999,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : No se encontró el ID del menú
{
    "message": "menu_id 9999 is not found"
}

Código de estado: 400

Error : El ID del menú no tiene el formato correcto

En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero el ID de menú proporcionado tiene un formato incorrecto.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": "menu_999",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : menu_id no tiene el formato correcto
{
    "message": "menu_id is not well formed"
}

Código de estado: 400

Error : El número de usuario final es obligatorio

En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero no se proporcionó el número del usuario final.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : Se requiere end_user_number
{
    "message": "end_user_number is required"
}

Código de estado: 400

Error : Se requiere scheduled_at

En este ejemplo, mostramos la situación de falla en la que se crea una llamada programada, pero falta el valor de la hora de programación, que es obligatorio.

Solicitud

Encabezados:

Clave Valor Descripción
Content-Type application/json

Cuerpo:

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Respuesta: Error : Se requiere scheduled_at
{
    "message": "scheduled_at is required"
}

Código de estado: 400

Cómo obtener atributos de datos reservados durante una llamada

Extremo

Method: GET
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag

Ejemplo de solicitud y respuestas

En esta sección, se incluye un ejemplo de solicitud y respuesta para el extremo.

Listo

En este ejemplo, se muestra una llamada exitosa.

Solicitud

Variables de URL

Clave Valor Descripción
id integer (Obligatorio)
Respuesta
{
    "verified_customer": "boolean",
    "bad_actor": "boolean",
    "repeat_customer": "boolean"
}

Código de estado 0

Actualiza los atributos de datos reservados durante una llamada

Extremo

Method: PATCH
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag

Variables de URL

Clave Valor Descripción
id integer (Obligatorio)

Body

{
    "verified_customer": "boolean",
    "bad_actor": "boolean",
    "repeat_customers": "boolean"
}

Pasa parámetros de datos a agentes virtuales a mitad de la sesión

Para usar la API de apps con el objetivo de pasar parámetros de datos a agentes virtuales en medio de una sesión de llamada, consulta Pasa parámetros de datos a agentes virtuales en medio de una sesión.