Implementação Python do bot de verificação de fake news para WhatsApp usando FastAPI e LangGraph
Este repositório contém a implementação Python do bot Tá Certo Isso AI?, replicando fielmente a lógica originalmente construída em n8n. Utilizamos LangGraph para orquestração de workflows, FastAPI para o webhook, e integrações com Google Gemini e Evolution API.
Tá Certo Isso AI? é um bot de WhatsApp que combate a desinformação usando inteligência artificial multimodal e fact-checking. Qualquer pessoa pode verificar se uma mensagem é verdadeira, enganosa ou fora de contexto sem sair do WhatsApp.
Esta implementação Python oferece:
- ✅ 100% compatível com o workflow n8n original
- 🚀 Performance otimizada com FastAPI e asyncio
- 🔧 Fácil manutenção com código modular e tipado
- 📦 Deploy simplificado com ambiente virtual Python
┌─────────────────┐
│ WhatsApp │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Evolution API │ ◄─── Webhook: /messages-upsert
└────────┬────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ FastAPI (main.py) │
│ ┌───────────────────────────────────────────┐ │
│ │ LangGraph Workflow (graph.py) │ │
│ │ ┌─────────────────────────────────────┐ │ │
│ │ │ Data Extraction → Filters → │ │ │
│ │ │ Routing (Switch6/9) → │ │ │
│ │ │ Media Processing → Fact-check → │ │ │
│ │ │ Response Sender │ │ │
│ │ └─────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────┐
│ AI Services & External APIs │
│ • Google Gemini (Áudio, Imagem, │
│ Vídeo, TTS) │
│ • Google Vision (Reverse Search) │
│ • Fact-check API (Custom) │
└────────────────────────────────────┘
- 📝 Texto: Análise direta via fact-checking API
- 🎤 Áudio: Transcrição com Google Gemini → Fact-check → Resposta em áudio (Gemini TTS)
- 🖼️ Imagem: Análise com Google Gemini + Busca reversa (Google Vision) → Fact-check
- 🎥 Vídeo: Análise com Google Gemini (até 2 minutos) → Fact-check
- ✅ Detecta mensagens diretas vs. menções em grupos
- ✅ Suporte a mensagens citadas (quoted messages)
- ✅ Indicadores de presença ("digitando", "gravando")
- ✅ Respostas contextualizadas com links e fontes
- ✅ Saudações personalizadas
| Categoria | Tecnologia | Uso |
|---|---|---|
| Backend | FastAPI | Webhook HTTP para Evolution API |
| Orquestração | LangGraph | Gerenciamento de workflow e estado |
| IA - Transcrição | Google Gemini | Conversão de áudio em texto |
| IA - Análise de Imagem | Google Gemini | Análise de imagens para fact-checking |
| IA - Análise de Vídeo | Google Gemini | Processamento multimodal de vídeos |
| IA - TTS | Google Gemini TTS | Geração de áudio (text-to-speech) |
| Visão Computacional | Google Cloud Vision API | Busca reversa de imagens |
| WhatsApp Gateway | Evolution API | Integração com WhatsApp |
| Fact-checking | API Proprietária | Verificação de veracidade |
- Python 3.12+
- Conta Evolution API configurada
- API keys: Google Gemini, Google Cloud Vision
git clone https://github.com/TaCertoIssoAI/whatsapp-automation.git
cd whatsapp-automationpython3 -m venv venv
source venv/bin/activate # Linux/macOS
# ou
venv\Scripts\activate # Windowspip install -r requirements.txtCrie um arquivo .env na raiz do projeto:
# Evolution API
EVOLUTION_API_URL=https://sua-evolution-api.com
EVOLUTION_API_KEY=sua_api_key
# Google Gemini (transcrição, imagem, vídeo, TTS)
GOOGLE_GEMINI_API_KEY=...
# Google Cloud Vision (reverse image search)
GOOGLE_CLOUD_API_KEY=...
# Fact-check API
FACT_CHECK_API_URL=https://sua-api-factcheck.com
# Bot Config
BOT_MENTION_JID=5511999999999@s.whatsapp.net
# Server
WEBHOOK_PORT=5000Warning
Nunca versione o arquivo .env com credenciais reais! Use .env.example como template.
source venv/bin/activate
python main.pyO servidor iniciará em http://localhost:5000 com o endpoint webhook em /messages-upsert.
Para testar localmente com a Evolution API, use ngrok:
ngrok http 5000Configure o webhook na Evolution API com a URL fornecida:
https://your-ngrok-url.ngrok.io/messages-upsert
Consulte o arquivo DEPLOY.md para instruções completas de deploy em servidores ou plataformas cloud.
whatsapp-integration/
├── main.py # FastAPI app & webhook endpoint
├── graph.py # LangGraph workflow definition
├── state.py # WorkflowState TypedDict
├── config.py # Environment variables loader
├── requirements.txt # Python dependencies
├── nodes/ # Workflow nodes (modular)
│ ├── data_extractor.py # Parse webhook payload
│ ├── filters.py # Filters (group, mention, greeting)
│ ├── router.py # Switch6 & Switch9 routing
│ ├── media_processor.py # Audio/Image/Video/Text processing
│ ├── ai_services.py # Google Gemini AI integrations
│ ├── fact_checker.py # Fact-check API client
│ ├── evolution_api.py # Evolution API client
│ └── response_sender.py # Send text/audio responses
├── n8n/ # Original n8n workflow JSONs (reference)
│ ├── n8n-workflow.json
│ ├── analyze-image.json
│ ├── reverse-search.json
│ ├── digitando.json
│ └── gravando.json
└── DEPLOY.md # Deployment guide
A implementação Python foi auditada node-by-node contra o workflow n8n original. Todos os 30+ pontos de verificação foram confirmados:
- ✅ Data extraction paths
- ✅ Evolution API endpoints
- ✅ Switch6 & Switch9 routing
- ✅ Status messages (textos idênticos)
- ✅ Fact-check payloads
- ✅ AI prompts (GPT-4o-mini, Gemini)
- ✅ Caption handling logic
- ✅ Presence indicators (fire-and-forget)
- ✅ Audio response flow (TTS)
Consulte o walkthrough de verificação para detalhes completos.
Contribuições são bem-vindas! Por favor:
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'feat: adiciona nova feature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto faz parte da iniciativa Tá Certo Isso AI? e está disponível sob licença a definir.
- 🌐 Website: tacertoissoai.com.br
- 📝 Notion (Documentação): Anotações do Projeto
- 🎥 Vídeo de Apresentação: YouTube
- 🔄 N8N Workflows: GitHub - n8n-workflows
Para dúvidas, sugestões ou parcerias, entre em contato através do site tacertoissoai.com.br.
Feito com ❤️ pelo time Tá Certo Isso AI?