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.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.instance.qrcodeUm novo código foi gerado e precisa ser escaneado. O payload contém o base64 da imagem.
Segurança e Validação (Headers)
Como garantir que o POST veio da Zenvio e não de um hacker? Nós enviamos headers de assinatura em todas as requisições de webhook.X-Zenvio-SignatureHash HMAC-SHA256 do corpo da requisição, assinado com seu Segredo de Webhook. Formato: t=timestamp,v1=hash.X-Zenvio-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.