@lionchat/mcp-server 0.2.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/instructions.md +184 -0
- package/dist/docs/prompts/customer_health.json +13 -0
- package/dist/docs/prompts/inactive_contacts.json +23 -0
- package/dist/docs/prompts/productivity_report.json +13 -0
- package/dist/docs/prompts/quality_audit.json +28 -0
- package/dist/docs/prompts/stuck_leads.json +18 -0
- package/dist/docs/prompts/team_load_balance.json +18 -0
- package/dist/docs/prompts/weekly_recap.json +7 -0
- package/dist/docs/prompts/whatsapp_template_usage.json +18 -0
- package/dist/docs/resources/api-conventions.md +257 -0
- package/dist/docs/resources/best-practices.md +166 -0
- package/dist/docs/resources/conversation-flows.md +208 -0
- package/dist/docs/resources/data-model.md +378 -0
- package/dist/docs/resources/glossary.md +242 -0
- package/dist/docs/resources/kanban-deep-dive.md +295 -0
- package/dist/docs/resources/reports-guide.md +219 -0
- package/dist/docs/resources/troubleshooting.md +248 -0
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +1 -0
- package/dist/instructions.js +26 -0
- package/dist/instructions.js.map +1 -0
- package/dist/prompts.d.ts +2 -0
- package/dist/prompts.js +70 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +10 -0
- package/dist/resources.js +90 -0
- package/dist/resources.js.map +1 -0
- package/endpoints.json +12444 -6482
- package/package.json +4 -3
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# Kanban — Guia Profundo
|
|
2
|
+
|
|
3
|
+
Tudo sobre o módulo Kanban/CRM do LionChat: funis, etapas, cards, valor, automações, integrações com conversação.
|
|
4
|
+
|
|
5
|
+
## Estrutura
|
|
6
|
+
|
|
7
|
+
### Funnel (Funil)
|
|
8
|
+
Container de etapas. Conta pode ter vários funis (ex: "Vendas", "Pós-venda", "Renovação").
|
|
9
|
+
|
|
10
|
+
| Campo | Descrição |
|
|
11
|
+
|---|---|
|
|
12
|
+
| `id` | Identificador |
|
|
13
|
+
| `name` | Nome do funil (ex: "Vendas B2B") |
|
|
14
|
+
| `description` | Descrição livre |
|
|
15
|
+
| `stages` | jsonb com etapas (ver abaixo) |
|
|
16
|
+
| `archived` | Boolean — funis arquivados não aparecem na UI ativa |
|
|
17
|
+
| `active` | Boolean — controla se aceita movimentação |
|
|
18
|
+
| `settings` | jsonb — config customizada (ex: cores, automações) |
|
|
19
|
+
|
|
20
|
+
### Stages (Etapas) — dentro de `funnel.stages`
|
|
21
|
+
|
|
22
|
+
Stages NÃO são tabela separada. São armazenadas como jsonb dentro do Funnel:
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"novo_lead": {
|
|
27
|
+
"name": "Novo Lead",
|
|
28
|
+
"color": "#3B82F6",
|
|
29
|
+
"position": 1,
|
|
30
|
+
"description": "Lead ainda não qualificado"
|
|
31
|
+
},
|
|
32
|
+
"qualificado": {
|
|
33
|
+
"name": "Qualificado",
|
|
34
|
+
"color": "#10B981",
|
|
35
|
+
"position": 2,
|
|
36
|
+
"description": "Lead com interesse confirmado"
|
|
37
|
+
},
|
|
38
|
+
"ganho": {
|
|
39
|
+
"name": "Ganho",
|
|
40
|
+
"color": "#22C55E",
|
|
41
|
+
"position": 99
|
|
42
|
+
},
|
|
43
|
+
"perdido": {
|
|
44
|
+
"name": "Perdido",
|
|
45
|
+
"color": "#EF4444",
|
|
46
|
+
"position": 100
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### KanbanItem (Card)
|
|
52
|
+
Um card individual dentro de uma etapa.
|
|
53
|
+
|
|
54
|
+
| Campo | Descrição |
|
|
55
|
+
|---|---|
|
|
56
|
+
| `id` | Identificador |
|
|
57
|
+
| `funnel_id` | Funil ao qual pertence |
|
|
58
|
+
| `funnel_stage` | Chave da etapa (ex: `"novo_lead"`) |
|
|
59
|
+
| `position` | Ordem dentro da etapa |
|
|
60
|
+
| `stage_entered_at` | Quando entrou na etapa atual (pra métrica de tempo) |
|
|
61
|
+
| `conversation_display_id` | Conversa principal vinculada |
|
|
62
|
+
| `linked_conversations` | jsonb array `[{display_id: 123}, {display_id: 456}]` — múltiplas conversas |
|
|
63
|
+
| `item_details` | jsonb (ver abaixo) |
|
|
64
|
+
| `custom_attributes` | jsonb — campos custom (igual contatos) |
|
|
65
|
+
| `assigned_agents` | jsonb array de agentes responsáveis |
|
|
66
|
+
| `activities` | jsonb array — log de atividades |
|
|
67
|
+
| `checklist` | jsonb array de tarefas dentro do card |
|
|
68
|
+
| `timer_started_at`, `timer_duration` | Timer interno do card |
|
|
69
|
+
|
|
70
|
+
### item_details (detalhes do card)
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"title": "Cliente XYZ - Plano Pro",
|
|
75
|
+
"value": 5000.0,
|
|
76
|
+
"priority": "high",
|
|
77
|
+
"description": "Cliente interessado em upgrade",
|
|
78
|
+
"notes": [
|
|
79
|
+
{"text": "Ligou pedindo proposta", "created_at": "2026-05-15T10:00:00Z"}
|
|
80
|
+
],
|
|
81
|
+
"offers": [
|
|
82
|
+
{"id": 12, "title": "Pro 12 meses", "value": 4800}
|
|
83
|
+
],
|
|
84
|
+
"custom_attributes": {
|
|
85
|
+
"origem_lead": "Facebook Ads"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**`value`** é onde fica o valor monetário do negócio (usado em pipelines).
|
|
91
|
+
|
|
92
|
+
### assigned_agents
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
[
|
|
96
|
+
{
|
|
97
|
+
"id": 5,
|
|
98
|
+
"name": "Maria Souza",
|
|
99
|
+
"email": "maria@empresa.com",
|
|
100
|
+
"avatar_url": "https://...",
|
|
101
|
+
"assigned_at": "2026-05-14T09:00:00Z",
|
|
102
|
+
"assigned_by": 1,
|
|
103
|
+
"source": "manual"
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Múltiplos agentes podem ter o mesmo card. `source` pode ser `manual`, `automation`, `inherited_from_conversation`.
|
|
109
|
+
|
|
110
|
+
### linked_conversations — IMPORTANTE
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
[{"display_id": 123}, {"display_id": 456}]
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**NUNCA gravar inteiros direto** — sempre objetos com `{display_id: ...}`. Inteiros diretos causam TypeError no `as_json`.
|
|
117
|
+
|
|
118
|
+
## Posição (ordering)
|
|
119
|
+
|
|
120
|
+
Cada KanbanItem tem `position` (integer). Cards ordenados ASC dentro da etapa.
|
|
121
|
+
|
|
122
|
+
Reordenação:
|
|
123
|
+
- API endpoint: `POST /api/v2/kanban/items/reorder`
|
|
124
|
+
- Recebe array com nova ordem `[{id: 5, position: 1}, {id: 8, position: 2}]`
|
|
125
|
+
- Recalcula `position` em todas as etapas afetadas
|
|
126
|
+
|
|
127
|
+
Mover entre etapas:
|
|
128
|
+
- API endpoint: `POST /api/v2/kanban/items/{id}/move`
|
|
129
|
+
- Body: `{funnel_stage: "qualificado", position: 1}`
|
|
130
|
+
- Atualiza `funnel_stage`, `stage_entered_at`, e `position`
|
|
131
|
+
|
|
132
|
+
## Atividades (activities)
|
|
133
|
+
|
|
134
|
+
Log automático de eventos do card:
|
|
135
|
+
|
|
136
|
+
```json
|
|
137
|
+
[
|
|
138
|
+
{
|
|
139
|
+
"type": "stage_changed",
|
|
140
|
+
"from": "novo_lead",
|
|
141
|
+
"to": "qualificado",
|
|
142
|
+
"by_user_id": 1,
|
|
143
|
+
"at": "2026-05-15T10:00:00Z"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"type": "agent_assigned",
|
|
147
|
+
"agent_id": 5,
|
|
148
|
+
"by_user_id": 1,
|
|
149
|
+
"at": "2026-05-15T10:01:00Z"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"type": "note_added",
|
|
153
|
+
"note_id": 42,
|
|
154
|
+
"by_user_id": 5,
|
|
155
|
+
"at": "2026-05-15T10:05:00Z"
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Tipos comuns: `created`, `stage_changed`, `agent_assigned`, `agent_removed`, `note_added`, `value_changed`, `priority_changed`, `archived`.
|
|
161
|
+
|
|
162
|
+
## Checklist (tarefas dentro do card)
|
|
163
|
+
|
|
164
|
+
```json
|
|
165
|
+
[
|
|
166
|
+
{
|
|
167
|
+
"id": "abc-123",
|
|
168
|
+
"title": "Enviar proposta por email",
|
|
169
|
+
"checked": true,
|
|
170
|
+
"completed_at": "2026-05-15T10:00:00Z",
|
|
171
|
+
"completed_by": 5
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"id": "abc-124",
|
|
175
|
+
"title": "Agendar follow-up",
|
|
176
|
+
"checked": false
|
|
177
|
+
}
|
|
178
|
+
]
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Útil pra workflows internos. Não confundir com `tasks` (que é módulo separado de tarefas globais).
|
|
182
|
+
|
|
183
|
+
## Pipeline (visão por valor)
|
|
184
|
+
|
|
185
|
+
Pipeline = soma de `item_details.value` agrupado por etapa.
|
|
186
|
+
|
|
187
|
+
Exemplo:
|
|
188
|
+
```
|
|
189
|
+
Funil "Vendas"
|
|
190
|
+
├── Novo Lead: 12 cards | R$ 47.000
|
|
191
|
+
├── Qualificado: 8 cards | R$ 38.000
|
|
192
|
+
├── Negociação: 3 cards | R$ 22.000
|
|
193
|
+
├── Ganho: 5 cards | R$ 28.000 (fechados no mês)
|
|
194
|
+
└── Perdido: 2 cards | R$ 4.000
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Endpoint: `GET /api/v2/kanban/items/counts` retorna contagem + soma por etapa.
|
|
198
|
+
|
|
199
|
+
## Funil arquivado vs ativo
|
|
200
|
+
|
|
201
|
+
- `archived = true`: funil escondido da UI principal. Cards ainda existem mas não aparecem nas listas
|
|
202
|
+
- `active = false`: bloqueia movimentação (modo "somente leitura")
|
|
203
|
+
|
|
204
|
+
Use cases:
|
|
205
|
+
- Arquivar funis antigos no fim do ano
|
|
206
|
+
- Pausar funil em manutenção sem deletar cards
|
|
207
|
+
|
|
208
|
+
## Integração com Conversation
|
|
209
|
+
|
|
210
|
+
### Quando uma conversa vincula a um card
|
|
211
|
+
- Manual via UI ("vincular ao Kanban")
|
|
212
|
+
- Automação via `automation_rule.actions` com action `add_to_kanban`
|
|
213
|
+
- API call em `POST /api/v2/kanban/items` com `conversation_display_id`
|
|
214
|
+
|
|
215
|
+
### Como o card "sabe" sobre o cliente
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
KanbanItem
|
|
219
|
+
└─ conversation_display_id → Conversation
|
|
220
|
+
└─ contact → Contact (nome, telefone, email)
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
NÃO existe `contact_id` direto no KanbanItem. Sempre via conversation_display_id.
|
|
224
|
+
|
|
225
|
+
### Múltiplas conversas no mesmo card
|
|
226
|
+
|
|
227
|
+
`linked_conversations` permite agrupar várias conversas (ex: cliente que falou em WhatsApp e Email):
|
|
228
|
+
|
|
229
|
+
```json
|
|
230
|
+
[
|
|
231
|
+
{"display_id": 100},
|
|
232
|
+
{"display_id": 101},
|
|
233
|
+
{"display_id": 105}
|
|
234
|
+
]
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
A `conversation_display_id` (singular) ainda é a "principal" — mas todas as `linked_conversations` aparecem na sidebar do card.
|
|
238
|
+
|
|
239
|
+
## Automações relacionadas a Kanban
|
|
240
|
+
|
|
241
|
+
AutomationRule com evento `kanban_item_created`, `kanban_item_moved`, `kanban_item_stage_changed`:
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
{
|
|
245
|
+
"event_name": "kanban_item_moved",
|
|
246
|
+
"conditions": [
|
|
247
|
+
{"attribute_key": "funnel_stage", "operator": "equal_to", "value": "ganho"}
|
|
248
|
+
],
|
|
249
|
+
"actions": [
|
|
250
|
+
{"action_name": "send_message", "params": ["Parabéns pelo fechamento!"]},
|
|
251
|
+
{"action_name": "add_label", "params": ["cliente-pagante"]}
|
|
252
|
+
]
|
|
253
|
+
}
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## Bulk operations
|
|
257
|
+
|
|
258
|
+
- `POST /api/v2/kanban/items/bulk_actions` — operações em massa (mover, atribuir, arquivar)
|
|
259
|
+
- `POST /api/v2/kanban/items/import` — importar CSV de cards
|
|
260
|
+
- `GET /api/v2/kanban/items/export` — exportar funil completo
|
|
261
|
+
|
|
262
|
+
## Custom attributes em cards
|
|
263
|
+
|
|
264
|
+
Igual contatos, cards têm `custom_attributes` (jsonb):
|
|
265
|
+
|
|
266
|
+
```json
|
|
267
|
+
{
|
|
268
|
+
"origem_lead": "Google Ads",
|
|
269
|
+
"campanha": "Black Friday 2026",
|
|
270
|
+
"score": 85,
|
|
271
|
+
"produto_interesse": "Plano Pro"
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Configurar atributos no Super Admin ou via API `/api/v1/custom_attribute_definitions`.
|
|
276
|
+
|
|
277
|
+
## Métricas úteis (via GET /api/v2/kanban/items)
|
|
278
|
+
|
|
279
|
+
- Tempo médio em cada etapa: `stage_entered_at` vs agora
|
|
280
|
+
- Taxa de conversão: cards em "ganho" vs total criado no período
|
|
281
|
+
- Pipeline ativo: soma de `value` em etapas != ganho/perdido
|
|
282
|
+
- Velocity: cards movidos pra "ganho" por mês
|
|
283
|
+
|
|
284
|
+
## Diagnóstico: "Card sumiu do funil"
|
|
285
|
+
|
|
286
|
+
1. Está arquivado? `archived = true` em algum nível?
|
|
287
|
+
2. Etapa atual existe ainda? (etapa removida do funil deixa card "órfão")
|
|
288
|
+
3. `position` está faltando? (cards sem position vão pro fim)
|
|
289
|
+
4. Está em outro funil? (mover entre funis muda `funnel_id`)
|
|
290
|
+
|
|
291
|
+
## Diagnóstico: "Valor do pipeline errado"
|
|
292
|
+
|
|
293
|
+
1. Algum card sem `item_details.value`?
|
|
294
|
+
2. Cards arquivados estão sendo contados?
|
|
295
|
+
3. Etapas "ganho"/"perdido" estão incluídas no cálculo?
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Guia de Relatórios e Métricas
|
|
2
|
+
|
|
3
|
+
Como interpretar cada um dos endpoints de relatório (`lionchat_reports_*`) e métricas correlatas. Use sempre que o usuário pedir métricas, KPIs, dashboards ou comparativos.
|
|
4
|
+
|
|
5
|
+
## ⚠️ Unidades de tempo
|
|
6
|
+
|
|
7
|
+
**TODOS os tempos médios são retornados em SEGUNDOS.** Sempre converta antes de exibir:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
245 segundos → "4 min 5 seg" ou "4:05"
|
|
11
|
+
3600 segundos → "1 hora"
|
|
12
|
+
86400 segundos → "24 horas" ou "1 dia"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Endpoints disponíveis (19 total)
|
|
16
|
+
|
|
17
|
+
### 1. `lionchat_reports_summary` — Resumo geral
|
|
18
|
+
**Use quando o usuário pedir:** "como tá o desempenho?", "resumo da semana", "visão geral"
|
|
19
|
+
|
|
20
|
+
**Retorna:**
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"conversations_count": 142,
|
|
24
|
+
"incoming_messages_count": 1250,
|
|
25
|
+
"outgoing_messages_count": 980,
|
|
26
|
+
"resolutions_count": 98,
|
|
27
|
+
"avg_first_response_time": 245, // segundos
|
|
28
|
+
"avg_resolution_time": 7200, // segundos
|
|
29
|
+
"previous": { ...mesma estrutura para comparativo... }
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Parâmetros principais:**
|
|
34
|
+
- `type`: `account` (padrão), `agent`, `inbox`, `label`, `team`
|
|
35
|
+
- `since` / `until`: Unix timestamp (segundos) — período
|
|
36
|
+
- `business_hours`: `true` excluí horários fora do expediente
|
|
37
|
+
|
|
38
|
+
**Exemplo de uso:**
|
|
39
|
+
```
|
|
40
|
+
since = 7 dias atrás
|
|
41
|
+
until = agora
|
|
42
|
+
type = account
|
|
43
|
+
→ retorna resumo dos últimos 7 dias da conta toda
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 2. `lionchat_reports_list` — Por agente
|
|
47
|
+
**Use quando:** "produtividade por atendente", "ranking de agentes"
|
|
48
|
+
|
|
49
|
+
Retorna array de métricas, uma por agente. Cada item:
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"id": 6,
|
|
53
|
+
"name": "Elvis",
|
|
54
|
+
"conversations_count": 23,
|
|
55
|
+
"avg_first_response_time": 180,
|
|
56
|
+
"avg_resolution_time": 5400,
|
|
57
|
+
"csat_score_average": 4.3,
|
|
58
|
+
"online_at_total": 28800 // segundos online no período
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### 3. `lionchat_reports_list_1` — Por time
|
|
63
|
+
**Use quando:** "comparar times", "como está o time Premium vs Standard"
|
|
64
|
+
|
|
65
|
+
Mesma estrutura por team_id.
|
|
66
|
+
|
|
67
|
+
### 4. `lionchat_reports_list_2` — Por inbox
|
|
68
|
+
**Use quando:** "qual canal está com mais demanda", "comparar WhatsApp vs Email"
|
|
69
|
+
|
|
70
|
+
Mesma estrutura por inbox_id.
|
|
71
|
+
|
|
72
|
+
### 5. `lionchat_reports_list_3` — Por label
|
|
73
|
+
**Use quando:** "quantas conversas urgentes", "comparativo por label"
|
|
74
|
+
|
|
75
|
+
Mesma estrutura por label.
|
|
76
|
+
|
|
77
|
+
### 6. `lionchat_reports_list_4` — Por canal
|
|
78
|
+
**Use quando:** "WhatsApp vs Email vs Webchat"
|
|
79
|
+
|
|
80
|
+
Agrupa por `channel_type`.
|
|
81
|
+
|
|
82
|
+
### 7. `lionchat_reports_list_5` — Relatórios detalhados
|
|
83
|
+
**Use quando:** "dia a dia da última semana", "evolução temporal"
|
|
84
|
+
|
|
85
|
+
Retorna timeseries (data + valor) para um metric específico:
|
|
86
|
+
- `metric`: `conversations_count`, `incoming_messages_count`, `outgoing_messages_count`, `resolutions_count`, `avg_first_response_time`, `avg_resolution_time`, `reply_time`, `resolutions_count`
|
|
87
|
+
- `group_by`: `day`, `week`, `month`, `year`
|
|
88
|
+
- `since`/`until`: período
|
|
89
|
+
|
|
90
|
+
### 8. `lionchat_reports_list_6` — Resumo do Bot
|
|
91
|
+
**Use quando:** "como tá o bot resolvendo", "% de handoff pra humano"
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"bot_resolutions_count": 45,
|
|
96
|
+
"bot_handoffs_count": 12,
|
|
97
|
+
"bot_resolution_rate": 0.79
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 9. `lionchat_reports_list_7` — Conversation Traffic (tráfego)
|
|
102
|
+
**Use quando:** "horário de pico", "quando tem mais demanda"
|
|
103
|
+
|
|
104
|
+
Retorna heatmap por hora do dia ou dia da semana:
|
|
105
|
+
```json
|
|
106
|
+
[
|
|
107
|
+
{ "hour": 9, "conversations_count": 18 },
|
|
108
|
+
{ "hour": 10, "conversations_count": 25 },
|
|
109
|
+
...
|
|
110
|
+
]
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 10. `lionchat_reports_list_8` — Agente em tempo real
|
|
114
|
+
**Use quando:** "quem tá online agora", "carga atual"
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
[
|
|
118
|
+
{ "id": 6, "name": "Elvis", "status": "online", "open_count": 5, "unattended_count": 2 }
|
|
119
|
+
]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 11-15. CSAT
|
|
123
|
+
- `lionchat_csat_metrics`: agregação (média, distribuição)
|
|
124
|
+
- `lionchat_csat_list`: respostas individuais
|
|
125
|
+
- `lionchat_csat_download`: CSV pra download
|
|
126
|
+
|
|
127
|
+
### 16-18. SLA
|
|
128
|
+
- `lionchat_sla_metrics`: hits / breaches por período
|
|
129
|
+
- `lionchat_sla_list`: SLAs aplicadas a conversas
|
|
130
|
+
- `lionchat_sla_download`: CSV
|
|
131
|
+
|
|
132
|
+
### 19. `lionchat_reports_list_9` — Aggregated agent overview
|
|
133
|
+
**Use quando:** combinação de tudo: produtividade + CSAT + SLA por agente
|
|
134
|
+
|
|
135
|
+
## Padrões de interpretação
|
|
136
|
+
|
|
137
|
+
### Comparando períodos
|
|
138
|
+
Quando passa `since/until`, a maioria dos endpoints retorna `previous` com o período anterior de mesmo tamanho:
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
Esta semana: 142 conversas
|
|
142
|
+
Semana anterior: 120 conversas
|
|
143
|
+
→ Crescimento de 18%
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Dica:** sempre apresente comparativos pra dar contexto.
|
|
147
|
+
|
|
148
|
+
### Business hours
|
|
149
|
+
- Sem `business_hours: true`: tempos médios incluem madrugada/feriado (puxa pra cima)
|
|
150
|
+
- Com `business_hours: true`: só conta período de atendimento configurado (mais preciso pra SLA)
|
|
151
|
+
|
|
152
|
+
**Use business_hours: true** quando o usuário perguntar de "produtividade real" ou comparar com SLA.
|
|
153
|
+
|
|
154
|
+
### CSAT
|
|
155
|
+
- Score: 1-5 estrelas
|
|
156
|
+
- Médias típicas: 4.0+ é bom, 3.5-4.0 é OK, abaixo de 3.5 é alerta
|
|
157
|
+
- `csat_response_rate`: % de conversas resolvidas que ganharam resposta CSAT (taxa baixa = pouco feedback)
|
|
158
|
+
|
|
159
|
+
### SLA
|
|
160
|
+
- `breach_count` alto = problema sério, agentes não cumprindo prazos
|
|
161
|
+
- Sempre olhar `hit_rate` (hits / (hits + breaches)) — meta 95%+
|
|
162
|
+
|
|
163
|
+
## Workflows comuns
|
|
164
|
+
|
|
165
|
+
### "Relatório semanal completo"
|
|
166
|
+
```
|
|
167
|
+
1. reports_summary com since=7d, type=account → visão geral
|
|
168
|
+
2. reports_list (por agente) → ranking
|
|
169
|
+
3. reports_list_3 (por label) → tipos de demanda
|
|
170
|
+
4. csat_metrics → satisfação
|
|
171
|
+
5. sla_metrics → cumprimento
|
|
172
|
+
6. Compilar resumo em markdown
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### "Quem tá com gargalo"
|
|
176
|
+
```
|
|
177
|
+
1. reports_list_8 (real-time) → quem tá com muita conversa aberta
|
|
178
|
+
2. reports_list (por agente, últimos 7d) → quem tá com avg_first_response alto
|
|
179
|
+
3. Cruzar: agente sobrecarregado E com tempo médio alto
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### "Mês a mês evolução"
|
|
183
|
+
```
|
|
184
|
+
reports_list_5 com group_by=month, metric=conversations_count, since=12 meses atrás
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Pegadinhas comuns
|
|
188
|
+
|
|
189
|
+
### ⚠️ Comparar agente "online_at_total"
|
|
190
|
+
Tempo online inclui breaks, almoço, etc. Pra produtividade real, prefira:
|
|
191
|
+
- `conversations_count / online_at_total` = conversas por hora online
|
|
192
|
+
|
|
193
|
+
### ⚠️ Avg time pode ser enganador
|
|
194
|
+
Mediana é mais representativa que média (1 conversa que durou 5 dias puxa tudo).
|
|
195
|
+
**Mas o LionChat hoje só retorna média.** Reporte com ressalva: "Tempo MÉDIO de X — pode ter outliers."
|
|
196
|
+
|
|
197
|
+
### ⚠️ Reports não pegam conversas em tempo real
|
|
198
|
+
A maioria dos endpoints é eventually consistent (cache 5min). Pra info real-time use `conversations_meta`.
|
|
199
|
+
|
|
200
|
+
### ⚠️ Comparativos de período
|
|
201
|
+
`previous` tem o MESMO tamanho do período atual. Se since-until = 7d, previous = 7d antes.
|
|
202
|
+
NÃO compare manualmente "esse mês vs mês passado" — passe `since/until` com mês inteiro e use o `previous` retornado.
|
|
203
|
+
|
|
204
|
+
## Quando o usuário pede algo MUITO específico que não existe num endpoint
|
|
205
|
+
|
|
206
|
+
Se a pergunta requer cálculos custom (ex: "conversas por agente que duraram mais de X minutos"):
|
|
207
|
+
1. Liste as conversations com filtros
|
|
208
|
+
2. Filtre no client-side
|
|
209
|
+
3. Agrege e apresente
|
|
210
|
+
|
|
211
|
+
Mas avise: "essa métrica não existe pronta — vou compor a partir de dados crus"
|
|
212
|
+
|
|
213
|
+
## Custos de chamadas (importante!)
|
|
214
|
+
|
|
215
|
+
Endpoints de relatório podem retornar **MUITOS** dados:
|
|
216
|
+
- `reports_list_5` com `group_by=day, since=1 ano` → 365 datapoints
|
|
217
|
+
- `csat_list` sem filtro → milhares
|
|
218
|
+
|
|
219
|
+
**Sempre limite período** quando o usuário não foi específico. Se pediu "esta semana", use 7d. Se pediu "vamos ver tudo", confirme antes (ano inteiro pode ser muito).
|