Skip to content

🔥 MULTI-TENANT INBOX CLASSIFIER - Integração Completa ​

📋 Visão Geral ​

Sistema multi-tenant de classificação de leads com IA que integra com o Self-Improving AI System.

Benefícios:

  • ✅ Cada cliente tem ICP/Persona próprio
  • ✅ Versionamento de personas (histórico + A/B test)
  • ✅ Whitelist de conhecidos por tenant
  • ✅ Classificação personalizada por IA
  • ✅ Tracking de conversões e ROI
  • ✅ Auto-melhoria baseada em feedback

🏗️ Arquitetura ​

┌─────────────────────────────────────────────────────────────┐
│                  MULTI-TENANT ARCHITECTURE                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Tenant A (Socialfy)          Tenant B (FitPro)            │
│  ├── Persona V1               ├── Persona V2                │
│  ├── Whitelist (10)           ├── Whitelist (5)             │
│  ├── 500 leads/mês            ├── 200 leads/mês             │
│  └── Score médio: 65          └── Score médio: 72           │
│                                                             │
│                       ↓                                     │
│                                                             │
│              INBOX CLASSIFIER (Python)                      │
│              ├── Scrape Instagram                           │
│              ├── Check Whitelist                            │
│              ├── Classify with AI (personalizada)           │
│              └── Save to Supabase                           │
│                                                             │
│                       ↓                                     │
│                                                             │
│              SUPABASE (Multi-Tenant DB)                     │
│              ├── tenants                                    │
│              ├── tenant_personas (versionado)               │
│              ├── tenant_known_contacts                      │
│              └── classified_leads                           │
│                                                             │
│                       ↓                                     │
│                                                             │
│         SELF-IMPROVING SYSTEM (Camadas 1-4)                 │
│         ├── QA Analyst (avalia classificações)              │
│         ├── Reflection Loop (otimiza personas)              │
│         ├── Prompt Improver (atualiza prompts IA)           │
│         └── A/B Test (compara versões)                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

📊 Schema do Banco (Migration 005) ​

Tabelas Criadas: ​

  1. tenants - Clientes do SaaS

    • id, name, slug, status, plan_tier
    • Limits: max_leads_per_month, max_auto_responses_per_day
  2. tenant_personas - ICP versionado

    • tenant_id, version, is_active
    • Business context: business_type, target_audience, product_service
    • ICP: ideal_niches, min_followers, positive_keywords
    • Versionamento: histórico completo de mudanças
  3. tenant_known_contacts - Whitelist

    • tenant_id, username, contact_type
    • auto_classify_as, skip_ai_analysis
  4. classified_leads - Leads classificados

    • tenant_id, persona_version (qual versão foi usada)
    • profile_data (JSONB): bio, followers, posts
    • ai_analysis (JSONB): reasoning, keywords, signals
    • classification: LEAD_HOT, LEAD_WARM, LEAD_COLD, PESSOAL, SPAM
    • icp_score: 0-100

Views Criadas: ​

  • vw_tenant_performance: Performance por tenant (30 dias)
  • vw_lead_classification_stats: Estatísticas de classificação

Functions RPC: ​

  • get_active_persona(tenant_id): Busca persona ativa
  • is_known_contact(tenant_id, platform, username): Checa whitelist
  • save_classified_lead(...): Salva lead classificado

🔧 Como Usar ​

1. Executar Migration ​

bash
# No Supabase SQL Editor
cat migrations/005_multi_tenant_inbox_classifier.sql | pbcopy
# Cole no SQL Editor e execute

2. Configurar Tenant ​

sql
-- Criar novo tenant
INSERT INTO tenants (name, slug, business_type, status, plan_tier)
VALUES (
  'Sua Empresa',
  'sua-empresa',
  'Agência de Marketing',
  'active',
  'pro'
);

-- Criar persona V1
INSERT INTO tenant_personas (
  tenant_id,
  version,
  is_active,
  business_type,
  target_audience,
  product_service,
  value_proposition,
  ideal_niches,
  positive_keywords,
  negative_keywords,
  min_followers,
  max_followers,
  brand_voice,
  message_style
) VALUES (
  (SELECT id FROM tenants WHERE slug = 'sua-empresa'),
  1,
  true,
  'Agência de Automação',
  'Donos de agência que precisam de leads',
  'Automação de prospecção com IA',
  'Gere 10-30 leads/mês no automático',
  ARRAY['marketing', 'vendas', 'agências'],
  ARRAY['agência', 'leads', 'automação', 'clientes'],
  ARRAY['personal', 'fitness', 'afiliado'],
  1000,
  50000,
  'profissional',
  'direto ao ponto'
);

-- Adicionar contatos conhecidos (whitelist)
INSERT INTO tenant_known_contacts (
  tenant_id,
  platform,
  username,
  contact_type,
  auto_classify_as,
  skip_ai_analysis
) VALUES
  ((SELECT id FROM tenants WHERE slug = 'sua-empresa'), 'instagram', 'seuamigo', 'amigo', 'PESSOAL', true),
  ((SELECT id FROM tenants WHERE slug = 'sua-empresa'), 'instagram', 'seusocio', 'socio', 'PESSOAL', true);

3. Usar Python Classifier ​

python
from inbox_classifier_multi_tenant import InboxClassifierMultiTenant

# Inicializar
classifier = InboxClassifierMultiTenant(tenant_slug="sua-empresa")
await classifier.initialize()

# Classificar mensagem
classification, lead_id = await classifier.classify_inbox_message(
    username="joao_agencia",
    message="Adorei seu conteúdo sobre automação!"
)

print(f"Classificação: {classification.classification}")
print(f"Score: {classification.icp_score}/100")
print(f"Resposta sugerida: {classification.suggested_response}")

4. Workflow n8n (Automação) ​

Trigger: Nova mensagem no inbox Instagram (via webhook GoHighLevel)

Webhook
  ↓
[Check Whitelist]
  ├─ Conhecido? → Responder como pessoal
  └─ Desconhecido → Continuar
       ↓
[Scrape Profile] (Instagram API ou Gemini)
       ↓
[Classify with AI] (Python function)
       ↓
[Save to Supabase]
       ↓
[Decision Based on Score]
  ├─ LEAD_HOT (80-100) → Auto-respond + CRM + Notificar
  ├─ LEAD_WARM (50-79) → Auto-respond + Nurturing
  ├─ LEAD_COLD (20-49) → Nurturing educativo
  └─ SPAM (0-19) → Archive

🔄 Versionamento de Personas ​

Por que versionar? ​

Quando um cliente muda o ICP:

  • V1: "Quero personal trainers"
  • V2: "Agora quero donos de academia"

Benefícios:

  • ✅ Histórico preservado (pode re-classificar leads antigos)
  • ✅ Comparar conversão V1 vs V2
  • ✅ Rollback se V2 performar pior
  • ✅ A/B test de personas

Como criar nova versão: ​

sql
-- Obter última versão
SELECT MAX(version) FROM tenant_personas WHERE tenant_id = 'xxx';

-- Criar V2 (desativa V1 automaticamente via trigger)
INSERT INTO tenant_personas (
  tenant_id,
  version,
  is_active,
  -- ... campos atualizados ...
) VALUES (
  'xxx',
  2,  -- Nova versão
  true,
  -- ... novos valores de ICP ...
);

Comparar performance V1 vs V2: ​

sql
SELECT
  persona_version,
  COUNT(*) as total_leads,
  AVG(icp_score) as avg_score,
  SUM(CASE WHEN classification = 'LEAD_HOT' THEN 1 ELSE 0 END) as hot_leads,
  SUM(CASE WHEN converted_to_opportunity THEN 1 ELSE 0 END) as conversions
FROM classified_leads
WHERE tenant_id = 'xxx'
GROUP BY persona_version;

📈 Integração com Self-Improving ​

O Multi-Tenant Inbox Classifier se integra com o Self-Improving System:

1. QA Analyst avalia classificações ​

sql
-- Conversas do inbox viram agent_conversations
INSERT INTO agent_conversations (
  agent_version_id,
  contact_id,
  channel,
  outcome,
  mensagens_total,
  qa_analyzed
)
SELECT
  (SELECT id FROM agent_versions WHERE agent_name = 'Inbox Classifier'),
  cl.username,
  cl.platform,
  CASE
    WHEN cl.classification = 'LEAD_HOT' THEN 'scheduled'
    WHEN cl.classification = 'LEAD_WARM' THEN 'warmed'
    ELSE 'in_progress'
  END,
  1,
  false  -- Será analisado pelo QA Analyst
FROM classified_leads cl
WHERE cl.tenant_id = 'xxx';

2. Reflection Loop otimiza persona ​

O Reflection Loop pode:

  • Analisar leads classificados
  • Identificar falsos positivos/negativos
  • Sugerir ajustes na persona (keywords, ranges)
  • Auto-aplicar melhorias

3. Prompt Improver atualiza IA ​

Se score médio cai:

  • Gera nova versão da persona
  • Atualiza keywords
  • Testa em batch de leads antigos
  • Compara performance

📊 Dashboard (Próximo passo) ​

Métricas por Tenant: ​

  • Total de leads (30d)
  • Taxa de HOT/WARM/COLD
  • Score ICP médio
  • Taxa de conversão
  • Custo por lead
  • ROI

Por Persona: ​

  • Performance V1 vs V2 vs V3
  • Keywords mais efetivas
  • Score breakdown
  • Sugestões de otimização

Ações: ​

  • Editar persona
  • Criar nova versão
  • Rollback para versão anterior
  • A/B test automático

🚀 Próximos Passos ​

  1. Executar migration 005 ✅
  2. Testar Python classifier
  3. Criar workflow n8n
  4. Integrar com GoHighLevel inbox
  5. Criar dashboard de configuração
  6. Implementar auto-resposta
  7. Conectar com Self-Improving System

💡 Exemplo Real: Socialfy ​

Persona V1 (Janeiro): ​

json
{
  "target_audience": "Donos de agência de marketing",
  "ideal_niches": ["marketing", "vendas", "tech"],
  "positive_keywords": ["agência", "clientes", "leads"],
  "min_followers": 1000,
  "max_followers": 50000
}

Resultados:

  • 500 leads classificados
  • 120 LEAD_HOT
  • Taxa conversão: 18%
  • Score médio: 65

Persona V2 (Março): ​

json
{
  "target_audience": "Donos de agência + consultores",
  "ideal_niches": ["marketing", "vendas", "tech", "consultoria"],
  "positive_keywords": ["agência", "consultoria", "clientes", "leads", "ROI"],
  "min_followers": 500,  // Reduziu
  "max_followers": 100000  // Aumentou
}

Resultados:

  • 800 leads classificados (↑60%)
  • 200 LEAD_HOT (↑67%)
  • Taxa conversão: 22% (↑4pp)
  • Score médio: 72 (↑7)

Decisão: Manter V2, desativar V1


📝 Notas Importantes ​

  1. Privacidade: Dados de cada tenant são isolados (tenant_id em todas as queries)
  2. Rate Limiting: Instagram scraping tem limites (2-3 seg entre requests)
  3. Custos: Gemini Flash é barato (~$0.0001 por classificação)
  4. Qualidade: Score ICP calibrado para cada negócio
  5. Escalabilidade: Suporta 1000+ tenants sem mudança de código

Autor: AI Factory V4 - MOTTIVME Data: 31/12/2025 Versão: 1.0.0

AI Factory V3 - Mottivme Sales