@lionchat/mcp-server 1.7.0 → 1.8.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.
|
@@ -44,7 +44,7 @@ Mesmo shape de condição. 15/página.
|
|
|
44
44
|
|---|---|
|
|
45
45
|
| `id` (id interno do contato) | equal_to, not_equal_to |
|
|
46
46
|
| `name`, `email`, `identifier`, `city`, `company`, `profession` | equal_to, not_equal_to, contains, does_not_contain |
|
|
47
|
-
| `phone_number` | + starts_with |
|
|
47
|
+
| `phone_number` | + starts_with (busca por DDD/prefixo) — **corrigido na atualização de 26/07/2026**; em instalação anterior devolve SEMPRE lista vazia (virava igualdade exata). Vazio com prefixo que existe = instalação antiga |
|
|
48
48
|
| `cpf`, `cnpj`, `rg` (cadastral) | equal_to, not_equal_to, contains, does_not_contain, is_present, is_not_present |
|
|
49
49
|
| `country_code` | equal_to, not_equal_to |
|
|
50
50
|
| `labels` | equal_to, not_equal_to, is_present, is_not_present |
|
|
@@ -59,6 +59,16 @@ Mesmo shape de condição. 15/página.
|
|
|
59
59
|
do Kanban vinculado.
|
|
60
60
|
- Condição com `custom_attribute_type:'conversation_attribute'` — atributo da conversa vinculada.
|
|
61
61
|
|
|
62
|
+
### Duas regras que enganam nos filtros
|
|
63
|
+
|
|
64
|
+
- **Vários valores na mesma condição** (ex.: cidade é "Sorocaba" OU "Campinas"): em CONTATOS isso só
|
|
65
|
+
passou a valer na atualização de 26/07/2026 — em instalação anterior o filtro usa só o PRIMEIRO
|
|
66
|
+
valor e descarta o resto em silêncio. Conversa sempre usou todos. Na dúvida, faça uma consulta por
|
|
67
|
+
valor e some.
|
|
68
|
+
- **"Entre duas datas" não existe como operador** — são duas condições (`is_greater_than` +
|
|
69
|
+
`is_less_than`), e as duas pontas ficam **de fora**. Pra incluir os dias 01 e 10, peça de 30/06 a
|
|
70
|
+
11/07. O corte do dia é em UTC, então conversa do fim da noite conta no dia seguinte.
|
|
71
|
+
|
|
62
72
|
## 3. Kanban — `lionchat_kanban_items_filter` (lista rica de cards)
|
|
63
73
|
|
|
64
74
|
GET com parâmetros FLAT (não usa payload). Filtros REAIS (2026-07-24 — parâmetros fantasmas
|
|
@@ -126,6 +136,11 @@ payload=[
|
|
|
126
136
|
**R3 — Ganhos do mês por agente/time:**
|
|
127
137
|
`kanban_items_list_3 funnel_id=37 from=2026-07-01 to=2026-07-31 user_ids=[6,12]` (ou `team_id=3`)
|
|
128
138
|
|
|
139
|
+
> ⚠️ **`from`/`to` deste relatório: mande SEMPRE timestamp UNIX.** Data por extenso (`2026-07-01`)
|
|
140
|
+
> só é aceita a partir da atualização de 26/07/2026; antes dela o relatório volta **inteiro zerado,
|
|
141
|
+
> sem erro nenhum** (vira 1970 por dentro). Timestamp funciona em qualquer versão — use ele e você
|
|
142
|
+
> nunca cai na armadilha. Se vier tudo zero e o funil tem cards, era isso.
|
|
143
|
+
|
|
129
144
|
**R4 — Conversas de uma campanha que FALHARAM/entregaram:** filtre por
|
|
130
145
|
`campaign_id equal_to <id>`; o status da MENSAGEM de template (sent/delivered/read/failed) está
|
|
131
146
|
nas mensagens da conversa (`conversations_messages_list`) — não é atributo da conversa.
|
|
@@ -32,6 +32,38 @@ Quando o usuário disser "o relatório está errado / não bate", quase sempre
|
|
|
32
32
|
Diferenças de ~1% entre relatório e lista filtrada são borda de janela/fuso, não defeito.
|
|
33
33
|
6. **since/until são unix SEGUNDOS** em TODOS os endpoints de relatório. ISO 8601 quebra a janela em
|
|
34
34
|
silêncio (relatório vazio/errado).
|
|
35
|
+
7. **Mande SEMPRE as DUAS pontas do período.** Mandar só `since` (ou só `until`) fazia o filtro de
|
|
36
|
+
data ser ignorado por inteiro, em silêncio: vinham os números da vida toda rotulados como do
|
|
37
|
+
período pedido. Corrigido em 2026-07-25 (meia janela virou período aberto de um lado), mas a
|
|
38
|
+
recomendação continua: mande as duas.
|
|
39
|
+
8. **"Não atendidas" NÃO é "nunca foi respondida".** A regra real é: **o cliente falou por último e
|
|
40
|
+
ninguém respondeu ainda**. A definição antiga ("sem primeira resposta") foi abandonada de
|
|
41
|
+
propósito, porque marcava como não atendida a conversa em que o robô/atendente falou primeiro e o
|
|
42
|
+
cliente nunca respondeu. Numa conta real as duas leituras dão 32 contra 17 — nunca explique esse
|
|
43
|
+
número como "N pessoas nunca foram respondidas".
|
|
44
|
+
9. **Relatório ao vivo e `conversations_meta` NÃO contam o mesmo universo.** O ao vivo conta tudo da
|
|
45
|
+
conta, inclusive conversa de caixa apagada, e não checa permissão; o `meta` exclui caixa apagada,
|
|
46
|
+
exige contato vivo e respeita as caixas que o usuário enxerga. Podem divergir com razão.
|
|
47
|
+
|
|
48
|
+
### Cinco números que estavam ERRADOS — corrigidos na atualização de 26/07/2026
|
|
49
|
+
|
|
50
|
+
Achados numa validação de cada resposta contra o banco de produção. **A correção é do sistema, não
|
|
51
|
+
do conector: se a instalação do cliente ainda não recebeu essa atualização, o comportamento ANTIGO
|
|
52
|
+
continua valendo.** A coluna "antes" serve pra você reconhecer e avisar o usuário em vez de repetir
|
|
53
|
+
um número errado com confiança.
|
|
54
|
+
|
|
55
|
+
| Relatório | Antes (errado) | Depois |
|
|
56
|
+
|---|---|---|
|
|
57
|
+
| Por CANAL | Conversa **silenciada** não era contada: sumia do canal e do total, e a soma dos canais nunca fechava com o total do resumo (numa conta: Instagram 46 tendo 58) | Silenciada entra; a soma fecha |
|
|
58
|
+
| Tempo médio por ETIQUETA | Calculado **sem janela de data**: a mesma linha dizia "37 resolvidas" e mostrava a média de 6; pedir mês fechado do passado trazia resolução ocorrida DEPOIS. Sempre pra baixo — 1,7 dia no lugar de 43,6 (**25x**) | Usa a janela do evento, como agente/caixa/time |
|
|
59
|
+
| Etiqueta sem dado | Mostrava "0s" (lia como resolução instantânea) | Vem vazio |
|
|
60
|
+
| 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
|
+
| "Pendentes" do relatório ao vivo | **Sempre 0**, por condição impossível | Número real |
|
|
62
|
+
| Cumprimento de prazo (SLA) | "100%" para conta com ZERO prazo aplicado — escondia "o SLA não está rodando" | Vazio = sem dados |
|
|
63
|
+
|
|
64
|
+
**Como reconhecer instalação antiga:** soma dos canais menor que o total do resumo; tempo médio por
|
|
65
|
+
etiqueta absurdamente baixo perto do tempo por atendente; "pendentes" zerado no ao vivo tendo
|
|
66
|
+
conversa pendente na lista; "100%" de prazo com nenhum prazo aplicado.
|
|
35
67
|
|
|
36
68
|
## Mapeamento dos endpoints `lionchat_reports_*`
|
|
37
69
|
|
package/endpoints.json
CHANGED
|
@@ -3824,7 +3824,7 @@
|
|
|
3824
3824
|
"method": "GET",
|
|
3825
3825
|
"path": "/api/v1/accounts/{account_id}/kanban_items/reports",
|
|
3826
3826
|
"title": "Relatório Agregado do Kanban",
|
|
3827
|
-
"description": "RELATORIO AGREGADO do Kanban (funil de vendas) — a resposta e um OBJETO de metricas, nao lista de cards: soma de valores GANHOS no periodo, contagem/valor por etapa, previsao ponderada (forecast), top negocios, cards parados (stale) e metas do funil. Filtra por periodo (from/to), agentes (user_ids[]) e time (team_id). USE ESTA TOOL quando pedirem 'relatorio do funil/vendas/ganhos do mes por agente ou time'. Pra LISTAR os cards em si, use lionchat_kanban_items_filter.",
|
|
3827
|
+
"description": "RELATORIO AGREGADO do Kanban (funil de vendas) — a resposta e um OBJETO de metricas, nao lista de cards: soma de valores GANHOS no periodo, contagem/valor por etapa, previsao ponderada (forecast), top negocios, cards parados (stale) e metas do funil. Filtra por periodo (from/to), agentes (user_ids[]) e time (team_id). USE ESTA TOOL quando pedirem 'relatorio do funil/vendas/ganhos do mes por agente ou time'. Pra LISTAR os cards em si, use lionchat_kanban_items_filter. ATENCAO wonInPeriod/wonValueInPeriod: em instalacao ANTERIOR a atualizacao de 26/07/2026 eles SUBCONTAM — negocio ganho no periodo cujo card foi criado ANTES do periodo fica de fora (numa conta real, metade dos ganhos e R$3.750 sumiam). Ao responder receita nessas contas, avise que o numero pode estar subestimado em funil de ciclo longo.",
|
|
3828
3828
|
"category": "Itens",
|
|
3829
3829
|
"params": [
|
|
3830
3830
|
{
|
|
@@ -3839,14 +3839,14 @@
|
|
|
3839
3839
|
"type": "string",
|
|
3840
3840
|
"location": "query",
|
|
3841
3841
|
"required": false,
|
|
3842
|
-
"description": "Inicio do periodo (
|
|
3842
|
+
"description": "Inicio do periodo — mande SEMPRE timestamp UNIX (segundos ou milissegundos): funciona em QUALQUER versao. Data por extenso ('2026-07-01') so e aceita a partir da atualizacao de 26/07/2026; antes dela NAO da erro, devolve o relatorio INTEIRO ZERADO (vira 1970 por dentro). Se vier tudo zero e o funil tem cards, era isso — repita com timestamp."
|
|
3843
3843
|
},
|
|
3844
3844
|
{
|
|
3845
3845
|
"name": "to",
|
|
3846
3846
|
"type": "string",
|
|
3847
3847
|
"location": "query",
|
|
3848
3848
|
"required": false,
|
|
3849
|
-
"description": "Fim do periodo
|
|
3849
|
+
"description": "Fim do periodo — mesma regra do 'from': timestamp UNIX e sempre seguro. A partir da atualizacao de 26/07/2026 aceita tambem data por extenso, e data SEM hora passa a cobrir o dia inteiro (ate 23:59:59)."
|
|
3850
3850
|
},
|
|
3851
3851
|
{
|
|
3852
3852
|
"name": "user_ids",
|
|
@@ -4222,7 +4222,14 @@
|
|
|
4222
4222
|
"type": "string",
|
|
4223
4223
|
"location": "body",
|
|
4224
4224
|
"required": false,
|
|
4225
|
-
"description": "Instrucao IA para redigir o follow-up"
|
|
4225
|
+
"description": "Instrucao IA para redigir o follow-up (LEGADO: vale como 1 etapa unica; so e usado quando follow_up_steps esta vazio)"
|
|
4226
|
+
},
|
|
4227
|
+
{
|
|
4228
|
+
"name": "config.follow_up_steps",
|
|
4229
|
+
"type": "array",
|
|
4230
|
+
"location": "body",
|
|
4231
|
+
"required": false,
|
|
4232
|
+
"description": "Cadencia de follow-up: ate 3 etapas [{after_minutes, prompt}]. E ESTE o campo que a tela mostra em 'Instrucoes para a IA neste follow-up' e o que manda de verdade — tem precedencia sobre follow_up_time/follow_up_prompt. Cada after_minutes >= 5 (conta a partir da mensagem anterior) e a soma nao passa de 1440 min (24h). Ex.: [{\"after_minutes\":30,\"prompt\":\"Pergunte se ainda tem interesse\"}]. Aceita array ou string JSON."
|
|
4226
4233
|
},
|
|
4227
4234
|
{
|
|
4228
4235
|
"name": "config.disabled_tools",
|
|
@@ -4440,7 +4447,14 @@
|
|
|
4440
4447
|
"type": "string",
|
|
4441
4448
|
"location": "body",
|
|
4442
4449
|
"required": false,
|
|
4443
|
-
"description": "Instrucao IA para redigir o follow-up"
|
|
4450
|
+
"description": "Instrucao IA para redigir o follow-up (LEGADO: vale como 1 etapa unica; so e usado quando follow_up_steps esta vazio)"
|
|
4451
|
+
},
|
|
4452
|
+
{
|
|
4453
|
+
"name": "config.follow_up_steps",
|
|
4454
|
+
"type": "array",
|
|
4455
|
+
"location": "body",
|
|
4456
|
+
"required": false,
|
|
4457
|
+
"description": "Cadencia de follow-up: ate 3 etapas [{after_minutes, prompt}]. E ESTE o campo que a tela mostra em 'Instrucoes para a IA neste follow-up' e o que manda de verdade — tem precedencia sobre follow_up_time/follow_up_prompt. Cada after_minutes >= 5 (conta a partir da mensagem anterior) e a soma nao passa de 1440 min (24h). Ex.: [{\"after_minutes\":30,\"prompt\":\"Pergunte se ainda tem interesse\"}]. Aceita array ou string JSON."
|
|
4444
4458
|
},
|
|
4445
4459
|
{
|
|
4446
4460
|
"name": "config.disabled_tools",
|
|
@@ -22480,6 +22494,32 @@
|
|
|
22480
22494
|
],
|
|
22481
22495
|
"related_tools": []
|
|
22482
22496
|
},
|
|
22497
|
+
{
|
|
22498
|
+
"id": "lionchat_inboxes_waha_import_status",
|
|
22499
|
+
"method": "GET",
|
|
22500
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha/import_status",
|
|
22501
|
+
"title": "Andamento da Importacao de Historico (WhatsApp QR)",
|
|
22502
|
+
"description": "[NOVO 2026-07-25] SO LEITURA: mostra em que pe esta a importacao de historico de uma caixa WhatsApp por QR (WAHA). Responde a pergunta 'a importacao parou?'. Campos: status ('idle' nunca rodou | 'importing' rodando | 'interrupted' caiu e VAI RETOMAR sozinha de onde parou | 'paused' pausada por alguem no painel de suporte, so volta no botao Retomar | 'cancelled' encerrada de vez | 'completed' concluida), started_at, completed_at, total_chats/processed_chats (conversas), total_messages/created_messages/skipped_messages (mensagens; skipped = ja existiam), contacts_created e error. ADMIN-ONLY, e so pra caixa WAHA (QR) — a caixa oficial (Cloud) usa lionchat_inboxes_whatsapp_history_status. Pausar, retomar e cancelar NAO existem no MCP: sao do painel de suporte.",
|
|
22503
|
+
"category": "Caixas de Entrada",
|
|
22504
|
+
"params": [
|
|
22505
|
+
{
|
|
22506
|
+
"name": "inbox_id",
|
|
22507
|
+
"type": "integer",
|
|
22508
|
+
"location": "path",
|
|
22509
|
+
"required": true,
|
|
22510
|
+
"description": "ID da caixa de entrada (WhatsApp por QR)"
|
|
22511
|
+
}
|
|
22512
|
+
],
|
|
22513
|
+
"returns": "situacao e progresso da importacao (status, contadores de conversas/mensagens/contatos, erro)",
|
|
22514
|
+
"common_use_cases": [
|
|
22515
|
+
"Cliente pergunta por que a importacao de historico parou ou sumiu",
|
|
22516
|
+
"Acompanhar a migracao de um cliente novo (quantas conversas ja entraram)"
|
|
22517
|
+
],
|
|
22518
|
+
"related_tools": [
|
|
22519
|
+
"lionchat_inboxes_waha_status",
|
|
22520
|
+
"lionchat_inboxes_whatsapp_history_status"
|
|
22521
|
+
]
|
|
22522
|
+
},
|
|
22483
22523
|
{
|
|
22484
22524
|
"id": "lionchat_inboxes_failed_messages_summary",
|
|
22485
22525
|
"method": "GET",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionchat/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "MCP server for LionChat API — 547 tools + 10 resources + 9 prompts. Audit-log aware, completion API, progress notifications.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|