Toda chamada é um POST por HTTPS com corpo JSON. O corpo sempre traz os mesmos cinco campos, e só o conteúdo de payload muda conforme o evento. Os valores abaixo são exemplos.
Corpo da chamada
{
"retailerId": "aB3dE5gH7j",
"origin": "conversational",
"type": "chat-routed",
"traceId": "6710a3f2c9e77b0012ab34cd",
"payload": {}
}
Campo | Tipo | Descrição |
| string | ID da sua loja na OmniChat. |
| string | Origem do evento: |
| string | Tipo do evento. |
| string | ID do evento. Uma nova tentativa repete o mesmo valor: use-o para ignorar eventos repetidos. |
| object | Dados do evento. O conteúdo muda conforme o tipo. |
Um evento é identificado pelo par origin + type. O tipo message-status existe nas duas origens, com conteúdos diferentes.
Datas em texto seguem ISO 8601 em UTC. Nos eventos de campanha, timestamp vem em milissegundos desde 01/01/1970 (UTC). Campos marcados como opcionais podem não vir no JSON.
Campos comuns dos eventos de atendimento
Campo | Tipo | Descrição |
| string | Data e hora do evento, em ISO 8601 (UTC). |
| string | ID da conversa na OmniChat. |
| string | Identificador do contato no canal, como o número no WhatsApp. |
| string, opcional | ID do atendimento. |
| string | Estado da conversa: |
| string | Canal da conversa, como |
conversational / chat-routed: Atendimento roteado
{
"timeStamp": "2026-10-13T14:32:05.120Z",
"objectId": "Qw3Er5Ty7U",
"chatId": "5511999990000",
"csrId": "Zx9Cv8Bn7M",
"routedBy": {
"id": "Us3rAn41D",
"name": "Ana Souza",
"username": "ana.souza@lojabella.com.br",
"userType": "USER"
},
"fromType": "TEAM",
"to": {
"id": "Us3rJ0a01",
"name": "João Pereira",
"username": "joao.pereira@lojabella.com.br",
"userType": "USER"
},
"toType": "USER",
"routeType": "USER",
"platform": "WHATSAPP"
}
Campo | Tipo | Descrição |
| object, opcional | Quem encaminhou: |
| string, opcional | Com quem a conversa estava: |
| object, opcional | Para quem a conversa foi: |
| string | Destino: |
| string | Motivo do encaminhamento: |
Também traz timeStamp, objectId, chatId, csrId e platform (campos comuns).
conversational / chat-finished: Atendimento encerrado
{
"timeStamp": "2026-10-13T14:32:05.120Z",
"objectId": "Qw3Er5Ty7U",
"chatId": "5511999990000",
"internalState": "FINISHED",
"platform": "WHATSAPP",
"csrId": "Zx9Cv8Bn7M",
"finishedBy": {
"id": "Us3rAn41D",
"name": "Ana Souza",
"username": "ana.souza@lojabella.com.br",
"userType": "USER"
},
"closingReason": "Compra concluída",
"finishType": "USER",
"from": {
"id": "Us3rAn41D",
"userType": "USER"
},
"fromType": "USER",
"isReplied": true
}
Campo | Tipo | Descrição |
| object, opcional | Quem encerrou: |
| string, opcional | Motivo de encerramento informado. |
| string |
|
| object, opcional | Com quem a conversa estava antes do encerramento: pessoa ou time. |
| string, opcional |
|
| boolean, opcional | Indica se o contato recebeu resposta desde o último encaminhamento. |
Também traz os campos comuns.
conversational / chat-pipeline-stage-changed: Mudança de etapa no funil
{
"timeStamp": "2026-10-13T14:32:05.120Z",
"objectId": "Qw3Er5Ty7U",
"chatId": "5511999990000",
"internalState": "USER",
"stageId": "St4g3N3g0c",
"stageName": "Negociação",
"stagePosition": 2,
"pipelineId": "P1p3l1n3Vd"
}
Campo | Tipo | Descrição |
| string | ID da nova etapa do funil. |
| string | Nome da nova etapa do funil. |
| number | Posição da nova etapa no funil. |
| string, opcional | ID do funil. |
Também traz timeStamp, objectId, chatId e internalState. Este evento não traz platform.
conversational / message-received: Mensagem recebida
{
"timeStamp": "2026-10-13T14:32:05.120Z",
"objectId": "Qw3Er5Ty7U",
"chatId": "5511999990000",
"csrId": "Zx9Cv8Bn7M",
"internalState": "USER",
"platform": "WHATSAPP",
"teamId": "T3amP0s1D",
"to": {
"id": "Us3rAn41D",
"name": "Ana Souza",
"username": "ana.souza@lojabella.com.br",
"userType": "USER"
},
"customer": {
"id": "Cu5t0m3r1",
"name": "Maria Lima"
},
"phone": {
"number": "999990000",
"areaCode": "11",
"countryCode": "55"
},
"message": {
"id": "M3ss4g3Id1",
"externalId": "wamid.EXEMPLO1",
"text": "Olá, meu pedido já saiu?",
"content": "Olá, meu pedido já saiu?",
"type": "TEXT",
"status": "INCOMING_RECEIVED",
"platform": "WHATSAPP",
"createdAt": "2026-10-13T14:32:04.870Z",
"updatedAt": "2026-10-13T14:32:04.870Z",
"isNewChat": false
}
}
Campo | Tipo | Descrição |
| string, opcional | ID do time responsável pela conversa. |
| string, opcional | ID de quem passou a conversa para o bot. |
| object, opcional | Responsável atual pela conversa: |
| object | Contato: |
| object | Telefone do contato: |
| string | ID da mensagem na OmniChat. |
| string, opcional | ID da mensagem no canal. |
| string, opcional | Texto da mensagem. |
| string, opcional | URL do anexo ou, se não houver anexo, o texto. |
| string | Tipo da mensagem, como |
| string | Status da mensagem, como |
| object, opcional | De onde veio o contato, como uma campanha ou um anúncio: |
| object, opcional | Detalhes de mensagens geradas pelo sistema. |
| string, opcional | Canal da mensagem. |
| string | Criação da mensagem, em ISO 8601 (UTC). |
| string | Última atualização da mensagem, em ISO 8601 (UTC). |
| object, opcional | Dados estruturados, como a resposta de um WhatsApp Flow ou de um pagamento. |
| boolean, opcional | Indica se a mensagem abriu uma nova conversa. |
Também traz os campos comuns.
conversational / message-sent: Mensagem enviada
Notas internas não geram este evento.
{
"timeStamp": "2026-10-13T14:32:05.120Z",
"objectId": "Qw3Er5Ty7U",
"chatId": "5511999990000",
"csrId": "Zx9Cv8Bn7M",
"internalState": "USER",
"platform": "WHATSAPP",
"teamId": "T3amP0s1D",
"from": {
"id": "Us3rAn41D",
"name": "Ana Souza",
"username": "ana.souza@lojabella.com.br",
"userType": "USER"
},
"customer": {
"id": "Cu5t0m3r1",
"name": "Maria Lima"
},
"phone": {
"number": "999990000",
"areaCode": "11",
"countryCode": "55"
},
"message": {
"id": "M3ss4g3Id2",
"text": "Já saiu, sim. Chega amanhã.",
"content": "Já saiu, sim. Chega amanhã.",
"type": "TEXT",
"status": "OUTGOING_CREATED",
"createdAt": "2026-10-13T14:33:10.402Z",
"updatedAt": "2026-10-13T14:33:10.402Z"
}
}
Campo | Tipo | Descrição |
| string, opcional | ID do time responsável pela conversa. |
| string, opcional | ID de quem passou a conversa para o bot. |
| object, opcional | Quem enviou: |
| object | Contato: |
| object | Telefone do contato: |
| string | ID da mensagem na OmniChat. |
| string, opcional | ID da mensagem no canal. |
| string, opcional | Texto da mensagem. |
| string | URL do anexo ou, se não houver anexo, o texto. |
| string | Tipo da mensagem, como |
| string | Status da mensagem, como |
| string, opcional | ID do template usado no envio. |
| object, opcional | De onde veio o contato: |
| string | Criação da mensagem, em ISO 8601 (UTC). |
| string | Última atualização da mensagem, em ISO 8601 (UTC). |
| string, opcional | Recurso de IA que ajudou a escrever a mensagem. |
| object, opcional | Dados do envio pela API do WhatsApp. |
Também traz os campos comuns.
conversational / message-status: Status da mensagem
Este evento sai quando muda o status de entrega de uma mensagem enviada por campanha ou por outra origem registrada no contato, como um disparo pela API (contactOrigin). Mensagens enviadas pelos agentes no atendimento não geram este evento. Ele também sai com OUTGOING_ERROR quando um envio de campanha falha antes de a mensagem existir: nesse caso, objectId e chatId não vêm.
{
"timeStamp": "2026-10-13T14:32:05.120Z",
"objectId": "Qw3Er5Ty7U",
"chatId": "5511999990000",
"csrId": "Zx9Cv8Bn7M",
"internalState": "USER",
"platform": "WHATSAPP",
"message": {
"id": "M3ss4g3Id3",
"externalId": "wamid.EXEMPLO3",
"type": "TEMPLATE",
"status": "OUTGOING_DELIVERED",
"contactOrigin": {
"id": "C4mp4nh41D",
"name": "Volta às aulas",
"token": "CAMPAIGN"
},
"dispatchId": "D1sp4tch01"
}
}
Campo | Tipo | Descrição |
| string | Data e hora do evento, em ISO 8601 (UTC). |
| string, opcionais | Como nos campos comuns. Neste evento, todos podem não vir. |
| string, opcional | ID da mensagem na OmniChat. |
| string, opcional | ID da mensagem no canal. |
| string, opcional | Tipo da mensagem. |
| string | Status da mensagem, como |
| object | De onde veio o contato: |
| string, opcional | ID do disparo de campanha ou da API. |
| object, opcional | Contexto enviado junto com o disparo. |
| object, opcional | Erro de entrega: |
| object, opcional | Dados do envio pela API do WhatsApp. |
campaign / message-replies: Resposta de campanha
{
"campaign": {
"id": "C4mp4nh41D",
"name": "Volta às aulas"
},
"dispatch": {
"id": "D1sp4tch01"
},
"template": {
"id": "T3mpl4t301"
},
"message": {
"id": "M3ss4g3Id4",
"text": "Quero saber mais",
"type": "BUTTON",
"status": "INCOMING_RECEIVED",
"replyType": "QUICK_REPLY"
},
"contact": {
"phoneNumber": "5511999990000"
},
"timestamp": 1791902525120
}
Campo | Tipo | Descrição |
| object | Campanha respondida: |
| object | Disparo da campanha: |
| object | Template da mensagem de campanha: |
| string | ID da mensagem na OmniChat. |
| string, opcional | Texto da mensagem. |
| string, opcional | Tipo da mensagem. |
| string, opcional | Status da mensagem. |
| string |
|
| string, opcional | Link da campanha que o contato clicou. |
| array, opcional | Parâmetros do link de destino, em pares |
| object, opcional | Contexto da mensagem de campanha respondida. |
| object | Contato que respondeu: |
| string, opcional |
|
| number | Data e hora do envio do evento, em milissegundos desde 01/01/1970 (UTC). |
Quando o contato clica num link da campanha, o evento vem sem message.text, message.type e message.status, e traz message.url, message.queryParams e payload.type igual a LINK_REPLY.
campaign / message-status: Status da mensagem de campanha
{
"campaign": {
"id": "C4mp4nh41D"
},
"dispatch": {
"id": "D1sp4tch01"
},
"message": {
"id": "M3ss4g3Id3",
"status": "OUTGOING_DELIVERED"
},
"contact": {
"phoneNumber": "5511999990000"
},
"timestamp": 1791901925120
}
Campo | Tipo | Descrição |
| object | Campanha da mensagem: |
| object | Disparo da campanha: |
| string, opcional | ID da mensagem na OmniChat. |
| string | Status da mensagem, como |
| object, opcional | Contexto enviado junto com o disparo. |
| object, opcional | Erro de entrega: |
| object | Contato que recebeu a mensagem: |
| number | Data e hora do envio do evento, em milissegundos desde 01/01/1970 (UTC). |
