Webhooks são retornos de chamada HTTP configurados para cada conta. Eles são acionados quando ações como a criação de uma mensagem ocorrem no Chatwoot. Vários webhooks podem ser criados para uma única conta.
Como adicionar um webhook?
Etapa 1. Acesse Configurações → Integrações → Webhooks. Clique no botão "Configurar".

Etapa 2. Clique no botão "Adicionar novo webhook". Um modal será aberto. Aqui, insira a URL para a qual a solicitação POST deve ser enviada. Em seguida, você precisa selecionar os eventos que deseja assinar. Esta opção permitirá que você ouça apenas os eventos relevantes no Chatwoot.

O Chatwoot enviará uma solicitação POST com o seguinte payload para as URLs configuradas para diversas atualizações em sua conta.
Um payload de webhook de exemplo
{
"event": "message_created", // Nome do evento
"id": "1", // ID da mensagem
"content": "Olá", // Conteúdo da mensagem
"created_at": "2020-03-03 13:05:57 UTC", // Horário de envio da mensagem
"message_type": "incoming", // Será do tipo incoming, outgoing ou template. O usuário do widget envia mensagens de entrada e o agente envia mensagens de saída para o usuário.
"content_type": "enum", // Este é um enum, pode ser input_select, cards, form ou text. O message_type será template se content_type for um destes. O valor padrão é texto
"content_attributes": {} // Este será um objeto, valores diferentes são definidos abaixo
"source_id": "", // Este seria o ID externo se a caixa de entrada for uma integração com o Twitter ou Facebook.
"sender": { // Este forneceria os detalhes do agente que enviou esta mensagem
"id": "1",
"name": "Agent",
"email": "agent@example.com"
},
"contact": { // Este forneceria os detalhes do usuário que enviou esta mensagem
"id": "1",
"name": "contact-name"
},
"conversation": { // Este forneceria os detalhes da conversa
"display_id": "1", // Este é o ID da conversa que você pode ver no painel.
"additional_attributes": {
"browser": {
"device_name": "Macbook",
"browser_name": "Chrome",
"platform_name": "Macintosh",
"browser_version": "80.0.3987.122",
"platform_version": "10.15.2"
},
"referer": "<http://www.chatwoot.com>",
"initiated_at": "Ter 03 Mar 2020 18:37:38 GMT-0700 (Horário Padrão das Montanhas)"
}
},
"account": { // Isso fornecerá os detalhes da conta
"id": "1",
"name": "Chatwoot",
}
}
Eventos de webhook suportados em Chatwoot
O Chatwoot publica vários eventos nos endpoints de webhook configurados. Se desejar configurar um webhook, consulte o guia aqui.
Cada evento tem sua estrutura de payload com base no tipo de modelo em que atua. A seção a seguir descreve os principais objetos que usamos no Chatwoot e seus atributos.
Objetos
Um payload de evento pode incluir qualquer um dos seguintes objetos. Os vários tipos de objetos suportados pelo Chatwoot estão listados abaixo.
Conta
{
"id": "inteiro",
"nome": "string"
}
Caixa de entrada
{
"id": "inteiro",
"nome": "string"
}
Contato
{
"id": "inteiro",
"nome": "string",
"avatar": "string",
"tipo": "contato",
"conta": {
// <...Objeto Conta>
}
}
Usuário
{
"id": "inteiro",
"nome": "string",
"e-mail": "string",
"tipo": "usuário"
}
Conversa
{
"additional_attributes": {
"navegador": {
"nome_do_dispositivo": "string",
"nome_do_navegador": "string",
"nome_da_plataforma": "string",
"versão_do_navegador": "string",
"versão_da_plataforma": "string"
},
"referente": "string",
"iniciado_em": {
"carimbo_de_hora": "iso-data-hora"
}
},
"pode_responder": "booleano",
"canal": "string",
"id": "inteiro",
"id_caixa_de_entrada": "inteiro",
"caixa_de_entrada_do_contato": {
"id": "inteiro",
"id_contato": "inteiro",
"id_caixa_de_entrada": "inteiro",
"id_da_caixa_de_entrada": "inteiro",
"id_de_origem": "string",
"criado_em": "data/hora",
"atualizado_em": "data/hora",
"hmac_verificado": "booleano"
},
"messages": ["Matriz de objetos de mensagem"],
"meta": {
"sender": {
// Objeto de contato
},
"assignee": {
// Objeto de usuário
}
},
"status": "string",
"unread_count": "integer",
"agent_last_seen_at": "unix-timestamp",
"contact_last_seen_at": "unix-timestamp"tamp",
"timestamp": "unix-timestamp",
"account_id": "integer"
}
Mensagem
{
"id": "integer",
"content": "string",
"message_type": "integer",
"created_at": "unix-timestamp",
"private": "boolean",
"source_id": "string / null",
"content_type": "string",
"content_attributes": "object",
"sender": {
"type": "string - contact/user"
// Objeto Usuário ou Contato
},
"account": {
// Objeto Conta
},
"conversation": {
// Objeto Conversation
},
"inbox": {
// Objeto Caixa de Entrada
}
}
Um webhook de exemplo payload
{
"event": "event_name"
// Atributos relacionados ao evento
}
Eventos de Webhook
O Chatwoot suporta os seguintes eventos de webhook. Você pode se inscrever neles ao configurar um webhook no painel ou usando a API.
conversation_created
Este evento será acionado quando uma nova conversa for criada na conta. O payload do evento é o seguinte.
{
"event": "conversation_created"
// <...Atributos da Conversa>
}
conversation_updated
Este evento será acionado quando houver uma alteração em qualquer um dos atributos do Conversa.
{
"event": "conversation_updated",
"changed_attributes": [
{
"<attribute_name>": {
"current_value": "",
"previous_value": ""
}
}
]
// <...Atributos da Conversa>
}
conversation_status_changed#
Este evento será acionado quando o status da conversa for alterado.
Observação: se você estiver usando APIs de bots de agentes em vez de webhooks, este evento ainda não é compatível.
{
"event": "conversation_status_changed"
// <...Atributos da Conversa>
}
message_created#
Este evento será acionado quando uma mensagem for criada em uma conversa. O payload do evento é o seguinte.
{
"event": "message_created"
// <...Atributos da Mensagem>
}
message_updated#
Este evento será acionado quando uma mensagem for atualizada em uma conversa. O payload do evento é o seguinte.
{
"event": "message_updated"
// <...Atributos da Mensagem>
}
webwidget_triggered#
Este evento será acionado quando o usuário final abrir o widget de chat ao vivo.
{
"event": "webwidget_triggered",
"id": "",
"contato": {
// <...Objeto Contato>
},
"caixa de entrada": {
// <...Objeto Caixa de entrada>
},
"conta": {
// <...Objeto Conta>
},
"conversa_atual": {
// <...Objeto Conversa>
},
"id_de_origem": "string",
"info_evento": {
"iniciado_em": {
"carimbo_de_hora": "string-de-data"
},
"referente": "string",
"idioma_do_widget": "string",
"idioma_do_navegador": "string",
"navegador": {
"nome_navegador": "string",
"versão_do_navegador": "string",
"nome_do_dispositivo": "string",
"nome_da_plataforma": "string",
"versão_da_plataforma": "string"
}
}
}
conversation_typing_on#
Este evento é acionado quando um agente começa a digitar em uma conversa. Pode ser uma nota privada ou uma mensagem para o cliente. Você pode usar a flag is_private para distinguir entre as duas.
{
"event": "conversation_typing_on",
"conversation": { ...<Objeto de Conversa> },
"user": { ... <Objeto Usuário / AgentBot / Capitão> },
"is_private": true
}
conversation_typing_off#
Este evento é acionado quando um agente para de digitar ou sai da janela de conversa.
{
"event": "conversation_typing_off",
"conversation": { ...<Objeto de Conversa> },
"user": { ... <Objeto Usuário / AgentBot / Capitão> },
"is_private": true
}