RelatoriosRS — MEMORY
> Tudo que o Ultron precisa lembrar para trabalhar neste projeto.
Banco de Dados
Insights DB (Supabase self-hosted Docker — VPS)
- - Container:
deploy-vps-db-1 - - Database:
postgres - - Schema:
insights - - Tabelas:
conversations(4.115 rows),messages(63.230 rows),agents(13 rows) - - Container:
root-postgres-1 - - Database:
chatwoot_production - - Total conversas: 4.116
- - Total mensagens (não privadas): ~75.553
- - Synca TODAS as 4.116 conversas do Chatwoot →
insights.conversations - - Wipe + resync completo (sem duplicatas)
- - Batch 50 rows, stdin pipe, tab delimiter
- - Uso:
python3 /root/hermes-insights/sync_full_clean.py - - Sincroniza usuários do Chatwoot →
insights.agents - - Insere agentes novos, atualiza nomesmudados
- - Uso:
python3 /tmp/sync_agents.py - - Re-linka mensagens existentes aos UUIDs corretos das conversas
- - Útil após resync de conversas (UUIDs mudam)
- - Uso:
python3 /tmp/relink_messages.py - - Problema:
psql -Atusa|— nomes com|ou\nquebravam split - - Solução:
psql -At -F "\t"(tab) - - Problema: 200 rows = 1 transação. Se 1 falhar, todas revertem
- - Solução: batch de 50 rows + transação independente por batch
- - Problema:
sync_v7passavaNULLliteral em vez do ID do agente - - Solução:
{agent_cw_id}em vez deNULL - - Problema: 1.973 conversas sem agente ficavam de fora
- - Solução:
sync_full_clean.pysem filtro de assignee_id - - Problema: Resync de conversas gera novos UUIDs, mensagens ficavam órfãs
- - Solução:
relink_messages.py— UPDATE viachatwoot_conversation_id - - Gemini API:
AQ.Ab8RN6LXAz6ZtMvbdEAaSvn_xyHlKfr03-BPzF2ohBbV_d_Gvg - - Modelo:
gemini-2.5-flash(generativelanguage.googleapis.com) - - Endpoint:
https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent - - 📋 Principais Tópicos
- - 😣 Dor do Cliente
- - 💡 Oportunidades
- - 🛡️ Objeções
- - ✅ Pontos Fortes
- - ⚠️ Pontos de Melhoria
- - 📌 Próximos Passos
- - 💬 Trechos Importantes
Chatwoot DB (mesmo VPS)
Scripts Operacionais
Sync de Conversas — OFICIAL
`
/root/hermes-insights/sync_full_clean.py
`
Sync de Agentes
`
/tmp/sync_agents.py
`
Re-link Mensagens
`
/tmp/relink_messages.py
`
Schema — Tabelas
insights.conversations
| Coluna | Tipo | Descrição | |
| -------- | ------ | ----------- | |
| id | UUID | PK | |
| chatwoot_id | INTEGER | UNIQUE | |
| chatwoot_account_id | INTEGER | Sempre 1 | |
| chatwoot_inbox_id | INTEGER | Inbox | |
| status | TEXT | 'open' ou 'resolved' | |
| contact_name | TEXT | Nome do contato | |
| contact_phone | TEXT | Telefone | |
| contact_email | TEXT | ||
| message_count | INTEGER | Total de mensagens | |
| first_response_at | TIMESTAMP | Primeira resposta do agente | |
| created_at | TIMESTAMP | Criação da conversa | |
| last_activity_at | TIMESTAMP | Última atividade | |
| assignee_id | UUID | FK → insights.agents.id | |
| assignee_chatwoot_id | INTEGER | Pode ser NULL | |
| labels | TEXT | Labels | |
| inbox_name | TEXT | Nome do inbox | |
| Coluna | Tipo | ||
| -------- | ------ | ||
| id | UUID | ||
| chatwoot_id | INTEGER | ||
| name | TEXT | ||
| TEXT | |||
| Coluna | Tipo | Descrição | |
| -------- | ------ | ----------- | |
| id | SERIAL | PK | |
| chatwoot_id | INTEGER | UNIQUE | |
| chatwoot_conversation_id | INTEGER | ID da conversa no Chatwoot | |
| conversation_id | UUID | FK → insights.conversations.id | |
| sender_type | TEXT | 'agent' ou 'contact' | |
| sender_id | BIGINT | ID do remetente | |
| content | TEXT | Texto | |
| message_type | TEXT | 'incoming', 'outgoing', 'activity' | |
| created_at | TIMESTAMP | ||
| chatwoot_id | Nome | Conversas | |
| ------------- | ------ | ------- | ----------- |
| 1 | Anderson Ferreira Menezes | andersonmenez@gmail.com | 78 |
| 2 | Davi Freire | davi.freire@rochasalesseguros.com.br | 0 |
| 4 | Michael Rocha | michael.rocha@rochasalesseguros.com.br | 0 |
| 5 | Pietra Maniezzo | pietra.maniezzo@rochasalesseguros.com.br | 1 |
| 6 | Rafael William | rafael.william@rochasalesseguros.com.br | 0 |
| 7 | Raiany Silva | raiany.silva@rochasalesseguros.com.br | 0 |
| 9 | Vinicius Sales | vinicius.sales@rochasalesseguros.com.br | 106 |
| 10 | Rayca Soares | rayca.soares@rochasalesseguros.com.br | 192 |
| 11 | Maria Giulha | maria.giulha@rochasalesseguros.com.br | 1.675 |
| 12 | Raissa | raissa.silva@rochasalesseguros.com.br | 0 |
| 16 | Nayara | nayara@rochasales.com.br | 84 |
| 17 | Victória Vicenssotto | victoria@rochasales.com.br | 7 |
| Agente | chatwoot_id | Conversas | |
| -------- | ------------- | ----------- | |
| (sem agente) | NULL | 2.051 | |
| Maria Giulha | 11 | 1.675 | |
| Rayca Soares | 10 | 192 | |
| Vinicius Sales | 9 | 106 | |
| Nayara | 16 | 84 | |
| Anderson Ferreira Menezes | 1 | 78 | |
| Victória Vicenssotto | 17 | 7 | |
| Pietra Maniezzo | 5 | 1 | |
| Agente | Mensagens | ||
| -------- | ----------- | ||
| (sem agente) | 35.853 | ||
| Maria Giulha | 21.464 | ||
| Vinicius Sales | 5.016 | ||
| Rayca Soares | 743 | ||
| Nayara | 94 | ||
| Pietra Maniezzo | 32 | ||
| Victória Vicenssotto | 28 |
Total: 63.230 mensagens em 3.349 conversas
Bugs Encontrados e Soluções
Bug 1: | como delimiter quebrava em nomes
Bug 2: Batch INSERT com rollback em cascata
Bug 3: agent_cw_id era NULL no INSERT
Bug 4: Sync filtrava só conversas com agente
Bug 5: Mensagens com UUIDs velhos após resync
API Keys
Formato do Relatório (Modelo Roberto Teixeira/ROMALU)
Estrutura:
Pendências
1. [x] Gemini API key — ✅ funcionando (gemini-2.5-flash)
2. [ ] score_engine.py — scoring algorítmico
3. [ ] Tabela insights.commercial_reports (nova)
4. [ ] generate_commercial_report.py — IA generativa
5. [ ] Popular insights.scores para todas 4.115 conversas
6. [ ] Testar e integrar com frontend
Atualizado: 2026-06-26