@lionchat/mcp-server 1.26.1 → 1.28.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.
@@ -396,6 +396,26 @@ trava a criação.
396
396
 
397
397
  **NUNCA sobrescreva por inferência dados já preenchidos.** Em especial, **NUNCA sobrescreva telefone ou e-mail existente de um contato** — se já há valor preenchido, pergunte antes de alterar.
398
398
 
399
+ **O cliente mudou de número? NÃO é `lionchat_contacts_update`.** Trocar `phone_number` por lá muda o
400
+ que aparece na tela e **não redireciona as mensagens**: o endereço de entrega vem do crachá de cada
401
+ caixa e de um cache por contato, não da ficha. Medido em 01/10/2026 — depois de editar só a ficha, todas
402
+ as conversas seguiam enviando para o número ANTIGO nos dois canais de WhatsApp, sem erro nenhum.
403
+
404
+ | Situação | Tool |
405
+ |---|---|
406
+ | A pessoa **mudou de número** | `lionchat_contacts_change_phone` |
407
+ | **Corrigir erro de digitação** no cadastro de quem nunca conversou | `lionchat_contacts_update` |
408
+
409
+ `lionchat_contacts_change_phone` mantém a mesma conversa, acerta o endereço nas duas caixas de WhatsApp,
410
+ escreve uma pílula registrando a mudança e limpa a marca "não tem WhatsApp" do número antigo. Recusa
411
+ quando o número é o mesmo, é inválido, o contato é um **grupo**, ou o número já pertence a outra ficha
412
+ (devolve 409 dizendo de quem é).
413
+
414
+ **Quando o número já é de outra ficha:** o parâmetro `merge_with` junta as duas e troca numa operação
415
+ só — mas **apaga** a outra ficha e **não tem como desfazer**. Antes de usar, chame
416
+ `lionchat_contact_merge_preview`, **mostre ao usuário o que será descartado e espere a confirmação
417
+ dele**. Nunca use `merge_with` por conta própria.
418
+
399
419
  ## 8. Índice de roteamento (intenção → tool certa)
400
420
 
401
421
  Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da direita. Erros comuns aqui levam a ações de escrita disfaradas de leitura.
@@ -427,6 +447,12 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
427
447
  | Mensagem pra OUTRO AGENTE (não cliente) | `lionchat_internal_chat_*` (salas e mensagens do time) | NÃO confundir com nota privada (dentro da conversa do cliente) |
428
448
  | Achar contato pelo que aconteceu com ele (conversa/card) | `lionchat_contacts_filter` com `linked_records` | Ver api-conventions → registros vinculados |
429
449
  | **Origem dos leads** (de onde vieram, por plataforma/campanha/conjunto) | `lionchat_lead_origin_reports` | Relatório de leitura; filtros `platform`/`campaign`/`adset`; `won` = cards em Ganho; leads únicos por telefone |
450
+ | **Leads que chegaram sem origem reconhecida** (o link do anúncio está errado) | `lionchat_lead_origins_unrecognized` | Leitura. Diz quantos leads, qual VALOR chegou e em qual CAMPO (anúncio de WhatsApp, Meta Lead, `utm_source`, LionTrack). `field: null` = não sabemos o campo: NÃO chute, diga só o total. Traz também `field_map`, a tabela Meta/Google/TikTok |
451
+ | Transformar um valor não reconhecido em **origem própria** | `lionchat_lead_origins_adopt_unrecognized` (`platform` + `name`) | Cria a origem E ensina o sistema a reconhecer aquele valor de agora em diante. NÃO reprocessa os leads antigos. Só aceita `platform` que começa com `other:` |
452
+ | **Tirar do aviso** um valor não reconhecido | `lionchat_lead_origins_dismiss_unrecognized` (`platform`) | Para quando é erro mesmo e não interessa. Não mexe em lead nenhum; some da lista |
453
+ | **UTMs que o cliente inventou** e já estão chegando | `lionchat_lead_origins_custom_utms` | Leitura: chave, quantos leads, exemplos de valor e se já é acompanhada. Teto de 10 acompanhadas por conta (as 5 de sempre + `utm_id` não contam) |
454
+ | **Passar a acompanhar** uma UTM inventada | `lionchat_lead_origins_track_custom_utm` (`key` = `utm_<algo>`) | Vira atributo personalizado de CONVERSA (ganha filtro, segmento, público de campanha, automação e fluxo) e PREENCHE até 200 conversas que já tinham o valor guardado. Recusa com 422 se o formato for inválido, já existir ou estourar o teto |
455
+ | **Parar de acompanhar** uma UTM | `lionchat_lead_origins_untrack_custom_utm` (`key`) | Remove só o CAMPO. Os valores já gravados nas conversas FICAM e voltam a aparecer se for acompanhada de novo |
430
456
  | **Bloquear/desbloquear** contato | `lionchat_conversations_toggle_block` (`blocked: true|false`) | Gera pílula de atividade e descarta mensagens futuras do contato; NÃO resolve a conversa |
431
457
  | **Importar histórico** de caixa WhatsApp Cloud (QR) | `lionchat_inboxes_whatsapp_history_start` / `_status` / `_cancel` | Admin-only + flag `qr_history_import`; só caixa oficial. Acompanhe `state` no `_status` |
432
458
  | Ver / limpar **falhas de envio** de uma caixa | `lionchat_inboxes_failed_messages_summary` primeiro; depois `_bulk_retry` (reenviar) ou `_bulk_cancel` (descartar) | Admin-only. Reenvio em massa e cancelamento em massa são ações irreversíveis: mostre as contagens do summary e confirme (seção 7a/7b). Numa mensagem só: `lionchat_conversations_messages_create_1` (reenviar) / `lionchat_conversations_messages_cancel_retry` (cancelar) |
@@ -463,6 +463,22 @@ Meta só aceita isso num **dataset vinculado à WABA**, nunca no pixel do site (
463
463
  `lionchat:caixa_sem_token`, `lionchat:dataset_id_invalido`, `lionchat:desligado_pelo_cliente`,
464
464
  `lionchat:nome_sem_equivalente_whatsapp`; da Meta: `"<subcode>: <mensagem>"` (ex.: 2804087 = clique
465
465
  do anúncio inválido/expirado).
466
+ - **Caixa QR Code (WhatsApp não oficial) atribui campanha pelo MESMO caminho que a oficial** (desde
467
+ 01/10/2026). A identidade do negócio é a **Página do Facebook que rodou o anúncio** no lugar da
468
+ conta do WhatsApp Business (que caixa de QR Code não tem), e o evento vai para o pixel que a conta
469
+ já usa. Vale a régua normal: `degraded=true` + `fallback_reason` + `action_source`.
470
+ `action_source: business_messaging` = saiu como anúncio de WhatsApp; `website` = saiu como site.
471
+ **É um evento só** — quando a Meta recusa o de mensagem, ele é reenviado como site
472
+ automaticamente, e o motivo fica em `fallback_reason`.
473
+ **Motivo mais comum nessa caixa:** `"2804065: ..."` — a Página do anúncio não está vinculada ao
474
+ conjunto de dados. O cliente resolve sozinho no Gerenciador de Eventos da Meta (abrir o conjunto de
475
+ dados > Configurações > Dados vinculados > conectar a Página). Cabe **uma** Página por conjunto de
476
+ dados. Outros: `"2804072: ..."` (clique e Página de anúncios diferentes) e `"2804087: ..."` (clique
477
+ inválido ou expirado).
478
+ **NÃO existe mais** `qr_page_attribution` na resposta, nem os motivos `dataset_indisponivel`,
479
+ `sem_pagina_do_anuncio`, `pagina_sem_conexao` e `dataset_e_o_proprio_pixel`: o desenho de 30/09 que
480
+ criava um conjunto de dados próprio para a Página foi removido em 01/10 (exigia a permissão
481
+ `page_events`, que o aplicativo só tem em acesso padrão, e entregou zero em produção).
466
482
  - Recusa ao vincular (422 com `subcode`, ex.: 2804116 / "whatsapp_business_manage_events"): a chave da
467
483
  caixa não tem a permissão — reconectar a caixa pelo Cadastro Incorporado da Meta; nunca pedir o token
468
484
  do pixel para isso. Um 401/403 da caixa NUNCA desliga o pixel da conta (site, formulário e agenda
@@ -559,6 +575,13 @@ com uma única agenda liberada ela assume essa; com duas ou mais, recusa nomeand
559
575
  restringir quais agendas a IA oferece, continua valendo `captain_assistants_update` com
560
576
  `config.booking_event_type_ids`.
561
577
 
578
+ **1-A. Quem limita a busca de horário é o DONO, não a IA (01/10/2026).** A janela de busca sai do
579
+ `max_advance_days` do tipo de agendamento; sem limite configurado, vale o teto de 30 dias. A IA não
580
+ consegue mais encurtar essa busca: ela varre dia a dia até achar vaga ou bater no limite. Consequência
581
+ para quem configura pelo conector: se a IA está dizendo que "não há horário", o número a conferir é o
582
+ `max_advance_days` do tipo (`lionchat_booking_event_types_update`), não o comportamento da IA. Agenda com
583
+ vaga só daqui a 20 dias e janela configurada em 7 nunca oferece nada.
584
+
562
585
  **2. A IA entrega o link do Meet sozinha.** O link do Google Meet não existe no instante em que o
563
586
  agendamento é criado (nasce depois da ida ao Google), e antes a IA prometia o link e nunca voltava.
564
587
  Agora o sistema arma uma volta de ~25s; sem link ainda, ele remarca sozinho (+40s) sem gastar turno
@@ -78,7 +78,7 @@ Todo node tem essa estrutura base:
78
78
  - `conversation_attribute_changed` / `card_attribute_changed` (novo 2026-07-08): disparam na VIRADA de um atributo (da CONVERSA ou do CARD do kanban) pro valor que casa — RE-ENTRAM toda vez que o atributo muda pro valor alvo. Config: `{ "logic": "and"|"or", "rules": [ { "attr_key": "...", "operator": "...", "value": "..." } ] }` (uma rule pode usar `values: [...]` no lugar de `value` pra multi-valor). O `attrSource` é IMPLÍCITO pela chave do gatilho (conversa vs card) — NÃO informe. Operadores (contexto REATIVO — desde 09/07 `is_empty`/`is_not_empty` NÃO valem aqui, pois "está vazio AGORA" dispararia a cada evento; use-os só no nó Condição): `equal`/`not_equal`/`contains`/`not_contains`/`starts_with`/`ends_with`/`greater_than`/`less_than`/`number_range`. Só `card_attribute_changed` aceita `funnel_id`/`card_source` opcionais dentro da rule (pra achar o card). Rule sem `attr_key` é ignorada.
79
79
  - `contact_attribute_changed` (novo 2026-07-22 — "Atributo do contato muda"): dispara quando um atributo personalizado do **CONTATO** muda e a condição casa — mesmo com o contato fora de flow. Item: `{ "key": "contact_attribute_changed", "config": { "logic": "and"|"or", "rules": [ { "attrSource": "contact", "attr_key": "...", "operator": "...", "value": "..." } ] } }` (1 a 10 rules; `values: [...]` pra multi-valor). **DIFERENTE dos irmãos de 08/07: aqui o `attrSource` VAI na rule e é SEMPRE `"contact"`.** Operadores iguais aos do nó Condição. **VERSÃO SEGURA por decisão de produto:** dispara SÓ na conversa mais recente que JÁ EXISTE numa caixa do flow (reabre se resolvida); contato sem conversa NÃO dispara e NUNCA cria conversa. Dedup de 30s por contato + anti-loop por profundidade de cadeia (flow que muda atributo que dispara flow…). Só flows de conversa.
80
80
 
81
- - `date_trigger` — **Gatilho de Data (novo 2026-07-10):** dispara quando uma DATA guardada na ficha do CONTATO chega (aniversário, data de exame, vencimento de plano). Modelo "agendamento de mensagem": a escrita da data já marca o disparo — NÃO existe varredura periódica. Só em flow `conversation` **individual** (a data é de um contato; grupo não tem). Config (item usa `config` ANINHADO, igual `webhook_received`/`attribute_changed`):
81
+ - `date_trigger` — **Gatilho de Data (novo 2026-07-10):** dispara quando uma DATA guardada na ficha do CONTATO chega (aniversário, data de exame, vencimento de plano). Modelo "agendamento de mensagem": a escrita da data já marca o disparo — NÃO existe varredura periódica. Vale em flow `conversation` **individual e de GRUPO** (liberado em 29/09/2026, cartão 1297): no flow de grupo a data sai do contato-grupo (que tem atributos próprios) ou, com `attr_source='conversation'`, do atributo da conversa do grupo. O motor barra o cruzamento — data de pessoa NÃO acorda flow de grupo e vice-versa (`FiringDispatchService#matches_conversation_mode?`, skip `modo_da_conversa`). Config (item usa `config` ANINHADO, igual `webhook_received`/`attribute_changed`):
82
82
  ```json
83
83
  { "key": "date_trigger", "config": {
84
84
  "attr_key": "_date_of_birth", // "_date_of_birth" = Aniversário nativo; OU a chave de um atributo do contato do tipo Data (ex.: "data_exame")
@@ -447,7 +447,7 @@ campanha"):
447
447
  `lead_form` (Formulário), `organic` (Orgânico), `direct` (Direto), `referral` (Indicação), `manual` (Origem
448
448
  cadastrada). O painel mostra o rótulo em português, mas a comparação é pelo VALOR — `"Anúncio"` nunca casa.
449
449
  - `origin_platform` (e first/last): `facebook`, `instagram`, `google`, `tiktok`, `linkedin`, `youtube`,
450
- `whatsapp`, `direct` — e, para origem cadastrada pelo cliente em Configurações > Origens de Lead,
450
+ `whatsapp`, `email`, `messenger`, `audience_network` (Rede de parceiros da Meta, desde 29/09/2026), `direct` — e, para origem cadastrada pelo cliente em Configurações > Origens de Lead,
451
451
  `custom:<slug>` (slug = nome parametrizado, ex.: "Indicação de amigo" → `custom:indicacao-de-amigo`;
452
452
  liste com `lionchat_lead_origins_list`). Para filtrar por uma origem cadastrada use `origin_platform`
453
453
  com `contains` + uma palavra do slug, ou `equal` + o `custom:<slug>` completo.
@@ -1117,7 +1117,7 @@ Na tela o usuário escolhe o TIPO (Conversa / IA Agente / Ações) e, só no tip
1117
1117
  |---|---|---|
1118
1118
  | Node `update_group` (Gestão de Grupos — WAHA) | disponível se a conta tem caixa QR Code — exige `groupInboxId` | disponível; `groupInboxId` opcional (padrão = grupo da conversa) |
1119
1119
  | Gatilhos e condições de **LionTrack** (visita de página / evento do site) | disponíveis | **NÃO** (grupo não tem um contato único navegando) |
1120
- | Gatilho `date_trigger` (data do contato) | disponível | **NÃO** (grupo não tem um contato único) |
1120
+ | Gatilho `date_trigger` (data do contato) | disponível | disponível desde 29/09/2026 (data do contato-grupo, ou da conversa do grupo com `attr_source='conversation'`) |
1121
1121
  | Todos os outros nodes (`send_message`, `wait_response`, `condition`, `action`, `api`, `ai`, `set_variable`, `wait`, `randomizer`, `note`, `end`) | iguais | iguais |
1122
1122
 
1123
1123
  Regras práticas ao montar via API:
@@ -514,7 +514,7 @@
514
514
 
515
515
  ## 16. Feliz aniversário (Gatilho de Data)
516
516
 
517
- **Caso:** manda uma mensagem de parabéns todo ano no aniversário do contato, às 09:00, pela caixa onde ele conversa. Usa o gatilho `date_trigger` (dispara na data, sem varredura). Só flow **individual**.
517
+ **Caso:** manda uma mensagem de parabéns todo ano no aniversário do contato, às 09:00, pela caixa onde ele conversa. Usa o gatilho `date_trigger` (dispara na data, sem varredura). Vale em flow **individual e de grupo** — no de grupo a data é do próprio grupo (contato-grupo ou atributo da conversa).
518
518
 
519
519
  ```json
520
520
  {
@@ -514,6 +514,14 @@ cards daquele funil).
514
514
  - **Plano B** (`fallback_reason` no `meta_capi_events`): o evento de anúncio saiu como SITE. O motivo
515
515
  fica gravado (`lionchat:*` nosso ou `"<subcode>: <mensagem>"` da Meta); na tela é o selo âmbar
516
516
  "site (plano B)" e o filtro "Só plano B" (`degraded=true` na API).
517
+ - **Atribuição de campanha em caixa QR Code** (desde 2026-10-01): caixa de QR Code não tem conta do
518
+ WhatsApp Business, então a identidade do negócio no evento é a **Página do Facebook que rodou o
519
+ anúncio** (`page_id` no `user_data`), e o destino é o pixel que a conta já usa. Daí em diante vale
520
+ a régua normal: `action_source` diz se saiu como `business_messaging` ou `website`, e
521
+ `fallback_reason` diz por que degradou. **Um evento por conversão** — nunca dois.
522
+ Para a campanha contar, o cliente precisa ter vinculado a Página ao conjunto de dados no
523
+ Gerenciador de Eventos da Meta; sem isso a recusa é `2804065` e o evento sai como site.
524
+ O campo `qr_page_attribution`, que existiu entre 30/09 e 01/10/2026, **não existe mais**.
517
525
 
518
526
  ## Idiomas da plataforma (2026-06)
519
527
 
@@ -528,6 +528,63 @@ viraram conversa). É um relatório de LEITURA puro — não cria nem altera nad
528
528
  **Perguntas que esse relatório responde:** "qual plataforma trouxe mais leads?", "qual campanha/
529
529
  conjunto converteu melhor?", "quantos leads únicos vieram esse mês e quantos fecharam?".
530
530
 
531
+ **Valores de `platform`:** `facebook`, `instagram`, `google`, `tiktok`, `linkedin`, `email`, `messenger`,
532
+ `audience_network` (Rede de parceiros da Meta), `twitter`, `youtube`, `whatsapp`, `direct`, `custom:<slug>`
533
+ (origem cadastrada pela conta) e `other:<palavra>` (quando o `utm_source` do link não é uma plataforma conhecida).
534
+
535
+ ### Lead de anúncio da Meta aparece como `other:...` ou Orgânico (2026-09-29)
536
+
537
+ Em anúncio da Meta que leva ao SITE, a plataforma e o tipo saem dos parâmetros do link (`utm_*`). Se o
538
+ gestor de tráfego montou o link de outro jeito (ex.: nome da campanha no `utm_source`), o lead cai como
539
+ `other:<primeira palavra>` e `organic`, mesmo tendo vindo de anúncio pago. Caso real: conta 174, 27 leads
540
+ como `other:[fh]` em setembro. O conserto é do lado do anúncio: no Gerenciador de Anúncios da Meta, no
541
+ nível do ANÚNCIO, campo "Parâmetros de URL", colar
542
+
543
+ `utm_source={{site_source_name}}&utm_medium=paid&utm_campaign={{campaign.name}}&utm_content={{adset.name}}&utm_term={{ad.name}}`
544
+
545
+ A Meta preenche `{{site_source_name}}` com `ig`, `fb`, `msg` ou `an`, que viram `instagram`, `facebook`,
546
+ `messenger` e `audience_network`. O LionChat lê `utm_content` como Conjunto e `utm_term` como Criativo (o
547
+ modelo comum da internet inverte os dois). O mesmo texto, com botão de copiar, está na tela
548
+ Configurações > Integrações > Meta Conversions API, bloco "Configurar o rastreio dos anúncios da Meta".
549
+ Leads que já entraram não mudam sozinhos; para corrigir um a um use `lionchat_conversations_set_origin`.
550
+ Anúncio que abre direto o WhatsApp não precisa disso (os dados chegam pelo `ctwa_*`).
551
+
552
+ ### Google Ads: o mesmo campo passou a dizer a mesma coisa que na Meta (2026-09-29)
553
+
554
+ Até 29/09 o campo **Criativo** mostrava o nome do anúncio na Meta e a **palavra pesquisada** no Google —
555
+ quem somasse os dois num relatório somava coisas diferentes. Hoje as duas plataformas alimentam os mesmos
556
+ campos, e a palavra-chave ganhou lugar próprio.
557
+
558
+ | No link | Vira no LionChat | Meta | Google Ads | TikTok Ads |
559
+ |---|---|---|---|---|
560
+ | `utm_source` | Plataforma | `{{site_source_name}}` | `google` | `tiktok` |
561
+ | `utm_medium` | Tipo (pago/orgânico) | `paid` | `cpc` | `paid` |
562
+ | `utm_campaign` | Campanha | `{{campaign.name}}` | `{campaignid}` | `__CAMPAIGN_NAME__` |
563
+ | `utm_content` | Conjunto | `{{adset.name}}` | `{adgroupid}` | `__AID_NAME__` |
564
+ | `utm_term` | Criativo | `{{ad.name}}` | `{creative}` | `__CID_NAME__` |
565
+
566
+ A tabela viva está em Configurações > Origens de Lead e sai de uma fonte única no servidor. **TikTok é só
567
+ referência de como montar o link — não há integração com ele.** O Google entrega apenas CÓDIGO: o
568
+ ValueTrack não tem `{campaignname}`, então ali aparece número onde a Meta mostra nome.
569
+
570
+ **O modelo do Google começa com `{lpurl}`, nunca com o endereço do site.** `{lpurl}` é o marcador que o
571
+ próprio Google troca pela página do anúncio no clique — serve para a campanha inteira e não há nada para
572
+ editar. Colar o endereço no lugar dele faz o link chegar duplicado, e a doc do Google diz que a página
573
+ quebra. Aconteceu em produção com quem seguiu a versão anterior da tela.
574
+
575
+ **Os 9 dados do Google viraram atributos de conversa** e por isso agora dão para filtrar, segmentar e usar
576
+ como público de campanha (antes apareciam no painel e eram invisíveis para tudo isso): `google_keyword`
577
+ (Palavra-chave), `google_match_type`, `google_device`, `google_network`, `google_placement`,
578
+ `google_ad_position`, `google_campaign_id`, `google_adgroup_id`, `google_creative_id`.
579
+
580
+ **A palavra-chave só existe em campanha de BUSCA.** Medido na produção em 29/09: 39% dos cliques são
581
+ Performance Max, onde o Google não informa palavra-chave, conjunto nem anúncio — nesses a linha vem vazia,
582
+ e isso é do Google, não do LionChat. Em busca ela chega normalmente.
583
+
584
+ Para isso funcionar o **LionTrack precisa estar instalado no site**: é ele que captura esses parâmetros do
585
+ endereço e entrega ao LionChat quando a pessoa chama no WhatsApp. Sem ele chega só o identificador do
586
+ clique (`gclid`).
587
+
531
588
  ### Atributos de anúncio (`ctwa_*`) — dois novos e nomes alinhados (2026-08-01)
532
589
 
533
590
  Conversa que veio de anúncio "Clique para WhatsApp" carrega atributos `ctwa_*` (`ctwa_campaign_name`,
@@ -617,6 +617,42 @@ abre esse canal e nunca vê isso.
617
617
  Correção (v1.15.1): o servidor manda um `ping` a cada 30 s enquanto o canal está aberto.
618
618
  Interruptor: `MCP_KEEPALIVE_INTERVAL_MS` (0 = desligado). Detalhe: `docs/plans/mcp-keepalive-cloudflare/`.
619
619
 
620
+ ## Conector REMOTO parou de funcionar e só volta reconectando na mão — CORRIGIDO na v1.27.0
621
+
622
+ Vale SÓ para o conector remoto (`mcp.lionchat.com.br`). O conector local (npm, stdio) nunca teve isso.
623
+
624
+ Sintoma, como o cliente relata: *"o MCP caiu"*, *"deu Server not initialized"*, *"parou de responder e
625
+ só voltou quando eu desconectei e conectei o conector de novo"*. Todas as chamadas falham, não só
626
+ algumas, e **não volta sozinho** — nem esperando, nem fechando e abrindo o chat. O que resolve é ir em
627
+ Conectores e reconectar.
628
+
629
+ Causa (até a v1.26.1): o servidor guardava cada conexão **na memória**. Quando o pod reiniciava (deploy,
630
+ troca de nó, queda de máquina), a memória ia embora e o pedido seguinte do cliente recebia
631
+ `400 Server not initialized`. O programa do cliente trata só 401/403/405 e **desiste em definitivo** com
632
+ qualquer outro código — ele nunca descarta o número de sessão por conta própria. Daí o "só volta
633
+ reconectando": reconectar é o único jeito de ele pedir um número novo.
634
+ Caso real (01/10/2026): um cliente levou **28 recusas em 2 minutos** e ficou sem o MCP até alguém
635
+ reconectar; ninguém foi avisado de nada.
636
+
637
+ Correção (v1.27.0, 01/10/2026): o servidor não guarda mais sessão — cada pedido se resolve sozinho com
638
+ as credenciais que já vêm nele. O número de sessão antigo passa a ser ignorado em vez de recusado, e o
639
+ reinício do pod fica invisível para quem está usando.
640
+
641
+ O que NÃO mudou, para quem perguntar:
642
+ - A conta em que a IA age continua a mesma (a escolha do `lionchat_switch_account` é guardada e lida em
643
+ todo pedido novo). **Mudou um detalhe:** a conta escolhida agora vale para TODAS as janelas daquela
644
+ pessoa. Antes, cada janela tinha a sua — mas só até a próxima reconexão, que acontece sozinha a cada
645
+ poucos minutos, e então herdava a da outra. Era imprevisível, não isolamento.
646
+ - O catálogo do ChatGPT (modo enxuto, 35 ferramentas na vitrine + o balcão que alcança as 935) é idêntico.
647
+ - O `ping` de 30 s contra o corte do Cloudflare continua ativo (seção acima).
648
+
649
+ Interruptor: `MCP_STATELESS` (`off` volta ao modo antigo, com sessão). Nasce ligado.
650
+ Detalhe e medições: `docs/plans/mcp-sessao-sobrevive-reinicio/design.md` no repo `lionchat-mcp-remote`.
651
+
652
+ **Se o sintoma voltar na v1.27.0 ou depois, NÃO é esta causa** — era por construção, e há rede de teste
653
+ cobrindo. Procurar outra: token expirado (401), conector apontando para endereço errado, ou o canal de
654
+ avisos sendo cortado (seção acima).
655
+
620
656
  ## "O grupo não recebeu o resumo diário" (Avisos de relatório) — 27/08
621
657
 
622
658
  Diagnóstico em 2 passos: `lionchat_report_alerts_list` (colunas `last_delivery_status`/`last_error`
package/dist/tools.js CHANGED
@@ -346,7 +346,7 @@ function registerListCategoriesTool(server, allEndpoints) {
346
346
  // Helps LLMs build correct flow_data without hitting trial-and-error on
347
347
  // node types, action keys, source handles, etc.
348
348
  function registerFlowsSchemaReferenceTool(server) {
349
- const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-09-17)
349
+ const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-09-29)
350
350
 
351
351
  flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
352
352
 
@@ -423,14 +423,19 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
423
423
  sla_type:'any'|'frt'|'nrt'|'rt'}} — vazio/'any' = qualquer politica / qualquer prazo; frt =
424
424
  1a resposta, nrt = resposta ao cliente, rt = resolucao. NAO re-dispara se o flow ja tem sessao
425
425
  ativa na conversa; flow antigo sem config = todos os SLAs/qualquer prazo),
426
- date_trigger (NOVO 2026-07-10 — Gatilho de Data: dispara quando uma DATA do CONTATO chega,
427
- aniversario/exame; modelo agenda, sem varredura; SO flow individual). Item usa config ANINHADO:
428
- {key:'date_trigger', config:{ attr_key ('_date_of_birth'=aniversario nativo, OU chave de
429
- atributo do contato tipo Data ex 'data_exame' — OBRIGATORIO), offset_direction 'before'|'on'|
430
- 'after', offset_days 0-365, repeat_yearly bool (true=ignora ano/aniversario), send_time_source
431
- 'fixed'|'attribute'|'variable' (+ send_time 'HH:MM' | send_time_attr_key | send_time_template
432
- Liquid so-contato), inbox_mode 'contact_recent'|'fixed' (+ inbox_id obrigatorio se fixed),
433
- filters {logic,rules[...]} opcional (attrSource sempre 'contact') }}. trigger_uuid e preenchido
426
+ date_trigger (NOVO 2026-07-10 — Gatilho de Data: dispara quando uma DATA chega,
427
+ aniversario/exame/entrega; modelo agenda, sem varredura). Vale em flow individual E DE GRUPO
428
+ (liberado 2026-09-29): no de grupo a data e do contato-grupo, ou da conversa do grupo com
429
+ attr_source 'conversation'. O motor barra o cruzamento — data de PESSOA nunca acorda flow de
430
+ grupo e data de GRUPO nunca acorda flow de mensagem (skip 'modo_da_conversa'). Item usa config
431
+ ANINHADO: {key:'date_trigger', config:{ attr_source 'contact' (padrao) | 'conversation',
432
+ attr_key ('_date_of_birth'=aniversario nativo, OU chave de atributo tipo Data ex 'data_exame';
433
+ com attr_source 'conversation' e a chave do atributo DA CONVERSA — OBRIGATORIO),
434
+ offset_direction 'before'|'on'|'after', offset_days 0-365, repeat_yearly bool (true=ignora
435
+ ano/aniversario), send_time_source 'fixed'|'attribute'|'variable' (+ send_time 'HH:MM' |
436
+ send_time_attr_key | send_time_template Liquid so-contato), inbox_mode 'contact_recent'|'fixed'
437
+ (+ inbox_id obrigatorio se fixed), filters {logic,rules[...]} opcional (attrSource sempre
438
+ 'contact') }}. trigger_uuid e preenchido
434
439
  pelo backend (NAO envie). 29/02 vira 28/02 em ano nao-bissexto; tolerancia 24h; ativar o flow
435
440
  agenda quem ja tem a data; pulos aparecem em flows_executions_list.
436
441
  campaign_trigger (NOVO 2026-07-28 — Gatilho 'Campanha'): AUTORIZACAO, nao evento. Sozinho
@@ -689,7 +694,7 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
689
694
  VALORES FECHADOS de origin_kind (e first/last): paid_ad (Anuncio), lead_form (Formulario), organic
690
695
  (Organico), direct (Direto), referral (Indicacao), manual (Origem cadastrada) — compara pelo VALOR, nunca
691
696
  pelo rotulo ("Anuncio" nunca casa). origin_platform: facebook, instagram, google, tiktok, linkedin, youtube,
692
- whatsapp, direct, e origem cadastrada pelo cliente = 'custom:<slug>' (ex 'custom:indicacao-de-amigo';
697
+ whatsapp, email, messenger, audience_network (Rede de parceiros da Meta), direct, e origem cadastrada pelo cliente = 'custom:<slug>' (ex 'custom:indicacao-de-amigo';
693
698
  lionchat_lead_origins_list) — filtre com contains + palavra do slug ou equal + 'custom:<slug>'.
694
699
  Caso real (Cast 01/09): "Ativar IA so para lead de anuncio" = cond_0 {origin_kind equal values:['paid_ad']}
695
700
  -> assign_captain; default sem nada.
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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"}
package/endpoints.json CHANGED
@@ -290,7 +290,7 @@
290
290
  "method": "PATCH",
291
291
  "path": "/api/v1/accounts/{account_id}/contacts/{id}",
292
292
  "title": "Atualizar Contato",
293
- "description": "Atualiza um contato. Aceita name, email, phone_number, identifier, custom_attributes, additional_attributes, blocked, avatar/avatar_url. NUNCA sobrescreva phone_number/email ja preenchido sem confirmacao. TELEFONE UNICO POR CONTA (trava no banco desde 01/09/2026): trocar phone_number para um numero que ja e de outro contato da conta = 422 'phone_number has already been taken'. EMPRESA (2026-09-25): aceita company_id (ver param); o contato devolve company_id. Cargo da pessoa = additional_attributes.job_title.",
293
+ "description": "Atualiza um contato. Aceita name, email, phone_number, identifier, custom_attributes, additional_attributes, blocked, avatar/avatar_url. NUNCA sobrescreva phone_number/email ja preenchido sem confirmacao. ATENCAO — TROCAR DE NUMERO NAO E AQUI: mudar `phone_number` por esta rota muda o que aparece na tela mas NAO redireciona as mensagens, porque o endereco de entrega vem do cracha de cada caixa e de um cache por contato. Medido em 01/10: depois de editar so a ficha, todas as conversas seguiam enviando pro numero ANTIGO nos dois canais de WhatsApp, sem erro nenhum. Para trocar de numero de verdade use lionchat_contacts_change_phone. Esta rota serve para CORRIGIR o cadastro (erro de digitacao em contato que nunca conversou).",
294
294
  "category": "Contatos",
295
295
  "params": [
296
296
  {
@@ -319,7 +319,7 @@
319
319
  "type": "string",
320
320
  "location": "body",
321
321
  "required": false,
322
- "description": "Telefone"
322
+ "description": "Telefone. So para CORRIGIR o cadastro — nao redireciona o envio. Troca de numero de verdade: lionchat_contacts_change_phone"
323
323
  },
324
324
  {
325
325
  "name": "identifier",
@@ -371,6 +371,7 @@
371
371
  "Atualização em massa via automação"
372
372
  ],
373
373
  "related_tools": [
374
+ "lionchat_contacts_change_phone",
374
375
  "lionchat_contacts_update_1"
375
376
  ]
376
377
  },
@@ -29885,6 +29886,102 @@
29885
29886
  "lionchat_contacts_show"
29886
29887
  ]
29887
29888
  },
29889
+ {
29890
+ "id": "lionchat_contacts_change_phone",
29891
+ "method": "POST",
29892
+ "path": "/api/v1/accounts/{account_id}/contacts/{id}/change_phone",
29893
+ "title": "Trocar o Telefone do Contato (mantendo a conversa)",
29894
+ "description": "Troca o telefone de um contato MANTENDO a mesma conversa no painel. Use SEMPRE esta rota quando a pessoa mudou de numero — nunca lionchat_contacts_update, que muda a ficha e NAO redireciona as mensagens (o endereco de entrega vem do cracha de cada caixa e de um cache por contato, nao da ficha). Esta rota mexe nas quatro pecas: telefone da ficha, cracha de cada caixa de WhatsApp (QR Code e oficial), crachas extras (saem de circulacao, com as conversas reapontadas) e o cache de LID. Escreve uma pilula de atividade nas conversas do contato dizendo de qual numero para qual, e limpa a marca \"nao tem WhatsApp\" do numero antigo (que tirava a pessoa de toda campanha). No QR Code, a forma canonica do numero e perguntada ao WhatsApp antes de gravar — isso resolve sozinho o caso do nono digito. RECUSA (nao troca) quando: o numero e o mesmo, e invalido, o contato e um GRUPO, ou o numero ja pertence a outra ficha (409 com quem e o dono). OPCIONAL merge_with: junta as fichas E troca numa so operacao, com ESTA ficha sobrevivendo e a outra sendo APAGADA — so aceita a ficha dona do numero, exige permissao de excluir contato, e NAO tem como desfazer. Antes de usar merge_with, consulte lionchat_contact_merge_preview para saber o que sera descartado e CONFIRME com a pessoa.",
29895
+ "category": "Contatos",
29896
+ "params": [
29897
+ {
29898
+ "name": "account_id",
29899
+ "type": "integer",
29900
+ "location": "path",
29901
+ "required": true,
29902
+ "description": "ID da conta"
29903
+ },
29904
+ {
29905
+ "name": "id",
29906
+ "type": "integer",
29907
+ "location": "path",
29908
+ "required": true,
29909
+ "description": "ID do contato que vai trocar de numero"
29910
+ },
29911
+ {
29912
+ "name": "phone_number",
29913
+ "type": "string",
29914
+ "location": "body",
29915
+ "required": true,
29916
+ "description": "Numero novo. Aceita com ou sem \"+\" (e normalizado para E.164)"
29917
+ },
29918
+ {
29919
+ "name": "merge_with",
29920
+ "type": "integer",
29921
+ "location": "body",
29922
+ "required": false,
29923
+ "description": "ID da ficha a ser ABSORVIDA (e APAGADA) quando o numero novo ja pertence a ela. So aceita a ficha dona do numero. Exige permissao de excluir contato. Irreversivel — confirme antes"
29924
+ }
29925
+ ],
29926
+ "returns": "200 { trocou, antigo, novo, crachas_atualizados, crachas_arquivados, conversas_reapontadas, conversas_avisadas }; 409 { error: \"telefone_de_outro_contato\", conflito: { id, name, phone_number } } quando o numero ja e de outra ficha; 422 { error } para telefone_igual, telefone_invalido, contato_de_grupo ou merge_with_nao_e_dono_do_numero",
29927
+ "common_use_cases": [
29928
+ "O cliente avisou que mudou de numero e quer continuar o atendimento na mesma conversa",
29929
+ "A clinica ou integracao informou um telefone novo para o mesmo paciente",
29930
+ "Juntar a ficha duplicada que ja usa o numero novo e passar a usar esse numero (merge_with)"
29931
+ ],
29932
+ "related_tools": [
29933
+ "lionchat_contact_merge_preview",
29934
+ "lionchat_contacts_show",
29935
+ "lionchat_contacts_update"
29936
+ ]
29937
+ },
29938
+ {
29939
+ "id": "lionchat_contact_merge_preview",
29940
+ "method": "GET",
29941
+ "path": "/api/v1/accounts/{account_id}/actions/contact_merge/preview",
29942
+ "title": "Previa da Mesclagem de Contatos",
29943
+ "description": "Diz o que a mesclagem VAI fazer, sem executar nada. Use SEMPRE antes de mesclar ou de usar merge_with, e mostre o resultado para a pessoa confirmar: mesclar APAGA uma ficha e NAO tem como desfazer. Devolve quem fica, quem deixa de existir, os campos que entram nos vazios do sobrevivente, os que serao DESCARTADOS (quando os dois tem valor diferente), quantas conversas vem, quantas vao aparecer encerradas, as etiquetas que somam e se a ficha vai ficar bloqueada. Regra de quem vence, campo a campo: o sobrevivente ganha onde ELE tem valor; onde esta vazio, recebe o do outro. Leitura pura; exige a mesma permissao de mesclar (excluir contato).",
29944
+ "category": "Contatos",
29945
+ "params": [
29946
+ {
29947
+ "name": "account_id",
29948
+ "type": "integer",
29949
+ "location": "path",
29950
+ "required": true,
29951
+ "description": "ID da conta"
29952
+ },
29953
+ {
29954
+ "name": "base_contact_id",
29955
+ "type": "integer",
29956
+ "location": "query",
29957
+ "required": true,
29958
+ "description": "ID do contato que SOBREVIVE"
29959
+ },
29960
+ {
29961
+ "name": "mergee_contact_id",
29962
+ "type": "integer",
29963
+ "location": "query",
29964
+ "required": true,
29965
+ "description": "ID do contato que sera APAGADO"
29966
+ },
29967
+ {
29968
+ "name": "phone_number",
29969
+ "type": "string",
29970
+ "location": "query",
29971
+ "required": false,
29972
+ "description": "Numero que a ficha vai adotar depois da juncao. Sem ele, a previa anuncia o telefone do absorvido como \"descartado\" — o que seria mentira no caminho da troca de telefone"
29973
+ }
29974
+ ],
29975
+ "returns": "200 { fica: {id,name}, sai: {id,name}, entra: [{key,label,value}], descartado: [{key,label,atual,descartado}], telefone_novo, conversas, conversas_que_serao_fechadas, etiquetas_novas, vai_ficar_bloqueado }",
29976
+ "common_use_cases": [
29977
+ "Mostrar ao usuario o que se perde antes de confirmar a mesclagem de duas fichas",
29978
+ "Conferir, antes de usar merge_with na troca de telefone, o que sera descartado"
29979
+ ],
29980
+ "related_tools": [
29981
+ "lionchat_contacts_change_phone",
29982
+ "lionchat_contacts_show"
29983
+ ]
29984
+ },
29888
29985
  {
29889
29986
  "id": "lionchat_contacts_active",
29890
29987
  "method": "GET",
@@ -32148,7 +32245,7 @@
32148
32245
  "method": "POST",
32149
32246
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/meta_capi_events/{id}/retry",
32150
32247
  "title": "Reenviar Evento Meta CAPI falhado",
32151
- "description": "AÇÃO DE ESCRITA. Reenfileira UM evento Meta CAPI com status 'failed' (volta pra pending e o job envia de novo). Só failed: qualquer outro status responde 422 {error:'not failed'}. 404 se não for deste funil.",
32248
+ "description": "ACAO DE ESCRITA. Reenfileira UM evento Meta CAPI que esta retentavel: status 'failed' OU 'pending' ABANDONADO (parado ha mais de 15 min). Volta pra pending e o job envia de novo, limpando o motivo da falha e o do plano B. Qualquer outro status responde 422 {error:'not retryable'}. 404 se o evento nao for deste funil.",
32152
32249
  "category": "Integracoes",
32153
32250
  "params": [
32154
32251
  {
@@ -32166,7 +32263,7 @@
32166
32263
  "description": "ID do evento falhado"
32167
32264
  }
32168
32265
  ],
32169
- "returns": "200 {ok: true} | 422 {error:'not failed'} | 404 {error:'not found'}",
32266
+ "returns": "200 {ok: true} | 422 {error:'not retryable'} | 404 {error:'not found'}",
32170
32267
  "common_use_cases": [
32171
32268
  "Reenviar a conversão depois de corrigir o token/pixel"
32172
32269
  ],
@@ -33341,6 +33438,164 @@
33341
33438
  "lionchat_lead_origins_update"
33342
33439
  ]
33343
33440
  },
33441
+ {
33442
+ "id": "lionchat_lead_origins_unrecognized",
33443
+ "method": "GET",
33444
+ "path": "/api/v1/accounts/{account_id}/lead_origins/unrecognized",
33445
+ "title": "Origens que o sistema nao reconheceu",
33446
+ "description": "Lista os valores que chegaram no link do anuncio e que o LionChat nao soube classificar como plataforma (ficam como 'outra' nos relatorios). Diz em QUAL campo cada valor chegou (utm_source, anuncio de WhatsApp, formulario da Meta ou LionTrack), quantos leads vieram por ele e quantos valores diferentes existem. Traz junto o mapa de qual UTM alimenta qual campo, com o exemplo de cada plataforma (Meta, Google Ads, TikTok Ads). Somente leitura.",
33447
+ "category": "Integracoes",
33448
+ "params": [],
33449
+ "returns": "{ total, field_map: [{ utm, field, meta, google, tiktok }], items: [{ platform, label, count, raw_value, field, field_count, distinct_values }] }",
33450
+ "common_use_cases": [
33451
+ "Descobrir por que leads de anuncio aparecem como 'outra' no relatorio de origem",
33452
+ "Conferir se o link do anuncio foi montado com o valor no campo errado",
33453
+ "Ver a tabela de qual UTM vira qual campo em cada plataforma"
33454
+ ],
33455
+ "related_tools": [
33456
+ "lionchat_lead_origins_adopt_unrecognized",
33457
+ "lionchat_lead_origins_dismiss_unrecognized",
33458
+ "lionchat_lead_origin_reports"
33459
+ ]
33460
+ },
33461
+ {
33462
+ "id": "lionchat_lead_origins_adopt_unrecognized",
33463
+ "method": "POST",
33464
+ "path": "/api/v1/accounts/{account_id}/lead_origins/adopt_unrecognized",
33465
+ "title": "Transformar valor nao reconhecido em origem",
33466
+ "description": "Cria uma origem de lead a partir de um valor que o sistema nao reconheceu, e ensina o motor a classificar esse valor dali em diante. NAO reprocessa os leads que ja entraram. So aceita plataforma no formato 'other:<valor>'. Conserta a PLATAFORMA, nao o tipo: se os leads vierem de anuncio pago, o link tambem precisa de utm_medium=paid, senao continuam como Organico.",
33467
+ "category": "Integracoes",
33468
+ "params": [
33469
+ {
33470
+ "name": "platform",
33471
+ "type": "string",
33472
+ "location": "body",
33473
+ "required": true,
33474
+ "description": "O valor nao reconhecido, no formato 'other:<valor>', exatamente como veio de lead_origins_unrecognized"
33475
+ },
33476
+ {
33477
+ "name": "name",
33478
+ "type": "string",
33479
+ "location": "body",
33480
+ "required": true,
33481
+ "description": "Nome da origem que a pessoa vai ler na tela (ex.: 'Minha Pagina'). O identificador colado e gerado a partir dele"
33482
+ }
33483
+ ],
33484
+ "returns": "{ id, name, slug, color, active }",
33485
+ "common_use_cases": [
33486
+ "Transformar um valor recorrente do link em origem propria da conta",
33487
+ "Parar de ver leads de uma parceria caindo como 'outra'"
33488
+ ],
33489
+ "related_tools": [
33490
+ "lionchat_lead_origins_unrecognized",
33491
+ "lionchat_lead_origins_dismiss_unrecognized",
33492
+ "lionchat_lead_origins_create"
33493
+ ]
33494
+ },
33495
+ {
33496
+ "id": "lionchat_lead_origins_dismiss_unrecognized",
33497
+ "method": "POST",
33498
+ "path": "/api/v1/accounts/{account_id}/lead_origins/dismiss_unrecognized",
33499
+ "title": "Descartar valor nao reconhecido do aviso",
33500
+ "description": "Tira um valor nao reconhecido da lista de avisos, sem criar origem nenhuma. Use quando o valor e erro mesmo (nome de campanha escrito no campo da plataforma) ou nao interessa. Nao mexe em lead nenhum: os leads ja classificados continuam como estao. Guarda ate 50 descartes por conta.",
33501
+ "category": "Integracoes",
33502
+ "params": [
33503
+ {
33504
+ "name": "platform",
33505
+ "type": "string",
33506
+ "location": "body",
33507
+ "required": true,
33508
+ "description": "O valor nao reconhecido, no formato 'other:<valor>'"
33509
+ }
33510
+ ],
33511
+ "returns": "200 sem corpo",
33512
+ "common_use_cases": [
33513
+ "Limpar da lista um valor que e erro de montagem do link e nao vai ser corrigido",
33514
+ "Evitar que o aviso de origens nao reconhecidas vire ruido"
33515
+ ],
33516
+ "related_tools": [
33517
+ "lionchat_lead_origins_unrecognized",
33518
+ "lionchat_lead_origins_adopt_unrecognized"
33519
+ ]
33520
+ },
33521
+ {
33522
+ "id": "lionchat_lead_origins_custom_utms",
33523
+ "method": "GET",
33524
+ "path": "/api/v1/accounts/{account_id}/lead_origins/custom_utms",
33525
+ "title": "UTMs inventadas que estao chegando",
33526
+ "description": "Lista as UTMs que o cliente inventou no proprio link (utm_parceiro, utm_vendedor...) e que o LionTrack ja esta guardando de lado, mas que ainda NAO viraram campo da conversa. Mostra quantos leads chegaram com cada uma, exemplos de valor e se ela ja esta sendo acompanhada. Somente leitura: nada e criado aqui.",
33527
+ "category": "Integracoes",
33528
+ "params": [],
33529
+ "returns": "{ limit, items: [{ key, count, samples, tracked }] }",
33530
+ "common_use_cases": [
33531
+ "Ver quais UTMs proprias o time de trafego ja esta usando nos links",
33532
+ "Decidir qual UTM inventada vale virar campo de verdade"
33533
+ ],
33534
+ "related_tools": [
33535
+ "lionchat_lead_origins_track_custom_utm",
33536
+ "lionchat_lead_origins_untrack_custom_utm"
33537
+ ]
33538
+ },
33539
+ {
33540
+ "id": "lionchat_lead_origins_track_custom_utm",
33541
+ "method": "POST",
33542
+ "path": "/api/v1/accounts/{account_id}/lead_origins/track_custom_utm",
33543
+ "title": "Passar a acompanhar uma UTM inventada",
33544
+ "description": "Transforma uma UTM inventada pelo cliente em atributo personalizado de CONVERSA, e preenche retroativamente as conversas que ja tinham o valor guardado (ate 200, das mais recentes). A partir dai ela aparece na ficha da conversa e pode ser usada em filtro, segmento, publico de campanha, automacao, fluxo, API e MCP. Recusa (422) chave fora do formato utm_<letras/numeros>, chave ja acompanhada, ou teto de 10 por conta atingido.",
33545
+ "category": "Integracoes",
33546
+ "params": [
33547
+ {
33548
+ "name": "key",
33549
+ "type": "string",
33550
+ "location": "body",
33551
+ "required": true,
33552
+ "description": "A chave como aparece no link, comecando com utm_ (ex.: utm_parceiro)"
33553
+ },
33554
+ {
33555
+ "name": "display_name",
33556
+ "type": "string",
33557
+ "location": "body",
33558
+ "required": false,
33559
+ "description": "Nome que a pessoa le na tela. Sem isso, e derivado da propria chave"
33560
+ }
33561
+ ],
33562
+ "returns": "{ key, display_name, backfilled } ou { error } com 422",
33563
+ "common_use_cases": [
33564
+ "Passar a filtrar conversas por uma UTM propria do cliente",
33565
+ "Montar segmento ou publico de campanha por parceiro/vendedor que vem no link"
33566
+ ],
33567
+ "related_tools": [
33568
+ "lionchat_lead_origins_custom_utms",
33569
+ "lionchat_lead_origins_untrack_custom_utm",
33570
+ "lionchat_custom_attributes_list"
33571
+ ]
33572
+ },
33573
+ {
33574
+ "id": "lionchat_lead_origins_untrack_custom_utm",
33575
+ "method": "POST",
33576
+ "path": "/api/v1/accounts/{account_id}/lead_origins/untrack_custom_utm",
33577
+ "title": "Parar de acompanhar uma UTM inventada",
33578
+ "description": "Remove o CAMPO criado para uma UTM inventada. NAO apaga os valores ja gravados nas conversas: eles continuam la e voltam a aparecer se a chave for acompanhada de novo. So funciona em chave que comeca com utm_ e que nao seja atributo de sistema.",
33579
+ "category": "Integracoes",
33580
+ "params": [
33581
+ {
33582
+ "name": "key",
33583
+ "type": "string",
33584
+ "location": "body",
33585
+ "required": true,
33586
+ "description": "A chave acompanhada que se quer remover (ex.: utm_parceiro)"
33587
+ }
33588
+ ],
33589
+ "returns": "{ key, display_name }; 404 se a chave nao e acompanhada",
33590
+ "common_use_cases": [
33591
+ "Limpar da ficha da conversa uma UTM que deixou de ser usada",
33592
+ "Liberar vaga no teto de 10 UTMs acompanhadas por conta"
33593
+ ],
33594
+ "related_tools": [
33595
+ "lionchat_lead_origins_custom_utms",
33596
+ "lionchat_lead_origins_track_custom_utm"
33597
+ ]
33598
+ },
33344
33599
  {
33345
33600
  "id": "lionchat_meta_lead_refresh_sample",
33346
33601
  "method": "POST",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionchat/mcp-server",
3
- "version": "1.26.1",
3
+ "version": "1.28.0",
4
4
  "description": "MCP server for LionChat API — 547 tools + 10 resources + 9 prompts. Audit-log aware, completion API, progress notifications.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",