NAV Navbar
Logo
ruby shell

Introdução

Endpoint da API

https://app.atendesimples.com/api/v1

O Atende Simples provê uma API REST simples e poderosa para integrar com seu site ou aplicação.

Essa documentação fornece informações sobre os endpoints disponíveis e como interagir com os mesmos e configurar as integrações.

As requisições à API respondem com formato JSON, sendo assim, o cabeçalho das respostas terá sempre Content-Type: application/json.

Webhooks

Webhooks são integrações configuradas na sua conta que escutarão a certos eventos do Atende Simples. Quando um evento ocorrer, o Atende Simples enviará uma requisição HTTP POST (notificação) para a URL configurada no webhook.

Um evento é um ação que acontece com um determinado recurso do Atende Simples. Por exemplo, um evento ocorre quando uma chamada é atendida.

Dependendo da necessidade da sua integração, os webhooks podem ser úteis para atualizar um sistema de tickets externo, gerar um relatório no seu sistema ou executar tarefas diversas.

* Webhooks também são conhecidos como Callbacks ou Reverse API.

Requisição

Exemplo de requisição:
POST /1d4c5sf1 HTTP/1.1

Host: requestb.in
User-Agent: AtendeSimples-Robot (staging)
Content-Type: application/json
X-Hub-Signature: sha1=5780ee6915fcc2d2e6a847d9c9e48f9ebe0159e7
X-AtendeSimples-Event: ping
X-AtendeSimples-Request-Id: c11366b2-813e-499c-a673-cbf03c17eed5
X-AtendeSimples-Environment: staging

{
  "event_code": "ping",
  "call": {
    "call_id": 1003
  },
  "webhook": {
    "id": 1,
    "url": "http://requestb.in/1d4c5sf1"
  }
}

As requisições realizadas para as URLs configuradas nos webhooks contém os seguintes cabeçalhos:

Cabeçalho Descrição
X-AtendeSimples-Event Código do evento que gerou a requisição.
X-AtendeSimples-Request-Id Código identificador da requisição, no formato UUID.
X-AtendeSimples-Environment Ambiente de onde a requisição foi disparada (production ou staging).
X-Hub-Signature Assinatura de segurança, para a sua aplicação verificar a autenticidade da requisição. O valor desse header é computado com o HMAC hex digest do corpo da requisição, usando o algoritmo sha1 com a chave secreta do webhook (disponível na página do webhook) como chave de criptografia (ver exemplo ao lado).
User-Agent AtendeSimples-Robot + o ambiente que originou a requisição.
Content-Type Formato do payload, de acordo com o que for configurado no webhook. Os formatos disponíveis são application/json e application/x-www-form-urlencoded.

Exemplo de como gerar o X-Hub-Signature:

# Chave secreta do webhook
key = '31f439e8b93520776732ad97e129700d9d1020ed'

# Corpo da requisição
body = '{"event_code":"call.finished","call":{"call_id":"123123"}}'

digest = OpenSSL::Digest.new('sha1')
OpenSSL::HMAC.hexdigest(digest, key, body)
=> 'c7fb37d21fc3a868e346eca1d89af5ce15f83317'
# Chave secreta do webhook
$ key='31f439e8b93520776732ad97e129700d9d1020ed'

# Corpo da requisição
$ body='{"event_code":"call.finished","call":{"call_id":"123123"}}'

$ echo -n $body | openssl dgst -sha1 -hmac $key
c7fb37d21fc3a868e346eca1d89af5ce15f83317

Eventos

Todo evento possui um código que identifica o seu tipo. Esses códigos são formatados no padrão resource.event, sendo resource o nome do recurso e event o nome do evento disparado. Na tabela abaixo estão listados todos os tipos de eventos do Atende Simples:

Código Descrição
call.newcall Quando uma chamada nova é iniciada.
call.a_leg_answered Quando uma chamada é atendida pela ponta A. Somente quando a direction for outbound
call.b_leg_answered Quando uma chamada é atendida pela ponta B.
call.finished Quando uma chamada é finalizada.
call.audio_available Quando o áudio de uma chamada fica disponível para dar play.
call.call_tag Quando uma chamada é classificada pela ponta B.
call.interaction Quando quem ligou digita um número válido em alguma interação.
call.word_spotting Quando uma chamada tiver termos em monitoramento identificados.

Ao configurar um webhook, você seleciona quais desses eventos ele escutará. Marcar somente os eventos específicos que você precisa tratar pode ajudar a limitar a quantidade de requisições HTTP que a sua aplicação receberá. Somente os eventos selecionados farão com que o webhook dispare requisições.

Nota: Independentemente de existir webhooks configurados ou não, o Atende Simples registra todos os eventos internamente (com exceção do ping) e os disponibiliza no Log de eventos por um tempo limitado.

Evento Ping

O evento ping é um evento especial disparado para testar se a URL do webhook está funcionando. Quando um webhook é criado, é necessário fazer a ativação do mesmo através do botão “Enviar ping”, que dispara um evento ping.

Esse evento não é registrado no log de eventos.

Eventos Coringa (Wildcard)

Eventos coringa (wildcard) não são eventos que acontecem no Atende Simples, são apenas representações de um conjunto de eventos que um webhook pode escutar. Os eventos coringa disponíveis são:

Código Descrição
* Todos os eventos do Atende Simples, inclusive os que ainda surgirão.
call.* Todos os eventos do recurso call (chamada), inclusive os que ainda surgirão.

Payloads

Exemplos de payloads:

Payload do evento ping:

{
  "event_code": "ping",
  "call": {
    "call_id": "1003"
  },
  "webhook": {
    "id": 1,
    "url": "http://seu-site.com/15a0nqn1"
  }
}

Payload dos eventos call.*:

{
  "event_code": "call.finished",
  "webhook": {
    "id": 453,
    "url": "http://seu-site.com/15a0nqn1"
  },
  "call": {
    "call_id": "1003",
    "from_number": "552122334466",
    "ani_prefix":"21",
    "ani_city":"Rio de Janeiro",
    "ani_state":"Rio de Janeiro",
    "ani_uf":"RJ",
    "ani_kind":"cellphone",
    "ani_provider":"Claro",
    "ani_lat":"9999",
    "ani_long":"8888",
    "call_terminated":"A",
    "dnis": "5",
    "alt_dnis": "6",
    "number_name": "Number 1",
    "number_host": "Number host",
    "number_info1": "Number info 1",
    "number_info2": "Number info 2",
    "number_info3": "Number info 3",
    "started_at": "2015-01-01T01:11:00.000-02:00",
    "status": "answered",
    "status_details": "conference",
    "block_reason":"blocked_by_user_configuration",
    "my_status_code":"1",
    "my_status_name":"My Status Name",
    "my_status_complement_1":"My Status Complement 1",
    "my_status_complement_2":"My Status Complement 2",
    "my_status_info_1":"My Status Info 1",
    "my_status_info_2":"My Status Info 2",
    "my_status_info_3":"My Status Info 3",
    "my_kpi":["tag1","tag2"],
    "result_leg_a":"error",
    "result_leg_b":"error",
    "leg_a_type":"client",
    "attendant_name":"Attendant Name",
    "attendant_email":"foo@bar.com",
    "attendant_number":"552122333333",
    "attendant_extension_number":"30",
    "business_hours": "worktime",
    "business_hours_complement":"Holiday Name",
    "inbound_amount": "15.0",
    "total_amount": "15.0",
    "billed_duration": 60,
    "inbound_duration": 75,
    "ura_duration": 50,
    "dial_duration": 10,
    "ring_duration_a": 10,
    "ring_duration_b": 5,
    "ring_duration_c": 15,
    "direction": "inbound",
    "kind":"default",
    "customer_info": "your_info",
    "dialer_info_1": "dialer info 1",
    "dialer_info_2": "dialer info 2",
    "dialer_info_3": "dialer info 3",
    "selected_options": [
      "1",
      "3",
      "2"
    ],
    "call_tags": [
      {
        "code": "70",
        "description": "Lead"
      },
      {
        "code": " 71",
        "description": "Follow up"
      }
    ],
    "audio_url": "https://app.atendesimples.com/public/audios/98b2ec022a7f051a84e65b",
    "zendesk_ticket_id": "673",
    "outbound_calls": [
      {
        "started_at": "2015-01-01T01:11:00.000-02:00",
        "phone_number": "5521988221122",
        "name": "Jane Doe",
        "email": "jane@as.com",
        "extension": 22,
        "duration": 17,
        "billed_duration": 11,
        "option": 3,
        "group": 3,
        "amount": "2.75"
      },
      {
        "started_at": "2015-01-01T01:15:00.000-02:00",
        "phone_number": "5521988221010",
        "name": "André",
        "email": "andre@atendesimples.com.br",
        "extension": 23,
        "duration": 34,
        "billed_duration": 30,
        "amount": "7.5"
      },
      {
        "started_at": "2015-01-01T01:19:00.000-02:00",
        "phone_number": "552130992121",
        "name": "Joyce",
        "email": "joyce@atendesimples.com.br",
        "extension": 26,
        "duration": 24,
        "billed_duration": 19,
        "amount": "4.75"
      }
    ],
    "interactions": [
      {
        "digits": "30743211233",
        "selected_option": "2",
        "validation_status": "ok"
      },
      {
        "digits": "34",
        "selected_option": "1",
        "validation_status": "error"
      }
    ],
    "post_attendances": [
      {
        "digits":"8",
        "status": "1",
        "name": "Post Attendance 9",
        "selected_option": "9"
      }
    ],
    "word_spottings": [
      {
        "word": "procon",
        "word_group": "reclamação",
        "score": 45,
        "occurred_at": "1900-01-01T00:01:48.159+00:00"
      }
    ]
  }
}

As requisições enviadas pelos webhooks possuem um conjunto de informações chamado de payload, que contém dados do recurso (do momento que o evento ocorre) e dados do próprio evento. Essas informações são estruturadas nos seguintes campos:

event_code Código do evento que originou a requisição, seguindo o padrão resource.event.
webhook Dados do webhook que disparou a requisição.
call Dados da chamada.
changes Mudanças realizadas no recurso (presente somente quando event for updated).

Veja exemplos de payloads para todos os tipos de evento na coluna ao lado.

Call

Campo Tipo Descrição
call_id String Código identificador da chamada.
from_number String Número do telefone de quem ligou para o seu atendimento (ponta A), no formato código do país + DDD + telefone. Exemplo: "552130409670".
ani_prefix String DDD do telefone de quem ligou
ani_city String Cidade do telefone de quem ligou
ani_state String Nome do estado do telefone de quem ligou
ani_uf String Siglas do estado do telefone de quem ligou, exemplo: “SP”
ani_kind String Tipo do telefone de quem ligou ("cellphone", "linephone" ou "unknown")
ani_provider String Operadora do telefone de quem ligou
ani_lat String Latitude do telefone de quem ligou
ani_long String Longitude do telefone de quem ligou
call_terminated String Perna que desligou a chamada (“Plataforma”, “A” ou “B”)
dnis String Número do seu atendimento, no formato código do país + número. Exemplo: "5508008871565".
alt_dnis String Número para o qual foi realizada a chamada originalmente e redirecionada para o dnis, no formato código do país + número. Exemplo: "5508008871898".
number_name String Nome definido para o número que a chamada foi realizada, os nomes para cada número podem ser configurados clicando em “Opções de conta” e depois no menu “Números”
number_host String Host definido para o número que a chamada foi realizada, os hosts para cada número podem ser configurados clicando em “Opções de conta” e depois no menu “Números”
number_info1 String Valor definido para o número que a chamada foi realizada, os valores para cada número podem ser configurados clicando em “Opções de conta” e depois no menu “Números”, no campo “Info 1”
number_info2 String Valor definido para o número que a chamada foi realizada, os valores para cada número podem ser configurados clicando em “Opções de conta” e depois no menu “Números”, no campo “Info 2”
number_info3 String Valor definido para o número que a chamada foi realizada, os valores para cada número podem ser configurados clicando em “Opções de conta” e depois no menu “Números”, no campo “Info 3”
direction String Direção da chamada: inbound ou outbound. Ex.: quando alguém ligar para o seu atendimento será inbound ou quando for uma chamada de alguns dos discadores será outbound
started_at DateTime Data e hora do início da chamada, no formato ISO8601, com fuso horário -0300 (referente ao do Brasil, GMT-3). Exemplo: "2015-05-07T16:26:05.000-03:00".
status String Status da chamada no momento do evento. Os status possíveis são: newcall, in_progress, abandoned, answered, blocked, handled, missed e failed.
status_details String Complemento do status. Pode vir com o nome do atendente que atendeu a ligação, uma mensagem personalizada ou com a mensagem "Desligada".
block_reason String Motivo da chamada ter sido bloqueada
my_status_code String Código do Meu Status aplicado na chamada
my_status_name String Nome do Meu Status aplicado na chamada
my_status_complement_1 String Complemento 1 do Meu Status aplicado na chamada
my_status_complement_2 String Complemento 2 do Meu Status aplicado na chamada
my_status_info_1 String Info 1 do Meu Status aplicado na chamada
my_status_info_2 String Info 2 do Meu Status aplicado na chamada
my_status_info_3 String Info 3 do Meu Status aplicado na chamada
my_kpi Array Nomes das tags aplicadas na chamada
result_leg_a String Resultado da perna A ("answered", "error", "others", "busy_or_unavailable", "answered_machine", "not_answered" ou "absent")
result_leg_b String Resultado da perna B ("answered", "error", "others", "busy_or_unavailable", "canceled", "answered_machine", "not_answered" ou "absent")
leg_a_type String Tipo de perna A ("attendant" ou "client")
attendant_name String Nome do Atendente que atendeu a ligação
attendant_email String Email do Atendente que atendeu a ligação
attendant_number String Telefone do Atendente que atendeu a ligação
attendant_extension_number String Ramal do Atendente que atendeu a ligação
voicemail Boolean Se tem caixa postal
voicemail Boolean Se tem caixa postal
business_hours String Identifica se a chamada ocorreu dentro ou fora do horário de atendimento configurado. Os valores possíveis são: worktime e out_of_worktime.
business_hours_complement String Complemento do horário, pode vir com o nome do feriado em que a chamada foi efetuada
inbound_amount Float Valor cobrado referente a chamada recebida (entrante).
total_amount Float Valor total cobrado pela chamada (incluindo a chamada recebida e os reencaminhamentos).
billed_duration Integer Duração arredondada da chamada (em segundos) considerada para cobrança.
inbound_duration Integer Duração real da chamada (em segundos), sem arredondamento.
ura_duration Integer Duração na ura (em segundos), sem arredondamento.
dial_duration Integer Tempo de espera na fila (em segundos), sem arredondamento.
ring_duration_a Integer Tempo que levou a pessoa atender a ligação da perna A (em segundos), sem arredondamento
ring_duration_b Integer Tempo que levou a pessoa atender a ligação da perna B (em segundos), sem arredondamento
ring_duration_c Integer Tempo que levou a pessoa atender a ligação da perna C (em segundos), sem arredondamento
selected_options Array Opções do menu digitadas por quem ligou, na ordem em que forem digitadas. Se o atendimento for automático, ou seja, sem menu de opções, o valor retornado será sempre "1". Dependendo da configuração do atendimento, é possível digitar mais de uma opção. Exemplo: ["1", "3"].
kind String Tipo da configuração usada na ligação
call_tags Array Classificações da chamada registradas por quem atendeu a ligação. Exemplo: [{"code": "70", "description": "Lead"}].
call_tags → code String Código que o atendente digitou para efetuar a classificação.
call_tags → description String Descrição referente ao código digitado na classificação.
audio_url String Link para o arquivo com a gravação da conversa ou áudio da caixa postal. Exemplo: "https://app.atendesimples.com/public/audios/98b2ec022a7f051a84e65b".
zendesk_ticket_id String Código identificador do ticket do Zendesk associado à chamada.
customer_info String Informação por chamada enviada por sua API na requisição de uma chamada sainte, na resposta de uma pré-chamada ou na resposta de uma interação. Caso não tenha sido enviada essa informação, o campo ficará em branco. Se durante uma chamada forem enviados diferentes customer_info, ficará sempre armazenado a última string.
dialer_info_1 String Info 1 definida na ficha do discador por fila.
dialer_info_2 String Info 2 definida na ficha do discador por fila.
dialer_info_3 String Info 3 definida na ficha do discador por fila.
outbound_calls Array Informações referente aos reencaminhamentos da chamada (pode haver mais de um). Só serão apresentados os reencaminhamentos que forem atendidos.
outbound_calls → started_at DateTime Data e hora do reencaminhamento, no formato ISO8601, com fuso horário -0300 (referente ao do Brasil, GMT-3). Exemplo: "2015-05-07T17:26:05.000-03:00".
outbound_calls → phone_number String Número do telefone que atendeu o reencaminhamento. Exemplo: "5511999999999".
outbound_calls → name String Nome do atendente que atendeu o reencaminhamento. Exemplo: "João".
outbound_calls → email String E-mail do atendente que atendeu o reencaminhamento. Exemplo: joao@suaempresa.com.
outbound_calls → extension Integer Ramal do atendente que atendeu o reencaminhamento. Exemplo: 22.
outbound_calls → duration Integer Duração real do reencaminhamento (em segundos).
outbound_calls → billed_duration Integer Duração cobrada do reencaminhamento (em segundos).
outbound_calls → option Integer opção em que a chamada foi atendida pelo Atendente. Exemple: 6.
outbound_calls → queue_id Integer Código interno da fila de atendimento que atendeu a chamada, sendo: de 0 a 9 opções diretas do menu, de 21 a 99 ramais, 1000 fora de horário e outros números de opções complementares.
outbound_calls → amount Float Valor cobrado pelo reencaminhamento. Exemplo: 17.28.
interactions Array Informações referente às interações da chamada.
interactions → digits Integer Número digitado na interação por quem ligou para seu atendimento.
interactions → selected_option Integer Opção de interação do menu digitada por quem ligou.
interactions → validation_status String Status de validação da interação. Valores possíveis: "ok" ou "error".
post_attendances Array Informações sobre as pesquisas de pós atendimento
word_spottings Array Informações referente ao monitoramento de termos.
word_spottings → word String Termo identificado durante a chamada. Exemplo: "procon".
word_spottings → word_group String Grupo ao qual o termo pertence. Exemplo: "reclamação".
word_spottings → score Integer Porcentagem de certeza de que o termo identificado na chamada é realmente o que foi configurado. Exemplo: 85.
word_spottings → occurred_at Time Tempo da chamada em que o termo foi identificado. Sendo uma representação de tempo, a data virá sempre “zerada”, e deverá ser desconsiderada. Exemplo: "1900-01-01T00:01:48.159+00:00" se refere ao tempo 1m, 48s e 159ms da chamada.