@lionchat/mcp-server 1.13.0 → 1.15.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.
@@ -423,7 +423,7 @@ Campos MUTÁVEIS (atualizáveis livremente por IA/integração): `marital_status
423
423
  |---|---|---|---|
424
424
  | **LionCalls** | Voz pelo WhatsApp em caixa **QR Code**, mas pelo **motor próprio do LionChat** (credencial global, 1 sessão por caixa; flag `lioncalls_calling`, nasce desligada e é ligada conta a conta) | **NENHUMA — sem tool no MCP** | WhatsApp QR Code |
425
425
  | **WhatsApp Calling (Cloud)** | Voz pelo WhatsApp na **API oficial** (enterprise) | `whatsapp_calls_*` + enable/disable_whatsapp_calling | WhatsApp oficial |
426
- | **VoIP (Zenvia)** | Telefonia COMUM com softphone no navegador (ramais, saldo, recarga) | `voip_*` | Telefone |
426
+ | **VoIP (Zenvia)** | Telefonia COMUM com softphone no navegador (ramais, ligações) | `voip_*` | Telefone |
427
427
  | **VTCall** | Telefonia por **PABX click-to-call**, config por conta + ramal por atendente; **sem softphone no navegador** — o atendente fala pelo app/ramal do VTCall | `vtcall_settings_*` (show/update/test_connection), `vtcall_ramals_*` (list/create/destroy) | Telefone (PABX do cliente) |
428
428
 
429
429
  Quando o usuário falar "ligação", descubra o canal ANTES de responder: caixa QR Code → **LionCalls**;
@@ -490,26 +490,21 @@ num construtor de blocos. Feature liberada conta a conta.
490
490
  | `completed` | Chegou ao fim do formulário |
491
491
  | `abandoned` | Parou no meio e a janela de abandono do formulário venceu |
492
492
 
493
- O contato é criado assim que nome e telefone entram — **mesmo sem concluir**. Por isso resposta
494
- `abandoned` normalmente JÁ tem contato para trabalhar.
493
+ O contato nasce em TRÊS momentos (mudou em 16/08): conclusão, fechamento do abandono, ou logo
494
+ antes de um bloco de Enviar WhatsApp. Resposta `abandoned` ganha o contato no fechamento do
495
+ abandono — com as respostas que a pessoa deu. Enquanto preenche, a lista de respostas mostra
496
+ `contact: {id: null, ..., pending: true}`.
497
+
498
+ Termos do formulário (18/08):
499
+ - **Caixa vinculada** — a caixa de WhatsApp do formulário (`inbox_id`); obrigatória pra publicar.
500
+ - **Link identificado** — link de formulário enviado numa conversa sai carimbado (`lt_form`) e o
501
+ formulário pula nome/telefone/e-mail já conhecidos, sem nunca exibir o dado.
502
+ - **Simulador** — `lead_forms_test_run`: roda o rascunho no motor real sem deixar rastro.
503
+ - **Página externa (`embed`)** — bloco que exibe um site de fora dentro do formulário (checkout,
504
+ simulador, agenda), com conferência prévia de "aceita iframe?" (`check_embed`).
505
+ - **Definir variável (`set_variable`)** — bloco invisível que cria `{{var.<nome>}}`.
506
+ - **Agendamento (`booking`)** — calendário dentro do formulário, ligado a um tipo de evento.
495
507
 
496
508
  Detalhes completos (construtor, página pública, blocos, gatilhos de flow, tetos e limites) no
497
509
  resource `lionchat://docs/formularios-publicos`.
498
510
 
499
- ## Assinatura (Guru)
500
-
501
- Gestão da assinatura da **própria conta** no LionChat (plano, faturas, troca de plano,
502
- cancelamento), que roda por cima do Digital Manager Guru. Não confunda com a integração de
503
- pagamento que traz vendas do cliente para dentro do CRM.
504
-
505
- - **Feature liberada conta a conta** (`guru_subscription_management`, nasce desligada). Desligada,
506
- toda chamada volta **404 com `code: "feature_disabled"`** — isso NÃO quer dizer "assinatura não
507
- existe".
508
- - **Somente administrador** da conta. Agente comum recebe 403.
509
- - **Ações de escrita** (trocar de plano, cancelar, reverter cancelamento) têm trava de **30
510
- segundos** por conta: a segunda tentativa dentro da janela volta 422 `action_in_progress`. Não é
511
- erro — é a primeira ainda processando. Espere e confira o resultado antes de repetir.
512
- - Erros: **422** = validação do Guru (a mensagem vem do próprio Guru, repasse ao usuário) ou
513
- assinatura não configurada; **404** = assinatura inexistente no Guru (ou a feature desligada, ver
514
- acima — o `code` distingue); **503** = Guru fora do ar / tempo esgotado, aí sim cabe uma nova
515
- tentativa depois.
@@ -526,3 +526,153 @@ Endpoints de relatório podem retornar **MUITOS** dados:
526
526
  - `csat_list` sem filtro → milhares
527
527
 
528
528
  **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).
529
+
530
+ ---
531
+
532
+ ## Relatórios personalizados — ler, calcular e montar (2026-08)
533
+
534
+ É a aba **Personalizados** dentro de Relatórios: o cliente monta blocos (gráficos e tabelas) e salva
535
+ num painel. Tudo aqui é **só administrador** — quem não for recebe **401** (não é problema de
536
+ conexão do conector; não mande reconectar).
537
+
538
+ | Ferramenta | Para quê |
539
+ |---|---|
540
+ | `lionchat_custom_dashboards_list` | Quais relatórios existem, já com os blocos dentro |
541
+ | `lionchat_custom_dashboards_widget_data` | O número de um bloco **já salvo** |
542
+ | `lionchat_custom_dashboards_preview_widget` | Monta um bloco **na hora** e calcula, sem salvar |
543
+ | `lionchat_custom_dashboards_create` | Cria um relatório que **aparece na tela do cliente** |
544
+ | `lionchat_custom_dashboards_update` | Altera (substitui a lista de blocos) |
545
+ | `lionchat_custom_dashboards_destroy` | Apaga, **sem desfazer** |
546
+
547
+ As três últimas **alteram o que o cliente vê** e só rodam com `confirm: true` — confirme com ele o
548
+ que exatamente vai mudar antes de reenviar.
549
+
550
+ ### `preview_widget` é a ferramenta mais poderosa deste guia
551
+
552
+ Ela responde pergunta de relatório que **nenhuma outra ferramenta cobre**, porque monta o recorte na
553
+ hora. Exemplo real: *"quantos cards foram ganhos em cada etapa do funil 12 nos últimos 30 dias"* —
554
+ nenhum `reports_*` responde; aqui é `funnel_stages` + `date_basis: closed` + `status: won`.
555
+
556
+ Não é consulta livre: escolha um `widget_type` e preencha **só os campos daquele tipo**.
557
+
558
+ ### Os 7 tipos de bloco
559
+
560
+ | Tipo | Campos | Recurso exigido |
561
+ |---|---|---|
562
+ | `conversations_timeseries` | `metric` (conversations, incoming_messages, outgoing_messages, resolutions, reopens, avg_first_response_time, avg_resolution_time) · `bucket` (day/week/month) · `scope_type`+`scope_id` · `time_range` | — |
563
+ | `entity_ranking` | `dimension` (agent/inbox/team/label) · `metric` (conversations, resolutions, avg_first_response_time, avg_resolution_time) · `time_range` | — |
564
+ | `csat_summary` | `time_range` | — |
565
+ | `sla_summary` | `time_range` | `sla` (Enterprise) |
566
+ | `funnel_stages` | `funnel_id` · `date_basis` (created/moved/closed/any) · `status` (all/open/won/lost) · `time_range` | `kanban_board` |
567
+ | `lead_origin` | `time_range` | `liontrack` |
568
+ | `agent_report` | `dimension` (agent/team/inbox) · `scope_type`+`scope_id` · `columns[]` · `time_range` | — |
569
+
570
+ **`time_range`:** `last_7_days`, `last_30_days`, `this_month`, `last_month` — e `custom` **só em
571
+ `conversations_timeseries` e `agent_report`**, exigindo `from`/`to`. **A janela não pode passar de 92
572
+ dias**, e esse teto é da janela, não de um tipo: pedir "esse ano" é recusado com a explicação.
573
+
574
+ **Colunas do `agent_report`:** `leads`, `atendidos`, `resolvidas`, `abertas`, `pendentes`, `adiadas`,
575
+ `label_count` (exige `label_id`) e `conversao` (exige `denominator` e `numerator`, que é **lista de
576
+ IDs de etiqueta**, nunca nome de métrica).
577
+
578
+ ### Como ler a resposta (campo `shape`)
579
+
580
+ | `shape` | Estrutura | Cuidado |
581
+ |---|---|---|
582
+ | `series` | `{series: [{timestamp, value}]}` | `timestamp` é unix em segundos. As duas métricas de tempo vêm em **segundos** e trazem também `count` por ponto |
583
+ | `categories` | `{categories: [{label, value}]}` | `funnel_stages` vem **na ordem das etapas do funil**, nunca por valor — não reordene |
584
+ | `scalar` | `{value, total, secondary}` | Use o `total` para separar "ninguém respondeu" de "zero legítimo". **SLA sem nenhum prazo aplicado devolve 100.0** — não anuncie "100% de cumprimento" sem olhar o total |
585
+ | `table` | `{dimension, columns, rows, total}` | O `total` **não é a soma das linhas** (contagem própria por métrica). As linhas são os membros **atuais**: quem saiu da equipe some da linha e continua no total |
586
+
587
+ ### Armadilhas que fazem o bloco sair errado
588
+
589
+ 1. **`scope_type`/`scope_id` têm sentido OPOSTO por tipo.** No `conversations_timeseries` = "o
590
+ gráfico é só daquela entidade". No `agent_report` = "mostre só as linhas de quem é dessa
591
+ equipe/caixa". Confundir troca a conta inteira.
592
+ 2. **Campo fora da lista é descartado em silêncio.** Se um valor "não fez efeito", provavelmente o
593
+ nome do campo está errado.
594
+ 3. **Sempre envie `timezone_offset` em HORAS** (Brasília = `-3`). Sem ele o cálculo é em UTC e o
595
+ número não bate com o que o cliente vê na tela.
596
+ 4. **`update` substitui a lista de blocos inteira.** Leia com `list`, altere o array, devolva
597
+ completo — e preserve o `id` de cada bloco que já existia.
598
+ 5. **`list` não pagina.** Se a resposta vier com aviso de corte, **não** use aquela lista para montar
599
+ um `update`: você apagaria os blocos que não chegaram.
600
+ 6. **Recurso não liberado devolve 422 com `code: "feature_unavailable"`** — a resposta certa é "sua
601
+ conta não tem esse recurso", nunca "não há dados".
602
+
603
+ ### Fluxo recomendado para "me monta um relatório de X"
604
+
605
+ 1. `preview_widget` para **testar o desenho** e conferir que o número faz sentido.
606
+ 2. Mostre o número ao usuário e confirme que é o que ele quer.
607
+ 3. `create` com `confirm: true`, usando o mesmo desenho.
608
+
609
+ ---
610
+
611
+ ## Relatório personalizado como FONTE de um resumo escrito (2026-08-21)
612
+
613
+ O caso de uso: o cliente deixa um relatório montado na tela e pede *"me traz o relatório XPTO todo
614
+ dia"*. Em vez de garimpar dado em dez ferramentas, **leia o relatório salvo e escreva o texto**.
615
+
616
+ ### O passo a passo
617
+
618
+ 1. `lionchat_custom_dashboards_list` — ache o relatório pelo nome.
619
+ 2. `lionchat_custom_dashboards_list` (ou `_show`) devolve `widgets[]`, cada um com `id`, `title`,
620
+ `widget_type` e os params. **É o `title` que diz o que aquele bloco é** — sem ele, quatro blocos
621
+ do mesmo tipo chegam indistinguíveis.
622
+ 3. Para cada bloco: `lionchat_custom_dashboards_widget_data` com o `widget_id`.
623
+ **Mande sempre `timezone_offset`, lido do fuso DA CONTA** — `lionchat_account_show` devolve o
624
+ campo `timezone` (ex.: `America/Sao_Paulo`); converta para horas. **Não assuma -3.** O padrão da
625
+ plataforma é São Paulo, mas a conta pode ter outro: Mato Grosso do Sul é -4, e há cliente fora do
626
+ Brasil. Sem o fuso certo, o número não bate com a tela — e numa janela de UM DIA uma hora de
627
+ diferença joga o que aconteceu de madrugada para o dia errado.
628
+ 4. Para um resumo DIÁRIO, mande também **`time_range: 'yesterday'`**. Isso recalcula o bloco naquela
629
+ janela **sem alterar o relatório salvo** — o cliente continua vendo os 30 dias dele na tela.
630
+ 5. Escreva o texto a partir dos números. Não invente linha que o relatório não tem.
631
+
632
+ ### Regras que evitam relatório mentiroso
633
+
634
+ - **Bloco sem `title`**: diga o tipo e o período em vez de adivinhar ("Etapas do funil, últimos 30
635
+ dias"). Nunca chute de qual médico/equipe é.
636
+ - **Zero é resposta, não erro.** Etapa sem card, atendente sem ligação: escreva zero. Só diga "sem
637
+ dado" quando a chamada falhar de verdade.
638
+ - **Não some blocos de janelas diferentes.** Um bloco em 7 dias e outro em 30 no mesmo relatório é
639
+ comum; somar os dois inventa número.
640
+ - **`total` do shape `table` NÃO é a soma das linhas** em toda métrica — é contagem própria. Leia o
641
+ que vem, não recalcule.
642
+ - **Recorte e métrica não são negociáveis pelo agente**: `widget_data` só aceita mudar a JANELA
643
+ (`time_range`/`from`/`to`/`bucket`). Se o cliente pedir "o mesmo relatório só que por caixa", isso
644
+ é editar o relatório (com confirmação), não um override.
645
+
646
+ ### Escolher entre os dois blocos de funil (erro fácil)
647
+
648
+ | Pergunta | Bloco |
649
+ |---|---|
650
+ | "Quantos agendamentos aconteceram no período?" | `stage_entries` |
651
+ | "Como está o funil hoje / quantos estão em cada etapa?" | `funnel_stages` |
652
+
653
+ `funnel_stages` conta quem **está** na etapa; card que entrou e depois saiu some dele. Medido em
654
+ produção: **25% de diferença**. `stage_entries` lê o histórico de movimentação e conta **card
655
+ distinto** (quem volta pra etapa conta uma vez só).
656
+
657
+ **Limite do `stage_entries`**: o histórico só existe a partir de **12/07/2026** e tem retenção de
658
+ 365 dias. Período que alcance antes disso devolve MENOS do que aconteceu — avise em vez de
659
+ apresentar o número como completo.
660
+
661
+ ### Ligações (`calls_report`)
662
+
663
+ Colunas: Ligações · Atendidas · Não atendidas · **Não concluídas** · Tempo total · Tempo médio.
664
+
665
+ - "Não concluídas" são as que ficaram presas (tocando, em andamento, falhou, cancelada). **Não as
666
+ chame de "não atendidas"** — são coisas diferentes e a soma das três tem que fechar com o total.
667
+ - Tempo médio já vem calculado sobre as ATENDIDAS. Não recalcule dividindo pelo total.
668
+ - **Ligação sem atendente tem linha própria** e pode ser boa parte do volume (23% numa conta real).
669
+ Não a esconda ao resumir por pessoa.
670
+ - A tabela lista só quem teve ligação no período — atendente ausente da tabela fez zero.
671
+
672
+ ### Faturamento (`measure`)
673
+
674
+ `measure: 'value'` faz `funnel_stages`/`stage_entries` somarem o VALOR dos cards em vez de contar.
675
+ Combinado com `status: 'won'` + `date_basis: 'closed'`, dá o faturamento ganho da etapa no período.
676
+
677
+ **Cuidado ao escrever**: se os cards do cliente têm valor padrão (todos com o mesmo número), a soma
678
+ não é faturamento — é o padrão multiplicado. Se todos os valores forem idênticos, desconfie e diga.
@@ -334,9 +334,24 @@ Dois comportamentos novos e propositais no painel Falhas de envio
334
334
  contato, horário e o **motivo original** da falha. É registro, então não tem botão de reenviar
335
335
  nem de cancelar e fica fora de `retryable_count` e do `total`.
336
336
 
337
- Cancelar vale pra TODOS os grupos (inclusive `permanent`, `window_expired`, `campaign` e `partial`,
338
- que nunca seriam reenviados) — é assim que se limpa o painel. Ações irreversíveis: confirme com o
339
- usuário e mostre as contagens do summary antes.
337
+ Cancelar vale pra TODOS os grupos (inclusive `permanent`, `window_expired`, `campaign`, `partial` e
338
+ `accepted_then_failed`, que nunca seriam reenviados) — é assim que se limpa o painel. Ações
339
+ irreversíveis: confirme com o usuário e mostre as contagens do summary antes.
340
+
341
+ ### Grupos novos no painel de falhas (18/08) — e o `partial` mudou de significado
342
+ Três mudanças no `lionchat_inboxes_failed_messages_summary`:
343
+ - **`accepted_then_failed`** (campo `accepted_then_failed_count`): mensagem COM recibo da Meta
344
+ (aceita no envio, recusada depois por aviso assíncrono) e até 1 anexo. Antes essas caíam em
345
+ `partial` com a explicação errada de "3 fotos e só a 1ª chegou". O motivo real de cada uma está na
346
+ própria linha (`error`). Nunca reenviáveis em lote (anti-duplicata) — reenvio é disparar de novo
347
+ pela conversa.
348
+ - **`partial`** agora é SÓ o caso que o rótulo sempre descreveu: recibo presente E **mais de um
349
+ anexo** (envio multi-anexo que foi pela metade). `bulk_cancel` com `classification: "partial"`
350
+ **deixou de atingir** as mensagens de 1 anexo — elas agora são `accepted_then_failed`.
351
+ - **`account_locked`** (dentro de `groups`): conta comercial TRANCADA pela Meta (erro 131031).
352
+ Nunca reenviável — nem aqui, nem pelo "Reenviar falhas" da campanha (bloqueado na fonte). A ação é
353
+ humana: resolver no Business Manager. Aparece também na aba Saúde da caixa e na quebra de falhas
354
+ do card de campanha.
340
355
 
341
356
  ### "Erro 131026 / Message undeliverable" — NUNCA chute a causa (30/07)
342
357
  A Meta devolve o MESMO código 131026 pra duas coisas diferentes: **o número não tem WhatsApp** e **a
@@ -360,6 +375,20 @@ sozinha, agora por upload direto, e a mensagem fica verde sem precisar de F5. As
360
375
  131053 (formato/tamanho recusado) NÃO são resgatadas — regra fail-closed de propósito, pra não ficar
361
376
  reenviando eternamente algo que a Meta nunca vai aceitar.
362
377
 
378
+ ### "Template falhou e depois ficou verde sozinho" — socorro de TEMPLATE (18/08)
379
+ O socorro automático passou a cobrir também mensagens de MODELO (template) da caixa oficial —
380
+ qualquer tipo: só texto, imagem, vídeo ou documento no cabeçalho. Quando a falha é passageira
381
+ (inclusive erro desconhecido), a plataforma remonta o modelo INTEIRO (mesmo texto, variáveis e
382
+ botões) e reenvia em ondas de até ~1h; com mídia no cabeçalho, entrega o arquivo direto pra Meta em
383
+ vez do link (imune ao buscador). Regras que valem explicar ao usuário:
384
+ - Ficam FORA de propósito: campanha (tem reenvio próprio), modelo de código de verificação (OTP),
385
+ conta trancada (131031), número sem WhatsApp (131026), freios de spam/limite da Meta e erros de
386
+ configuração do modelo — nesses, reenviar não resolve e a mensagem fica vermelha com o motivo.
387
+ - Mensagem com mais de 2 horas não é mais entregue pelo socorro (lembrete velho não chega atrasado).
388
+ - O histórico do FLUXO pode continuar mostrando o bloco vermelho mesmo com a mensagem entregue pelo
389
+ socorro — o contador do nó não é revertido (limitação declarada).
390
+ - Pesquisa de satisfação (CSAT) por modelo NÃO tem socorro (não guarda os dados do modelo).
391
+
363
392
  ### "A mensagem falhou dizendo 'Template not found or invalid template name'" (30/07)
364
393
  Se a caixa é **WhatsApp oficial** e faz mais de 24h que o cliente não fala, a causa quase sempre é a
365
394
  **janela de 24h fechada** — não um template faltando. Até 30/07 o erro gravado era esse texto
@@ -403,15 +432,6 @@ mal montado — bloco de API sem saída de erro, pergunta sem para onde ir, esco
403
432
  cobra está em `lionchat://docs/formularios-publicos`. Enquanto não publicar, a página pública
404
433
  continua servindo a última versão publicada (ou nada, se nunca houve).
405
434
 
406
- ### "A gestão de assinatura volta 404 dizendo feature_disabled" (15/08)
407
- Não é assinatura inexistente. O 404 com `code: "feature_disabled"` significa que a **feature de
408
- gestão de assinatura está desligada** para essa conta (é liberada conta a conta no painel de
409
- suporte). O 404 é de propósito — não anuncia a tela para quem não tem acesso.
410
-
411
- **Ação:** não retry, não procure outro ID. Oriente o usuário a pedir a liberação ao suporte. Se o
412
- `code` NÃO vier, aí sim é 404 de verdade: a assinatura não existe no Guru. E 403 é outra coisa —
413
- a feature está ligada, mas quem chamou não é administrador da conta.
414
-
415
435
  ## Webhooks como alternativa a polling
416
436
 
417
437
  Se você precisa monitorar mudanças em conversas/mensagens, NÃO faça polling:
@@ -466,6 +486,41 @@ Toda resposta da API tem header `X-Request-ID`. Inclua no relatório se algo fal
466
486
  - Cloudflare Worker logs (se proxy)
467
487
  - Sentry pra exceptions
468
488
 
489
+ ## "Import de contatos deu erro de telefone em toda linha" — regra do DDI (18/08)
490
+
491
+ O import (de contatos e do Kanban) **não completa mais o DDI**: o telefone precisa vir da planilha
492
+ COM o código do país (`5511988887777` ou `+5511988887777`; o `+` é opcional). Quem sobe sem DDI
493
+ recebe **erro na linha** — "Telefone ... em formato invalido — confira se veio COM o DDI" — e o
494
+ contato NÃO é criado (antes o sistema completava 55, o que colava 55 em número estrangeiro).
495
+ Regras: número que não existe em país nenhum é recusado; começando com 0 (zero de operadora) é
496
+ recusado; brasileiro com 55 e 12-13 dígitos é aceito mesmo no formato antigo sem o 9º dígito.
497
+ **Armadilhas**: `contacts_import_validate` NÃO valida telefone (validate verde não garante import
498
+ sem erro de telefone); no import do KANBAN, telefone inválido cria o card SEM contato e SEM
499
+ conversa, em silêncio — comportamento diferente do import de contatos.
500
+
501
+ ## "A caixa oficial parou de disparar / de receber" — avisos automáticos da Meta (18/08)
502
+
503
+ Duas famílias de chaves novas em `additional_attributes` da caixa `Channel::Whatsapp`
504
+ (visíveis em `inboxes_show`/`inboxes_list`):
505
+ - **Bloqueio por pagamento** (erro Meta 131042): `whatsapp_send_blocked_billing` (true) +
506
+ `whatsapp_send_blocked_at`. A caixa CONTINUA recebendo e respondendo dentro da janela; só o
507
+ disparo iniciado pela empresa está travado. Limpa sozinha no próximo envio de TEMPLATE
508
+ bem-sucedido — ou chamando `GET /inboxes/{id}/health`, que consulta a Meta e apaga o aviso se
509
+ ela disser que o envio voltou (é o único GET da plataforma que escreve).
510
+ - **Desconexão** (aparelho/parceiro removido na Meta): `whatsapp_disconnect_event`,
511
+ `whatsapp_disconnect_reason`, `whatsapp_disconnect_initiated_by`, `whatsapp_disconnected_at` —
512
+ e `reauthorization_required` vira `true` SOZINHO. Com `reauthorization_required: true` a caixa
513
+ fica MUDA (descarta o que chega) até reconectar. A ausência dessas chaves NÃO prova que a caixa
514
+ está conectada (caixa antiga só ganha o aviso após reinscrição).
515
+
516
+ ## "O filtro de etiqueta 'não está presente' mente" — NUNCA mentiu pela API
517
+
518
+ O defeito corrigido em 17/08 era SÓ do navegador (a tela travava). O SQL de
519
+ `contacts_filter`/`conversations_filter` sempre esteve correto para `is_not_present` em etiquetas.
520
+ Se alguma anotação antiga disser que esse filtro mente por API, está errada. O que MUDOU de
521
+ verdade nos filtros: data FIXA com `is_greater_than`/`is_less_than` passou a cortar o dia no fuso
522
+ da CONTA (ver resource `filtros-e-relatorios`).
523
+
469
524
  ## Quando reportar pro suporte
470
525
 
471
526
  Reporte se:
@@ -1,3 +1,5 @@
1
+ export declare const CONFIRM_PARAM = "confirm";
2
+ export declare const CONFIRM_DESCRIPTION: string;
1
3
  export declare const FULL_RESPONSE_PARAM = "full_response";
2
4
  export declare const FULL_RESPONSE_DESCRIPTION: string;
3
5
  export declare const FULL_RESPONSE_TOOLS: Set<string>;
package/dist/sanitize.js CHANGED
@@ -53,6 +53,12 @@ const SLIM_KEYS = new Set([
53
53
  // AIDEV-NOTE: tools cujo PROPOSITO e o campo pesado — slim nao se aplica nelas
54
54
  // (segredos continuam redigidos mesmo assim).
55
55
  const SLIM_EXEMPT_SUBSTRINGS = ['whatsapp_templates', 'csat_template'];
56
+ // AIDEV-NOTE: [auditoria adversus A3] parametro do CONECTOR (nunca chega ao Rails) que carrega o
57
+ // OK do usuario pra ferramenta marcada com `confirm_required` no catalogo. Stripado antes do
58
+ // bucketing, igual full_response.
59
+ export const CONFIRM_PARAM = 'confirm';
60
+ export const CONFIRM_DESCRIPTION = 'OBRIGATORIO nesta ferramenta: ela ALTERA algo que o usuario ve na tela. Confirme com ele o que ' +
61
+ 'vai ser criado/alterado/apagado e so entao reenvie com confirm:true. Sem isso a chamada e recusada.';
56
62
  export const FULL_RESPONSE_PARAM = 'full_response';
57
63
  export const FULL_RESPONSE_DESCRIPTION = 'true = resposta COMPLETA, sem a poda de campos pesados (message_templates, working_hours, ' +
58
64
  'avatares, meta_history_import). Padrao false (resposta enxuta). Segredos sao SEMPRE censurados, ' +
@@ -1 +1 @@
1
- {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../src/sanitize.ts"],"names":[],"mappings":"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"}
package/dist/tools.js CHANGED
@@ -5,7 +5,7 @@ import { substitutePath, buildQueryString, formatResponse, separateParams, } fro
5
5
  import { readFileSync } from 'fs';
6
6
  import { resolve, dirname } from 'path';
7
7
  import { fileURLToPath } from 'url';
8
- import { FULL_RESPONSE_PARAM, FULL_RESPONSE_DESCRIPTION, supportsFullResponse, } from './sanitize.js';
8
+ import { FULL_RESPONSE_PARAM, FULL_RESPONSE_DESCRIPTION, CONFIRM_PARAM, CONFIRM_DESCRIPTION, supportsFullResponse, } from './sanitize.js';
9
9
  // AIDEV-NOTE: Map HTTP method to tool annotations for MCP client hinting
10
10
  function getToolAnnotations(method) {
11
11
  switch (method.toUpperCase()) {
@@ -141,7 +141,7 @@ function paramTypeToZod(param) {
141
141
  // AIDEV-NOTE: [2026-07-24] toolId opcional — tools curadas (sanitize.FULL_RESPONSE_TOOLS)
142
142
  // ganham o param full_response no schema (escape do slim). NAO injetar nas 682 (inflaria
143
143
  // o tools/list em ~20-30k tokens).
144
- function buildZodSchema(params, toolId) {
144
+ function buildZodSchema(params, toolId, confirmRequired = false) {
145
145
  const shape = {};
146
146
  let hasAccountIdInPath = false;
147
147
  for (const param of params) {
@@ -179,6 +179,12 @@ function buildZodSchema(params, toolId) {
179
179
  .optional()
180
180
  .describe(FULL_RESPONSE_DESCRIPTION);
181
181
  }
182
+ // AIDEV-NOTE: [auditoria adversus A3] ferramenta marcada no catalogo ganha o campo `confirm` —
183
+ // OPCIONAL no schema de proposito: quem cobra e o handler, com mensagem que explica o que fazer.
184
+ // Marcar required aqui devolveria erro seco de validacao, sem ensinar nada ao modelo.
185
+ if (confirmRequired) {
186
+ shape[CONFIRM_PARAM] = z.boolean().optional().describe(CONFIRM_DESCRIPTION);
187
+ }
182
188
  return z.object(shape);
183
189
  }
184
190
  // AIDEV-NOTE: Check if endpoint has any file-type params (unsupported in MCP v1)
@@ -187,7 +193,7 @@ function hasFileParam(params) {
187
193
  }
188
194
  // AIDEV-NOTE: Register a single API endpoint as an MCP tool
189
195
  function registerSingleTool(server, config, client, endpoint) {
190
- const schema = buildZodSchema(endpoint.params, endpoint.id);
196
+ const schema = buildZodSchema(endpoint.params, endpoint.id, endpoint.confirm_required);
191
197
  const annotations = getToolAnnotations(endpoint.method);
192
198
  const hasFile = hasFileParam(endpoint.params);
193
199
  // AIDEV-NOTE: Prepend file upload warning to description when endpoint needs file params
@@ -218,6 +224,22 @@ function registerSingleTool(server, config, client, endpoint) {
218
224
  }
219
225
  }
220
226
  }
227
+ // AIDEV-NOTE: [auditoria adversus A3] trava de confirmacao, ANTES de qualquer trabalho —
228
+ // ferramenta que altera o que o cliente ve na tela nao roda sem o OK explicito. Espelha a
229
+ // trava do conector remoto (runner.ts). A anotacao de destrutivo derivada do metodo HTTP
230
+ // nunca cobriu criar (POST) nem alterar (PATCH).
231
+ if (endpoint.confirm_required && params[CONFIRM_PARAM] !== true) {
232
+ return {
233
+ content: [
234
+ {
235
+ type: 'text',
236
+ text: `"${endpoint.id}" altera o que o usuario ve na tela (${endpoint.title}). ` +
237
+ 'Confirme com ele exatamente o que sera criado/alterado/apagado e reenvie com confirm:true.',
238
+ },
239
+ ],
240
+ isError: true,
241
+ };
242
+ }
221
243
  // AIDEV-NOTE: Multi-tenant — input account_id (if provided) overrides env LIONCHAT_ACCOUNT_ID.
222
244
  // Resolve and strip account_id BEFORE bucketing so it never lands in body/query for
223
245
  // endpoints that don't declare it as an explicit param.
@@ -232,6 +254,9 @@ function registerSingleTool(server, config, client, endpoint) {
232
254
  // default->body do separateParams vazaria o campo pro corpo enviado ao Rails.
233
255
  const fullResponse = params[FULL_RESPONSE_PARAM] === true;
234
256
  delete paramsWithoutAccount[FULL_RESPONSE_PARAM];
257
+ // AIDEV-NOTE: `confirm` tambem e flag do CONECTOR — stripar antes do bucketing, senao o
258
+ // catch-all default->body do separateParams mandaria o campo pro Rails.
259
+ delete paramsWithoutAccount[CONFIRM_PARAM];
235
260
  const { pathParams, queryParams, bodyParams } = separateParams(paramsWithoutAccount, endpoint.params, endpoint.body_wrapper);
236
261
  const path = substitutePath(endpoint.path, effectiveAccountId, pathParams);
237
262
  const queryStr = buildQueryString(queryParams);
@@ -307,7 +332,7 @@ function registerListCategoriesTool(server, allEndpoints) {
307
332
  // Helps LLMs build correct flow_data without hitting trial-and-error on
308
333
  // node types, action keys, source handles, etc.
309
334
  function registerFlowsSchemaReferenceTool(server) {
310
- const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-08-15)
335
+ const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-08-19)
311
336
 
312
337
  flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
313
338
 
@@ -332,7 +357,14 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
332
357
  ═══ NODE TYPES + source handles ═══
333
358
 
334
359
  ▸ start
335
- data: { label, triggers: [...] }
360
+ data: { label, items: [ {key:'<gatilho>', config:{...filtros...}} ] }
361
+ ATENCAO — a chave e "items" e o item usa "key"+"config" (corrigido 19/08/2026). NAO use
362
+ "triggers" com "type" e filtros soltos no topo: o motor ainda aceita esse formato antigo, mas o
363
+ EDITOR do FlowBuilder le SO "items" — fluxo salvo assim dispara normalmente e abre com o bloco
364
+ Inicio EM BRANCO no painel do cliente (53 fluxos de 9 contas ficaram assim ate 19/08), e um
365
+ clique em "Concluir" naquele modal apagava o gatilho em silencio. Alem do editor, o disparo por
366
+ webhook, o filtro de Campanha de Fluxo, o gatilho LionTrack e o historico de execucao tambem so
367
+ entendem "items". O app normaliza o formato antigo na gravacao, mas nao conte com isso.
336
368
  Triggers: message_received (keywords[] min 3 chars + match_type 'contains'|'exact' — dispara em
337
369
  QUALQUER msg do cliente que case), conversation_created/conversation_reopened (match_mode +
338
370
  keywords opcionais), conversation_resolved, label_added/label_removed (label_names[] — NAO
@@ -361,7 +393,7 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
361
393
  ativa na conversa; flow antigo sem config = todos os SLAs/qualquer prazo),
362
394
  date_trigger (NOVO 2026-07-10 — Gatilho de Data: dispara quando uma DATA do CONTATO chega,
363
395
  aniversario/exame; modelo agenda, sem varredura; SO flow individual). Item usa config ANINHADO:
364
- {type:'date_trigger', config:{ attr_key ('_date_of_birth'=aniversario nativo, OU chave de
396
+ {key:'date_trigger', config:{ attr_key ('_date_of_birth'=aniversario nativo, OU chave de
365
397
  atributo do contato tipo Data ex 'data_exame' — OBRIGATORIO), offset_direction 'before'|'on'|
366
398
  'after', offset_days 0-365, repeat_yearly bool (true=ignora ano/aniversario), send_time_source
367
399
  'fixed'|'attribute'|'variable' (+ send_time 'HH:MM' | send_time_attr_key | send_time_template
@@ -381,13 +413,19 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
381
413
  inbox_id pra confirmar -> campaigns_create com flow_id.
382
414
  lead_form_completed / lead_form_milestone / lead_form_abandoned (NOVOS 2026-08-15 — gatilhos
383
415
  de FORMULARIO PUBLICO, feature Formularios): disparados pelo formulario de captacao, NAO por
384
- evento de conversa (inertes no matcher). Item: {key:'lead_form_completed', lead_form_id:<id>}
385
- — lead_form_id pode ir no topo do item (caminho API/MCP) ou dentro de config (tela);
416
+ evento de conversa (inertes no matcher). Item: {key:'lead_form_completed', config:{lead_form_id:<id>}}
417
+ — desde 19/08 o app move pra dentro de "config" qualquer filtro que venha solto no topo do item,
418
+ entao mande sempre em config;
386
419
  lead_form_milestone aceita milestone_node_id (vazio = qualquer marco); lead_form_abandoned
387
420
  dispara pelo tempo de abandono configurado no formulario. SO flow individual (nunca grupo).
388
421
  O flow nasce com variaveis form_* + respostas planas (form_<slug_da_pergunta>). Ver tools
389
422
  lionchat_lead_forms_* e o resource formularios-publicos.
390
- cron, webhook. NOVO message_sent (2026-06-11): par do message_received pra mensagens de
423
+ manual_trigger (ativacao manual pelo atendente na sidebar), webhook_received (ver WEBHOOK
424
+ EMBUTIDO abaixo), page_track (LionTrack). NAO EXISTEM os gatilhos "cron" nem "webhook" — esta
425
+ referencia listava os dois por engano ate 19/08/2026 e um flow com "webhook" ficou ATIVO 26 dias
426
+ sem disparar UMA vez, em silencio; o nome certo e "webhook_received". Para disparo por data use
427
+ date_trigger; para disparo em lote, campaign_trigger + Campanha de Fluxo.
428
+ NOVO message_sent (2026-06-11): par do message_received pra mensagens de
391
429
  SAIDA (atendente, celular/eco, IA — nota privada NAO) com keywords+match_type; cuidado: acao
392
430
  'desativar IA' com esse trigger sem keywords = a propria resposta da IA dispara o flow.
393
431
  group_participant_joined / group_participant_left (NOVO 07/08 — 'Entrou no grupo' / 'Saiu do
@@ -400,7 +438,7 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
400
438
  PESSOA que entrou/saiu ('entrou no grupo -> manda no privado').
401
439
  WEBHOOK EMBUTIDO (Webhook Universal): 1) criar flow; 2) POST /custom_webhook_integrations com
402
440
  {custom_webhook_integration:{flow_id}} (idempotente, retorna URL unica); 3) flows_update com
403
- item {type:'webhook_received', config:{integration_id}} no data.items do start. Remover o item
441
+ item {key:'webhook_received', config:{integration_id}} no data.items do start. Remover o item
404
442
  desativa o webhook. Excluir flow destroi o webhook. Duplicar flow NAO copia o gatilho.
405
443
  VALIDACAO flow_trigger_conflict: criar/atualizar/ativar retorna HTTP 422
406
444
  {error_code:'flow_trigger_conflict', conflicts:[{flow_id, flow_name, trigger_type, inbox_id,
@@ -500,7 +538,13 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
500
538
  conversation_no_team (NOVO 2026-08-15: conversa SEM equipe atribuida — e o preset "Sem equipe"
501
539
  da tela; operador dedicado, sem value), conversation_has_ai_agent/conversation_no_ai_agent
502
540
  (IA ativa/inativa na conversa; not_ai_agent = sinonimo de no_ai_agent),
503
- contact_has_label/conversation_has_label,
541
+ contact_has_label/contact_no_label/conversation_has_label/conversation_no_label
542
+ (values = array de titulos ou string com virgula. ATENCAO 2026-08-18: escreva operator E
543
+ field JUNTOS — conversa usa field '{{conversation.label}}', contato usa '{{contact.label}}';
544
+ a tela reabre a regra casando o par, e condicao escrita so com operator roda certa mas
545
+ APARECE errada pro cliente. Mesma regra vale pros pares kanban_exists/kanban_in_stage
546
+ (fields '_kanban_check'/'_kanban_stage'), kanban_won/kanban_lost (field '_kanban_status') e
547
+ resposta do cliente/do atendente (fields '{{last_response}}'/'{{last_agent_response}}')),
504
548
  kanban_exists/kanban_in_stage/kanban_won/kanban_lost (funnel_id e CHAVE SEPARADA da condicao,
505
549
  numero ex funnel_id:37; a etapa vai em value=slug puro ex value:"avaliacao_aceita" ou em stage,
506
550
  NAO no formato "37:etapa"), pagetrack_visited/pagetrack_event,
@@ -560,8 +604,9 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
560
604
  add_card_offer({offer_id, use_custom_value?, custom_value?, funnel_id?, card_source?}) — adiciona
561
605
  oferta (produto/servico) ao card; offer_id de offers_list; use_custom_value:true + custom_value
562
606
  grava valor personalizado, senao usa o valor cadastrado; total do card recalcula sozinho
563
- Sistema (SO flow conversation): send_webhook({url,headers?,body?}), start_flow({flow_id}),
564
- deactivate_flow({})
607
+ Sistema (SO flow conversation): send_webhook({url,headers?,body?}), start_flow({flow_id}
608
+ — flow_id tem que ser de OUTRO flow: apontar pro proprio flow e aceito no save mas IGNORADO
609
+ EM SILENCIO na execucao, e o fluxo para ali [2026-08-18]), deactivate_flow({})
565
610
  card_source (acoes de card): 'funnel' (default, acha o card pelo funnel_id) | 'trigger' (usa o card
566
611
  que DISPAROU o flow em card_created/card_moved/card_won/card_lost). Com 'trigger' o funnel_id e
567
612
  ignorado — EXCETO create_kanban_item/move_kanban_stage (funil = DESTINO). Vale pra move_kanban_stage,
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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"}