@lionchat/mcp-server 1.7.0 → 1.8.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.
@@ -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 (YYYY-MM-DD ou ISO 8601)"
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 (YYYY-MM-DD ou ISO 8601)"
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",
@@ -22480,6 +22480,32 @@
22480
22480
  ],
22481
22481
  "related_tools": []
22482
22482
  },
22483
+ {
22484
+ "id": "lionchat_inboxes_waha_import_status",
22485
+ "method": "GET",
22486
+ "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha/import_status",
22487
+ "title": "Andamento da Importacao de Historico (WhatsApp QR)",
22488
+ "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.",
22489
+ "category": "Caixas de Entrada",
22490
+ "params": [
22491
+ {
22492
+ "name": "inbox_id",
22493
+ "type": "integer",
22494
+ "location": "path",
22495
+ "required": true,
22496
+ "description": "ID da caixa de entrada (WhatsApp por QR)"
22497
+ }
22498
+ ],
22499
+ "returns": "situacao e progresso da importacao (status, contadores de conversas/mensagens/contatos, erro)",
22500
+ "common_use_cases": [
22501
+ "Cliente pergunta por que a importacao de historico parou ou sumiu",
22502
+ "Acompanhar a migracao de um cliente novo (quantas conversas ja entraram)"
22503
+ ],
22504
+ "related_tools": [
22505
+ "lionchat_inboxes_waha_status",
22506
+ "lionchat_inboxes_whatsapp_history_status"
22507
+ ]
22508
+ },
22483
22509
  {
22484
22510
  "id": "lionchat_inboxes_failed_messages_summary",
22485
22511
  "method": "GET",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionchat/mcp-server",
3
- "version": "1.7.0",
3
+ "version": "1.8.0",
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",