Webhooks
A Dyvit recebe notificações em tempo real de três fontes: WhatsApp (mensagens de devedores), Mercado Pago (confirmações de pagamento Pix) e Stripe (eventos de billing). Cada webhook possui verificação de assinatura e trilha de auditoria.
Esses webhooks são endpoints internos da Dyvit, chamados diretamente pelos provedores (Meta, Mercado Pago, Stripe). Você não precisa configurá-los na sua integração. Esta página documenta o funcionamento para fins de transparência e troubleshooting.
WhatsApp (Meta Cloud API)
#Quando um devedor responde via WhatsApp, a Meta envia a mensagem para o endpoint da Dyvit. O agente de IA processa a mensagem e responde automaticamente.
Verificação de assinatura
A Meta assina cada payload com HMAC-SHA256 usando o webhook secret configurado. A Dyvit valida o header x-hub-signature-256 antes de processar qualquer mensagem.
Payload de exemplo (mensagem de texto)
{
"object": "whatsapp_business_account",
"entry": [
{
"id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
"changes": [
{
"value": {
"messaging_product": "whatsapp",
"metadata": {
"display_phone_number": "5511999999999",
"phone_number_id": "PHONE_NUMBER_ID"
},
"contacts": [
{
"profile": { "name": "Maria Silva" },
"wa_id": "5511987654321"
}
],
"messages": [
{
"from": "5511987654321",
"id": "wamid.HBgNNTUxMTk4NzY1NDMyMRUCABIY...",
"timestamp": "1711036800",
"type": "text",
"text": {
"body": "Oi, quero negociar minha dívida"
}
}
]
},
"field": "messages"
}
]
}
]
}
Tipos de mensagem suportados
Verificação do webhook (challenge)
A Meta exige um endpoint GET para verificar a propriedade do webhook durante a configuração:
A Meta envia os query params hub.mode, hub.verify_token e hub.challenge. A Dyvit valida o verify_token e retorna o challenge como resposta.
Mercado Pago / Pix
#Quando um devedor paga via Pix, o Mercado Pago envia uma notificação instantânea (IPN) para a Dyvit. Este é o webhook que dispara todo o fluxo de confirmação de pagamento.
Payload de exemplo
{
"action": "payment.updated",
"data": {
"id": "82347691205"
}
}
O campo data.id é o ID do pagamento no Mercado Pago. A Dyvit busca os detalhes completos via API do Mercado Pago para confirmar status e valor antes de marcar como pago.
Ações processadas
Idempotência
Cada webhook é deduplicado pela combinação (source, externalId, action). Se o Mercado Pago reenviar a mesma notificação, a Dyvit ignora o duplicado e retorna 200.
Fluxo pós-pagamento
#Quando o webhook do Mercado Pago confirma um pagamento aprovado, a Dyvit executa automaticamente seis etapas:
WebhookEvent.cobranca@dyvit.ai.As etapas 4, 5 e 6 são executadas em modo best-effort. Se o envio do WhatsApp ou do email falhar, o pagamento permanece confirmado. Nenhuma falha nas notificações reverte o status do pagamento.
Stripe (Billing)
#Eventos de billing (assinatura criada, pagamento de plano, cancelamento) são recebidos via webhook do Stripe.
O Stripe envia o payload completo do evento. A Dyvit verifica a assinatura via stripe-signature header usando constructEvent do SDK do Stripe.
Idempotência
Assim como o Mercado Pago, cada evento do Stripe é deduplicado por (source, externalId, action) na tabela WebhookEvent.
Segurança dos webhooks
#Cada provedor usa um mecanismo diferente de verificação. A tabela abaixo resume como a Dyvit valida cada um:
Detalhes de verificação por provedor
WhatsApp: a Dyvit calcula sha256=HMAC(secret, rawBody) e compara com o header x-hub-signature-256 usando timingSafeEqual para prevenir timing attacks.
Mercado Pago: o Mercado Pago envia o header x-signature no formato ts=...,v1=.... A Dyvit reconstrói o manifest id:{dataId};request-id:{xRequestId};ts:{ts}; e compara o HMAC com v1 usando timingSafeEqual.
Stripe: a Dyvit usa stripe.webhooks.constructEvent(rawBody, signature, webhookSecret) do SDK oficial, que lida com verificação e parsing internamente.
Nunca exponha os webhook secrets. Os secrets WHATSAPP_WEBHOOK_SECRET, MERCADOPAGO_WEBHOOK_SECRET e STRIPE_WEBHOOK_SECRET devem ser armazenados exclusivamente em variáveis de ambiente no servidor. Nunca os inclua em código frontend, repositórios públicos ou logs.
Trilha de auditoria
#Todos os webhooks (WhatsApp, Mercado Pago e Stripe) são registrados na tabela WebhookEvent com os seguintes campos:
Essa tabela permite rastrear cada webhook recebido, identificar falhas e reprocessar eventos quando necessário.
Respostas e retries
#A Dyvit processa o webhook de forma assíncrona e retorna 200 imediatamente. Isso evita timeouts e garante que os provedores não reenviem notificações desnecessariamente.