Tema
Webhooks de eventos
O WayChat manda um POST para a sua URL quando algo acontece. Configure em Configurações → API → Novo webhook.
Eventos
| Evento | Quando |
|---|---|
mensagem.recebida | O cliente mandou mensagem |
mensagem.enviada | A equipe, o robô ou a API mandou mensagem |
conversa.criada | Começou uma conversa |
conversa.atribuida | Alguém assumiu ou recebeu a conversa |
conversa.transferida | Mudou de setor ou de pessoa |
conversa.encerrada | A conversa foi encerrada |
csat.recebido | O cliente deu a nota do atendimento |
ligacao.encerrada | Uma ligação do WhatsApp terminou (atendida, perdida, recusada ou que falhou) |
Formato
http
POST /sua-url
Content-Type: application/json
X-WayChat-Evento: mensagem.recebida
X-WayChat-Timestamp: 1792761600
X-WayChat-Assinatura: sha256=5f1c…json
{
"id": "6b0c3f0e-…",
"evento": "mensagem.recebida",
"criado_em": "2026-10-23T14:00:00.000Z",
"dados": {
"conversa": { "id": 42, "protocolo": 1042, "status": "aberta", "setor": { "id": 2, "nome": "Suporte técnico" } },
"contato": { "id": 7, "nome": "Maria Souza", "telefone": "5544999998888" },
"mensagem": { "id": 901, "direcao": "entrada", "texto": "Meu site caiu", "criado_em": "2026-10-23T14:00:00Z" }
}
}conversa e contato seguem o mesmo formato das rotas da API.
Conferir a assinatura
Cada webhook tem um segredo (whsec_...), mostrado ao criar. Calcule o HMAC-SHA256 de timestamp + "." + corpo cru com esse segredo e compare com X-WayChat-Assinatura:
js
import { createHmac, timingSafeEqual } from 'node:crypto'
function assinaturaValida(req, corpoCru, segredo) {
const ts = req.headers['x-waychat-timestamp']
const esperado = 'sha256=' + createHmac('sha256', segredo).update(`${ts}.${corpoCru}`).digest('hex')
const recebido = String(req.headers['x-waychat-assinatura'] || '')
const agora = Math.floor(Date.now() / 1000)
return Math.abs(agora - Number(ts)) < 300 && recebido.length === esperado.length && timingSafeEqual(Buffer.from(recebido), Buffer.from(esperado))
}TIP
Recuse envios com mais de 5 minutos (X-WayChat-Timestamp) para evitar repetição. Use o campo id para ignorar duplicados.
Entregas e novas tentativas
- Responda com qualquer status
2xxem até 10 segundos. - Se falhar, o WayChat tenta de novo até 6 vezes, com espera crescente (30 s, 1 min, 2 min…).
- Depois de 50 falhas seguidas, o webhook é desligado. Ligue de novo em Editar.
- Em Envios você vê as últimas entregas, com status e tempo. Testar manda um evento
testena hora. - Só endereços
httpspúblicos são aceitos.