Mapa de Dependências¶
Visão completa de como cada componente do sistema se conecta. Use estes diagramas para entender o impacto de qualquer mudança.
Visão Geral do Sistema¶
graph TB
subgraph ENTRADA["🟢 Entrada de Leads"]
TF[Typeform<br>Funil Anti-Curioso]
WH[WhatsApp<br>Mensagem do lead]
end
subgraph N8N["⚙️ n8n — Orquestração"]
CT[Chamada Typeform<br><i>VPVYN9AzG8IGnKiR</i>]
AG[Agente de IA<br><i>8hdajgWAADbHorQF</i>]
TT[Tool Transferir<br><i>Gt60I1KPG4ReJSIe</i>]
FU[Fluxo Follow Ups<br><i>W1msnd1vZWkpFSDM</i>]
end
subgraph IA["🧠 Inteligência Artificial"]
CS4[Claude Sonnet 4<br><i>Principal</i>]
GPT5[GPT-5<br><i>Fallback</i>]
CS45[Claude Sonnet 4.5<br><i>Contingência</i>]
MINI[GPT-4o Mini<br><i>Resumos</i>]
WHISP[Whisper<br><i>Áudio</i>]
GPT4O[GPT-4o<br><i>Imagens</i>]
GEM[Gemini<br><i>Vídeo/Docs</i>]
end
subgraph DADOS["💾 Dados"]
SB[(Supabase<br>PostgreSQL)]
RD[(Redis<br>Fila)]
end
subgraph API["📡 APIs Externas"]
UA[UaZapi<br>WhatsApp API]
end
TF -->|webhook POST| CT
WH -->|via UaZapi| AG
CT -->|cria lead + 1ª msg| SB
CT -->|envia msg| UA
AG -->|lê/escreve| SB
AG -->|fila de msgs| RD
AG -->|gera resposta| CS4
AG -->|fallback| GPT5
AG -->|rate limit| CS45
AG -->|transcreve| WHISP
AG -->|analisa img| GPT4O
AG -->|analisa vid/doc| GEM
AG -->|envia resposta| UA
AG -->|tool transferir| TT
TT -->|resume conversa| MINI
TT -->|alerta Hunter| UA
TT -->|marca transferido| SB
FU -->|busca leads| SB
FU -->|envia follow-up| UA
FU -->|salva na memória| SB
style ENTRADA fill:#2E7D32,color:#fff
style N8N fill:#1565C0,color:#fff
style IA fill:#6A1B9A,color:#fff
style DADOS fill:#E65100,color:#fff
style API fill:#C8A24E,color:#1A1A1A
Dependências por Workflow¶
Agente de IA — o mais complexo¶
graph LR
subgraph TRIGGER["Trigger"]
W[Webhook POST<br>/harmonizapro]
end
subgraph SUPABASE["Supabase (5 tabelas)"]
T1[leads]
T2[clinicas_com_atendentes]
T3[protocolos]
T4[n8n_chat_histories]
T5[instancias_whatsapp]
end
subgraph REDIS["Redis"]
R1[Fila de mensagens]
end
subgraph MODELOS["Modelos IA"]
M1[Claude Sonnet 4]
M2[GPT-5]
M3[Claude Sonnet 4.5]
M4[Whisper]
M5[GPT-4o]
M6[Gemini]
end
subgraph TOOLS["Tools do Agente"]
TL1[buscar_lead]
TL2[buscar_clinica]
TL3[buscar_protocolo]
TL4[transferir]
end
subgraph SAIDA["Saída"]
UA[UaZapi /send/text]
HO[Tool Transferir<br>webhook]
end
W --> T1
W --> T2
W --> T3
W --> T5
W --> R1
T1 --> M1
M1 --> UA
M2 --> UA
M3 --> UA
M4 --> M1
M5 --> M1
M6 --> M1
TL1 --> T1
TL2 --> T2
TL3 --> T3
TL4 --> HO
M1 --> T4
style TRIGGER fill:#2E7D32,color:#fff
style SUPABASE fill:#E65100,color:#fff
style REDIS fill:#B71C1C,color:#fff
style MODELOS fill:#6A1B9A,color:#fff
style TOOLS fill:#1565C0,color:#fff
style SAIDA fill:#C8A24E,color:#1A1A1A
Chamada Typeform¶
graph LR
TF[Typeform] -->|POST| WH[Webhook<br>/typeform/hamoniza.pro]
WH --> ORG[Organizar dados]
ORG --> SB1[(instancias_whatsapp)]
ORG --> SB2[(leads)]
SB2 -->|novo?| CREATE[Criar lead]
SB2 -->|existe| EXIST[Lead existente]
CREATE --> BUDGET{Budget alto?}
BUDGET -->|sim| HAND[Handoff direto]
BUDGET -->|não| IA[IA gera 1ª msg]
EXIST --> IA2[IA com contexto]
IA --> UA[UaZapi /send/text]
IA2 --> UA
HAND --> UA
IA -->|salva| SB3[(leads)]
style TF fill:#2E7D32,color:#fff
style BUDGET fill:#C8A24E,color:#1A1A1A
Tool Transferir¶
graph LR
AG[Agente de IA<br>tool: transferir] -->|POST| WH[Webhook<br>/handoff-agenteia]
WH --> SB1[(leads<br>remotejid → clinica_id)]
WH --> FLAG[leads.transferido = true]
SB1 --> SB2[(clinicas_com_atendentes<br>→ hunter)]
SB2 --> SB3[(instancias_whatsapp<br>→ server_url)]
SB3 --> SB4[(n8n_chat_histories<br>→ histórico)]
SB4 -->|tem histórico| RESUMO[GPT-4o Mini<br>resumo 50 palavras]
SB4 -->|sem histórico| SIMPLES[Handoff simples]
RESUMO --> UA[UaZapi /send/text<br>→ Hunter]
SIMPLES --> UA
style AG fill:#1565C0,color:#fff
style RESUMO fill:#6A1B9A,color:#fff
style UA fill:#C8A24E,color:#1A1A1A
Fluxo Follow Ups¶
graph TB
CRON[Schedule<br>a cada 11 min] --> HC{Horário<br>comercial?}
HC -->|não| STOP[Para]
HC -->|sim| DADOS[Dados UaZapi]
DADOS --> FUP1[Rodada 1]
DADOS --> FUP2[Rodada 2]
DADOS --> FUP3[Rodada 3]
DADOS --> FUP4[Rodada 4]
FUP1 --> BUSCA1[Buscar leads<br>elegíveis]
BUSCA1 --> FILTRO1[Filtrar +<br>dedup]
FILTRO1 --> ENVIO1[Enviar msg]
ENVIO1 --> MARCA1[Marcar +<br>salvar memória]
FUP1 --> MERGE[Juntar todos]
FUP2 --> MERGE
FUP3 --> MERGE
FUP4 --> MERGE
MERGE --> SAVE[Salvar lista<br>de enviados]
style CRON fill:#2E7D32,color:#fff
style HC fill:#C8A24E,color:#1A1A1A
style STOP fill:#B71C1C,color:#fff
Matriz de Dependências¶
Referência rápida: se algo quebrar, saiba o que é afetado.
Se uma API cair...¶
| API fora do ar | Workflows afetados | Impacto | Severidade |
|---|---|---|---|
| UaZapi | Todos | Nenhuma mensagem é enviada/recebida | 🔴 Crítico |
| Supabase | Todos | Sem dados de leads, clínicas, memória | 🔴 Crítico |
| Redis | Agente de IA | Fila de mensagens para de funcionar, respostas duplicadas | 🟡 Alto |
| Anthropic (Claude) | Agente de IA | IA principal cai, fallback para GPT-5 | 🟡 Alto |
| OpenAI | Agente de IA, Chamada Typeform, Tool Transferir | GPT-5 fallback cai, Whisper para, resumos param | 🟡 Alto |
| Google (Gemini) | Agente de IA | Análise de vídeo e documentos para | 🟢 Médio |
| Typeform | Chamada Typeform | Novos leads não entram (mas existentes continuam) | 🟢 Médio |
Se uma tabela Supabase for comprometida...¶
| Tabela | Leitura por | Escrita por | Se cair |
|---|---|---|---|
leads |
Agente, Typeform, Transferir, Follow Ups | Typeform, Agente, Transferir | Nenhum workflow funciona |
clinicas_com_atendentes |
Agente, Typeform, Transferir | — (manual) | Agente não sabe de qual clínica é o lead |
protocolos |
Agente, Typeform | — (manual) | Agente perde personalização por clínica |
n8n_chat_histories |
Agente, Transferir | Agente, Follow Ups | IA perde memória, handoff sem resumo |
instancias_whatsapp |
Agente, Typeform, Transferir | — (manual) | Sem URL/token do WhatsApp |
Comunicação entre workflows¶
| De | Para | Método | Dado trafegado |
|---|---|---|---|
| Chamada Typeform | Agente de IA | Indireto (lead criado no Supabase) | clinica_id, instancia_id, dados do Typeform |
| Agente de IA | Tool Transferir | HTTP POST webhook | telefone, motivo |
| Tool Transferir | Agente de IA | Indireto (leads.transferido = true) |
Flag que para o agente |
| Fluxo Follow Ups | Agente de IA | Indireto (msg salva em n8n_chat_histories) |
Contexto de follow-up na memória |
Credenciais Compartilhadas¶
| Credential | Serviço | Usada em |
|---|---|---|
ferramentas@harmoniza.pro (Supabase) |
Supabase | Todos os 4 workflows |
ferramentas@harmoniza.pro (Anthropic) |
Claude API | Agente de IA, Chamada Typeform |
ferramentas@harmoniza.pro (OpenAI) |
OpenAI API | Agente de IA, Chamada Typeform, Tool Transferir |
ferramentas@harmoniza.pro (Google) |
Gemini API | Agente de IA |
ferramentas@harmoniza.pro (Redis) |
Redis | Agente de IA |
ferramentas@harmoniza.pro (Agente IA) (Postgres) |
PostgreSQL direto | Agente de IA (memória) |
Ponto único de falha
Todas as credenciais estão sob ferramentas@harmoniza.pro. Se essa conta for comprometida ou expirar, todos os workflows param. Considere separar credenciais por serviço ou ter backup.