O campo
data varia ligeiramente dependendo do evento, mas os campos de identificação (event, ids, timestamp) são constantes.Tabela de Eventos (Escopos)
Ao configurar um Webhook no painel, você escolhe quais eventos deseja ouvir. Para evitar ruído desnecessário no seu servidor, ative apenas o que for útil para sua aplicação.Eventos de Mensagem (Ciclo de Vida)
message.sentA mensagem saiu da nossa fila e foi aceita pelos servidores da Meta. (1 tique cinza).message.deliveredO aparelho do destinatário recebeu a notificação. (2 tiques cinzas).message.readO destinatário abriu a conversa ou deu play no áudio. (2 tiques azuis).message.failedOcorreu um erro (número inválido, bloqueio ou falha técnica) após todas as tentativas.message.receivedSeu número recebeu uma mensagem de texto, áudio ou mídia (Inbound). Ideal para Chatbots.message.respondedO destinatário usou a função “Responder” (Swipe right) em uma mensagem sua específica.message.deletedA mensagem foi apagada (“Apagar para todos”) pelo remetente ou via API.message.editedO conteúdo do texto foi alterado após o envio.
Eventos de Instância (Conectividade)
instance.connectingA instância está aguardando a leitura do QR. Útil para exibir “Aguardando conexão…” na interface.instance.qrcodeUm novo código foi gerado e precisa ser escaneado. O payload contém o base64 da imagem.instance.connectedA leitura do QR Code foi bem-sucedida ou a sessão foi restaurada automaticamente.instance.disconnectedO celular ficou sem bateria, sem internet ou o usuário encerrou a sessão no aparelho.
Retorno de cada evento (WhatsApp)
Abaixo, o corpo completo (body) que a Notifique envia no POST para cada evento de mensagem e de instância. O campodata é o que varia; o restante da estrutura é sempre o mesmo.
Eventos de Mensagem
message.sentdata são enviados (nenhum opcional).
message.delivered
data são enviados (nenhum opcional).
message.read
data são enviados (nenhum opcional).
message.failed
data: messageId.
message.received (inbound)
data podem variar conforme tipo da mensagem (texto, áudio, mídia). Outros campos podem ser opcionais.
message.responded
data são enviados (nenhum opcional).
message.deleted
data são enviados (nenhum opcional).
message.edited
data: newContent (pode ser null quando não disponível).
Eventos de Instância
instance.qrcodedata são enviados (nenhum opcional).
instance.connected
data: phoneNumber (pode ser null em alguns casos).
instance.disconnected
data é vazio (nenhum campo).
instance.connecting (aguardando leitura do QR)
data são enviados (nenhum opcional).
Segurança e Validação (Headers)
Como garantir que o POST veio da Notifique e não de um hacker? Nós enviamos headers de assinatura em todas as requisições de webhook.X-Notifique-SignatureHash HMAC-SHA256 do corpo da requisição, assinado com seu Segredo de Webhook. Formato: t=timestamp,v1=hash.X-Notifique-TimestampO momento exato (Unix Timestamp) em que geramos o evento. Use para evitar Replay Attacks.X-Workspace-IdO ID do workspace, para facilitar o roteamento em sistemas multi-tenant.
Dica de Segurança: Sempre verifique se o timestamp é recente (ex: menos de 5 minutos) e recalcule o hash para validar a origem.
Respostas Esperadas
O seu servidor deve responder à nossa requisição o mais rápido possível para evitar timeouts.Status 2xxSucesso. O evento é marcado como entregue e sai da nossa fila.Status 4xx / 5xx / timeoutFalha. Nós agendamos uma retentativa automática.
Importante: Se o seu processamento for demorado (ex: gerar um relatório complexo ao receber uma mensagem), responda
200 OK imediatamente e processe a lógica em background (background job). Se você demorar mais de 10 segundos, nós consideraremos Timeout e enviaremos de novo.