Pular para o conteúdo principal

Webhooks e Eventos

Os Webhooks são a forma como a QuettaCode notifica sua aplicação sobre eventos em tempo real, como o recebimento de uma mensagem no WhatsApp.

Configuração

Você deve configurar uma URL HTTPS pública no seu painel ou via API. A QuettaCode enviará requisições POST para essa URL com um payload JSON.

Formato do Payload

Todos os eventos seguem um envelope padrão:

{
"event": "message.received",
"id": "evt_123456789",
"timestamp": "2023-10-27T10:00:00Z",
"tenantId": "tenant_abc",
"data": {
// ... dados específicos do evento
}
}

Principais Eventos

message.received

Disparado quando uma nova mensagem chega de um contato.

{
"event": "message.received",
"data": {
"channelId": "chan_123",
"contact": {
"id": "ct_999",
"phone": "5511999999999",
"name": "João Silva"
},
"message": {
"id": "msg_wam_123",
"type": "text",
"content": "Olá, gostaria de um orçamento."
}
}
}

message.status

Atualizações de status de entrega (enviado, entregue, lido, falha).

{
"event": "message.status",
"data": {
"messageId": "msg_wam_123",
"status": "read", // sent, delivered, read, failed
"error": null
}
}

channel.status

Mudanças na conexão do canal (ex: desconectado, banido).

Segurança (Assinatura)

Para garantir que o webhook veio realmente da QuettaCode, enviamos um header X-Quetta-Signature. Essa assinatura é um HMAC-SHA256 do corpo da requisição usando sua chave secreta de Webhook (Webhook Secret).

Validação (Exemplo em Node.js):

const crypto = require('crypto');
const signature = req.headers['x-quetta-signature'];
const hash = crypto.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(JSON.stringify(req.body))
.digest('hex');

if (hash !== signature) {
// Rejeitar requisição
}

Retentativas (Retry)

Se sua URL retornar um status diferente de 2xx (ex: 500, 404) ou der timeout, a QuettaCode tentará reenviar o evento automaticamente com backoff exponencial (ex: 1m, 5m, 15m, 1h...).