Webhooks
Cadastre uma URL para receber eventos em tempo real. Cada entrega é assinada com HMAC-SHA256 e reentregue com backoff exponencial; após esgotar as tentativas, vai para a dead-letter.
Eventos
message.received— mensagem recebidamessage.ack— status de entrega (enviado/entregue/lido)connection.update— QR, conectado, desconectadopresence.update,group.participants
Verificando a assinatura
O header x-webhook-signature traz t=<timestamp>,v1=<hmac>. Recompute o HMAC sobre `${t}.${rawBody}` com o secret do endpoint:
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(',').map(p => p.split('=')));
const expected = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
return timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}Payload
{ "id": "evt_...", "kind": "message.received", "data": { ... } }