Os endpoints da API Call fornecem acesso aos objetos de chamada. Um objeto de chamada é criado para cada chamada feita para e da Contact Center AI Platform (CCAI Platform).
Estes são os endpoints da API Call:
Objeto de chamada
Confira um exemplo do objeto de chamada:
[
{
"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"
}
]
}
]
Definições de status das chamadas
O campo de status pode estar em qualquer um dos seguintes estados:
| Status da chamada | Descrição |
|---|---|
| Selecionando | Estado que ocorre quando um usuário final liga para a central de atendimento, mas ainda está navegando pelas opções do menu antes de ser colocado em um menu folha. |
| Na fila | Estado que ocorre depois que o usuário final seleciona um nó de menu folha e inicia uma solicitação de chamada para ser transmitida ou multicast para um agente. |
| Atribuído | Estado que ocorre quando um agente é selecionado para receber a ligação do usuário final. Isso acontece quando um agente atende uma ligação. |
| Conectando | Estado que ocorre depois que um agente é atribuído e uma conexão está sendo estabelecida entre o usuário final e o agente. |
| Conectado | Estado que ocorre quando a chamada estabeleceu uma conexão e o agente e o usuário final estão em uma ligação. |
| Concluído | Estado que ocorre quando uma chamada termina depois de ser conectada. |
| Falha | Estado que ocorre quando uma chamada termina antes de ser conectada. Um motivo de falha também será fornecido para mais detalhes. |
| Alternando | Estado que ocorre quando uma chamada falha ao tentar se conectar e a plataforma CCAI tenta conectar a chamada com um provedor de VoIP diferente. |
| Recuperado | Estado que ocorre quando uma chamada com falha é retornada. Essa nova chamada é filha da original. Recuperado e indica que o retorno de chamada foi concluído sem erros. |
| Programado | Estado que ocorre quando um usuário final agenda uma ligação futura usando o recurso no site ou no app. |
| Apenas ação | Estado que ocorre quando uma chamada processada pelo provedor de telefonia do cliente é conectada ao nosso SDK para iOS ou Android. |
| Ação concluída | Estado que ocorre quando uma chamada processada pelo provedor de telefonia do cliente é conectada ao nosso SDK para iOS ou Android e termina. |
| Desviada | Estado que ocorre com base na configuração de filas de excesso de capacidade ou ligações fora do horário comercial. As opções de rejeição incluem correio de voz, agendamento de ligação e outras. A redução varia de acordo com o canal (no app, URA, na Web). |
| Correio de voz | Estado que ocorre quando um usuário final é redirecionado para uma opção de correio de voz e escolhe deixar uma mensagem para ouvir depois. Esse estado está presente quando o usuário final está saindo da caixa de correio de voz. |
| Correio de voz recebido | Estado que ocorre depois que um usuário final deixa um correio de voz e um agente não ouve a mensagem. |
| Correio de voz lido | Estado que ocorre quando um agente abre o correio de voz para ouvir. |
Definições de tipo de chamada
O campo call_type só pode ter um dos seguintes valores:
| Tipo de chamada | Descrição |
|---|---|
| Voice Outbound (API) | Chamada feita pela API Outbound Call. |
| Entrada de voz (API) | Chamada feita pela API Incoming Call. |
| Voice Scheduled (API) | Chamada feita pela API Scheduled Call. |
Códigos de resposta comuns da API
Confira a seguir as respostas de API mais comuns:
| Código de resposta | Significado |
|---|---|
| 201 | A solicitação de API foi concluída e vai criar uma chamada. |
| 202 | A solicitação de API foi bem-sucedida, mas é necessária intervenção manual no widget para concluir a ação. |
| 400 | tipo de chamada inválido. Verifique se call_type é compatível. |
| 400 | O agente não está disponível para atender esta ligação |
| 400 | Parâmetro ausente: verifique se os parâmetros obrigatórios foram adicionados |
| 404 | Recurso não encontrado. Verifique seu subdomínio. |
Chamada de saída: end_user_number
| Parâmetro | Obrigatório | Tipo de dados | Definição |
|---|---|---|---|
| call_tye | TRUE | String | Chame "tye" para criar. "Voice Outbound (API)" e "OutboundCall" (descontinuado) estão disponíveis por enquanto |
| agent_email | TRUE | String | Endereço de e-mail do agente que será atribuído à chamada de saída. |
| ticket_id | FALSO | String | ID do tíquete do CRM e vai ligar para o usuário final vinculado ao tíquete. |
| end_user_number | FALSO | String | Número de telefone do usuário final que vai ligar. "ticket_id" tem uma prioridade maior que "end_user_number". |
| outbound_number | FALSO | String | Número de saída bem formado, gerenciado em Configurações > Números de telefone > Gerenciamento de números de telefone. O número de saída padrão será usado quando estiver vazio. |
| lang | FALSO | String | Idioma da chamada. Usa códigos ISO 639-1. Padrão: "en" |
Endpoint:
Method: POST
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"outbound_number": "+1 760-867-5309",
"end_user_number": "123123",
"lang": "en"
}
Exemplo de solicitação e respostas
As seções a seguir fornecem exemplos de solicitações ao endpoint.
Erro : o agente não está disponível para atender esta ligação
Este exemplo demonstra o cenário de falha quando o agente não está disponível para receber a ligação.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Error : Agent is not available to take this call
{
"message": "Agent is not available to take this call"
}
Código de status:400
Criar uma chamada externa com o número do usuário final
Este exemplo demonstra como fazer uma chamada externa para um número de usuário final específico.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: crie uma chamada externa com 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 status: 201
Criar uma chamada com ID do tíquete
Este exemplo demonstra a criação de uma chamada externa com um ID de ticket específico.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"ticket_id": "71450",
"outbound_number": "+1 339-219-5276",
"lang": "en"
}
Resposta: crie uma chamada com 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 status: 201
Erro : é necessário inserir o ID do tíquete ou o número do usuário final
Este exemplo demonstra o caso de falha em que o ID do tíquete ou o número do usuário final são obrigatórios, mas não foram fornecidos.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Error : ticket_id or end_user_number required
{
"message": "ticket_id or end_user_number required"
}
Código de status:400
Erro : o e-mail do agente não é válido
Este exemplo demonstra a falha quando o endereço de e-mail fornecido para um agente não é válido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Erro : o e-mail do agente não é válido
{
"message": "Not a valid agent email"
}
Código de status:400
Erro : o e-mail do agente é obrigatório
Este exemplo demonstra a falha quando um endereço de e-mail não é fornecido para o agente.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Error : Agent email required
{
"message": "Agent email required"
}
Código de status:400
Erro : o agente não tem acesso para fazer ligações
Este exemplo demonstra a falha quando o agente especificado não tem permissão para fazer chamadas.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Erro : o agente não tem acesso para fazer chamadas
{
"message": "Agent does not have access to make calls"
}
Código de status:400
Erro : end_user_number não está bem formatado
Este exemplo demonstra o cenário de falha em que o número do usuário final fornecido não está formatado corretamente.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Resposta: Error : end_user_number is not well-formed
{
"message": "end_user_number is not well-formed"
}
Código de status:400
Erro : contato não encontrado
Este exemplo demonstra o cenário de falha em que o contato fornecido não existe.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"ticket_id": 1,
"lang": "en"
}
Resposta: erro : contato não encontrado
{
"message": "Contact not found"
}
Código de status:400
Aceita : é necessário escolher um número de saída
Neste exemplo, a chamada é aceita, mas o agente precisa escolher o número de saída a ser usado antes de fazer a ligação.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"outbound_number": "+1 760-867-5309",
"end_user_number": "123123",
"lang": "en"
}
Resposta
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Código de status:200
Erro : tipo de chamada inválido
Este exemplo demonstra o cenário de falha em que o tipo de chamada fornecido é inválido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Resposta: Error : Invalid call type
{
"message": "Invalid call type"
}
Código de status:400
Solicitar o adaptador de chamadas por vários números de saída
Nesse cenário, o adaptador de chamadas recebe vários números de saída.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "agent@somedomain.com",
"outbound_number": "+1 760-867-5309",
"end_user_number": "123123",
"lang": "en"
}
Resposta
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 859-657-9625",
"lang": "en"
}
Código de status:200
Aceita : o agente precisa fazer uma ligação com o ID do tíquete
Este exemplo demonstra uma solicitação em que o agente precisa fazer uma ligação externa com base no ID do tíquete fornecido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Código de status:202
Chamada de saída - ticket_id
| Parâmetro | Obrigatório | Tipo de dados | Definição |
|---|---|---|---|
| call_type | TRUE | String | Tipo de chamada a ser criada. "Voice Outbound (API)" e "OutboundCall" (descontinuado) estão disponíveis por enquanto |
| agent_email | TRUE | String | Endereço de e-mail do agente que será atribuído à chamada de saída. |
| ticket_id | FALSO | String | ID do tíquete do CRM e vai ligar para o usuário final vinculado ao tíquete. |
| end_user_number | FALSO | String | Número de telefone do usuário final que vai ligar. "ticket_id" tem uma prioridade maior que "end_user_number". |
| outbound_number | FALSO | String | Número de saída bem formado, gerenciado em Configurações > Números de telefone > Gerenciamento de números de telefone. O número de saída padrão será usado quando estiver vazio. |
| lang | FALSO | String | Idioma da chamada. Usa códigos ISO 639-1. Padrão: "en" |
Endpoint:
Method: POST
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-867-5309",
"ticket_id": "123123",
"lang": "en"
}
Exemplo de solicitação e respostas
As seções a seguir fornecem exemplos de solicitações ao endpoint.
Erro : é necessário inserir o ID do tíquete ou o número do usuário final
Neste exemplo, o cenário de falha do ID do tíquete ou do número do usuário final está ausente, mas é obrigatório.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Error : ticket_id or end_user_number required
{
"message": "ticket_id or end_user_number required"
}
Código de status:400
Erro : o e-mail do agente é obrigatório
Neste exemplo, mostramos o cenário de falha em que o e-mail do agente não é fornecido, mas é obrigatório.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Error : Agent email required
{
"message": "Agent email required"
}
Código de status:400
Criar uma chamada externa com o número do usuário final
Neste exemplo, mostramos como criar uma chamada externa fornecendo o número do usuário final.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: crie uma chamada externa com 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 status: 201
Erro : tipo de chamada inválido
Neste exemplo, mostramos o cenário de falha em que o tipo de chamada fornecido é inválido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "ScheduledCall",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Resposta: Error : Invalid call type
{
"message": "Invalid call type"
}
Código de status:400
Solicitar o adaptador de chamadas por vários números de saída
Neste exemplo, mostramos como solicitar ao adaptador de chamadas vários números de telefone de saída.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 859-657-9625",
"lang": "en"
}
Código de status:202
Aceita : o agente precisa fazer uma ligação com o ID do tíquete
Neste exemplo, mostramos como fazer uma chamada externa com um ID de tíquete e o agente aceita a solicitação.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Erro : o agente não tem acesso para fazer chamadas
{
"message": "Agent does not have access to make calls"
}
Código de status:400
Crie uma chamada com o ID do tíquete.
Neste exemplo, mostramos o cenário de criação de uma chamada externa com um ID de tíquete.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"ticket_id": "71450",
"outbound_number": "+1 339-219-5276",
"lang": "en"
}
Resposta: crie uma chamada com 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 status: 201
Aceita : é necessário escolher um número de saída
Neste exemplo, mostramos o cenário em que uma solicitação de chamada é criada com a necessidade de escolher um número de saída e, em seguida, é aceita.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Código de status:202
Erro : o agente não está disponível para atender esta ligação
Neste exemplo, mostramos o cenário de falha em que uma chamada é criada, mas o agente não está disponível para atender.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Error : Agent is not available to take this call
{
"message": "Agent is not available to take this call"
}
Código de status:400
Erro : o número do usuário final não está bem formatado
Neste exemplo, mostramos o cenário de falha em que o número de telefone do usuário final fornecido está incorreto.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"end_user_number": "123123",
"lang": "en"
}
Resposta: Error : end_user_number is not well-formed
{
"message": "end_user_number is not well-formed"
}
Código de status:400
Erro : o e-mail do agente não é válido
Neste exemplo, mostramos o cenário de falha em que o e-mail do agente fornecido é inválido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "admin@somedomain.com",
"end_user_number": "+1 205-123-4567",
"lang": "en"
}
Resposta: Erro : o e-mail do agente não é válido
{
"message": "Not a valid agent email"
}
Código de status:400
Erro : contato não encontrado
Neste exemplo, mostramos o cenário de falha em que o contato fornecido não pôde ser localizado.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Outbound (API)",
"agent_email": "allen@somedomain.com",
"outbound_number": "+1 760-410-8538",
"ticket_id": 1,
"lang": "en"
}
Resposta: erro : contato não encontrado
{
"message": "Contact not found"
}
Código de status:400
Chamada recebida
| Parâmetro | Obrigatório | Tipo de dados | Definição |
|---|---|---|---|
| call_type | TRUE | String | Tipo de chamada a ser criada. Use "Voice Inbound (API)" ou "IncomingCall" (descontinuado) para criar uma chamada recebida. |
| menu_id | TRUE | Número inteiro | O ID do menu a que a chamada será atribuída. Somente IDs de menu da Web e de URA são aceitos. |
| end_user_number | TRUE | String | O número de telefone do usuário final que será discado. Se um ticket_id e um end_user_number forem transmitidos, o ticket_id terá precedência. |
| lang | FALSO | String | Idioma da chamada. Usa códigos ISO 639-1. Padrão: "en" |
| ticket_id | FALSO | String | ID do tíquete do CRM. O número de telefone do usuário final vinculado ao tíquete será discado. Se um ticket_id e um end_user_number forem transmitidos, o ticket_id terá precedência. |
| outbound_number | FALSO | String | O número de telefone de saída a ser usado na chamada. O número de telefone global padrão para chamadas externas será usado se a entrada não for transmitida ou for inválida. Os números de saída são gerenciados em Configurações > Fila > EDITAR / VER > Selecionar uma fila > Números de telefone de saída. |
| recording_permission | FALSO | String | O valor só será avaliado se o recurso "Opções de gravação de chamadas" estiver definido como "Pedir permissão ao usuário para gravar". Configurável em Configurações > Fila > EDITAR / VER > Selecionar uma fila > Opções de gravação de chamadas. Se o valor for "recording_permission_not_asked" (padrão) ou "recording_permission_denied", a chamada não será gravada. Se o valor for "recording_permission_granted", a chamada será gravada. |
Endpoint:
Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Exemplo de solicitação e respostas
As seções a seguir fornecem exemplos de solicitações ao endpoint.
Erro : o número do usuário final não está bem formatado
Neste exemplo, mostramos o cenário de falha em que uma chamada recebida é criada, mas o número do usuário final fornecido está incorreto.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 999-657-12",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : end_user_number is not well formed
{
"message": "end_user_number is not well formed"
}
Código de status:400
Erro : o menu está no estado "redirecionamento manual" e não pode aceitar chamadas
Neste exemplo, mostramos o cenário de falha em que uma chamada é encaminhada para um ID de menu, mas o menu está no estado de redirecionamento manual e, portanto, não pode receber chamadas.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Erro : o menu está no estado "redirecionamento manual" e não pode aceitar chamadas.
{
"message": "Menu is in 'manual redirection' state, can't accept calls"
}
Código de status:400
Erro : tipo de chamada inválido
Neste exemplo, mostramos o cenário de falha em que uma chamada recebida é criada, mas o tipo de chamada fornecido é inválido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "InvalidCallType",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : Invalid call type
{
"message": "Invalid call type"
}
Código de status:400
Erro : o ID do menu é obrigatório
Neste exemplo, mostramos o cenário de falha em que uma chamada recebida é criada, mas o ID do menu fornecido é inválido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : menu_id is required
{
"message": "menu_id is required"
}
Código de status:400
Erro : somente IDs de menu móvel e URA são permitidos
Neste exemplo, mostramos o cenário de falha em que uma chamada recebida é criada, mas o ID do menu fornecido não é um ID de URA ou de menu para dispositivos móveis.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 50,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : Only IVR and mobile menu IDs are permitted
{
"message": "Only IVR and mobile menu IDs are permitted"
}
Código de status:400
Criar uma chamada recebida com o número do usuário final
Este exemplo demonstra como criar uma chamada recebida com um número de usuário final específico.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+82-10-6861-2345",
"recording_permission": "recording_permission_granted"
}
Resposta: crie uma chamada recebida com 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 status: 201
Erro : o menu está no estado "após o horário de expediente" e não pode aceitar chamadas.
Este exemplo demonstra a falha quando o ID do menu fornecido está no estado after hours.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Erro : o menu está no estado "após o expediente", não é possível aceitar chamadas recebidas
{
"message": "Menu is in 'after hours' state, can't accept incoming calls"
}
Código de status:400
Erro : o idioma não está disponível
Este exemplo demonstra a solicitação de falha quando o idioma especificado não está disponível.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "fr",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: erro : o idioma não está disponível
{
"message": "Language 'fr' is not available"
}
Código de status:400
Criar uma chamada recebida com o ID do tíquete
Este exemplo demonstra a solicitação para criar uma chamada recebida com um ID de tíquete associado.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: crie uma chamada recebida com 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 status: 201
Erro : o idioma não foi encontrado
Este exemplo demonstra a falha quando o idioma fornecido não é encontrado.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "xy",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : Language is not found
{
"message": "Language 'xy' is not found"
}
Código de status:400
Erro : menu_id não encontrado
Este exemplo demonstra a falha quando o ID do menu fornecido não é encontrado.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9999,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : menu_id is not found
{
"message": "menu_id 9999 is not found"
}
Código de status:400
Erro : menu_id não está bem formatado
Este exemplo demonstra a falha quando o ID do menu fornecido não está correto.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": "menu_999",
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : menu_id is not well formed
{
"message": "menu_id is not well formed"
}
Código de status:400
Erro : o número do usuário final é obrigatório
Neste exemplo, mostramos o cenário de falha em que uma chamada recebida é criada, mas o número de telefone do usuário final não foi fornecido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Inbound (API)",
"lang": "en",
"menu_id": 9,
"recording_permission": "recording_permission_granted"
}
Resposta: Error : end_user_number is required
{
"message": "end_user_number is required"
}
Código de status:400
Ligação agendada
| Parâmetro | Obrigatório | Tipo de dados | Definição |
|---|---|---|---|
| call_type | TRUE | String | Tipo de chamada a ser criada. Use "Voice Scheduled (API)" ou "ScheduledCall" (descontinuado) para criar uma chamada programada. |
| menu_id | TRUE | Número inteiro | O ID do menu a que a chamada será atribuída. Somente IDs de menu para dispositivos móveis e Web são aceitos. |
| call_id | FALSO | Número inteiro | ID da chamada anterior, que será vinculada como a chamada principal da nova chamada programada criada. Quando o ID de chamada está sendo usado, o menu_id pode ser opcional. |
| end_user_number | TRUE | String | O número de telefone do usuário final que será discado. Se um ticket_id e um end_user_number forem transmitidos, o ticket_id terá precedência. |
| lang | FALSO | String | Idioma da chamada. Usa códigos ISO 639-1. Padrão: "en" |
| ticket_id | FALSO | String | ID do tíquete do CRM. O número de telefone do usuário final vinculado ao tíquete será discado. Se um ticket_id e um end_user_number forem transmitidos, o ticket_id terá precedência. |
| scheduled_at | TRUE | String | Horário programado da ligação. Usa o formato ISO 8601 para um horário futuro válido. |
| recording_permission | FALSO | String | O valor só será avaliado se o recurso "Opções de gravação de chamadas" estiver definido como "Pedir permissão ao usuário para gravar". Configurável em Configurações > Fila > EDITAR / VER > Selecionar uma fila > Opções de gravação de chamadas. Se o valor for "recording_permission_not_asked" (padrão) ou "recording_permission_denied", a chamada não será gravada. Se o valor for "recording_permission_granted", a chamada será gravada. |
Endpoint:
Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Exemplo de solicitação e respostas
As seções a seguir fornecem exemplos de solicitações ao endpoint.
Erro : end_user_number não está bem formatado
Este exemplo demonstra a falha devido à formatação incorreta do end_user_number.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Error : end_user_number is not well formed
{
"message": "end_user_number is not well formed"
}
Código de status:400
Erro : o menu está no estado "redirecionamento manual" e não pode aceitar chamadas
Este exemplo demonstra a falha quando o ID do menu especificado é definido como redirecionamento de menu e não pode aceitar chamadas.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Erro : o menu está no estado "redirecionamento manual" e não pode aceitar chamadas.
{
"message": "Menu is in 'manual redirection' state, can't accept calls"
}
Código de status:400
Erro : tipo de chamada inválido
Este exemplo demonstra a falha quando uma solicitação é feita e o tipo de chamada é inválido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Error : Invalid call type
{
"message": "Invalid call type"
}
Código de status:400
Erro : menu_id é obrigatório
Este exemplo mostra a solicitação e a resposta quando um ID de menu não é fornecido, mas é obrigatório.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Error : menu_id is required
{
"message": "menu_id is required"
}
Código de status:400
Erro : somente IDs de menu para dispositivos móveis e Web são permitidos
Este exemplo demonstra uma solicitação que falha quando um ID de menu fornecido não é um ID de menu da Web ou para dispositivos móveis.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Error : Only mobile and web menu IDs are permitted
{
"message": "Only mobile and web menu IDs are permitted"
}
Código de status:400
Criar uma chamada programada com o ID do menu
Este exemplo demonstra como criar uma chamada programada com um ID de menu específico.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: crie uma chamada programada com o ID do menu
{
"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 status: 201
Criar uma chamada programada com ID de chamada
Este exemplo mostra como criar uma chamada programada com um ID de chamada específico.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: crie uma chamada programada com o ID da chamada
{
"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 status: 201
Erro : o menu está no estado "após o horário de expediente" e não pode aceitar chamadas.
Neste exemplo, mostramos o cenário de falha em que uma chamada programada é criada, mas o menu fornecido está fora do horário de atendimento e, portanto, não pode receber chamadas recebidas.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Erro : o menu está no estado "após o expediente", não é possível aceitar chamadas recebidas
{
"message": "Menu is in 'after hours' state, can't accept incoming calls"
}
Código de status:400
Erro : o idioma não está disponível
Este exemplo demonstra a falha quando o idioma especificado é inválido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: erro : o idioma não está disponível
{
"message": "Language 'fr' is not available"
}
Código de status:400
Erro : o idioma não foi encontrado
Neste exemplo, mostramos o cenário de falha em que uma chamada programada é criada, mas o idioma é inválido ou não está disponível.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Error : Language is not found
{
"message": "Language 'xy' is not found"
}
Código de status:400
Erro : ID do menu não encontrado
Neste exemplo, mostramos o cenário de falha em que uma chamada programada é criada, mas o ID do menu fornecido é inválido e não foi encontrado.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: erro : ID do menu não encontrado
{
"message": "menu_id 9999 is not found"
}
Código de status:400
Erro : o ID do menu não está bem formado
Neste exemplo, mostramos o cenário de falha em que uma chamada programada é criada, mas o ID do menu fornecido está incorreto.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"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"
}
Resposta: Error : menu_id is not well formed
{
"message": "menu_id is not well formed"
}
Código de status:400
Erro : o número do usuário final é obrigatório
Neste exemplo, mostramos o cenário de falha em que uma chamada programada é criada, mas o número do usuário final não foi fornecido.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"scheduled_at": "2019-09-15T00:19:14.421Z",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : end_user_number is required
{
"message": "end_user_number is required"
}
Código de status:400
Erro : scheduled_at é obrigatório
Neste exemplo, mostramos o cenário de falha em que uma chamada programada é criada, mas o valor "scheduled at" está ausente, embora seja obrigatório.
Solicitação
Cabeçalhos:
| Chave | Valor | Descrição |
|---|---|---|
| Content-Type | application/json |
Corpo:
{
"call_type": "Voice Scheduled (API)",
"lang": "en",
"menu_id": 9,
"end_user_number": "+1 859-657-9625",
"recording_permission": "recording_permission_granted"
}
Resposta: Error : scheduled_at is required
{
"message": "scheduled_at is required"
}
Código de status:400
Receber atributos de dados reservados durante uma chamada
Endpoint
Method: GET
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag
Exemplo de solicitação e respostas
Esta seção contém um exemplo de solicitação e resposta para o endpoint.
Sucesso
Este exemplo mostra uma chamada bem-sucedida.
Solicitação
Variáveis de URL
| Chave | Valor | Descrição |
|---|---|---|
| ID | integer | (Obrigatório) |
Resposta
{
"verified_customer": "boolean",
"bad_actor": "boolean",
"repeat_customer": "boolean"
}
Código de status 0
Atualizar atributos de dados reservados durante uma chamada
Endpoint
Method: PATCH
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag
Variáveis de URL
| Chave | Valor | Descrição |
|---|---|---|
| ID | integer | (Obrigatório) |
Body
{
"verified_customer": "boolean",
"bad_actor": "boolean",
"repeat_customers": "boolean"
}
Transmitir parâmetros de dados para agentes virtuais no meio da sessão
Para usar a API Apps e transmitir parâmetros de dados para agentes virtuais no meio de uma sessão de chamada, consulte Transmitir parâmetros de dados para agentes virtuais no meio da sessão.