API v2

Bem-vindo à API Huggy. Com ela, você pode gerenciar todos os agentes, contatos e atender seus clientes, enviar e receber mensagens. Essa API permite executar ações programaticamente na conta da sua empresa.

Nossa API nativamente suporta o formato:

  • REST

    O sistema deve fazer uma solicitação para o URL https://api.huggy.app/v2, enviando os parâmetros por GET, POST, PUT ou DELETE. Para cada solicitação, a resposta será um objeto JSON, que é detalhado ao longo desta documentação.

Autenticação

A autenticação da APIv2 é feita mediante o token de acesso que pode ser adquirido através de uma conta na plataforma conforme demonstrado na imagem abaixo:

Autenticação APIv2

Para isso, você deve fornecer um cabeçalho de Autorização em cada solicitação feita, seguindo o formato:

    X-Authorization: Bearer xxxxxxxxxx
1

Headers

Todos os pedidos também devem incluir os seguintes headers:

  • Content-Type: application/json
  • Accept: application/json
  • Authorization: Bearer xxxxxxx

Idioma

Por padrão, quando não for informado o Accept-Language, todas as requisições serão respondidas em inglês. Para obter a resposta em um idioma preferido, no Header de sua requisição, informe:

  • Accept-Language: en
  • Accept-Language: pt-br
  • Accept-Language: es

Requisições

Por padrão, todas as chamadas à API assumem que a requisição em questão está sendo feita diretamente na company principal. Isto é: a primeira company que um agente foi vinculado. Se a requisição está sendo feita a uma company secundária, ela deverá assumir o modelo de URI https://api.huggy.io/v2/companies/{companieId}/recurso...

Response

Algumas requisições bem-sucedidas podem ser respondidas com um status 200 ou 204 sem que um corpo retorne, como em requisições que utilizam os métodos POST e DELETE.

Paginação

O parâmetro de paginação está previsto para todos os endpoints que listam o conteúdo de um determinado recurso. Essa lista se limita a 20 resultados e os recursos remanescentes, se existirem, podem ser acessados com um parâmetro de consulta ?page=1 em uma requisição. Esta paginação começa em 0 (primeira página). Se a página solicitada não existir, uma lista vazia [] é retornada no corpo da resposta.

Respostas usuais do servidor:

  • 200 OK - o pedido foi bem sucedido.
  • 201 Created - o pedido foi bem sucedido e um recurso foi criado.
  • 204 Modified - o pedido foi bem sucedido e um recurso foi modificado.
  • 400 Bad Request - o pedido não pôde ser entendido ou faltavam os parâmetros necessários. Verifique o motivo na resposta do corpo.
  • 401 Unauthorized - falha na autenticação ou o usuário não possui permissões para a operação solicitada. Verifique o token da API, ele pode estar errado.
  • 403 Forbidden - o cliente não tem direitos de acesso ao conteúdo, portanto, o servidor é reservado a não dar mais respostas. Diferente do código 401, aqui a identidade do cliente é conhecida.
  • 404 Not Found - o recurso não foi encontrado. Isso pode ser causado por um ID não existente.
  • 423 Locked - O recurso sendo acessado está bloqueado, não sendo possível, no momento, nenhuma interação com ele.
  • 501 Request Failed - pode ser causada por um método de solicitação incorreto.

Agentes

GET/agents

Visualizar todos os agentes

Obtém a lista de todos os agentes da company.

Resposta 200

[
    {
        "id": 12162,
        "name": "John Doe"
    },
    {
        "id": 11839,
        "name": "Nicolas Tesla"
    },
    {
        "id": 11433,
        "name": "Linus Torvalds"
    },
    {
        "id": 11432,
        "name": "Dennis Ritchie"
    }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

GET/agents/{id}

Visualizar um agente

Obtém os dados de um agente através do seu ID.

Parâmetro Tipo Exemplo Descrição
id number 34146 Número identificador do agente

Resposta 200

{
    "id": "34146",
    "name": "John Doe",
    "email": "john@doe.com",
    "login": "johndoe",
    "type": 3,
    "phone": "551199999999"
}
1
2
3
4
5
6
7
8

Resposta 400

{
    "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

POST/agents

Convidar um novo agente

Convida um novo agente para a plataforma Huggy.

Nota: Um novo agente só será visível após o aceite no e-mail de confirmação.

Atributo Tipo Descrição Requerido
email string Email do novo agente Sim
type int Definição de escopo de acesso do agente Sim

Exemplo da requisição

{
  "email": "john@doe.com",
  "type": 1
}
1
2
3
4

Um agente é definido pelo seu perfil de acesso, sendo este representado pela atributo type que recebe um valor numérico, onde:

Definição Atributo Valor
Agente Type 1
Gerente Type 2
Administrador Type 3

Resposta 400

{
    "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 500

{
    "reason": "Agente já conectado"
}
1
2
3

PUT/agents/{id}

Atualizar um agente

Atualiza os dados de um agente.

Note: O campo password deve conter pelo menos oito caracteres.

Parâmetro Tipo Exemplo Descrição
id number 34146 Número identificador do agente
Atributo Tipo Descrição Requerido
name string Nome do agente Sim
login string Login do agente Sim
email string Endereço de email do agente Não
password string Senha do agente Não
type int Definição de escopo do agente Não
phone string Número de telefone do agente Não
active boolean Definição de atividade do agente na plataforma Não

Exemplo da requisição

    {        
        "name": "John Doe",        
        "login": "johndoe",
        "email": "john@doe.com",
        "password": "12345678",
        "type": 2,
        "phone": "551199999999",
        "active": true
    }
1
2
3
4
5
6
7
8
9

Resposta 400

{
    "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Contatos

GET/contacts

Visualizar todos os contatos

Obtém a lista de todos os contatos.

Nota: O payload de retorno desta requisição possui um atributo customFields. Uma lista que retornará vazia caso não haja campos personalizados cadastrados.

Resposta 200

[
    {
        "id": 8307934,
        "name": "John",
        "email": john@doe.com,
        "mobile": 1199999999,
        "phone": 1133333333,
        "customFields": []
    },
    {
        "id": 8227983,
        "name": "Tesla",
        "email": "nicolas@tesla.com",
        "mobile": "1199999999",
        "phone": "1133333333",
        "birthday": null,
        "customFields": {
            "segundo_email_customer": "nicolas@dev.com",
            "cpf_customer": "03600000041",
            "data_customer": "14/10/2019",
            "hora_customer": "20:30",
            "numero_customer": "104",
            "perfil_customer": "Nivel 5",
            "telefone_customer": "+557599999999",
            "cnpj_customer": "00.000.000/0001-00"
        }
    }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

GET/contacts/{id}

Visualizar um contato

Obtém os dados de um contato através do seu ID.

Parâmetro Tipo Exemplo Descrição
id number 8227983 Número identificador do contato

Resposta 200

{
    "id": 8227983,
    "name": "John",
    "email": "john@doe.com",
    "mobile": "1199999999",
    "phone": "1133333333",
    "birthday": null,
    "customFields": {
        "segundo_email_customer": "john@doe.com",
        "cpf_customer": "03600000041",
        "data_customer": "14/10/2019",
        "hora_customer": "20:30",
        "numero_customer": "104",
        "perfil_customer": "Nivel 5",
        "telefone_customer": "+551199999999",
        "cnpj_customer": "00.000.000/0001-00"
    },
    "channels": {
        "voip": true,
        "messenger": false,
        "widget": false,
        "telegram": true,
        "whatsapp": false,
        "email": true,
        "sms": true,
        "telegramBot": false,
        "whatsappApi": false
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

PUT/contacts/{id}

Atualizar um contato

Atualiza um contato através do seu ID.

Parâmetro Tipo Exemplo Descrição
id number 5081748 Número identificador do contato
Atributos Tipo Descrição Requerido
name string Nome do contato Sim
email string Contact email Sim
phone string Contact phone Sim
mobile string Contact mobile Não
address string Contact address Não
city string Contact city Não
district string Contact district Não
state string Contact state Não
obs string Comment done about contact Não

Nota: Dentre os atributos que devem ser passados no corpo da requisição, name, email ou phone são obrigatórios.

Exemplo da Requisição

{  
  "name": "john Doe",  
  "email": "john@doe.com",
  "mobile": "1199999999", 
  "phone": "1133333333",
  "address": "Rua Roque Petroni JR",
  "city": "São Paulo",
  "district": "Morumbi",
  "state": "São Paulo",
  "obs": "Esse é um campo para adicionar observações sobre o contato"
}
1
2
3
4
5
6
7
8
9
10
11

Resposta 204

Requisição bem sucedida com o body vazio
1

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

DELETE/contacts/{id}

Excluir um contato

Exclui um contato através do seu ID.

Parâmetro Tipo Exemplo Descrição
id number 5082105 Número identificador do contato

Exemplo da Requisição

{

}
1
2
3

Resposta 204

Requisição bem sucedida com o body vazio
1

Chats

GET/chats

Visualizar todos os chats

Obtém a lista de todos os chats.

Resposta 200

[
    {
        "id": 13123230,
        "agentId": 34146,
        "secondAgentId": 8792,
        "contactId": null,
        "siteCustomerId": null,
        "messengerId": null,
        "departmentId": null,
        "tabulationId": null,
        "channels": [],
        "queueNumber": null,
        "createdAt": "2019-10-29 16:06:00",
        "updatedAt": "2019-10-29 16:06:00",
        "attendedAt": null,
        "closedAt": null
    },
    {
        "id": 13123115,
        "agentId": 34146,
        "secondAgentId": null,
        "contactId": 5081376,
        "siteCustomerId": null,
        "messengerId": null,
        "departmentId": null,
        "tabulationId": null,
        "channels": [
            {
                "uuid": "325c3456-9981-43f5-8705-xxxxxxxxxxxx",
                "id": "john@doe.com",
                "name": "John Doe",
                "type": "Email"
            }
        ],
        "queueNumber": null,
        "createdAt": "2019-10-24 15:22:50",
        "updatedAt": "2019-10-24 15:23:00",
        "attendedAt": "2019-10-24 15:22:54",
        "closedAt": null
    },
    {
        "id": 13119881,
        "agentId": 34146,
        "secondAgentId": null,
        "contactId": 5081359,
        "siteCustomerId": null,
        "messengerId": null,
        "departmentId": null,
        "tabulationId": null,
        "channels": [
            {
                "uuid": "325c3456-9981-43f5-8705-xxxxxxxxxxxx",
                "id": "john@doe.com",
                "name": "John Doe",
                "type": "Email"
            }
        ],
        "queueNumber": null,
        "createdAt": "2019-06-11 11:44:10",
        "updatedAt": "2019-06-11 11:44:33",
        "attendedAt": "2019-06-11 11:44:14",
        "closedAt": null
    }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64

GET/chats/{id}/messages

Listar mensagens

Obtém todas as mensagens de um chat através do ID do chat.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat

Resposta 200

[
    {
        "id": 270964274,
        "body": "Olá, Hugo!",
        "is_internal": false,
        "is_email": false,
        "sender": {
            "id": 1842157,
            "name": "John Doe",
            "mobile": "551199999999",
            "phone": "551133333333",
            "email": "john@doe.com",
            "photo": "https://c.pzw.io/img/avatar-user-boy.jpg"
        },
        "senderType": "widget",
        "receiver": false,
        "receiverType": "agent",
        "file": null,
        "channel": "widget",
        "customer": {
            "id": 1842157,
            "name": "John Doe",
            "mobile": "551199999999",
            "phone": "551133333333",
            "email": "john@doe.com",
            "photo": "https://c.pzw.io/img/avatar-user-boy.jpg"
        },
        "chat": {
            "id": 13123541,
            "channel": "widget",
            "situation": "in_chat",
            "department": 23741,
            "customer": {
                "id": 1842157,
                "name": "John Doe",
                "mobile": "551199999999",
                "phone": "551199999999",
                "email": "john@doe.com",
                "photo": "https://c.pzw.io/img/avatar-user-boy.jpg"
            }
        },
        "send_at": "2019-11-21 15:08:45",
        "read_at": null,
        "type": "0",
        "eventType": null
    }
]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

GET/chats/{id}/feedback

Visualizar pesquisa de satisfação

Obtém a nota e a mensagem da pesquisa de satisfação do chat informado.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat

Resposta 200

{
    "score": "5",
    "text": "Ficamos muito contentes com o atendimento"
}
1
2
3
4

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

POST/chats/{channel}

Criar um novo chat

Cria um novo chat na plataforma, passando o canal desejado como parâmetro na url.

Os canais de atendimento podem ser:

  • 1: whatsapp
  • 2: email
  • 3: telegram
Atributos Tipo Descrição Requerido
name string Nome do contato Sim
phone string Telefone do contato Sim
email string Endereço de e-mail do contato Sim
message string Mensagem enviada na abertura do atendimentoo Não
department int Número identificador do departamento Não
subject string Assunto da mensagem Não
isInternal boolean Contact district Não

Exemplo da requisição

{
    "name": "John Doe",
    "phone": "551199999999",
    "email": "john@doe.com",
    "message": "Olá, John!",
    "department": "3",
    "subject": "",
    "isInternal": true
}
1
2
3
4
5
6
7
8
9

Resposta 400

{
    "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

POST/chats/{id}/close

Finalizar um atendimento

Finaliza um atendimento de chat através do ID do chat.

Nota: Defina o parâmetro sendFeedback como true quando o quiser que o usuário avalie o atendimento.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat

Exemplo da requisição

{
    "sendFeedback": true
}
1
2
3

Resposta 201

Requisição bem sucedida com o body vazio
1

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

POST/chats/{id}/queue

Colocar atendimento na fila de espera

Coloca um chat na fila de atendimento através do ID do chat.

NOTA: Somente poderão ser colocados na fila chats que estiverem em atendimento por algum agente.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat

Resposta 201

Requisição bem sucedida com o body vazio
1

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

POST/chats/{id}/messages

Enviar Mensagem

Envia uma mensagem para um chat. Defina o parâmetro isInternal como true quando quiser enviar uma mensagem interna para o chat.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat
Atributo Tipo Descrição Requerido
text string Mensagem de texto enviada ao chat Sim
isInternal boolean Informa se o chat é interno Sim

Exemplo da requisição

{
    "text": "Olá John!",
    "isInternal": false
}
1
2
3
4

Resposta 201

Requisição bem sucedida com o body vazio
1

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

POST /chats/{id}/situation

Alterar a situação do chat

Altera a situação do chat a partir do ID.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat
Atributo Tipo Descrição
auto string Chat em distribuição automática
wait_for_chat string Aguardando atendimento
in_chat string Em atendimento
blocked string Chat bloqueado para atendimento

Exemplo da requisição

{
    "situation": "wait_for_chat"
}
1
2
3

Resposta 201

Requisição bem sucedida com o body vazio
1

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

POST/chats/{id}/tags

Definir tags

Nota: Para a definição de mais de uma tag, separe-as por vírgula.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat
Atributo Tipo Descrição Requerido
tags string Tags que representam o assunto de uma determinada interação Sim

Exemplo da Requisição

{
    "tags" : "tag1, tag2"
}
1
2
3

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

POST/chats/{id}/flow

Executar flow

Execute um Flow a partir de um chat que não esteja finalizado ou que não seja do tipo interno. Caso o chat já possua um Flow em processamento, este será abortado e a execução do novo Flow será iniciada.

Parâmetro Tipo Exemplo Descrição
id number 13119881 Número identificador do chat
Atributo Tipo Descrição Requerido
flowId int Número identificador do flow Sim

Exemplo da Requisição

{
    "flowId" : 142714
}
1
2
3

Resposta 200

Requisição bem sucedida com o body vazio
1

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3

POST/flows/{flowId}/contact/{contactId}/exec

Executar um flow para um contato

Inicializa a execução de um flow para um contato específico.

Canais que podem utilizar este recurso:

  • Email
  • Messenger
  • TelegramBot
  • Whatsapp

Para especificar o canal que será utilizado para executar o flow, é necessário o envio do uuid, que corresponde ao identificador universal do canal. O valor do uuid pode ser obtido no painel Huggy em "configurações" >> "canais" >> "canal desejado" >> detalhamento do canal.

Além do uuid, existem mais 4 atributos que podem ser informados durante a requisição:

variables ( object )

Corresponde aos campos que podem ser utilizados durante a execução do flow.

"variables": { 
    "data": "15/10/2019",
    "url_evento": "https://huggy.io"
}
1
2
3
4

Exemplo de funcionamento

Na declaração de variables acima, existem dois termos que podem ser utilizados durante a execução do flow: data e url_evento. Para que esses dois termos sejam utilizados é necessário informá-los em alguma parte das ações do flow, por exemplo, na ação de enviar mensagem.

Ao enviar uma mensagem com o seguinte texto:

"Olá, boa tarde. O evento será no dia . Segue o link de acesso ".

O sistema irá substituir os termos data e url_evento pelos valores informados na declaração das variáveis, ficando da seguinte maneira:

"Olá, boa tarde. O evento será no dia 15/10/2019. Segue o link de acesso https://huggy.io".

Nota: default { }


`whenInChat` ( true | false )

Se o chat estiver em atendimento com o agente, as seguintes condições serão levadas em consideração:

  • true: Executa o flow e remove o agente da conversa (o chat volta para o status automático).

  • false: Não executa o flow.

Nota: default false


`whenWaitForChat` ( true | false )

Se o chat estiver na fila, são levadas em consideração as seguintes condições:

  • true: Não executa o flow.

  • false: Chat volta para o status automático.

Nota: default false


`whenInAuto` ( true | false )

Se estiver em automático e/ou possuir outro flow em processamento, serão levadas em consideração as seguintes condições:

  • true: Abortar o flow atual e iniciar a execução do flow informado.

  • false: Não faz nada.

Nota: default false


Observações:
Para o funcionamento deste recurso nos canais Messenger e TelegramBot o contato informado precisa ter vínculo com a empresa, ou seja, é necessário que o contato já tenha feito algum atendimento com a empresa pelos canais citados

  • No caso do canal whatsapp, é possivél executar o flow sem que tenha existido um atendimento anterior. No entanto, o número do telefone do contato precisa estar válido: Código de área do país (55-Brasil) + código de área do estado (DDD) + o número do telefone. Ex. 5511988886666.

  • Caso algum dos quatros atributos explicados acima não seja informado na requisição, o sistema pegará o valor default de cada um.

  • Se não houver um chat aberto com o contato, será criado um novo chat.

Parâmetro Tipo Exemplo Descrição
flowId number 10082 Número identificador do flow
contactId number 5080890 Número identificador do contato

Exemplo da requisição

{
  "uuid": "",
  "variables": {
    "data": "15/10/2019",
    "url_evento": "https://huggy.io"
  },
  "whenInChat": true,
  "whenWaitForChat": true,
  "whenInAuto": true
}
1
2
3
4
5
6
7
8
9
10

Resposta 200

{
    "reason": "Flow processed",
    "chatID": 19291350
}            
1
2
3
4

Resposta 200

{
    "reason": "Flow processed and agent removed from chat",
    "chatID": 19291350
}   
1
2
3
4

Response 400

{
   "reason": "Esta mensagem informará o que ocasionou o erro"
}
1
2
3

Resposta 404

{
   "reason": "Esta mensagem mostrará que não existe resultado para sua busca"
}
1
2
3