Webhook por público
1. Introdução¶
Nesta opção, o WhatsApp (e qualquer outro provedor que dispare webhook público) não chama a API principal do PASI.
Em vez disso, existe um Webhook Service mínimo, dedicado e público, que faz somente o que precisa ser feito na borda: - valida origem e assinatura - valida formato/payload - aplica rate limit agressivo e proteções antifraude - controla idempotência (para evitar duplicar ações) - transforma o evento externo em um comando interno normalizado - chama o core interno usando uma service account (token interno)
O objetivo é parar de “afrouxar” a segurança do sistema inteiro por causa de uma integração pública (como aconteceu com AllowAnonymous espalhado).
2. Visão estratégica¶
2.1. O que esta opção resolve¶
- Reduz drasticamente a superfície pública crítica: a API principal deixa de ser impactada por exigências de webhook público.
- Isolamento de risco: qualquer abuso, ataque, varredura ou erro vindo do WhatsApp fica contido em um serviço pequeno e controlado.
- Padroniza entrada externa: o webhook service vira o lugar certo para regras de borda (assinatura, origem, idempotência, rate limit).
- Acelera “travar” o legado: dá para cortar rapidamente o
AllowAnonymousdo resto da API, mantendo apenas o webhook service público.
2.2. O que esta opção não resolve sozinha¶
- O core ainda precisa de autorização real por vínculo: o webhook service não deve “virar regra de negócio”.
- Idempotência precisa ser bem desenhada: sem isso, eventos repetidos podem gerar duplicidade (ex.: pagamento duplicado, criação duplicada, mudança de status em loop).
- Observabilidade é obrigatória: para não virar caixa-preta, precisa de logs, correlação e trilha de auditoria do evento até a ação no core.
3. Visão de negócio¶
3.1. Benefícios¶
- Menos risco e menos ruído operacional: reduz incidentes e comportamentos estranhos causados por exposição ampla da API.
- Mais segurança para processos sensíveis: o WhatsApp deixa de ser justificativa para manter endpoints críticos abertos.
- Antifraude e controle na borda: fica fácil aplicar limites agressivos e regras específicas sem afetar o restante dos consumidores.
- Experiência mais previsível: eventos externos são normalizados antes de entrar no domínio, reduzindo inconsistência.
3.2. Pontos de atenção para o negócio¶
- É preciso alinhar quais ações o WhatsApp pode disparar (escopo), e quais são proibidas.
- É necessário definir claramente:
- quais eventos existem,
- o que cada evento significa,
- quais validações e critérios de rejeição existem,
- e como o sistema reage a reenvios e duplicidades (idempotência).
4. Fluxo de funcionamento¶
5. Manutenção e longo prazo¶
5.1. Manutenção do código¶
- Serviço pequeno e bem definido: o webhook service tem um escopo limitado (bordas), então tende a ser estável e fácil de manter.
- Risco reduzido de “arrastar legado”: o core pode evoluir sem depender de detalhes do provedor externo.
- Exige disciplina no desenho: se começar a “colocar regra de negócio no webhook”, ele vira um mini-sistema e perde o objetivo.
Boas práticas para manter sustentável:
- Contrato de eventos versionado (event type, schema, campos obrigatórios).
- Idempotência persistida (chave do evento + status + timestamp).
- Dead-letter e reprocessamento controlado (quando for necessário).
- Observabilidade ponta a ponta (correlation id do webhook até a ação no core).
5.2. Escalabilidade¶
- Escala separada da API principal: picos de webhook (ex.: WhatsApp) não derrubam o core por falta de controle.
- Rate limit agressivo: como a borda é isolada, dá para bloquear rápido, limitar por IP/origem, impor janelas e thresholds.
- Fila opcional: se volume crescer, o webhook service pode:
- responder rápido com ACK,
- enfileirar comando interno,
- processar assíncrono com retry e DLQ.
(Importante: a fila melhora resiliência, mas aumenta complexidade; vale quando houver volume ou instabilidade real no provedor.)
6. Adaptação ao legado do PASI¶
No cenário atual do PASI, esta opção é quase sempre obrigatória, porque hoje o WhatsApp “puxa” a API para um modelo permissivo (muitos endpoints AllowAnonymous), o que cria risco sistêmico.
6.1. Caminho de adaptação recomendado¶
- Criar o Webhook Service e publicar como único ponto público
- Deixar somente ele exposto para a internet para o caso WhatsApp.
- Migrar rotas do WhatsApp para ele
- Tudo que hoje chama API principal de forma permissiva passa a entrar por esse serviço.
- Remover permissividade do resto da API
- Revisar e eliminar
AllowAnonymousdo que não é webhook.
- Revisar e eliminar
- Implementar idempotência real
- Garantir que reenvio do provedor não duplica ações.
- Chamar core com service account
- O core passa a aceitar apenas chamadas internas autenticadas e rastreáveis.
- Observabilidade e antifraude
- Logs por evento, alertas de abuso, thresholds e bloqueios.
6.2. Por que esta opção é boa para transição¶
- Ela reduz risco rápido sem exigir refatoração completa do core.
- Ela cria uma camada de proteção e normalização que continua útil mesmo quando o core for reescrito.
- Ela evita que integrações externas “contaminem” as regras de segurança dos portais e do superapp.
7. Principais prós e contras¶
7.1. Prós¶
- Você para de manter a API inteira permissiva por causa do WhatsApp.
- Reduz muito risco e ruído.
- Fica mais fácil aplicar rate limit agressivo e antifraude.
7.2. Contras¶
- É mais um componente para operar.
- Exige desenho de eventos e idempotência (para não duplicar ações).
8. Quando esta opção faz sentido¶
- Quase sempre quando existe webhook público.
- Especialmente quando o legado foi “aberto demais” para suportar integração externa.
- Quando você precisa de segurança forte e controle de abuso sem afetar os demais consumidores.