Sistema de Score — Hermes Insights
Fonte: Documento oficial do canal #chatwoot (2026-06-29)
Status: Sistema atual em produção
Como é Medida uma Reunião Boa vs Ruim
O sistema usa 5 dimensões combinadas em um score geral de 0 a 10.
As 5 Dimensões
| Dimensão | Peso | O que mede |
| ---------- | ------ | ------------ |
| Tempo de Resposta | 10% | Quanto tempo o agente demorou para responder o cliente |
| Comunicação | 20% | Qualidade do texto: vocabulário positivo vs negativo, tamanho médio das mensagens |
| Playbook (adesão ao roteiro) | 20% | Se o agente seguiu as etapas corretas do playbook comercial |
| Potencial Comercial | 20% | Se mencionou palavras-chave de conversão: contratar, plano, proposta, orçamento |
| Gestão de Risco | 5% | Presença de objeções pesadas: "cancelar", "desistir", "não quero", "nunca" |
| Score | Cor | Significado |
| ------- | ----- | ------------- |
| 7.0 – 10 | 🟢 Verde | Reunião boa — seguiu o playbook, respondeu rápido, converteu |
| 6.0 – 6.9 | 🟡 Amarelo | Reunião razoável — alguns pontos de melhoria |
| 5.0 – 5.9 | 🔴 Vermelho | Reunião fraca — objeções não tratadas, sem proposta, sem next step |
⏱️ Atualização em Tempo Real
Arquitetura
`
Navegador do usuário
└─ fetch('/api/tempo_resposta')
└─ fetch('/api/waiting')
│
▼ HTTPS (porta 443)
Nginx (VPS) — insights.rochasalesseguros.com.br
└─ Proxy reverso / SSL termination
│ proxypass http://127.0.0.1:9087/
▼
chatwoot_waiting_api.py (Python Flask)
Porta 9087 (systemd)
└─ Query SQL direto no banco Chatwoot
│
▼
root-postgres-1 (chatwoot_production)
└─ Conversas, mensagens
`
Ciclo de atualização
`javascript
// Arquivo: tempo_resposta.html
const REFRESH_MS = 30000; // 30 segundos
async function load() {
const r = await fetch('/api/response_time');
const data = await r.json();
render(data);
}
load(); // Primeira carga
setInterval(load, REFRESH_MS); // Auto-refresh a cada 30s
`
A API por trás
Ambas as APIs (/api/response_time e /api/waiting) são servidas pelo mesmo chatwoot_waiting_api.py na porta 9087:
`sql
-- /api/waiting — clientes sem resposta
SELECT id, contact_name, inbox_name, created_at
FROM conversations
WHERE first_reply_created_at IS NULL
AND status = 'open'
AND created_at >= hoje
-- /api/response_time — tempo por agente
SELECT c.inbox_id,
AVG(first_reply_created_at - c.created_at) as avg_response_time
FROM conversations c
GROUP BY c.inbox_id
`
⚠️ Limitações do Score
> O score atual é baseado em palavras-chave e heurísticas — não é IA generativa.
- - ✅ Detecta "proposta", "contratar", "preço" → +potencial comercial
- - ✅ Detecta "não quero", "cancelar" → -risco
- - ❌ Não entende contexto, tom, ou intenção real
- - ❌ Uma conversa com score alto pode não ter fechado nada
- - ❌ Uma conversa com score baixo pode ter um cliente muito frio
- - Roda a cada 15 minutos via cron
- - Usa heurísticas regex para calcular scores das 7 etapas comerciais
- - Alimenta os relatórios individuais gerados pelo Gemini
Os 16 relatórios individuais são gerados pelo Gemini (IA real) — esses são muito mais precisos pois analisam o contexto completo da conversa.
Relação com o Score Engine 7P
O score de 5 dimensões (documento acima) é o que aparece no frontend (tempo_resposta.html).
O Score Engine 7P (score_engine.py) é um sistema paralelo que:
São sistemas complementares, não concorrentes. O frontend mostra o score rápido, o backend faz a análise profunda.
Doc integrado: 2026-06-29 — fonte: canal #chatwoot