DEV Community

Cover image for WhatsApp-First Anti-Patterns: A Reference Handbook
suissAI
suissAI

Posted on

WhatsApp-First Anti-Patterns: A Reference Handbook

Organizado por categoria e gravidade


Legenda de Severidade:

  • 🔴 CRÍTICO: Bloqueia deploy. Risco de fraude, perda financeira ou violação legal.
  • 🟠 ALTO: Degrada experiência severamente. Requer correção prioritária.
  • 🟡 MÉDIO: Impacto moderado. Deve ser endereçado em sprints futuras.
  • 🟢 BAIXO: Melhoria de UX. Não bloqueante.

1. SEGURANÇA & CONFIANÇA (8 anti-patterns)

🔴 AP-01: Ignorar Anti-Fraude

Número dá identidade implícita, não autenticação perfeita. Ações de risco exigem fricção progressiva.

Exemplo: Alguém com o WhatsApp do cliente (celular roubado, chip clonado) pede troca de endereço. Sistema aceita só porque "é o número do cliente".

Efeito: Entrega desviada + fraude.


🔴 AP-02: Dados Sensíveis em Plain Text

CPF, cartão, receita médica — tudo armazenado sem criptografia/redaction.

Sinal: Log completo expõe PII sem proteção.


🔴 AP-03: Confirmação Fraca (sim/não) sem Vincular ao Objeto

"Sim" sem amarrar ao pedido/ação vira ambiguidade e fraude.

Exemplo: Usuário responde "sim" e você aplica no item/pedido errado.


🔴 AP-04: Deep Link sem Token de Segurança

Links mágicos de recuperação de senha ou acesso sem expiry/token único.

Sinal: Link de "resetar senha" funciona mesmo depois de usado ou vencido.


🟠 AP-05: Alterações Críticas sem "Freio de Risco"

Troca de endereço, cancelamento, reembolso — sem aumento de verificação.

Sinal: Qualquer ação crítica é executada do mesmo jeito que "ver status".


🟠 AP-06: Webhook sem Validação de Assinatura

Aceita eventos da API WhatsApp sem verificar o X-Hub-Signature.

Sinal: Qualquer POST malicioso consegue disparar ações no backend.


🟠 AP-07: Segurança "Tudo ou Nada"

Ou não pede nada nunca, ou pede login/senha pra tudo.

Sinal: Ausência de fricção progressiva por risco.


🟡 AP-08: Privacidade Laxa em Dados Multimodais

Armazena áudios/imagens sem anonimização ou TTL, violando LGPD.

Sinal: Logs retêm voz do usuário indefinidamente sem consentimento.


2. INTEGRIDADE & CONSISTÊNCIA (9 anti-patterns)

🔴 AP-09: Sem Idempotência

Chat duplica. Webhook duplica. Usuário reenviou. Se repetir comando gera efeito duplicado, você cobra duas vezes.

Exemplo: Cliente pede "PAGAR pedido 1837 no Pix". WhatsApp reenvia/webhook duplica. Sistema gera duas cobranças.

Efeito: Caos financeiro e perda de confiança.


🔴 AP-10: Sem Trilha de Evidência

Não registra o que foi pedido, confirmado e executado. Não audita nem recupera.

Exemplo: Cliente confirma "pode substituir por genérico". Depois reclama: "eu não autorizei". Você não tem registro do "SIM".

Efeito: Perde disputa e vira prejuízo.


🔴 AP-11: Webhooks sem Retry/Idempotency

WhatsApp manda evento duplicado ou atrasado e você processa errado.

Sinal: Mesma mensagem cria 2 pedidos.


🟠 AP-12: Concorrência Invisível (dois fluxos ao mesmo tempo)

Usuário dispara duas intenções e o bot mistura estados.

Sinal: Conversa vira "interleaving" e ninguém sabe onde está.


🟠 AP-13: Sem Lock em Recursos Compartilhados

Múltiplos fluxos editam o mesmo pedido sem deduplicação.

Sinal: Dois agentes alteram endereço simultaneamente → entrega errada.


🟠 AP-14: Sem "Cooldown" de Comandos Críticos

Usuário spamma "cancelar" ou "pagar" e você processa em paralelo.

Sinal: Múltiplos eventos concorrentes para o mesmo pedido.


🟠 AP-15: Carrinho Fantasma

Guarda itens sem vincular claramente a sessão/usuário. Carrinho "vaza" entre conversas.

Sinal: Usuário volta dias depois e vê itens de outra pessoa.


🟡 AP-16: Sem Distinção entre "Cancelar Fluxo" e "Cancelar Pedido"

"Cancelar" vira comando ambíguo.

Sinal: Usuário perde pedido real porque quis só sair da pergunta.


🟡 AP-17: Troca de Número sem Migração de Histórico

Cliente trocou de chip e vira usuário novo — perde pedidos, perde contexto.

Sinal: "Não encontrei seu pedido" (está vinculado ao número antigo).


3. UX CONVERSACIONAL (12 anti-patterns)

🟠 AP-18: Menu Infinito

Recriou dashboard ruim em texto. Chat não é lugar de listar tudo.

Exemplo: Cliente manda "quero dipirona". Bot responde com 25 opções misturadas.

Efeito: Cliente não escolhe nada, repete a pergunta ou pede humano.


🟠 AP-19: Dependência de Painel pra Finalizar

Jornada começa no WhatsApp mas ação crítica só fecha no web.

Exemplo: "Clique no link e finalize no site".

Efeito: WhatsApp vira só triagem. Conversão cai.


🟠 AP-20: Sem Confirmação Contextual em Ações de Impacto

Cancelar, pagar, trocar endereço… sem confirmação explícita.

Exemplo: Bot cancela imediatamente sem "Confirmar cancelamento do pedido 1837?"

Efeito: Cancelamento acidental, briga, retrabalho.


🟠 AP-21: Perder Contexto

Fazer usuário repetir o que acabou de dizer.

Exemplo: Cliente: "quero dorflex e entrega hoje". Bot pergunta CEP, depois: "Qual produto você deseja?"

Efeito: Usuário passa a não confiar e pede humano.


🟠 AP-22: Perguntas Abertas Demais

"Como posso ajudar?" sem estrutura vira caos.

Exemplo: Cliente manda: "tô com dor, febre, e preciso pra criança". Bot tenta "conversar" sem estruturar triagem.

Efeito: Bagunça e risco em saúde.


🟠 AP-23: "Gambi UI" — Mandar Link Toda Hora

Todo fluxo termina com "clique no link". Isso é WhatsApp-to-Web, não WhatsApp-first.

Sinal: Catálogo/carrinho/pagamento sempre fora do WhatsApp.


🟡 AP-24: UX Inconsistente de Opções

Uma hora é "1/2/3", outra é "sim/não", outra é "digite CONFIRMAR".

Sinal: Usuário erra não por falta de vontade, mas por falta de padrão.


🟡 AP-25: Mensagens Longas (Textão) em Etapa de Decisão

Pede decisão depois de parágrafo gigante; a pessoa não lê.

Sinal: Resposta do bot ocupa a tela inteira antes da escolha.


🟡 AP-26: Bot que Improvisa Demais

Mesma intenção gera respostas diferentes toda hora.

Exemplo: "tem Ozempic?" → uma hora "Tem sim", outra "Não vendemos".

Efeito: Sistema parece instável.


🟡 AP-27: Sem Caminho de Voltar / Correção Barata

Usuário erra e precisa recomeçar do zero.

Exemplo: "Entrada inválida. Reinicie o atendimento enviando 'menu'".

Efeito: A pessoa desiste.


🟡 AP-28: Menu Recursivo

Toda resposta inesperada leva de volta ao menu principal.

Sinal: Usuário tenta falar algo e sempre cai no mesmo menu.


🟢 AP-29: Humanização Forçada (Uncanny Valley)

Bot finge ser humano demais ("Vou verificar aqui com meu colega") e é descoberto.

Sinal: Usuário pergunta "você é robô?" e o bot nega.


4. ARQUITETURA & RESILIÊNCIA (10 anti-patterns)

🔴 AP-30: Intenção Fantasma — LLM sem Guardrail

Confiar 100% no NLU/LLM sem validação. Modelo erra e você executa ação crítica.

Exemplo: Cancelamento acionado só porque o bot "entendeu" errado.

Efeito: Riscos catastróficos.


🟠 AP-31: Observabilidade Zero

Não existe "status do que aconteceu". Se deu erro, ninguém sabe o que ocorreu.

Sinal: "Ocorreu um erro" sem código, sem contexto, sem alternativa.


🟠 AP-32: Recovery Inexistente

Falhou pagamento, pedido, envio — e usuário fica preso.

Sinal: Fluxo morre e manda recomeçar.


🟠 AP-33: Dependência Crítica sem Circuit Breaker

API de pagamento cai e você trava todas as conversas.

Sinal: Timeout de 30s em todo atendimento porque um serviço está lento.


🟠 AP-34: Integração Externa sem Retry

Chamadas para APIs externas falham uma vez e o fluxo morre.

Sinal: "Erro na integração" sem tentativa automática.


🟠 AP-35: Sessão Frágil

Expira rápido e perde tudo. Usuário volta e bot recomeça do zero.

Sinal: "Seu atendimento expirou, digite MENU".


🟠 AP-36: Timeout Silencioso

Bot some no meio do fluxo e só avisa depois que já morreu.

Sinal: "Sua sessão expirou" sem countdown, sem retry.


🟡 AP-37: Feature Flag Caótico

Releases sem controle de rollback. Ativa feature nova pra 100% sem teste gradual.

Sinal: Bug atinge toda base de uma vez.


🟡 AP-38: Migração de Versão sem Compatibilidade Reversa

Atualiza fluxo e conversas antigas quebram.

Sinal: Usuário no meio de atendimento fica perdido após deploy.


🟡 AP-39: Testes Só em Produção

Valida flow novo direto com cliente real.

Sinal: Bug descobre em horário de pico.


5. MULTIMODALIDADE & INPUTS (6 anti-patterns)

🟠 AP-40: Não Tratar Áudio/Imagem como Input de Primeira Classe

WhatsApp é multimodal. Ignorar áudio e anexos mata aderência.

Sinal: "Não entendi, digite em texto" (sempre).


🟡 AP-41: Não Suportar Mensagens Fora de Ordem

Resposta pode vir atrasada, citando mensagem antiga, ou em áudio.

Sinal: Fluxo assume ordem perfeita e quebra com qualquer atraso.


🟡 AP-42: Ignorar Anexos Úteis

Trata só texto/áudio, mas ignora localização ou PDFs.

Sinal: Usuário manda mapa de entrega e bot responde "digite o endereço".


🟡 AP-43: Campos Longos sem Estratégia

Exige input perfeito como se fosse formulário.

Sinal: Usuário manda endereço quebrado em 4 mensagens e fluxo se perde.


🟡 AP-44: Pergunta Dupla/Tripla na Mesma Mensagem

Joga 3 decisões em uma mensagem.

Sinal: "Qual produto? Qual endereço? E forma de pagamento?" no mesmo turno.


🟢 AP-45: Bias Cultural em NLU/LLM

Modelo assume inglês/americano, falhando em gírias brasileiras.

Sinal: "Quero pão de queijo" é interpretado como erro.


6. GOVERNANÇA & OPS (8 anti-patterns)

🔴 AP-46: Rate Limit do WhatsApp Ignorado

Manda 10 mensagens seguidas e leva ban/throttle.

Sinal: Conta bloqueada por "spam" mesmo sendo fluxo legítimo.


🟠 AP-47: Consentimento Ignorado em Mensagens Proativas

Manda promo/status sem opt-in e vira spam.

Sinal: Campanha "ativa" sem controle de frequência.


🟠 AP-48: Sem Governança de Catálogo/Conteúdo

IA inventa preço, disponibilidade, recomendação.

Sinal: Resposta não é ancorada em "fonte de verdade".


🟠 AP-49: Templates de Notificação Engessados

Só pode mandar mensagens proativas pré-aprovadas, não adapta ao contexto.

Sinal: "Seu pedido #12345 foi enviado" quando usuário tem 3 pedidos ativos.


🟡 AP-50: Custo Cego por Categoria

Não monitora qual tipo de conversa (service vs marketing) está gerando conta.

Sinal: Fatura explode porque fluxo de suporte usa template de marketing.


🟡 AP-51: Abuso da Janela de 24h

Tenta reengajar usuário fora da janela de sessão livre sem template aprovado.

Sinal: Mensagem proativa bloqueada pela API.


🟡 AP-52: Template Category Mismatch

Usa template de marketing para aviso transacional (ou vice-versa).

Sinal: Rejeição de template pela Meta.


🟡 AP-53: Documentação Inexistente do Comportamento Esperado

Nem você sabe o que o bot deveria fazer em caso X.

Sinal: Discussão de "bug vs feature" vira debate filosófico.


7. JORNADA & CONVERSÃO (7 anti-patterns)

🟠 AP-54: Não Validar Disponibilidade/Estoque Antes de Prometer

Confirma pedido e só depois descobre que não tem o item.

Sinal: "Confirmado!" seguido de "na verdade não temos".


🟠 AP-55: Preço Desatualizado

Mostra valor de cache antigo e só falha no checkout.

Sinal: "R$ 10" vira "R$ 15" no último passo.


🟠 AP-56: Frete Surpresa

Custo adicional aparece tarde demais.

Sinal: Usuário já disse "sim" e aí descobre +R$ 20 de frete.


🟠 AP-57: Substituição sem Política Explícita

Trocar marca/genérico sem consentimento rastreável.

Sinal: Troca acontece "porque sim".


🟡 AP-58: Sem "Resumo do Estado" Antes de Confirmação

Pede "confirmar" sem mostrar o que exatamente será executado.

Sinal: "Confirmar?" sem repetir item, preço, entrega.


🟡 AP-59: Desconto/Cupom Aplicado Tarde

Mostra total, usuário confirma, depois lembra do cupom — e você não recalcula.

Sinal: "Já confirmou, não dá pra voltar".


🟡 AP-60: Sem Diferenciação de Urgência

Reclamação crítica, pedido novo, dúvida boba — todos na mesma fila.

Sinal: "Meu pedido veio errado" espera 2h igual a "qual o horário?".


8. HANDOFF & HUMANO (4 anti-patterns)

🟠 AP-61: "Fallback Humano" como Muleta Padrão

Bot só funciona quando dá tudo certo; no primeiro atrito vira fila humana.

Sinal: "Vou te encaminhar para um atendente" em qualquer desvio pequeno.


🟠 AP-62: Handoff Humano sem Contexto

Bot transfere pra atendente mas não manda histórico/estado.

Sinal: Humano pergunta tudo de novo.


🟡 AP-63: Respostas do Bot Competindo com Humanas

Atendente assume e bot continua respondendo.

Sinal: Dois "agentes" falando ao mesmo tempo.


🟢 AP-64: Sem Política de Privacidade Conversacional

Pede dado sensível no chat sem orientar limite, uso e cuidado.

Sinal: Solicitar CPF sem contexto e sem redução de exposição.


REPROVAÇÃO AUTOMÁTICA (Deploy Bloqueado)

Presença de qualquer um desses bloqueia deploy:

ID Anti-Pattern Categoria
AP-01 Ignorar Anti-Fraude Segurança
AP-02 Dados Sensíveis em Plain Text Segurança
AP-09 Sem Idempotência Integridade
AP-10 Sem Trilha de Evidência Integridade
AP-11 Webhooks sem Retry/Idempotency Integridade
AP-30 Intenção Fantasma (LLM sem Guardrail) Arquitetura
AP-46 Rate Limit do WhatsApp Ignorado Governança
AP-54 Não Validar Estoque Antes de Prometer Jornada

Estatísticas

  • Total: 64 anti-patterns
  • Críticos (🔴): 8
  • Alto (🟠): 26
  • Médio (🟡): 26
  • Baixo (🟢): 4

Distribuição por Categoria:

  • Segurança: 8
  • Integridade: 9
  • UX Conversacional: 12
  • Arquitetura: 10
  • Multimodalidade: 6
  • Governança: 8
  • Jornada: 7
  • Handoff: 4

Top comments (0)