Webhooks de saída enviam eventos da caixa de entrada para a sua URL em tempo real (recurso do plano Enterprise; configure em Configurações → Webhooks).
Eventos
| Evento | Quando |
|---|---|
mensagem.recebida | o contato mandou uma mensagem |
mensagem.enviada | a empresa enviou (caixa, agente, campanha, automação ou celular) |
mensagem.status | entregue, lida ou falhou |
conversa.atribuida | a conversa ganhou um responsável |
conversa.aguardando_humano | o agente de IA transferiu para a equipe |
conversa.resolvida / conversa.reaberta | mudou o status |
Formato
{ "id": "…", "evento": "mensagem.recebida", "criado_em": "2026-10-16T12:00:00Z", "workspace_id": "…", "tentativa": 1, "dados": { … } }
Validar a assinatura
Header X-ConverZAP-Assinatura: t=<unix>,v1=<hex>, onde v1 = HMAC-SHA256(segredo, "<t>.<corpo bruto>"). Recuse se a diferença de t passar de 5 minutos.
import crypto from "node:crypto";
function valida(corpo, header, segredo) {
const p = Object.fromEntries(header.split(",").map((x) => x.split("=")));
if (Math.abs(Date.now() / 1000 - Number(p.t)) > 300) return false;
const esperado = crypto.createHmac("sha256", segredo).update(`${p.t}.${corpo}`).digest("hex");
return crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(p.v1));
}
Responda 2xx em até 10 s. Sem 2xx, tentamos de novo em 1 min, 5 min, 30 min, 2 h, 6 h e 12 h; 410 desiste. A entrega pode repetir e chegar fora de ordem: deduplique pelo id.