Automação
Comente TRIAGEM no Instagram @gastaomatos

Triagem Automática de WhatsApp com IA

Você acorda com 80 mensagens não lidas. 5 são urgentes, 20 importantes, o resto pode esperar. Em vez de você procurar, o robô lê tudo às 7h e te manda 5 linhas com o que importa.

Por que triagem é melhor que ler tudo

  • Ler tudo te tira 40 minutos por manhã, atenção fragmentada e cansaço cognitivo
  • Você responde primeiro o que aparece, não o que importa
  • Mensagens urgentes ficam soterradas embaixo de grupos com conversa solta
  • Você decide o dia só depois de processar tudo. Com triagem, você decide antes
  • Filtra ruído sem deixar passar o que era pra responder rápido

Stack

  • Node.js 22 + TypeScript
  • Baileys para ler o histórico de mensagens das últimas 12h
  • Anthropic Claude para classificar e resumir
  • WhatsApp Cloud API para enviar o resumo pro seu próprio número
  • Cron node-cron (ou Vercel Cron) rodando às 7h
  • Sem banco, sem estado, só leitura e envio

Prompt completo para Claude Code

Cole no Claude Code dentro de uma pasta vazia:

prompt
Crie um robô de triagem de WhatsApp em Node.js + TypeScript.

Estrutura:
src/
  baileys/client.ts        // conecta como aparelho secundário, sessão persistida
  baileys/read-recent.ts   // lê últimas 12h de todas as conversas
  ai/classify.ts           // chama Claude pra classificar
  ai/summarize.ts          // chama Claude pra gerar resumo final
  channels/send.ts         // dispara resumo via WhatsApp Cloud API
  cron.ts                  // dispara todo dia às 7h
  config/categorias.ts     // regras de classificação editáveis

Fluxo (executa às 7h via cron):

1. baileys/client.ts: conecta como aparelho secundário do seu WhatsApp
2. baileys/read-recent.ts:
   - Lê store de mensagens das últimas 12 horas
   - Filtra fora: status, broadcast, mensagens enviadas por você
   - Agrupa por conversa, mantém timestamp original
   - Retorna array: [{ conversa, autor, timestamp, texto }]

3. ai/classify.ts: pra cada conversa, chama Claude com prompt:
   "Você classifica conversas de WhatsApp pelo nível de urgência.

    Conversa com ${nome}:
    ${mensagens}

    Categorias:
    - URGENTE: pede resposta hoje, tem prazo, é cliente pagante ou família
    - IMPORTANTE: precisa resposta nos próximos 2 dias, oportunidade
    - PODE_ESPERAR: grupo aleatório, marketing, oferta, sem prazo

    Retorne JSON: {
      categoria: 'URGENTE' | 'IMPORTANTE' | 'PODE_ESPERAR',
      motivo: 'em 1 linha por que essa categoria',
      acao_sugerida: 'em 1 frase o que fazer'
    }"

4. ai/summarize.ts: agrega resultado e gera resumo final:
   "Monte um resumo de manhã pra um operador ocupado.

    URGENTES:
    ${listaUrgentes}

    IMPORTANTES:
    ${listaImportantes}

    Regras:
    - Português, 5 linhas no total
    - Comece com 'Bom dia, hoje cedo:'
    - Liste só urgentes e importantes (pode esperar fica de fora)
    - Pra cada item: nome (categoria) e ação em 1 frase
    - Termine com contagem: 'PODE_ESPERAR: X conversas'"

5. channels/send.ts: enviar o resumo via WhatsApp Cloud API
   pro seu próprio número (auto envio)

Cron:
cron.ts usa node-cron expressão '0 7 * * *' (7h todo dia).
Em produção, rodar em Railway com Dockerfile Node 22.

Variáveis de ambiente:
ANTHROPIC_API_KEY
WHATSAPP_CLOUD_TOKEN
WHATSAPP_CLOUD_PHONE_ID
SEU_NUMERO_WHATSAPP
BAILEYS_SESSION_PATH

Tratamento de erro:
- Se Baileys cair, manda mensagem 'Robô caiu, vai precisar reconectar'
- Se Claude falhar em alguma conversa, marca como PODE_ESPERAR e segue
- Log estruturado de cada execução pra auditoria

Como conectar ao WhatsApp

  • Use o Baileys, biblioteca não oficial que conecta como aparelho secundário
  • Rode o robô uma vez localmente, ele imprime QR code no terminal
  • Abra WhatsApp no celular: Configurações > Aparelhos conectados > Conectar
  • Escaneie o QR, a sessão fica salva em arquivo
  • Em produção, suba o arquivo de sessão como volume persistente

Como definir suas categorias

  • O prompt vem com URGENTE, IMPORTANTE e PODE_ESPERAR como padrão
  • Você adapta os critérios no arquivo config/categorias.ts
  • Exemplo: pra advogado, "cliente com audiência hoje" sempre URGENTE
  • Pra agência, "cliente pagante pedindo ajuste" sempre URGENTE
  • Quanto mais específico o critério, melhor a IA classifica

Configurar cron 7h

  • Em Node local: node-cron com expressão "0 7 * * *"
  • Em Railway: definir CRON_SCHEDULE no painel ou rodar como worker contínuo
  • Em Vercel: criar arquivo vercel.json com schedule "0 7 * * *" (timezone America/Sao_Paulo)
  • Testar antes em horário acessível mudando pra "*/5 * * * *" (a cada 5 min)
  • Depois de validar, volta pra 7h e fica rodando sozinho

Perguntas frequentes

O robô lê mensagem pessoal sem eu saber?

Ele lê o histórico que já está no seu próprio WhatsApp (conectado via Baileys como aparelho secundário, com seu QR code). Nenhum dado vai pra fora exceto o texto cru enviado pra Anthropic, que não armazena prompts via API. Nada fica salvo em banco.

Funciona com grupos?

Funciona. O Baileys lê grupos do mesmo jeito que conversas individuais. Mas pra grupos com muita gente, o robô tende a classificar como PODE_ESPERAR porque dificilmente um grupo tem prazo urgente pra você. Você pode forçar um grupo específico como URGENTE no config.

O Claude classifica errado às vezes?

Erra em casos ambíguos, principalmente quando a mensagem é vaga ("oi, tudo bem?"). A taxa de erro fica abaixo de 8% na prática. Como o resumo agrega só urgentes e importantes, mesmo um erro de classificação raramente esconde algo crítico.

Posso configurar pra rodar mais de uma vez por dia?

Pode. Edite o cron pra "0 7,12,18 * * *" e o robô roda às 7h, meio dia e 18h. Cada execução cobre as últimas 12h de mensagens. Útil pra quem opera fora de horário comercial.

Por que WhatsApp Cloud API pra enviar e Baileys pra ler?

O Baileys lê o seu histórico real, com todas as conversas. A Cloud API é o canal oficial e estável pra enviar o resumo de manhã, sem risco de cair. Você usa cada ferramenta no que ela faz melhor.

Quer implementar isso?

Me chama no WhatsApp. Ajudo você a configurar ou implemento pra você.

Quero ajuda no WhatsApp
DT

Gastão Matos

@gastaomatos