@lionchat/mcp-server 1.37.0 → 1.38.1
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 +4 -1
- package/dist/docs/prompts/whatsapp_template_usage.json +1 -1
- package/dist/docs/resources/api-conventions.md +1 -1
- package/dist/docs/resources/best-practices.md +26 -0
- package/dist/docs/resources/conversation-flows.md +6 -0
- package/dist/docs/resources/data-model.md +3 -3
- package/dist/docs/resources/flowbuilder-design-guide.md +8 -5
- package/dist/docs/resources/flowbuilder-patterns.md +8 -0
- package/dist/docs/resources/formularios-publicos.md +2 -2
- package/dist/docs/resources/reports-guide.md +4 -0
- package/dist/tools.js +36 -13
- package/dist/tools.js.map +1 -1
- package/endpoints.json +167 -15
- package/package.json +1 -1
|
@@ -327,6 +327,8 @@ teams, conversations_summary) exigem as DUAS pontas; nos demais, `since` ou `unt
|
|
|
327
327
|
4. lionchat_campaigns_create (inbox_id define o tipo: WhatsApp oficial, QR Code/WAHA, SMS, Website)
|
|
328
328
|
Modelo oficial com variáveis: `template_params.processed_params.body` precisa ter TODAS as
|
|
329
329
|
posições (`"1"`, `"2"`...) preenchidas — posição vazia NÃO falha, sai como "." pra todo mundo.
|
|
330
|
+
ANTES de criar: leia o corpo do modelo. Texto entre colchetes (`[Primeiro nome]`) NÃO é variável —
|
|
331
|
+
o cliente recebe os colchetes escritos. Avise o usuário e ofereça corrigir o modelo antes do disparo.
|
|
330
332
|
5. Acompanhar com lionchat_campaigns_statistics (sent/delivered/read/failed)
|
|
331
333
|
```
|
|
332
334
|
Estrutura do audience: `[{type:'Label', id}, {type:'Funnel', id, stages:[], include_won, include_lost}, {type:'ConversationAttribute', key, value}]`.
|
|
@@ -489,6 +491,7 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
|
|
|
489
491
|
| 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) |
|
|
490
492
|
| Achar contato pelo que aconteceu com ele (conversa/card) | `lionchat_contacts_filter` com `linked_records` | Ver api-conventions → registros vinculados |
|
|
491
493
|
| **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 |
|
|
494
|
+
| **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 |
|
|
492
495
|
| **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 |
|
|
493
496
|
| 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:` |
|
|
494
497
|
| **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 |
|
|
@@ -507,7 +510,7 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
|
|
|
507
510
|
| **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 |
|
|
508
511
|
| **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` |
|
|
509
512
|
| **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` |
|
|
510
|
-
| **Migrar conversas** de uma caixa WhatsApp pra outra (
|
|
513
|
+
| **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 |
|
|
511
514
|
| 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. |
|
|
512
515
|
| 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 |
|
|
513
516
|
| **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 |
|
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
"required": false
|
|
15
15
|
}
|
|
16
16
|
],
|
|
17
|
-
"template": "Analise o uso de templates WhatsApp Business nos últimos {{period_days|30}} dias.\n\nInbox: {{inbox_id|todas as inboxes WhatsApp Cloud}}\n\nDados a levantar:\n\n## 1. Inventário de Templates\n- Total de templates aprovados (status: APPROVED)\n- Pendentes de aprovação (PENDING)\n- Rejeitados (REJECTED) — listar motivos\n- Templates por categoria (UTILITY, MARKETING, AUTHENTICATION)\n- Templates por idioma\n\n## 2. Uso no Período\nPra cada template usado:\n- Nome do template\n- Quantas vezes foi enviado\n- Quantas conversas geraram resposta dentro de 24h\n- Taxa de resposta (% que responderam)\n- Taxa de conversão (se for marketing — virou venda/lead qualificado?)\n\n## 3. Templates Inativos\nListar templates aprovados HÁ MAIS DE 30 DIAS que NÃO foram usados no período.\n- Por quê? Esquecidos? Substituídos por novo?\n- Sugestão: arquivar / atualizar / promover uso\n\n## 4. Performance dos Top Templates\nTop 5 mais enviados — analisar:\n- Texto do template\n- Taxa de resposta\n- Tempo médio até resposta\n- Tem variáveis personalizadas? ({{nome}}, etc)\n- Categoria correta? (errar categoria = risco de banimento)\n\n## 5. Red Flags\n- Templates marketing sendo usados em janela 24h (deveriam ser utility)\n- Templates rejeitados não removidos\n- Templates aprovados há > 90 dias e nunca usados\n- Templates duplicados (mesma intenção, várias versões)\n- Mensagens com `additional_attributes.template_param_fallback` preenchido = clientes que receberam \".\" no lugar da variável (posição vazia não falha mais — sai como ponto)\n- Falhas classificadas como `account_locked` (erro 131031) NÃO são do template — é a conta comercial trancada na Meta\n\n## Recomendações\n- Templates a criar (gap identificado)\n- Templates a remover (desuso ou redundância)\n- Templates a otimizar (baixa conversão)\n- Sugestão de A/B test entre 2 versões de um mesmo template\n\nFinalizar com sugestão de criar nova campanha usando o template com melhor performance."
|
|
17
|
+
"template": "Analise o uso de templates WhatsApp Business nos últimos {{period_days|30}} dias.\n\nInbox: {{inbox_id|todas as inboxes WhatsApp Cloud}}\n\nDados a levantar:\n\n## 1. Inventário de Templates\n- Total de templates aprovados (status: APPROVED)\n- Pendentes de aprovação (PENDING)\n- Rejeitados (REJECTED) — listar motivos\n- Templates por categoria (UTILITY, MARKETING, AUTHENTICATION)\n- Templates por idioma\n\n## 2. Uso no Período\nPra cada template usado:\n- Nome do template\n- Quantas vezes foi enviado\n- Quantas conversas geraram resposta dentro de 24h\n- Taxa de resposta (% que responderam)\n- Taxa de conversão (se for marketing — virou venda/lead qualificado?)\n\n## 3. Templates Inativos\nListar templates aprovados HÁ MAIS DE 30 DIAS que NÃO foram usados no período.\n- Por quê? Esquecidos? Substituídos por novo?\n- Sugestão: arquivar / atualizar / promover uso\n\n## 4. Performance dos Top Templates\nTop 5 mais enviados — analisar:\n- Texto do template\n- Taxa de resposta\n- Tempo médio até resposta\n- Tem variáveis personalizadas? ({{nome}}, etc)\n- Categoria correta? (errar categoria = risco de banimento)\n\n## 5. Red Flags\n- Templates marketing sendo usados em janela 24h (deveriam ser utility)\n- Templates rejeitados não removidos\n- Templates aprovados há > 90 dias e nunca usados\n- Templates duplicados (mesma intenção, várias versões)\n- Templates com texto entre colchetes no corpo (ex.: `[Primeiro nome]`) = o cliente recebe os colchetes escritos, sem o dado. Colchete NÃO é variável: ofereça corrigir o modelo (trocar por {{1}} + variable_mapping, perguntando ao usuário qual dado é cada um)\n- Mensagens com `additional_attributes.template_param_fallback` preenchido = clientes que receberam \".\" no lugar da variável (posição vazia não falha mais — sai como ponto)\n- Falhas classificadas como `account_locked` (erro 131031) NÃO são do template — é a conta comercial trancada na Meta\n\n## Recomendações\n- Templates a criar (gap identificado)\n- Templates a remover (desuso ou redundância)\n- Templates a otimizar (baixa conversão)\n- Sugestão de A/B test entre 2 versões de um mesmo template\n\nFinalizar com sugestão de criar nova campanha usando o template com melhor performance."
|
|
18
18
|
}
|
|
@@ -514,7 +514,7 @@ administrador ou atendente com o menu Empresas visível cria, edita e apaga; mó
|
|
|
514
514
|
público de campanha. A lista filtrada é `POST companies/filter` com o mesmo `payload` do filtro de contatos; campos:
|
|
515
515
|
`name`, `domain`, `legal_name`, `cnpj`, `phone`, `email`, `city`, `state`, `contacts_count`, `created_at`,
|
|
516
516
|
`last_activity_at` e atributos de empresa com `custom_attribute_type: company_attribute`. Texto é comparado sem maiúscula
|
|
517
|
-
e sem acento;
|
|
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
518
|
|
|
519
519
|
### Pasta de conversa compartilhada (2026-10-27)
|
|
520
520
|
|
|
@@ -761,6 +761,28 @@ opcional `variable_mapping` junto.
|
|
|
761
761
|
- Só entram no mapping as que devem auto-preencher; as demais `{{N}}` continuam manuais.
|
|
762
762
|
- O `variable_mapping` é salvo localmente (NÃO vai pra Meta) e usado no momento do envio.
|
|
763
763
|
|
|
764
|
+
**Colchete NÃO é variável (2026-11-14).** Nunca escreva o nome do dado entre colchetes no texto do
|
|
765
|
+
modelo (`"Olá, [Primeiro nome]"`, `"[Nome]"`, `"[Variável 2]"`). A Meta aprova como TEXTO COMUM e o
|
|
766
|
+
cliente recebe os colchetes escritos, sem o dado — caso real em 14/11/2026: uma campanha entregou
|
|
767
|
+
"Olá, [Primeiro nome do contato]" a 928 pacientes. Desde 14/11 a API RECUSA (422) criar ou editar modelo
|
|
768
|
+
com colchete no corpo ou no cabeçalho de texto, e a resposta lista cada colchete encontrado.
|
|
769
|
+
|
|
770
|
+
Quando o texto que o usuário escreveu ou colou tiver colchete (ou qualquer marcação parecida, como
|
|
771
|
+
`<nome>`, `{nome}`, `NOME_DO_CLIENTE`), o procedimento é OBRIGATÓRIO:
|
|
772
|
+
|
|
773
|
+
1. Liste para o usuário CADA marcação encontrada.
|
|
774
|
+
2. Para cada uma, diga qual dado do sistema você acha que é (tabela abaixo) e PERGUNTE se é isso:
|
|
775
|
+
"o [Primeiro nome] é o primeiro nome do contato?". Não decida sozinho — "Nome" pode ser o nome
|
|
776
|
+
inteiro ou só o primeiro.
|
|
777
|
+
3. Se nenhum dado do sistema serve (ex.: código de acesso, link do dia), pergunte se o valor será
|
|
778
|
+
preenchido na hora do envio — aí a posição fica SEM `variable_mapping` e quem dispara preenche.
|
|
779
|
+
4. Só então troque cada marcação por `{{1}}`, `{{2}}`... (na ordem do texto), com `example.body_text`
|
|
780
|
+
e o `variable_mapping` combinado.
|
|
781
|
+
|
|
782
|
+
Antes de usar um modelo já aprovado numa campanha ou envio, leia o corpo: se tiver colchete, avise que
|
|
783
|
+
o cliente vai receber os colchetes escritos e ofereça corrigir o modelo (`_create_2`, que reenvia à Meta —
|
|
784
|
+
enquanto a Meta analisa, continua valendo a versão antiga).
|
|
785
|
+
|
|
764
786
|
**Variável sem mapping tem preço (2026-08-04).** Placeholder que ninguém disse como preencher:
|
|
765
787
|
|
|
766
788
|
1. **Tira o modelo do alcance do AI Agente.** Basta UMA variável sem mapping para o modelo inteiro
|
|
@@ -1075,6 +1097,10 @@ Custom attribute em lugar errado vira:
|
|
|
1075
1097
|
- **Import de contatos: o DDI é da planilha.** O sistema não completa 55; sem DDI = erro na linha;
|
|
1076
1098
|
`contacts_import_validate` NÃO valida telefone. No import do Kanban, telefone inválido cria card
|
|
1077
1099
|
SEM contato em silêncio. Oriente o cliente a subir `5511988887777` ou `+351912345678`.
|
|
1100
|
+
- **Histórico de importação (13/11):** toda importação de contatos fica em `lionchat_contact_imports_list`
|
|
1101
|
+
(quem, quando, arquivo, criados/atualizados/erros). Para "desfazer uma planilha", liste SÓ os criados
|
|
1102
|
+
(`lionchat_contacts_list` com `contact_import_id`) e confirme com o cliente antes de excluir: os de
|
|
1103
|
+
`import_result=updated` são clientes que JÁ existiam. Contato criado por planilha tem origem `import`.
|
|
1078
1104
|
- **Caixa oficial com aviso de bloqueio por pagamento** (`whatsapp_send_blocked_billing`):
|
|
1079
1105
|
`GET /inboxes/{id}/health` consulta a Meta e LIMPA o aviso se o envio voltou — além de sucesso
|
|
1080
1106
|
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,7 +204,7 @@ 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
210
|
valor vazio apaga aquela chave. CNPJ UNICO por empresa na conta (11/11/2026): CNPJ que ja e de outra empresa = 422
|
|
@@ -234,7 +234,7 @@ quarto tipo de definicao, separado de conversa, contato e variavel de conta:
|
|
|
234
234
|
tem no maximo UMA empresa (`contacts.company_id`); a conversa nao tem empresa propria. Com o modulo Empresas ligado:
|
|
235
235
|
- **Variavel** em mensagem, resposta pronta, automacao, fluxo, campanha e mensagem agendada:
|
|
236
236
|
`{{contact.company.custom_attribute.<chave>}}` (data sai DD/MM/AAAA) e o cadastro `{{contact.company.name}}`,
|
|
237
|
-
`{{contact.company.legal_name}}`, `{{contact.company.cnpj}}` (
|
|
237
|
+
`{{contact.company.legal_name}}`, `{{contact.company.cnpj}}` (sem pontuacao), `{{contact.company.phone}}`,
|
|
238
238
|
`{{contact.company.email}}`, `{{contact.company.address.city}}`, `{{contact.company.address.state}}`.
|
|
239
239
|
`{{contact.company}}` sozinho imprime o nome. Contato sem empresa = vazio, sem erro.
|
|
240
240
|
- **Modelo oficial do WhatsApp** (`variable_mapping`): campo personalizado com
|
|
@@ -243,7 +243,7 @@ quarto tipo de definicao, separado de conversa, contato e variavel de conta:
|
|
|
243
243
|
`address.city`, `address.state`). O nome da empresa ja e `contact.company_name`.
|
|
244
244
|
- **Condicao do bloco Condicao do fluxo:** regra `{"valueType": "attr_config", "attrSource": "company",
|
|
245
245
|
"attr_key": "<chave>", "operator": "...", "value": "", "values": [...]}`. `attr_key` = chave personalizada OU
|
|
246
|
-
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),
|
|
247
247
|
`company.phone`, `company.email`, `company.address.city`, `company.address.state`. Contato sem empresa = valor
|
|
248
248
|
vazio (os negativos casam).
|
|
249
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
|
|
|
@@ -732,5 +732,13 @@ APARECE errada pro cliente. Pares corretos:
|
|
|
732
732
|
| Card perdido | `_kanban_status` | `kanban_lost` | `funnel_only` |
|
|
733
733
|
| Resposta do cliente | `{{last_response}}` | `equal_any` (e variações `_any`) | `response_multi` |
|
|
734
734
|
| Resposta do atendente | `{{last_agent_response}}` | `equal_any` (e variações `_any`) | `response_multi` |
|
|
735
|
+
| Atributo do contato / conversa / card | (sem `field`) | `equal`, `contains`... + `attrSource` (`contact`/`conversation`/`card`) e `attr_key` | `attr_config` — NUNCA o tipo do dado (`text`, `number`) |
|
|
736
|
+
| Sem agente de IA | `_ai_agent_check` | `conversation_no_ai_agent` | `null` (não mande `""`) |
|
|
737
|
+
| Sem agente humano | `_agent_check` | `conversation_no_agent` | `null` (não mande `""`) |
|
|
738
|
+
|
|
739
|
+
Desde 14/11/2026 a tela reconhece sozinha a regra gravada com `valueType` vazio ou com o tipo do dado (descobre
|
|
740
|
+
pelo operador, pelo campo e pelo `attrSource`) — antes ela abria a linha EM BRANCO, com o fluxo funcionando. Mesmo
|
|
741
|
+
assim grave o `valueType` desta tabela: é ele que a tela usa primeiro. Salvar pela tela uma regra em branco NÃO a
|
|
742
|
+
apaga.
|
|
735
743
|
|
|
736
744
|
Nas condições de etiqueta, `values` aceita array de títulos ou string separada por vírgula.
|
|
@@ -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`).
|
|
@@ -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-14)
|
|
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.
|
|
@@ -725,15 +730,19 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
725
730
|
CRITICO (2026-07-10, aprendido em flow real de producao):
|
|
726
731
|
1. field SEMPRE com chaves: "{{contact.custom_attribute.plano}}", "{{minha_var}}", "{{last_response}}".
|
|
727
732
|
Sem chaves o motor compara o TEXTO LITERAL do caminho — a saida NUNCA casa (tudo cai no default).
|
|
728
|
-
2. Inclua "valueType": "variable" em CADA regra de expressao. O motor
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
"
|
|
732
|
-
|
|
733
|
+
2. Inclua "valueType": "variable" em CADA regra de expressao. O motor NAO le valueType; o EDITOR VISUAL
|
|
734
|
+
usa esse campo para escolher o seletor da regra. (Excecoes que nao usam field/valueType "variable":
|
|
735
|
+
regras por attr_key/attrSource -> valueType "attr_config" (NUNCA o tipo do dado, como "text");
|
|
736
|
+
business_hours -> "time_range"; kanban_exists/kanban_in_stage -> "funnel_stage"; kanban_won/lost/
|
|
737
|
+
snoozed -> "funnel_only"; conversation_has_label -> "labels_multi"; conversation_has_agent -> "agent";
|
|
738
|
+
conversation_no_agent / conversation_no_ai_agent / can_reply -> null (nunca ""); pagetrack_* ->
|
|
739
|
+
"pagetrack".) Desde 2026-11-14 a tela tambem reconhece a regra gravada com valueType vazio ou errado
|
|
740
|
+
(descobre pelo operador, pelo field e pelo attrSource) e salvar pela tela NAO apaga a regra — mas
|
|
741
|
+
mande o valueType certo: e ele que a tela usa primeiro.
|
|
733
742
|
EMPRESA DO CONTATO (NOVO 16/10 — card "Atributo da empresa", so com o modulo Empresas): regra
|
|
734
743
|
{ id, valueType:'attr_config', attrSource:'company', attr_key, operator, value:'', values:[...] }.
|
|
735
744
|
attr_key = chave do campo PERSONALIZADO da empresa OU cadastro com prefixo: company.name,
|
|
736
|
-
company.legal_name, company.cnpj (
|
|
745
|
+
company.legal_name, company.cnpj (letras e numeros, sem pontuacao), company.phone, company.email,
|
|
737
746
|
company.address.city, company.address.state. Empresa = a do contato da conversa (no maximo UMA).
|
|
738
747
|
Contato sem empresa = valor vazio (not_equal/is_empty casam). Modulo desligado = NUNCA casa, nem a
|
|
739
748
|
negativa. attrSource fora de contact/conversation/card/company NAO casa. Variaveis da empresa em
|
|
@@ -936,6 +945,17 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
936
945
|
PASSAGEM do bloco (repeticao do mesmo passo nao duplica). Freio de 1 tarefa por segundo por conta (passo com
|
|
937
946
|
vaga futura fica verde "nasce as HH:MM:SS"). Quem agendou = o Fluxo (booking_source 'fluxo'); o historico do
|
|
938
947
|
card diz "Fluxo X criou uma tarefa ..." / "Fluxo X nao criou a tarefa: motivo".
|
|
948
|
+
complete_account_task({}), cancel_account_task({}),
|
|
949
|
+
set_account_task_attendance({attendance:'attended'|'no_show'}) — NOVO 13/11/2026: operacoes sobre a
|
|
950
|
+
tarefa que o fluxo CRIOU (num passo create_account_task anterior do mesmo flow) ou sobre o
|
|
951
|
+
AGENDAMENTO que o disparou (trigger_booking_id) — NAO "qualquer tarefa da conversa". Mesma aba
|
|
952
|
+
Agenda e mesmo gate do create_account_task (exige a Agenda unificada; nao roda em ai_tool nem em
|
|
953
|
+
grupo). Reusam o motor do set_booking_situation: idempotente (ja no estado pedido = PULADO sem
|
|
954
|
+
escrita, sem laco); CANCELAR numa tarefa COM agendamento desarma o agendamento (lembrete + link),
|
|
955
|
+
igual ao 'cancelled' do set_booking_situation; marcar presenca grava Compareceu/Faltou. Sem tarefa
|
|
956
|
+
alvo = PULADO nomeando a operacao ("nenhuma tarefa deste fluxo para concluir"), nao erro. Marcar
|
|
957
|
+
presenca numa sessao de um PROGRAMA DE TRATAMENTO consome aquela sessao (igual ao painel; a ultima
|
|
958
|
+
sessao fecha o programa). Adiar + recorrencia/varios responsaveis/retorno do ID = fase 2 (ainda nao).
|
|
939
959
|
Sistema (SO flow conversation e flow action): send_webhook({url,headers?,body?}), start_flow({flow_id}
|
|
940
960
|
— flow_id tem que ser de OUTRO flow: apontar pro proprio flow e aceito no save, mas na execucao
|
|
941
961
|
o passo fica com ERRO visivel no historico (self_reference) e o fluxo para ali.
|
|
@@ -943,7 +963,10 @@ flow_data tem o formato Vue Flow: { nodes: [...], edges: [...] }.
|
|
|
943
963
|
caixa da conversa, a execucao e RECUSADA e o passo fica com ERRO no historico
|
|
944
964
|
(inbox_mismatch) — antes rodava no lugar errado em silencio. Flow-alvo do tipo 'action' e
|
|
945
965
|
SEMPRE aceito, de qualquer origem, porque nao pertence a caixa nenhuma.
|
|
946
|
-
Flow de IA (ai_tool) nunca pode ser alvo),
|
|
966
|
+
Flow de IA (ai_tool) nunca pode ser alvo), stop_flow({flow_id}) — NOVO 13/11: encerra a execucao
|
|
967
|
+
VIVA (ativa, esperando resposta ou pausada) do flow escolhido NESTA conversa, inclusive a parada numa
|
|
968
|
+
espera (o despertador nao a acorda mais); deixa pilula na conversa. Nada rodando = passo verde com
|
|
969
|
+
aviso; flow_id do PROPRIO flow ou de flow fora da conta = passo com ERRO. deactivate_flow({}),
|
|
947
970
|
send_conversion({destinations:['meta'|'ga4'|'google_ads'], event_names:{meta?,google_ads?,ga4?},
|
|
948
971
|
messaging_event_names:{meta?}, event_name, value?}) — NOVO 01/09, evento POR DESTINO desde 02/09,
|
|
949
972
|
evento de ANUNCIO DE WHATSAPP desde 10/09: manda o evento de conversao pro
|
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",
|
|
@@ -12468,7 +12586,7 @@
|
|
|
12468
12586
|
"method": "POST",
|
|
12469
12587
|
"path": "/api/v1/accounts/{account_id}/companies",
|
|
12470
12588
|
"title": "Criar Empresa",
|
|
12471
|
-
"description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. ENTERPRISE-only. Empresa so nasce assim (manual): o sistema nao cria empresa pelo dominio do e-mail dos contatos. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava
|
|
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.",
|
|
12472
12590
|
"category": "Empresas",
|
|
12473
12591
|
"params": [
|
|
12474
12592
|
{
|
|
@@ -12521,7 +12639,7 @@
|
|
|
12521
12639
|
"method": "PATCH",
|
|
12522
12640
|
"path": "/api/v1/accounts/{account_id}/companies/{id}",
|
|
12523
12641
|
"title": "Atualizar Empresa",
|
|
12524
|
-
"description": "Atualiza dados da empresa. Suporta atualizacao parcial (PATCH) — so campos enviados sao alterados. Campos suportados: name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava
|
|
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.",
|
|
12525
12643
|
"category": "Empresas",
|
|
12526
12644
|
"params": [
|
|
12527
12645
|
{
|
|
@@ -12631,7 +12749,7 @@
|
|
|
12631
12749
|
"method": "POST",
|
|
12632
12750
|
"path": "/api/v1/accounts/{account_id}/companies/filter",
|
|
12633
12751
|
"title": "Filtrar Empresas",
|
|
12634
|
-
"description": "[2026-11-11] Lista as empresas da conta que atendem as condicoes (aba Empresas > filtro). Mesmo formato do filtro de contatos: payload = lista de condicoes {attribute_key, filter_operator, values, query_operator ('and'/'or', a ultima sem), custom_attribute_type}. 25 por pagina; meta.total_count = total filtrado.\n\nCAMPOS: name (equal_to, not_equal_to, contains, does_not_contain); domain (site), legal_name (razao social), cnpj, phone, email, city, state (os quatro acima + is_present, is_not_present); contacts_count (equal_to, not_equal_to, is_greater_than, is_less_than; valor inteiro); created_at, last_activity_at (today, yesterday, last_days, days_ago, days_before com numero de dias; is_greater_than/is_less_than com data AAAA-MM-DD). Atributo personalizado da EMPRESA: custom_attribute_type 'company_attribute' + a chave do atributo (operadores pelo tipo: texto como os de texto; lista e sim/nao: equal_to/not_equal_to/is_present/is_not_present; numero/data/hora: + is_greater_than/is_less_than). Um atributo de empresa chamado city e OUTRO campo, nunca o endereco.\n\nREGRAS: texto sem maiuscula e sem acento ('sao paulo' acha 'São Paulo');
|
|
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: [...]}.",
|
|
12635
12753
|
"category": "Empresas",
|
|
12636
12754
|
"params": [
|
|
12637
12755
|
{
|
|
@@ -16997,7 +17115,7 @@
|
|
|
16997
17115
|
"method": "POST",
|
|
16998
17116
|
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/whatsapp_templates",
|
|
16999
17117
|
"title": "Criar Template WhatsApp",
|
|
17000
|
-
"description": "Cria um template de WhatsApp. SOMENTE Channel::Whatsapp (Cloud API) — WAHA/QR retorna 400. Exige Admin.",
|
|
17118
|
+
"description": "Cria um template de WhatsApp. SOMENTE Channel::Whatsapp (Cloud API) — WAHA/QR retorna 400. Exige Admin. COLCHETE NAO E VARIAVEL (14/11/2026): nunca escreva o nome do dado entre colchetes no texto (\"Ola, [Primeiro nome]\") — a Meta aprova como texto e o cliente recebe os colchetes escritos. A API recusa (422) colchete no corpo ou no cabecalho de texto. Se o texto do usuario tiver colchete (ou <nome>, {nome}), liste cada um, diga qual dado do sistema voce acha que e e PERGUNTE antes de criar; so depois troque por {{1}}, {{2}}... com example e variable_mapping. Sem dado do sistema que sirva, pergunte se e preenchido na hora do envio (sem mapping).",
|
|
17001
17119
|
"category": "Templates WhatsApp",
|
|
17002
17120
|
"params": [
|
|
17003
17121
|
{
|
|
@@ -17137,7 +17255,7 @@
|
|
|
17137
17255
|
"method": "POST",
|
|
17138
17256
|
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/whatsapp_templates/{id}",
|
|
17139
17257
|
"title": "Atualizar Template WhatsApp",
|
|
17140
|
-
"description": "Atualiza um template de WhatsApp. SOMENTE Channel::Whatsapp Cloud. REENVIA o modelo a Meta (status volta para revisao). Para mudar SO o variable_mapping de um modelo aprovado, use lionchat_inboxes_whatsapp_templates_update.",
|
|
17258
|
+
"description": "Atualiza um template de WhatsApp. SOMENTE Channel::Whatsapp Cloud. REENVIA o modelo a Meta (status volta para revisao). Para mudar SO o variable_mapping de um modelo aprovado, use lionchat_inboxes_whatsapp_templates_update. COLCHETE NAO E VARIAVEL (14/11/2026): nunca escreva o nome do dado entre colchetes no texto (\"Ola, [Primeiro nome]\") — a Meta aprova como texto e o cliente recebe os colchetes escritos. A API recusa (422) colchete no corpo ou no cabecalho de texto. Se o texto do usuario tiver colchete (ou <nome>, {nome}), liste cada um, diga qual dado do sistema voce acha que e e PERGUNTE antes de criar; so depois troque por {{1}}, {{2}}... com example e variable_mapping. Sem dado do sistema que sirva, pergunte se e preenchido na hora do envio (sem mapping).",
|
|
17141
17259
|
"category": "Templates WhatsApp",
|
|
17142
17260
|
"params": [
|
|
17143
17261
|
{
|
|
@@ -21694,7 +21812,7 @@
|
|
|
21694
21812
|
"method": "POST",
|
|
21695
21813
|
"path": "/api/v1/accounts/{account_id}/captain/documents/{id}/recrawl",
|
|
21696
21814
|
"title": "Re-indexar Documento",
|
|
21697
|
-
"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).",
|
|
21698
21816
|
"category": "Base de Conhecimento",
|
|
21699
21817
|
"params": [
|
|
21700
21818
|
{
|
|
@@ -21717,6 +21835,40 @@
|
|
|
21717
21835
|
"lionchat_captain_documents_destroy"
|
|
21718
21836
|
]
|
|
21719
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
|
+
},
|
|
21720
21872
|
{
|
|
21721
21873
|
"id": "lionchat_copilot_prompts_list",
|
|
21722
21874
|
"method": "GET",
|
|
@@ -24203,7 +24355,7 @@
|
|
|
24203
24355
|
"method": "GET",
|
|
24204
24356
|
"path": "/api/v1/accounts/{account_id}/flow_tools/{id}/executions",
|
|
24205
24357
|
"title": "Execuções da Ferramenta da IA",
|
|
24206
|
-
"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.",
|
|
24207
24359
|
"category": "Ferramentas da IA",
|
|
24208
24360
|
"params": [
|
|
24209
24361
|
{
|
|
@@ -24214,7 +24366,7 @@
|
|
|
24214
24366
|
"description": "ID do flow tool"
|
|
24215
24367
|
}
|
|
24216
24368
|
],
|
|
24217
|
-
"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 }]",
|
|
24218
24370
|
"common_use_cases": [
|
|
24219
24371
|
"Monitorar saúde da ferramenta",
|
|
24220
24372
|
"Achar execuções com falha"
|
|
@@ -24228,7 +24380,7 @@
|
|
|
24228
24380
|
"method": "GET",
|
|
24229
24381
|
"path": "/api/v1/accounts/{account_id}/flow_tool_executions/{id}",
|
|
24230
24382
|
"title": "Detalhe de Execução da Ferramenta",
|
|
24231
|
-
"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.",
|
|
24232
24384
|
"category": "Ferramentas da IA",
|
|
24233
24385
|
"params": [
|
|
24234
24386
|
{
|
|
@@ -24239,7 +24391,7 @@
|
|
|
24239
24391
|
"description": "ID da execução (FlowToolExecution)"
|
|
24240
24392
|
}
|
|
24241
24393
|
],
|
|
24242
|
-
"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 }",
|
|
24243
24395
|
"common_use_cases": [
|
|
24244
24396
|
"Depurar por que a ferramenta retornou errado pro LLM"
|
|
24245
24397
|
],
|
|
@@ -33827,7 +33979,7 @@
|
|
|
33827
33979
|
"method": "GET",
|
|
33828
33980
|
"path": "/api/v1/accounts/{account_id}/flow_sessions/{id}",
|
|
33829
33981
|
"title": "Detalhe de uma Execução de Flow (passo a passo)",
|
|
33830
|
-
"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.",
|
|
33831
33983
|
"category": "Flows",
|
|
33832
33984
|
"params": [
|
|
33833
33985
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionchat/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.38.1",
|
|
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",
|