@lionchat/mcp-server 1.14.0 → 1.16.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 +14 -1
- package/dist/docs/prompts/create_flow_brainstorm.json +1 -1
- package/dist/docs/prompts/customer_health.json +1 -1
- package/dist/docs/prompts/productivity_report.json +1 -1
- package/dist/docs/prompts/quality_audit.json +1 -1
- package/dist/docs/prompts/stuck_leads.json +1 -1
- package/dist/docs/prompts/team_load_balance.json +1 -1
- package/dist/docs/prompts/weekly_recap.json +1 -1
- package/dist/docs/prompts/whatsapp_template_usage.json +1 -1
- package/dist/docs/resources/api-conventions.md +19 -0
- package/dist/docs/resources/best-practices.md +9 -3
- package/dist/docs/resources/conversation-flows.md +23 -0
- package/dist/docs/resources/data-model.md +107 -23
- package/dist/docs/resources/filtros-e-relatorios.md +49 -1
- package/dist/docs/resources/flowbuilder-design-guide.md +181 -38
- package/dist/docs/resources/flowbuilder-patterns.md +35 -20
- package/dist/docs/resources/formularios-publicos.md +110 -28
- package/dist/docs/resources/glossary.md +26 -1
- package/dist/docs/resources/kanban-deep-dive.md +19 -1
- package/dist/docs/resources/reports-guide.md +186 -0
- package/dist/docs/resources/troubleshooting.md +54 -1
- package/dist/sanitize.d.ts +2 -0
- package/dist/sanitize.js +6 -0
- package/dist/sanitize.js.map +1 -1
- package/dist/tools.js +224 -45
- package/dist/tools.js.map +1 -1
- package/endpoints.json +3281 -103
- package/package.json +1 -1
|
@@ -153,6 +153,7 @@ conversa antiga que NÃO aparece no relatório de hoje (régua antiga por criaç
|
|
|
153
153
|
| "retrospectiva do ano" | `lionchat_reports_list_15` |
|
|
154
154
|
| "satisfação", "CSAT", "nota dos clientes" | `lionchat_csat_metrics` |
|
|
155
155
|
| "SLA", "cumprimento de prazo" (se a conta tiver Enterprise) | `lionchat_sla_metrics` |
|
|
156
|
+
| "quantos agendamentos", "taxa de comparecimento", "agendamentos por tipo/atendente" | `lionchat_booking_reports` (ver "Agendamentos" no fim deste guia) |
|
|
156
157
|
|
|
157
158
|
---
|
|
158
159
|
|
|
@@ -330,6 +331,11 @@ Retorna:
|
|
|
330
331
|
|
|
331
332
|
**Filtros aceitos (expostos na tool desde 2026-07-24):** `inbox_id`, `team_id`, `sla_policy_id`, `label_list[]`, `assigned_agent_id`, `since`/`until` (unix segundos).
|
|
332
333
|
|
|
334
|
+
Latência de detecção: o prazo é conferido a cada 5 min, e desde 21/08/2026 (entra com o próximo
|
|
335
|
+
deploy do app depois de 21/08/2026) as conferências saem espalhadas em até 2 min dentro do ciclo —
|
|
336
|
+
um estouro pode aparecer em `sla_list`/`sla_metrics` até ~7 min depois do horário-limite. Não é
|
|
337
|
+
defeito; não conclua "o SLA não está rodando" por isso.
|
|
338
|
+
|
|
333
339
|
## Padrões de interpretação
|
|
334
340
|
|
|
335
341
|
### Comparando períodos
|
|
@@ -526,3 +532,183 @@ Endpoints de relatório podem retornar **MUITOS** dados:
|
|
|
526
532
|
- `csat_list` sem filtro → milhares
|
|
527
533
|
|
|
528
534
|
**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).
|
|
535
|
+
|
|
536
|
+
---
|
|
537
|
+
|
|
538
|
+
## Relatórios personalizados — ler, calcular e montar (2026-08)
|
|
539
|
+
|
|
540
|
+
É a aba **Personalizados** dentro de Relatórios: o cliente monta blocos (gráficos e tabelas) e salva
|
|
541
|
+
num painel. Tudo aqui é **só administrador** — quem não for recebe **401** (não é problema de
|
|
542
|
+
conexão do conector; não mande reconectar).
|
|
543
|
+
|
|
544
|
+
| Ferramenta | Para quê |
|
|
545
|
+
|---|---|
|
|
546
|
+
| `lionchat_custom_dashboards_list` | Quais relatórios existem, já com os blocos dentro |
|
|
547
|
+
| `lionchat_custom_dashboards_widget_data` | O número de um bloco **já salvo** |
|
|
548
|
+
| `lionchat_custom_dashboards_preview_widget` | Monta um bloco **na hora** e calcula, sem salvar |
|
|
549
|
+
| `lionchat_custom_dashboards_create` | Cria um relatório que **aparece na tela do cliente** |
|
|
550
|
+
| `lionchat_custom_dashboards_update` | Altera (substitui a lista de blocos) |
|
|
551
|
+
| `lionchat_custom_dashboards_destroy` | Apaga, **sem desfazer** |
|
|
552
|
+
|
|
553
|
+
As três últimas **alteram o que o cliente vê** e só rodam com `confirm: true` — confirme com ele o
|
|
554
|
+
que exatamente vai mudar antes de reenviar.
|
|
555
|
+
|
|
556
|
+
### `preview_widget` é a ferramenta mais poderosa deste guia
|
|
557
|
+
|
|
558
|
+
Ela responde pergunta de relatório que **nenhuma outra ferramenta cobre**, porque monta o recorte na
|
|
559
|
+
hora. Exemplo real: *"quantos cards foram ganhos em cada etapa do funil 12 nos últimos 30 dias"* —
|
|
560
|
+
nenhum `reports_*` responde; aqui é `funnel_stages` + `date_basis: closed` + `status: won`.
|
|
561
|
+
|
|
562
|
+
Não é consulta livre: escolha um `widget_type` e preencha **só os campos daquele tipo**.
|
|
563
|
+
|
|
564
|
+
### Os 9 tipos de bloco
|
|
565
|
+
|
|
566
|
+
| Tipo | Campos | Recurso exigido |
|
|
567
|
+
|---|---|---|
|
|
568
|
+
| `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` | — |
|
|
569
|
+
| `entity_ranking` | `dimension` (agent/inbox/team/label) · `metric` (conversations, resolutions, avg_first_response_time, avg_resolution_time) · `time_range` | — |
|
|
570
|
+
| `csat_summary` | `time_range` | — |
|
|
571
|
+
| `sla_summary` | `time_range` | `sla` (Enterprise) |
|
|
572
|
+
| `funnel_stages` | `funnel_id` · `date_basis` (created/moved/closed/any) · `status` (all/open/won/lost) · `measure` (count padrão / value = soma do valor dos cards) · `time_range` | `kanban_board` |
|
|
573
|
+
| `stage_entries` | `funnel_id` · `measure` (count/value) · `time_range` — quantos cards DISTINTOS ENTRARAM em cada etapa no período (histórico desde 12/07/2026) | `kanban_board` |
|
|
574
|
+
| `calls_report` | `dimension` (agent/inbox) · `time_range` — ligações / atendidas / não atendidas / não concluídas / tempo total / tempo médio | — |
|
|
575
|
+
| `lead_origin` | `time_range` | `liontrack` |
|
|
576
|
+
| `agent_report` | `dimension` (agent/team/inbox) · `scope_type`+`scope_id` · `columns[]` · `time_range` | — |
|
|
577
|
+
|
|
578
|
+
`stage_entries`, `calls_report`, `measure`, `today`/`yesterday` e os metadados `title`/`width`/`height`
|
|
579
|
+
são commits de 21/08/2026 (entram com o próximo deploy do app depois de 21/08/2026); `custom` em
|
|
580
|
+
todos os tipos está no ar desde 19/08/2026.
|
|
581
|
+
|
|
582
|
+
**`time_range`:** `today`, `yesterday` (desde 21/08 — o menor período era 7 dias), `last_7_days`,
|
|
583
|
+
`last_30_days`, `this_month`, `last_month` e `custom` (com `from`/`to`, **em qualquer tipo** desde
|
|
584
|
+
19/08/2026). **A janela `custom` não pode passar de 92 dias** — o teto é da janela, não do tipo;
|
|
585
|
+
"esse ano" é recusado com a explicação. `today`/`yesterday` resolvem no fuso do `timezone_offset`
|
|
586
|
+
enviado — mande o da conta.
|
|
587
|
+
|
|
588
|
+
**Metadados do bloco (irmãos de `widget_type`, fora dos params):** `title` (nome que a pessoa dá ao
|
|
589
|
+
bloco, até 80 caracteres; vazio = o painel mostra o rótulo do tipo), `width` (1 a 4 colunas; padrão
|
|
590
|
+
2) e `height` (`normal` | `tall`). Preencha `title` em todo bloco que você criar — quatro blocos de
|
|
591
|
+
funil sem nome chegam indistinguíveis pra quem lê depois.
|
|
592
|
+
|
|
593
|
+
**Colunas do `agent_report`:** `leads`, `atendidos`, `resolvidas`, `abertas`, `pendentes`, `adiadas`,
|
|
594
|
+
`label_count` (exige `label_id`) e `conversao` (exige `denominator` e `numerator`, que é **lista de
|
|
595
|
+
IDs de etiqueta**, nunca nome de métrica).
|
|
596
|
+
|
|
597
|
+
### Como ler a resposta (campo `shape`)
|
|
598
|
+
|
|
599
|
+
| `shape` | Estrutura | Cuidado |
|
|
600
|
+
|---|---|---|
|
|
601
|
+
| `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 |
|
|
602
|
+
| `categories` | `{categories: [{label, value}]}` | `funnel_stages` vem **na ordem das etapas do funil**, nunca por valor — não reordene |
|
|
603
|
+
| `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 |
|
|
604
|
+
| `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 |
|
|
605
|
+
|
|
606
|
+
### Armadilhas que fazem o bloco sair errado
|
|
607
|
+
|
|
608
|
+
1. **`scope_type`/`scope_id` têm sentido OPOSTO por tipo.** No `conversations_timeseries` = "o
|
|
609
|
+
gráfico é só daquela entidade". No `agent_report` = "mostre só as linhas de quem é dessa
|
|
610
|
+
equipe/caixa". Confundir troca a conta inteira.
|
|
611
|
+
2. **Campo fora da lista é descartado em silêncio.** Se um valor "não fez efeito", provavelmente o
|
|
612
|
+
nome do campo está errado.
|
|
613
|
+
3. **Sempre envie `timezone_offset` em HORAS, derivado do fuso DA CONTA** (`account_show.timezone`;
|
|
614
|
+
Brasília = `-3`, Cuiabá/Campo Grande/Manaus = `-4`). Sem ele o cálculo é em UTC e o número não
|
|
615
|
+
bate com o que o cliente vê na tela.
|
|
616
|
+
4. **`update` substitui a lista de blocos inteira.** Leia com `list`, altere o array, devolva
|
|
617
|
+
completo — e preserve o `id` de cada bloco que já existia.
|
|
618
|
+
5. **`list` não pagina.** Se a resposta vier com aviso de corte, **não** use aquela lista para montar
|
|
619
|
+
um `update`: você apagaria os blocos que não chegaram.
|
|
620
|
+
6. **Recurso não liberado devolve 422 com `code: "feature_unavailable"`** — a resposta certa é "sua
|
|
621
|
+
conta não tem esse recurso", nunca "não há dados".
|
|
622
|
+
|
|
623
|
+
### Fluxo recomendado para "me monta um relatório de X"
|
|
624
|
+
|
|
625
|
+
1. `preview_widget` para **testar o desenho** e conferir que o número faz sentido.
|
|
626
|
+
2. Mostre o número ao usuário e confirme que é o que ele quer.
|
|
627
|
+
3. `create` com `confirm: true`, usando o mesmo desenho.
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Relatório personalizado como FONTE de um resumo escrito (2026-08-21)
|
|
632
|
+
|
|
633
|
+
O caso de uso: o cliente deixa um relatório montado na tela e pede *"me traz o relatório XPTO todo
|
|
634
|
+
dia"*. Em vez de garimpar dado em dez ferramentas, **leia o relatório salvo e escreva o texto**.
|
|
635
|
+
|
|
636
|
+
### O passo a passo
|
|
637
|
+
|
|
638
|
+
1. `lionchat_custom_dashboards_list` — ache o relatório pelo nome.
|
|
639
|
+
2. `lionchat_custom_dashboards_list` (ou `_show`) devolve `widgets[]`, cada um com `id`, `title`,
|
|
640
|
+
`widget_type` e os params. **É o `title` que diz o que aquele bloco é** — sem ele, quatro blocos
|
|
641
|
+
do mesmo tipo chegam indistinguíveis.
|
|
642
|
+
3. Para cada bloco: `lionchat_custom_dashboards_widget_data` com o `widget_id`.
|
|
643
|
+
**Mande sempre `timezone_offset`, lido do fuso DA CONTA** — `lionchat_account_show` devolve o
|
|
644
|
+
campo `timezone` (ex.: `America/Sao_Paulo`); converta para horas. **Não assuma -3.** O padrão da
|
|
645
|
+
plataforma é São Paulo, mas a conta pode ter outro: Mato Grosso do Sul é -4, e há cliente fora do
|
|
646
|
+
Brasil. Sem o fuso certo, o número não bate com a tela — e numa janela de UM DIA uma hora de
|
|
647
|
+
diferença joga o que aconteceu de madrugada para o dia errado.
|
|
648
|
+
4. Para um resumo DIÁRIO, mande também **`time_range: 'yesterday'`**. Isso recalcula o bloco naquela
|
|
649
|
+
janela **sem alterar o relatório salvo** — o cliente continua vendo os 30 dias dele na tela.
|
|
650
|
+
5. Escreva o texto a partir dos números. Não invente linha que o relatório não tem.
|
|
651
|
+
|
|
652
|
+
### Regras que evitam relatório mentiroso
|
|
653
|
+
|
|
654
|
+
- **Bloco sem `title`**: diga o tipo e o período em vez de adivinhar ("Etapas do funil, últimos 30
|
|
655
|
+
dias"). Nunca chute de qual médico/equipe é.
|
|
656
|
+
- **Zero é resposta, não erro.** Etapa sem card, atendente sem ligação: escreva zero. Só diga "sem
|
|
657
|
+
dado" quando a chamada falhar de verdade.
|
|
658
|
+
- **Não some blocos de janelas diferentes.** Um bloco em 7 dias e outro em 30 no mesmo relatório é
|
|
659
|
+
comum; somar os dois inventa número.
|
|
660
|
+
- **`total` do shape `table` NÃO é a soma das linhas** em toda métrica — é contagem própria. Leia o
|
|
661
|
+
que vem, não recalcule.
|
|
662
|
+
- **Recorte e métrica não são negociáveis pelo agente**: `widget_data` só aceita mudar a JANELA
|
|
663
|
+
(`time_range`/`from`/`to`/`bucket`). Se o cliente pedir "o mesmo relatório só que por caixa", isso
|
|
664
|
+
é editar o relatório (com confirmação), não um override.
|
|
665
|
+
|
|
666
|
+
### Escolher entre os dois blocos de funil (erro fácil)
|
|
667
|
+
|
|
668
|
+
| Pergunta | Bloco |
|
|
669
|
+
|---|---|
|
|
670
|
+
| "Quantos agendamentos aconteceram no período?" | `stage_entries` |
|
|
671
|
+
| "Como está o funil hoje / quantos estão em cada etapa?" | `funnel_stages` |
|
|
672
|
+
|
|
673
|
+
`funnel_stages` conta quem **está** na etapa; card que entrou e depois saiu some dele. Medido em
|
|
674
|
+
produção: **25% de diferença**. `stage_entries` lê o histórico de movimentação e conta **card
|
|
675
|
+
distinto** (quem volta pra etapa conta uma vez só).
|
|
676
|
+
|
|
677
|
+
**Limite do `stage_entries`**: o histórico só existe a partir de **12/07/2026** e tem retenção de
|
|
678
|
+
365 dias. Período que alcance antes disso devolve MENOS do que aconteceu — avise em vez de
|
|
679
|
+
apresentar o número como completo.
|
|
680
|
+
|
|
681
|
+
### Ligações (`calls_report`)
|
|
682
|
+
|
|
683
|
+
Colunas: Ligações · Atendidas · Não atendidas · **Não concluídas** · Tempo total · Tempo médio.
|
|
684
|
+
|
|
685
|
+
- "Não concluídas" são as que ficaram presas (tocando, em andamento, falhou, cancelada). **Não as
|
|
686
|
+
chame de "não atendidas"** — são coisas diferentes e a soma das três tem que fechar com o total.
|
|
687
|
+
- Tempo médio já vem calculado sobre as ATENDIDAS. Não recalcule dividindo pelo total.
|
|
688
|
+
- **Ligação sem atendente tem linha própria** e pode ser boa parte do volume (23% numa conta real).
|
|
689
|
+
Não a esconda ao resumir por pessoa.
|
|
690
|
+
- A tabela lista só quem teve ligação no período — atendente ausente da tabela fez zero.
|
|
691
|
+
|
|
692
|
+
### Agendamentos (`lionchat_booking_reports`) — 2026-08-19
|
|
693
|
+
|
|
694
|
+
`GET /api/v2/accounts/{id}/booking_reports` — a aba Relatórios > Agendamentos. Unidade = o
|
|
695
|
+
AGENDAMENTO (Booking). Params: `since`/`until` (datas; padrão 30 dias pra trás E 30 pra frente,
|
|
696
|
+
porque agenda tem futuro), `event_type_id`, `user_id` (responsável da tarefa), `status`
|
|
697
|
+
(`pending` | `completed` | `cancelled` | `snoozed`), `group_by` (`day` | `week` | `month`).
|
|
698
|
+
Resposta: `totals` (`total`, `pending`, `completed`, `cancelled`, `snoozed`, `attendance_rate`),
|
|
699
|
+
`timeline`, `by_event_type`, `by_agent`, `by_origin`.
|
|
700
|
+
|
|
701
|
+
- **`attendance_rate` = concluídos / (concluídos + cancelados)**, em %. Pendentes ficam FORA do
|
|
702
|
+
denominador (ainda não aconteceram). Não recalcule com o total.
|
|
703
|
+
- A SITUAÇÃO vem da tarefa da Agenda (`account_tasks.status`), não de `bookings.status` — quem
|
|
704
|
+
conclui/cancela pela Agenda deixa o booking parado em "confirmado". Ler `bookings_*` direto pra
|
|
705
|
+
contar "concluídos" dá zero.
|
|
706
|
+
- `snoozed` (adiado) aparece separado de `pending` de propósito.
|
|
707
|
+
|
|
708
|
+
### Faturamento (`measure`)
|
|
709
|
+
|
|
710
|
+
`measure: 'value'` faz `funnel_stages`/`stage_entries` somarem o VALOR dos cards em vez de contar.
|
|
711
|
+
Combinado com `status: 'won'` + `date_basis: 'closed'`, dá o faturamento ganho da etapa no período.
|
|
712
|
+
|
|
713
|
+
**Cuidado ao escrever**: se os cards do cliente têm valor padrão (todos com o mesmo número), a soma
|
|
714
|
+
não é faturamento — é o padrão multiplicado. Se todos os valores forem idênticos, desconfie e diga.
|
|
@@ -173,7 +173,9 @@ Feature flag específica (ex: `feature_kanban`, `feature_captain`) está OFF.
|
|
|
173
173
|
- `"private must be boolean"` — true/false, não string
|
|
174
174
|
|
|
175
175
|
### KanbanItem
|
|
176
|
-
- `"
|
|
176
|
+
- `"STAGE_HAS_ITEMS"` (no `funnels_update`) — você tentou remover uma etapa que ainda tem card;
|
|
177
|
+
`stages` na resposta diz quantos. Mova com `migrate_stage` antes. (Card criado em etapa
|
|
178
|
+
inexistente NÃO dá erro: é redirecionado — confira o `funnel_stage` devolvido.)
|
|
177
179
|
- `"conversation_display_id must exist"` — conversa não existe ou foi deletada
|
|
178
180
|
- `"position must be a positive integer"` — não pode ser negativo
|
|
179
181
|
|
|
@@ -418,6 +420,18 @@ pelo painel de suporte — só volta no botão Retomar), `cancelled` (encerrada
|
|
|
418
420
|
Enquanto uma importação está viva, o repescador de mensagens da sessão fica fora do caminho, de
|
|
419
421
|
propósito. Pausar, retomar e cancelar são ações do painel de suporte — não existem no MCP.
|
|
420
422
|
|
|
423
|
+
**A mídia vem DEPOIS do texto (desde 19-20/08/2026).** O import grava as conversas só com o texto
|
|
424
|
+
(779 conversas em ~3 min num caso real) e busca os arquivos em segundo plano, numa fila por caixa
|
|
425
|
+
com poucas vagas na instalação inteira — pode levar horas (o dono aceitou "até 24 h, contanto que
|
|
426
|
+
não atrapalhe nada"). Enquanto isso a mensagem carrega `content_attributes.media_failed` com
|
|
427
|
+
`retryable: true` (bolha âmbar "mídia chegando"); quando o arquivo chega, o selo some e o anexo
|
|
428
|
+
aparece; se o WhatsApp já apagou o arquivo (tudo com mais de ~2 semanas), o selo vira
|
|
429
|
+
`retryable: false` (vermelho, definitivo — não há repesca). `lionchat_inboxes_waha_import_status`
|
|
430
|
+
responde "ainda está chegando?": `media_pending` (arquivos na fila desta caixa; 0 = tudo pedido),
|
|
431
|
+
`media_swept_at`/`media_swept_count` (varredura final que recolocou órfãos na fila). `status:
|
|
432
|
+
completed` com `media_pending > 0` é normal — texto pronto, fotos a caminho. Conversa de histórico
|
|
433
|
+
NÃO é repescada pelo vigia de mensagens, de propósito.
|
|
434
|
+
|
|
421
435
|
### "Editei o evento no Google Calendar e não sincronizou"
|
|
422
436
|
Auto-cura desde 2026-06-09: o vigia horário re-arma o "watch" morto de conexões saudáveis
|
|
423
437
|
sozinho (sem reconectar a conta). Se persistir >1h, aí sim investigar a conexão
|
|
@@ -498,6 +512,15 @@ recusado; brasileiro com 55 e 12-13 dígitos é aceito mesmo no formato antigo s
|
|
|
498
512
|
sem erro de telefone); no import do KANBAN, telefone inválido cria o card SEM contato e SEM
|
|
499
513
|
conversa, em silêncio — comportamento diferente do import de contatos.
|
|
500
514
|
|
|
515
|
+
**Complementos de 19/08:** telefone PREENCHIDO e inválido **recusa a linha inteira** — o contato não
|
|
516
|
+
nasce (antes ele nascia mudo, sem telefone). Coluna de telefone **vazia** continua criando o contato
|
|
517
|
+
(lista de nome + e-mail é uso legítimo). **Linha totalmente vazia não é erro**: é pulada e contada em
|
|
518
|
+
`blank_rows` no resultado — planilha de 300 linhas com 2 preenchidas deixa de gerar 298 "Nome é
|
|
519
|
+
obrigatório". Telefone em notação científica do Excel (`9,88888E+12`) recebe mensagem própria
|
|
520
|
+
("formate a coluna como texto"), não "confira o DDI". No `contacts_import_validate`, o número da
|
|
521
|
+
linha no relatório é a posição REAL no arquivo (linhas vazias contam na numeração, não no total
|
|
522
|
+
conferido).
|
|
523
|
+
|
|
501
524
|
## "A caixa oficial parou de disparar / de receber" — avisos automáticos da Meta (18/08)
|
|
502
525
|
|
|
503
526
|
Duas famílias de chaves novas em `additional_attributes` da caixa `Channel::Whatsapp`
|
|
@@ -512,6 +535,15 @@ Duas famílias de chaves novas em `additional_attributes` da caixa `Channel::Wha
|
|
|
512
535
|
e `reauthorization_required` vira `true` SOZINHO. Com `reauthorization_required: true` a caixa
|
|
513
536
|
fica MUDA (descarta o que chega) até reconectar. A ausência dessas chaves NÃO prova que a caixa
|
|
514
537
|
está conectada (caixa antiga só ganha o aviso após reinscrição).
|
|
538
|
+
- **Registro do número incompleto** (20/08): `whatsapp_registration_error` (texto, a frase da
|
|
539
|
+
própria Meta — ex.: verificação em duas etapas ligada num número que veio de outra plataforma).
|
|
540
|
+
A caixa foi criada e **continua recebendo**; só o registro do número não terminou. É diferente de
|
|
541
|
+
`reauthorization_required` (esse emudece a caixa). Orientação: resolver do lado da Meta e clicar
|
|
542
|
+
em "Concluir registro" na caixa; a chave some quando o registro passa. Conectar uma caixa oficial
|
|
543
|
+
é ação de administrador e respeita o teto de caixas do plano (402 antes de abrir a janela da Meta).
|
|
544
|
+
- Reconectar uma caixa em convivência pelo botão volta a pedir o histórico de 180 dias sozinho
|
|
545
|
+
(19/08); é um tiro único por onboarding — se a Meta recusar fora da janela de 24 h, não há
|
|
546
|
+
repetição.
|
|
515
547
|
|
|
516
548
|
## "O filtro de etiqueta 'não está presente' mente" — NUNCA mentiu pela API
|
|
517
549
|
|
|
@@ -521,6 +553,17 @@ Se alguma anotação antiga disser que esse filtro mente por API, está errada.
|
|
|
521
553
|
verdade nos filtros: data FIXA com `is_greater_than`/`is_less_than` passou a cortar o dia no fuso
|
|
522
554
|
da CONTA (ver resource `filtros-e-relatorios`).
|
|
523
555
|
|
|
556
|
+
## "Mapeei o campo da integração pro atributo da conversa e nada foi gravado" (21/08 — entra com o próximo deploy do app depois de 21/08/2026)
|
|
557
|
+
|
|
558
|
+
Quatro causas, nesta ordem: (1) o evento não abriu conversa — atributo de conversa só existe na
|
|
559
|
+
conversa que a automação/fluxo mapeado cria (contato sozinho não tem onde gravar); (2) a chave é
|
|
560
|
+
reservada (`imported_from`, `type`, `captain_*`... — lista em `api-conventions`) e foi recusada;
|
|
561
|
+
(3) o valor não é do TIPO do atributo (texto num campo de Número, data em formato estranho) e foi
|
|
562
|
+
descartado — o log do servidor tem `[IntegrationAttributes] ... tipo_invalido=[...]`; (4) nos
|
|
563
|
+
gateways, a chave não está em `conversation_attribute_keys` daquele evento (a granularidade é por
|
|
564
|
+
evento: "compra aprovada" e "carrinho abandonado" gravam listas diferentes). Gravar por integração é
|
|
565
|
+
silencioso: não espere automação nem webhook de saída reagindo ao atributo.
|
|
566
|
+
|
|
524
567
|
## Quando reportar pro suporte
|
|
525
568
|
|
|
526
569
|
Reporte se:
|
|
@@ -533,3 +576,13 @@ NÃO precisa reportar:
|
|
|
533
576
|
- 4xx (você fez algo errado)
|
|
534
577
|
- Rate limit (esperado)
|
|
535
578
|
- 404 de recurso deletado
|
|
579
|
+
|
|
580
|
+
## Conector REMOTO "conecta e desconecta" a cada ~6 minutos (Claude Code / VS Code / Codex ligados direto)
|
|
581
|
+
|
|
582
|
+
Vale SÓ para o conector remoto (`mcp.lionchat.com.br`). O conector local (npm, stdio) não tem canal de rede.
|
|
583
|
+
Sintoma: `/mcp` alterna connected/disconnected a cada ~6 min; nenhuma chamada falha.
|
|
584
|
+
Causa (21/08/2026): o cliente segura um canal GET esperando avisos do servidor; o Cloudflare derruba
|
|
585
|
+
qualquer resposta que fique 125 s sem um byte (Proxy Read Timeout). Quem usa pela claude.ai/ChatGPT não
|
|
586
|
+
abre esse canal e nunca vê isso.
|
|
587
|
+
Correção (v1.15.1): o servidor manda um `ping` a cada 30 s enquanto o canal está aberto.
|
|
588
|
+
Interruptor: `MCP_KEEPALIVE_INTERVAL_MS` (0 = desligado). Detalhe: `docs/plans/mcp-keepalive-cloudflare/`.
|
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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"}
|