@lionchat/mcp-server 1.6.0 → 1.7.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 +2 -1
- package/dist/docs/resources/best-practices.md +59 -1
- package/dist/docs/resources/data-model.md +16 -0
- package/dist/docs/resources/filtros-e-relatorios.md +2 -1
- package/dist/docs/resources/reports-guide.md +8 -0
- package/dist/docs/resources/troubleshooting.md +33 -0
- package/endpoints.json +120 -17
- package/package.json +1 -1
|
@@ -285,7 +285,7 @@ Antes de QUALQUER ação que escreve, modifica, apaga ou envia, pare e avalie se
|
|
|
285
285
|
|
|
286
286
|
**Sempre confirme em linguagem natural (resumindo o efeito) antes de executar quando:**
|
|
287
287
|
|
|
288
|
-
- **(a) A ação é destrutiva/irreversível** — qualquer `*_destroy`, `*_bulk_actions`, apagar contato (cascateia para as conversas dele), mudar status em massa.
|
|
288
|
+
- **(a) A ação é destrutiva/irreversível** — qualquer `*_destroy`, `*_bulk_actions`, apagar contato (cascateia para as conversas dele), mudar status em massa, cancelar reenvio de mensagem falhada (`*_cancel_retry`, `*_bulk_cancel` — a mensagem sai de todo reenvio pra sempre).
|
|
289
289
|
- **(b) Envia mensagem ao cliente final** — `lionchat_conversations_messages_create` com `message_type` outgoing, `*_scheduled_messages_*`, templates WhatsApp, campanhas/disparos.
|
|
290
290
|
- **(c) Altera config** — conta, inbox, funil, automação, IA Agente (`captain_assistants_update`).
|
|
291
291
|
- **(d) O pedido é ambíguo/incompleto** — falta ID, período, canal, destinatário, ou há mais de uma interpretação possível.
|
|
@@ -322,6 +322,7 @@ Antes de escolher a ferramenta, cheque se a intenção bate com a coluna da dire
|
|
|
322
322
|
| **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 |
|
|
323
323
|
| **Bloquear/desbloquear** contato | `lionchat_conversations_toggle_block` (`blocked: true|false`) | Gera pílula de atividade e descarta mensagens futuras do contato; NÃO resolve a conversa |
|
|
324
324
|
| **Importar histórico** de caixa WhatsApp Cloud (QR) | `lionchat_inboxes_whatsapp_history_start` / `_status` / `_cancel` | Admin-only + flag `qr_history_import`; só caixa oficial. Acompanhe `state` no `_status` |
|
|
325
|
+
| Ver / limpar **falhas de envio** de uma caixa | `lionchat_inboxes_failed_messages_summary` primeiro; depois `_bulk_retry` (reenviar) ou `_bulk_cancel` (descartar) | Admin-only. Reenvio em massa e cancelamento em massa são ações irreversíveis: mostre as contagens do summary e confirme (seção 7a/7b). Numa mensagem só: `lionchat_conversations_messages_create_1` (reenviar) / `lionchat_conversations_messages_cancel_retry` (cancelar) |
|
|
325
326
|
| **Definir supervisor** de caixa | `lionchat_inbox_members_create` / `_update` com `supervisor_ids[]` | Supervisor vê TUDO da caixa mas fica fora do rodízio (ver abaixo) |
|
|
326
327
|
| Qualquer coisa de Ligação WP (Wavoip) | **NÃO HÁ TOOL** — removidas em 2026-07-16 por decisão do dono | Ligação WP é contratada e configurada **manualmente pelo cliente no painel**. O MCP não conecta, não desconecta, não entrega token de discagem nem muda config. Oriente o usuário a fazer pelo painel (Configurações da caixa → Ligação WP). |
|
|
327
328
|
| 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 |
|
|
@@ -147,6 +147,12 @@ Dispara quando o CLIENTE fica inativo após resposta da IA. O motor de follow-up
|
|
|
147
147
|
**só-leitura** (não executa ferramentas, não coleta dado — só redige a mensagem de retomada,
|
|
148
148
|
com saída estruturada garantida). `paused=true` no assistente corta os follow-ups também.
|
|
149
149
|
|
|
150
|
+
**Corrigido em 2026-07-24:** quando a IA é ativada por um **Flow** (ação "Ativar IA") ou por uma
|
|
151
|
+
**automação**, o follow-up agora é agendado no ato da ativação. Antes, nesses dois caminhos a
|
|
152
|
+
cadência simplesmente nunca começava — a conversa ficava com IA ativa e sem nenhum follow-up. Se um
|
|
153
|
+
cliente relatar "a IA nunca faz o follow-up", confira primeiro se a ativação veio por flow/automação
|
|
154
|
+
e se a conta já está na versão de 24/07.
|
|
155
|
+
|
|
150
156
|
## Condições para NÃO fazer follow-up + horário de silêncio (2026-07)
|
|
151
157
|
|
|
152
158
|
`config.follow_up_skip_conditions` — array de até 3 condições (lógica OU: qualquer uma verdadeira
|
|
@@ -198,6 +204,11 @@ Como a coleta de dados/cenários funciona hoje (importante pra diagnosticar "IA
|
|
|
198
204
|
- Cenários são instruções inline no prompt (sem troca de personagem); o raciocínio do cenário
|
|
199
205
|
fica no "caderninho" da conversa (campo scenario_checklist, visível no card Raciocínio).
|
|
200
206
|
- Sem AI Agente ativo na conversa = NENHUMA resposta de IA (motor V1 aposentado em 2026-06).
|
|
207
|
+
- **Corrigido em 2026-07-24:** a IA agora enxerga no prompt a lista de atributos personalizados
|
|
208
|
+
definidos de **Conversa** e de **Card do Kanban** (antes só a de Contato chegava, e mesmo essa em
|
|
209
|
+
parte) — por isso ela conseguia gravar atributo de contato mas "não funcionava" pra conversa/card.
|
|
210
|
+
Regra prática que continua valendo: só dá pra a IA preencher atributo que **existe cadastrado**
|
|
211
|
+
(`custom_attributes_create`) no modelo certo — conversa, contato ou card.
|
|
201
212
|
|
|
202
213
|
## Cenários com parâmetro fixo e execução determinística (2026-06)
|
|
203
214
|
|
|
@@ -309,7 +320,9 @@ criar a campanha e mostre a contagem ao usuário — estimativa e disparo usam o
|
|
|
309
320
|
## Variáveis de conta (account_variables)
|
|
310
321
|
|
|
311
322
|
Pra dados fixos que se repetem (slogans, endereços, horários):
|
|
312
|
-
- `account_variables_create` UMA vez — campos: `attribute_display_name` (rótulo), `attribute_key` (a chave usada no `{{ }}`), `attribute_display_type
|
|
323
|
+
- `account_variables_create` UMA vez — campos: `attribute_display_name` (rótulo), `attribute_key` (a chave usada no `{{ }}`), `attribute_display_type`, `value`. Admin-only.
|
|
324
|
+
- Tipos oferecidos na tela (2026-07-25): **Texto** (`text`), **Data** (`date`), **Hora** (`time`) e **Confidencial** (`secret`). Data e Hora gravam o valor já normalizado (`AAAA-MM-DD` e `HH:MM` em 24h) — antes a tela só tinha Texto e a data entrava como texto solto, sem validar formato. Os demais tipos do enum (`number`, `list`, `link`, `checkbox`, `currency`, `percent`, `datetime`) funcionam pela API, mas a tela os edita como texto.
|
|
325
|
+
- O **tipo e a chave não mudam depois de criados** — `account_variables_update` só altera rótulo, descrição e valor. Pra trocar o tipo, apague e crie de novo.
|
|
313
326
|
- Use em templates com a sintaxe COMPLETA `{{ account.custom_attribute.<attribute_key> }}` (ex: `{{ account.custom_attribute.slogan }}`). NÃO existe atalho `{{slogan}}` solto — sem o prefixo `account.custom_attribute.` não resolve.
|
|
314
327
|
- Resolve em: mensagens, respostas prontas, campanhas e automações. NÃO resolve nas instruções do AI Agente (base/cenário) — ali só `contact.*` e `conversation.*`.
|
|
315
328
|
- `secret` nunca aparece em template (sai vazio); só resolve em nós API Request do FlowBuilder.
|
|
@@ -360,6 +373,9 @@ Endereço: {% assign chave = "endereco_" | append: contact.custom_attribute.unid
|
|
|
360
373
|
nas instruções do AI Agente.
|
|
361
374
|
- Se a chave montada não existir, o `{% echo %}` sai vazio (sem erro). Teste com um contato
|
|
362
375
|
de cada valor da lista antes de entregar.
|
|
376
|
+
- Botão com link (CTA) da resposta pronta/flow: a URL do botão aceita variáveis
|
|
377
|
+
(`{{contact.name}}`, `{{contact.phone}}`, atributo etc.) — cada valor é codificado
|
|
378
|
+
automaticamente (espaço vira `%20`), então o link nunca quebra. Útil pra rastrear cliques.
|
|
363
379
|
|
|
364
380
|
### Padrão geral (serve pra qualquer caso)
|
|
365
381
|
|
|
@@ -410,6 +426,48 @@ Fontes/campos disponíveis (`source` / `field`):
|
|
|
410
426
|
Lembrete: todo template recém-criado pelo MCP só mostra o texto na tela depois de **sincronizar**
|
|
411
427
|
(o MCP cria na Meta, mas o "puxar de volta" o conteúdo é o que a tela faz com o botão Sincronizar).
|
|
412
428
|
|
|
429
|
+
### Botão de link do template com variável — link rastreável por cliente (2026-07-25)
|
|
430
|
+
|
|
431
|
+
O botão de URL do template pode terminar com uma variável, pra montar um link diferente por contato
|
|
432
|
+
(rastrear cliques, pré-preencher formulário, etc).
|
|
433
|
+
|
|
434
|
+
Regras da Meta (o template é recusado na hora se furar qualquer uma):
|
|
435
|
+
|
|
436
|
+
- No máximo **UMA** variável no botão, e ela é sempre `{{1}}`.
|
|
437
|
+
- `{{1}}` só pode ficar **no FINAL** da URL, com base `https://` fixa antes.
|
|
438
|
+
- O componente `BUTTONS` precisa mandar `example` com a URL completa de exemplo (sem ele, erro 100).
|
|
439
|
+
|
|
440
|
+
E o `variable_mapping` recebe a chave especial `_button_url` (com underscore na frente de propósito:
|
|
441
|
+
ela **não** conta como variável de corpo):
|
|
442
|
+
|
|
443
|
+
```json
|
|
444
|
+
{
|
|
445
|
+
"components": [
|
|
446
|
+
{ "type": "BODY", "text": "Olá {{1}}, sua proposta está pronta." ,
|
|
447
|
+
"example": { "body_text": [["Maria"]] } },
|
|
448
|
+
{ "type": "BUTTONS", "buttons": [
|
|
449
|
+
{ "type": "URL", "text": "Ver proposta",
|
|
450
|
+
"url": "https://minhaempresa.com.br/proposta?cliente={{1}}",
|
|
451
|
+
"example": ["https://minhaempresa.com.br/proposta?cliente=Maria Silva"] }
|
|
452
|
+
] }
|
|
453
|
+
],
|
|
454
|
+
"variable_mapping": {
|
|
455
|
+
"1": { "source": "contact", "field": "name.split.first", "label": "Primeiro nome" },
|
|
456
|
+
"_button_url": { "source": "contact", "field": "name", "label": "Nome completo",
|
|
457
|
+
"example": "Maria Silva", "button_index": 0 }
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
- `button_index` = a **posição do botão** dentro do componente `BUTTONS` (0 = primeiro).
|
|
463
|
+
- `source`/`field` usam a mesma tabela de fontes acima, mais `custom` (texto fixo, escrito no `field`).
|
|
464
|
+
- No envio, o valor é **codificado automaticamente** (espaço vira `%20`) — o link nunca quebra.
|
|
465
|
+
- Vale em conversa, automação, flow, agendada e campanha (na campanha resolve por contato).
|
|
466
|
+
|
|
467
|
+
O mesmo vale pro **botão de link (CTA)** de resposta pronta e do FlowBuilder: a URL aceita
|
|
468
|
+
`{{contact.name}}`, `{{contact.phone}}`, atributo personalizado etc., com a mesma codificação
|
|
469
|
+
automática. Ver a seção de variáveis de conta acima.
|
|
470
|
+
|
|
413
471
|
## FlowBuilder — notas de editor (2026-07)
|
|
414
472
|
|
|
415
473
|
- **Tipo de atributo `time` (Hora 24h):** ao criar custom attribute com `attribute_display_type: "time"` (ou o numérico `9`), o valor canônico é `"HH:MM"` 24h e o fuso mora na definição (`attribute_timezone`, IANA, default `America/Sao_Paulo`). Uso principal: alimentar o campo Horário do node `wait` (modo date, `waitTimeMode: "variable"`).
|
|
@@ -408,6 +408,22 @@ Atributos de sistema no CONTATO (prefixo `eclinica_`, protegidos, usáveis como
|
|
|
408
408
|
| `eclinica_ultimo_pagamento` | text | Valor do último pagamento |
|
|
409
409
|
| `eclinica_ultimo_pagamento_data` | date | Data do último pagamento/baixa (novo 2026-07-06) |
|
|
410
410
|
| `eclinica_ultimo_pagamento_descricao` | text | Descrição da baixa (ex: CONSULTA INICIAL) |
|
|
411
|
+
| `eclinica_laboratorio_data_prevista` | date | Previsão de entrega da medicação (novo 2026-07-23) |
|
|
412
|
+
| `eclinica_laboratorio_data_moldagem` | date | Data do pedido da medicação |
|
|
413
|
+
| `eclinica_laboratorio_data_entrega` | date | Data de entrega da medicação |
|
|
414
|
+
| `eclinica_laboratorio_situacao` | text | Situação do pedido no laboratório |
|
|
415
|
+
| `eclinica_ultima_cobranca_valor` | text | Valor da última cobrança/carnê gerado |
|
|
416
|
+
| `eclinica_ultima_cobranca_vencimento` | date | Vencimento da última cobrança |
|
|
417
|
+
| `eclinica_ultima_cobranca_descricao` | text | Descrição da última cobrança |
|
|
418
|
+
|
|
419
|
+
**Lembretes automáticos (Integrações > e-Clínica > Lembretes).** Cada linha tem um **tipo de
|
|
420
|
+
evento** que decide de qual data a contagem parte: `agendamento` (data da consulta, padrão),
|
|
421
|
+
`controle_laboratorio_novo` (previsão de entrega da medicação) e `cliente_inclusao_pagamento`
|
|
422
|
+
(vencimento da cobrança). Desde 2026-07-25 cada linha exige também uma **hora do disparo** —
|
|
423
|
+
`HH:MM` fixo ou fórmula com variável de conta/contato (ex.: horário por unidade, ou a própria hora
|
|
424
|
+
da consulta) — em vez de herdar sempre o horário da consulta. Há ainda um filtro opcional
|
|
425
|
+
("Só quando") por atributo `eclinica_*` do contato. Nada disso é editável pelo MCP: só pelo painel.
|
|
426
|
+
Pra auditar o que foi/será disparado, use `lionchat_eclinica_reminder_history_list`.
|
|
411
427
|
|
|
412
428
|
## Relatórios e Métricas
|
|
413
429
|
|
|
@@ -26,7 +26,7 @@ E/OU é encadeado condição a condição (sem parênteses).
|
|
|
26
26
|
| `chat_type` (individual/group/channel/broadcast/status) | equal_to, not_equal_to |
|
|
27
27
|
| `priority` | equal_to, not_equal_to |
|
|
28
28
|
| `assignee_id` (atendente), `inbox_id`, `team_id`, `campaign_id`, `captain_assistant_id` (IA), `labels` | equal_to, not_equal_to, is_present, is_not_present |
|
|
29
|
-
| `display_id` | equal_to, not_equal_to, contains, does_not_contain |
|
|
29
|
+
| `display_id` | equal_to, not_equal_to, contains, does_not_contain (o `contains`, busca por trecho do número, passou a funcionar de verdade em 2026-07-25 — antes dava erro de banco) |
|
|
30
30
|
| `referer`, `mail_subject` | equal_to, not_equal_to, contains, does_not_contain |
|
|
31
31
|
| `browser_language`, `conversation_language` | equal_to, not_equal_to |
|
|
32
32
|
| `created_at`, `last_activity_at` (valor = data) | is_greater_than, is_less_than, days_before |
|
|
@@ -42,6 +42,7 @@ Mesmo shape de condição. 15/página.
|
|
|
42
42
|
|
|
43
43
|
| attribute_key | Operadores |
|
|
44
44
|
|---|---|
|
|
45
|
+
| `id` (id interno do contato) | equal_to, not_equal_to |
|
|
45
46
|
| `name`, `email`, `identifier`, `city`, `company`, `profession` | equal_to, not_equal_to, contains, does_not_contain |
|
|
46
47
|
| `phone_number` | + starts_with |
|
|
47
48
|
| `cpf`, `cnpj`, `rg` (cadastral) | equal_to, not_equal_to, contains, does_not_contain, is_present, is_not_present |
|
|
@@ -137,6 +137,10 @@ Retorna array de métricas, **uma por usuário da conta**. Campos confirmados (e
|
|
|
137
137
|
> - **CSAT por agente:** use `lionchat_csat_list` com filtro `user_ids=<id>` e calcule a média.
|
|
138
138
|
> - **Tempo online / status:** use `lionchat_agent_availability` ou os live_reports (`_16`/`_17`).
|
|
139
139
|
|
|
140
|
+
**Filtro por caixa (novo em 2026-07-24):** aceita `inbox_id` — o desempenho dos agentes DENTRO de
|
|
141
|
+
uma caixa específica. É exclusivo deste relatório; os resumos de time/caixa/etiqueta/canal
|
|
142
|
+
(`_1` a `_4`) NÃO aceitam `inbox_id`.
|
|
143
|
+
|
|
140
144
|
`_1` (time), `_2` (inbox), `_3` (label), `_4` (canal) seguem a mesma ideia de resumo agrupado,
|
|
141
145
|
trocando a chave de agrupamento.
|
|
142
146
|
|
|
@@ -175,6 +179,10 @@ Heatmap de volume por hora. Aceita SÓ `timezone_offset` (sem ele o pico sai em
|
|
|
175
179
|
São os live_reports (`conversation_metrics` e a versão agrupada). Use estes — e não os resumos
|
|
176
180
|
históricos — quando o usuário quiser o agora.
|
|
177
181
|
|
|
182
|
+
**Filtros aceitos (expostos na tool desde 2026-07-24):** `inbox_id`, `assignee_id` e `team_id`,
|
|
183
|
+
todos opcionais e combináveis — é o mesmo recorte da tela Visão Geral. Em `_17` o `group_by`
|
|
184
|
+
(`team_id` ou `assignee_id`) continua obrigatório e os filtros recortam a base ANTES de agrupar.
|
|
185
|
+
|
|
178
186
|
### `lionchat_csat_metrics` — CSAT agregado
|
|
179
187
|
**Use quando:** "satisfação", "nota média dos clientes", "CSAT"
|
|
180
188
|
|
|
@@ -265,6 +265,39 @@ Participantes continuam vendo a conversa, mas não recebem sino/push a cada mens
|
|
|
265
265
|
alguém específico, use @menção em nota interna (que notifica pelo caminho próprio; a lista de quem
|
|
266
266
|
pode ser mencionado vem de `lionchat_conversations_mentionable_users`).
|
|
267
267
|
|
|
268
|
+
### "Mandei reenviar a mensagem falhada e voltou 422" (25/07)
|
|
269
|
+
Não é bug: mensagem **cancelada** ou **excluída** nunca reenvia. O bloqueio é na fonte e vale pros
|
|
270
|
+
três caminhos — botão da bolha (`lionchat_conversations_messages_create_1`), reenvio em lote
|
|
271
|
+
(`lionchat_inboxes_failed_messages_bulk_retry`) e a auto-recuperação do WAHA. Se o usuário quer
|
|
272
|
+
mesmo mandar de novo, o caminho é escrever uma mensagem nova.
|
|
273
|
+
|
|
274
|
+
### "A falha sumiu do painel" / "apareceu um grupo Excluídas" (25/07)
|
|
275
|
+
Dois comportamentos novos e propositais no painel Falhas de envio
|
|
276
|
+
(`lionchat_inboxes_failed_messages_summary`):
|
|
277
|
+
- **Cancelada** (`cancel_retry` / `bulk_cancel`) some do painel de vez — cancelar é limpar.
|
|
278
|
+
- **Excluída** NÃO some: vira o grupo informativo `deleted` (campo `deleted_count`), guardando
|
|
279
|
+
contato, horário e o **motivo original** da falha. É registro, então não tem botão de reenviar
|
|
280
|
+
nem de cancelar e fica fora de `retryable_count` e do `total`.
|
|
281
|
+
|
|
282
|
+
Cancelar vale pra TODOS os grupos (inclusive `permanent`, `window_expired`, `campaign` e `partial`,
|
|
283
|
+
que nunca seriam reenviados) — é assim que se limpa o painel. Ações irreversíveis: confirme com o
|
|
284
|
+
usuário e mostre as contagens do summary antes.
|
|
285
|
+
|
|
286
|
+
### "O Messenger parou de enviar / 'Invalid parameter'" (24/07)
|
|
287
|
+
Causa raiz do apagão de 22 a 24/07: a Meta **aposentou a message tag** que o sistema mandava em todo
|
|
288
|
+
envio de Messenger. Corrigido em 24/07. Agora o Messenger respeita a **janela de 24h** de verdade:
|
|
289
|
+
dentro da janela envia normal; passou de 24h da última mensagem do cliente, a Meta recusa — não é
|
|
290
|
+
falha do LionChat, é regra da plataforma. Não existe template de Messenger pra "reabrir" a janela
|
|
291
|
+
(isso é WhatsApp). Instagram nunca usou tag e não foi afetado.
|
|
292
|
+
|
|
293
|
+
### "A importação de histórico do WhatsApp (QR) parou no meio" (25/07)
|
|
294
|
+
A importação agora se recupera sozinha: se o servidor reiniciar no meio, ela fica `interrupted` e
|
|
295
|
+
**retoma de onde parou** (não baixa de novo o que já entrou) na próxima verificação. Estados
|
|
296
|
+
possíveis: `importing` (rodando), `interrupted` (caiu, vai retomar sozinha), `paused` (alguém pausou
|
|
297
|
+
pelo painel de suporte — só volta no botão Retomar), `cancelled` (encerrada de vez), `completed`.
|
|
298
|
+
Enquanto uma importação está viva, o repescador de mensagens da sessão fica fora do caminho, de
|
|
299
|
+
propósito. Pausar, retomar e cancelar são ações do painel de suporte — não existem no MCP.
|
|
300
|
+
|
|
268
301
|
### "Editei o evento no Google Calendar e não sincronizou"
|
|
269
302
|
Auto-cura desde 2026-06-09: o vigia horário re-arma o "watch" morto de conexões saudáveis
|
|
270
303
|
sozinho (sem reconectar a conta). Se persistir >1h, aí sim investigar a conexão
|
package/endpoints.json
CHANGED
|
@@ -698,7 +698,7 @@
|
|
|
698
698
|
"method": "POST",
|
|
699
699
|
"path": "/api/v1/accounts/{account_id}/contacts/filter",
|
|
700
700
|
"title": "Filtrar Contatos",
|
|
701
|
-
"description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422.",
|
|
701
|
+
"description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422. [2026-07-25] Nova chave id (id interno do contato, equal_to/not_equal_to) — serve pra exportar/checar UM contato especifico.",
|
|
702
702
|
"category": "Contatos",
|
|
703
703
|
"params": [
|
|
704
704
|
{
|
|
@@ -1426,7 +1426,7 @@
|
|
|
1426
1426
|
"method": "POST",
|
|
1427
1427
|
"path": "/api/v1/accounts/{account_id}/conversations/filter",
|
|
1428
1428
|
"title": "Filtrar Conversas",
|
|
1429
|
-
"description": "Filtra conversas com condicoes avancadas (payload de condicoes, mesmas da tela). Ordenacao fixa last_activity_at DESC, 25/pagina.\n\nCHAVES FILTRAVEIS (attribute_key -> operadores): status, chat_type, priority (equal_to/not_equal_to); assignee_id, inbox_id, team_id, campaign_id, captain_assistant_id, labels (equal_to/not_equal_to/is_present/is_not_present); display_id (equal_to/not_equal_to/contains/does_not_contain); created_at, last_activity_at (is_greater_than/is_less_than/days_before — valor de data); browser_language, conversation_language, referer, mail_subject; card_funnel_stage (conversa POR CARD do Kanban — valor 'funnel:<id>' ou 'stage:<id>:<chave_etapa>'); QUALQUER outra chave = atributo personalizado (use custom_attribute_type na condicao: 'conversation_attribute' ou 'contact_attribute').\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422 'Operador invalido' (ex: labels NAO aceita 'includes' — use equal_to).",
|
|
1429
|
+
"description": "Filtra conversas com condicoes avancadas (payload de condicoes, mesmas da tela). Ordenacao fixa last_activity_at DESC, 25/pagina.\n\nCHAVES FILTRAVEIS (attribute_key -> operadores): status, chat_type, priority (equal_to/not_equal_to); assignee_id, inbox_id, team_id, campaign_id, captain_assistant_id, labels (equal_to/not_equal_to/is_present/is_not_present); display_id (equal_to/not_equal_to/contains/does_not_contain); created_at, last_activity_at (is_greater_than/is_less_than/days_before — valor de data); browser_language, conversation_language, referer, mail_subject; card_funnel_stage (conversa POR CARD do Kanban — valor 'funnel:<id>' ou 'stage:<id>:<chave_etapa>'); QUALQUER outra chave = atributo personalizado (use custom_attribute_type na condicao: 'conversation_attribute' ou 'contact_attribute').\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422 'Operador invalido' (ex: labels NAO aceita 'includes' — use equal_to). [2026-07-25] O operador contains em display_id agora funciona de verdade (busca por trecho do numero da conversa; antes dava erro de banco).",
|
|
1430
1430
|
"category": "Conversas",
|
|
1431
1431
|
"params": [
|
|
1432
1432
|
{
|
|
@@ -2252,7 +2252,7 @@
|
|
|
2252
2252
|
"method": "POST",
|
|
2253
2253
|
"path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{id}/retry",
|
|
2254
2254
|
"title": "Reenviar Mensagem",
|
|
2255
|
-
"description": "[POST] Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id. [2026-07-24] Motor unico de reenvio: limpeza cirurgica de content_attributes (preserva vinculos de flow/automacao/comentario IG) + trava anti-duplicata por mensagem. Pra reenviar TODAS as falhadas de uma caixa de uma vez, use lionchat_inboxes_failed_messages_bulk_retry.",
|
|
2255
|
+
"description": "[POST] Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id. [2026-07-24] Motor unico de reenvio: limpeza cirurgica de content_attributes (preserva vinculos de flow/automacao/comentario IG) + trava anti-duplicata por mensagem. Pra reenviar TODAS as falhadas de uma caixa de uma vez, use lionchat_inboxes_failed_messages_bulk_retry. [2026-07-25] Mensagem cancelada ou excluida NAO reenvia — a chamada responde 422 com o motivo. Pra cancelar de vez o reenvio, use lionchat_conversations_messages_cancel_retry.",
|
|
2256
2256
|
"category": "Mensagens",
|
|
2257
2257
|
"params": [
|
|
2258
2258
|
{
|
|
@@ -2284,6 +2284,40 @@
|
|
|
2284
2284
|
"lionchat_inboxes_failed_messages_bulk_retry"
|
|
2285
2285
|
]
|
|
2286
2286
|
},
|
|
2287
|
+
{
|
|
2288
|
+
"id": "lionchat_conversations_messages_cancel_retry",
|
|
2289
|
+
"method": "POST",
|
|
2290
|
+
"path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{id}/cancel_retry",
|
|
2291
|
+
"title": "Cancelar Reenvio de Mensagem Falhada",
|
|
2292
|
+
"description": "[NOVO 2026-07-25] Cancela DE VEZ o reenvio de UMA mensagem que falhou: na conversa ela vira o selo cinza 'Envio cancelado', sai do painel Falhas de envio e fica FORA de TODO reenvio (botao da bolha, reenvio em lote e auto-recuperacao do WAHA). IRREVERSIVEL — sempre confirme com o usuario antes de chamar. Exige mensagem outgoing + status failed + nao-privada (qualquer outra coisa responde 400). Mesma permissao do reenvio (agente com acesso a conversa). Pra cancelar todas as falhadas de uma caixa de uma vez use lionchat_inboxes_failed_messages_bulk_cancel.",
|
|
2293
|
+
"category": "Mensagens",
|
|
2294
|
+
"params": [
|
|
2295
|
+
{
|
|
2296
|
+
"name": "conversation_id",
|
|
2297
|
+
"type": "integer",
|
|
2298
|
+
"location": "path",
|
|
2299
|
+
"required": true,
|
|
2300
|
+
"description": "Display ID da conversa"
|
|
2301
|
+
},
|
|
2302
|
+
{
|
|
2303
|
+
"name": "id",
|
|
2304
|
+
"type": "integer",
|
|
2305
|
+
"location": "path",
|
|
2306
|
+
"required": true,
|
|
2307
|
+
"description": "ID da mensagem falhada"
|
|
2308
|
+
}
|
|
2309
|
+
],
|
|
2310
|
+
"returns": "mensagem atualizada (retry_cancelled + retry_cancelled_at em content_attributes)",
|
|
2311
|
+
"common_use_cases": [
|
|
2312
|
+
"Desistir de reenviar uma mensagem que falhou",
|
|
2313
|
+
"Limpar uma falha antiga do painel sem mandar nada pro cliente"
|
|
2314
|
+
],
|
|
2315
|
+
"related_tools": [
|
|
2316
|
+
"lionchat_conversations_messages_create_1",
|
|
2317
|
+
"lionchat_inboxes_failed_messages_bulk_cancel",
|
|
2318
|
+
"lionchat_inboxes_failed_messages_summary"
|
|
2319
|
+
]
|
|
2320
|
+
},
|
|
2287
2321
|
{
|
|
2288
2322
|
"id": "lionchat_conversations_messages_create_2",
|
|
2289
2323
|
"method": "POST",
|
|
@@ -5180,7 +5214,7 @@
|
|
|
5180
5214
|
"method": "GET",
|
|
5181
5215
|
"path": "/api/v2/accounts/{account_id}/summary_reports/agent",
|
|
5182
5216
|
"title": "Relatorio por Agente",
|
|
5183
|
-
"description": "Relatório por agente — lista métricas (conversas atendidas, tempos médios, CSAT) por cada agente da conta no período. ⚠️ Tempos em SEGUNDOS.",
|
|
5217
|
+
"description": "Relatório por agente — lista métricas (conversas atendidas, tempos médios, CSAT) por cada agente da conta no período. ⚠️ Tempos em SEGUNDOS. [2026-07-24] Aceita inbox_id (opcional) pra ver o desempenho dos agentes DENTRO de uma caixa.",
|
|
5184
5218
|
"category": "Relatorios",
|
|
5185
5219
|
"params": [
|
|
5186
5220
|
{
|
|
@@ -5203,6 +5237,13 @@
|
|
|
5203
5237
|
"location": "query",
|
|
5204
5238
|
"required": false,
|
|
5205
5239
|
"description": "Considerar apenas horario comercial"
|
|
5240
|
+
},
|
|
5241
|
+
{
|
|
5242
|
+
"name": "inbox_id",
|
|
5243
|
+
"type": "integer",
|
|
5244
|
+
"location": "query",
|
|
5245
|
+
"required": false,
|
|
5246
|
+
"description": "Opcional (2026-07-24): so as conversas daquela caixa entram no calculo por agente. Exclusivo deste relatorio (os resumos de time/caixa/etiqueta/canal NAO aceitam)."
|
|
5206
5247
|
}
|
|
5207
5248
|
],
|
|
5208
5249
|
"returns": "Array por agente de { id, name, conversations_count, avg_first_response_time (seg), avg_reply_time (seg), avg_resolution_time (seg), resolved_count, csat_score_average }",
|
|
@@ -5822,7 +5863,7 @@
|
|
|
5822
5863
|
"method": "GET",
|
|
5823
5864
|
"path": "/api/v2/accounts/{account_id}/live_reports/conversation_metrics",
|
|
5824
5865
|
"title": "Metricas em Tempo Real",
|
|
5825
|
-
"description": "Metricas ao vivo de conversas (conversation_metrics). Filtro opcional team_id.",
|
|
5866
|
+
"description": "Metricas ao vivo de conversas (conversation_metrics). Filtro opcional team_id. [2026-07-24] Aceita tambem inbox_id e assignee_id (opcionais) — e o mesmo recorte da tela Visao Geral. Combinaveis com team_id.",
|
|
5826
5867
|
"category": "Relatorios",
|
|
5827
5868
|
"params": [
|
|
5828
5869
|
{
|
|
@@ -5831,6 +5872,20 @@
|
|
|
5831
5872
|
"location": "query",
|
|
5832
5873
|
"required": false,
|
|
5833
5874
|
"description": "Filtrar por time (opcional)"
|
|
5875
|
+
},
|
|
5876
|
+
{
|
|
5877
|
+
"name": "inbox_id",
|
|
5878
|
+
"type": "integer",
|
|
5879
|
+
"location": "query",
|
|
5880
|
+
"required": false,
|
|
5881
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UMA caixa de entrada."
|
|
5882
|
+
},
|
|
5883
|
+
{
|
|
5884
|
+
"name": "assignee_id",
|
|
5885
|
+
"type": "integer",
|
|
5886
|
+
"location": "query",
|
|
5887
|
+
"required": false,
|
|
5888
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UM atendente responsavel."
|
|
5834
5889
|
}
|
|
5835
5890
|
],
|
|
5836
5891
|
"returns": "{ open, unattended, unassigned, pending }",
|
|
@@ -5850,7 +5905,7 @@
|
|
|
5850
5905
|
"method": "GET",
|
|
5851
5906
|
"path": "/api/v2/accounts/{account_id}/live_reports/grouped_conversation_metrics",
|
|
5852
5907
|
"title": "Metricas Agrupadas em Tempo Real",
|
|
5853
|
-
"description": "Metricas ao vivo agrupadas. group_by OBRIGATORIO (team_id ou assignee_id).",
|
|
5908
|
+
"description": "Metricas ao vivo agrupadas. group_by OBRIGATORIO (team_id ou assignee_id). [2026-07-24] Aceita tambem inbox_id e assignee_id (opcionais) pra recortar a base antes do agrupamento.",
|
|
5854
5909
|
"category": "Relatorios",
|
|
5855
5910
|
"params": [
|
|
5856
5911
|
{
|
|
@@ -5866,6 +5921,20 @@
|
|
|
5866
5921
|
"location": "query",
|
|
5867
5922
|
"required": false,
|
|
5868
5923
|
"description": "Filtrar por time (opcional)"
|
|
5924
|
+
},
|
|
5925
|
+
{
|
|
5926
|
+
"name": "inbox_id",
|
|
5927
|
+
"type": "integer",
|
|
5928
|
+
"location": "query",
|
|
5929
|
+
"required": false,
|
|
5930
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UMA caixa de entrada."
|
|
5931
|
+
},
|
|
5932
|
+
{
|
|
5933
|
+
"name": "assignee_id",
|
|
5934
|
+
"type": "integer",
|
|
5935
|
+
"location": "query",
|
|
5936
|
+
"required": false,
|
|
5937
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UM atendente responsavel."
|
|
5869
5938
|
}
|
|
5870
5939
|
],
|
|
5871
5940
|
"returns": "array { open, unattended, unassigned, <group_id> } (sem meta)",
|
|
@@ -12885,7 +12954,7 @@
|
|
|
12885
12954
|
"type": "string",
|
|
12886
12955
|
"location": "body",
|
|
12887
12956
|
"required": false,
|
|
12888
|
-
"description": "Tipo do valor: text (
|
|
12957
|
+
"description": "Tipo do valor: text (padrao), date (data — grava normalizado AAAA-MM-DD), time (hora — grava normalizado HH:MM, formato 24h), secret (valor secreto, guardado criptografado), number, checkbox, list, link, currency, percent, datetime. A tela de Variaveis da Conta oferece Texto, Data, Hora e Confidencial (2026-07-25) com seletor nativo; os demais tipos funcionam pela API mas a tela os edita como texto. Apelido legado: encrypted_text e aceito e convertido para secret automaticamente. Tipo fora dessa lista retorna 422."
|
|
12889
12958
|
},
|
|
12890
12959
|
{
|
|
12891
12960
|
"name": "value",
|
|
@@ -12913,7 +12982,7 @@
|
|
|
12913
12982
|
"method": "PATCH",
|
|
12914
12983
|
"path": "/api/v1/accounts/{account_id}/account_variables/{id}",
|
|
12915
12984
|
"title": "Atualizar Variável",
|
|
12916
|
-
"description": "Atualiza valor de uma variável existente. Atualiza campos do variável de conta existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: value.",
|
|
12985
|
+
"description": "Atualiza valor de uma variável existente. Atualiza campos do variável de conta existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: value. O TIPO (attribute_display_type) e a CHAVE (attribute_key) NAO mudam depois de criados — pra trocar o tipo, apague a variavel e crie de novo.",
|
|
12917
12986
|
"category": "Variaveis da Conta",
|
|
12918
12987
|
"params": [
|
|
12919
12988
|
{
|
|
@@ -14978,7 +15047,7 @@
|
|
|
14978
15047
|
"type": "object",
|
|
14979
15048
|
"location": "body",
|
|
14980
15049
|
"required": false,
|
|
14981
|
-
"description": "Opcional. Mapeia variaveis {{N}} do corpo a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta, fica salvo localmente). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Variavel sem mapping continua manual (digitada no envio). Fontes/campos: contact/name (Nome completo), contact/name.split.first (Primeiro nome), contact/name.split[1..] (Sobrenome), contact/phone_number, contact/email, conversation/assignee.name (Atendente), conversation/team.name (Equipe), account/name, ou contact/custom_attributes.CHAVE para campo personalizado."
|
|
15050
|
+
"description": "Opcional. Mapeia variaveis {{N}} do corpo a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta, fica salvo localmente). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Variavel sem mapping continua manual (digitada no envio). Fontes/campos: contact/name (Nome completo), contact/name.split.first (Primeiro nome), contact/name.split[1..] (Sobrenome), contact/phone_number, contact/email, conversation/assignee.name (Atendente), conversation/team.name (Equipe), account/name, ou contact/custom_attributes.CHAVE para campo personalizado. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo."
|
|
14982
15051
|
}
|
|
14983
15052
|
],
|
|
14984
15053
|
"returns": "template WhatsApp criado (com novo ID)",
|
|
@@ -15104,7 +15173,7 @@
|
|
|
15104
15173
|
"type": "object",
|
|
15105
15174
|
"location": "body",
|
|
15106
15175
|
"required": false,
|
|
15107
|
-
"description": "Opcional. Mapeia variaveis {{N}} a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Mesmas fontes/campos do endpoint de criacao."
|
|
15176
|
+
"description": "Opcional. Mapeia variaveis {{N}} a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Mesmas fontes/campos do endpoint de criacao. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo."
|
|
15108
15177
|
}
|
|
15109
15178
|
],
|
|
15110
15179
|
"returns": "{ success: true }",
|
|
@@ -21118,7 +21187,7 @@
|
|
|
21118
21187
|
"method": "GET",
|
|
21119
21188
|
"path": "/api/v1/accounts/{account_id}/campaigns/{id}",
|
|
21120
21189
|
"title": "Detalhes da Campanha",
|
|
21121
|
-
"description": "Retorna uma campanha pelo display_id (o número visível na UI, não o id interno). Inclui audience, trigger_rules e template_params completos.",
|
|
21190
|
+
"description": "Retorna uma campanha pelo display_id (o número visível na UI, não o id interno). Inclui audience, trigger_rules e template_params completos. [2026-07-25] Campanha inexistente/apagada responde 404 limpo (antes dava erro 500).",
|
|
21122
21191
|
"category": "Campanhas",
|
|
21123
21192
|
"params": [
|
|
21124
21193
|
{
|
|
@@ -21231,7 +21300,7 @@
|
|
|
21231
21300
|
"method": "GET",
|
|
21232
21301
|
"path": "/api/v1/accounts/{account_id}/campaigns/{id}/statistics",
|
|
21233
21302
|
"title": "Estatísticas da Campanha",
|
|
21234
|
-
"description": "Métricas de entrega de campanha one-off: total, enviadas, entregues, lidas, falhas e taxas (%).",
|
|
21303
|
+
"description": "Métricas de entrega de campanha one-off: total, enviadas, entregues, lidas, falhas e taxas (%). [2026-07-25] Campanha inexistente/apagada responde 404 limpo (antes dava erro 500).",
|
|
21235
21304
|
"category": "Campanhas",
|
|
21236
21305
|
"params": [
|
|
21237
21306
|
{
|
|
@@ -21254,7 +21323,7 @@
|
|
|
21254
21323
|
"method": "POST",
|
|
21255
21324
|
"path": "/api/v1/accounts/{account_id}/campaigns/estimate_audience",
|
|
21256
21325
|
"title": "Estimar Audiência da Campanha",
|
|
21257
|
-
"description": "Conta quantos contatos COM TELEFONE atendem aos critérios ANTES de criar a campanha. Usa o MESMO motor do disparo (estimativa = lista real). SEMPRE chame antes de campaigns_create e mostre o número ao usuário.",
|
|
21326
|
+
"description": "Conta quantos contatos COM TELEFONE atendem aos critérios ANTES de criar a campanha. Usa o MESMO motor do disparo (estimativa = lista real). SEMPRE chame antes de campaigns_create e mostre o número ao usuário. [2026-07-25] audience e exclusion aceitam tanto lista quanto texto JSON de uma lista; qualquer outro formato responde 422 com a mensagem do erro (antes dava erro 500).",
|
|
21258
21327
|
"category": "Campanhas",
|
|
21259
21328
|
"params": [
|
|
21260
21329
|
{
|
|
@@ -22416,7 +22485,7 @@
|
|
|
22416
22485
|
"method": "GET",
|
|
22417
22486
|
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/summary",
|
|
22418
22487
|
"title": "Falhas de Envio da Caixa (painel)",
|
|
22419
|
-
"description": "[NOVO 2026-07-24] Painel 'Falhas de envio' da caixa: mensagens FALHADAS das ultimas 24h agrupadas por motivo — billing (falta de saldo/pagamento), transient (erro comum, reenviavel), window_expired (janela de 24h da API oficial fechou), permanent (erro definitivo) — + grupos informativos campaign (mensagem de campanha NUNCA reenvia por aqui) e partial (multi-anexo parcial, anti-duplicata). group_details traz ate 30 itens por grupo com contato, conversa, erro real e horario. Canais elegiveis: WAHA (QR), WhatsApp oficial e Messenger (Telegram/Instagram nao marcam failed). ADMIN-ONLY. Use antes do bulk_retry pra mostrar ao usuario O QUE falhou e quanto e reenviavel (retryable_count = billing + transient).",
|
|
22488
|
+
"description": "[NOVO 2026-07-24] Painel 'Falhas de envio' da caixa: mensagens FALHADAS das ultimas 24h agrupadas por motivo — billing (falta de saldo/pagamento), transient (erro comum, reenviavel), window_expired (janela de 24h da API oficial fechou), permanent (erro definitivo) — + grupos informativos campaign (mensagem de campanha NUNCA reenvia por aqui) e partial (multi-anexo parcial, anti-duplicata). group_details traz ate 30 itens por grupo com contato, conversa, erro real e horario. Canais elegiveis: WAHA (QR), WhatsApp oficial e Messenger (Telegram/Instagram nao marcam failed). ADMIN-ONLY. Use antes do bulk_retry pra mostrar ao usuario O QUE falhou e quanto e reenviavel (retryable_count = billing + transient). [ATUALIZADO 2026-07-25] Novo grupo informativo 'deleted' (Excluidas): mensagem falhada que o usuario APAGOU continua no painel como registro, com o motivo ORIGINAL da falha preservado e sem botao de reenviar/cancelar; vem tambem no campo deleted_count e fica FORA de retryable_count e do total. Mensagem CANCELADA (lionchat_conversations_messages_cancel_retry ou bulk_cancel) some do painel de vez.",
|
|
22420
22489
|
"category": "Caixas de Entrada",
|
|
22421
22490
|
"params": [
|
|
22422
22491
|
{
|
|
@@ -22444,7 +22513,7 @@
|
|
|
22444
22513
|
"method": "POST",
|
|
22445
22514
|
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/bulk_retry",
|
|
22446
22515
|
"title": "Reenvio em Massa das Falhadas",
|
|
22447
|
-
"description": "[NOVO 2026-07-24] Reenvia EM LOTE as mensagens falhadas REENVIAVEIS das ultimas 24h da caixa (grupos billing + transient do summary). Teto 500 por clique; cadencia anti-ban (WAHA 8s entre mensagens, demais 1s); trava de 1 lote por caixa (409 bulk_retry_running se ja houver lote rodando); cada mensagem e re-validada na hora do reenvio (ainda failed, sem source_id, sessao WAHA WORKING, janela 24h da oficial) e tem teto de 3 tentativas no erro comum. Mensagens de CAMPANHA e multi-anexo PARCIAL nunca entram (anti-duplicata). ADMIN-ONLY. Sempre chame o summary antes e mostre as contagens ao usuario; confirme antes de disparar (acao de envio em massa real).",
|
|
22516
|
+
"description": "[NOVO 2026-07-24] Reenvia EM LOTE as mensagens falhadas REENVIAVEIS das ultimas 24h da caixa (grupos billing + transient do summary). Teto 500 por clique; cadencia anti-ban (WAHA 8s entre mensagens, demais 1s); trava de 1 lote por caixa (409 bulk_retry_running se ja houver lote rodando); cada mensagem e re-validada na hora do reenvio (ainda failed, sem source_id, sessao WAHA WORKING, janela 24h da oficial) e tem teto de 3 tentativas no erro comum. Mensagens de CAMPANHA e multi-anexo PARCIAL nunca entram (anti-duplicata). ADMIN-ONLY. Sempre chame o summary antes e mostre as contagens ao usuario; confirme antes de disparar (acao de envio em massa real). [2026-07-25] Mensagem CANCELADA ou EXCLUIDA nunca entra no lote (bloqueio na fonte, vale tambem pro botao de reenvio e pra auto-recuperacao do WAHA). Pra descartar em vez de reenviar use lionchat_inboxes_failed_messages_bulk_cancel.",
|
|
22448
22517
|
"category": "Caixas de Entrada",
|
|
22449
22518
|
"params": [
|
|
22450
22519
|
{
|
|
@@ -22472,6 +22541,40 @@
|
|
|
22472
22541
|
"lionchat_conversations_messages_create_1"
|
|
22473
22542
|
]
|
|
22474
22543
|
},
|
|
22544
|
+
{
|
|
22545
|
+
"id": "lionchat_inboxes_failed_messages_bulk_cancel",
|
|
22546
|
+
"method": "POST",
|
|
22547
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/bulk_cancel",
|
|
22548
|
+
"title": "Cancelar Falhadas em Lote",
|
|
22549
|
+
"description": "[NOVO 2026-07-25] Cancela EM LOTE o reenvio das mensagens falhadas das ultimas 24h da caixa: elas somem do painel Falhas de envio e ficam fora de todo reenvio (botao, lote e auto-recuperacao do WAHA). Diferente do reenvio, cancelar vale pra TODOS os grupos — billing, transient, window_expired, permanent, campaign e partial — e e exatamente o jeito de limpar do painel o que nunca seria reenviado. Sincrono (sem job): responde {cancelled: N} na hora. Teto de 1000 por chamada. NAO mexe no grupo 'deleted' (Excluidas), que e registro permanente. IRREVERSIVEL e ADMIN-ONLY: chame lionchat_inboxes_failed_messages_summary antes, mostre as contagens ao usuario e confirme antes de disparar.",
|
|
22550
|
+
"category": "Caixas de Entrada",
|
|
22551
|
+
"params": [
|
|
22552
|
+
{
|
|
22553
|
+
"name": "inbox_id",
|
|
22554
|
+
"type": "integer",
|
|
22555
|
+
"location": "path",
|
|
22556
|
+
"required": true,
|
|
22557
|
+
"description": "ID da caixa de entrada"
|
|
22558
|
+
},
|
|
22559
|
+
{
|
|
22560
|
+
"name": "classification",
|
|
22561
|
+
"type": "string",
|
|
22562
|
+
"location": "body",
|
|
22563
|
+
"required": false,
|
|
22564
|
+
"description": "Opcional: restringe o cancelamento a UM grupo — 'billing', 'transient', 'window_expired', 'permanent', 'campaign' ou 'partial'. Ausente = cancela TODAS as falhadas da janela de 24h. Valor fora dessa lista responde 422 invalid_classification."
|
|
22565
|
+
}
|
|
22566
|
+
],
|
|
22567
|
+
"returns": "{cancelled: N} — quantidade de mensagens canceladas",
|
|
22568
|
+
"common_use_cases": [
|
|
22569
|
+
"Limpar o painel de falhas de envio de uma caixa",
|
|
22570
|
+
"Descartar em massa falhas que nunca serao reenviadas (janela fechada, erro definitivo)"
|
|
22571
|
+
],
|
|
22572
|
+
"related_tools": [
|
|
22573
|
+
"lionchat_inboxes_failed_messages_summary",
|
|
22574
|
+
"lionchat_inboxes_failed_messages_bulk_retry",
|
|
22575
|
+
"lionchat_conversations_messages_cancel_retry"
|
|
22576
|
+
]
|
|
22577
|
+
},
|
|
22475
22578
|
{
|
|
22476
22579
|
"id": "lionchat_internal_chat_rooms_list",
|
|
22477
22580
|
"method": "GET",
|
|
@@ -24504,7 +24607,7 @@
|
|
|
24504
24607
|
"method": "GET",
|
|
24505
24608
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations",
|
|
24506
24609
|
"title": "Listar Integração e-Clínica",
|
|
24507
|
-
"description": "Lista a integração e-Clínica da conta (no máximo 1 por conta) com id, status e configurações. Use PRIMEIRO para descobrir o {id} exigido pelas ferramentas de histórico de lembretes. Eventos mapeáveis incluem (23/07) os novos cliente_inclusao_pagamento ('Inclusão de cobrança' — cobrança/carnê criado, ainda não pago; grava eclinica_ultima_cobranca_valor/vencimento/descricao no contato) e controle_laboratorio_novo ('Controle de laboratório' — grava eclinica_laboratorio_data_prevista/data_moldagem/data_entrega/situacao). ATENÇÃO: o mapeamento evento→flow NÃO é editável via MCP (somente pelo painel).",
|
|
24610
|
+
"description": "Lista a integração e-Clínica da conta (no máximo 1 por conta) com id, status e configurações. Use PRIMEIRO para descobrir o {id} exigido pelas ferramentas de histórico de lembretes. Eventos mapeáveis incluem (23/07) os novos cliente_inclusao_pagamento ('Inclusão de cobrança' — cobrança/carnê criado, ainda não pago; grava eclinica_ultima_cobranca_valor/vencimento/descricao no contato) e controle_laboratorio_novo ('Controle de laboratório' — grava eclinica_laboratorio_data_prevista/data_moldagem/data_entrega/situacao). ATENÇÃO: o mapeamento evento→flow NÃO é editável via MCP (somente pelo painel). [2026-07-25] Cada linha de reminder_config traz agora event_type ('agendamento' padrao, 'controle_laboratorio_novo' para lembrete de laboratorio/medicacao, 'cliente_inclusao_pagamento' para lembrete de vencimento de cobranca), dispatch_time (hora do disparo, OBRIGATORIA: 'HH:MM' fixo ou formula Liquid com variavel de conta/contato) e o filtro opcional filter_field/filter_operator/filter_value. Os lembretes NAO sao editaveis via MCP — somente pelo painel (Integracoes > e-Clinica > Lembretes).",
|
|
24508
24611
|
"category": "Integracoes",
|
|
24509
24612
|
"params": [],
|
|
24510
24613
|
"returns": "200 {payload: {eclinica_integrations: [...]}}",
|
|
@@ -24521,7 +24624,7 @@
|
|
|
24521
24624
|
"method": "GET",
|
|
24522
24625
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations/{id}/reminder_history",
|
|
24523
24626
|
"title": "Histórico dos Lembretes e-Clínica",
|
|
24524
|
-
"description": "Lista os disparos de lembrete agendados da integração e-Clínica (novo 23/07) — responde 'o lembrete do paciente X saiu?'. Cada item traz status (pending aguardando | fired enviado | cancelled | skipped pulado + skip_reason | failed falhou + fail_reason), datas (created_at recebido, fire_at agendado, fired_at disparado, data_consulta), flow_name, contact_name, compromisso e unidade. Somente administrador.",
|
|
24627
|
+
"description": "Lista os disparos de lembrete agendados da integração e-Clínica (novo 23/07) — responde 'o lembrete do paciente X saiu?'. Cada item traz status (pending aguardando | fired enviado | cancelled | skipped pulado + skip_reason | failed falhou + fail_reason), datas (created_at recebido, fire_at agendado, fired_at disparado, data_consulta), flow_name, contact_name, compromisso e unidade. Somente administrador. [2026-07-25] O historico cobre os tres tipos de lembrete: consulta (conta a partir da data da consulta), laboratorio/medicacao (conta a partir da data prevista do laboratorio) e vencimento de cobranca (conta a partir do vencimento). O horario de cada disparo vem da 'Hora do disparo' configurada na linha do lembrete.",
|
|
24525
24628
|
"category": "Integracoes",
|
|
24526
24629
|
"params": [
|
|
24527
24630
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionchat/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.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",
|