Sumário Executivo
O SalesHelix é o AI Social Sales CRM da DNAi. O motor de canais é o Chatwoot (self-hosted, licença MIT), que agrega WhatsApp e Instagram DM num inbox unificado. Por cima do Chatwoot, o SalesHelix adiciona a camada que o concorrente genérico não tem: IA de vendas (NADIA/Claude) conduzindo qualificação, score de lead e playbooks de SDR, com handoff limpo para o operador humano.
A interface própria — Next.js — consome a API do Chatwoot e expõe o CRM, o Kanban de pipeline e a ficha do lead enriquecida.
O plano está organizado em 6 fases sequenciais. O MVP vendável (Fases 0–3) é atingível em 8–10 semanas com 1–2 devs. As fases seguintes adicionam diferencial competitivo e abrem o modelo multi-tenant.
Visão de Arquitetura
1.1 Diagrama de Componentes
┌─────────────────────────────────────────────────────────────────────┐
│ CANAIS DE ENTRADA │
│ │
│ [WhatsApp não-oficial] [WhatsApp Cloud API] [Instagram DM] │
│ QR Code / multi-device Meta Business API Graph API Meta │
│ │ │ │ │
│ ▼ │ │ │
│ [Evolution API] │ │ │
│ Ponte WABA↔Chatwoot │ │ │
│ │ │ │ │
└─────────┼──────────────────────────┼──────────────────────┼─────────┘
│ │ │
└──────────────┬───────────┘ │
▼ │
┌────────────────────────────────────────────────────────────────────┐
│ CHATWOOT (self-hosted, Docker) │
│ │
│ ┌─────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Rails app │ │ Sidekiq │ │ Action Cable │ │
│ │ (API REST + │ │ (jobs, filas, │ │ (WebSocket │ │
│ │ webhooks) │ │ retries) │ │ realtime) │ │
│ └────────┬────────┘ └──────────────────┘ └──────────────────┘ │
│ │ │
│ ┌────────▼────────┐ ┌──────────────────┐ │
│ │ PostgreSQL │ │ Redis │ │
│ │ (conversations, │ │ (cache, jobs, │ │
│ │ contacts, │ │ sessions) │ │
│ │ messages) │ └──────────────────┘ │
│ └─────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ AGENT BOT — webhook endpoint │ │
│ │ Chatwoot dispara POST pra cada msg recebida │ │
│ │ → URL do serviço NADIA configurada no painel │ │
│ └───────────────────────────┬────────────────────────────────┘ │
└──────────────────────────────┼──────────────────────────────────────┘
│ POST (mensagem + contexto)
▼
┌──────────────────────────────────────────────────────────────────┐
│ NADIA SERVICE (Node.js / Python) │
│ │
│ ┌────────────────┐ ┌─────────────────┐ ┌──────────────────┐ │
│ │ Webhook │ │ Claude API │ │ Handoff Engine │ │
│ │ receiver │ │ (Anthropic) │ │ (score ≥ X │ │
│ │ valida, │ │ qualificação + │ │ → assign SDR) │ │
│ │ formata, │ │ resposta + │ │ POST Chatwoot │ │
│ │ enriquece │ │ próxima ação │ │ /assign/:id │ │
│ └────────┬───────┘ └────────┬────────┘ └──────────────────┘ │
│ └───────────────────┘ │
│ │ │
│ ┌─────────────────▼──────────────────────────────────────┐ │
│ │ SalesHelix DB (PostgreSQL separado) │ │
│ │ leads, scores, playbook_state, pipeline_stage │ │
│ │ pgvector pra embeddings de histórico de conversa │ │
│ └─────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
│ POST resposta via API REST
▼
[Chatwoot] → [Canal original] → [Lead]
┌──────────────────────────────────────────────────────────────────┐
│ SALESHELIX APP (Next.js 15 + Prisma) │
│ │
│ Consome Chatwoot API REST (conversations, contacts, messages) │
│ Consome SalesHelix DB (scores, pipeline, playbooks) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌─────────────────────┐ │
│ │ Inbox view │ │ Kanban CRM │ │ Ficha do Lead │ │
│ │ (espelho │ │ pipeline │ │ score, histórico, │ │
│ │ Chatwoot) │ │ de vendas │ │ próxima ação IA │ │
│ └──────────────┘ └──────────────┘ └─────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
1.2 Fluxo de uma Mensagem — do Lead à Resposta
Lead manda "oi" no WhatsApp
│
▼
Evolution API (não-oficial) OU Cloud API (oficial)
│ converte pra formato Chatwoot
▼
Chatwoot cria/atualiza Conversation
│ dispara webhook Event: message_created
▼
NADIA Service recebe POST
│ lê histórico da conversa (via Chatwoot API)
│ lê ficha do lead no SalesHelix DB (score, estágio)
│ monta contexto + playbook ativo
▼
Claude API — responde, classifica intenção, atualiza score
│
├── Score < threshold handoff
│ │ POST /api/v1/accounts/{id}/conversations/{id}/messages
│ │ Chatwoot entrega a resposta no canal
│ └── Lead recebe a resposta da NADIA
│
└── Score ≥ threshold handoff
│ POST /api/v1/accounts/{id}/conversations/{id}/assignments
│ Chatwoot notifica SDR humano (app/notificação)
└── SDR assume com contexto completo: resumo, score, intenção
1.3 Ponto de Handoff IA → Humano
O handoff acontece quando qualquer uma das condições for verdadeira:
- → Score de lead calculado pela NADIA atinge o threshold configurado (ex: ≥ 70/100)
- → Lead faz pergunta explícita sobre preço ou pede proposta formal
- → Lead demonstra objeção complexa (detectada por classificador Claude)
- → Timeout: NADIA não consegue avançar qualificação em N turnos
O SDR recebe a conversa já com: resumo do lead, score, histórico resumido, intenção detectada e próxima ação recomendada — tudo calculado pela NADIA antes do handoff.
Fases de Implementação
Entregáveis
- Docker Compose: chatwoot, sidekiq, postgres, redis
- Domínio configurado com HTTPS (Nginx + Let's Encrypt ou Caddy)
- Painel admin Chatwoot acessível, conta super admin criada
- .env.example documentado no repositório
Dependências do Daniel
- Decisão do subdomínio onde o Chatwoot vai rodar
- Acesso SSH ou sudo na VPS Hetzner (portas 80/443)
- (Opcional) Certificado wildcard Cloudflare ou Cloudflare Tunnel
1A — WhatsApp não-oficial (validação)
- Evolution API rodando em Docker na VPS
- Inbox WhatsApp criado no Chatwoot via Evolution API
- QR Code escaneado, mensagens chegando no inbox
- Documentação de reconexão (QR expira)
1B — WhatsApp Cloud API (produção)
- App no Facebook Developers com produto WhatsApp
- Número verificado no WhatsApp Business Manager
- Webhook Cloud API → Chatwoot configurado
- 1 template aprovado pela Meta (ex: abertura de conversa)
1C — Instagram DM (Graph API)
- App Facebook Developers com Instagram Messaging
- Página Facebook conectada à conta Instagram Business
- Permissões instagram_manage_messages configuradas
- Inbox Instagram criado no Chatwoot, recebendo DMs
Dependências críticas
- Número dedicado pra testes (chip separado, não o principal)
- Conta Meta Business verificada com CNPJ
- App criado em developers.facebook.com
- App Review Instagram: submeter assim que o app existir (1–4 semanas)
Entregáveis
- Serviço NADIA (Node.js ou Python) em Docker com HTTPS
- Agent Bot configurado no Chatwoot → webhook NADIA
- Lógica de qualificação: detecta intenção e classifica
- Score baseado em regras (heurístico no início)
- Handoff automático: score ≥ threshold → atribui SDR
- SDR recebe: resumo NADIA + intenção + score
Estrutura do serviço
nadia-saleshelix/ ├── src/ │ ├── webhook/ # eventos Chatwoot │ ├── claude/ # Anthropic SDK │ ├── qualification/ # score + playbooks │ ├── handoff/ # atribuição de agente │ └── chatwoot/ # cliente API REST ├── prisma/ # schema SalesHelix DB └── docker-compose.yml
Dependências do Daniel
- API key Anthropic (já existe na operação atual)
- Definição dos playbooks iniciais de qualificação
- Threshold de handoff (score mínimo para chamar SDR)
Entregáveis
- Next.js 15 (App Router) + autenticação Better-Auth
- Tela Inbox — conversas ativas, filtros, badge de score
- Tela Kanban — pipeline drag-and-drop, estágios configuráveis
- Tela Ficha do Lead — score, intenção, próxima ação IA, notas SDR
- Tela Responder — chat integrado via API Chatwoot
- Prisma + PostgreSQL para dados do SalesHelix
Dependências do Daniel
- Aprovação do design/UX antes de implementar
- Decisão do domínio da interface (ex: app.saleshelix.dnai.global)
- Definição dos estágios de pipeline
Entregáveis
- Scoring com embeddings: histórico → pgvector + HNSW
- Playbooks configuráveis no painel por produto/segmento
- Automações: follow-up automático, reengajamento
- Dashboard de performance: taxa qualificação, tempo handoff
- Integração de templates aprovados Meta
Dependências
- Dados históricos de conversas para calibrar o score
- Definição de playbooks por segmento de produto
Entregáveis
- Row Level Security (RLS) no PostgreSQL por tenant
- Onboarding novo tenant em menos de 30 minutos
- Painel admin DNAi: gerenciar tenants, planos, uso
- White-label: logo, cores, domínio customizado por cliente
- Billing: integração Stripe pra assinatura mensal
Dependências
- Definição do modelo de preços e planos
- Conta Stripe configurada
- Decisão sobre white-label: Chatwoot visível ou interface própria completa?
O que Precisa do Daniel
| Item | Fase | Urgência | Observação |
|---|---|---|---|
| Decisão do subdomínio Chatwoot | Fase 0 | Alta | Define a URL base de tudo |
| Número WhatsApp dedicado pra testes | Fase 1A | Alta | Chip separado, número descartável. Nunca o principal. |
| Conta Meta Business verificada | Fase 1B | Alta | Verificação com CNPJ pode levar dias |
| App criado no Facebook Developers | Fase 1B | Alta | Daniel cria, dev configura dentro |
| Número comercial dedicado (Cloud API) | Fase 1B | Alta | Não pode estar em nenhum app WhatsApp comum |
| Template de mensagem aprovado pela Meta | Fase 1B | Média | Submeter logo — pode demorar até 7 dias |
| Conta Instagram Business + Página Facebook | Fase 1C | Média | Se já tem, só vincular |
| App Review Meta (instagram_manage_messages) | Fase 1C | Crítica | Pode levar 1–4 semanas. Submeter assim que o app existir. |
| Playbooks de qualificação definidos | Fase 2 | Alta | O que a NADIA pergunta, em que ordem, o que qualifica |
| Threshold de handoff (score mínimo) | Fase 2 | Média | Pode começar com regra simples e ajustar |
| Aprovação do design/UX da interface | Fase 3 | Alta | Não codar sem aprovação visual |
| Domínio da interface SalesHelix | Fase 3 | Média | Ex: app.saleshelix.dnai.global |
| Estágios do pipeline | Fase 3 | Média | Novo Lead / Qualificado / Proposta / Negociando / Fechado |
Custos e Pré-requisitos
Teto de ~$80: calculado para ~1200 conversas/mês com VPS atual. Acima de ~1500 conversas/mês, o custo sai da faixa e entra em $80–120.
4.1 Componente 1 — Infraestrutura
| Recurso | Spec | Custo |
|---|---|---|
| VPS atual (Hetzner) | Já existe na operação DNAi | $0 adicional |
| VPS dedicada CX32 | 4 vCPU AMD, 8 GB RAM, 80 GB NVMe | ~$17/mês (€16) |
| Cloudflare Tunnel | Já incluído no plano atual | $0 |
| Tráfego de saída Hetzner | Primeiros 20 TB incluídos | $0 para volume MVP |
4.2 Componente 2 — WhatsApp Cloud API (Meta)
| Tipo | Quem inicia | Janela | Custo |
|---|---|---|---|
| Service | Lead (usuário) | 24h a partir da última msg do usuário | Grátis |
| Utility | Empresa (notificações transacionais) | 24h | ~$0.01–0.02/conversa (Brasil) |
| Marketing (template) | Empresa (reengajamento) | Abre nova janela | ~$0.062/conversa (Brasil) |
| Authentication | Empresa (OTP) | 10 min | ~$0.04/conversa |
No MVP, o lead sempre inicia a conversa. 100% das conversas de qualificação são tipo service = $0. Custo de template só aparece pra reativar lead frio.
| Volume conversas/mês | Conversas service ($0) | Reengajamento (10%) | Custo WhatsApp |
|---|---|---|---|
| 100 conversas | 90 | 10 × $0,062 | ~$0,62 |
| 500 conversas | 450 | 50 × $0,062 | ~$3,10 |
| 2000 conversas | 1800 | 200 × $0,062 | ~$12,40 |
4.3 Componente 3 — Claude API (Anthropic)
| Modelo | Input | Output | Cache write | Cache read |
|---|---|---|---|---|
| Claude Haiku 3.5 | $1,00/MTok | $5,00/MTok | $1,25/MTok | $0,10/MTok |
| Claude Sonnet 4 | $3,00/MTok | $15,00/MTok | $3,75/MTok | $0,30/MTok |
Custo calculado por conversa completa (~10 turnos), com prompt caching ativo:
Haiku — input (2k tokens cacheados) : $0,10/MTok × 0,002 = $0,0002
Haiku — input (2k tokens histórico) : $1,00/MTok × 0,002 = $0,0020
Haiku — output (0,8k tokens) : $5,00/MTok × 0,0008 = $0,0040
Sonnet — handoff input (3k tokens) : $3,00/MTok × 0,003 = $0,0090
Sonnet — handoff output (0,5k tokens): $15,00/MTok × 0,0005 = $0,0075
──────────────
TOTAL ~$0,0427 por conversa
Arredondando com margem: ~$0,038–$0,05 por conversa completa com prompt caching ativo.
| Volume | Claude (sem caching) | Claude (com caching) |
|---|---|---|
| 100 conversas | ~$5 | ~$4 |
| 500 conversas | ~$25 | ~$19 |
| 2000 conversas | ~$100 | ~$76 |
4.4 Resumo por Cenário de Volume
| Cenário | Conversas/mês | WhatsApp API | Claude API | Infra VPS atual | Infra VPS CX32 | Total (VPS atual) | Total (VPS CX32) |
|---|---|---|---|---|---|---|---|
| MVP inicial | 100 | $0,62 | $4 | $0 | $17 | ~$4/mês | ~$21/mês |
| Crescimento | 500 | $3,10 | $19 | $0 | $17 | ~$24/mês | ~$41/mês |
| Escala | 2000 | $12,40 | $76 | $0 | $17 | ~$101/mês | ~$118/mês |
4.5 Como Segurar o Custo
| Fator de risco | Impacto | Como segurar |
|---|---|---|
| Chamar Sonnet no grosso das interações | Alto | Haiku para qualificação de rotina. Sonnet APENAS para resumo de handoff. |
| System prompt longo sem caching | Médio | Ativar prompt caching desde o dia 1. Economiza ~80% no custo do context fixo. |
| Sem rate limit por conversa | Médio | Máximo N chamadas Claude por conversa ativa (ex: 15 turnos → forçar handoff humano) |
| Reengajamento excessivo com templates | Baixo | Templates marketing a $0,062 só quando há estratégia real. Não usar como fallback. |
| Click-to-WhatsApp não aproveitado | Oportunidade | Usar Free Entry Point (72h) em anúncios Meta — evita pagar template na 1ª abordagem. |
4.6 Ferramentas Sem Custo Adicional
| Ferramenta | Custo | Observação |
|---|---|---|
| Chatwoot Community | $0 | Licença MIT, self-hosted |
| Evolution API | $0 | Open-source, self-hosted (fase de validação) |
| Cloudflare DNS + Tunnel | $0 | Plano Free cobre o uso do SalesHelix |
| PostgreSQL + Redis | $0 | Incluídos no Docker Compose na mesma VPS |
| Prisma ORM | $0 | Open-source |
Riscos e Mitigações
Risco 1 — Ban de número no WhatsApp não-oficial (Evolution API)
Probabilidade alta para números com comportamento de bot detectado pela Meta. Número banido permanentemente, conversas perdidas.
- Usar APENAS número de teste/descartável na Fase 1A. Nunca o número de negócio real.
- Migrar para Cloud API oficial (Fase 1B) assim que possível.
- Não enviar mensagens em massa ou comportamento atípico de bot.
Risco 2 — App Review da Meta demorar ou reprovar (Instagram DM)
Meta reprova apps sem política de privacidade clara, sem URL funcional, sem vídeo demonstrativo. Impacto: Instagram DM bloqueado, atraso de semanas.
- Submeter o review assim que o app for criado — não esperar o dev terminar.
- Preparar política de privacidade real, URL funcional, vídeo demonstrativo do fluxo.
- Plano B: começar sem Instagram DM, focar em WhatsApp (sem App Review no mesmo grau).
Risco 3 — Chatwoot updates quebrando integração
Probabilidade baixa no curto prazo, média no longo prazo. Features quebradas após update, downtime para correção.
- Versionar a imagem Docker do Chatwoot (nunca usar latest em produção).
- Testar updates em staging antes de aplicar em produção.
- API REST do Chatwoot é versionada (/api/v1/) — mudanças de UI não afetam integração.
Risco 4 — Custo de tokens escalar além do esperado
Probabilidade média se o volume crescer rápido sem controle.
- Usar Claude Haiku para a maior parte das interações de qualificação.
- Sonnet apenas para resumos de handoff e situações complexas.
- Implementar rate limiting por conversa (máximo N chamadas Claude).
- Monitorar custo semanal via dashboard Anthropic com alertas.
Risco 5 — Depender de Evolution API em produção
Alta probabilidade de problemas se usado em produção com volume real. Instabilidade, desconexões frequentes, risco de ban.
- Evolution API é para validação de fluxo apenas. Produção usa Cloud API oficial.
- O plano já prevê isso: Fase 1A (não-oficial, validação) → Fase 1B (oficial, produção).
Marco de MVP
- Receber mensagens de WhatsApp no inbox unificado
- Leads automaticamente qualificados pela NADIA com score visível
- Handoff com contexto completo quando o lead está quente
- Pipeline de vendas no Kanban com movimentação manual
- Ficha do lead com histórico e próxima ação recomendada
Cronograma com 1–2 devs
Fase 0 — Infra + Chatwoot
Semana 1 — Chatwoot rodando na VPS com HTTPS
Fase 1A — WhatsApp não-oficial
Semana 1–2 — Validação rápida do fluxo, zero burocracia
Fase 1B — Cloud API oficial
Semana 2–3 — WhatsApp oficial, número de negócio seguro
Fase 1C — Instagram DM
Semana 3–4 — Gargalo: App Review pode atrasar 1–4 semanas
Fase 2 — NADIA Agent Bot
Semana 5–6 — IA respondendo, qualificando e fazendo handoff
Fase 3 — Interface SalesHelix
Semana 7–10 — App Next.js com Inbox, Kanban e Ficha do Lead
O que NÃO entra no MVP
- × Scoring por embeddings (Fase 4)
- × Playbooks configuráveis no painel (Fase 4)
- × Multi-tenant e billing (Fase 5)
- × White-label (Fase 5)
Ações Imediatas — 5 itens para Daniel
Sem esses itens, o desenvolvimento trava antes de sair da Fase 1.
Subdomínio do Chatwoot
Definir onde o inbox vai rodar. Ex: inbox.saleshelix.dnai.global
Número WhatsApp Dedicado pra Testes
Um chip separado do número de negócio. Pode ser linha pré-paga. NUNCA o número principal.
Conta Meta Business Verificada + App no Facebook Developers
Conta Business com CNPJ verificado. App criado em developers.facebook.com.
Submissão do App Review Instagram
Submeter assim que o app existir — não esperar o dev. O prazo de revisão (1–4 semanas) corre em paralelo com o desenvolvimento.
Definição dos Playbooks de Qualificação
O que a NADIA pergunta, em que ordem, o que qualifica um lead como "quente" pra passar pro SDR. Pode ser uma conversa de 30 minutos com o dev.