Sistema SaaS Multi-Tenant de Automação de Qualificação de Leads com IA
LeadFlowAI é uma plataforma corporativa que automatiza o processo de captura, qualificação e resposta inicial a leads usando LLM (Large Language Models) como agente SDR.
Quando um lead entra via:
- Formulário Web (primeiro canal)
- Meta Ads → RD Station (segundo canal)
O sistema:
- ✅ Captura e normaliza o lead
- 🤖 Analisa com LLM (intenção, urgência, fit, sentimento, risco)
- 💬 Responde automaticamente (WhatsApp/Email) com linguagem adequada
- 📊 Sincroniza com RD Station
- 👤 Encaminha para humano quando necessário (handoff)
LeadFlowAI/ ├── src/ │ ├── LeadFlowAI.Domain/ # Entidades, Enums, Interfaces │ ├── LeadFlowAI.Application/ # DTOs, Commands, Queries, Handlers (MediatR) │ ├── LeadFlowAI.Infrastructure/ # EF Core, Repositórios, Integrações Externas │ ├── LeadFlowAI.WebAPI/ # Controllers, Middlewares, Auth JWT │ └── LeadFlowAI.Worker/ # Background Jobs (Hangfire) ├── frontend/ # React + TypeScript + TailwindCSS ├── database/ # Scripts SQL └── docker-compose.yml Backend:
- .NET 8 (C#)
- ASP.NET Core Web API
- Entity Framework Core
- PostgreSQL 15
- Hangfire (fila de jobs)
- Redis (cache)
- MediatR (CQRS)
Integrações:
- OpenAI GPT-4 (LLM)
- Twilio (WhatsApp)
- SendGrid (Email)
- RD Station Marketing
Frontend:
- React 18
- TypeScript
- TailwindCSS
- React Query
- React Router
Infraestrutura:
- Docker & Docker Compose
- Nginx (reverse proxy no frontend)
- .NET 8 SDK
- Node.js 20+
- Docker & Docker Compose
- PostgreSQL 15+ (ou usar via Docker)
# Copiar arquivo de exemplo cp .env.example .env # Editar .env com suas credenciais # Obrigatórias: # - OPENAI_API_KEY # - JWT_SECRET # Opcionais (para produção): # - TWILIO_* # - SENDGRID_API_KEY # - RDSTATION_*# Subir todos os serviços docker-compose up -d # Ver logs docker-compose logs -f # Acessar: # - API: http://localhost:5000 # - Frontend: http://localhost:3000 # - Hangfire Dashboard: http://localhost:5000/hangfire# Restaurar dependências dotnet restore # Aplicar migrations cd src/LeadFlowAI.WebAPI dotnet ef database update # Executar API dotnet run --project src/LeadFlowAI.WebAPI # Em outro terminal, executar Worker dotnet run --project src/LeadFlowAI.Workercd frontend # Instalar dependências npm install # Executar em modo desenvolvimento npm run dev # Build para produção npm run build# Via Docker docker exec -i leadflowai-postgres psql -U leadflowai -d leadflowai < database/init.sql # Via psql local psql -U leadflowai -d leadflowai -f database/init.sqlcd src/LeadFlowAI.Infrastructure # Criar nova migration dotnet ef migrations add NomeDaMigration --startup-project ../LeadFlowAI.WebAPI # Aplicar migrations dotnet ef database update --startup-project ../LeadFlowAI.WebAPIPOST /api/leads/ingest/webform
{ "name": "João Silva", "phone": "+5511999999999", "email": "joao@example.com", "company": "Empresa XYZ", "city": "São Paulo", "state": "SP", "message": "Gostaria de um orçamento para site institucional", "utmSource": "google", "utmCampaign": "institucional-2024", "sourceUrl": "https://exemplo.com/contato", "tenantSlug": "empresa-demo" }POST /api/leads/ingest/rdstation/webhook?tenantSlug=empresa-demo
{ "eventType": "CONVERSION", "payload": { "uuid": "abc123", "name": "Maria Santos", "email": "maria@example.com", "mobilePhone": "+5511988888888", "city": "Rio de Janeiro", "state": "RJ" } }GET /api/leads/search?query=joão&status=Qualified&page=1&pageSize=20
GET /api/leads/{id}
GET /api/leads/{id}/events
POST /api/leads/{id}/handoff
O agente recebe:
- Dados do lead (nome, telefone, mensagem, origem)
- Playbook do tenant (serviços, regiões, preço mínimo, tom de voz)
- FAQs
- Regras de compliance (LGPD, não pedir dados sensíveis)
{ "lead_score": 85, "intent": "orcamento", "urgency": "alta", "service_match": ["site", "sistema"], "key_details": ["Precisa de site institucional", "Orçamento aproximado de R$ 10k"], "missing_questions": ["Qual o prazo desejado?"], "risk_flags": [], "recommended_next_step": "responder", "reply_channel": "whatsapp", "reply_message": "Olá João! Obrigado pelo contato. Vou te enviar uma proposta personalizada para o site institucional. Qual seria o prazo ideal para você?", "handoff_reason": null }- Dados sensíveis detectados → Responder com aviso + handoff automático
- Score < 50 + intenção "carreira" → Resposta curta + fechar
- Urgência alta + fit alto → Responder + propor agendamento
A API usa JWT Bearer Token. Para obter token (implementar endpoint de login):
# Header Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Acesse http://localhost:3000
Funcionalidades:
- ✅ Lista de leads com filtros (status, origem, data)
- ✅ Detalhes do lead (dados, score, qualificação LLM)
- ✅ Timeline de eventos (auditoria completa)
- ✅ Botão "Assumir conversa" (handoff)
- 🔲 Configurações do tenant (WIP)
- 🔲 Dashboard de métricas (WIP)
RECEIVED → NORMALIZED → ENRICHED → QUALIFIED → RESPONDED → HANDOFF/CLOSED ↓ FAILED (com retry) - ✅ Criptografia em trânsito (HTTPS obrigatório em produção)
- ✅ Masking de PII em logs
- ✅ Idempotência de webhooks (evita duplicatas)
- ✅ Deduplicação por telefone normalizado (E.164)
- ✅ Auditoria completa (tabela
lead_events) - ✅ Consentimento no formulário (checkbox configurável)
Acesse http://localhost:5000/hangfire
- Visualizar jobs enfileirados
- Retry de jobs falhos
- Métricas de processamento
Logs são gravados em:
- Console (desenvolvimento)
- Arquivos
logs/leadflowai-YYYY-MM-DD.log
# Testes unitários dotnet test # Testes de integração dotnet test --filter Category=Integration# Build de imagens docker-compose build # Subir em produção docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d# Obrigatórias para produção: JWT_SECRET=<mínimo-32-caracteres> OPENAI_API_KEY=sk-... DB_PASSWORD=<senha-forte> # Recomendadas: TWILIO_ACCOUNT_SID=... TWILIO_AUTH_TOKEN=... SENDGRID_API_KEY=... RDSTATION_CLIENT_ID=... RDSTATION_CLIENT_SECRET=...- Swagger/OpenAPI - Documentação interativa da API
- Hangfire - Dashboard de jobs
- Fork o projeto
- Crie uma branch (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Este projeto é proprietário. Todos os direitos reservados.
Para dúvidas e suporte:
- Email: contato@leadflowai.com
- Documentação: https://docs.leadflowai.com
LeadFlowAI - Automatize a qualificação de leads com inteligência artificial 🚀