@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.
- package/dist/docs/instructions.md +10 -3
- package/dist/docs/resources/best-practices.md +18 -0
- package/dist/docs/resources/conversation-flows.md +11 -0
- package/dist/docs/resources/data-model.md +32 -4
- package/dist/docs/resources/filtros-e-relatorios.md +44 -1
- package/dist/docs/resources/flowbuilder-design-guide.md +17 -9
- package/dist/docs/resources/flowbuilder-patterns.md +42 -15
- package/dist/docs/resources/formularios-publicos.md +309 -220
- package/dist/docs/resources/glossary.md +15 -20
- package/dist/docs/resources/reports-guide.md +150 -0
- package/dist/docs/resources/troubleshooting.md +67 -12
- package/dist/sanitize.d.ts +2 -0
- package/dist/sanitize.js +6 -0
- package/dist/sanitize.js.map +1 -1
- package/dist/tools.js +58 -13
- package/dist/tools.js.map +1 -1
- package/endpoints.json +448 -242
- package/package.json +1 -1
|
@@ -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,
|
|
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
|
|
494
|
-
`abandoned`
|
|
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
|
|
338
|
-
que nunca seriam reenviados) — é assim que se limpa o painel. Ações
|
|
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:
|
package/dist/sanitize.d.ts
CHANGED
|
@@ -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, ' +
|
package/dist/sanitize.js.map
CHANGED
|
@@ -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-
|
|
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,
|
|
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
|
-
{
|
|
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
|
-
—
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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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"}
|