Mensagens
Evento: messages · Transporte: POST para o seu receptor
Receba mensagens novas e projeções de mensagens enviadas pela instância. Use o objeto message como ponto de partida para identificar conversa, remetente, conteúdo e ID.
Quando é enviado
O fluxo de mensagens pode produzir eventos recebidos e enviados. O payload depende do tipo de mensagem e da origem; texto, mídia, reações e atualizações relacionadas não têm conteúdo idêntico.
Como processar
- Identifique a instância autorizada e a conversa em
message.chatid. - Preserve
message.idemessage.messageid; não converta os IDs em números. - Aplique deduplicação adequada ao seu processamento. Não responda automaticamente a toda mensagem sem verificar sua origem.
- Para acompanhar entrega/leitura, use também
messages_update.
O objeto chat pode acompanhar a mensagem. chatSource indica a origem do snapshot quando disponível.
Habilitar este evento
Adicione messages à lista events do webhook da instância. Preserve os outros eventos de que sua integração precisa.
{
"enabled": true,
"url": "https://seu-sistema.example/hooks/whatsapp",
"events": [
"messages"
]
}
Envie essa configuração para POST /webhook, usando o header token. O JSON acima configura a assinatura; os exemplos de entrega abaixo são o que seu servidor recebe.
Campos do payload
O envelope comum vem na raiz. Campos condicionais podem estar ausentes ou nulos conforme o evento; não use a tabela como obrigação de presença de todos os campos.
| Campo | Tipo | Significado |
|---|---|---|
EventType | string | Obrigatório. Tipo de evento, por exemplo connection ou messages. |
owner | string | Obrigatório. Consulte o objeto ou exemplo correspondente. |
token | string | Obrigatório. Token da instância; dado sensível. |
BaseUrl | string | Obrigatório. Consulte o objeto ou exemplo correspondente. |
instanceName | string | Consulte o objeto ou exemplo correspondente. |
message | object | Mensagem normalizada. Campos disponíveis variam conforme o tipo e a origem. |
message.id | string | Identificador retornado pelo sistema; preserve como string. |
message.messageid | string | ID da mensagem no WhatsApp. |
message.chatid | string | JID do contato, grupo ou canal. |
message.sender | string | JID do remetente. |
message.senderName | string | Nome disponível do remetente. |
message.fromMe | boolean | Mensagem enviada pela conta conectada. |
message.wasSentByApi | boolean | Origem na API quando esse campo estiver presente na mensagem. |
message.isGroup | boolean | Identifica conversa de grupo. |
message.messageType | string | Tipo de mensagem normalizado. |
message.text | string | Texto ou legenda disponível. |
message.messageTimestamp | integer | Timestamp da mensagem em milissegundos Unix. |
message.content | variável | Conteúdo específico do tipo de mensagem; não possui um formato único. |
message.status | string | Estado disponível da mensagem; pode estar vazio. |
chat | object | Snapshot de chat. Atualize pelos campos recebidos; não trate o evento como lista completa. |
chat.id | string | ID local do chat. |
chat.wa_chatid | string | JID da conversa. |
chat.name | string | Nome disponível. |
chat.wa_isGroup | boolean | Conversa de grupo. |
chat.wa_isBlocked | boolean | Estado de bloqueio no snapshot. |
chat.wa_archived | boolean | Estado de arquivamento. |
chat.wa_unreadCount | integer | Quantidade de mensagens não lidas disponível. |
chat.wa_label | variável | Etiquetas associadas, conforme a projeção do chat. Pode ser texto JSON; normalize antes de usar. |
chatSource | string | Origem do snapshot de chat quando presente, por exemplo updated. |
Exemplos de entrega
Exemplos ilustrativos com identificadores fictícios. O conteúdo específico e os campos opcionais variam.
Mensagem de texto recebida
{
"EventType": "messages",
"owner": "5511999999999",
"token": "INSTANCE_TOKEN",
"BaseUrl": "https://seu-servidor.example",
"instanceName": "Atendimento",
"message": {
"id": "5511999999999:MSG_EXEMPLO",
"messageid": "MSG_EXEMPLO",
"chatid": "5511888888888@s.whatsapp.net",
"sender": "5511888888888@s.whatsapp.net",
"senderName": "Contato de exemplo",
"fromMe": false,
"isGroup": false,
"messageType": "Conversation",
"text": "Olá, preciso de ajuda.",
"messageTimestamp": 1788868800000
}
}
Responder ao webhook
Seu receptor deve aceitar o POST JSON e devolver uma resposta 2xx rapidamente, após validar e registrar o recebimento. O corpo da resposta não é um comando para a API. Processe trabalho demorado separadamente.
O worker não repete automaticamente uma entrega HTTP malsucedida. Consulte diagnóstico de webhooks e implemente a reconciliação necessária. Eventos repetidos ou fora de ordem ainda precisam ser tolerados pelo receptor.