Capa do artigo: Webhooks para Integração de Sistemas: Guia Seguro

Webhooks para Integração de Sistemas: Guia Seguro

Por Mattos Tech Solutions10 min de leitura

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.

MecanismoQuando costuma ajudarLimitação principal
API síncronaconsulta ou comando com resposta imediataacopla disponibilidade e latência
Pollingprovedor sem eventos ou verificação periódicaatraso e requisições repetidas
Webhookeventos externos entre organizaçõesduplicidade e disponibilidade do endpoint
Fila ou brokeralto volume e vários consumidores internosoperação adicional
Lotegrande volume sem necessidade imediatadefasagem 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:

  1. o endpoint recebe corpo, assinatura, timestamp e ID;
  2. valida assinatura sobre o corpo bruto e limita replay;
  3. confirma tipo, schema, conta e pedido;
  4. grava a entrega com ID único;
  5. publica a referência em uma fila e responde sucesso;
  6. o trabalhador confirma o estado quando necessário;
  7. marca o pedido como pago de modo idempotente;
  8. solicita faturamento no ERP com chave única;
  9. registra correlação e resultado;
  10. 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.

Fontes e referências