@lionchat/mcp-server 1.35.0 → 1.37.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.
@@ -336,6 +336,10 @@ CONTA). Vale para WhatsApp oficial, QR Code e Campanha de Fluxo; SMS e TopSend r
336
336
  lida na HORA do disparo: segmento apagado ou com regra quebrada = a campanha NÃO envia nada e o motivo fica em
337
337
  `trigger_rules.audience_error`; na estimativa vem `estimated_count: null` com `segment_unavailable`.
338
338
  QR Code aceita `template_params` com `delay_min/delay_max/variations` (anti-bloqueio) e `bulk_actions`.
339
+ QR Code desde 09/11/2026: sai UMA mensagem por vez por NUMERO, respeitando a espera (`delay_min/delay_max`, 1 a 3600 s;
340
+ vazio = 20/40). `daily_cap` = teto da campanha por dia, no maximo 1000 (vazio, zero ou acima = 1000; sem a chave = 500). O
341
+ NUMERO nunca passa de 1000 mensagens de campanha por dia somando todas as campanhas dele: o excedente sai no dia seguinte, na
342
+ hora em que a campanha comecou. Para mais de 1000 pessoas por dia, use a caixa oficial.
339
343
 
340
344
  ### Criar campanha de FLUXO (dispara um flow, não uma mensagem) — novo 28/07/2026
341
345
  ```
@@ -390,6 +394,7 @@ e pular evita que ela receba tudo em dobro. Quem está sendo atendido pela equip
390
394
  | Bulk actions (IDs) max | 300 por chamada (desde 18/05/2026; passou disso = HTTP 422 `bulk_ids_limit_exceeded`) |
391
395
  | Rate limit leitura | 1200/min por token |
392
396
  | Rate limit escrita | 600/min por token |
397
+ | Limites por rota | Contam por chave de API em cada conta (09/11/2026); totais da conta somam só pedidos autenticados da própria conta |
393
398
  | Loop detection | bloqueia chamada idêntica >10x em 10s |
394
399
  | Variável de Conta — tamanho do valor | 32 KB por variável (novo 01/08/2026; passou disso = HTTP 422 na conta). Vale só pra variável DECLARADA na tela; chave interna do sistema não é barrada. É por variável, não pela soma — conta com dezenas de tokens legítimos não é punida |
395
400
 
@@ -448,7 +453,10 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
448
453
  | Intenção do usuário | Tool certa | Cuidado |
449
454
  |---|---|---|
450
455
  | Criar **pasta de conversas para a conta toda** ("Urgentes do time", "Minhas abertas" para cada um) | `lionchat_custom_filters_create` com `filter_type: conversation` + `shared: true` | Só administrador (401). Pelo menos uma condição. Para cada pessoa ver as conversas DELA use `assignee_id` com `values: ["current_user"]`. `shared: false` depois devolve a pasta a quem mandou. Detalhe no resource api-conventions |
456
+ | **Filtrar empresas** ("empresas de São Paulo", "com mais de 5 contatos", "sem CNPJ") | `lionchat_companies_filter` com `payload` igual ao do filtro de contatos | `lionchat_companies_search` só busca por nome/site; para cidade, CNPJ, quantidade de contatos, datas ou atributo da empresa use o filtro. Campos e regras no resource api-conventions |
457
+ | Salvar / mudar / apagar **segmento de empresas**, ou **listar as empresas de um segmento** | `lionchat_custom_filters_create` / `_update` / `_destroy` com `filter_type: company`; para listar, leia o segmento (`lionchat_custom_filters_list` com `filter_type: company`) e mande o `query.payload` dele para `lionchat_companies_filter` | Segmento de empresas é da conta (qualquer atendente com o menu Empresas gerencia) e NÃO vira público de campanha |
451
458
  | Listar / ver não lidas | `lionchat_conversations_list` (`conversation_type: 'unread'`) ou `lionchat_conversations_meta` | NÃO use `lionchat_conversations_unread` — é AÇÃO DE ESCRITA (marca como não-lida) |
459
+ | Cadastrar empresa com **CNPJ** | `lionchat_companies_create` / `_update` com `additional_attributes.cnpj` | CNPJ unico por empresa na conta: CNPJ ja usado = 422 "Ja existe a empresa X com este CNPJ." e nada grava. Nao crie outra: atualize a X (ache pelo nome com `lionchat_companies_search`, que nao busca por CNPJ). Contato pode repetir CPF/CNPJ |
452
460
  | Ver **uma empresa** (quem trabalha la, anotacoes, conversas) e ligar/tirar contatos | `lionchat_companies_show` + `lionchat_companies_contacts_list` / `_create` / `_destroy`, `lionchat_companies_notes_list`, `lionchat_companies_conversations_list` | Ligar pela ficha: `lionchat_contacts_update` com `company_id` (null tira). Cargo da pessoa = `additional_attributes.job_title`. Escolher a empresa troca o texto `company_name` pelo nome dela |
453
461
  | Criar / preencher **campo personalizado da empresa** ("Segmento", "Data de fundacao") | `lionchat_custom_attributes_create` com `attribute_model: company_attribute` + `lionchat_companies_update` com `company.custom_attributes {chave: valor}` | So com o modulo Empresas ligado; tipo segredo recusado. Chave que nao existe como atributo de empresa = 422 e nada do pedido grava: crie a definicao ANTES. MESCLA; `null` limpa. Desde 2026-10-16 vira variavel `{{contact.company.custom_attribute.CHAVE}}`, condicao do fluxo (`attrSource: company`), condicao de automacao e filtro de contatos (`custom_attribute_type: company_attribute`) e a IA le — detalhe no resource data-model |
454
462
  | **Importar muitas empresas** de uma vez (planilha, lista de clientes, cadastro de outro sistema) | `lionchat_companies_bulk_create` (ate 1000 por chamada; `check_only: true` CONFERE sem gravar) e depois `lionchat_companies_import_status` com o `import_id` | Mesma importacao do botao "Importar empresas" da tela. Mesma empresa = CNPJ; sem CNPJ, o site; sem os dois, o NOME — mais de uma empresa com aquele nome = a linha NAO entra (mande CNPJ ou site). Empresa existente e ATUALIZADA; campo vazio nunca apaga. Valor invalido fica em branco com aviso e o resto entra. Campos PLANOS (`address_city`, `social_instagram`), nunca objeto; `custom_attributes` so com chave que ja existe como atributo de EMPRESA. Exige modulo Empresas + administrador ou cargo "Exportar e importar contatos". So no conector remoto (Claude.ai/ChatGPT); no conector local (NPM) importe com `lionchat_companies_create` uma a uma |
@@ -502,7 +510,7 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
502
510
  | **Migrar conversas** de uma caixa WhatsApp pra outra (ex.: QR Code → Oficial) | `lionchat_inboxes_inbox_migration_list` (prévia) → `_execute` → acompanhar status | Admin-only e IRREVERSÍVEL: sempre mostre os números da prévia e confirme (seção 7a). Grupos não vão pro canal oficial — ficam na caixa de origem |
503
511
  | Qualquer coisa de Ligação WP (Wavoip) | **INTEGRAÇÃO REMOVIDA em 12/08/2026** — não há tool nem tela | A Wavoip saiu do produto: a aba "Ligação WP" **não existe mais**. NUNCA orientar o usuário a "Configurações da caixa → Ligação WP". Para voz em caixa QR Code, o caminho hoje é o **LionCalls**. As ligações antigas seguem no histórico (`provider: "wavoip"`); as gravações delas ficavam no servidor da Wavoip e vão sumir — ao tentar ouvir, o painel mostra "Esta gravação não está mais disponível", e isso é esperado, não é defeito. |
504
512
  | Restringir agendas que a IA oferece | `lionchat_captain_assistants_update` (`config.booking_event_type_ids: [Int]`) | binding de agenda por cenário NÃO é settable via API |
505
- | **Tarefas atrasadas / o que falta fazer** (da equipe ou de uma pessoa) | `lionchat_tasks_task_list` (`assignee_id`, `q`, `priority`, `group` + `page`) | Só tarefas ABERTAS, em grupos `overdue`/`today`/`tomorrow`/`next_7_days`/`later` no dia da conta; 50 por grupo — conte por `totals`. Mesma regra de quem vê o quê do calendário. Ver `lionchat://docs/agenda-multiplas-unidades` §7.2 |
513
+ | **Tarefas atrasadas / o que falta fazer** (da equipe ou de uma pessoa) | `lionchat_tasks_task_list` (`assignee_id`, `q`, `priority`, `group` + `page`) | `assignee_id`, `task_type`, `status` e `priority` aceitam VÁRIOS valores separados por vírgula (`"12,15"`, `"task,follow_up"`; 11/11/2026); `task_type` aceita a chave dos tipos criados pela conta; `status` número ou nome (`pending`). Só tarefas ABERTAS, em grupos `overdue`/`today`/`tomorrow`/`next_7_days`/`later` no dia da conta; 50 por grupo — conte por `totals`. Mesma regra de quem vê o quê do calendário. Ver `lionchat://docs/agenda-multiplas-unidades` §7.2 |
506
514
  | **Programa de sessões** de um contato ("em que sessão ele está", ajustar total, encerrar/reabrir) | `lionchat_agenda_treatments_list` (por `contact_id`) / `_show` / `_update` | NÃO existe create: o programa nasce junto do agendamento (na TELA chama-se "programa"; na API segue `treatment`). Marcar TODAS de uma vez: `plano_sugerido` + `marcar_todas` de um tipo com `sessions_enabled` (`tasks_create` modo booking, `treatment: {...}` por pessoa; "marcar próxima" = `agenda_treatment_id` + `treatment_session_number`). Faltar CONSOME a sessão. Ver `lionchat://docs/agenda-multiplas-unidades` §7 |
507
515
  | Configurar o Copiloto (modelo/temperatura/prompt base) | `lionchat_copilot_settings_update` | admin-only; copiloto tem motor próprio (padrão temp 0.3) |
508
516
  | **Resetar/testar do zero a IA** numa conversa | `lionchat_conversations_captain_history_reset` (POST, sem body) | Cria pílula de marco na conversa; a partir dali TODA leitura autônoma da IA (respostas, resumo, follow-up) considera só mensagens pós-marco. Não apaga nada; o atendente segue vendo tudo. Enterprise-only |
@@ -308,8 +308,13 @@ atrasado?", "quantas tarefas a fulana tem em aberto?" e "o que falta fazer esta
308
308
  - **Grupos**, no dia da conta: `overdue` (antes de hoje, da mais recente para a mais antiga), `today`,
309
309
  `tomorrow`, `next_7_days` e `later`.
310
310
  - **Quem vê o quê e filtros**: os MESMOS do calendário (`lionchat_tasks_list`): `assignee_id`, `task_type`,
311
- `status` (0 pendente, 3 adiada), `priority`, `agenda_id`, `q`. Quem não gerencia a agenda da equipe vê só as
312
- próprias, com ou sem `assignee_id`.
311
+ `status` (0 pendente, 3 adiada), `priority`, `agenda_id`, `q`. Quem não gerencia a agenda da equipe vê as
312
+ tarefas em que é dono ou responsável e, quando marca um colega em `assignee_id`, as do colega SÓ se ele publicou
313
+ a agenda. O filtro nunca mostra mais do que a pessoa já vê.
314
+ - **Várias opções por filtro (11/11/2026)**: `assignee_id`, `task_type`, `status` e `priority` aceitam vários
315
+ valores separados por vírgula (`assignee_id: "12,15"`, `task_type: "task,follow_up"`); a lista traz o que bate com
316
+ QUALQUER um. `task_type` aceita a chave dos tipos criados pela conta (inclusive desativados); `status` aceita número
317
+ ou nome (`pending`, `snoozed`). Tarefa com dois responsáveis da lista vem uma vez só.
313
318
  - **50 por grupo**. Para quantidade, leia `totals` (a contagem real), nunca o tamanho da lista. Para ir além das
314
319
  50: `group=overdue&page=2` devolve só aquele grupo naquela página.
315
320
  - **Busca `q`** (vale também no calendário): título, descrição, responsável e, com 3 letras ou mais, o CLIENTE
@@ -401,6 +401,12 @@ Ou com código:
401
401
  | Por token API (reads) | 1200 reqs | 1 min |
402
402
  | Loop detection | 10 reqs idênticas | 10 seg |
403
403
 
404
+ **Limites por rota contam por quem pede (desde 09/11/2026).** Busca de contatos (100/min), subir arquivo (60/h),
405
+ disponibilidade de atendentes (30/min), contadores das conversas (30/min) e relatórios por pessoa (100/min) contam por
406
+ CHAVE de API em cada conta, não pela conta inteira: outra integração ou um estranho não esgota a sua cota. Os totais da
407
+ conta (relatórios 1000/min, enviar conversa por e-mail 1000/h, `check_phone` 1000/dia, disparo de conversão 100/h, evento
408
+ de teste do pixel 10/min) somam todos os pedidos AUTENTICADOS da própria conta. A resposta continua 429 com `Retry-After`.
409
+
404
410
  Quando rate-limited:
405
411
  - Status `429 Too Many Requests`
406
412
  - Header `Retry-After` indica em quantos segundos voltar
@@ -498,6 +504,18 @@ conversa (`conversation`) são pessoais até um administrador compartilhar (seç
498
504
  incompleta = 422. Segmento usado por campanha programada não pode ser apagado (422 citando a campanha). Segmento serve
499
505
  de público de campanha (`{type: 'Segment', id}`) — ver a receita de campanha nas instruções.
500
506
 
507
+ ### Segmento de EMPRESAS e lista filtrada (2026-11-11)
508
+
509
+ Ferramentas: `lionchat_companies_filter` (lista filtrada) e `lionchat_custom_filters_*` com `filter_type: company`
510
+ (segmento). Para ver as empresas de um segmento salvo, mande o `query.payload` dele para `lionchat_companies_filter`.
511
+
512
+ `custom_filters` com `filter_type: company` = segmento da aba Empresas, da conta inteira (como o de contatos). Qualquer
513
+ administrador ou atendente com o menu Empresas visível cria, edita e apaga; módulo Empresas desligado = 403. NÃO serve de
514
+ público de campanha. A lista filtrada é `POST companies/filter` com o mesmo `payload` do filtro de contatos; campos:
515
+ `name`, `domain`, `legal_name`, `cnpj`, `phone`, `email`, `city`, `state`, `contacts_count`, `created_at`,
516
+ `last_activity_at` e atributos de empresa com `custom_attribute_type: company_attribute`. Texto é comparado sem maiúscula
517
+ e sem acento; CNPJ e telefone só pelos números; "diferente de" traz a empresa sem o campo. Campo/operador desconhecido = 422.
518
+
501
519
  ### Pasta de conversa compartilhada (2026-10-27)
502
520
 
503
521
  Pasta de conversa (`filter_type: conversation`) com `shared: true` aparece para TODA a conta, com o ícone de
@@ -19,7 +19,7 @@ A maioria dos endpoints aceita parâmetros pra filtrar antes de retornar:
19
19
 
20
20
  | Endpoint | Filtros úteis |
21
21
  |---|---|
22
- | `conversations_list` | `status` (open/resolved/pending/snoozed/all), `assignee_type`, `conversation_type` (unread/unattended/mention/participating), `inbox_id`, `team_id`, `labels`, `captain_assistant` (any=com IA / none=sem IA / id do assistente), `quick_q` (busca rápida na lista), `source_id`, `updated_within` (segundos) |
22
+ | `conversations_list` | `status` (open/resolved/pending/snoozed/all), `assignee_type`, `conversation_type` (unread/unattended/mention/participating), `inbox_id`, `team_id`, `labels`, `captain_assistant` (any=com IA / none=sem IA / id do assistente), `quick_q` (busca rápida na lista), `source_id`, `updated_within` (segundos; no maximo 3 h e as 1.000 conversas mais recentes, sem paginacao; `meta.truncated` diz se cortou) |
23
23
  | `contacts_list` | `q` (nome/email/telefone), `include_contact_inboxes` |
24
24
  | `messages_search` | `q`, `file_type[]`, `private_only`, `page` (busca dentro de UMA conversa) |
25
25
  | `kanban_items_list` | `funnel_id`, `funnel_stage`, `assigned_agent_id` |
@@ -534,6 +534,8 @@ Meta só aceita isso num **dataset vinculado à WABA**, nunca no pixel do site (
534
534
  não existe evento de "perdido" em mensagens. O nome interno do cliente vai em `custom_data.internal_event`.
535
535
  - **Diagnóstico "por que a venda não contou como conversão de WhatsApp?":**
536
536
  `lionchat_funnels_meta_capi_events_list` com `degraded=true` e ler `fallback_reason` + `action_source`.
537
+ Desde 09/11/2026 cada linha das 4 listas do histórico (`meta_capi_events`, `ga4_events`, `google_ads_conversions`,
538
+ `ad_read_failures`) traz `inbox_name` — a caixa de entrada da conversa do card (`null` = card sem conversa).
537
539
  Motivos nossos: `lionchat:dataset_nao_configurado` (falta o vínculo), `lionchat:caixa_token_recusado`
538
540
  (a Meta recusou a chave da caixa — reconectar a caixa), `lionchat:caixa_nao_encontrada`,
539
541
  `lionchat:caixa_sem_token`, `lionchat:dataset_id_invalido`, `lionchat:desligado_pelo_cliente`,
@@ -638,7 +640,7 @@ criar a campanha e mostre a contagem ao usuário — estimativa e disparo usam o
638
640
 
639
641
  - Reservar o MESMO contato+evento+horário de novo retorna a reserva existente (não duplica) —
640
642
  retry de rede é seguro.
641
- - Rate limit da reserva pública: 10/5min por IP + 20/min por conta (429 ao estourar).
643
+ - Rate limit da reserva pública: 10/5min por rede + 60/min por conta (429 ao estourar; era 20/min até 09/11/2026).
642
644
  - Todo agendamento aparece vinculado a uma conversa (cria/reusa a conversa do contato).
643
645
 
644
646
  ### O que mudou no agendamento DA IA (2026-08-15)
@@ -706,7 +706,7 @@ Todos os formatos abaixo foram conferidos linha a linha em `app/services/action_
706
706
  | `send_message` | `["texto da mensagem"]` |
707
707
  | `add_private_note` | `["nota interna"]` |
708
708
  | `send_canned_response` | `[12]` — id da resposta pronta |
709
- | `add_label` / `remove_label` | `["etiqueta1", "etiqueta2"]` |
709
+ | `add_label` / `remove_label` | `["etiqueta1", "etiqueta2"]`. Em `remove_label` (e `remove_contact_label`), `["__all__"]` remove TODAS as etiquetas (09/11/2026) |
710
710
  | `assign_agent` | `[70]` — o agente precisa ser membro da caixa. `["nil"]` desatribui |
711
711
  | `assign_team` | `[3]`. `["nil"]` desatribui |
712
712
  | `assign_captain_assistant` | `[17]` ou `[{"assistant_id": 17, "proactive": true}]` — `proactive` false = a IA assume mas nao fala na hora |
@@ -207,7 +207,10 @@ atendente). Cadastro da empresa (25/09): `lionchat_companies_create`/`_update` a
207
207
  `additional_attributes` com `legal_name`, `cnpj` (validado; grava so digitos), `phone`, `email`,
208
208
  `address{cep,street,number,complement,neighborhood,city,state,country}` e
209
209
  `social_profiles{linkedin,facebook,instagram,telegram,tiktok,twitter,github}`. MESCLA: mande so o que muda;
210
- valor vazio apaga aquela chave. Excluir empresa: so administrador; os contatos ficam, so deixam de estar na empresa (as anotacoes da
210
+ valor vazio apaga aquela chave. CNPJ UNICO por empresa na conta (11/11/2026): CNPJ que ja e de outra empresa = 422
211
+ "Ja existe a empresa X com este CNPJ." e NADA do pedido grava — atualize a empresa X (ache pelo nome com
212
+ `lionchat_companies_search`; a busca nao acha por CNPJ). Na importacao em lote, a linha com CNPJ de empresa existente
213
+ ATUALIZA essa empresa. CPF/CNPJ na ficha do CONTATO podem repetir. Excluir empresa: so administrador; os contatos ficam, so deixam de estar na empresa (as anotacoes da
211
214
  empresa vao junto).
212
215
 
213
216
  **Atributos personalizados da EMPRESA (2026-10-15):** campos proprios da empresa que o cliente cria ("Segmento",
@@ -404,7 +404,8 @@ só pra destravar, ela pode sair.
404
404
  | `conversation_has_agent` / `conversation_no_agent` / `conversation_not_agent` | agente atribuído (HUMANO) |
405
405
  | `conversation_has_ai_agent` / `conversation_no_ai_agent` / `conversation_not_ai_agent` | agente de IA atribuído (novo 2026-08-01) — ver abaixo |
406
406
  | `contact_has_label` / `contact_no_label` / `conversation_has_label` / `conversation_no_label` | labels |
407
- | `kanban_exists` / `kanban_in_stage` / `kanban_won` / `kanban_lost` | card no funil. `funnel_id` é CHAVE SEPARADA da condição (número, ex.: `"funnel_id": 37`). A etapa vai em `value` (slug puro da etapa, ex.: `"avaliacao_aceita"`) ou em `stage` — NÃO no formato `"37:etapa"`. Ex.: `{ "operator": "kanban_in_stage", "funnel_id": 37, "value": "avaliacao_aceita" }` |
407
+ | `kanban_exists` / `kanban_in_stage` / `kanban_won` / `kanban_lost` | card no funil. `funnel_id` é CHAVE SEPARADA da condição (número, ex.: `"funnel_id": 37`). A etapa vai em `value` (slug puro da etapa, ex.: `"avaliacao_aceita"`) ou em `stage` — NÃO no formato `"37:etapa"`. Ex.: `{ "operator": "kanban_in_stage", "funnel_id": 37, "value": "avaliacao_aceita" }`. **Várias etapas (09/11/2026):** `kanban_in_stage` aceita `stages: ["qualificado", "contrato_enviado"]` — casa se o card estiver em QUALQUER uma (o `stage` antigo é somado). |
408
+ | `conversation_has_team` / `conversation_not_team` / `conversation_no_team` | equipe da conversa (09/11/2026 — o que a tela grava em "Em equipe"). `field: "{{conversation.team_id}}"`, `valueType: "team"`, `values: ["24","25"]`. `values` VAZIO: `has_team` = tem QUALQUER equipe, `not_team` = sem equipe. `conversation_no_team` = preset "Sem equipe" (sem values). O `equal`/`not_equal` antigo segue funcionando |
408
409
  | `kanban_snoozed` (11/10/2026) | card ADIADO no funil — `field: '_kanban_status'`, `funnel_id` separado, igual às irmãs `kanban_won`/`kanban_lost` (mesma regra do card que iniciou o fluxo). Não existe condição "card aberto" |
409
410
  | `card_attr_equals` / `card_attr_contains` | atributo do card (`attrSource: 'card'` + `attr_key`; aceita `card_source: 'trigger'` p/ ler o card que iniciou o flow) |
410
411
  | `pagetrack_visited` / `pagetrack_event` | LionTrack |
@@ -581,9 +582,9 @@ o botão "Usar variável" ao lado do campo alterna lista fixa ↔ variável.
581
582
  | `change_status` | `{ status: 'open' \| 'resolved' \| 'pending' \| 'snoozed' }` | Muda status da conversa |
582
583
  | `change_priority` | `{ priority: 'urgent' \| 'high' \| 'medium' \| 'low' }` | Muda prioridade |
583
584
  | `add_label` | `{ labels: ['slug1', 'slug2'] }` | Adiciona labels ao CONTATO |
584
- | `remove_label` | `{ labels: ['slug'] }` | Remove labels do CONTATO |
585
+ | `remove_label` | `{ labels: ['slug'] }` | Remove labels do CONTATO. `labels: ['__all__']` = remove TODAS (09/11/2026) |
585
586
  | `add_conversation_label` | `{ labels: ['slug'] }` | Adiciona labels à CONVERSA (não ao contato) |
586
- | `remove_conversation_label` | `{ labels: ['slug'] }` | Remove labels da CONVERSA |
587
+ | `remove_conversation_label` | `{ labels: ['slug'] }` | Remove labels da CONVERSA. `labels: ['__all__']` = remove TODAS (09/11/2026) |
587
588
  | `mute_conversation` | `{}` | Silencia notificações |
588
589
  | `mark_unread` | `{}` | Marca a conversa como NÃO LIDA pro time (espelho do `mute_conversation`; típico logo após `assign_agent`/`assign_team` numa transferência) |
589
590
  | `add_private_note` | `{ text: 'texto' }` | Adiciona nota interna. **A chave é `text`** — é a que o formulário do bloco lê (`v-model="item.config.text"`). Até 04/09 esta linha dizia `content`, e por isso 56 blocos de 8 contas abriam VAZIOS na tela: a nota era gravada (o motor tem rede) mas ninguém conseguia ler nem editar o texto. `content` continua sendo aceito e normalizado para `text` na gravação |
@@ -806,7 +807,7 @@ aiModel nos modos novos (proteção de nós antigos que carregam aiModel de defa
806
807
  `aiModel` vazio/ausente = modelo padrão da conta. Com assistente selecionado, o override também vale
807
808
  (sobrepõe o modelo que o caminho do assistente usaria). Modelo fora da whitelist = ignorado (cai no
808
809
  padrão da conta).
809
- Exemplo: `{"aiMode":"sentiment","aiAssistantId":"12","aiModel":"gpt-4.1-mini","aiModelExplicit":true}`.
810
+ Exemplo: `{"aiMode":"sentiment","aiModel":"gpt-4.1-mini","aiModelExplicit":true}`.
810
811
 
811
812
  **A whitelist (`FlowBuilder::RawLlmService::SUPPORTED_MODELS`) é uma lista FECHADA de 19 nomes, SEM
812
813
  curinga** — não existe "a família gpt-5 inteira":
@@ -821,14 +822,12 @@ Eles ignoram a temperatura do bloco (só o padrão) e **NÃO valem no bloco de I
821
822
  (teto de 15 s — o servidor exclui e usa o fallback). Também não existem `o1-mini`, `gpt-4.5-preview`,
822
823
  `gpt-5.2-pro` nem `gpt-5.5-pro` (a OpenAI recusa).
823
824
 
824
- **OBRIGATÓRIO via API — `aiAssistantId`:** os modos `generate`/`intent`/`sentiment`/`extract`
825
- EXIGEM um `aiAssistantId` válido (id de um assistente Captain da conta). **Sem ele o nó sai pela
826
- saída `error` desde 20/08/2026** (`AI Assistant not configured`), igual a assistente inexistente na
827
- conta — antes ficava VERDE e seguia como se a IA tivesse respondido, com a variável de saída
828
- (`aiResponseVar`/`ai_intent`/`ai_sentiment`) vazia. A tela do Flow Builder preenche esse id pelo
829
- dropdown; um nó criado via API/MCP SEM `aiAssistantId` "não funciona" por isso. Só rodam sem
830
- assistente: `aiMode: 'custom'` (motor cru com a chave da conta + `aiModel`) e flow `ai_tool` em
831
- `generate`/`custom`. A saída fica em `aiResponseVar` (default `ai_response`); `intent` também em
825
+ **`aiAssistantId` só é obrigatório em `generate`** (id de um assistente Captain da conta; é ele que
826
+ traz a base de conhecimento). **Sem ele o nó `generate` sai pela saída `error` desde 20/08/2026**
827
+ (`AI Assistant not configured`). Desde 10/11/2026 **`intent`, `sentiment` e `extract` NÃO usam
828
+ assistente** (chamam a IA direto com a chave da conta + `aiModel`) e a tela nem mostra o campo nesses
829
+ três: não mande `aiAssistantId` neles (se vier, é ignorado). `custom` usa o assistente se houver e roda
830
+ sem (motor cru). Flow `ai_tool` em `generate`/`custom` também roda sem. A saída fica em `aiResponseVar` (default `ai_response`); `intent` também em
832
831
  `ai_intent`, `sentiment` em `ai_sentiment`. Nome de variável iniciado por `_` é IGNORADO e cai no
833
832
  padrão (prefixo reservado das chaves internas da sessão) — vale pro `apiResponseVar` também.
834
833
 
@@ -1565,7 +1564,7 @@ Nodes nunca devem ficar com a mesma coordenada `(x, y)`. Se dois nodes têm posi
1565
1564
  | `method`/`url`/`headers`/`body` no node api | Runtime NÃO lê → GET vazio (ou erro "URL not configured") | `apiMethod`/`apiUrl`/`apiHeaders`/`apiBody` |
1566
1565
  | `{{env.X}}` no node api | Não existe → resolve vazio → 401 | `{{account.custom_attribute.X}}` (secret resolve só no node api) |
1567
1566
  | `{{api_response.payload.campo}}` | `.payload` não existe → vazio | `{{api_response.campo}}` (o corpo fica direto sob a var); status em `{{api_response_status}}` |
1568
- | node `ai` via API sem `aiAssistantId` | Sai pela saída `error` (desde 20/08; antes ficava verde com a variável vazia) | Informe `aiAssistantId` (obrigatório em generate/intent/sentiment/extract) |
1567
+ | node `ai` em `generate` via API sem `aiAssistantId` | Sai pela saída `error` (desde 20/08; antes ficava verde com a variável vazia) | Informe `aiAssistantId` (obrigatório só em `generate`; `intent`/`sentiment`/`extract` não usam desde 10/11) |
1569
1568
  | `contextMessages` no node `ai` | Chave errada → descartada em silêncio (fica 5) | `aiContextMessages` (0, 1, 3, 5, 10, 25, 50, 75, 100) |
1570
1569
  | Nome de variável começando com `_` (`set_variable`, `saveVariable`, `apiResponseVar`, `aiResponseVar`) | Prefixo reservado → ignorado / cai no padrão | Nome sem `_` na frente |
1571
1570
  | `{ type: "delay", seconds: 2 }` no send_message | A tela não lê `seconds` → abre como "undefineds" | `duration_seconds` (0-30) |
@@ -634,7 +634,8 @@ as outras duas seguem aplicadas. Não prometa essa permissão ao cliente sem con
634
634
  (`conversation_mode: "group"`), o start pode ter o item `{ "key": "group_participant_joined", "config": {
635
635
  "group_match": "any", "group_name": "", "group_ids": [] } }`. Filtro OPCIONAL de quais grupos disparam:
636
636
  `group_match` (`any` padrão, ou os mesmos operadores do "Buscar por nome": `contains`, `equal_to`, `starts_with`,
637
- `ends_with`, `does_not_contain`, `not_equal_to`) + `group_name`, e/ou `group_ids` (mira exata por id — casa por
637
+ `ends_with`, `does_not_contain`, `not_equal_to`) + `group_names` (lista, 09/11/2026: nos operadores positivos basta UM
638
+ nome casar; em `does_not_contain`/`not_equal_to` NENHUM pode casar; o `group_name` antigo, texto, é somado), e/ou `group_ids` (mira exata por id — casa por
638
639
  dígitos, aceita `1203...@g.us` ou só o número). Quando alguém entra, o `send_message` seguinte cai **no próprio
639
640
  grupo** (o grupo é a conversa do flow).
640
641
 
@@ -283,6 +283,27 @@ existiam).
283
283
 
284
284
  **NUNCA gravar inteiros direto** — sempre objetos com `{display_id: ...}`. Inteiros diretos causam TypeError no `as_json`.
285
285
 
286
+ ## Link do quadro filtrado (11/11/2026)
287
+
288
+ O endereço do Kanban também carrega os filtros do topo. Para mandar "o quadro do funil X só com os cards ganhos da Ana",
289
+ monte o endereço e entregue na resposta (não existe ferramenta para isso):
290
+
291
+ ```
292
+ <painel>/app/accounts/<conta>/kanban?funnel=<funil>&assignee=<id do agente>&status=won
293
+ ```
294
+
295
+ | Parte | Valor |
296
+ |---|---|
297
+ | `assignee` | `all` (todos), `-1` (sem dono) ou o id do agente |
298
+ | `status` | as situações ligadas, por vírgula: `open`, `won`, `lost`, `snoozed` |
299
+ | `label` | nome da etiqueta |
300
+ | `origin` | plataformas por vírgula (as mesmas de `origin_platforms` em `lionchat_kanban_items_list`) |
301
+ | `priority` | `urgent`, `high`, `medium`, `low`, `none` |
302
+ | `offer_name` | nome da oferta (nunca `offer`) |
303
+ | `view` | `list` para abrir na visão Lista |
304
+
305
+ Quem abre vê só o que já pode ver. Na Agenda vale o mesmo: `<painel>/app/accounts/<conta>/agenda?view=tasks&assignee=<id>&type=task`.
306
+
286
307
  ## Link do card, da aba e da conversa (03/11/2026)
287
308
 
288
309
  Abrir um card no Kanban muda o endereço da página, e quem abre esse endereço vê a mesma coisa: o quadro daquele funil, o card aberto, a aba escolhida e, se houver, a conversa por cima. **Não existe ferramenta para isso e nem precisa: você monta o endereço com o que já tem e entrega na resposta.** Quando alguém pedir "o link desse card" ou "me manda onde eu vejo isso", é daqui que sai.
@@ -385,6 +385,24 @@ três caminhos — botão da bolha (`lionchat_conversations_messages_create_1`),
385
385
  (`lionchat_inboxes_failed_messages_bulk_retry`) e a auto-recuperação do WAHA. Se o usuário quer
386
386
  mesmo mandar de novo, o caminho é escrever uma mensagem nova.
387
387
 
388
+ ### Conexão híbrida: "reenviar voltou 422", "Não enviada: ..." e reconexão sozinha (09/11)
389
+ A conexão híbrida (WhatsApp de apoio por QR Code ligado a uma caixa da API oficial) passou a ter as mesmas
390
+ proteções de envio das caixas de QR Code:
391
+ - **Tenta de novo sozinha** quando a conexão estava se reconectando no instante do envio (30 s, 2, 5 e 15 min),
392
+ sempre pela híbrida — nunca pela API oficial.
393
+ - **Reenviar (`lionchat_conversations_messages_create_1`) responde 422** quando a mensagem JÁ saiu pela híbrida
394
+ (inteira ou só parte dos anexos): reenviar duplicaria no cliente. Oriente a mandar uma mensagem nova.
395
+ - **"Não enviada: o cliente respondeu antes."** — follow-up da IA que só sairia depois de o cliente já ter escrito
396
+ (vale também nas caixas de QR Code). **"Não enviada: a saída pela conexão híbrida foi desligada nesta caixa."** —
397
+ a chave da caixa foi desligada enquanto o sistema ainda tentava. As duas ficam fora de todo reenvio automático;
398
+ o botão de reenviar UMA mensagem continua possível.
399
+ - **Reenvio em lote** (`lionchat_inboxes_failed_messages_bulk_retry`) inclui as mensagens da híbrida, uma a cada
400
+ 8 s, só com a conexão no ar; o bloqueio 463 (abordagem fria) dela fica de fora, e o `retryable_count` do summary
401
+ já desconta essas.
402
+ - **Reconexão automática**: se a conexão híbrida trava, o sistema a reconecta sozinho e reenvia o que ela não
403
+ conseguiu mandar. Os administradores veem no sininho "Conexão híbrida de <caixa> reconectada" (ou "precisa de
404
+ atenção"). Desconectar de propósito nunca é desfeito sozinho.
405
+
388
406
  ### "A falha sumiu do painel" / "apareceu um grupo Excluídas" (25/07)
389
407
  Dois comportamentos novos e propositais no painel Falhas de envio
390
408
  (`lionchat_inboxes_failed_messages_summary`):
package/dist/tools.js CHANGED
@@ -363,7 +363,7 @@ function registerListCategoriesTool(server, allEndpoints) {
363
363
  // Helps LLMs build correct flow_data without hitting trial-and-error on
364
364
  // node types, action keys, source handles, etc.
365
365
  function registerFlowsSchemaReferenceTool(server) {
366
- const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-11-03)
366
+ const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-11-11)
367
367
 
368
368
  flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
369
369
 
@@ -609,7 +609,11 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
609
609
  group_participant_joined / group_participant_left (NOVO 07/08 — 'Entrou no grupo' / 'Saiu do
610
610
  grupo', evento de grupo WhatsApp QR Code). Item {key:'group_participant_joined'|
611
611
  'group_participant_left', config:{group_match:'any'|'contains'|'does_not_contain'|'equal_to'|
612
- 'not_equal_to'|'starts_with'|'ends_with', group_name:'<termo>', group_ids:['<id ou 1203..@g.us>']}}
612
+ 'not_equal_to'|'starts_with'|'ends_with', group_names:['<termo>',...], group_name:'<termo>',
613
+ group_ids:['<id ou 1203..@g.us>']}}
614
+ group_names (NOVO 09/11/2026) = VARIOS nomes: em contains/equal_to/starts_with/ends_with basta UM casar;
615
+ em does_not_contain/not_equal_to NENHUM pode casar. group_name (texto, antigo) segue valendo e e SOMADO a
616
+ lista (a tela grava a lista e repete o 1o nome em group_name).
613
617
  — os dois filtros se SOMAM (E logico), cada um vazio deixa passar: group_match/group_name filtra
614
618
  pelo NOME do grupo; group_ids (so via API/MCP, compara por digitos) mira grupos exatos. Vale nos 2
615
619
  tipos de flow: em flow de grupo roda na conversa do grupo; em flow individual roda na conversa da
@@ -790,7 +794,10 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
790
794
  OBRIGATORIO: 'inbox' na primeira e 'channel_type' na segunda — e ele que faz a tela abrir o
791
795
  seletor certo; sem ele a regra roda no motor e a tela nao desenha campo nenhum pra ela.
792
796
  conversation_no_team (NOVO 2026-08-15: conversa SEM equipe atribuida — e o preset "Sem equipe"
793
- da tela; operador dedicado, sem value), conversation_has_ai_agent/conversation_no_ai_agent
797
+ da tela; operador dedicado, sem value),
798
+ conversation_has_team/conversation_not_team (NOVO 09/11/2026 — o que a tela grava em "Em equipe";
799
+ field '{{conversation.team_id}}', valueType 'team', values:[ids]. values VAZIO: has_team = TEM
800
+ qualquer equipe, not_team = SEM equipe; com ids: esta / nao esta em uma delas), conversation_has_ai_agent/conversation_no_ai_agent
794
801
  (IA ativa/inativa na conversa; not_ai_agent = sinonimo de no_ai_agent),
795
802
  contact_has_label/contact_no_label/conversation_has_label/conversation_no_label
796
803
  (values = array de titulos ou string com virgula. ATENCAO 2026-08-18: escreva operator E
@@ -802,6 +809,9 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
802
809
  kanban_exists/kanban_in_stage/kanban_won/kanban_lost/kanban_snoozed (funnel_id e CHAVE SEPARADA da condicao,
803
810
  numero ex funnel_id:37; a etapa vai em value=slug puro ex value:"avaliacao_aceita" ou em stage,
804
811
  NAO no formato "37:etapa"), pagetrack_visited/pagetrack_event,
812
+ kanban_in_stage aceita VARIAS etapas (NOVO 09/11/2026): stages:['qualificado','contrato_enviado'] —
813
+ casa se o card estiver em QUALQUER uma; stage antigo e somado (a tela repete a 1a em stage).
814
+ Sem nenhuma etapa a regra NUNCA casa (pra 'tem card' use kanban_exists).
805
815
  Desde 20/08 as 4 condicoes kanban_* enxergam o card da conversa ATUAL ou o card cuja conversa de
806
816
  ORIGEM e a atual (card religado pra conversa mais nova) — antes "nao tem card" na conversa velha.
807
817
  kanban_snoozed (NOVO 11/10/2026) = o card esta ADIADO naquele funil; nao existe condicao "card aberto".
@@ -829,7 +839,9 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
829
839
  via values[]) + is_empty / is_not_empty (SEM values[]).
830
840
  EQUIPE (condicao "Esta na equipe", field '{{conversation.team_id}}'): aceita VARIAS equipes de uma
831
841
  vez — passe values:['24','25'] (array de ids) em vez de value unico; casa se bater qualquer uma.
832
- Array de values vazio cai no value unico legado.
842
+ Array de values vazio cai no value unico legado. Desde 09/11/2026 a tela grava os operadores proprios
843
+ conversation_has_team/conversation_not_team (lista vazia = qualquer equipe / sem equipe); equal/not_equal
844
+ seguem funcionando.
833
845
 
834
846
  ▸ action
835
847
  data: { label, items: [ { key, config: {...} } ] }
@@ -850,6 +862,8 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
850
862
  // until_next_month|until_next_reply (ausente = adiada ate a proxima mensagem do cliente)
851
863
  mute_conversation({}), mark_unread({}), add_private_note({text}), send_email_transcript({email}),
852
864
  add_conversation_label({labels:[...]}), remove_conversation_label({labels:[...]}), // etiqueta NA CONVERSA
865
+ // remove_*_label com labels:['__all__'] = tira TODAS as etiquetas (NOVO 09/11/2026; vale tambem
866
+ // em automacao/macro: action_params ['__all__']). Nome de etiqueta nunca comeca com '_'.
853
867
  assign_captain({assistant_id}), deactivate_captain({}),
854
868
  // mark_unread({}) — NOVO 07/08: deixa a conversa NAO LIDA pro time (badge acende). Tipico logo
855
869
  // apos assign_agent/assign_team numa transferencia. Conversa ja nao-lida nao e mexida.
@@ -987,11 +1001,11 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
987
1001
 
988
1002
  ▸ ai
989
1003
  data: { label, aiMode: "generate"|"custom"|"intent"|"sentiment"|"extract", aiPrompt,
990
- aiAssistantId, // OBRIGATORIO em generate/intent/sentiment/extract — sem ele o node
991
- // sai pela saida "error" desde 20/08 ('AI Assistant not configured';
992
- // antes ficava VERDE e seguia como se a IA tivesse respondido).
993
- // So roda sem assistente: aiMode 'custom' (motor cru com a chave da
994
- // conta + aiModel) e flow ai_tool em generate/custom
1004
+ aiAssistantId, // OBRIGATORIO so em generate — sem ele o node sai pela saida "error"
1005
+ // desde 20/08 ('AI Assistant not configured'). Desde 10/11 intent/
1006
+ // sentiment/extract NAO usam assistente (IA direto com a chave da conta
1007
+ // + aiModel; assistente gravado e ignorado). Tambem roda sem: aiMode
1008
+ // 'custom' (motor cru) e flow ai_tool em generate/custom
995
1009
  aiModel, // opcional: modelo LLM SO deste node (ex "gpt-4.1-mini");
996
1010
  // vazio/ausente = modelo padrao da conta; vale em TODOS os
997
1011
  // modos e tambem com assistente (sobrepoe o modelo dele)
@@ -1274,8 +1288,8 @@ sourceHandle OBRIGATORIO casar com handle exposto pelo node source.
1274
1288
  13. Assistente de Formulas no editor (2026-07-10): quem edita pela tela tem preview ao vivo
1275
1289
  (inclusive com contato real), avisos ao digitar e 'Gerar com IA' nos campos de formula —
1276
1290
  ao entregar um flow com Liquid, sugira ao usuario validar as formulas la.
1277
- 14. ai: a chave de contexto e aiContextMessages (nao contextMessages); sem aiAssistantId o bloco sai por
1278
- "error" (nao fica verde). Nome de variavel iniciado por "_" e ignorado em set_variable/saveVariable e
1291
+ 14. ai: a chave de contexto e aiContextMessages (nao contextMessages); em generate, sem aiAssistantId o bloco
1292
+ sai por "error" (nao fica verde); intent/sentiment/extract dispensam assistente desde 10/11. Nome de variavel iniciado por "_" e ignorado em set_variable/saveVariable e
1279
1293
  cai no padrao em apiResponseVar/aiResponseVar.
1280
1294
  15. send_message: item delay usa duration_seconds (a tela nao le "seconds"). Em caixa oficial ligue
1281
1295
  "window_closed" num bloco com template — sem o fio, janela fechada vira erro.
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
@@ -1219,7 +1219,7 @@
1219
1219
  "type": "integer",
1220
1220
  "location": "query",
1221
1221
  "required": false,
1222
- "description": "So conversas atualizadas nos ultimos N segundos (ex.: 3600 = ultima hora). Util para polling de atividade recente."
1222
+ "description": "So conversas atualizadas nos ultimos N segundos (ex.: 3600 = ultima hora). Util para polling de atividade recente. TETOS (desde 09/11/2026): no maximo 3 horas (10800 s; pedido maior e cortado para 3 h) e no maximo as 1.000 conversas atualizadas mais recentemente. A resposta traz meta.updated_within_applied (segundos de fato usados) e meta.truncated (true = havia mais de 1.000 e as mais antigas ficaram fora). Com updated_within NAO ha paginacao: page 2 em diante volta vazia. Precisa de mais? Faca janelas menores (ex.: de hora em hora) ou use a lista paginada sem updated_within."
1223
1223
  }
1224
1224
  ],
1225
1225
  "returns": "Objeto com envelope DUPLO: { data: { meta: {...}, payload: [conversas] } }. A lista fica em data.payload (NAO em payload direto). O meta traz exatamente: mine_count, assigned_count, unassigned_count, all_count, groups_count. Cada conversa vem com um array extra `kanban_items` (cards do Kanban visiveis pro usuario). Paginacao real: 25/pagina.",
@@ -2329,7 +2329,7 @@
2329
2329
  "method": "POST",
2330
2330
  "path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{id}/retry",
2331
2331
  "title": "Reenviar Mensagem",
2332
- "description": "[POST] Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id. [2026-07-24] Motor unico de reenvio: limpeza cirurgica de content_attributes (preserva vinculos de flow/automacao/comentario IG) + trava anti-duplicata por mensagem. Pra reenviar TODAS as falhadas de uma caixa de uma vez, use lionchat_inboxes_failed_messages_bulk_retry. [2026-07-25] Mensagem cancelada ou excluida NAO reenvia — a chamada responde 422 com o motivo. Pra cancelar de vez o reenvio, use lionchat_conversations_messages_cancel_retry.",
2332
+ "description": "[POST] Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id. [2026-07-24] Motor unico de reenvio: limpeza cirurgica de content_attributes (preserva vinculos de flow/automacao/comentario IG) + trava anti-duplicata por mensagem. Pra reenviar TODAS as falhadas de uma caixa de uma vez, use lionchat_inboxes_failed_messages_bulk_retry. [2026-07-25] Mensagem cancelada ou excluida NAO reenvia — a chamada responde 422 com o motivo. Pra cancelar de vez o reenvio, use lionchat_conversations_messages_cancel_retry. [2026-11-09] Mensagem que JA saiu pela conexao hibrida da caixa oficial (inteira, ou so parte dos anexos) NAO reenvia: responde 422 dizendo que reenviar duplicaria — oriente o usuario a mandar uma mensagem nova. Mensagem pedida pela hibrida que saiu pela API oficial e foi recusada depois continua reenviavel.",
2333
2333
  "category": "Mensagens",
2334
2334
  "params": [
2335
2335
  {
@@ -8860,21 +8860,21 @@
8860
8860
  "type": "string",
8861
8861
  "location": "query",
8862
8862
  "required": false,
8863
- "description": "Tipo da tarefa"
8863
+ "description": "Tipo da tarefa: task, call, meeting, email, follow_up, reminder, booking ou a chave de um tipo criado pela conta (inclusive desativado). Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma. Ex.: \"task,follow_up\"."
8864
8864
  },
8865
8865
  {
8866
8866
  "name": "status",
8867
8867
  "type": "string",
8868
8868
  "location": "query",
8869
8869
  "required": false,
8870
- "description": "Status"
8870
+ "description": "Situacao: 0 pendente, 1 concluida, 2 cancelada, 3 adiada (numero ou nome). Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma."
8871
8871
  },
8872
8872
  {
8873
8873
  "name": "priority",
8874
8874
  "type": "string",
8875
8875
  "location": "query",
8876
8876
  "required": false,
8877
- "description": "Prioridade (22/10): urgent | high | medium | low | none. Antes de 22/10 este filtro era ignorado pelo servidor."
8877
+ "description": "Prioridade: urgent | high | medium | low | none. Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma."
8878
8878
  },
8879
8879
  {
8880
8880
  "name": "user_id",
@@ -8885,10 +8885,10 @@
8885
8885
  },
8886
8886
  {
8887
8887
  "name": "assignee_id",
8888
- "type": "integer",
8888
+ "type": "string",
8889
8889
  "location": "query",
8890
8890
  "required": false,
8891
- "description": "ID do responsavel"
8891
+ "description": "Responsavel (id do agente). Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma. Ex.: \"12,15\". Cada um ve so o que ja via: quem nao gerencia a agenda da equipe so traz as tarefas de um colega se ele publicou a agenda."
8892
8892
  },
8893
8893
  {
8894
8894
  "name": "q",
@@ -9622,28 +9622,28 @@
9622
9622
  "type": "string",
9623
9623
  "location": "query",
9624
9624
  "required": false,
9625
- "description": "Tipo da tarefa"
9625
+ "description": "Tipo da tarefa: task, call, meeting, email, follow_up, reminder, booking ou a chave de um tipo criado pela conta (inclusive desativado). Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma. Ex.: \"task,follow_up\"."
9626
9626
  },
9627
9627
  {
9628
9628
  "name": "status",
9629
9629
  "type": "string",
9630
9630
  "location": "query",
9631
9631
  "required": false,
9632
- "description": "Situacao dentro das abertas: 0 = pendente, 3 = adiada. Concluida (1) e cancelada (2) nunca aparecem aqui (devolvem grupos vazios). Para ver concluidas, use group=completed."
9632
+ "description": "Situacao dentro das abertas: 0 = pendente, 3 = adiada (concluida e cancelada nunca aparecem aqui). Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma."
9633
9633
  },
9634
9634
  {
9635
9635
  "name": "priority",
9636
9636
  "type": "string",
9637
9637
  "location": "query",
9638
9638
  "required": false,
9639
- "description": "Prioridade (22/10): urgent | high | medium | low | none. Antes de 22/10 este filtro era ignorado pelo servidor."
9639
+ "description": "Prioridade: urgent | high | medium | low | none. Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma."
9640
9640
  },
9641
9641
  {
9642
9642
  "name": "assignee_id",
9643
- "type": "integer",
9643
+ "type": "string",
9644
9644
  "location": "query",
9645
9645
  "required": false,
9646
- "description": "Tarefas de UMA pessoa. So muda alguma coisa para quem pode ver a agenda da equipe (administrador ou cargo com 'Gerenciar agenda da equipe'); os demais veem sempre as proprias."
9646
+ "description": "Responsavel (id do agente). Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma. Ex.: \"12,15\". Cada um ve so o que ja via: quem nao gerencia a agenda da equipe so traz as tarefas de um colega se ele publicou a agenda."
9647
9647
  },
9648
9648
  {
9649
9649
  "name": "user_id",
@@ -10028,7 +10028,7 @@
10028
10028
  "type": "string",
10029
10029
  "location": "query",
10030
10030
  "required": false,
10031
- "description": "pending, sent, failed"
10031
+ "description": "Situacao dos disparos: pending, sent, failed. Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma."
10032
10032
  },
10033
10033
  {
10034
10034
  "name": "date_start",
@@ -10043,6 +10043,13 @@
10043
10043
  "location": "query",
10044
10044
  "required": false,
10045
10045
  "description": "Data fim"
10046
+ },
10047
+ {
10048
+ "name": "assignee_id",
10049
+ "location": "query",
10050
+ "required": false,
10051
+ "type": "string",
10052
+ "description": "Responsavel da CONVERSA do disparo (id do agente). Aceita VARIAS opcoes separadas por virgula (11/11/2026): a lista traz o que bate com QUALQUER uma. Quem nao e administrador ja ve so os disparos das proprias conversas."
10046
10053
  }
10047
10054
  ],
10048
10055
  "returns": "array de mensagens agendadas",
@@ -10661,7 +10668,7 @@
10661
10668
  "type": "string",
10662
10669
  "location": "query",
10663
10670
  "required": false,
10664
- "description": "ID do agente ou \"all\""
10671
+ "description": "ID do agente, \"all\", ou VARIOS ids separados por virgula (11/11/2026). Ids que a pessoa nao pode ver sao ignorados."
10665
10672
  }
10666
10673
  ],
10667
10674
  "returns": "Lista pura: a resposta E o array, sem embrulho de meta/payload. Cada item e um tipo de evento de agendamento com os campos do registro mais `booking_availabilities`, `follow_up_schedules`, `public_url`, `agent_profile_url`, `account_booking_slug` e os dados do agente dono (`agent_name`, `agent_color`, `agent_avatar_url`). Traz ativos E inativos, ordenados do mais novo pro mais antigo, sem paginacao. Filtro opcional `user_id` (ou `user_id=all` para todos os agentes visiveis).",
@@ -11912,7 +11919,7 @@
11912
11919
  "method": "GET",
11913
11920
  "path": "/api/v1/accounts/{account_id}/custom_filters",
11914
11921
  "title": "Listar Filtros",
11915
- "description": "Lista os filtros salvos por filter_type (padrao conversation). Desde 22/10/2026: filter_type contact (segmentos) lista os segmentos da CONTA inteira (precisa do menu Contatos no cargo), ordenados por nome; conversation (pastas) traz as do usuario atual MAIS as compartilhadas da conta (campo shared, desde 27/10/2026); report continua so os do usuario atual. Em pasta compartilhada criada por OUTRA pessoa, user_id e user_name vem nulos. Cada item traz user_id/user_name (\"criado por\", pode vir nulo) e can_manage (se quem pergunta pode editar/apagar).",
11922
+ "description": "Lista os filtros salvos por filter_type (padrao conversation). Desde 22/10/2026: filter_type contact (segmentos) lista os segmentos da CONTA inteira (precisa do menu Contatos no cargo), ordenados por nome; conversation (pastas) traz as do usuario atual MAIS as compartilhadas da conta (campo shared, desde 27/10/2026); report continua so os do usuario atual. Em pasta compartilhada criada por OUTRA pessoa, user_id e user_name vem nulos. Cada item traz user_id/user_name (\"criado por\", pode vir nulo) e can_manage (se quem pergunta pode editar/apagar). SEGMENTO DE EMPRESAS (11/11/2026): filter_type 'company' (ou 3) = segmento da aba Empresas, da CONTA inteira como o de contatos; qualquer administrador ou atendente com o menu Empresas visivel cria, edita e apaga (menu oculto = 401; modulo Empresas desligado = 403). query = {payload:[...]} no formato de lionchat_companies_filter (regra vazia = 422). Segmento de empresas NAO serve de publico de campanha. Para ver as empresas do segmento, mande o query.payload dele para lionchat_companies_filter.",
11916
11923
  "category": "Filtros Personalizados",
11917
11924
  "params": [
11918
11925
  {
@@ -11920,7 +11927,7 @@
11920
11927
  "type": "string",
11921
11928
  "location": "query",
11922
11929
  "required": false,
11923
- "description": "conversation (pastas: as suas + as compartilhadas da conta), contact (segmentos, da CONTA) ou report"
11930
+ "description": "conversation (pastas: as suas + as compartilhadas da conta), contact (segmentos, da CONTA) ou report; 'company' (segmento de EMPRESAS, da conta)"
11924
11931
  }
11925
11932
  ],
11926
11933
  "returns": "array de filtros (sem meta/payload)",
@@ -11932,7 +11939,8 @@
11932
11939
  "related_tools": [
11933
11940
  "lionchat_custom_filters_create",
11934
11941
  "lionchat_custom_filters_show",
11935
- "lionchat_custom_filters_update"
11942
+ "lionchat_custom_filters_update",
11943
+ "lionchat_companies_filter"
11936
11944
  ]
11937
11945
  },
11938
11946
  {
@@ -11940,7 +11948,7 @@
11940
11948
  "method": "POST",
11941
11949
  "path": "/api/v1/accounts/{account_id}/custom_filters",
11942
11950
  "title": "Criar Filtro",
11943
- "description": "Cria um filtro personalizado. Cria novo filtro personalizado. Obrigatórios: name, filter_type, query. Valida unicidade quando aplicável. Retorna o filtro personalizado criado com ID atribuído. Desde 22/10/2026 o segmento (filter_type contact) e da CONTA: criar exige administrador ou cargo com contact_manage, campaign_manage ou automation_manage (sem isso, 401). filter_type aceita o nome ou o numero. Regra vazia ou incompleta = 422. Teto de 1.000 segmentos por conta. PASTA COMPARTILHADA (27/10/2026): pasta de conversa (filter_type conversation) com shared true aparece para TODA a conta; so administrador cria, edita, compartilha ou apaga (sem isso, 401). Cada pessoa ve dentro dela so as conversas que ja pode ver. shared nulo = 422; compartilhada sem nenhuma condicao = 422; segmento e relatorio nao podem ser compartilhados (422). Para mostrar a cada pessoa as conversas DELA use assignee_id com o valor 'current_user' (\"Quem esta vendo\").",
11951
+ "description": "Cria um filtro personalizado. Cria novo filtro personalizado. Obrigatórios: name, filter_type, query. Valida unicidade quando aplicável. Retorna o filtro personalizado criado com ID atribuído. Desde 22/10/2026 o segmento (filter_type contact) e da CONTA: criar exige administrador ou cargo com contact_manage, campaign_manage ou automation_manage (sem isso, 401). filter_type aceita o nome ou o numero. Regra vazia ou incompleta = 422. Teto de 1.000 segmentos por conta. PASTA COMPARTILHADA (27/10/2026): pasta de conversa (filter_type conversation) com shared true aparece para TODA a conta; so administrador cria, edita, compartilha ou apaga (sem isso, 401). Cada pessoa ve dentro dela so as conversas que ja pode ver. shared nulo = 422; compartilhada sem nenhuma condicao = 422; segmento e relatorio nao podem ser compartilhados (422). Para mostrar a cada pessoa as conversas DELA use assignee_id com o valor 'current_user' (\"Quem esta vendo\"). SEGMENTO DE EMPRESAS (11/11/2026): filter_type 'company' (ou 3) = segmento da aba Empresas, da CONTA inteira como o de contatos; qualquer administrador ou atendente com o menu Empresas visivel cria, edita e apaga (menu oculto = 401; modulo Empresas desligado = 403). query = {payload:[...]} no formato de lionchat_companies_filter (regra vazia = 422). Segmento de empresas NAO serve de publico de campanha. Para ver as empresas do segmento, mande o query.payload dele para lionchat_companies_filter.",
11944
11952
  "category": "Filtros Personalizados",
11945
11953
  "params": [
11946
11954
  {
@@ -11955,7 +11963,7 @@
11955
11963
  "type": "string",
11956
11964
  "location": "body",
11957
11965
  "required": true,
11958
- "description": "'conversation' (pasta de conversas), 'contact' (segmento de contatos) ou 'report' — aceita o nome ou o numero"
11966
+ "description": "'conversation' (pasta de conversas), 'contact' (segmento de contatos) ou 'report' — aceita o nome ou o numero; 'company' (segmento de EMPRESAS, da conta)"
11959
11967
  },
11960
11968
  {
11961
11969
  "name": "query",
@@ -11981,7 +11989,8 @@
11981
11989
  "related_tools": [
11982
11990
  "lionchat_custom_filters_list",
11983
11991
  "lionchat_custom_filters_show",
11984
- "lionchat_custom_filters_update"
11992
+ "lionchat_custom_filters_update",
11993
+ "lionchat_companies_filter"
11985
11994
  ],
11986
11995
  "body_wrapper": "custom_filter"
11987
11996
  },
@@ -11990,7 +11999,7 @@
11990
11999
  "method": "GET",
11991
12000
  "path": "/api/v1/accounts/{account_id}/custom_filters/{id}",
11992
12001
  "title": "Detalhe do Filtro",
11993
- "description": "Retorna detalhes. Retorna detalhes completos de UM filtro personalizado específico pelo ID. Inclui campos relacionais quando aplicável. Pasta compartilhada (shared true) pode ser lida por qualquer membro da conta.",
12002
+ "description": "Retorna detalhes. Retorna detalhes completos de UM filtro personalizado específico pelo ID. Inclui campos relacionais quando aplicável. Pasta compartilhada (shared true) pode ser lida por qualquer membro da conta. SEGMENTO DE EMPRESAS (11/11/2026): filter_type 'company' (ou 3) = segmento da aba Empresas, da CONTA inteira como o de contatos; qualquer administrador ou atendente com o menu Empresas visivel cria, edita e apaga (menu oculto = 401; modulo Empresas desligado = 403). query = {payload:[...]} no formato de lionchat_companies_filter (regra vazia = 422). Segmento de empresas NAO serve de publico de campanha. Para ver as empresas do segmento, mande o query.payload dele para lionchat_companies_filter.",
11994
12003
  "category": "Filtros Personalizados",
11995
12004
  "params": [
11996
12005
  {
@@ -12010,7 +12019,8 @@
12010
12019
  "related_tools": [
12011
12020
  "lionchat_custom_filters_list",
12012
12021
  "lionchat_custom_filters_create",
12013
- "lionchat_custom_filters_update"
12022
+ "lionchat_custom_filters_update",
12023
+ "lionchat_companies_filter"
12014
12024
  ]
12015
12025
  },
12016
12026
  {
@@ -12018,7 +12028,7 @@
12018
12028
  "method": "PATCH",
12019
12029
  "path": "/api/v1/accounts/{account_id}/custom_filters/{id}",
12020
12030
  "title": "Atualizar Filtro",
12021
- "description": "Atualiza filtro. Atualiza campos do filtro personalizado existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, query, shared. filter_type e IGNORADO no update (nao da para trocar o tipo). Segmento (contact) so pode ser editado por administrador ou cargo com contact_manage, campaign_manage ou automation_manage — sem isso, 401 (veja can_manage no list/show). PASTA COMPARTILHADA (27/10/2026): so administrador edita (401). So mande shared para MUDAR o compartilhamento: shared false numa compartilhada a transforma em pasta pessoal DE QUEM MANDOU (some para os outros). Em compartilhada, query.sort_by muda a ordem padrao de TODOS. shared nulo = 422; compartilhada sem condicao = 422. Dois administradores editando juntos: vale a ultima gravacao.",
12031
+ "description": "Atualiza filtro. Atualiza campos do filtro personalizado existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, query, shared. filter_type e IGNORADO no update (nao da para trocar o tipo). Segmento (contact) so pode ser editado por administrador ou cargo com contact_manage, campaign_manage ou automation_manage — sem isso, 401 (veja can_manage no list/show). PASTA COMPARTILHADA (27/10/2026): so administrador edita (401). So mande shared para MUDAR o compartilhamento: shared false numa compartilhada a transforma em pasta pessoal DE QUEM MANDOU (some para os outros). Em compartilhada, query.sort_by muda a ordem padrao de TODOS. shared nulo = 422; compartilhada sem condicao = 422. Dois administradores editando juntos: vale a ultima gravacao. SEGMENTO DE EMPRESAS (11/11/2026): filter_type 'company' (ou 3) = segmento da aba Empresas, da CONTA inteira como o de contatos; qualquer administrador ou atendente com o menu Empresas visivel cria, edita e apaga (menu oculto = 401; modulo Empresas desligado = 403). query = {payload:[...]} no formato de lionchat_companies_filter (regra vazia = 422). Segmento de empresas NAO serve de publico de campanha. Para ver as empresas do segmento, mande o query.payload dele para lionchat_companies_filter.",
12022
12032
  "category": "Filtros Personalizados",
12023
12033
  "params": [
12024
12034
  {
@@ -12059,7 +12069,8 @@
12059
12069
  "related_tools": [
12060
12070
  "lionchat_custom_filters_list",
12061
12071
  "lionchat_custom_filters_create",
12062
- "lionchat_custom_filters_show"
12072
+ "lionchat_custom_filters_show",
12073
+ "lionchat_companies_filter"
12063
12074
  ],
12064
12075
  "body_wrapper": "custom_filter"
12065
12076
  },
@@ -12068,7 +12079,7 @@
12068
12079
  "method": "DELETE",
12069
12080
  "path": "/api/v1/accounts/{account_id}/custom_filters/{id}",
12070
12081
  "title": "Deletar Filtro",
12071
- "description": "Remove filtro. Remove filtro personalizado permanentemente. CUIDADO: ação irreversível em muitos casos. Verifique dependências antes. Segmento (contact) so pode ser apagado por administrador ou cargo com contact_manage, campaign_manage ou automation_manage (401). Segmento usado por campanha programada (no publico ou no 'Nao enviar para') NAO e apagado: 422 com message citando a campanha. Pasta compartilhada: so administrador apaga, e ela some para TODA a conta.",
12082
+ "description": "Remove filtro. Remove filtro personalizado permanentemente. CUIDADO: ação irreversível em muitos casos. Verifique dependências antes. Segmento (contact) so pode ser apagado por administrador ou cargo com contact_manage, campaign_manage ou automation_manage (401). Segmento usado por campanha programada (no publico ou no 'Nao enviar para') NAO e apagado: 422 com message citando a campanha. Pasta compartilhada: so administrador apaga, e ela some para TODA a conta. SEGMENTO DE EMPRESAS (11/11/2026): filter_type 'company' (ou 3) = segmento da aba Empresas, da CONTA inteira como o de contatos; qualquer administrador ou atendente com o menu Empresas visivel cria, edita e apaga (menu oculto = 401; modulo Empresas desligado = 403). query = {payload:[...]} no formato de lionchat_companies_filter (regra vazia = 422). Segmento de empresas NAO serve de publico de campanha. Para ver as empresas do segmento, mande o query.payload dele para lionchat_companies_filter.",
12072
12083
  "category": "Filtros Personalizados",
12073
12084
  "params": [
12074
12085
  {
@@ -12088,7 +12099,8 @@
12088
12099
  "related_tools": [
12089
12100
  "lionchat_custom_filters_list",
12090
12101
  "lionchat_custom_filters_create",
12091
- "lionchat_custom_filters_show"
12102
+ "lionchat_custom_filters_show",
12103
+ "lionchat_companies_filter"
12092
12104
  ]
12093
12105
  },
12094
12106
  {
@@ -12447,14 +12459,16 @@
12447
12459
  "Buscar com filtros antes de outra operação",
12448
12460
  "Auditoria/relatório de empresas ativas"
12449
12461
  ],
12450
- "related_tools": []
12462
+ "related_tools": [
12463
+ "lionchat_companies_filter"
12464
+ ]
12451
12465
  },
12452
12466
  {
12453
12467
  "id": "lionchat_companies_create",
12454
12468
  "method": "POST",
12455
12469
  "path": "/api/v1/accounts/{account_id}/companies",
12456
12470
  "title": "Criar Empresa",
12457
- "description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. ENTERPRISE-only. Empresa so nasce assim (manual): o sistema nao cria empresa pelo dominio do e-mail dos contatos. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava so digitos), phone, email, address: {cep, street, number, complement, neighborhood, city, state, country}, social_profiles: {linkedin, facebook, instagram, telegram, tiktok, twitter, github} }. A gravacao MESCLA: mande so o que muda; valor vazio (\"\") apaga aquela chave; chave ausente nao mexe. CNPJ ou e-mail invalido = 422. additional_attributes, address e social_profiles precisam ser OBJETOS (texto ou lista = 422, nada e apagado).",
12471
+ "description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. ENTERPRISE-only. Empresa so nasce assim (manual): o sistema nao cria empresa pelo dominio do e-mail dos contatos. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava so digitos), phone, email, address: {cep, street, number, complement, neighborhood, city, state, country}, social_profiles: {linkedin, facebook, instagram, telegram, tiktok, twitter, github} }. A gravacao MESCLA: mande so o que muda; valor vazio (\"\") apaga aquela chave; chave ausente nao mexe. CNPJ ou e-mail invalido = 422. additional_attributes, address e social_profiles precisam ser OBJETOS (texto ou lista = 422, nada e apagado). CNPJ UNICO POR EMPRESA NA CONTA (2026-11-11): additional_attributes.cnpj que ja e de OUTRA empresa da conta = 422 \"Ja existe a empresa X com este CNPJ.\" e NADA do pedido e gravado. Nao crie outra: atualize a empresa X (ache pelo nome com lionchat_companies_search; a busca nao acha por CNPJ). Empresa antiga ja repetida continua salvando os outros campos. Filial tem CNPJ proprio e entra normalmente. CPF/CNPJ na ficha do CONTATO podem repetir.",
12458
12472
  "category": "Empresas",
12459
12473
  "params": [
12460
12474
  {
@@ -12507,7 +12521,7 @@
12507
12521
  "method": "PATCH",
12508
12522
  "path": "/api/v1/accounts/{account_id}/companies/{id}",
12509
12523
  "title": "Atualizar Empresa",
12510
- "description": "Atualiza dados da empresa. Suporta atualizacao parcial (PATCH) — so campos enviados sao alterados. Campos suportados: name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava so digitos), phone, email, address: {cep, street, number, complement, neighborhood, city, state, country}, social_profiles: {linkedin, facebook, instagram, telegram, tiktok, twitter, github} }. A gravacao MESCLA: mande so o que muda; valor vazio (\"\") apaga aquela chave; chave ausente nao mexe. CNPJ ou e-mail invalido = 422. additional_attributes, address e social_profiles precisam ser OBJETOS (texto ou lista = 422, nada e apagado).",
12524
+ "description": "Atualiza dados da empresa. Suporta atualizacao parcial (PATCH) — so campos enviados sao alterados. Campos suportados: name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava so digitos), phone, email, address: {cep, street, number, complement, neighborhood, city, state, country}, social_profiles: {linkedin, facebook, instagram, telegram, tiktok, twitter, github} }. A gravacao MESCLA: mande so o que muda; valor vazio (\"\") apaga aquela chave; chave ausente nao mexe. CNPJ ou e-mail invalido = 422. additional_attributes, address e social_profiles precisam ser OBJETOS (texto ou lista = 422, nada e apagado). CNPJ UNICO POR EMPRESA NA CONTA (2026-11-11): additional_attributes.cnpj que ja e de OUTRA empresa da conta = 422 \"Ja existe a empresa X com este CNPJ.\" e NADA do pedido e gravado. Nao crie outra: atualize a empresa X (ache pelo nome com lionchat_companies_search; a busca nao acha por CNPJ). Empresa antiga ja repetida continua salvando os outros campos. Filial tem CNPJ proprio e entra normalmente. CPF/CNPJ na ficha do CONTATO podem repetir.",
12511
12525
  "category": "Empresas",
12512
12526
  "params": [
12513
12527
  {
@@ -12608,7 +12622,62 @@
12608
12622
  "Buscar pelo email/telefone parcial",
12609
12623
  "Verificar se já existe antes de criar"
12610
12624
  ],
12611
- "related_tools": []
12625
+ "related_tools": [
12626
+ "lionchat_companies_filter"
12627
+ ]
12628
+ },
12629
+ {
12630
+ "id": "lionchat_companies_filter",
12631
+ "method": "POST",
12632
+ "path": "/api/v1/accounts/{account_id}/companies/filter",
12633
+ "title": "Filtrar Empresas",
12634
+ "description": "[2026-11-11] Lista as empresas da conta que atendem as condicoes (aba Empresas > filtro). Mesmo formato do filtro de contatos: payload = lista de condicoes {attribute_key, filter_operator, values, query_operator ('and'/'or', a ultima sem), custom_attribute_type}. 25 por pagina; meta.total_count = total filtrado.\n\nCAMPOS: name (equal_to, not_equal_to, contains, does_not_contain); domain (site), legal_name (razao social), cnpj, phone, email, city, state (os quatro acima + is_present, is_not_present); contacts_count (equal_to, not_equal_to, is_greater_than, is_less_than; valor inteiro); created_at, last_activity_at (today, yesterday, last_days, days_ago, days_before com numero de dias; is_greater_than/is_less_than com data AAAA-MM-DD). Atributo personalizado da EMPRESA: custom_attribute_type 'company_attribute' + a chave do atributo (operadores pelo tipo: texto como os de texto; lista e sim/nao: equal_to/not_equal_to/is_present/is_not_present; numero/data/hora: + is_greater_than/is_less_than). Um atributo de empresa chamado city e OUTRO campo, nunca o endereco.\n\nREGRAS: texto sem maiuscula e sem acento ('sao paulo' acha 'São Paulo'); CNPJ e telefone comparados so pelos numeros (valor sem nenhum numero = 422); 'diferente de' e 'nao contem' trazem tambem a empresa SEM o campo. Campo, operador ou valor que o filtro nao conhece = 422 com o motivo (nunca devolve a lista inteira); payload vazio = 422. Menu Empresas oculto pelo cargo = 401; modulo Empresas desligado = 403.\n\nSEGMENTO SALVO: para listar as empresas de um segmento de empresas, leia o segmento (lionchat_custom_filters_show ou _list com filter_type company) e mande o query.payload dele aqui. Para salvar um filtro como segmento use lionchat_custom_filters_create com filter_type 'company' e query {payload: [...]}.",
12635
+ "category": "Empresas",
12636
+ "params": [
12637
+ {
12638
+ "name": "payload",
12639
+ "type": "array",
12640
+ "location": "body",
12641
+ "required": true,
12642
+ "description": "Lista de condicoes: [{attribute_key, filter_operator, values (lista), query_operator ('and' ou 'or'; a ultima sem), custom_attribute_type ('' ou 'company_attribute')}]. Ex.: [{\"attribute_key\":\"city\",\"filter_operator\":\"equal_to\",\"values\":[\"sao paulo\"]}]"
12643
+ },
12644
+ {
12645
+ "name": "q",
12646
+ "type": "string",
12647
+ "location": "query",
12648
+ "required": false,
12649
+ "description": "Busca por nome ou site, aplicada por cima do filtro (opcional)"
12650
+ },
12651
+ {
12652
+ "name": "page",
12653
+ "type": "integer",
12654
+ "location": "query",
12655
+ "required": false,
12656
+ "description": "Pagina (25 por pagina, padrao 1)"
12657
+ },
12658
+ {
12659
+ "name": "sort",
12660
+ "type": "string",
12661
+ "location": "query",
12662
+ "required": false,
12663
+ "description": "Ordenacao: name, domain, created_at, contacts_count, last_activity_at (prefixo - = decrescente)"
12664
+ }
12665
+ ],
12666
+ "returns": "meta (total_count, page) + payload (array de empresas, mesmo formato de lionchat_companies_list)",
12667
+ "common_use_cases": [
12668
+ "Empresas de uma cidade ou estado",
12669
+ "Empresas com mais de N contatos",
12670
+ "Empresas sem CNPJ cadastrado (cnpj is_not_present)",
12671
+ "Listar as empresas de um segmento de empresas salvo",
12672
+ "Montar a regra antes de salvar um segmento de empresas"
12673
+ ],
12674
+ "related_tools": [
12675
+ "lionchat_companies_list",
12676
+ "lionchat_companies_search",
12677
+ "lionchat_custom_filters_create",
12678
+ "lionchat_custom_filters_list",
12679
+ "lionchat_custom_filters_show"
12680
+ ]
12612
12681
  },
12613
12682
  {
12614
12683
  "id": "lionchat_companies_contacts_list",
@@ -14939,7 +15008,7 @@
14939
15008
  "type": "array",
14940
15009
  "location": "body",
14941
15010
  "required": true,
14942
- "description": "Array de permissoes (array de strings). Valores aceitos (25): conversation_manage, conversation_delete, conversation_unassigned_manage, conversation_participating_manage, conversation_team_manage, conversation_assigned_manage (Ver conversas dos colegas: so as que JA TEM responsavel, nas caixas de que a pessoa e membro; nunca a fila sem dono — 02/10/2026), contact_manage, contact_export_import, report_manage, knowledge_base_manage, kanban_manage, kanban_view, kanban_delete, kanban_export_import, offer_manage, funnel_manage, kanban_ai_analyze (Analisar funil com IA: o botao \"Analisar com IA\" do Kanban; tambem precisa do recurso de plano kanban_ai_analysis, 28/10/2026), campaign_manage, automation_manage, marketing_integrations_manage, captain_manage, flowbuilder_manage, lead_form_manage (Formularios publicos, 05/09), signature_manage (Assinatura eletronica, 05/09), agenda_manage (Gerenciar a Agenda). Fora da lista = recusado. Administrador tem tudo sem cargo; agente sem cargo nao tem lead_form_manage nem signature_manage (nao ve Formularios nem Assinaturas no menu). O editor da tela marca junto as que uma inclui: conversation_manage inclui as 4 outras de conversa; conversation_team_manage inclui conversation_participating_manage; kanban_manage inclui kanban_view. Mande a lista ja completa."
15011
+ "description": "Array de permissoes (array de strings). Valores aceitos (26): conversation_manage, conversation_delete, conversation_unassigned_manage, conversation_participating_manage, conversation_team_manage, conversation_assigned_manage (Ver conversas dos colegas: so as que JA TEM responsavel, nas caixas de que a pessoa e membro; nunca a fila sem dono — 02/10/2026), contact_manage, contact_export_import, report_manage, knowledge_base_manage, kanban_manage, kanban_view, kanban_delete, kanban_export_import, offer_manage, funnel_manage, kanban_ai_analyze (Analisar funil com IA: o botao \"Analisar com IA\" do Kanban; tambem precisa do recurso de plano kanban_ai_analysis, 28/10/2026), campaign_manage, automation_manage, marketing_integrations_manage, captain_manage, flowbuilder_manage, lead_form_manage (Formularios publicos, 05/09), signature_manage (Assinatura eletronica, 05/09), agenda_manage (Gerenciar a Agenda), label_manage (Gerenciar etiquetas: criar, editar e apagar etiquetas da conta; 10/11/2026 — cargos que ja existiam ganharam a caixinha; agente SEM cargo continua podendo; aplicar etiqueta na conversa nao depende dela). Fora da lista = recusado. Administrador tem tudo sem cargo; agente sem cargo nao tem lead_form_manage nem signature_manage (nao ve Formularios nem Assinaturas no menu). O editor da tela marca junto as que uma inclui: conversation_manage inclui as 4 outras de conversa; conversation_team_manage inclui conversation_participating_manage; kanban_manage inclui kanban_view. Mande a lista ja completa. Ao EDITAR um cargo, mande a lista inteira que ele ja tem (leia com lionchat_custom_roles_show): permissao que ficar de fora e TIRADA, inclusive label_manage."
14943
15012
  },
14944
15013
  {
14945
15014
  "name": "hidden_menus",
@@ -15024,7 +15093,7 @@
15024
15093
  "type": "array",
15025
15094
  "location": "body",
15026
15095
  "required": false,
15027
- "description": "Permissoes (array de strings). Valores aceitos (25): conversation_manage, conversation_delete, conversation_unassigned_manage, conversation_participating_manage, conversation_team_manage, conversation_assigned_manage (Ver conversas dos colegas: so as que JA TEM responsavel, nas caixas de que a pessoa e membro; nunca a fila sem dono — 02/10/2026), contact_manage, contact_export_import, report_manage, knowledge_base_manage, kanban_manage, kanban_view, kanban_delete, kanban_export_import, offer_manage, funnel_manage, kanban_ai_analyze (Analisar funil com IA: o botao \"Analisar com IA\" do Kanban; tambem precisa do recurso de plano kanban_ai_analysis, 28/10/2026), campaign_manage, automation_manage, marketing_integrations_manage, captain_manage, flowbuilder_manage, lead_form_manage (Formularios publicos, 05/09), signature_manage (Assinatura eletronica, 05/09), agenda_manage (Gerenciar a Agenda). Fora da lista = recusado. Administrador tem tudo sem cargo; agente sem cargo nao tem lead_form_manage nem signature_manage (nao ve Formularios nem Assinaturas no menu). O editor da tela marca junto as que uma inclui: conversation_manage inclui as 4 outras de conversa; conversation_team_manage inclui conversation_participating_manage; kanban_manage inclui kanban_view. Mande a lista ja completa."
15096
+ "description": "Permissoes (array de strings). Valores aceitos (26): conversation_manage, conversation_delete, conversation_unassigned_manage, conversation_participating_manage, conversation_team_manage, conversation_assigned_manage (Ver conversas dos colegas: so as que JA TEM responsavel, nas caixas de que a pessoa e membro; nunca a fila sem dono — 02/10/2026), contact_manage, contact_export_import, report_manage, knowledge_base_manage, kanban_manage, kanban_view, kanban_delete, kanban_export_import, offer_manage, funnel_manage, kanban_ai_analyze (Analisar funil com IA: o botao \"Analisar com IA\" do Kanban; tambem precisa do recurso de plano kanban_ai_analysis, 28/10/2026), campaign_manage, automation_manage, marketing_integrations_manage, captain_manage, flowbuilder_manage, lead_form_manage (Formularios publicos, 05/09), signature_manage (Assinatura eletronica, 05/09), agenda_manage (Gerenciar a Agenda), label_manage (Gerenciar etiquetas: criar, editar e apagar etiquetas da conta; 10/11/2026 — cargos que ja existiam ganharam a caixinha; agente SEM cargo continua podendo; aplicar etiqueta na conversa nao depende dela). Fora da lista = recusado. Administrador tem tudo sem cargo; agente sem cargo nao tem lead_form_manage nem signature_manage (nao ve Formularios nem Assinaturas no menu). O editor da tela marca junto as que uma inclui: conversation_manage inclui as 4 outras de conversa; conversation_team_manage inclui conversation_participating_manage; kanban_manage inclui kanban_view. Mande a lista ja completa. Ao EDITAR um cargo, mande a lista inteira que ele ja tem (leia com lionchat_custom_roles_show): permissao que ficar de fora e TIRADA, inclusive label_manage."
15028
15097
  },
15029
15098
  {
15030
15099
  "name": "hidden_menus",
@@ -23341,7 +23410,7 @@
23341
23410
  "type": "object",
23342
23411
  "location": "body",
23343
23412
  "required": false,
23344
- "description": "WhatsApp oficial: { name, namespace, lang_code, parameters }. QR Code/WAHA: { delay_min, delay_max, variations: ['variação 1', ...], bulk_actions: { assignee_id, priority, labels: [] } } CAMPANHA DE FLUXO (flow_id presente): { delay_min, delay_max, daily_cap } — intervalo sorteado em SEGUNDOS entre uma pessoa e outra (padrao 20/40) e teto de PESSOAS por dia (padrao 500 no QR Code; em caixa oficial, sem o campo, herda o limite que a Meta libera). Quem passa do teto do dia entra no dia seguinte no mesmo horario, automaticamente. NAO aceita variations nem bulk_actions (as acoes pos-envio sao blocos do proprio flow)."
23413
+ "description": "WhatsApp oficial: { name, namespace, lang_code, parameters }. QR Code/WAHA: { delay_min, delay_max, variations: ['variação 1', ...], bulk_actions: { assignee_id, priority, labels: [] } } CAMPANHA DE FLUXO (flow_id presente): { delay_min, delay_max, daily_cap } — intervalo sorteado em SEGUNDOS entre uma pessoa e outra (padrao 20/40) e teto de PESSOAS por dia (padrao 500 no QR Code; em caixa oficial, sem o campo, herda o limite que a Meta libera). Quem passa do teto do dia entra no dia seguinte no mesmo horario, automaticamente. NAO aceita variations nem bulk_actions (as acoes pos-envio sao blocos do proprio flow). QR CODE (desde 09/11/2026): a campanha envia UMA mensagem por vez por NUMERO, respeitando a espera escolhida (delay_min/delay_max, de 1 a 3600 s; vazio = 20/40). daily_cap = teto da campanha por dia, no maximo 1000; vazio, zero ou acima de 1000 vira 1000, e sem a chave vale 500. O NUMERO tambem nunca passa de 1000 mensagens de campanha por dia, SOMANDO todas as campanhas dele: o excedente sai no dia seguinte, na hora em que a campanha comecou."
23345
23414
  },
23346
23415
  {
23347
23416
  "name": "flow_id",
@@ -23391,7 +23460,7 @@
23391
23460
  "method": "PATCH",
23392
23461
  "path": "/api/v1/accounts/{account_id}/campaigns/{id}",
23393
23462
  "title": "Atualizar Campanha",
23394
- "description": "Atualiza campanha (mesmos campos do create). Campanha one-off já 'completed' não pode ser editada (422). Mudar audience de campanha agendada vale pro disparo. COMPORTAMENTO NOVO 23/07: as ações pós-envio da campanha (tag/atributo/prioridade/atendente) aplicam SÓ quando a Meta confirma a ENTREGA (delivered/read), nunca no aceite — mensagem que falha ou é barrada por spam NÃO recebe as ações (corrige exclusão furada no disparo seguinte). Efeito visível: a tag/atributo pode levar de segundos a minutos pra aparecer após o disparo.",
23463
+ "description": "Atualiza campanha (mesmos campos do create). Campanha one-off já 'completed' não pode ser editada (422). Mudar audience de campanha agendada vale pro disparo. COMPORTAMENTO NOVO 23/07: as ações pós-envio da campanha (tag/atributo/prioridade/atendente) aplicam SÓ quando a Meta confirma a ENTREGA (delivered/read), nunca no aceite — mensagem que falha ou é barrada por spam NÃO recebe as ações (corrige exclusão furada no disparo seguinte). Efeito visível: a tag/atributo pode levar de segundos a minutos pra aparecer após o disparo. CAMPANHA DE FLUXO AGENDADA (11/11/2026): enquanto nao comecou, pode ser alterada como qualquer campanha (nome, caixa, fluxo, audience, trigger_rules, template_params, scheduled_at). Mudar scheduled_at muda a hora de COMECAR: o sistema arma um despertador para a hora nova e o da hora antiga nao faz nada (antes, adiar fazia a campanha sair na hora antiga). Ao mandar trigger_rules, mande o objeto inteiro (ele e trocado, nao somado). Depois que comeca (completed) a alteracao da 422: para o que falta, use lionchat_campaigns_reschedule_flow, lionchat_campaigns_stop_flow ou a agenda dia a dia (lionchat_campaigns_dispatch_days e irmas).",
23395
23464
  "category": "Campanhas",
23396
23465
  "params": [
23397
23466
  {
@@ -24910,7 +24979,7 @@
24910
24979
  "method": "GET",
24911
24980
  "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/summary",
24912
24981
  "title": "Falhas de Envio da Caixa (painel)",
24913
- "description": "[NOVO 2026-07-24] Painel 'Falhas de envio' da caixa: mensagens FALHADAS das ultimas 24h agrupadas por motivo — billing (falta de saldo/pagamento), transient (erro comum, reenviavel), window_expired (janela de 24h da API oficial fechou), permanent (erro definitivo) — + grupos informativos campaign (mensagem de campanha NUNCA reenvia por aqui) e partial (multi-anexo parcial, anti-duplicata). group_details traz ate 30 itens por grupo com contato, conversa, erro real e horario. Canais elegiveis: WAHA (QR), WhatsApp oficial e Messenger (Telegram/Instagram nao marcam failed). ADMIN-ONLY. Use antes do bulk_retry pra mostrar ao usuario O QUE falhou e quanto e reenviavel (retryable_count = billing + transient). [ATUALIZADO 2026-07-25] Novo grupo informativo 'deleted' (Excluidas): mensagem falhada que o usuario APAGOU continua no painel como registro, com o motivo ORIGINAL da falha preservado e sem botao de reenviar/cancelar; vem tambem no campo deleted_count e fica FORA de retryable_count e do total. Mensagem CANCELADA (lionchat_conversations_messages_cancel_retry ou bulk_cancel) some do painel de vez.",
24982
+ "description": "[NOVO 2026-07-24] Painel 'Falhas de envio' da caixa: mensagens FALHADAS das ultimas 24h agrupadas por motivo — billing (falta de saldo/pagamento), transient (erro comum, reenviavel), window_expired (janela de 24h da API oficial fechou), permanent (erro definitivo) — + grupos informativos campaign (mensagem de campanha NUNCA reenvia por aqui) e partial (multi-anexo parcial, anti-duplicata). group_details traz ate 30 itens por grupo com contato, conversa, erro real e horario. Canais elegiveis: WAHA (QR), WhatsApp oficial e Messenger (Telegram/Instagram nao marcam failed). ADMIN-ONLY. Use antes do bulk_retry pra mostrar ao usuario O QUE falhou e quanto e reenviavel (retryable_count = billing + transient). [ATUALIZADO 2026-07-25] Novo grupo informativo 'deleted' (Excluidas): mensagem falhada que o usuario APAGOU continua no painel como registro, com o motivo ORIGINAL da falha preservado e sem botao de reenviar/cancelar; vem tambem no campo deleted_count e fica FORA de retryable_count e do total. Mensagem CANCELADA (lionchat_conversations_messages_cancel_retry ou bulk_cancel) some do painel de vez. [2026-11-09] retryable_count passou a ser exatamente o que o bulk_retry agendaria: na caixa oficial com conexao hibrida ja desconta o bloqueio 463 da hibrida e as mensagens dela com a conexao caida (os grupos continuam com a mesma classificacao).",
24914
24983
  "category": "Caixas de Entrada",
24915
24984
  "params": [
24916
24985
  {
@@ -24938,7 +25007,7 @@
24938
25007
  "method": "POST",
24939
25008
  "path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/bulk_retry",
24940
25009
  "title": "Reenvio em Massa das Falhadas",
24941
- "description": "[NOVO 2026-07-24] Reenvia EM LOTE as mensagens falhadas REENVIAVEIS das ultimas 24h da caixa (grupos billing + transient do summary). Teto 500 por clique; cadencia anti-ban (WAHA 8s entre mensagens, demais 1s); trava de 1 lote por caixa (409 bulk_retry_running se ja houver lote rodando); cada mensagem e re-validada na hora do reenvio (ainda failed, sem source_id, sessao WAHA WORKING, janela 24h da oficial) e tem teto de 3 tentativas no erro comum. Mensagens de CAMPANHA e multi-anexo PARCIAL nunca entram (anti-duplicata). ADMIN-ONLY. Sempre chame o summary antes e mostre as contagens ao usuario; confirme antes de disparar (acao de envio em massa real). [2026-07-25] Mensagem CANCELADA ou EXCLUIDA nunca entra no lote (bloqueio na fonte, vale tambem pro botao de reenvio e pra auto-recuperacao do WAHA). Pra descartar em vez de reenviar use lionchat_inboxes_failed_messages_bulk_cancel.",
25010
+ "description": "[NOVO 2026-07-24] Reenvia EM LOTE as mensagens falhadas REENVIAVEIS das ultimas 24h da caixa (grupos billing + transient do summary). Teto 500 por clique; cadencia anti-ban (WAHA 8s entre mensagens, demais 1s); trava de 1 lote por caixa (409 bulk_retry_running se ja houver lote rodando); cada mensagem e re-validada na hora do reenvio (ainda failed, sem source_id, sessao WAHA WORKING, janela 24h da oficial) e tem teto de 3 tentativas no erro comum. Mensagens de CAMPANHA e multi-anexo PARCIAL nunca entram (anti-duplicata). ADMIN-ONLY. Sempre chame o summary antes e mostre as contagens ao usuario; confirme antes de disparar (acao de envio em massa real). [2026-07-25] Mensagem CANCELADA ou EXCLUIDA nunca entra no lote (bloqueio na fonte, vale tambem pro botao de reenvio e pra auto-recuperacao do WAHA). Pra descartar em vez de reenviar use lionchat_inboxes_failed_messages_bulk_cancel. [2026-11-09] Caixa oficial com conexao hibrida: mensagem que sai pela hibrida entra no lote com cadencia de 8s (nunca 1s), so se a conexao hibrida estiver no ar (caida = fica de fora sem gastar tentativa), e o bloqueio 463 dela (abordagem fria) nunca entra. As frases \"Nao enviada: o cliente respondeu antes.\" e \"Nao enviada: a saida pela conexao hibrida foi desligada nesta caixa.\" sao paradas por regra de negocio: ficam fora de todo reenvio automatico (o reenvio de UMA mensagem pelo botao continua possivel).",
24942
25011
  "category": "Caixas de Entrada",
24943
25012
  "params": [
24944
25013
  {
@@ -25391,7 +25460,7 @@
25391
25460
  "method": "POST",
25392
25461
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations",
25393
25462
  "title": "Criar Integração Meta CAPI",
25394
- "description": "Conecta um pixel da Meta (CAPI). Nasce desativado (enabled=false) — após test_event com sucesso, ativa sozinho. ADMIN-ONLY. Evento de checkout: nome atual é 'begin_checkout' (antigo InitiateCheckout).",
25463
+ "description": "Conecta um pixel da Meta (CAPI). Nasce desativado (enabled=false) — após test_event com sucesso, ativa sozinho. ADMIN-ONLY. Evento de checkout: nome atual é 'begin_checkout' (antigo InitiateCheckout). Pixel de FUNIL (09/11/2026): com funnel_id, o funil usa SO esse registro; criar com pixel_id vazio deixa o funil SEM Pixel (nasce desligado e nao envia nada, nao cai no Pixel da conta). O Pixel da CONTA (sem funnel_id) continua exigindo pixel_id e token.",
25395
25464
  "category": "Integracoes",
25396
25465
  "params": [
25397
25466
  {
@@ -25436,7 +25505,7 @@
25436
25505
  "method": "PATCH",
25437
25506
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations/{id}",
25438
25507
  "title": "Atualizar Integração Meta CAPI",
25439
- "description": "Atualiza pixel/token/codigo de teste/funil. ADMIN-ONLY. Trocar o pixel ou o token apaga `last_success_at` (a prova de envio aceito era do par antigo): rode lionchat_meta_pixel_integrations_test_event depois.",
25508
+ "description": "Atualiza pixel/token/codigo de teste/funil. ADMIN-ONLY. Trocar o pixel ou o token apaga `last_success_at` (a prova de envio aceito era do par antigo): rode lionchat_meta_pixel_integrations_test_event depois. Pixel de FUNIL (09/11/2026): zerar o pixel_id deixa o funil SEM Pixel (desligado, nao envia e nao cai no Pixel da conta). Pixel de funil DESLIGADO tambem nao envia. Para o funil voltar a usar o Pixel da conta, apague o registro do funil (destroy).",
25440
25509
  "category": "Integracoes",
25441
25510
  "params": [
25442
25511
  {
@@ -25486,7 +25555,7 @@
25486
25555
  "method": "DELETE",
25487
25556
  "path": "/api/v1/accounts/{account_id}/meta_pixel_integrations/{id}",
25488
25557
  "title": "Excluir Integração Meta CAPI",
25489
- "description": "Remove o pixel da conta. DESTRUTIVO — confirme antes. ADMIN-ONLY.",
25558
+ "description": "Remove o pixel da conta. DESTRUTIVO — confirme antes. ADMIN-ONLY. Apagar o registro de um FUNIL faz o funil voltar a usar o Pixel da conta (09/11/2026).",
25490
25559
  "category": "Integracoes",
25491
25560
  "params": [
25492
25561
  {
@@ -33823,7 +33892,7 @@
33823
33892
  "method": "GET",
33824
33893
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/meta_capi_events",
33825
33894
  "title": "Histórico de Eventos Meta CAPI do Funil",
33826
- "description": "SÓ LEITURA. Lista os eventos de conversão Meta CAPI disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed | duplicate), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | manual | automation | auto_create | test | booking_reservation | lead_form), motivo da falha, o card de origem (kanban_item_title), por onde saiu (action_source: website | business_messaging) e fallback_reason — preenchido quando um lead de ANÚNCIO DE WHATSAPP saiu como site (plano B): lionchat:dataset_nao_configurado (caixa sem 'Vincular à Meta'), lionchat:caixa_token_recusado, lionchat:caixa_nao_encontrada, lionchat:caixa_sem_token, lionchat:dataset_id_invalido, lionchat:desligado_pelo_cliente, lionchat:nome_sem_equivalente_whatsapp, ou '<subcode>: <mensagem da Meta>'. Responde 'por que a venda não apareceu no Meta CAPI?'. Administrador ou cargo com marketing_integrations_manage (403).",
33895
+ "description": "SÓ LEITURA. Lista os eventos de conversão Meta CAPI disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed | duplicate), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | manual | automation | auto_create | test | booking_reservation | lead_form), motivo da falha, o card de origem (kanban_item_title), por onde saiu (action_source: website | business_messaging) e fallback_reason — preenchido quando um lead de ANÚNCIO DE WHATSAPP saiu como site (plano B): lionchat:dataset_nao_configurado (caixa sem 'Vincular à Meta'), lionchat:caixa_token_recusado, lionchat:caixa_nao_encontrada, lionchat:caixa_sem_token, lionchat:dataset_id_invalido, lionchat:desligado_pelo_cliente, lionchat:nome_sem_equivalente_whatsapp, ou '<subcode>: <mensagem da Meta>'. Responde 'por que a venda não apareceu no Meta CAPI?'. Administrador ou cargo com marketing_integrations_manage (403). Desde 09/11/2026 cada linha traz inbox_name: a caixa de entrada da conversa do card (null = card sem conversa ou caixa excluida).",
33827
33896
  "category": "Integracoes",
33828
33897
  "params": [
33829
33898
  {
@@ -33890,7 +33959,7 @@
33890
33959
  "description": "Página (50 por página)"
33891
33960
  }
33892
33961
  ],
33893
- "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, fallback_reason, action_source, created_at, sent_at, kanban_item_id, kanban_item_title, fbtrace_id}], meta: {total, page}}",
33962
+ "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, fallback_reason, action_source, created_at, sent_at, kanban_item_id, kanban_item_title, inbox_name, fbtrace_id}], meta: {total, page}}",
33894
33963
  "common_use_cases": [
33895
33964
  "Ver se o evento de conversão chegou no Meta CAPI",
33896
33965
  "Listar os disparos falhados pra reenviar",
@@ -33973,7 +34042,7 @@
33973
34042
  "method": "GET",
33974
34043
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/ga4_events",
33975
34044
  "title": "Histórico de Eventos GA4 do Funil",
33976
- "description": "SÓ LEITURA. Lista os eventos de conversão GA4 disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test | lead_form), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no GA4?'. Administrador ou cargo com marketing_integrations_manage (403).",
34045
+ "description": "SÓ LEITURA. Lista os eventos de conversão GA4 disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test | lead_form), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no GA4?'. Administrador ou cargo com marketing_integrations_manage (403). Desde 09/11/2026 cada linha traz inbox_name: a caixa de entrada da conversa do card (null = card sem conversa ou caixa excluida).",
33977
34046
  "category": "Integracoes",
33978
34047
  "params": [
33979
34048
  {
@@ -34033,7 +34102,7 @@
34033
34102
  "description": "Página (50 por página)"
34034
34103
  }
34035
34104
  ],
34036
- "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title}], meta: {total, page}}",
34105
+ "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title, inbox_name}], meta: {total, page}}",
34037
34106
  "common_use_cases": [
34038
34107
  "Ver se o evento de conversão chegou no GA4",
34039
34108
  "Listar os disparos falhados pra reenviar"
@@ -34115,7 +34184,7 @@
34115
34184
  "method": "GET",
34116
34185
  "path": "/api/v1/accounts/{account_id}/funnels/{funnel_id}/google_ads_conversions",
34117
34186
  "title": "Histórico de Eventos Google Ads do Funil",
34118
- "description": "SÓ LEITURA. Lista os eventos de conversão Google Ads disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no Google Ads?'. Administrador ou cargo com marketing_integrations_manage (403).",
34187
+ "description": "SÓ LEITURA. Lista os eventos de conversão Google Ads disparados pelo funil (50 por página, mais novos primeiro) com status (pending | sent | failed), nome do evento, como foi disparado (trigger_type: stage_move | card_won | card_lost | auto_create | manual | automation | booking_reservation | test), motivo da falha e o card de origem (kanban_item_title). Responde 'por que a venda não apareceu no Google Ads?'. Administrador ou cargo com marketing_integrations_manage (403). Desde 09/11/2026 cada linha traz inbox_name: a caixa de entrada da conversa do card (null = card sem conversa ou caixa excluida).",
34119
34188
  "category": "Integracoes",
34120
34189
  "params": [
34121
34190
  {
@@ -34175,7 +34244,7 @@
34175
34244
  "description": "Página (50 por página)"
34176
34245
  }
34177
34246
  ],
34178
- "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title}], meta: {total, page}}",
34247
+ "returns": "{data: [{id, event_name, event_id, status, trigger_type, failure_reason, created_at, sent_at, kanban_item_id, kanban_item_title, inbox_name}], meta: {total, page}}",
34179
34248
  "common_use_cases": [
34180
34249
  "Ver se o evento de conversão chegou no Google Ads",
34181
34250
  "Listar os disparos falhados pra reenviar"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lionchat/mcp-server",
3
- "version": "1.35.0",
3
+ "version": "1.37.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",