
Webhooks para Integração de Sistemas: Guia Seguro
Aprenda a implementar webhooks para integração de sistemas com assinatura, idempotência, retentativas, filas, versionamento e observabilidade.
O que são webhooks para integração de sistemas?
Webhooks para integração de sistemas são notificações HTTP enviadas automaticamente quando um evento ocorre. Em vez de o consumidor consultar repetidamente se um pagamento foi confirmado, o provedor envia uma requisição ao endpoint cadastrado quando o estado muda.
O webhook reduz consultas e pode acelerar processos entre e-commerce, ERP, CRM, logística, pagamentos e automações. Porém, receber a requisição não significa concluir o processo. Redes falham, mensagens se repetem, eventos podem chegar fora de ordem e endpoints ficam indisponíveis.
Uma implementação confiável autentica a entrega, registra o evento antes de responder, processa de forma idempotente, tenta novamente após falhas e permite reconciliação.
Webhook, API, polling ou mensageria?
Webhook e API não são alternativas excludentes. Normalmente, o webhook avisa que algo aconteceu e a API permite consultar ou alterar o recurso.
| Mecanismo | Quando costuma ajudar | Limitação principal |
|---|---|---|
| API síncrona | consulta ou comando com resposta imediata | acopla disponibilidade e latência |
| Polling | provedor sem eventos ou verificação periódica | atraso e requisições repetidas |
| Webhook | eventos externos entre organizações | duplicidade e disponibilidade do endpoint |
| Fila ou broker | alto volume e vários consumidores internos | operação adicional |
| Lote | grande volume sem necessidade imediata | defasagem e reconciliação |
Os mecanismos podem ser combinados. Um provedor notifica por webhook; o receptor consulta a API quando precisa confirmar o estado e usa uma fila interna para processar sem manter a conexão HTTP aberta.
O artigo sobre integração de sistemas via API aprofunda contratos, autenticação e falhas. Este guia se concentra no caminho assíncrono iniciado pelo produtor.
O contrato de um webhook confiável
Documente quais eventos existem, quem os produz, quando são emitidos e qual estado representam. Nomes vagos como “updated” obrigam o consumidor a adivinhar o que mudou.
Um envelope costuma precisar de:
- identificador único da entrega ou evento;
- tipo, como pagamento.confirmado;
- data e hora de ocorrência;
- origem e versão do contrato;
- identificador do recurso afetado;
- dados mínimos necessários;
- referência ao schema;
- identificador de correlação, quando disponível.
Evento e estado atual não são sinônimos. Um evento informa uma transição; a API pode mostrar que o recurso já avançou novamente. Explique se o payload contém retrato completo, diferença ou somente uma referência.
A especificação CloudEvents oferece atributos comuns para eventos entre plataformas; a versão publicada indicada pelo projeto é a 1.0.2. A OpenAPI 3.2.0 permite descrever webhooks recebidos, requisições e respostas. Essas referências ajudam a criar contratos interoperáveis, embora não sejam obrigatórias.
Como implementar webhooks para integração de sistemas
O receptor deve fazer pouco trabalho durante a requisição e preservar o suficiente para continuar depois.
1. Receba apenas por HTTPS
Use TLS válido e aceite somente métodos, tipos de conteúdo e tamanhos necessários. Não coloque credenciais na URL: elas podem aparecer em logs, históricos e ferramentas de monitoramento.
2. Preserve o corpo original
Muitos provedores calculam a assinatura sobre os bytes exatos. Fazer parsing ou alterar a codificação antes da verificação pode invalidar uma entrega legítima.
Leia o corpo bruto dentro de um limite seguro, capture os cabeçalhos necessários e só então valide assinatura e estrutura.
3. Verifique origem e integridade
Um segredo compartilhado pode gerar um HMAC do corpo. O receptor calcula o valor esperado e compara com a assinatura recebida usando função de tempo constante. Chaves devem ficar em armazenamento seguro, ser diferentes por endpoint ou cliente e ter rotação.
A RFC 9421 define assinaturas para componentes de mensagens HTTP. Muitos provedores usam formatos próprios; implemente exatamente o esquema publicado pelo emissor, incluindo algoritmo, campos cobertos e codificação.
Lista de IPs pode complementar a defesa quando o provedor mantém faixas estáveis, mas não substitui assinatura.
4. Reduza o risco de replay
Uma assinatura válida prova integridade e posse do segredo, mas uma mensagem capturada ainda pode ser reenviada. Valide timestamp dentro da tolerância definida, registre o identificador da entrega e reconheça combinações já processadas.
A documentação do GitHub sobre webhooks recomenda segredo, HTTPS, processamento assíncrono e identificador de entrega contra replay. Cada provedor possui cabeçalhos próprios.
5. Valide tipo, schema e escopo
Aceite somente eventos conhecidos. Valide campos obrigatórios, tipos, limites e versão antes do processamento. Confirme também que a assinatura está associada à conta correta e que o recurso pertence ao escopo esperado.
6. Grave e responda rapidamente
Depois de autenticar e validar o mínimo, persista a entrega ou publique em uma fila. Em seguida, retorne o sucesso aceito pelo provedor. Atualizar ERP, enviar e-mail e recalcular estoque dentro da requisição aumenta o risco de timeout e redelivery.
O sucesso HTTP deve significar que a empresa assumiu o evento, não que todas as consequências terminaram. Se o registro durável falhou, responder sucesso pode perder a oportunidade de nova tentativa.
Os guias de GitHub e Stripe recomendam resposta rápida e processamento assíncrono. Prazos e políticas variam entre emissores.
7. Processe com um trabalhador idempotente
Um trabalhador lê a fila, aplica a regra e registra o resultado. Ele deve distinguir falha transitória, que admite nova tentativa, de falha permanente, como schema incompatível.
Em projetos de software sob medida, esse fluxo precisa entrar no desenho, nos testes e na operação — não ser tratado como endpoint isolado.
Idempotência: duplicidade não pode repetir o efeito
Entrega “pelo menos uma vez” é comum: o emissor pode reenviar porque não recebeu a resposta, mesmo que o receptor tenha concluído a operação. Duplicidade deve ser uma hipótese normal.
Uma estratégia básica aplica restrição única ao identificador da entrega. O processamento grava esse ID e a mudança de negócio na mesma transação quando possível. Se o ID retornar, o sistema reconhece o resultado anterior sem cobrar, faturar ou criar novamente.
O ID técnico pode não bastar. Dois eventos diferentes podem representar o mesmo efeito. Use também uma chave de domínio, como provedor + tipo + identificador do pagamento, ou compare a versão do recurso.
Prefira operações como “definir pedido como pago se ainda não estiver” a “alternar o estado”. Para ação irreversível, consultar a API oficial pode confirmar a situação atual.
Preserve o histórico de deduplicação pelo período em que o provedor ainda pode reenviar eventos.
Retentativas e fila de falhas
No produtor, configure timeout curto e retentativas com atraso crescente e jitter. Defina tentativas, retenção e quais respostas permitem retry. Não tente indefinidamente sem visibilidade.
Após o limite, mova a entrega para uma fila de falhas ou estado equivalente. Guarde payload protegido, cabeçalhos relevantes, erro, tentativas e próxima ação. Uma pessoa autorizada deve conseguir corrigir a causa e reenviar sem editar o banco diretamente.
No receptor, a fila interna também exige política. Se o ERP estiver fora, não marque o evento como concluído. Registre a dependência, tente novamente de modo controlado e alerte antes que a idade da mensagem viole o processo.
A documentação da Stripe exemplifica retentativas automáticas, reenvio manual e eventos duplicados. Seus prazos não devem ser generalizados para outros fornecedores.
Eventos fora de ordem e evolução do schema
Webhooks podem seguir rotas diferentes e chegar fora de ordem. Quando a sequência importa, inclua versão monotônica do recurso, número de sequência ou instante definido pela origem. O consumidor compara com o estado aplicado e decide ignorar, aguardar ou reconciliar.
Para evoluir o contrato:
- prefira adicionar campos opcionais;
- faça consumidores tolerarem campos desconhecidos;
- mantenha o significado dos campos existentes;
- publique schema e exemplos por versão;
- use novo tipo ou versão em mudança incompatível;
- defina prazo e telemetria de depreciação.
Segurança para quem publica webhooks
Permitir que usuários cadastrem URLs transforma o servidor em cliente HTTP e cria risco de SSRF. Um invasor pode tentar alcançar endereços internos, metadados da nuvem ou destinos não autorizados.
O guia de prevenção a SSRF da OWASP cita webhooks customizados como cenário de risco. Conforme o modelo de negócio:
- permita somente HTTPS e portas esperadas;
- valide domínio e endereço resolvido;
- bloqueie faixas privadas, locais e de metadados;
- prefira allowlist quando os destinos são conhecidos;
- não siga redirecionamentos automaticamente;
- repita a validação a cada resolução e conexão;
- limite resposta, timeout e tráfego de saída;
- isole o componente de entrega da rede interna.
Criptografe segredos, restrinja alterações de endpoints e registre mudanças. Na rotação, aceite segredo antigo e novo por uma janela controlada.
Observabilidade e reconciliação
Correlacione produtor, gateway, fila, trabalhador e destino. Logs devem registrar IDs, tipo, tentativa, duração, resposta e resultado, sem copiar dados pessoais ou segredos desnecessários.
Acompanhe taxa de aceitação, falhas por endpoint, idade das retentativas, atraso até o processamento, duplicidades, volume na fila de falhas e versões ainda consumidas. Alertas precisam indicar impacto e ação.
Mesmo com boa entrega, mantenha reconciliação entre sistemas. Ela detecta eventos perdidos, configurações removidas, bugs e alterações feitas fora do fluxo. O guia de observabilidade de sistemas detalha logs, métricas, traces e alertas acionáveis.
Exemplo: pagamento confirmado e ERP
Considere um provedor que envia pagamento.confirmado:
- o endpoint recebe corpo, assinatura, timestamp e ID;
- valida assinatura sobre o corpo bruto e limita replay;
- confirma tipo, schema, conta e pedido;
- grava a entrega com ID único;
- publica a referência em uma fila e responde sucesso;
- o trabalhador confirma o estado quando necessário;
- marca o pedido como pago de modo idempotente;
- solicita faturamento no ERP com chave única;
- registra correlação e resultado;
- divergências entram na reconciliação.
Se o ERP estiver indisponível, a empresa já preservou a entrega e sua fila assume as tentativas. Para vendas, o serviço de soluções de e-commerce pode integrar pagamento, estoque, pedido e atendimento com esses controles.
Testes antes da produção
Exercite:
- assinatura ausente, inválida e segredo antigo;
- corpo alterado antes da verificação;
- timestamp expirado e replay do mesmo ID;
- payload grande, inválido ou desconhecido;
- duplicidade e eventos fora de ordem;
- timeout antes e depois da persistência;
- fila indisponível e trabalhador interrompido;
- destino lento, rate limit e falha permanente;
- rotação de segredo e redelivery manual;
- URL interna ou redirecionamento inseguro;
- pico de carga e crescimento da fila;
- reconciliação encontrando evento ausente.
Use ambiente de testes e ferramentas de captura apenas com dados não sensíveis.
Checklist de webhook seguro
Antes de liberar a integração, confirme:
- eventos, estados, responsáveis e contrato documentados;
- endpoint HTTPS com limites;
- corpo bruto preservado;
- assinatura e timestamp verificados;
- comparação de assinatura em tempo constante;
- segredo protegido e rotacionável;
- ID único e idempotência de negócio;
- persistência antes da resposta de sucesso;
- processamento assíncrono e retentativas;
- fila de falhas e redelivery auditável;
- eventos fora de ordem tratados;
- schema versionado e compatibilidade testada;
- URLs protegidas contra SSRF;
- logs, métricas, alertas e correlação;
- reconciliação entre sistemas;
- cenários de falha testados.
Conclusão
Webhooks para integração de sistemas funcionam quando o contrato é explícito e a entrega é tratada como não confiável até ser autenticada, validada e registrada. Assinatura protege origem e integridade; idempotência protege o negócio; filas e retentativas lidam com indisponibilidade; observabilidade e reconciliação revelam divergências.
Comece com um evento crítico e teste duplicidade, atraso e falha antes de ampliar. Se sua empresa precisa conectar sistemas com segurança e rastreabilidade, converse com a Mattos Tech Solutions.