@lionchat/mcp-server 1.8.1 → 1.10.0
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 +30 -2
- package/dist/docs/resources/api-conventions.md +14 -4
- package/dist/docs/resources/best-practices.md +82 -10
- package/dist/docs/resources/conversation-flows.md +73 -12
- package/dist/docs/resources/data-model.md +12 -4
- package/dist/docs/resources/flowbuilder-design-guide.md +68 -14
- package/dist/docs/resources/glossary.md +22 -8
- package/dist/docs/resources/kanban-deep-dive.md +35 -3
- package/dist/docs/resources/reports-guide.md +117 -16
- package/dist/tools.js +51 -9
- package/dist/tools.js.map +1 -1
- package/endpoints.json +333 -120
- package/package.json +1 -1
|
@@ -121,9 +121,31 @@ Um card individual dentro de uma etapa.
|
|
|
121
121
|
| `custom_attributes` | jsonb — campos custom (igual contatos) |
|
|
122
122
|
| `assigned_agents` | jsonb array de agentes responsáveis |
|
|
123
123
|
| `activities` | jsonb array — log de atividades |
|
|
124
|
-
| `checklist` | jsonb array de tarefas
|
|
124
|
+
| `checklist` | **O que fica guardado:** jsonb array de tarefas do card (item: `text`/`completed`/`position` + `group_id`/`group_name` opcionais para agrupar). **O que a API devolve é OUTRA coisa** — ver o aviso logo abaixo |
|
|
125
125
|
| `timer_started_at`, `timer_duration` | Timer interno do card |
|
|
126
126
|
|
|
127
|
+
> **ATENÇÃO — na maioria das respostas o `checklist` NÃO é a lista de tarefas, e sim um resumo com
|
|
128
|
+
> os números:** `{ total_count, completed_count, groups: [{ group_id, group_name, total_count,
|
|
129
|
+
> completed_count }] }`. Não existe nenhum `text` ali. Procurar a tarefa nesse campo faz a IA
|
|
130
|
+
> concluir "esse card não tem checklist" num card que tem 12 tarefas.
|
|
131
|
+
>
|
|
132
|
+
> O formato **muda por ferramenta** — não é o mesmo em todas:
|
|
133
|
+
>
|
|
134
|
+
> | Ferramenta | `checklist` | `attachments` | `item_details.notes` / `offers` / `custom_attributes` | `activities` / `funnel` |
|
|
135
|
+
> |---|---|---|---|---|
|
|
136
|
+
> | `kanban_items_list` | **array completo** | `{ total_count }` | completos | ausentes |
|
|
137
|
+
> | `kanban_items_show` | **resumo** | `{ total_count }` | completos | presentes |
|
|
138
|
+
> | `kanban_items_filter` / `_search` | **resumo** | `{ total_count }` | `notes` vira `{ total_count }`; `offers`/`custom_attributes` **removidos** | ausentes |
|
|
139
|
+
> | card embutido em `conversations_show` | **resumo** | — | — | — |
|
|
140
|
+
>
|
|
141
|
+
> - Para ler as tarefas de verdade em QUALQUER caso: **`lionchat_kanban_items_kanban_checklist_list`**
|
|
142
|
+
> (`GET .../kanban_items/{id}/get_checklist`) → `{ item_id, checklist: [ ...itens completos... ],
|
|
143
|
+
> checklist_count }`.
|
|
144
|
+
> - No resumo, `groups` só conta o que está agrupado: tarefa **avulsa** (sem `group_id`) entra no
|
|
145
|
+
> `total_count`/`completed_count` gerais mas **não aparece** em `groups`. Somar os grupos ≠ total.
|
|
146
|
+
> - O card embutido em `conversations_list`/`conversations_filter` **não traz `checklist` nenhum** —
|
|
147
|
+
> nem resumo. Só `conversations_show` traz o resumo.
|
|
148
|
+
|
|
127
149
|
### item_details (detalhes do card)
|
|
128
150
|
|
|
129
151
|
```json
|
|
@@ -326,8 +348,18 @@ qualquer agente no card (`assigned_agents`), não só ao responsável da convers
|
|
|
326
348
|
- `conversations_list` / `conversations_search` retornam SÓ conversas de caixas acessíveis (mais as
|
|
327
349
|
liberadas pela ponte de card atribuído).
|
|
328
350
|
- `conversations_show` / `conversations_messages_*` de conversa inacessível → **404**.
|
|
329
|
-
- Buscar card por ID
|
|
330
|
-
|
|
351
|
+
- Buscar card por ID de caixa inacessível → **404** (não revela sequer que o card existe).
|
|
352
|
+
- Ação em massa de CARD (`kanban_bulk_create` = mover, `kanban_bulk_create_1` = atribuir agente,
|
|
353
|
+
`kanban_bulk_create_2` = definir prioridade) em que NENHUM dos `item_ids` é acessível → **404**
|
|
354
|
+
`{ "error": "Nenhum item valido encontrado" }`. Se só PARTE for inacessível, a ação roda nos
|
|
355
|
+
acessíveis e ignora o resto em silêncio.
|
|
356
|
+
- `kanban_items_export` **não dá 404** — ele filtra: exporta só os cards das caixas que o agente vê
|
|
357
|
+
(pode voltar vazio). Em nenhum dos casos a resposta vaza card de caixa sem acesso.
|
|
358
|
+
|
|
359
|
+
> **Não confunda:** apesar do nome, **`kanban_bulk_bulk_actions` NÃO é ação em massa de card do
|
|
360
|
+
> Kanban** — ela bate em `POST /accounts/{id}/bulk_actions`, que é a ação em massa de **conversas e
|
|
361
|
+
> contatos** (`type: Conversation` ou `Contact`). Card do Kanban tem as **três** ferramentas
|
|
362
|
+
> listadas acima, todas com `item_ids: [...]`, e nenhuma delas aceita etiqueta.
|
|
331
363
|
|
|
332
364
|
**Pro MCP:** se uma conversa/card "some" da listagem ou dá 404 pra um agente que jura que existe,
|
|
333
365
|
provavelmente é acesso por caixa — explique que ele só vê as caixas das quais participa, e que o
|
|
@@ -21,17 +21,45 @@ Quando o usuário disser "o relatório está errado / não bate", quase sempre
|
|
|
21
21
|
CRIADAS no período; resolutions_count = eventos de resolução OCORRIDOS no período (a conversa pode
|
|
22
22
|
ter sido criada antes). Um atendente pode "resolver mais do que recebeu" — correto, não é bug.
|
|
23
23
|
2. **"Resolvidas" conta EVENTOS, não conversas.** Resolver → reabrir → resolver = 2. Pode passar do
|
|
24
|
-
total de conversas.
|
|
24
|
+
total de conversas. **NUNCA divida `resolutions_count` por `conversations_count` para apresentar
|
|
25
|
+
"taxa de resolução".** São universos diferentes (evento ocorrido na janela ÷ conversa nascida na
|
|
26
|
+
janela) e o resultado passa de 100%: medido em 7 dias, 678%, 325%, 207%, 140% em quatro contas
|
|
27
|
+
reais. Esse cartão foi REMOVIDO do produto em 29/07/2026 justamente por isso — o painel hoje
|
|
28
|
+
mostra "Resoluções no período" em contagem. Se o usuário pedir taxa, explique que não existe e
|
|
29
|
+
entregue os dois números separados.
|
|
25
30
|
3. **Recorte por ATENDENTE só enxerga conversas ATRIBUÍDAS.** Conversa sem responsável (auto-atribuição
|
|
26
31
|
desligada, disparo em massa) não aparece em NENHUM atendente — a soma dos atendentes pode ser uma
|
|
27
32
|
fração minúscula do total da conta (caso real: 202 de 4001). Sempre diga quantas estão sem atendente.
|
|
33
|
+
**Desde 29/07/2026 esse balde é visível:** o resumo por agente (`lionchat_reports_list`) devolve
|
|
34
|
+
também uma linha com `id: null` = "Sem atendente", e a planilha de agentes (`lionchat_reports_list_7`,
|
|
35
|
+
CSV) traz a linha **"Sem atendente"** no FIM da lista. Ela **não é um atendente** — nunca inclua no
|
|
36
|
+
ranking nem cruze o `id: null` com `lionchat_agents_list`. Antes disso o balde era descartado do CSV:
|
|
37
|
+
na conta 19 ficavam de fora 4.222 conversas e 580 resoluções.
|
|
28
38
|
4. **A contagem de conversas por atendente usa o responsável ATUAL** — reatribuir conversa antiga move
|
|
29
39
|
o histórico de um atendente pro outro. Já resoluções/tempos usam quem era o dono NA HORA do evento.
|
|
30
40
|
Os dois cards podem divergir legitimamente em conta que reatribui.
|
|
31
41
|
5. **timezone_offset NÃO altera totais** de summary — só o agrupamento dos pontos da série temporal.
|
|
32
42
|
Diferenças de ~1% entre relatório e lista filtrada são borda de janela/fuso, não defeito.
|
|
33
|
-
6. **since/until são unix SEGUNDOS**
|
|
34
|
-
|
|
43
|
+
6. **since/until são unix SEGUNDOS** na família `reports_*`, no CSAT e no SLA. Data por extenso
|
|
44
|
+
(`"2026-07-01"`) é lida como epoch: o `"2026"` vira 01/01/1970 e a janela some. Na conta 19 havia
|
|
45
|
+
4.396 conversas no período e a resposta veio ZERO, com HTTP 200.
|
|
46
|
+
**Desde 29/07/2026 a maioria dos relatórios RECUSA o formato errado** com HTTP **400** e a mensagem
|
|
47
|
+
"since e until devem ser timestamp Unix em segundos (ex.: 1751328000), não data por extenso".
|
|
48
|
+
Se receber esse 400, converta a data e repita — não é permissão, não é instabilidade, não é plano.
|
|
49
|
+
- **Recusa com 400 (erro visível):** `reports_summary`, `reports_list` (agente), `_1` (time),
|
|
50
|
+
`_2` (caixa), `_3` (etiqueta), `_4` (canal), `_5` (série temporal), `_6` (bot), `_7`–`_10`
|
|
51
|
+
(CSVs), `_11` (lista de conversas), `_12`, `_13` (tráfego), `_14` (bot detalhado) — mais as
|
|
52
|
+
rotas de matriz caixa×etiqueta, distribuição de primeira resposta e contagem de mensagens
|
|
53
|
+
enviadas. A guarda é um `before_action` sem restrição de ação nos dois controladores, então
|
|
54
|
+
vale para toda a família. Nos CSVs (`_7`–`_10` e `_12`) as DUAS pontas são obrigatórias, em
|
|
55
|
+
segundos — faltando uma, também é 400.
|
|
56
|
+
- **AINDA quebra em SILÊNCIO (HTTP 200 com número errado):** `csat_metrics`, `csat_list`,
|
|
57
|
+
`csat_download`, `sla_metrics`, `sla_list`, `sla_download`. Nesses seis, confira você mesmo
|
|
58
|
+
que está mandando segundos — não existe erro para te avisar.
|
|
59
|
+
- **Funil de jornada e Origem dos Leads usam OUTRO formato:** ali o período é **ISO 8601**
|
|
60
|
+
(`2026-07-01T00:00:00-03:00`), não Unix. Também não têm guarda: mandar segundos ali é o erro
|
|
61
|
+
equivalente, e volta o padrão (30 dias) rotulado como o período pedido.
|
|
62
|
+
- Tempo real (`_16`/`_17`) fica de fora da conversa: não aceita período nenhum.
|
|
35
63
|
7. **Mande SEMPRE as DUAS pontas do período.** Mandar só `since` (ou só `until`) fazia o filtro de
|
|
36
64
|
data ser ignorado por inteiro, em silêncio: vinham os números da vida toda rotulados como do
|
|
37
65
|
período pedido. Corrigido em 2026-07-25 (meia janela virou período aberto de um lado), mas a
|
|
@@ -45,7 +73,7 @@ Quando o usuário disser "o relatório está errado / não bate", quase sempre
|
|
|
45
73
|
conta, inclusive conversa de caixa apagada, e não checa permissão; o `meta` exclui caixa apagada,
|
|
46
74
|
exige contato vivo e respeita as caixas que o usuário enxerga. Podem divergir com razão.
|
|
47
75
|
|
|
48
|
-
###
|
|
76
|
+
### Números que estavam ERRADOS — corrigidos nas atualizações de 26/07 e 29/07/2026
|
|
49
77
|
|
|
50
78
|
Achados numa validação de cada resposta contra o banco de produção. **A correção é do sistema, não
|
|
51
79
|
do conector: se a instalação do cliente ainda não recebeu essa atualização, o comportamento ANTIGO
|
|
@@ -60,6 +88,8 @@ um número errado com confiança.
|
|
|
60
88
|
| Receita/ganhos do KANBAN | Venda fechada no período de card criado ANTES dele não contava (numa conta: metade dos ganhos e R$ 3.750 fora) | Conta tudo |
|
|
61
89
|
| "Pendentes" do relatório ao vivo | **Sempre 0**, por condição impossível | Número real |
|
|
62
90
|
| Cumprimento de prazo (SLA) | "100%" para conta com ZERO prazo aplicado — escondia "o SLA não está rodando" | Vazio = sem dados |
|
|
91
|
+
| Por CANAL — conversa de caixa EXCLUÍDA (29/07) | Sumia do relatório: excluir a caixa deixa a conversa sem caixa, e o join descartava essas linhas em silêncio. 512 conversas órfãs de 10 contas em 30 dias; a **conta 60 perdia 76%** do total, a 40 perdia 38%, a 38 perdia 24% | Entram sob a chave **`Channel::None`** ("Caixa excluída"). Some essa chave também — se ignorar, você subconta de novo |
|
|
92
|
+
| Horário de PICO do mapa de calor (29/07) | Dias e horas saíam em **UTC** mesmo mandando `timezone_offset`: no Brasil, o pico aparecia **3 horas adiantado** (o movimento das 11:00 de Brasília era rotulado como 14:00). O cabeçalho do CSV escrevia "(GMT-03:00) Brasília", o que dava aparência de certo | Balde de dia/hora sai do fuso pedido |
|
|
63
93
|
|
|
64
94
|
**Como reconhecer instalação antiga:** soma dos canais menor que o total do resumo; tempo médio por
|
|
65
95
|
etiqueta absurdamente baixo perto do tempo por atendente; "pendentes" zerado no ao vivo tendo
|
|
@@ -135,14 +165,24 @@ conversa pendente na lista; "100%" de prazo com nenhum prazo aplicado.
|
|
|
135
165
|
"conversations_count": 142,
|
|
136
166
|
"incoming_messages_count": 1250,
|
|
137
167
|
"outgoing_messages_count": 980,
|
|
138
|
-
"avg_first_response_time": 245, // segundos
|
|
139
|
-
"avg_resolution_time": 7200, // segundos
|
|
168
|
+
"avg_first_response_time": 245, // segundos — MÉDIA
|
|
169
|
+
"avg_resolution_time": 7200, // segundos — MÉDIA
|
|
170
|
+
"median_first_response_time": 180, // segundos — MEDIANA (novo em 29/07/2026)
|
|
171
|
+
"median_resolution_time": 5400, // segundos — MEDIANA (novo em 29/07/2026)
|
|
140
172
|
"resolutions_count": 98,
|
|
141
173
|
"reply_time": 320, // segundos
|
|
142
174
|
"previous": { ...mesma estrutura para comparativo... }
|
|
143
175
|
}
|
|
144
176
|
```
|
|
145
177
|
|
|
178
|
+
> ⚠️ **Use a MEDIANA para os dois tempos — é o que o painel mostra.** A média é distorcida pela IDADE
|
|
179
|
+
> da conversa: responder hoje uma conversa de 40 dias entra no cálculo com 40 dias. Medido na conta 38
|
|
180
|
+
> em 28-29/07: 78 eventos de primeira resposta deram média de **164,6 horas** contra mediana de
|
|
181
|
+
> **1,1 hora**. Se você reportar a média, o usuário compara com a tela e diz que o relatório está errado.
|
|
182
|
+
> As duas vêm no mesmo payload; a média continua publicada e não foi removida.
|
|
183
|
+
> **Só o resumo geral tem mediana.** Os resumos por agente/time/caixa/etiqueta/canal e a série temporal
|
|
184
|
+
> (`_5`) devolvem SOMENTE média — ali, reporte com a ressalva de outlier.
|
|
185
|
+
|
|
146
186
|
**Parâmetros principais:**
|
|
147
187
|
- `type`: `account` (padrão), `agent`, `inbox`, `label`, `team`
|
|
148
188
|
- `since` / `until`: Unix timestamp (segundos) — período
|
|
@@ -152,7 +192,8 @@ conversa pendente na lista; "100%" de prazo com nenhum prazo aplicado.
|
|
|
152
192
|
### `lionchat_reports_list` — Por agente
|
|
153
193
|
**Use quando:** "produtividade por atendente", "ranking de agentes"
|
|
154
194
|
|
|
155
|
-
Retorna array de métricas, **uma por usuário da conta
|
|
195
|
+
Retorna array de métricas, **uma por usuário da conta** — mais, desde 29/07/2026, **uma linha extra
|
|
196
|
+
com `id: null`** quando existem conversas sem responsável no período. Campos confirmados (e SÓ esses):
|
|
156
197
|
```json
|
|
157
198
|
{
|
|
158
199
|
"id": 6,
|
|
@@ -166,6 +207,8 @@ Retorna array de métricas, **uma por usuário da conta**. Campos confirmados (e
|
|
|
166
207
|
|
|
167
208
|
> ⚠️ **Não existe `name`, `csat_score_average` nem `online_at_total` neste retorno.**
|
|
168
209
|
> - O campo é só `id` (id do agente). Para o nome, cruze com `lionchat_agents_list`.
|
|
210
|
+
> - **`id: null` NÃO é um agente** — é o balde "Sem atendente". Não cruze com `agents_list` (não vai
|
|
211
|
+
> achar), não coloque no ranking, e cite o número dele separado ao apresentar o total.
|
|
169
212
|
> - **CSAT por agente:** use `lionchat_csat_list` com filtro `user_ids=<id>` e calcule a média.
|
|
170
213
|
> - **Tempo online / status:** use `lionchat_agent_availability` ou os live_reports (`_16`/`_17`).
|
|
171
214
|
|
|
@@ -205,12 +248,32 @@ Retorna SOMENTE estes dois campos (não existe taxa pronta):
|
|
|
205
248
|
|
|
206
249
|
Heatmap de volume por hora. Aceita SÓ `timezone_offset` (sem ele o pico sai em UTC). ATENÇÃO: janela FIXA a partir de hoje — NÃO aceita `since`/`until`.
|
|
207
250
|
|
|
251
|
+
> ⚠️ **Instalação anterior a 29/07/2026: o pico sai em UTC MESMO mandando `timezone_offset`.** O fuso
|
|
252
|
+
> era resolvido por nome (`"-3"` não é nome de zona), caía em UTC e o horário vinha **3 horas adiantado**
|
|
253
|
+
> no Brasil — o movimento das 11:00 aparecia como 14:00. O cabeçalho do CSV mostrava "(GMT-03:00)
|
|
254
|
+
> Brasília" mesmo assim, então o erro não se anunciava. Como reconhecer: pico deslocado exatamente 3h
|
|
255
|
+
> para frente do que o cliente sabe da operação dele. Corrigido — hoje o balde de dia/hora usa o fuso
|
|
256
|
+
> pedido.
|
|
257
|
+
|
|
208
258
|
### `lionchat_reports_list_16` / `_17` — Tempo real (live)
|
|
209
259
|
**Use quando:** "quem tá online agora", "carga atual", "conversas abertas no momento"
|
|
210
260
|
|
|
211
261
|
São os live_reports (`conversation_metrics` e a versão agrupada). Use estes — e não os resumos
|
|
212
262
|
históricos — quando o usuário quiser o agora.
|
|
213
263
|
|
|
264
|
+
`_16` retorna (campo `snoozed` novo em 29/07/2026):
|
|
265
|
+
```json
|
|
266
|
+
{ "open": 105, "unattended": 12, "unassigned": 4, "pending": 3777, "snoozed": 1 }
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
> ⚠️ **A FILA REAL é `open + pending + snoozed`.** Só `open` esconde quem está esperando: na conta 19
|
|
270
|
+
> davam 105 abertas havendo **3.883 conversas sem resolução** (3.777 pendentes + 1 adiada) — o gestor
|
|
271
|
+
> lê que está tranquilo com a fila cheia. Ao responder "quantas estão esperando agora?", some os três
|
|
272
|
+
> e diga a quebra. `unattended` e `unassigned` são recortes de `open`, **não some com os outros**.
|
|
273
|
+
>
|
|
274
|
+
> `_17` (agrupado por time/atendente) NÃO tem `snoozed` nem `pending` — só `open`, `unattended` e
|
|
275
|
+
> `unassigned`. Para a fila real por atendente não há campo pronto; avise em vez de somar o que não veio.
|
|
276
|
+
|
|
214
277
|
**Filtros aceitos (expostos na tool desde 2026-07-24):** `inbox_id`, `assignee_id` e `team_id`,
|
|
215
278
|
todos opcionais e combináveis — é o mesmo recorte da tela Visão Geral. Em `_17` o `group_by`
|
|
216
279
|
(`team_id` ou `assignee_id`) continua obrigatório e os filtros recortam a base ANTES de agrupar.
|
|
@@ -218,7 +281,7 @@ todos opcionais e combináveis — é o mesmo recorte da tela Visão Geral. Em `
|
|
|
218
281
|
### `lionchat_csat_metrics` — CSAT agregado
|
|
219
282
|
**Use quando:** "satisfação", "nota média dos clientes", "CSAT"
|
|
220
283
|
|
|
221
|
-
Retorna SOMENTE estes campos (nem média, nem taxa de resposta vêm prontas):
|
|
284
|
+
Retorna SOMENTE estes campos (nem satisfação, nem média, nem taxa de resposta vêm prontas):
|
|
222
285
|
```json
|
|
223
286
|
{
|
|
224
287
|
"total_count": 80, // total de respostas respondidas
|
|
@@ -226,9 +289,21 @@ Retorna SOMENTE estes campos (nem média, nem taxa de resposta vêm prontas):
|
|
|
226
289
|
"total_sent_messages_count": 210 // pesquisas CSAT enviadas no período
|
|
227
290
|
}
|
|
228
291
|
```
|
|
292
|
+
> ⚠️ **"Satisfação (CSAT)" no LionChat é o PERCENTUAL de notas 4 e 5 — não é a nota média.**
|
|
293
|
+
> Sempre foi assim (`store/modules/csat.js`, cartão da tela e cálculo do painel).
|
|
294
|
+
>
|
|
295
|
+
> **Satisfação** = `(ratings_count[4] + ratings_count[5]) / total_count`.
|
|
296
|
+
> No exemplo: (18 + 50) / 80 = **85%**.
|
|
297
|
+
>
|
|
229
298
|
> **Nota média** = `Σ(nota × ratings_count[nota]) / total_count`.
|
|
230
299
|
> No exemplo: (5×50 + 4×18 + 3×8 + 2×2 + 1×2) / 80 = 352/80 = **4,4**.
|
|
231
300
|
>
|
|
301
|
+
> Os dois números são legítimos, mas **têm nomes diferentes e não podem ser trocados**: 85% e 4,4
|
|
302
|
+
> descrevem a mesma conta. Se o usuário pediu "satisfação"/"CSAT", entregue o percentual e diga
|
|
303
|
+
> "percentual de notas 4 e 5". Se você apresentar a média, rotule **"nota média"** — nunca
|
|
304
|
+
> "satisfação", nunca "CSAT de 4,4". Apresentar a média como satisfação faz o número não bater com o
|
|
305
|
+
> painel e o usuário conclui que o relatório está quebrado.
|
|
306
|
+
>
|
|
232
307
|
> **Taxa de resposta** = `total_count / total_sent_messages_count`.
|
|
233
308
|
> No exemplo: 80/210 = **38%**.
|
|
234
309
|
|
|
@@ -270,15 +345,34 @@ Semana anterior: 120 conversas
|
|
|
270
345
|
|
|
271
346
|
### Business hours
|
|
272
347
|
- Sem `business_hours: true`: tempos médios incluem madrugada/feriado (puxa pra cima)
|
|
273
|
-
- Com `business_hours: true`:
|
|
274
|
-
|
|
275
|
-
|
|
348
|
+
- Com `business_hours: true`: conta SÓ o tempo dentro do expediente **das caixas que têm expediente
|
|
349
|
+
configurado** (`working_hours_enabled`)
|
|
350
|
+
|
|
351
|
+
> ⚠️ **NÃO ligue `business_hours: true` por padrão.** O tempo em horário comercial só é gravado para
|
|
352
|
+
> caixa com expediente configurado — e a maioria das contas não configura nenhuma (medido em produção:
|
|
353
|
+
> **nenhuma das 105 caixas** tinha expediente ligado). Três estados possíveis, e você precisa saber
|
|
354
|
+
> reconhecer qual está vendo:
|
|
355
|
+
> 1. **Registros antigos (anteriores a 29/07/2026):** foram gravados com **0** quando não havia
|
|
356
|
+
> expediente. Ligar o filtro devolve "tempo médio de primeira resposta: 0 segundos" — número
|
|
357
|
+
> FABRICADO, lido como atendimento instantâneo. Esse histórico não foi migrado, então continua
|
|
358
|
+
> puxando a média para baixo mesmo hoje.
|
|
359
|
+
> 2. **Registros novos, sem expediente configurado:** vêm vazios/nulos e o cálculo os ignora. O
|
|
360
|
+
> relatório volta **sem dado** (traço), que é honesto — não é bug, não é falta de conversa.
|
|
361
|
+
> 3. **Janela que atravessa 29/07/2026:** mistura os dois. Número não confiável — não use.
|
|
362
|
+
>
|
|
363
|
+
> **Regra prática:** só use `business_hours: true` se o usuário confirmar que as caixas dele têm
|
|
364
|
+
> horário de atendimento configurado. Recebeu 0 ou vazio com o filtro ligado? Refaça SEM o filtro e
|
|
365
|
+
> explique o motivo, em vez de reportar "0 segundos" ou "sem atendimento no período".
|
|
276
366
|
|
|
277
367
|
### CSAT
|
|
278
368
|
- Score: 1-5 estrelas
|
|
279
|
-
-
|
|
280
|
-
|
|
281
|
-
|
|
369
|
+
- **"Satisfação"/"CSAT" da plataforma = percentual de notas 4 e 5** (`(4+5) / total`), NÃO a média.
|
|
370
|
+
Não há faixa de referência oficial no produto para esse percentual — para dar contexto, compare com
|
|
371
|
+
o período anterior da própria conta
|
|
372
|
+
- A **nota média** é outro número: 4.0+ é bom, 3.5-4.0 é OK, abaixo de 3.5 é alerta. Se apresentar,
|
|
373
|
+
rotule "nota média" — nunca "satisfação"
|
|
374
|
+
- Satisfação, média e taxa de resposta NÃO vêm prontas — calcule a partir de `ratings_count`,
|
|
375
|
+
`total_count` e `total_sent_messages_count` (fórmulas na seção do `lionchat_csat_metrics`)
|
|
282
376
|
- Taxa de resposta = `total_count / total_sent_messages_count` (baixa = pouco feedback)
|
|
283
377
|
|
|
284
378
|
### SLA (Enterprise-only)
|
|
@@ -328,9 +422,16 @@ reports_list_5 com group_by=month, metric=conversations_count, since=12 meses at
|
|
|
328
422
|
- Para **status/tempo online**: `lionchat_agent_availability` ou live_reports (`_16`/`_17`).
|
|
329
423
|
- Para o **nome** do agente: cruze o `id` com `lionchat_agents_list`.
|
|
330
424
|
|
|
331
|
-
### ⚠️ Avg time pode ser enganador
|
|
425
|
+
### ⚠️ Avg time pode ser enganador — e há mediana no resumo geral
|
|
332
426
|
Mediana é mais representativa que média (1 conversa que durou 5 dias puxa tudo).
|
|
333
|
-
|
|
427
|
+
|
|
428
|
+
**Desde 29/07/2026 o `lionchat_reports_summary` devolve `median_first_response_time` e
|
|
429
|
+
`median_resolution_time`** (segundos), ao lado das médias. **É a mediana que o painel mostra nos dois
|
|
430
|
+
cartões de tempo** — use ela. Conta 38, 28-29/07: média de 164,6 horas contra mediana de 1,1 hora,
|
|
431
|
+
porque 6 conversas antigas respondidas no dia entram com a idade inteira.
|
|
432
|
+
|
|
433
|
+
Nos demais (por agente/time/caixa/etiqueta/canal e série temporal `_5`) **só há média** — aí sim
|
|
434
|
+
reporte com ressalva: "Tempo MÉDIO de X — pode ter outliers."
|
|
334
435
|
|
|
335
436
|
### ⚠️ Reports não pegam conversas em tempo real
|
|
336
437
|
A maioria dos endpoints é eventually consistent (cache 5min). Pra info real-time use `conversations_meta`.
|
package/dist/tools.js
CHANGED
|
@@ -307,7 +307,7 @@ function registerListCategoriesTool(server, allEndpoints) {
|
|
|
307
307
|
// Helps LLMs build correct flow_data without hitting trial-and-error on
|
|
308
308
|
// node types, action keys, source handles, etc.
|
|
309
309
|
function registerFlowsSchemaReferenceTool(server) {
|
|
310
|
-
const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-07-
|
|
310
|
+
const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-07-30)
|
|
311
311
|
|
|
312
312
|
flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
313
313
|
|
|
@@ -367,6 +367,16 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
367
367
|
filters {logic,rules[...]} opcional (attrSource sempre 'contact') }}. trigger_uuid e preenchido
|
|
368
368
|
pelo backend (NAO envie). 29/02 vira 28/02 em ano nao-bissexto; tolerancia 24h; ativar o flow
|
|
369
369
|
agenda quem ja tem a data; pulos aparecem em flows_executions_list.
|
|
370
|
+
campaign_trigger (NOVO 2026-07-28 — Gatilho 'Campanha'): AUTORIZACAO, nao evento. Sozinho
|
|
371
|
+
NUNCA dispara — libera o flow pra ser disparado por uma CAMPANHA DE FLUXO (Campanhas >
|
|
372
|
+
Fluxo), pessoa por pessoa, no ritmo da campanha. Item SEM config: {key:'campaign_trigger'}.
|
|
373
|
+
SEM ele o flow nao aparece na lista da campanha e campaigns_create com flow_id da 422 —
|
|
374
|
+
e o passo que todo mundo esquece. Convive com outros gatilhos no mesmo flow e e ISENTO da
|
|
375
|
+
trava de gatilho duplicado. Caixa WhatsApp OFICIAL: o 1o bloco de mensagem do flow tem que
|
|
376
|
+
ser template aprovado (senao a campanha e recusada na criacao); QR Code nao tem essa regra.
|
|
377
|
+
Escreva o 1o bloco assumindo CONTATO FRIO (a pessoa nao mandou nada — a campanha e que
|
|
378
|
+
iniciou). Receita: flows_update com o item -> flows_list com with_campaign_trigger=true e
|
|
379
|
+
inbox_id pra confirmar -> campaigns_create com flow_id.
|
|
370
380
|
cron, webhook. NOVO message_sent (2026-06-11): par do message_received pra mensagens de
|
|
371
381
|
SAIDA (atendente, celular/eco, IA — nota privada NAO) com keywords+match_type; cuidado: acao
|
|
372
382
|
'desativar IA' com esse trigger sem keywords = a propria resposta da IA dispara o flow.
|
|
@@ -479,6 +489,8 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
479
489
|
ATENCAO: items[].config NAO items[].params.
|
|
480
490
|
Keys validas:
|
|
481
491
|
Conversa: assign_agent({agent_id}), assign_team({team_id})
|
|
492
|
+
— agent_id aceita tambem a string 'nil' (NOVO 2026-07-28), que REMOVE o responsavel da
|
|
493
|
+
conversa (opcao 'Nenhum' da tela) — deixa a conversa sem atendente em vez de trocar,
|
|
482
494
|
— agent_id/team_id aceitam id fixo OU variavel Liquid (ex: team_id: '{{target_team}}');
|
|
483
495
|
variavel mal escrita e RECUSADA no save; em runtime, se nao resolver pra um numero,
|
|
484
496
|
o erro fica visivel no historico do node (equipe/agente precisa pertencer a conta),
|
|
@@ -500,7 +512,13 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
500
512
|
Kanban: create_kanban_item({funnel_id, funnel_stage, title?, description?})
|
|
501
513
|
— funnel_id e funnel_stage OBRIGATORIOS; title/description aceitam {{ }},
|
|
502
514
|
move_kanban_stage({funnel_id,funnel_stage}), set_kanban_item_status({status:won|lost|active}),
|
|
503
|
-
set_won({}), set_lost({reason?}),
|
|
515
|
+
set_won({}), set_lost({reason?}), add_card_note({content}),
|
|
516
|
+
assign_agent_card({agent_id, mode?}) — RESPONSAVEL DO CARD. mode (NOVO 2026-07-28):
|
|
517
|
+
'add' (default, SOMA na lista — comportamento historico), 'replace' (so o escolhido
|
|
518
|
+
fica; atribui ANTES de remover os outros, entao falha de atribuicao nunca deixa o card
|
|
519
|
+
sem responsavel) ou 'remove_all' (tira TODOS; agent_id dispensado). Automacoes/macros
|
|
520
|
+
e flows antigos nao mandam mode e seguem no 'add'. Cada remocao grava atividade na
|
|
521
|
+
linha do tempo do card, igual a remocao manual,
|
|
504
522
|
add_card_checklist({template_id}) — aplica um modelo de checklist ao card (vira grupo),
|
|
505
523
|
add_card_offer({offer_id, use_custom_value?, custom_value?, funnel_id?, card_source?}) — adiciona
|
|
506
524
|
oferta (produto/servico) ao card; offer_id de offers_list; use_custom_value:true + custom_value
|
|
@@ -553,12 +571,24 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
553
571
|
+ waitDateMode/waitTimeMode ("fixed"|"variable"). Em "variable" o campo contem {{contact.custom_attribute.X}}
|
|
554
572
|
(Data SO aceita atributo tipo date; Horario SO tipo time). Resolve UMA vez na entrada do node.
|
|
555
573
|
Variavel invalida -> saida "error" (invalid_variable_datetime). Data no passado -> segue por "success".
|
|
556
|
-
weekday: waitWeekday (0=dom..6=sab) + waitWeekdayTime ("HH:MM"
|
|
574
|
+
weekday: waitWeekday (0=dom..6=sab) + waitWeekdayTime ("HH:MM" 24h) + waitWeekdayTimeMode
|
|
575
|
+
("fixed" default | "variable") + waitTimezone. O Horario ACEITA VARIAVEL desde 29/07
|
|
576
|
+
(antes era sempre fixo por decisao de produto — o dono reverteu). Mesmo contrato do modo
|
|
577
|
+
date: em "variable" o waitWeekdayTime contem {{...}} (atributo tipo time), resolve UMA vez
|
|
578
|
+
na entrada do node, aceita "14:30"/"9:30"/"14h30", variavel invalida -> saida "error".
|
|
579
|
+
waitWeekdayTimeMode e OBRIGATORIO ao usar variavel: sem ele (ou em "fixed") o motor trata o
|
|
580
|
+
campo como TEXTO FIXO e o calculo recebe a chave literal {{...}} — como o MCP grava o JSON
|
|
581
|
+
do flow direto, sem passar pela tela, nada preenche esse campo por voce.
|
|
557
582
|
(NAO existem waitUnit:"weekday", targetWeekday nem targetHour — erro de doc antiga)
|
|
558
|
-
Handles: "success" (+ "error"
|
|
583
|
+
Handles: "success" (+ "error" quando a variavel de data/hora nao resolve — vale nos DOIS modos
|
|
584
|
+
com variavel, date e weekday, erro invalid_variable_datetime; no modo fixo nunca ha "error")
|
|
559
585
|
|
|
560
586
|
▸ randomizer
|
|
561
|
-
data: { label, mode:"branches", branches:[{id,label,
|
|
587
|
+
data: { label, mode:"branches", branches:[{id,label,percent}] }
|
|
588
|
+
O campo e "percent", NAO "weight" (30/07): a tela sempre gravou percent e o motor lia so weight —
|
|
589
|
+
todo node configurado pela tela quebrava. Hoje o motor le percent e aceita weight so como dado
|
|
590
|
+
antigo. Escreva SEMPRE percent: com weight o node roda, mas abre com as porcentagens EM BRANCO
|
|
591
|
+
na tela do cliente.
|
|
562
592
|
mode "distribute_agents" (SORTEIO ponderado): data.agents:[{agent_id, percent}] (percentuais somando
|
|
563
593
|
100) — sorteia 1 agente por probabilidade e atribui; handle unico "success". E SORTEIO, nao rodizio
|
|
564
594
|
(pode cair no mesmo agente varias vezes seguidas). Pra RODIZIO exato use a ACAO distribute_agents.
|
|
@@ -597,15 +627,27 @@ condicao bater, o lead sai do flow NA HORA. Cada item tem "type":
|
|
|
597
627
|
contact.name, contact.email, contact.phone, contact.custom_attribute.X (SINGULAR — plural resolve vazio)
|
|
598
628
|
CADASTRAL forma curta (canonica): contact.cpf, contact.cnpj, contact.rg, contact.address.street,
|
|
599
629
|
contact.address.number, ... (NAO e custom_attribute!)
|
|
600
|
-
conversation.id
|
|
601
|
-
link de conversa
|
|
602
|
-
conversation.
|
|
603
|
-
|
|
630
|
+
conversation.id — JA E o numero que aparece no app (o motor devolve o display_id). Use ESTE pra
|
|
631
|
+
montar link de conversa. NAO existe um "id interno do banco" separado nas variaveis.
|
|
632
|
+
conversation.display_id e so um APELIDO, aceito desde 29/07, que devolve o mesmo numero — antes
|
|
633
|
+
disso resolvia VAZIO, e todo link de conversa montado por flow saiu quebrado.
|
|
634
|
+
conversation.status, conversation.team_id, conversation.custom_attribute.X
|
|
635
|
+
conversation.label (SINGULAR — etiquetas da conversa em texto separado por virgula).
|
|
636
|
+
{{conversation.labels}} NAO EXISTE: some do texto sem erro nenhum.
|
|
637
|
+
agent.* = o RESPONSAVEL da conversa: agent.name, agent.first_name, agent.last_name,
|
|
638
|
+
agent.id (USE ESTE pro id do responsavel — conversation.agent_id resolvia VAZIO ate 29/07, quando
|
|
639
|
+
virou apelido de agent.id; escreva a forma canonica), agent.email (email NOVO 23/07)
|
|
604
640
|
inbox.id, inbox.name (antes resolviam vazio fora do Enviar Mensagem — corrigido 23/07)
|
|
605
641
|
account.name, account.id (id NOVO 23/07), account.custom_attribute.X (inclui variaveis de conta e
|
|
606
642
|
segredos — NAO existe env.X), {{var_criada_no_set_variable}}, {{ai_intent}}, {{api_response_var}}
|
|
607
643
|
DESDE 23/07 essas variaveis padrao funcionam em TODOS os nodes (Chamada API, Condicoes, IA, Definir
|
|
608
644
|
Variavel) — antes so no Enviar Mensagem. Campo vazio resolve pra string vazia (nunca trava o flow).
|
|
645
|
+
REGRA-MAE: variavel FORA da lista acima SOME do texto, sem erro em lugar nenhum — nao quebra o save,
|
|
646
|
+
nao quebra a execucao, nao aparece no historico do node. So o buraco no texto denuncia. Por isso
|
|
647
|
+
escreva exatamente as chaves desta lista e nunca invente plural/sinonimo. Em caixa WhatsApp
|
|
648
|
+
OFICIAL o preco e maior: parametro de template que chega vazio faz a META RECUSAR o envio
|
|
649
|
+
(#132000) e o cliente NAO RECEBE NADA — foi assim que um aviso de medicacao deixou de ser
|
|
650
|
+
entregue (conta 56, 29/07, {{conversation.assignee.name}} resolvendo vazio).
|
|
609
651
|
|
|
610
652
|
═══ ANTI-LOOP ═══
|
|
611
653
|
Cadeias automacao<->flow tem profundidade maxima 5 hand-offs (MAX_CHAIN_DEPTH). No 5o a cadeia e
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
|