Trabalho com Laravel e integrei múltiplos gateways de pagamento, cada um com seu formato de webhook. Precisei gerenciar testes manuais, que cresceram em volume. Comecei usando o expose.dev, mas precisava de mais controle. Depois, optei por um tunel WebSocket persistente, que me permitiu manter a integridade dos testes e manipular payloads antes de entregar para o provedor.

Pitch: Construindo uma ferramenta de teste de webhook: o problema, as decisões técnicas e o resultado

Túnel WebSocket Persistente

Usando WebSocket, a request pública chega no servidor, é repassada como frame pelo socket para a CLI, que devolve a resposta real para o servidor. Isso elimina a espera de retry do provedor e me dá status de conexão em tempo real.

Manipulação de Payload

Para testar payloads diferentes, alterei a request antes de ela chegar no meu ambiente local. A manipulação de payload é feita em uma sequência de nodes que executam em sequência quando a request chega. Isso inclui verificação de assinatura HMAC, switch de campo do payload, transformação de header/body/method, enriquecimento via chamada externa, e idempotência com janela de tempo.

Persistência e Visualização

Para garantir que os testes fossem consistentes e não afetassem a UI, limitei a retenção de requests a 1.000, em vez de manter histórico indefinidamente. Também criei um tail de requests direto na CLI para acompanhar o fluxo de testes em tempo real.

Conclusão

Construí uma ferramenta chamada Routely que combina inspeção, tunelamento e manipulação de payload. Isso substitui a necessidade de duas ferramentas separadas e permite que eu teste integrações de pagamento de forma eficiente e consistente.

Construindo Ferramenta Problema Teste Webhook