Webhooks: recebedor seguro em Node.js
Receitas para começar com permissões mínimas e exemplos que você pode baixar. Os arquivos não contêm credenciais e não executam compras ou envios de SMS. Configure seus próprios segredos no ambiente privado da integração.
Baixe o recebedor executável. Ele valida a assinatura, recusa replays antigos e grava uma caixa de entrada SQLite antes de responder. Requer Node.js 24 ou superior, sem pacotes adicionais.
Preparar
- Configure NOVODID_WEBHOOK_SECRET em um cofre ou arquivo privado de ambiente. Use o segredo mostrado na criação do webhook, não o token da API.
- Configure NOVODID_WEBHOOK_DB para um arquivo em volume privado persistente; o padrão é ./data/events.sqlite. PORT é 8787 por padrão.
- Execute o arquivo com Node.js. Coloque um proxy HTTPS na frente e publique a rota /webhook.
- Cadastre essa URL HTTPS em Desenvolvedores → Webhooks e escolha somente os eventos necessários. Localhost, redes privadas e redirects não são aceitos como destino da plataforma.
- Use o teste do painel e confira as entregas. O recebedor responde 202 somente depois de persistir o evento.
O que o código valida
- HMAC-SHA256 de timestamp + ponto + corpo bruto, comparado em tempo constante com X-Novodid-Signature.
- X-Novodid-Timestamp com diferença máxima de cinco minutos. Mantenha o relógio do servidor sincronizado.
- Corpo de até 256 KiB, versão v1 e tipo de evento conhecido.
- Duplicação pelo id do evento, não pelo identificador de cada tentativa. Um mesmo id com conteúdo diferente é recusado.
A tabela inbox guarda o JSON, tipo e estado pending. O exemplo recebe e persiste, mas não executa sua regra de negócio: implemente um trabalhador separado que processe linhas pendentes com idempotência. Só marque como processado após o sucesso da operação. Não suponha ordem nem entrega única.
Segurança e manutenção
O JSON pode conter dados pessoais e SMS: restrinja o volume, backups e acesso, e defina sua retenção. Não coloque o banco no git. Na rotação do segredo, atualize o ambiente do recebedor e reinicie o processo. Preserve o banco ao reiniciar. Não registre token, segredo, corpo completo ou assinatura em logs públicos.
401 indica assinatura/relógio incorretos; 413, corpo grande; 409, conflito de id; 503, falha de persistência. Confira Entregas no painel antes de reenviar. A plataforma tem prazo de oito segundos por entrega; o código confirma rapidamente após gravar, deixando trabalho pesado para o trabalhador. Para dados, eventos e política de repetição, consulte o guia da API.
n8n: consultar seus números
Receitas para começar com permissões mínimas e exemplos que você pode baixar. Os arquivos não contêm credenciais e não executam compras ou envios de SMS. Configure seus próprios segredos no ambiente privado da integração.
MCP: agente de consulta com permissões mínimas
Receitas para começar com permissões mínimas e exemplos que você pode baixar. Os arquivos não contêm credenciais e não executam compras ou envios de SMS. Configure seus próprios segredos no ambiente privado da integração.

