@lionchat/mcp-server 1.36.0 → 1.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/instructions.md +6 -2
- package/dist/docs/resources/agenda-multiplas-unidades.md +7 -2
- package/dist/docs/resources/api-conventions.md +12 -0
- package/dist/docs/resources/best-practices.md +4 -0
- package/dist/docs/resources/conversation-flows.md +6 -0
- package/dist/docs/resources/data-model.md +7 -4
- package/dist/docs/resources/flowbuilder-design-guide.md +16 -15
- package/dist/docs/resources/formularios-publicos.md +2 -2
- package/dist/docs/resources/kanban-deep-dive.md +21 -0
- package/dist/docs/resources/reports-guide.md +4 -0
- package/dist/tools.js +34 -15
- package/dist/tools.js.map +1 -1
- package/endpoints.json +262 -41
- package/package.json +1 -1
|
@@ -453,7 +453,10 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
|
|
|
453
453
|
| Intenção do usuário | Tool certa | Cuidado |
|
|
454
454
|
|---|---|---|
|
|
455
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 |
|
|
456
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 |
|
|
457
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 |
|
|
458
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 |
|
|
459
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 |
|
|
@@ -486,6 +489,7 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
|
|
|
486
489
|
| Mensagem pra OUTRO AGENTE (não cliente) | `lionchat_internal_chat_*` (salas e mensagens do time) | NÃO confundir com nota privada (dentro da conversa do cliente) |
|
|
487
490
|
| Achar contato pelo que aconteceu com ele (conversa/card) | `lionchat_contacts_filter` com `linked_records` | Ver api-conventions → registros vinculados |
|
|
488
491
|
| **Origem dos leads** (de onde vieram, por plataforma/campanha/conjunto) | `lionchat_lead_origin_reports` | Relatório de leitura; filtros `platform`/`campaign`/`adset`; `won` = cards em Ganho; leads únicos por telefone |
|
|
492
|
+
| **Histórico de importações e exportações de contatos** (quem importou/exportou, quando, quantos criados/atualizados, linhas com erro) | `lionchat_contact_imports_list` / `_show`, `lionchat_contact_exports_list` / `_download` | Leitura; admin ou cargo com `contact_export_import`. Contatos de UMA importação: `lionchat_contacts_list` com `contact_import_id` (criados) e `import_result=updated` (os que já existiam). O link de download vale 5 min (não guardar) e o arquivo some em 30 dias. Contato CRIADO por planilha tem origem `import` ("Importação de planilha") e só conta como lead no relatório de origem quando tiver conversa |
|
|
489
493
|
| **Leads que chegaram sem origem reconhecida** (o link do anúncio está errado) | `lionchat_lead_origins_unrecognized` | Leitura. Diz quantos leads, qual VALOR chegou e em qual CAMPO (anúncio de WhatsApp, Meta Lead, `utm_source`, LionTrack). `field: null` = não sabemos o campo: NÃO chute, diga só o total. Traz também `field_map`, a tabela Meta/Google/TikTok |
|
|
490
494
|
| Transformar um valor não reconhecido em **origem própria** | `lionchat_lead_origins_adopt_unrecognized` (`platform` + `name`) | Cria a origem E ensina o sistema a reconhecer aquele valor de agora em diante. NÃO reprocessa os leads antigos. Só aceita `platform` que começa com `other:` |
|
|
491
495
|
| **Tirar do aviso** um valor não reconhecido | `lionchat_lead_origins_dismiss_unrecognized` (`platform`) | Para quando é erro mesmo e não interessa. Não mexe em lead nenhum; some da lista |
|
|
@@ -504,10 +508,10 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
|
|
|
504
508
|
| **Trocar um atendente por outro** ("fulano saiu, entrou ciclano") | `lionchat_agents_replace` (`POST /agents/{id}/replace`, body `agent: {email, name, role}`; `inherit_memberships` default `true`) | Faz os dois passos de uma vez: cria o novo (passa pelo limite de vagas do plano por 30 min), manda a carteira inteira (conversas, cards, tarefas, agendamentos) e exclui o antigo em segundo plano. Responde **202** com `new_agent` — o antigo some da lista quando a transferência termina (`replacing: true` em `agents_list` enquanto roda). **Confirme antes** (seção 7a: é exclusão). Recusas 422: substituir a si mesmo, agente de suporte, e-mail já membro, e o **único administrador confirmado só troca por usuário já confirmado** (convide e espere aceitar). `agents_destroy` recusa quem está ENTRANDO numa substituição viva. Admin-only |
|
|
505
509
|
| **Pausar a automação no meio** (esperar atribuição/card antes da próxima ação) | ação `wait` em `lionchat_automation_rules_create` / `_update` | Segundos, teto 300. Acima disso é caso de FlowBuilder. Formato objeto `[{seconds, only_if_open, only_if_no_reply}]` confere na volta se a conversa segue aberta e se ninguém respondeu (25/09). Ver `lionchat://docs/conversation-flows` |
|
|
506
510
|
| **Buscar contato/conversa/card** | `lionchat_search_*`, `lionchat_contacts_search` | **Termo com letra exige 3+ caracteres** (dígito é isento). Menos que isso volta VAZIO sem erro — não conclua que o registro não existe. Ver `lionchat://docs/api-conventions` |
|
|
507
|
-
| **Migrar conversas** de uma caixa WhatsApp pra outra (
|
|
511
|
+
| **Migrar conversas** de uma caixa WhatsApp pra outra (QR Code ou Oficial, em qualquer sentido) | `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 |
|
|
508
512
|
| 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. |
|
|
509
513
|
| 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 |
|
|
510
|
-
| **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 |
|
|
514
|
+
| **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 |
|
|
511
515
|
| **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 |
|
|
512
516
|
| Configurar o Copiloto (modelo/temperatura/prompt base) | `lionchat_copilot_settings_update` | admin-only; copiloto tem motor próprio (padrão temp 0.3) |
|
|
513
517
|
| **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ê
|
|
312
|
-
|
|
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
|
|
@@ -504,6 +504,18 @@ conversa (`conversation`) são pessoais até um administrador compartilhar (seç
|
|
|
504
504
|
incompleta = 422. Segmento usado por campanha programada não pode ser apagado (422 citando a campanha). Segmento serve
|
|
505
505
|
de público de campanha (`{type: 'Segment', id}`) — ver a receita de campanha nas instruções.
|
|
506
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; telefone só pelos números; CNPJ por letras e números, sem pontuação e sem diferença de maiúscula (aceita o CNPJ com letras da Receita); "diferente de" traz a empresa sem o campo. Campo/operador desconhecido = 422.
|
|
518
|
+
|
|
507
519
|
### Pasta de conversa compartilhada (2026-10-27)
|
|
508
520
|
|
|
509
521
|
Pasta de conversa (`filter_type: conversation`) com `shared: true` aparece para TODA a conta, com o ícone de
|
|
@@ -1075,6 +1075,10 @@ Custom attribute em lugar errado vira:
|
|
|
1075
1075
|
- **Import de contatos: o DDI é da planilha.** O sistema não completa 55; sem DDI = erro na linha;
|
|
1076
1076
|
`contacts_import_validate` NÃO valida telefone. No import do Kanban, telefone inválido cria card
|
|
1077
1077
|
SEM contato em silêncio. Oriente o cliente a subir `5511988887777` ou `+351912345678`.
|
|
1078
|
+
- **Histórico de importação (13/11):** toda importação de contatos fica em `lionchat_contact_imports_list`
|
|
1079
|
+
(quem, quando, arquivo, criados/atualizados/erros). Para "desfazer uma planilha", liste SÓ os criados
|
|
1080
|
+
(`lionchat_contacts_list` com `contact_import_id`) e confirme com o cliente antes de excluir: os de
|
|
1081
|
+
`import_result=updated` são clientes que JÁ existiam. Contato criado por planilha tem origem `import`.
|
|
1078
1082
|
- **Caixa oficial com aviso de bloqueio por pagamento** (`whatsapp_send_blocked_billing`):
|
|
1079
1083
|
`GET /inboxes/{id}/health` consulta a Meta e LIMPA o aviso se o envio voltou — além de sucesso
|
|
1080
1084
|
de template, é o único jeito de limpar.
|
|
@@ -381,6 +381,12 @@ conflitantes e não-migráveis; contato sem conversa é ignorado, e os baldes fe
|
|
|
381
381
|
gravou "0 migradas" por causa de um grupo, e na prática teria falhado em 100% dos contatos, porque o
|
|
382
382
|
formato de identificador do QR Code não estava sendo convertido. Se o cliente tentou migrar antes
|
|
383
383
|
dessa data e não deu certo, mande tentar de novo.
|
|
384
|
+
- **Desde 13/11 a caixa Oficial também pode ser a ORIGEM** (Oficial → QR Code e Oficial → Oficial). As
|
|
385
|
+
tools sempre aceitaram; o que faltava era a aba na tela.
|
|
386
|
+
- **Destino Oficial de OUTRO número: a conversa chega com a janela de 24h fechada.** A última fala do
|
|
387
|
+
cliente foi para o número antigo, e a Meta recusa texto livre até ele escrever para o número novo.
|
|
388
|
+
Responder exige modelo aprovado; quando o cliente escreve, a janela abre na mesma conversa. No mesmo
|
|
389
|
+
número nada muda.
|
|
384
390
|
|
|
385
391
|
## Receitas de ação (qual tool usar pra cada coisa)
|
|
386
392
|
|
|
@@ -204,10 +204,13 @@ card com `contacts[{id,name}]`, so os que o usuario ve no quadro). No card do qu
|
|
|
204
204
|
`conversation.contact.company_id`/`company_name` dizem a empresa do contato do card. Contratos dos contatos: `lionchat_signature_envelopes_list` com `company_id`.
|
|
205
205
|
Anotacao da empresa: `lionchat_companies_notes_create` / `_update` / `_destroy` (`{note:{content}}`; qualquer
|
|
206
206
|
atendente). Cadastro da empresa (25/09): `lionchat_companies_create`/`_update` aceitam
|
|
207
|
-
`additional_attributes` com `legal_name`, `cnpj` (validado; grava so
|
|
207
|
+
`additional_attributes` com `legal_name`, `cnpj` (validado; grava sem pontuacao, com letras em maiuscula — aceita o CNPJ com letras da Receita, ex. `12.ABC.345/01DE-35` vira `12ABC34501DE35`; CNPJ so de numeros continua so numeros), `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.
|
|
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",
|
|
@@ -231,7 +234,7 @@ quarto tipo de definicao, separado de conversa, contato e variavel de conta:
|
|
|
231
234
|
tem no maximo UMA empresa (`contacts.company_id`); a conversa nao tem empresa propria. Com o modulo Empresas ligado:
|
|
232
235
|
- **Variavel** em mensagem, resposta pronta, automacao, fluxo, campanha e mensagem agendada:
|
|
233
236
|
`{{contact.company.custom_attribute.<chave>}}` (data sai DD/MM/AAAA) e o cadastro `{{contact.company.name}}`,
|
|
234
|
-
`{{contact.company.legal_name}}`, `{{contact.company.cnpj}}` (
|
|
237
|
+
`{{contact.company.legal_name}}`, `{{contact.company.cnpj}}` (sem pontuacao), `{{contact.company.phone}}`,
|
|
235
238
|
`{{contact.company.email}}`, `{{contact.company.address.city}}`, `{{contact.company.address.state}}`.
|
|
236
239
|
`{{contact.company}}` sozinho imprime o nome. Contato sem empresa = vazio, sem erro.
|
|
237
240
|
- **Modelo oficial do WhatsApp** (`variable_mapping`): campo personalizado com
|
|
@@ -240,7 +243,7 @@ quarto tipo de definicao, separado de conversa, contato e variavel de conta:
|
|
|
240
243
|
`address.city`, `address.state`). O nome da empresa ja e `contact.company_name`.
|
|
241
244
|
- **Condicao do bloco Condicao do fluxo:** regra `{"valueType": "attr_config", "attrSource": "company",
|
|
242
245
|
"attr_key": "<chave>", "operator": "...", "value": "", "values": [...]}`. `attr_key` = chave personalizada OU
|
|
243
|
-
cadastro com prefixo: `company.name`, `company.legal_name`, `company.cnpj` (comparado por
|
|
246
|
+
cadastro com prefixo: `company.name`, `company.legal_name`, `company.cnpj` (comparado por letras e numeros, sem pontuacao),
|
|
244
247
|
`company.phone`, `company.email`, `company.address.city`, `company.address.state`. Contato sem empresa = valor
|
|
245
248
|
vazio (os negativos casam).
|
|
246
249
|
- **Condicao de automacao e filtro da lista de contatos** (`lionchat_contacts_filter`, segmento salvo, acao em
|
|
@@ -26,6 +26,7 @@ Como criar fluxos do LionChat (FlowBuilder) que abrem certinhos no canvas, sem n
|
|
|
26
26
|
| Dividir na proporção entre branches (A/B) | `randomizer` | - |
|
|
27
27
|
| Gerir grupo WhatsApp: criar/buscar, nome/foto/descrição, participantes, admins, convite (WAHA) | `update_group` (uma operação por bloco via `groupOperation`) | - |
|
|
28
28
|
| Iniciar outro fluxo | `action` com `key: 'start_flow'` OU node `activate_flow` | - |
|
|
29
|
+
| Encerrar a execução de outro fluxo nesta conversa | `action` com `key: 'stop_flow'` | - |
|
|
29
30
|
| Encerrar ramo / definir retorno de ai_tool | `end` | - |
|
|
30
31
|
| Anotação visual no canvas (não executa) | `note` | - |
|
|
31
32
|
|
|
@@ -83,8 +84,8 @@ Todo node tem essa estrutura base:
|
|
|
83
84
|
- Dois fluxos com o mesmo gatilho na mesma caixa são permitidos (não há checagem de conflito): os dois disparam.
|
|
84
85
|
- Exemplo — avisar um grupo de WhatsApp quando o lead passa mais de 1 hora na etapa do vendedor: Início `card_open_in_stage` (1 hora, funil + etapa) → (opcional) condição "Card na etapa" → bloco `update_group` com a operação de enviar mensagem ao grupo, texto usando `{{agent.name}}` e o link da conversa `https://<host>/app/accounts/<id_da_conta>/conversations/{{conversation.id}}` ou o do card `https://<host>/app/accounts/<id_da_conta>/kanban?funnel={{trigger.funnel_id}}&card_id={{trigger.kanban_item_id}}` (como achar o `<host>`: `lionchat://docs/kanban-deep-dive`, seção "Link do card").
|
|
85
86
|
- `page_track` (LionTrack, só flow individual): `{ "track_type": "visited_page"|"event_fired", "urls": [...], "operator": "contains"|"exact"|"starts_with", "event_names": [...], "event_operator": "equals"|"contains", "cooldown_hours": 24 }` — `cooldown_hours` (padrão 24, mínimo 1) não re-dispara pro mesmo contato dentro da janela.
|
|
86
|
-
- `conversation_attribute_changed` / `card_attribute_changed` (novo 2026-07-08): disparam na VIRADA de um atributo (da CONVERSA ou do CARD do kanban) pro valor que casa — RE-ENTRAM toda vez que o atributo muda pro valor alvo. Config: `{ "logic": "and"|"or", "rules": [ { "attr_key": "...", "operator": "...", "value": "..." } ] }` (uma rule pode usar `values: [...]` no lugar de `value` pra multi-valor). O `attrSource` é IMPLÍCITO pela chave do gatilho (conversa vs card) — NÃO informe. Operadores (contexto REATIVO — desde 09/07 `is_empty`/`is_not_empty` NÃO valem aqui, pois "está vazio AGORA" dispararia a cada evento; use-os só no nó Condição): `equal`/`not_equal`/`contains`/`not_contains`/`starts_with`/`ends_with`/`greater_than`/`less_than`/`number_range`. Só `card_attribute_changed` aceita `funnel_id`/`card_source` opcionais dentro da rule (pra achar o card). Rule sem `attr_key` é ignorada.
|
|
87
|
-
- `contact_attribute_changed` (novo 2026-07-22 — "Atributo do contato muda"): dispara quando um atributo personalizado do **CONTATO** muda e a condição casa — mesmo com o contato fora de flow. Item: `{ "key": "contact_attribute_changed", "config": { "logic": "and"|"or", "rules": [ { "attrSource": "contact", "attr_key": "...", "operator": "...", "value": "..." } ] } }` (1 a 10 rules; `values: [...]` pra multi-valor). **DIFERENTE dos irmãos de 08/07: aqui o `attrSource` VAI na rule e é SEMPRE `"contact"`.** Operadores iguais aos do nó Condição. **VERSÃO SEGURA por decisão de produto:** dispara SÓ na conversa mais recente que JÁ EXISTE numa caixa do flow (reabre se resolvida); contato sem conversa NÃO dispara e NUNCA cria conversa. Dedup de 30s por contato + anti-loop por profundidade de cadeia (flow que muda atributo que dispara flow…). Só flows de conversa.
|
|
87
|
+
- `conversation_attribute_changed` / `card_attribute_changed` (novo 2026-07-08): disparam na VIRADA de um atributo (da CONVERSA ou do CARD do kanban) pro valor que casa — RE-ENTRAM toda vez que o atributo muda pro valor alvo. Config: `{ "logic": "and"|"or", "rules": [ { "attr_key": "...", "operator": "...", "value": "..." } ] }` (uma rule pode usar `values: [...]` no lugar de `value` pra multi-valor). O `attrSource` é IMPLÍCITO pela chave do gatilho (conversa vs card) — NÃO informe. Operadores (contexto REATIVO — desde 09/07 `is_empty`/`is_not_empty` NÃO valem aqui, pois "está vazio AGORA" dispararia a cada evento; use-os só no nó Condição): `equal`/`not_equal`/`contains`/`not_contains`/`starts_with`/`ends_with`/`greater_than`/`less_than`/`number_range`. **Desde 12/11, também os 3 de MUDANÇA, que olham o ANTES e o DEPOIS e vão SEM `value`:** `became_filled` ("Foi preenchido": estava vazio e recebeu valor; dispara de novo se o campo for apagado e preenchido outra vez; conversa que NASCE com o campo preenchido conta), `became_empty` ("Foi apagado") e `value_replaced` ("Trocou de valor": de um valor para outro, nunca saindo do vazio nem indo para ele). Vazio = nulo, texto em branco, campo ausente ou lista vazia. Ex.: fluxo só no 1º agendamento, não no reagendamento: `{ "attr_key": "meet_link", "operator": "became_filled" }`. Só `card_attribute_changed` aceita `funnel_id`/`card_source` opcionais dentro da rule (pra achar o card). Rule sem `attr_key` é ignorada.
|
|
88
|
+
- `contact_attribute_changed` (novo 2026-07-22 — "Atributo do contato muda"): dispara quando um atributo personalizado do **CONTATO** muda e a condição casa — mesmo com o contato fora de flow. Item: `{ "key": "contact_attribute_changed", "config": { "logic": "and"|"or", "rules": [ { "attrSource": "contact", "attr_key": "...", "operator": "...", "value": "..." } ] } }` (1 a 10 rules; `values: [...]` pra multi-valor). **DIFERENTE dos irmãos de 08/07: aqui o `attrSource` VAI na rule e é SEMPRE `"contact"`.** Operadores iguais aos do nó Condição, mais os 3 de mudança (`became_filled`/`became_empty`/`value_replaced`, sem `value` — ver acima). **VERSÃO SEGURA por decisão de produto:** dispara SÓ na conversa mais recente que JÁ EXISTE numa caixa do flow (reabre se resolvida); contato sem conversa NÃO dispara e NUNCA cria conversa. Dedup de 30s por contato + anti-loop por profundidade de cadeia (flow que muda atributo que dispara flow…). Só flows de conversa.
|
|
88
89
|
|
|
89
90
|
- `date_trigger` — **Gatilho de Data (novo 2026-07-10):** dispara quando uma DATA guardada na ficha do CONTATO chega (aniversário, data de exame, vencimento de plano). Modelo "agendamento de mensagem": a escrita da data já marca o disparo — NÃO existe varredura periódica. Vale em flow `conversation` **individual e de GRUPO** (liberado em 29/09/2026, cartão 1297): no flow de grupo a data sai do contato-grupo (que tem atributos próprios) ou, com `attr_source='conversation'`, do atributo da conversa do grupo. O motor barra o cruzamento — data de pessoa NÃO acorda flow de grupo e vice-versa (`FiringDispatchService#matches_conversation_mode?`, skip `modo_da_conversa`). Config (item usa `config` ANINHADO, igual `webhook_received`/`attribute_changed`):
|
|
90
91
|
```json
|
|
@@ -265,7 +266,7 @@ bloco — pra isso use `flows_show`. Contadores de sessão (`session_stats`: `to
|
|
|
265
266
|
}
|
|
266
267
|
```
|
|
267
268
|
|
|
268
|
-
**`validation` válidos:** `any`, `options`, `varied_options`, `regex`, `email`, `phone`, `number`, `cpf`, `cnpj`, `cpf_cnpj`, `date`, `rg`, `profession`. As validações cadastrais (`cpf`/`cnpj`/`cpf_cnpj`/`date`/`rg`/`profession`) conferem o formato e, no CPF/CNPJ, o dígito verificador — resposta inválida volta pra `invalidMessage` (respeita `maxRetries`).
|
|
269
|
+
**`validation` válidos:** `any`, `options`, `varied_options`, `regex`, `email`, `phone`, `number`, `cpf`, `cnpj`, `cpf_cnpj`, `date`, `rg`, `profession`. As validações cadastrais (`cpf`/`cnpj`/`cpf_cnpj`/`date`/`rg`/`profession`) conferem o formato e, no CPF/CNPJ, o dígito verificador (o CNPJ com letras da Receita, como `12.ABC.345/01DE-35`, é aceito) — resposta inválida volta pra `invalidMessage` (respeita `maxRetries`).
|
|
269
270
|
|
|
270
271
|
**`options` normaliza a resposta (2026-06-16):** a comparação com `acceptedOptions` é feita sem acento e sem maiúscula (`I18n.transliterate` + downcase + strip nos dois lados). "São Paulo", "sao paulo" e "SAO PAULO" casam todos.
|
|
271
272
|
|
|
@@ -287,7 +288,7 @@ bloco — pra isso use `flows_show`. Contadores de sessão (`session_stats`: `to
|
|
|
287
288
|
- `contact_phone` — sobrescreve o telefone do contato
|
|
288
289
|
- `contact_cpf` — campo cadastral CPF (exige `validation: "cpf"`)
|
|
289
290
|
- `contact_cnpj` — campo cadastral CNPJ (exige `validation: "cnpj"`)
|
|
290
|
-
- `contact_document` — CPF ou CNPJ
|
|
291
|
+
- `contact_document` — CPF ou CNPJ: grava no CNPJ quando a resposta é um CNPJ válido (inclusive o CNPJ com letras da Receita), senão no CPF (exige `validation: "cpf_cnpj"`)
|
|
291
292
|
- `contact_birthdate` — data de nascimento (exige `validation: "date"`; cliente digita dd/mm/aaaa, salva ISO)
|
|
292
293
|
- `contact_rg` — campo cadastral RG (exige `validation: "rg"`)
|
|
293
294
|
- `contact_profession` — campo cadastral Profissão (exige `validation: "profession"`)
|
|
@@ -601,10 +602,12 @@ o botão "Usar variável" ao lado do campo alterna lista fixa ↔ variável.
|
|
|
601
602
|
| `add_card_offer` | `{ offer_id, use_custom_value?, custom_value?, funnel_id?, card_source? }` | Adiciona uma OFERTA (produto/serviço) ao card. `offer_id` de `offers_list`. `use_custom_value: true` + `custom_value` grava um valor personalizado na oferta; senão usa o valor cadastrado. O total do card recalcula sozinho (soma das ofertas). Respeita `card_source` (funnel só localiza o card) |
|
|
602
603
|
| `send_webhook` | `{ url, headers?, body? }` | Dispara webhook externo |
|
|
603
604
|
| `start_flow` | `{ flow_id }` | Inicia outro fluxo. **NÃO encerra o fluxo de origem** (desde 31/08): se houver bloco ligado depois dele, o fluxo SEGUE normalmente. Sendo o último do desenho, o fluxo termina ali como sempre. |
|
|
605
|
+
| `stop_flow` (novo 2026-11-13) | `{ flow_id }` | Encerra a execução VIVA (ativa, esperando resposta ou pausada) do fluxo escolhido NESTA conversa — inclusive a que está parada numa espera, que não volta a andar. Deixa uma pílula na conversa. Nada rodando = passo verde avisando; `flow_id` do PRÓPRIO fluxo ou de fluxo que não é da conta = passo com ERRO. Aba Sistema (só flow `conversation` e `action`; não existe em `ai_tool`). |
|
|
604
606
|
| `send_conversion` (novo 2026-09-01; `event_names` 2026-09-02; `messaging_event_names` 2026-09-10) | `{ destinations: ['meta'\|'ga4'\|'google_ads'], event_names: { meta?, google_ads?, ga4? }, messaging_event_names: { meta? }, event_name (reserva), value? }` | Manda o evento de conversão pro Meta (CAPI), Google Ads e/ou GA4 — o mesmo caminho do Funil, de dentro do fluxo. Aba Sistema (só flow `conversation`). Ver bloco próprio abaixo |
|
|
605
607
|
| `deactivate_flow` ou `disable_flow` | `{}` | Encerra fluxo atual |
|
|
606
608
|
| `set_booking_situation` (novo 2026-09-14) | `{ situation: 'cancelled' \| 'completed' \| 'attended' \| 'no_show' \| 'confirmed' }` | Muda a situação do agendamento **que disparou o fluxo** (gatilho de agendamento do bloco Início, ou fluxo ligado na configuração do tipo de agendamento). Aba **Agenda** (só flow `conversation`, só com a Agenda ligada na conta). Disparado por outra coisa: **não faz efeito e o passo fica com erro visível** (não há como adivinhar o agendamento). Já no estado pedido = passo PULADO, sem escrita (sem evento, sem laço). `cancelled` cancela o **agendamento** (desarma lembretes, invalida o link de gerenciar). Origem gravada = `fluxo`, ator = o próprio flow. Sem `rescheduled`/`snoozed`: o bloco não mexe em data |
|
|
607
609
|
| `create_account_task` (novo 2026-10-20) | `{ title, description?, task_type, agenda_id?, priority?, occupies_agenda?, duration_minutes?, due: {amount, unit: 'hours' \| 'days', at?, business_days?}, responsible: {mode: 'card_owner' \| 'fixed' \| 'funnel_rotation' \| 'team_rotation', user_id?, team_id?, fallback_user_id?}, card_source: 'funnel' \| 'trigger', funnel_id? }` | "Criar tarefa": cria uma tarefa COMUM da Agenda, presa ao card do fluxo (ou só à conversa, se não houver card). Os campos de `title` a `responsible` são os MESMOS da ação `create_task` da automação do funil (ver `kanban-deep-dive`). Aba **Agenda**; exige a Agenda unificada ligada na conta. **NÃO roda em fluxo `ai_tool` nem em fluxo de grupo** (o motor recusa com erro visível no passo; o save aceita, a tela esconde o item). Detalhes logo abaixo |
|
|
610
|
+
| `complete_account_task` / `cancel_account_task` / `set_account_task_attendance` (novo 2026-11-13) | Concluir/Cancelar: sem config. Presença: `{ attendance: 'attended' \| 'no_show' }` | Operações sobre a tarefa que o fluxo **criou** (num passo "Criar tarefa" anterior do mesmo flow) ou sobre o **agendamento que disparou o flow** — NÃO "qualquer tarefa da conversa". Mesma aba **Agenda** e mesmo gate do "Criar tarefa" (exige a Agenda unificada ligada; **não** roda em `ai_tool` nem em grupo). Reusam o motor do `set_booking_situation`: idempotente (já no estado pedido = passo PULADO, sem escrita, sem laço); **Cancelar numa tarefa COM agendamento desarma o agendamento** (lembrete + link de gerenciar), igual ao `cancelled` do `set_booking_situation`; presença grava Compareceu/Faltou. Sem tarefa alvo = passo PULADO nomeando a operação ("nenhuma tarefa deste fluxo para concluir"), não erro. **Marcar presença numa sessão de um programa de tratamento consome aquela sessão** (igual ao painel; se era a última, fecha o programa). Adiar + recorrência/vários responsáveis/retorno do ID = fase 2 (ainda não existe) |
|
|
608
611
|
| `update_attribute` | `{ attr_source: 'contact'\|'conversation'\|'card', attr_key, attr_value }` | Seta custom_attribute (ver abaixo) |
|
|
609
612
|
| `assign_captain` (ou `assign_captain_assistant`) | `{ assistant_id }` | Atribui IA Captain |
|
|
610
613
|
| `deactivate_captain` | `{}` | Tira a IA da conversa |
|
|
@@ -702,7 +705,7 @@ o botão "Usar variável" ao lado do campo alterna lista fixa ↔ variável.
|
|
|
702
705
|
|
|
703
706
|
**Empresa do contato (2026-10-16):** a empresa ligada ao contato da conversa (no máximo UMA por contato) vale como VARIÁVEL e como CONDIÇÃO, só com o módulo Empresas ligado.
|
|
704
707
|
- Variável em qualquer bloco de mensagem: `{{contact.company.name}}`, `{{contact.company.legal_name}}`, `{{contact.company.cnpj}}`, `{{contact.company.phone}}`, `{{contact.company.email}}`, `{{contact.company.address.city}}`, `{{contact.company.address.state}}` e `{{contact.company.custom_attribute.<chave>}}` (campo personalizado da empresa). Contato sem empresa = vazio. Data do campo personalizado: DD/MM/AAAA no bloco de mensagem; crua (AAAA-MM-DD) em API, Definir variável e Condição — igual ao atributo do contato.
|
|
705
|
-
- Condição (bloco Condição, aba Atributos, card "Atributo da empresa"): `{ "valueType": "attr_config", "attrSource": "company", "attr_key": "segmento", "operator": "equal", "value": "", "values": ["Varejo"] }`. `attr_key` = chave do campo personalizado OU cadastro com prefixo `company.name`, `company.legal_name`, `company.cnpj` (comparado
|
|
708
|
+
- Condição (bloco Condição, aba Atributos, card "Atributo da empresa"): `{ "valueType": "attr_config", "attrSource": "company", "attr_key": "segmento", "operator": "equal", "value": "", "values": ["Varejo"] }`. `attr_key` = chave do campo personalizado OU cadastro com prefixo `company.name`, `company.legal_name`, `company.cnpj` (comparado por letras e números, sem pontuação e sem diferença de maiúscula), `company.phone`, `company.email`, `company.address.city`, `company.address.state`. Contato sem empresa = valor vazio (`not_equal`/`is_empty` casam). Módulo Empresas DESLIGADO = a regra NUNCA casa, nem a negativa.
|
|
706
709
|
- `attrSource` fora de `contact`/`conversation`/`card`/`company` NÃO casa (antes comparava a última mensagem do cliente) e marca o bloco com aviso.
|
|
707
710
|
- NÃO vale em condição de SAÍDA (`exit_conditions`), gatilho de entrada, parâmetro de ferramenta de IA nem em `update_attribute` (a ação não grava na empresa).
|
|
708
711
|
|
|
@@ -807,7 +810,7 @@ aiModel nos modos novos (proteção de nós antigos que carregam aiModel de defa
|
|
|
807
810
|
`aiModel` vazio/ausente = modelo padrão da conta. Com assistente selecionado, o override também vale
|
|
808
811
|
(sobrepõe o modelo que o caminho do assistente usaria). Modelo fora da whitelist = ignorado (cai no
|
|
809
812
|
padrão da conta).
|
|
810
|
-
Exemplo: `{"aiMode":"sentiment","
|
|
813
|
+
Exemplo: `{"aiMode":"sentiment","aiModel":"gpt-4.1-mini","aiModelExplicit":true}`.
|
|
811
814
|
|
|
812
815
|
**A whitelist (`FlowBuilder::RawLlmService::SUPPORTED_MODELS`) é uma lista FECHADA de 19 nomes, SEM
|
|
813
816
|
curinga** — não existe "a família gpt-5 inteira":
|
|
@@ -822,14 +825,12 @@ Eles ignoram a temperatura do bloco (só o padrão) e **NÃO valem no bloco de I
|
|
|
822
825
|
(teto de 15 s — o servidor exclui e usa o fallback). Também não existem `o1-mini`, `gpt-4.5-preview`,
|
|
823
826
|
`gpt-5.2-pro` nem `gpt-5.5-pro` (a OpenAI recusa).
|
|
824
827
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
assistente: `aiMode: 'custom'` (motor cru com a chave da conta + `aiModel`) e flow `ai_tool` em
|
|
832
|
-
`generate`/`custom`. A saída fica em `aiResponseVar` (default `ai_response`); `intent` também em
|
|
828
|
+
**`aiAssistantId` só é obrigatório em `generate`** (id de um assistente Captain da conta; é ele que
|
|
829
|
+
traz a base de conhecimento). **Sem ele o nó `generate` sai pela saída `error` desde 20/08/2026**
|
|
830
|
+
(`AI Assistant not configured`). Desde 10/11/2026 **`intent`, `sentiment` e `extract` NÃO usam
|
|
831
|
+
assistente** (chamam a IA direto com a chave da conta + `aiModel`) e a tela nem mostra o campo nesses
|
|
832
|
+
três: não mande `aiAssistantId` neles (se vier, é ignorado). `custom` usa o assistente se houver e roda
|
|
833
|
+
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
|
|
833
834
|
`ai_intent`, `sentiment` em `ai_sentiment`. Nome de variável iniciado por `_` é IGNORADO e cai no
|
|
834
835
|
padrão (prefixo reservado das chaves internas da sessão) — vale pro `apiResponseVar` também.
|
|
835
836
|
|
|
@@ -1566,7 +1567,7 @@ Nodes nunca devem ficar com a mesma coordenada `(x, y)`. Se dois nodes têm posi
|
|
|
1566
1567
|
| `method`/`url`/`headers`/`body` no node api | Runtime NÃO lê → GET vazio (ou erro "URL not configured") | `apiMethod`/`apiUrl`/`apiHeaders`/`apiBody` |
|
|
1567
1568
|
| `{{env.X}}` no node api | Não existe → resolve vazio → 401 | `{{account.custom_attribute.X}}` (secret resolve só no node api) |
|
|
1568
1569
|
| `{{api_response.payload.campo}}` | `.payload` não existe → vazio | `{{api_response.campo}}` (o corpo fica direto sob a var); status em `{{api_response_status}}` |
|
|
1569
|
-
| 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
|
|
1570
|
+
| 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) |
|
|
1570
1571
|
| `contextMessages` no node `ai` | Chave errada → descartada em silêncio (fica 5) | `aiContextMessages` (0, 1, 3, 5, 10, 25, 50, 75, 100) |
|
|
1571
1572
|
| Nome de variável começando com `_` (`set_variable`, `saveVariable`, `apiResponseVar`, `aiResponseVar`) | Prefixo reservado → ignorado / cai no padrão | Nome sem `_` na frente |
|
|
1572
1573
|
| `{ type: "delay", seconds: 2 }` no send_message | A tela não lê `seconds` → abre como "undefineds" | `duration_seconds` (0-30) |
|
|
@@ -206,8 +206,8 @@ depois some. A lista é fonte única (`LeadForm::NODE_DATA_KEYS` no servidor, es
|
|
|
206
206
|
|
|
207
207
|
**`field_type`** (do `question`): `short_text`, `long_text`, `email`, `phone`, `date`, `time`,
|
|
208
208
|
`datetime`, `number`, `rating` (usa `scale`), `url`, `file_upload` (usa `accept`), e os documentos
|
|
209
|
-
com validação de verdade: `cpf`, `cnpj`, `cep` (dígito verificador/8 dígitos; gravam só números;
|
|
210
|
-
erros `invalid_cpf`/`invalid_cnpj`/`invalid_cep`).
|
|
209
|
+
com validação de verdade: `cpf`, `cnpj`, `cep` (dígito verificador/8 dígitos; CPF e CEP gravam só números; o CNPJ aceita o formato com letras da Receita
|
|
210
|
+
e grava sem pontuação, letras em maiúscula; erros `invalid_cpf`/`invalid_cnpj`/`invalid_cep`).
|
|
211
211
|
- `time` grava `HH:MM` (24h; erro `invalid_time`).
|
|
212
212
|
- `datetime` grava `AAAA-MM-DDTHH:MM` — hora local de quem preencheu, SEM fuso; o fuso de leitura é
|
|
213
213
|
o da definição do atributo de destino (erro `invalid_datetime`).
|
|
@@ -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.
|
|
@@ -524,6 +524,10 @@ gente?", "quem veio da campanha X navegou por onde antes de chamar?".
|
|
|
524
524
|
ONDE vieram os leads, cruzando os campos `origin_*` das conversas com os leads órfãos (que ainda não
|
|
525
525
|
viraram conversa). É um relatório de LEITURA puro — não cria nem altera nada.
|
|
526
526
|
|
|
527
|
+
**Contato importado por planilha (13/11):** ganha origem `import` / tipo `importacao` ("Importação de planilha"), mas
|
|
528
|
+
fica FORA dos leads órfãos — só entra no relatório quando tiver conversa (decisão do dono). Uma planilha importada não
|
|
529
|
+
aparece como leads no dia da importação.
|
|
530
|
+
|
|
527
531
|
**Filtros (query, todos opcionais):** `since` / `until` (ISO 8601; default = 30 dias atrás → agora),
|
|
528
532
|
`funnel_id`, `platform`, `kind`, `paid`, `campaign`, `adset`, `inbox_id`, `assignee_id`, `group_by`.
|
|
529
533
|
`campaign`/`adset` aceitam `__none__` para filtrar so os leads SEM aquele nome (campanha/conjunto vazio).
|
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-
|
|
366
|
+
const reference = `LIONCHAT FLOW BUILDER — SCHEMA REFERENCE (atualizado 2026-11-13)
|
|
367
367
|
|
|
368
368
|
flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
369
369
|
|
|
@@ -425,13 +425,18 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
425
425
|
atributo pro valor que casa, RE-ENTRAM a cada mudanca; config {logic:'and'|'or', rules:[{attr_key,
|
|
426
426
|
operator, value | values:[...]}]}; attrSource IMPLICITO pela chave do gatilho (conversa vs card),
|
|
427
427
|
NAO informe; operadores da condition EXCETO is_empty/is_not_empty (removidos do contexto reativo
|
|
428
|
-
09/07 — use so no node condition)
|
|
429
|
-
|
|
428
|
+
09/07 — use so no node condition) + became_filled|became_empty|value_replaced (12/11: 'Foi
|
|
429
|
+
preenchido' = estava vazio e recebeu valor, dispara de novo se apagado e preenchido, conversa que NASCE
|
|
430
|
+
com o campo conta; 'Foi apagado'; 'Trocou de valor' = de um valor pra outro, nunca saindo/indo pro vazio
|
|
431
|
+
— olham o ANTES e o DEPOIS, SEM value; vazio = nulo, texto em branco, campo ausente, lista vazia; ex. 1o
|
|
432
|
+
agendamento so: {attr_key:'meet_link', operator:'became_filled'}); card_attribute_changed aceita
|
|
433
|
+
funnel_id/card_source opcionais na rule),
|
|
430
434
|
contact_attribute_changed (NOVO 2026-07-22 — 'Atributo do contato muda': dispara quando um
|
|
431
435
|
custom_attribute do CONTATO muda e a condicao casa, mesmo com o contato fora de flow. Item:
|
|
432
436
|
{key:'contact_attribute_changed', config:{logic:'and'|'or', rules:[{attrSource:'contact',
|
|
433
437
|
attr_key, operator, value | values:[...]}]}} — 1 a 10 regras; DIFERENTE dos irmaos de 08/07,
|
|
434
|
-
aqui o attrSource VAI na rule e e SEMPRE 'contact'; operadores iguais aos do node condition
|
|
438
|
+
aqui o attrSource VAI na rule e e SEMPRE 'contact'; operadores iguais aos do node condition
|
|
439
|
+
+ os 3 de mudanca (became_filled/became_empty/value_replaced, sem value).
|
|
435
440
|
VERSAO SEGURA por decisao de produto: dispara SO na conversa mais recente que JA EXISTE numa
|
|
436
441
|
caixa do flow (reabre se resolvida); contato sem conversa NAO dispara e NUNCA cria conversa.
|
|
437
442
|
Dedup 30s por contato, anti-loop por profundidade de cadeia; so flows de conversa),
|
|
@@ -685,8 +690,8 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
685
690
|
saveTo: "variable"|"contact_name"|"contact_email"|"contact_phone"|"contact_cpf"|"contact_cnpj"|"contact_document"|"contact_birthdate"|"contact_rg"|"contact_profession"|"contact_attr"|"conversation_attr"|"",
|
|
686
691
|
saveVariable, saveAttrKey // saveAttrKey obrigatorio p/ contact_attr e conversation_attr
|
|
687
692
|
}
|
|
688
|
-
CPF/CNPJ validam digito verificador (documento falso -> invalidMessage). Alvos cadastrais so com a validation
|
|
689
|
-
correspondente: cpf=>contact_cpf, cnpj=>contact_cnpj, cpf_cnpj=>contact_document (
|
|
693
|
+
CPF/CNPJ validam digito verificador (documento falso -> invalidMessage; aceita o CNPJ com letras da Receita). Alvos cadastrais so com a validation
|
|
694
|
+
correspondente: cpf=>contact_cpf, cnpj=>contact_cnpj, cpf_cnpj=>contact_document (CPF valido vai pro CPF, senao CNPJ),
|
|
690
695
|
date=>contact_birthdate (dd/mm/aaaa->ISO), rg=>contact_rg, profession=>contact_profession. Campo cadastral
|
|
691
696
|
ja preenchido NAO e sobrescrito (imutavel). saveTo contact_attr/conversation_attr: se o atributo tiver tipo
|
|
692
697
|
(number/currency/percent/date/list ou text+regex), a resposta tambem e validada/formatada por esse tipo.
|
|
@@ -733,7 +738,7 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
733
738
|
EMPRESA DO CONTATO (NOVO 16/10 — card "Atributo da empresa", so com o modulo Empresas): regra
|
|
734
739
|
{ id, valueType:'attr_config', attrSource:'company', attr_key, operator, value:'', values:[...] }.
|
|
735
740
|
attr_key = chave do campo PERSONALIZADO da empresa OU cadastro com prefixo: company.name,
|
|
736
|
-
company.legal_name, company.cnpj (
|
|
741
|
+
company.legal_name, company.cnpj (letras e numeros, sem pontuacao), company.phone, company.email,
|
|
737
742
|
company.address.city, company.address.state. Empresa = a do contato da conversa (no maximo UMA).
|
|
738
743
|
Contato sem empresa = valor vazio (not_equal/is_empty casam). Modulo desligado = NUNCA casa, nem a
|
|
739
744
|
negativa. attrSource fora de contact/conversation/card/company NAO casa. Variaveis da empresa em
|
|
@@ -936,6 +941,17 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
936
941
|
PASSAGEM do bloco (repeticao do mesmo passo nao duplica). Freio de 1 tarefa por segundo por conta (passo com
|
|
937
942
|
vaga futura fica verde "nasce as HH:MM:SS"). Quem agendou = o Fluxo (booking_source 'fluxo'); o historico do
|
|
938
943
|
card diz "Fluxo X criou uma tarefa ..." / "Fluxo X nao criou a tarefa: motivo".
|
|
944
|
+
complete_account_task({}), cancel_account_task({}),
|
|
945
|
+
set_account_task_attendance({attendance:'attended'|'no_show'}) — NOVO 13/11/2026: operacoes sobre a
|
|
946
|
+
tarefa que o fluxo CRIOU (num passo create_account_task anterior do mesmo flow) ou sobre o
|
|
947
|
+
AGENDAMENTO que o disparou (trigger_booking_id) — NAO "qualquer tarefa da conversa". Mesma aba
|
|
948
|
+
Agenda e mesmo gate do create_account_task (exige a Agenda unificada; nao roda em ai_tool nem em
|
|
949
|
+
grupo). Reusam o motor do set_booking_situation: idempotente (ja no estado pedido = PULADO sem
|
|
950
|
+
escrita, sem laco); CANCELAR numa tarefa COM agendamento desarma o agendamento (lembrete + link),
|
|
951
|
+
igual ao 'cancelled' do set_booking_situation; marcar presenca grava Compareceu/Faltou. Sem tarefa
|
|
952
|
+
alvo = PULADO nomeando a operacao ("nenhuma tarefa deste fluxo para concluir"), nao erro. Marcar
|
|
953
|
+
presenca numa sessao de um PROGRAMA DE TRATAMENTO consome aquela sessao (igual ao painel; a ultima
|
|
954
|
+
sessao fecha o programa). Adiar + recorrencia/varios responsaveis/retorno do ID = fase 2 (ainda nao).
|
|
939
955
|
Sistema (SO flow conversation e flow action): send_webhook({url,headers?,body?}), start_flow({flow_id}
|
|
940
956
|
— flow_id tem que ser de OUTRO flow: apontar pro proprio flow e aceito no save, mas na execucao
|
|
941
957
|
o passo fica com ERRO visivel no historico (self_reference) e o fluxo para ali.
|
|
@@ -943,7 +959,10 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
943
959
|
caixa da conversa, a execucao e RECUSADA e o passo fica com ERRO no historico
|
|
944
960
|
(inbox_mismatch) — antes rodava no lugar errado em silencio. Flow-alvo do tipo 'action' e
|
|
945
961
|
SEMPRE aceito, de qualquer origem, porque nao pertence a caixa nenhuma.
|
|
946
|
-
Flow de IA (ai_tool) nunca pode ser alvo),
|
|
962
|
+
Flow de IA (ai_tool) nunca pode ser alvo), stop_flow({flow_id}) — NOVO 13/11: encerra a execucao
|
|
963
|
+
VIVA (ativa, esperando resposta ou pausada) do flow escolhido NESTA conversa, inclusive a parada numa
|
|
964
|
+
espera (o despertador nao a acorda mais); deixa pilula na conversa. Nada rodando = passo verde com
|
|
965
|
+
aviso; flow_id do PROPRIO flow ou de flow fora da conta = passo com ERRO. deactivate_flow({}),
|
|
947
966
|
send_conversion({destinations:['meta'|'ga4'|'google_ads'], event_names:{meta?,google_ads?,ga4?},
|
|
948
967
|
messaging_event_names:{meta?}, event_name, value?}) — NOVO 01/09, evento POR DESTINO desde 02/09,
|
|
949
968
|
evento de ANUNCIO DE WHATSAPP desde 10/09: manda o evento de conversao pro
|
|
@@ -1001,11 +1020,11 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
1001
1020
|
|
|
1002
1021
|
▸ ai
|
|
1003
1022
|
data: { label, aiMode: "generate"|"custom"|"intent"|"sentiment"|"extract", aiPrompt,
|
|
1004
|
-
aiAssistantId, // OBRIGATORIO em generate
|
|
1005
|
-
//
|
|
1006
|
-
//
|
|
1007
|
-
//
|
|
1008
|
-
//
|
|
1023
|
+
aiAssistantId, // OBRIGATORIO so em generate — sem ele o node sai pela saida "error"
|
|
1024
|
+
// desde 20/08 ('AI Assistant not configured'). Desde 10/11 intent/
|
|
1025
|
+
// sentiment/extract NAO usam assistente (IA direto com a chave da conta
|
|
1026
|
+
// + aiModel; assistente gravado e ignorado). Tambem roda sem: aiMode
|
|
1027
|
+
// 'custom' (motor cru) e flow ai_tool em generate/custom
|
|
1009
1028
|
aiModel, // opcional: modelo LLM SO deste node (ex "gpt-4.1-mini");
|
|
1010
1029
|
// vazio/ausente = modelo padrao da conta; vale em TODOS os
|
|
1011
1030
|
// modos e tambem com assistente (sobrepoe o modelo dele)
|
|
@@ -1288,8 +1307,8 @@ sourceHandle OBRIGATORIO casar com handle exposto pelo node source.
|
|
|
1288
1307
|
13. Assistente de Formulas no editor (2026-07-10): quem edita pela tela tem preview ao vivo
|
|
1289
1308
|
(inclusive com contato real), avisos ao digitar e 'Gerar com IA' nos campos de formula —
|
|
1290
1309
|
ao entregar um flow com Liquid, sugira ao usuario validar as formulas la.
|
|
1291
|
-
14. ai: a chave de contexto e aiContextMessages (nao contextMessages); sem aiAssistantId o bloco
|
|
1292
|
-
"error" (nao fica verde). Nome de variavel iniciado por "_" e ignorado em set_variable/saveVariable e
|
|
1310
|
+
14. ai: a chave de contexto e aiContextMessages (nao contextMessages); em generate, sem aiAssistantId o bloco
|
|
1311
|
+
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
|
|
1293
1312
|
cai no padrao em apiResponseVar/aiResponseVar.
|
|
1294
1313
|
15. send_message: item delay usa duration_seconds (a tela nao le "seconds"). Em caixa oficial ligue
|
|
1295
1314
|
"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
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"method": "GET",
|
|
124
124
|
"path": "/api/v1/accounts/{account_id}/contacts",
|
|
125
125
|
"title": "Listar Contatos",
|
|
126
|
-
"description": "Lista contatos. meta usa count/current_page. Ordene com sort (ex sort=-name).",
|
|
126
|
+
"description": "Lista contatos. meta usa count/current_page. Ordene com sort (ex sort=-name). Com contact_import_id lista só os contatos de uma importação (created ou updated via import_result) — nunca use essa lista para excluir em massa sem conferir: 'updated' são clientes que já existiam.",
|
|
127
127
|
"category": "Contatos",
|
|
128
128
|
"params": [
|
|
129
129
|
{
|
|
@@ -154,6 +154,20 @@
|
|
|
154
154
|
"location": "query",
|
|
155
155
|
"required": false,
|
|
156
156
|
"description": "Incluir inboxes do contato"
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"name": "contact_import_id",
|
|
160
|
+
"type": "integer",
|
|
161
|
+
"location": "query",
|
|
162
|
+
"required": false,
|
|
163
|
+
"description": "Só os contatos de UMA importação (id de lionchat_contact_imports_list). Padrão: os que a planilha CRIOU. Importação de outra conta ou número inválido = lista vazia."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"name": "import_result",
|
|
167
|
+
"type": "string",
|
|
168
|
+
"location": "query",
|
|
169
|
+
"required": false,
|
|
170
|
+
"description": "Junto com contact_import_id: created (padrão, os que a planilha criou) ou updated (os que já existiam e foram atualizados)."
|
|
157
171
|
}
|
|
158
172
|
],
|
|
159
173
|
"returns": "meta (contadores globais) + payload (array de contatos)",
|
|
@@ -919,7 +933,7 @@
|
|
|
919
933
|
"method": "POST",
|
|
920
934
|
"path": "/api/v1/accounts/{account_id}/contacts/import",
|
|
921
935
|
"title": "Importar Contatos",
|
|
922
|
-
"description": "Importa contatos em lote via CSV. **Requer perfil Administrador.**. Cria novo contato. Obrigatórios: import_file. Valida unicidade quando aplicável. Retorna o contato criado com ID atribuído. REGRA DO DDI (18/08): o telefone precisa vir COM o codigo do pais (5511988887777 ou +351912345678; o + e opcional). O sistema NAO completa mais 55: sem DDI ou numero que nao existe em pais nenhum = ERRO na linha (o contato nao e criado; o relatorio de erros mostra linha a linha); comecando com 0 = recusado; brasileiro com 55 e 12-13 digitos e aceito mesmo no formato antigo sem o 9o digito. TELEFONE UNICO POR CONTA (trava no BANCO desde 01/09/2026, como e-mail e identifier): linha com telefone que ja e de outro contato da conta e recusada 'phone_number has already been taken' — inclusive em chamadas paralelas. Procure antes com contacts_search (acha com e sem o 9o digito) e use contacts_update no que existe.",
|
|
936
|
+
"description": "Importa contatos em lote via CSV. **Requer perfil Administrador.**. Cria novo contato. Obrigatórios: import_file. Valida unicidade quando aplicável. Retorna o contato criado com ID atribuído. REGRA DO DDI (18/08): o telefone precisa vir COM o codigo do pais (5511988887777 ou +351912345678; o + e opcional). O sistema NAO completa mais 55: sem DDI ou numero que nao existe em pais nenhum = ERRO na linha (o contato nao e criado; o relatorio de erros mostra linha a linha); comecando com 0 = recusado; brasileiro com 55 e 12-13 digitos e aceito mesmo no formato antigo sem o 9o digito. TELEFONE UNICO POR CONTA (trava no BANCO desde 01/09/2026, como e-mail e identifier): linha com telefone que ja e de outro contato da conta e recusada 'phone_number has already been taken' — inclusive em chamadas paralelas. Procure antes com contacts_search (acha com e sem o 9o digito) e use contacts_update no que existe. NOVO (2026-11): toda importação entra no histórico (lionchat_contact_imports_list) e o contato CRIADO por ela ganha a origem 'Importação de planilha' (origin_first_platform/origin_last_platform = import, kind importacao); contato que já existia não muda a origem.",
|
|
923
937
|
"category": "Contatos",
|
|
924
938
|
"params": [
|
|
925
939
|
{
|
|
@@ -943,7 +957,7 @@
|
|
|
943
957
|
"method": "POST",
|
|
944
958
|
"path": "/api/v1/accounts/{account_id}/contacts/export",
|
|
945
959
|
"title": "Exportar Contatos",
|
|
946
|
-
"description": "Exporta contatos (gera CSV em job async). NOVO (2026-06): exportacao COMPLETA por padrao — cadastral (16 colunas), etiquetas, empresa/cidade/pais, atributos do contato e da conversa (prefixos contato_/conversa_), ultima conversa e card do Kanban. Passar column_names mantem o formato antigo (so as colunas pedidas).",
|
|
960
|
+
"description": "Exporta contatos (gera CSV em job async). NOVO (2026-06): exportacao COMPLETA por padrao — cadastral (16 colunas), etiquetas, empresa/cidade/pais, atributos do contato e da conversa (prefixos contato_/conversa_), ultima conversa e card do Kanban. Passar column_names mantem o formato antigo (so as colunas pedidas). NOVO (2026-11): cada exportação fica no histórico (lionchat_contact_exports_list) com arquivo próprio por 30 dias; o e-mail leva à tela do histórico e o download é por lionchat_contact_exports_download (endereço de 5 min).",
|
|
947
961
|
"category": "Contatos",
|
|
948
962
|
"params": [
|
|
949
963
|
{
|
|
@@ -4638,7 +4652,7 @@
|
|
|
4638
4652
|
"method": "POST",
|
|
4639
4653
|
"path": "/api/v1/accounts/{account_id}/contacts/import_csv",
|
|
4640
4654
|
"title": "Importar Contatos (Wizard CSV)",
|
|
4641
|
-
"description": "Importa contatos via wizard CSV (assincrono). **Requer perfil Administrador.** Obrigatórios: file, mappings. Retorna { import_id } para acompanhar o progresso via import_status.",
|
|
4655
|
+
"description": "Importa contatos via wizard CSV (assincrono). **Requer perfil Administrador.** Obrigatórios: file, mappings. Retorna { import_id } para acompanhar o progresso via import_status. NOVO (2026-11): toda importação entra no histórico (lionchat_contact_imports_list) e o contato CRIADO por ela ganha a origem 'Importação de planilha' (origin_first_platform/origin_last_platform = import, kind importacao); contato que já existia não muda a origem.",
|
|
4642
4656
|
"category": "Contatos",
|
|
4643
4657
|
"params": [
|
|
4644
4658
|
{
|
|
@@ -4675,6 +4689,110 @@
|
|
|
4675
4689
|
"lionchat_contacts_import"
|
|
4676
4690
|
]
|
|
4677
4691
|
},
|
|
4692
|
+
{
|
|
4693
|
+
"id": "lionchat_contact_imports_list",
|
|
4694
|
+
"method": "GET",
|
|
4695
|
+
"path": "/api/v1/accounts/{account_id}/contact_imports",
|
|
4696
|
+
"title": "Listar Histórico de Importações de Contatos",
|
|
4697
|
+
"description": "Histórico de TODA importação de contatos da conta (planilha de Contatos, planilha de campanha e importação pela API), mais recente primeiro, 20 por página. Cada item: id, source (contacts | campaign | kanban | api), file_name (a planilha NÃO é guardada, só o nome), status (processing | completed | failed | interrupted), total_records, created_count, updated_count, error_count, user_name (vazio = sistema/API), created_at e finished_at (unix). Criados/atualizados são contados por quem de fato entrou (lote que roda de novo não conta duas vezes). Exige administrador ou cargo com contact_export_import.",
|
|
4698
|
+
"category": "Contatos",
|
|
4699
|
+
"params": [
|
|
4700
|
+
{
|
|
4701
|
+
"name": "page",
|
|
4702
|
+
"type": "integer",
|
|
4703
|
+
"location": "query",
|
|
4704
|
+
"required": false,
|
|
4705
|
+
"description": "Página (padrão 1, 20 por página)"
|
|
4706
|
+
}
|
|
4707
|
+
],
|
|
4708
|
+
"returns": "meta {count, current_page, per_page} + payload (array de importações)",
|
|
4709
|
+
"common_use_cases": [
|
|
4710
|
+
"Saber quem importou uma lista e quando",
|
|
4711
|
+
"Conferir quantos contatos uma planilha criou ou atualizou",
|
|
4712
|
+
"Achar a importação para ver os contatos dela"
|
|
4713
|
+
],
|
|
4714
|
+
"related_tools": [
|
|
4715
|
+
"lionchat_contact_imports_show",
|
|
4716
|
+
"lionchat_contacts_list",
|
|
4717
|
+
"lionchat_contacts_create_8"
|
|
4718
|
+
]
|
|
4719
|
+
},
|
|
4720
|
+
{
|
|
4721
|
+
"id": "lionchat_contact_imports_show",
|
|
4722
|
+
"method": "GET",
|
|
4723
|
+
"path": "/api/v1/accounts/{account_id}/contact_imports/{import_id}",
|
|
4724
|
+
"title": "Ver Importação de Contatos",
|
|
4725
|
+
"description": "Detalhe de UMA importação de contatos: os mesmos campos da lista + errors_sample (até 50 linhas com erro, cada uma {row, message}; row = linha da planilha). Para ver os contatos dela use lionchat_contacts_list com contact_import_id (criados) e import_result=updated (os que já existiam). Importação de outra conta responde 404. Exige administrador ou cargo com contact_export_import.",
|
|
4726
|
+
"category": "Contatos",
|
|
4727
|
+
"params": [
|
|
4728
|
+
{
|
|
4729
|
+
"name": "import_id",
|
|
4730
|
+
"type": "integer",
|
|
4731
|
+
"location": "path",
|
|
4732
|
+
"required": true,
|
|
4733
|
+
"description": "ID da importação (campo id da lista)"
|
|
4734
|
+
}
|
|
4735
|
+
],
|
|
4736
|
+
"returns": "Objeto da importação com errors_sample",
|
|
4737
|
+
"common_use_cases": [
|
|
4738
|
+
"Ver por que linhas de uma planilha deram erro",
|
|
4739
|
+
"Montar o resumo de uma importação"
|
|
4740
|
+
],
|
|
4741
|
+
"related_tools": [
|
|
4742
|
+
"lionchat_contact_imports_list",
|
|
4743
|
+
"lionchat_contacts_list"
|
|
4744
|
+
]
|
|
4745
|
+
},
|
|
4746
|
+
{
|
|
4747
|
+
"id": "lionchat_contact_exports_list",
|
|
4748
|
+
"method": "GET",
|
|
4749
|
+
"path": "/api/v1/accounts/{account_id}/contact_exports",
|
|
4750
|
+
"title": "Listar Histórico de Exportações de Contatos",
|
|
4751
|
+
"description": "Histórico das exportações de contatos da conta, mais recente primeiro, 20 por página. Cada item: id, status (queued | completed | failed), exported_count, filter_summary ({label, conditions}), user_name, file_available (o arquivo vale 30 dias), expires_at, created_at, finished_at (unix). Cada exportação tem arquivo PRÓPRIO (uma não apaga a outra). Exige administrador ou cargo com contact_export_import.",
|
|
4752
|
+
"category": "Contatos",
|
|
4753
|
+
"params": [
|
|
4754
|
+
{
|
|
4755
|
+
"name": "page",
|
|
4756
|
+
"type": "integer",
|
|
4757
|
+
"location": "query",
|
|
4758
|
+
"required": false,
|
|
4759
|
+
"description": "Página (padrão 1, 20 por página)"
|
|
4760
|
+
}
|
|
4761
|
+
],
|
|
4762
|
+
"returns": "meta {count, current_page, per_page} + payload (array de exportações)",
|
|
4763
|
+
"common_use_cases": [
|
|
4764
|
+
"Saber quem exportou a lista de contatos e quando",
|
|
4765
|
+
"Pegar o arquivo de uma exportação recente"
|
|
4766
|
+
],
|
|
4767
|
+
"related_tools": [
|
|
4768
|
+
"lionchat_contact_exports_download",
|
|
4769
|
+
"lionchat_contacts_create_5"
|
|
4770
|
+
]
|
|
4771
|
+
},
|
|
4772
|
+
{
|
|
4773
|
+
"id": "lionchat_contact_exports_download",
|
|
4774
|
+
"method": "GET",
|
|
4775
|
+
"path": "/api/v1/accounts/{account_id}/contact_exports/{export_id}/download",
|
|
4776
|
+
"title": "Baixar Exportação de Contatos",
|
|
4777
|
+
"description": "Devolve {url} para baixar o CSV de UMA exportação. O endereço vale 5 MINUTOS — usar na hora, nunca guardar nem repassar como link permanente (é a lista de contatos da conta, dado pessoal). Arquivo com mais de 30 dias responde 410 (exportar de novo). Exige administrador ou cargo com contact_export_import.",
|
|
4778
|
+
"category": "Contatos",
|
|
4779
|
+
"params": [
|
|
4780
|
+
{
|
|
4781
|
+
"name": "export_id",
|
|
4782
|
+
"type": "integer",
|
|
4783
|
+
"location": "path",
|
|
4784
|
+
"required": true,
|
|
4785
|
+
"description": "ID da exportação (campo id da lista)"
|
|
4786
|
+
}
|
|
4787
|
+
],
|
|
4788
|
+
"returns": "{ url } (válido por 5 minutos) ou 410 se o arquivo venceu",
|
|
4789
|
+
"common_use_cases": [
|
|
4790
|
+
"Baixar o CSV de uma exportação recente"
|
|
4791
|
+
],
|
|
4792
|
+
"related_tools": [
|
|
4793
|
+
"lionchat_contact_exports_list"
|
|
4794
|
+
]
|
|
4795
|
+
},
|
|
4678
4796
|
{
|
|
4679
4797
|
"id": "lionchat_contacts_show_1",
|
|
4680
4798
|
"method": "GET",
|
|
@@ -8860,21 +8978,21 @@
|
|
|
8860
8978
|
"type": "string",
|
|
8861
8979
|
"location": "query",
|
|
8862
8980
|
"required": false,
|
|
8863
|
-
"description": "Tipo da tarefa"
|
|
8981
|
+
"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
8982
|
},
|
|
8865
8983
|
{
|
|
8866
8984
|
"name": "status",
|
|
8867
8985
|
"type": "string",
|
|
8868
8986
|
"location": "query",
|
|
8869
8987
|
"required": false,
|
|
8870
|
-
"description": "
|
|
8988
|
+
"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
8989
|
},
|
|
8872
8990
|
{
|
|
8873
8991
|
"name": "priority",
|
|
8874
8992
|
"type": "string",
|
|
8875
8993
|
"location": "query",
|
|
8876
8994
|
"required": false,
|
|
8877
|
-
"description": "Prioridade
|
|
8995
|
+
"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
8996
|
},
|
|
8879
8997
|
{
|
|
8880
8998
|
"name": "user_id",
|
|
@@ -8885,10 +9003,10 @@
|
|
|
8885
9003
|
},
|
|
8886
9004
|
{
|
|
8887
9005
|
"name": "assignee_id",
|
|
8888
|
-
"type": "
|
|
9006
|
+
"type": "string",
|
|
8889
9007
|
"location": "query",
|
|
8890
9008
|
"required": false,
|
|
8891
|
-
"description": "
|
|
9009
|
+
"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
9010
|
},
|
|
8893
9011
|
{
|
|
8894
9012
|
"name": "q",
|
|
@@ -9622,28 +9740,28 @@
|
|
|
9622
9740
|
"type": "string",
|
|
9623
9741
|
"location": "query",
|
|
9624
9742
|
"required": false,
|
|
9625
|
-
"description": "Tipo da tarefa"
|
|
9743
|
+
"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
9744
|
},
|
|
9627
9745
|
{
|
|
9628
9746
|
"name": "status",
|
|
9629
9747
|
"type": "string",
|
|
9630
9748
|
"location": "query",
|
|
9631
9749
|
"required": false,
|
|
9632
|
-
"description": "Situacao dentro das abertas: 0 = pendente, 3 = adiada
|
|
9750
|
+
"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
9751
|
},
|
|
9634
9752
|
{
|
|
9635
9753
|
"name": "priority",
|
|
9636
9754
|
"type": "string",
|
|
9637
9755
|
"location": "query",
|
|
9638
9756
|
"required": false,
|
|
9639
|
-
"description": "Prioridade
|
|
9757
|
+
"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
9758
|
},
|
|
9641
9759
|
{
|
|
9642
9760
|
"name": "assignee_id",
|
|
9643
|
-
"type": "
|
|
9761
|
+
"type": "string",
|
|
9644
9762
|
"location": "query",
|
|
9645
9763
|
"required": false,
|
|
9646
|
-
"description": "
|
|
9764
|
+
"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
9765
|
},
|
|
9648
9766
|
{
|
|
9649
9767
|
"name": "user_id",
|
|
@@ -10028,7 +10146,7 @@
|
|
|
10028
10146
|
"type": "string",
|
|
10029
10147
|
"location": "query",
|
|
10030
10148
|
"required": false,
|
|
10031
|
-
"description": "pending, sent, failed"
|
|
10149
|
+
"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
10150
|
},
|
|
10033
10151
|
{
|
|
10034
10152
|
"name": "date_start",
|
|
@@ -10043,6 +10161,13 @@
|
|
|
10043
10161
|
"location": "query",
|
|
10044
10162
|
"required": false,
|
|
10045
10163
|
"description": "Data fim"
|
|
10164
|
+
},
|
|
10165
|
+
{
|
|
10166
|
+
"name": "assignee_id",
|
|
10167
|
+
"location": "query",
|
|
10168
|
+
"required": false,
|
|
10169
|
+
"type": "string",
|
|
10170
|
+
"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
10171
|
}
|
|
10047
10172
|
],
|
|
10048
10173
|
"returns": "array de mensagens agendadas",
|
|
@@ -10661,7 +10786,7 @@
|
|
|
10661
10786
|
"type": "string",
|
|
10662
10787
|
"location": "query",
|
|
10663
10788
|
"required": false,
|
|
10664
|
-
"description": "ID do agente
|
|
10789
|
+
"description": "ID do agente, \"all\", ou VARIOS ids separados por virgula (11/11/2026). Ids que a pessoa nao pode ver sao ignorados."
|
|
10665
10790
|
}
|
|
10666
10791
|
],
|
|
10667
10792
|
"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 +12037,7 @@
|
|
|
11912
12037
|
"method": "GET",
|
|
11913
12038
|
"path": "/api/v1/accounts/{account_id}/custom_filters",
|
|
11914
12039
|
"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).",
|
|
12040
|
+
"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
12041
|
"category": "Filtros Personalizados",
|
|
11917
12042
|
"params": [
|
|
11918
12043
|
{
|
|
@@ -11920,7 +12045,7 @@
|
|
|
11920
12045
|
"type": "string",
|
|
11921
12046
|
"location": "query",
|
|
11922
12047
|
"required": false,
|
|
11923
|
-
"description": "conversation (pastas: as suas + as compartilhadas da conta), contact (segmentos, da CONTA) ou report"
|
|
12048
|
+
"description": "conversation (pastas: as suas + as compartilhadas da conta), contact (segmentos, da CONTA) ou report; 'company' (segmento de EMPRESAS, da conta)"
|
|
11924
12049
|
}
|
|
11925
12050
|
],
|
|
11926
12051
|
"returns": "array de filtros (sem meta/payload)",
|
|
@@ -11932,7 +12057,8 @@
|
|
|
11932
12057
|
"related_tools": [
|
|
11933
12058
|
"lionchat_custom_filters_create",
|
|
11934
12059
|
"lionchat_custom_filters_show",
|
|
11935
|
-
"lionchat_custom_filters_update"
|
|
12060
|
+
"lionchat_custom_filters_update",
|
|
12061
|
+
"lionchat_companies_filter"
|
|
11936
12062
|
]
|
|
11937
12063
|
},
|
|
11938
12064
|
{
|
|
@@ -11940,7 +12066,7 @@
|
|
|
11940
12066
|
"method": "POST",
|
|
11941
12067
|
"path": "/api/v1/accounts/{account_id}/custom_filters",
|
|
11942
12068
|
"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\").",
|
|
12069
|
+
"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
12070
|
"category": "Filtros Personalizados",
|
|
11945
12071
|
"params": [
|
|
11946
12072
|
{
|
|
@@ -11955,7 +12081,7 @@
|
|
|
11955
12081
|
"type": "string",
|
|
11956
12082
|
"location": "body",
|
|
11957
12083
|
"required": true,
|
|
11958
|
-
"description": "'conversation' (pasta de conversas), 'contact' (segmento de contatos) ou 'report' — aceita o nome ou o numero"
|
|
12084
|
+
"description": "'conversation' (pasta de conversas), 'contact' (segmento de contatos) ou 'report' — aceita o nome ou o numero; 'company' (segmento de EMPRESAS, da conta)"
|
|
11959
12085
|
},
|
|
11960
12086
|
{
|
|
11961
12087
|
"name": "query",
|
|
@@ -11981,7 +12107,8 @@
|
|
|
11981
12107
|
"related_tools": [
|
|
11982
12108
|
"lionchat_custom_filters_list",
|
|
11983
12109
|
"lionchat_custom_filters_show",
|
|
11984
|
-
"lionchat_custom_filters_update"
|
|
12110
|
+
"lionchat_custom_filters_update",
|
|
12111
|
+
"lionchat_companies_filter"
|
|
11985
12112
|
],
|
|
11986
12113
|
"body_wrapper": "custom_filter"
|
|
11987
12114
|
},
|
|
@@ -11990,7 +12117,7 @@
|
|
|
11990
12117
|
"method": "GET",
|
|
11991
12118
|
"path": "/api/v1/accounts/{account_id}/custom_filters/{id}",
|
|
11992
12119
|
"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.",
|
|
12120
|
+
"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
12121
|
"category": "Filtros Personalizados",
|
|
11995
12122
|
"params": [
|
|
11996
12123
|
{
|
|
@@ -12010,7 +12137,8 @@
|
|
|
12010
12137
|
"related_tools": [
|
|
12011
12138
|
"lionchat_custom_filters_list",
|
|
12012
12139
|
"lionchat_custom_filters_create",
|
|
12013
|
-
"lionchat_custom_filters_update"
|
|
12140
|
+
"lionchat_custom_filters_update",
|
|
12141
|
+
"lionchat_companies_filter"
|
|
12014
12142
|
]
|
|
12015
12143
|
},
|
|
12016
12144
|
{
|
|
@@ -12018,7 +12146,7 @@
|
|
|
12018
12146
|
"method": "PATCH",
|
|
12019
12147
|
"path": "/api/v1/accounts/{account_id}/custom_filters/{id}",
|
|
12020
12148
|
"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.",
|
|
12149
|
+
"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
12150
|
"category": "Filtros Personalizados",
|
|
12023
12151
|
"params": [
|
|
12024
12152
|
{
|
|
@@ -12059,7 +12187,8 @@
|
|
|
12059
12187
|
"related_tools": [
|
|
12060
12188
|
"lionchat_custom_filters_list",
|
|
12061
12189
|
"lionchat_custom_filters_create",
|
|
12062
|
-
"lionchat_custom_filters_show"
|
|
12190
|
+
"lionchat_custom_filters_show",
|
|
12191
|
+
"lionchat_companies_filter"
|
|
12063
12192
|
],
|
|
12064
12193
|
"body_wrapper": "custom_filter"
|
|
12065
12194
|
},
|
|
@@ -12068,7 +12197,7 @@
|
|
|
12068
12197
|
"method": "DELETE",
|
|
12069
12198
|
"path": "/api/v1/accounts/{account_id}/custom_filters/{id}",
|
|
12070
12199
|
"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.",
|
|
12200
|
+
"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
12201
|
"category": "Filtros Personalizados",
|
|
12073
12202
|
"params": [
|
|
12074
12203
|
{
|
|
@@ -12088,7 +12217,8 @@
|
|
|
12088
12217
|
"related_tools": [
|
|
12089
12218
|
"lionchat_custom_filters_list",
|
|
12090
12219
|
"lionchat_custom_filters_create",
|
|
12091
|
-
"lionchat_custom_filters_show"
|
|
12220
|
+
"lionchat_custom_filters_show",
|
|
12221
|
+
"lionchat_companies_filter"
|
|
12092
12222
|
]
|
|
12093
12223
|
},
|
|
12094
12224
|
{
|
|
@@ -12447,14 +12577,16 @@
|
|
|
12447
12577
|
"Buscar com filtros antes de outra operação",
|
|
12448
12578
|
"Auditoria/relatório de empresas ativas"
|
|
12449
12579
|
],
|
|
12450
|
-
"related_tools": [
|
|
12580
|
+
"related_tools": [
|
|
12581
|
+
"lionchat_companies_filter"
|
|
12582
|
+
]
|
|
12451
12583
|
},
|
|
12452
12584
|
{
|
|
12453
12585
|
"id": "lionchat_companies_create",
|
|
12454
12586
|
"method": "POST",
|
|
12455
12587
|
"path": "/api/v1/accounts/{account_id}/companies",
|
|
12456
12588
|
"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
|
|
12589
|
+
"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 sem pontuacao, letras em maiuscula — aceita o CNPJ com letras da Receita, ex. 12.ABC.345/01DE-35), 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
12590
|
"category": "Empresas",
|
|
12459
12591
|
"params": [
|
|
12460
12592
|
{
|
|
@@ -12507,7 +12639,7 @@
|
|
|
12507
12639
|
"method": "PATCH",
|
|
12508
12640
|
"path": "/api/v1/accounts/{account_id}/companies/{id}",
|
|
12509
12641
|
"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
|
|
12642
|
+
"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 sem pontuacao, letras em maiuscula — aceita o CNPJ com letras da Receita, ex. 12.ABC.345/01DE-35), 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
12643
|
"category": "Empresas",
|
|
12512
12644
|
"params": [
|
|
12513
12645
|
{
|
|
@@ -12608,7 +12740,62 @@
|
|
|
12608
12740
|
"Buscar pelo email/telefone parcial",
|
|
12609
12741
|
"Verificar se já existe antes de criar"
|
|
12610
12742
|
],
|
|
12611
|
-
"related_tools": [
|
|
12743
|
+
"related_tools": [
|
|
12744
|
+
"lionchat_companies_filter"
|
|
12745
|
+
]
|
|
12746
|
+
},
|
|
12747
|
+
{
|
|
12748
|
+
"id": "lionchat_companies_filter",
|
|
12749
|
+
"method": "POST",
|
|
12750
|
+
"path": "/api/v1/accounts/{account_id}/companies/filter",
|
|
12751
|
+
"title": "Filtrar Empresas",
|
|
12752
|
+
"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'); telefone comparado so pelos numeros; CNPJ por letras e numeros, sem pontuacao e sem diferenca de maiuscula (valor so com pontuacao = 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: [...]}.",
|
|
12753
|
+
"category": "Empresas",
|
|
12754
|
+
"params": [
|
|
12755
|
+
{
|
|
12756
|
+
"name": "payload",
|
|
12757
|
+
"type": "array",
|
|
12758
|
+
"location": "body",
|
|
12759
|
+
"required": true,
|
|
12760
|
+
"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\"]}]"
|
|
12761
|
+
},
|
|
12762
|
+
{
|
|
12763
|
+
"name": "q",
|
|
12764
|
+
"type": "string",
|
|
12765
|
+
"location": "query",
|
|
12766
|
+
"required": false,
|
|
12767
|
+
"description": "Busca por nome ou site, aplicada por cima do filtro (opcional)"
|
|
12768
|
+
},
|
|
12769
|
+
{
|
|
12770
|
+
"name": "page",
|
|
12771
|
+
"type": "integer",
|
|
12772
|
+
"location": "query",
|
|
12773
|
+
"required": false,
|
|
12774
|
+
"description": "Pagina (25 por pagina, padrao 1)"
|
|
12775
|
+
},
|
|
12776
|
+
{
|
|
12777
|
+
"name": "sort",
|
|
12778
|
+
"type": "string",
|
|
12779
|
+
"location": "query",
|
|
12780
|
+
"required": false,
|
|
12781
|
+
"description": "Ordenacao: name, domain, created_at, contacts_count, last_activity_at (prefixo - = decrescente)"
|
|
12782
|
+
}
|
|
12783
|
+
],
|
|
12784
|
+
"returns": "meta (total_count, page) + payload (array de empresas, mesmo formato de lionchat_companies_list)",
|
|
12785
|
+
"common_use_cases": [
|
|
12786
|
+
"Empresas de uma cidade ou estado",
|
|
12787
|
+
"Empresas com mais de N contatos",
|
|
12788
|
+
"Empresas sem CNPJ cadastrado (cnpj is_not_present)",
|
|
12789
|
+
"Listar as empresas de um segmento de empresas salvo",
|
|
12790
|
+
"Montar a regra antes de salvar um segmento de empresas"
|
|
12791
|
+
],
|
|
12792
|
+
"related_tools": [
|
|
12793
|
+
"lionchat_companies_list",
|
|
12794
|
+
"lionchat_companies_search",
|
|
12795
|
+
"lionchat_custom_filters_create",
|
|
12796
|
+
"lionchat_custom_filters_list",
|
|
12797
|
+
"lionchat_custom_filters_show"
|
|
12798
|
+
]
|
|
12612
12799
|
},
|
|
12613
12800
|
{
|
|
12614
12801
|
"id": "lionchat_companies_contacts_list",
|
|
@@ -14939,7 +15126,7 @@
|
|
|
14939
15126
|
"type": "array",
|
|
14940
15127
|
"location": "body",
|
|
14941
15128
|
"required": true,
|
|
14942
|
-
"description": "Array de permissoes (array de strings). Valores aceitos (
|
|
15129
|
+
"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
15130
|
},
|
|
14944
15131
|
{
|
|
14945
15132
|
"name": "hidden_menus",
|
|
@@ -15024,7 +15211,7 @@
|
|
|
15024
15211
|
"type": "array",
|
|
15025
15212
|
"location": "body",
|
|
15026
15213
|
"required": false,
|
|
15027
|
-
"description": "Permissoes (array de strings). Valores aceitos (
|
|
15214
|
+
"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
15215
|
},
|
|
15029
15216
|
{
|
|
15030
15217
|
"name": "hidden_menus",
|
|
@@ -21625,7 +21812,7 @@
|
|
|
21625
21812
|
"method": "POST",
|
|
21626
21813
|
"path": "/api/v1/accounts/{account_id}/captain/documents/{id}/recrawl",
|
|
21627
21814
|
"title": "Re-indexar Documento",
|
|
21628
|
-
"description": "Reprocessa e reindexa um documento JA EXISTENTE da base de conhecimento (recrawl). NAO cria um documento novo. Reseta o status do documento e dispara o reprocessamento (crawl/chunks/FAQs). Retorna o mesmo documento atualizado.",
|
|
21815
|
+
"description": "Reprocessa e reindexa um documento JA EXISTENTE da base de conhecimento (recrawl). NAO cria um documento novo. Reseta o status do documento e dispara o reprocessamento (crawl/chunks/FAQs). Retorna o mesmo documento atualizado. Para trocar o ARQUIVO de um PDF/.md, use lionchat_captain_documents_replace_file (o re-indexar le o arquivo que ja esta no documento).",
|
|
21629
21816
|
"category": "Base de Conhecimento",
|
|
21630
21817
|
"params": [
|
|
21631
21818
|
{
|
|
@@ -21648,6 +21835,40 @@
|
|
|
21648
21835
|
"lionchat_captain_documents_destroy"
|
|
21649
21836
|
]
|
|
21650
21837
|
},
|
|
21838
|
+
{
|
|
21839
|
+
"id": "lionchat_captain_documents_replace_file",
|
|
21840
|
+
"method": "POST",
|
|
21841
|
+
"path": "/api/v1/accounts/{account_id}/captain/documents/{id}/replace_file",
|
|
21842
|
+
"title": "Trocar Arquivo do Documento",
|
|
21843
|
+
"description": "Troca o arquivo (PDF ou .md) de um documento JA EXISTENTE da base de conhecimento e refaz a leitura do zero: apaga a copia antiga guardada na OpenAI, envia o arquivo novo e regera as perguntas e respostas a partir dele. As perguntas antigas so saem quando as novas ficam prontas (se a geracao falhar ou voltar vazia, as antigas continuam). Perguntas editadas a mao sao refeitas. So documento que tem arquivo: documento escrito a mao (use update) ou de site (use o re-indexar) responde 422. Mesma permissao do re-indexar.",
|
|
21844
|
+
"category": "Base de Conhecimento",
|
|
21845
|
+
"params": [
|
|
21846
|
+
{
|
|
21847
|
+
"name": "id",
|
|
21848
|
+
"type": "integer",
|
|
21849
|
+
"location": "path",
|
|
21850
|
+
"required": true,
|
|
21851
|
+
"description": "ID do documento existente (PDF ou .md)"
|
|
21852
|
+
},
|
|
21853
|
+
{
|
|
21854
|
+
"name": "pdf_file",
|
|
21855
|
+
"type": "file",
|
|
21856
|
+
"location": "body",
|
|
21857
|
+
"required": true,
|
|
21858
|
+
"description": "Arquivo novo, PDF ou .md, ate 10 MB (multipart upload)"
|
|
21859
|
+
}
|
|
21860
|
+
],
|
|
21861
|
+
"returns": "documento atualizado (mesmo ID, status in_progress, external_link com o nome do arquivo novo)",
|
|
21862
|
+
"common_use_cases": [
|
|
21863
|
+
"Atualizar tabela de precos ou regras em PDF sem apagar o documento",
|
|
21864
|
+
"Trocar o manual por uma versao nova"
|
|
21865
|
+
],
|
|
21866
|
+
"related_tools": [
|
|
21867
|
+
"lionchat_captain_documents_show",
|
|
21868
|
+
"lionchat_captain_documents_create_1",
|
|
21869
|
+
"lionchat_captain_documents_update"
|
|
21870
|
+
]
|
|
21871
|
+
},
|
|
21651
21872
|
{
|
|
21652
21873
|
"id": "lionchat_copilot_prompts_list",
|
|
21653
21874
|
"method": "GET",
|
|
@@ -23391,7 +23612,7 @@
|
|
|
23391
23612
|
"method": "PATCH",
|
|
23392
23613
|
"path": "/api/v1/accounts/{account_id}/campaigns/{id}",
|
|
23393
23614
|
"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.",
|
|
23615
|
+
"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
23616
|
"category": "Campanhas",
|
|
23396
23617
|
"params": [
|
|
23397
23618
|
{
|
|
@@ -24134,7 +24355,7 @@
|
|
|
24134
24355
|
"method": "GET",
|
|
24135
24356
|
"path": "/api/v1/accounts/{account_id}/flow_tools/{id}/executions",
|
|
24136
24357
|
"title": "Execuções da Ferramenta da IA",
|
|
24137
|
-
"description": "Últimas 50 execuções (manuais e via LLM) com status e duração. ADMIN-ONLY.",
|
|
24358
|
+
"description": "Últimas 50 execuções (manuais e via LLM) com status e duração. ADMIN-ONLY. Cada item traz `conversation: {display_id, contact_name}` (de qual conversa e contato veio a execução); `null` quando foi teste pelo painel.",
|
|
24138
24359
|
"category": "Ferramentas da IA",
|
|
24139
24360
|
"params": [
|
|
24140
24361
|
{
|
|
@@ -24145,7 +24366,7 @@
|
|
|
24145
24366
|
"description": "ID do flow tool"
|
|
24146
24367
|
}
|
|
24147
24368
|
],
|
|
24148
|
-
"returns": "[{ id, status, started_at, completed_at, duration_ms, error_message }]",
|
|
24369
|
+
"returns": "[{ id, status, started_at, completed_at, duration_ms, error_message, conversation: { display_id, contact_name } | null }]",
|
|
24149
24370
|
"common_use_cases": [
|
|
24150
24371
|
"Monitorar saúde da ferramenta",
|
|
24151
24372
|
"Achar execuções com falha"
|
|
@@ -24159,7 +24380,7 @@
|
|
|
24159
24380
|
"method": "GET",
|
|
24160
24381
|
"path": "/api/v1/accounts/{account_id}/flow_tool_executions/{id}",
|
|
24161
24382
|
"title": "Detalhe de Execução da Ferramenta",
|
|
24162
|
-
"description": "Detalhe completo de UMA execução: entrada, saída, log passo a passo, variáveis, nós visitados e a resposta da IA na sequência (se houver). PII é redigida automaticamente. ADMIN-ONLY.",
|
|
24383
|
+
"description": "Detalhe completo de UMA execução: entrada, saída, log passo a passo, variáveis, nós visitados e a resposta da IA na sequência (se houver). PII é redigida automaticamente. ADMIN-ONLY. Traz `origin` com a conversa (id, display_id, status, inbox_name, channel_type) e o contato (id, name, phone_number, email) que acionou a ferramenta; `null` sem conversa.",
|
|
24163
24384
|
"category": "Ferramentas da IA",
|
|
24164
24385
|
"params": [
|
|
24165
24386
|
{
|
|
@@ -24170,7 +24391,7 @@
|
|
|
24170
24391
|
"description": "ID da execução (FlowToolExecution)"
|
|
24171
24392
|
}
|
|
24172
24393
|
],
|
|
24173
|
-
"returns": "{ id, flow_id, status, input_params, output_result, execution_log, variables, canvas_detail, ai_response, duration_ms, error_message }",
|
|
24394
|
+
"returns": "{ id, flow_id, status, input_params, output_result, execution_log, variables, canvas_detail, ai_response, duration_ms, error_message, origin }",
|
|
24174
24395
|
"common_use_cases": [
|
|
24175
24396
|
"Depurar por que a ferramenta retornou errado pro LLM"
|
|
24176
24397
|
],
|
|
@@ -33758,7 +33979,7 @@
|
|
|
33758
33979
|
"method": "GET",
|
|
33759
33980
|
"path": "/api/v1/accounts/{account_id}/flow_sessions/{id}",
|
|
33760
33981
|
"title": "Detalhe de uma Execução de Flow (passo a passo)",
|
|
33761
|
-
"description": "SÓ LEITURA, ADMIN-ONLY, rate limit 30/min por usuário. O detalhe de UMA execução (sessão) de fluxo de conversa: log passo a passo enriquecido (execution_steps, com status e erro por bloco — inclusive falha de entrega assíncrona registrada no passo do bloco), variáveis no fim (variables_snapshot, filtradas), blocos visitados, setas percorridas (traversed_edges) e a conversa. Resolve a FOTO da versão do fluxo da época (flow_snapshot); flow_snapshot_stale=true avisa que o fluxo foi editado durante a execução. execution_log_truncated=true quando o log passou do teto. Os ids vêm de lionchat_flows_executions_list. 404 {error:'Nao encontrado'}.",
|
|
33982
|
+
"description": "SÓ LEITURA, ADMIN-ONLY, rate limit 30/min por usuário. O detalhe de UMA execução (sessão) de fluxo de conversa: log passo a passo enriquecido (execution_steps, com status e erro por bloco — inclusive falha de entrega assíncrona registrada no passo do bloco), variáveis no fim (variables_snapshot, filtradas), blocos visitados, setas percorridas (traversed_edges) e a conversa. Resolve a FOTO da versão do fluxo da época (flow_snapshot); flow_snapshot_stale=true avisa que o fluxo foi editado durante a execução. execution_log_truncated=true quando o log passou do teto. Os ids vêm de lionchat_flows_executions_list. 404 {error:'Nao encontrado'}. Traz também `origin`: conversa (display_id, status, caixa, canal) e contato (id, nome, telefone, e-mail), no mesmo formato da ferramenta de IA.",
|
|
33762
33983
|
"category": "Flows",
|
|
33763
33984
|
"params": [
|
|
33764
33985
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionchat/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.38.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",
|