@lionchat/mcp-server 1.16.0 → 1.18.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/resources/api-conventions.md +1 -1
- package/dist/docs/resources/data-model.md +10 -10
- package/dist/docs/resources/flowbuilder-design-guide.md +13 -1
- package/dist/docs/resources/reports-guide.md +66 -4
- package/dist/docs/resources/troubleshooting.md +62 -6
- package/dist/instructions.js +7 -0
- package/dist/instructions.js.map +1 -1
- package/endpoints.json +523 -24
- package/package.json +1 -1
|
@@ -101,7 +101,7 @@ Aceita: letras, números, underscore, hífen e ponto. Sem espaço. Convenção:
|
|
|
101
101
|
|
|
102
102
|
`+<código país><DDD><número>`. Brasil: `+5511999999999` (13 dígitos com 9). Sem espaços, sem parênteses, sem hífen.
|
|
103
103
|
|
|
104
|
-
WAHA tem endpoint `/integrations/waha/check_phone?phone=+55...` que retorna o número CORRIGIDO (especialmente útil pra fixar o 9º dígito BR).
|
|
104
|
+
WAHA tem endpoint `/integrations/waha/check_phone?phone=+55...` que retorna o número CORRIGIDO (especialmente útil pra fixar o 9º dígito BR). O valor de `phone` é sempre E.164 (`+55...`) — nunca um id interno `@lid` (o servidor WAHA 2026.8+ responde com `@lid`, e o sistema traduz pelo campo `pn`).
|
|
105
105
|
|
|
106
106
|
### `funnel.stages` — keys snake_case
|
|
107
107
|
|
|
@@ -376,7 +376,11 @@ db/schema.rb, tabela booking_event_types)
|
|
|
376
376
|
│ agente; 2026-08-19)
|
|
377
377
|
├── active / ask_email / ask_description
|
|
378
378
|
├── confirmation_* (mensagem de confirmação própria: enabled, inbox_id, channel_type,
|
|
379
|
-
│ template_name, blocks)
|
|
379
|
+
│ template_name, blocks). Variáveis nos textos de confirmação E de lembrete (interpolador único):
|
|
380
|
+
│ {{nome}} {{email}} {{telefone}} {{data}} {{horario}} {{dia_semana}} (NOVO 24/08 — dia por
|
|
381
|
+
│ extenso em pt: "terça-feira"; irmã do {{booking.weekday}} do FlowBuilder, mesma grafia)
|
|
382
|
+
│ {{tipo_evento}} {{titulo}} {{duracao}} {{agente}} {{descricao}} {{meet_link}}
|
|
383
|
+
│ {{link_cancelar}} {{link_remarcar}} {{horas_ate_evento}} {{horas_desde_evento}}
|
|
380
384
|
└── booking_availabilities (has_many — dias/horários; `booking_availabilities_attributes` no create)
|
|
381
385
|
|
|
382
386
|
Booking (agendamento confirmado — tabela bookings)
|
|
@@ -585,15 +589,11 @@ Gateways de pagamento (GuruWebhook, HotmartWebhook, KiwifyWebhook, EduzzWebhook,
|
|
|
585
589
|
MonetizzeWebhook, GreennWebhook, ContaAzulIntegration, OmieIntegration — tools
|
|
586
590
|
`lionchat_ecommerce_webhooks_*`, `conta_azul_integrations_*`, `omie_integrations_*`)
|
|
587
591
|
├── event_automation_mapping (jsonb) — uma entrada por evento do gateway:
|
|
588
|
-
│ { "<evento>": { automation_id, flow_id, first_purchase_only
|
|
589
|
-
│
|
|
590
|
-
│ (
|
|
591
|
-
│ (
|
|
592
|
-
│
|
|
593
|
-
│ de pagamento: product_name, offer_name, invoice_url, purchase_price, payment_method,
|
|
594
|
-
│ purchase_email, pix_code, pix_qr_code_url, pix_expiration_date, ticket_hash_url, event_name,
|
|
595
|
-
│ event_date, charged_times, subscription_cycle, subscription_status, customer_document,
|
|
596
|
-
│ transaction_id, payment_installments, payment_source. Chave fora do catálogo é ignorada.
|
|
592
|
+
│ { "<evento>": { automation_id, flow_id, first_purchase_only } }
|
|
593
|
+
│ (Conta Azul/Omie usam `event_mapping`, por categoria).
|
|
594
|
+
│ ATENÇÃO (26/08/2026): `conversation_attribute_keys` foi REMOVIDA dos gateways de pagamento
|
|
595
|
+
│ (existiu de 21 a 26/08) — o backend IGNORA a chave se gravada. Atributo de conversa mapeado
|
|
596
|
+
│ continua existindo SÓ no Meta Lead e no Webhook Universal.
|
|
597
597
|
└── Leia o mapeamento atual antes de gravar: o `update` SUBSTITUI o jsonb INTEIRO (não mescla) —
|
|
598
598
|
mande todos os eventos de volta, senão os outros somem.
|
|
599
599
|
|
|
@@ -1005,7 +1005,7 @@ Presentes conforme o evento (ausente = resolve vazio, sem erro):
|
|
|
1005
1005
|
|---|---|
|
|
1006
1006
|
| `{{trigger.message.*}}` | `id`, `content` (texto da mensagem, cortado em 2.000 caracteres), `type`, `created_at` |
|
|
1007
1007
|
| `{{trigger.conversation.*}}` | `id` (o display_id), `status`, `channel` (nome amigável: `Waha`, `Whatsapp`, `Instagram`), `inbox_id`, `inbox_name`, `created_at` |
|
|
1008
|
-
| `{{trigger.contact.*}}` | `id`, `name`, `phone` |
|
|
1008
|
+
| `{{trigger.contact.*}}` | `id`, `name`, `phone`, `email` — desde 22/08/2026 resolvem em TODO gatilho (lidos do contato da sessão quando o evento não os trouxe) |
|
|
1009
1009
|
| `{{trigger.ad.*}}` (anúncio/CTWA) | `id`, `name`, `creative_id`, `creative_name`, `adset_id`, `adset_name`, `campaign_id`, `campaign_name`, `source`, `headline`, `description`, `cta`, `url` |
|
|
1010
1010
|
| `{{trigger.attribute.*}}` | `name`, `previous_value`, `current_value`, `changed_at` — o valor ANTES e DEPOIS do atributo que disparou (só nos gatilhos de mudança de atributo) |
|
|
1011
1011
|
| `{{trigger.user_name}}` | nome do usuário/atendente que disparou (gatilho manual ou botão do card) |
|
|
@@ -1015,6 +1015,8 @@ Presentes conforme o evento (ausente = resolve vazio, sem erro):
|
|
|
1015
1015
|
| `{{trigger.source_flow_id}}` / `{{trigger.source_flow_name}}` | id e nome do flow de origem (quando outro flow iniciou este, ex.: action `start_flow`) |
|
|
1016
1016
|
| `{{trigger.lead_form_id}}` / `{{trigger.response_id}}` / `{{trigger.kind}}` | formulário público: qual formulário, qual preenchimento e o tipo (`completed`/`milestone`/`abandoned`) |
|
|
1017
1017
|
| `{{trigger.kind}}` / `{{trigger.booking_id}}` / `{{trigger.event_type_id}}` | agendamento (Booking nativo): `created`/`cancelled`/`rescheduled`/`completed`, id da reserva e id do tipo |
|
|
1018
|
+
| `{{trigger.kind}}` em `webhook_received` | origem da integração: `meta_lead`, `payment`, `eclinica`, `eclinica_reminder`, `topsend` (22/08/2026). O `type` continua `webhook_received` |
|
|
1019
|
+
| `{{trigger.meta_lead_event_id}}` | id do evento do Meta Lead (só `kind=meta_lead`) |
|
|
1018
1020
|
|
|
1019
1021
|
Os cinco últimos são **novos 2026-08-07** e passam a aparecer no autocomplete de TODO bloco (ausente para
|
|
1020
1022
|
o gatilho que não os fornece = resolve vazio, sem erro).
|
|
@@ -1023,6 +1025,16 @@ Dois atalhos: `{{trigger}}` devolve o contexto INTEIRO em JSON e `{{trigger.data
|
|
|
1023
1025
|
sem os metadados — úteis pra jogar tudo dentro de um node `ai` ou `api`. Bloco (Hash/Array) inteiro
|
|
1024
1026
|
sai em JSON; valor simples sai cru.
|
|
1025
1027
|
|
|
1028
|
+
**O que o histórico mostra e NÃO é variável (22/08/2026).** O passo Início do histórico de execução
|
|
1029
|
+
passou a exibir, em todo gatilho, o contato (nome, telefone, e-mail), a conversa (número, canal, caixa)
|
|
1030
|
+
e os fatos do que disparou: etiqueta, responsável/equipe (ou "removido"), card (título, funil, etapa
|
|
1031
|
+
anterior → etapa), política de SLA, grupo, nome do formulário e do marco, anúncio/formulário/campanha
|
|
1032
|
+
do Meta Lead (+ as respostas, em bloco próprio), produto/oferta/meio de pagamento do gateway, evento/
|
|
1033
|
+
unidade/data/hora/compromisso da e-Clínica, tecla do TopSend, e os dados do agendamento. Esses fatos
|
|
1034
|
+
ficam numa área só-de-log (`_trigger_facts`) — **não existem como `{{trigger.*}}`** e não entram em
|
|
1035
|
+
`{{trigger.data}}`. Se o cliente precisar de um deles no fluxo, use a variável de origem quando
|
|
1036
|
+
existir (`{{booking.*}}`, `{{form_*}}`, `{{contact.*}}`, atributos do contato gravados pela integração).
|
|
1037
|
+
|
|
1026
1038
|
**NÃO duplique o que já tem variável própria.** `{{contact.name}}`, `{{conversation.status}}`,
|
|
1027
1039
|
`{{inbox.name}}` e os atributos `ctwa_*` continuam existindo e são a forma canônica. O `{{trigger.*}}`
|
|
1028
1040
|
serve pra perguntar "o que veio COM o gatilho", não pra ser um segundo nome do mesmo dado.
|
|
@@ -571,7 +571,7 @@ Não é consulta livre: escolha um `widget_type` e preencha **só os campos daqu
|
|
|
571
571
|
| `sla_summary` | `time_range` | `sla` (Enterprise) |
|
|
572
572
|
| `funnel_stages` | `funnel_id` · `date_basis` (created/moved/closed/any) · `status` (all/open/won/lost) · `measure` (count padrão / value = soma do valor dos cards) · `time_range` | `kanban_board` |
|
|
573
573
|
| `stage_entries` | `funnel_id` · `measure` (count/value) · `time_range` — quantos cards DISTINTOS ENTRARAM em cada etapa no período (histórico desde 12/07/2026) | `kanban_board` |
|
|
574
|
-
| `calls_report` | `dimension` (agent/inbox) · `time_range` — ligações / atendidas / não atendidas / não concluídas / tempo total / tempo médio | — |
|
|
574
|
+
| `calls_report` | `dimension` (agent/inbox) · `scope_type` (só `inbox`, opcional — recorte por caixa, desde 27/08/2026) + `scope_id` · `time_range` — ligações / atendidas / não atendidas / não concluídas / tempo total / tempo médio | — |
|
|
575
575
|
| `lead_origin` | `time_range` | `liontrack` |
|
|
576
576
|
| `agent_report` | `dimension` (agent/team/inbox) · `scope_type`+`scope_id` · `columns[]` · `time_range` | — |
|
|
577
577
|
|
|
@@ -605,9 +605,14 @@ IDs de etiqueta**, nunca nome de métrica).
|
|
|
605
605
|
|
|
606
606
|
### Armadilhas que fazem o bloco sair errado
|
|
607
607
|
|
|
608
|
-
1. **`scope_type`/`scope_id` têm sentido
|
|
609
|
-
|
|
610
|
-
|
|
608
|
+
1. **`scope_type`/`scope_id` têm sentido DIFERENTE por tipo — e, no `agent_report`, por VALOR
|
|
609
|
+
(desde 27/08/2026).** No `conversations_timeseries` = "o gráfico é só daquela entidade". No
|
|
610
|
+
`agent_report`: `team`/`agent` = "mostre só as linhas de quem é dessa equipe/agente" (contando o
|
|
611
|
+
trabalho da pessoa na conta INTEIRA); `inbox` = recorte de CAIXA (membros da caixa, contando SÓ
|
|
612
|
+
o que fizeram naquela caixa — é o desenho de "relatório por médico/unidade"). `inbox` +
|
|
613
|
+
`dimension: team` é RECUSADO com motivo. No `calls_report`, `scope_type: inbox` conta só as
|
|
614
|
+
ligações daquela caixa — **ligação sem caixa fica de fora** (VTCall ~90% e Zenvia 100% das
|
|
615
|
+
ligações não têm caixa; LionCalls e Wavoip têm em 100%). Confundir troca a conta inteira.
|
|
611
616
|
2. **Campo fora da lista é descartado em silêncio.** Se um valor "não fez efeito", provavelmente o
|
|
612
617
|
nome do campo está errado.
|
|
613
618
|
3. **Sempre envie `timezone_offset` em HORAS, derivado do fuso DA CONTA** (`account_show.timezone`;
|
|
@@ -712,3 +717,60 @@ Combinado com `status: 'won'` + `date_basis: 'closed'`, dá o faturamento ganho
|
|
|
712
717
|
|
|
713
718
|
**Cuidado ao escrever**: se os cards do cliente têm valor padrão (todos com o mesmo número), a soma
|
|
714
719
|
não é faturamento — é o padrão multiplicado. Se todos os valores forem idênticos, desconfie e diga.
|
|
720
|
+
|
|
721
|
+
## Avisos — o resumo diário nativo no WhatsApp (2026-08-27)
|
|
722
|
+
|
|
723
|
+
O caso da seção anterior ("me traz o relatório todo dia") virou **funcionalidade nativa**: a aba
|
|
724
|
+
**Relatórios > Avisos** manda, todo dia no horário escolhido, o resumo em texto de um relatório
|
|
725
|
+
personalizado num grupo/conversa de **WhatsApp QR**, com o texto escrito pela IA da conta. Ferramentas
|
|
726
|
+
`lionchat_report_alerts_*` (criar, editar, listar, excluir, enviar agora, histórico, prévia). Só
|
|
727
|
+
administrador; teto de 10 por conta.
|
|
728
|
+
|
|
729
|
+
### O fluxo seguro (aprendido em produção, 27/08)
|
|
730
|
+
|
|
731
|
+
1. **Crie DESLIGADO** (`enabled: false`) — aviso criado ligado DENTRO da janela do dia
|
|
732
|
+
(`send_hour` até +3h, fuso da conta) dispara no próximo tick de hora, e o grupo do cliente
|
|
733
|
+
recebe sem ninguém ter validado.
|
|
734
|
+
2. **Rode a prévia** (`report_alerts_preview` → token → `report_alerts_preview_status`): mesmo
|
|
735
|
+
motor do envio, sem mandar nada. Mostre o texto pra pessoa aprovar.
|
|
736
|
+
3. **Só então ligue** (`report_alerts_update` com `enabled: true`).
|
|
737
|
+
|
|
738
|
+
### Regras do texto (a IA do Aviso NÃO é a IA do chat)
|
|
739
|
+
|
|
740
|
+
- A conferência de números **reprova qualquer número que não exista no relatório** — a IA nunca
|
|
741
|
+
calcula, soma nem inventa percentual. Reprovou = sai o texto padrão do sistema (fiel, bloco a
|
|
742
|
+
bloco). **Percentual confiável = bloco `stage_conversion` no relatório** (o motor calcula).
|
|
743
|
+
- Prompt que pede pra **renomear/reorganizar seções já fez a IA trocar rótulos de números** (caso
|
|
744
|
+
real: "Novos leads: 9" com o número do bloco de atendentes). O prompt que funciona: *"mantenha os
|
|
745
|
+
títulos e TODOS os números exatamente como estão, não renomeie seções, não calcule nada, inclua
|
|
746
|
+
TODOS os blocos"*.
|
|
747
|
+
- Teto do texto: 60.000 caracteres (o do WhatsApp) — relatório inteiro cabe.
|
|
748
|
+
- A mensagem entra na conversa como **mensagem de sistema**: automações e fluxos ativos naquela
|
|
749
|
+
conversa reagem a ela; não conta como resposta de atendente, não mexe em SLA nem apaga o
|
|
750
|
+
"cliente aguardando".
|
|
751
|
+
|
|
752
|
+
### Diagnóstico ("o grupo não recebeu")
|
|
753
|
+
|
|
754
|
+
`report_alerts_deliveries` é o histórico (90 dias, texto congelado de cada envio):
|
|
755
|
+
`sent` = saiu, aguardando recibo · `confirmed` = **entregue com recibo do canal** (o selo verde só
|
|
756
|
+
existe com evidência) · `send_failed` = recusado (motivo em `error_message`; caixa desconectada é o
|
|
757
|
+
clássico) · `skipped_late` = não saiu no horário (janela de 3h estourada; tenta amanhã) · `error` =
|
|
758
|
+
falhou antes do envio. `test_mode: true` = disparo manual. Na lista, `next_send_on` diz o próximo
|
|
759
|
+
envio previsto e `last_delivery_status`/`last_error` resumem o último.
|
|
760
|
+
|
|
761
|
+
### Bloco `stage_conversion` — percentual entre etapas (entra com o próximo deploy pós-27/08)
|
|
762
|
+
|
|
763
|
+
`widget_type: 'stage_conversion'`: conversão calculada PELO MOTOR — cards **distintos** que entraram
|
|
764
|
+
nas etapas de `numerator_stage_ids` ÷ os que entraram nas de `denominator_stage_ids`, na janela
|
|
765
|
+
(mesma fonte histórica do `stage_entries`). Ex. real: Consulta Agendada ÷ (Novos Leads + Agendamento
|
|
766
|
+
Pendente). Card que passou por duas etapas do denominador conta UMA vez (somar deflaria a taxa).
|
|
767
|
+
`chart_type: 'number'`; shape scalar (value = %, total = base; total 0 = "sem dados"). Os ids de
|
|
768
|
+
etapa são as CHAVES do hash `stages` do `lionchat_funnels_show`. Janela curta pode passar de 100%
|
|
769
|
+
(agendou hoje um lead que entrou ontem) — é verdade do dado, explique em vez de esconder.
|
|
770
|
+
|
|
771
|
+
### Recorte por caixa nos blocos de tabela (2026-08-26, já no ar)
|
|
772
|
+
|
|
773
|
+
Em `agent_report` e `calls_report`, `scope_type: 'inbox'` + `scope_id` recorta **de verdade** pela
|
|
774
|
+
caixa: membros da caixa contando SÓ o que fizeram nela (era o defeito dos relatórios por médico
|
|
775
|
+
saírem iguais). `'agent'`/`'team'` seguem sendo recorte de PESSOAS (trabalho na conta inteira);
|
|
776
|
+
`'inbox'` + `dimension: 'team'` é recusado. E `lead_origin` passou a respeitar `time_range`.
|
|
@@ -553,16 +553,19 @@ Se alguma anotação antiga disser que esse filtro mente por API, está errada.
|
|
|
553
553
|
verdade nos filtros: data FIXA com `is_greater_than`/`is_less_than` passou a cortar o dia no fuso
|
|
554
554
|
da CONTA (ver resource `filtros-e-relatorios`).
|
|
555
555
|
|
|
556
|
-
## "Mapeei o campo da integração pro atributo da conversa e nada foi gravado" (
|
|
556
|
+
## "Mapeei o campo da integração pro atributo da conversa e nada foi gravado" (Meta Lead / Webhook Universal)
|
|
557
557
|
|
|
558
|
-
|
|
558
|
+
ATENÇÃO (26/08/2026): atributo de conversa mapeado existe SÓ no Meta Lead e no Webhook Universal.
|
|
559
|
+
Nos 9 gateways de pagamento a opção "salvar também na conversa" foi REMOVIDA (existiu de 21 a
|
|
560
|
+
26/08) — o backend ignora `conversation_attribute_keys` se estiver gravada; os gateways gravam os
|
|
561
|
+
dados da compra automaticamente no CONTATO, como sempre.
|
|
562
|
+
|
|
563
|
+
Três causas, nesta ordem: (1) o evento não abriu conversa — atributo de conversa só existe na
|
|
559
564
|
conversa que a automação/fluxo mapeado cria (contato sozinho não tem onde gravar); (2) a chave é
|
|
560
565
|
reservada (`imported_from`, `type`, `captain_*`... — lista em `api-conventions`) e foi recusada;
|
|
561
566
|
(3) o valor não é do TIPO do atributo (texto num campo de Número, data em formato estranho) e foi
|
|
562
|
-
descartado — o log do servidor tem `[IntegrationAttributes] ... tipo_invalido=[...]
|
|
563
|
-
|
|
564
|
-
evento: "compra aprovada" e "carrinho abandonado" gravam listas diferentes). Gravar por integração é
|
|
565
|
-
silencioso: não espere automação nem webhook de saída reagindo ao atributo.
|
|
567
|
+
descartado — o log do servidor tem `[IntegrationAttributes] ... tipo_invalido=[...]`.
|
|
568
|
+
Gravar por integração é silencioso: não espere automação nem webhook de saída reagindo ao atributo.
|
|
566
569
|
|
|
567
570
|
## Quando reportar pro suporte
|
|
568
571
|
|
|
@@ -586,3 +589,56 @@ qualquer resposta que fique 125 s sem um byte (Proxy Read Timeout). Quem usa pel
|
|
|
586
589
|
abre esse canal e nunca vê isso.
|
|
587
590
|
Correção (v1.15.1): o servidor manda um `ping` a cada 30 s enquanto o canal está aberto.
|
|
588
591
|
Interruptor: `MCP_KEEPALIVE_INTERVAL_MS` (0 = desligado). Detalhe: `docs/plans/mcp-keepalive-cloudflare/`.
|
|
592
|
+
|
|
593
|
+
## "O grupo não recebeu o resumo diário" (Avisos de relatório) — 27/08
|
|
594
|
+
|
|
595
|
+
Diagnóstico em 2 passos: `lionchat_report_alerts_list` (colunas `last_delivery_status`/`last_error`
|
|
596
|
+
resumem o último dia; `next_send_on` diz o próximo) e `lionchat_report_alerts_deliveries` (histórico
|
|
597
|
+
de 90 dias com o TEXTO congelado de cada envio). Leitura dos status: `confirmed` = entregue COM
|
|
598
|
+
recibo do canal; `sent` = saiu e o recibo ainda não veio (reconfere sozinho em ~15 min); `send_failed`
|
|
599
|
+
= o canal recusou (motivo em `error_message` — caixa desconectada é o clássico: mande reconectar o
|
|
600
|
+
WhatsApp QR); `skipped_late` = não saiu na janela de 3h (sistema congestionado; tenta amanhã — não é
|
|
601
|
+
preciso fazer nada); `error` = falhou antes de enviar (ex.: 'conta suspensa', 'a conversa de destino
|
|
602
|
+
não existe mais', 'nenhum bloco do relatório pôde ser calculado'). Aviso criado hoje DEPOIS do
|
|
603
|
+
horário não dispara hoje (primeiro envio é amanhã) — não é defeito.
|
|
604
|
+
|
|
605
|
+
## "A prévia do Aviso fica em pending pra sempre" — 27/08
|
|
606
|
+
|
|
607
|
+
`report_alerts_preview_status` devolve `pending` enquanto o job (fila de baixa prioridade) não roda —
|
|
608
|
+
normalmente 5-60 s, até ~2-3 min com a plataforma cheia. Espere 5-10 s entre leituras; NUNCA dispare
|
|
609
|
+
outra prévia por impaciência (cada rodada com IA gasta a chave OpenAI da conta). O resultado expira
|
|
610
|
+
5 min depois de pronto: `pending` que virou `error: token inválido` = token errado/expirado, rode a
|
|
611
|
+
prévia de novo. Token tem 32 caracteres hex — confira que guardou o valor INTEIRO.
|
|
612
|
+
|
|
613
|
+
## "Mandei mensagem numa conversa cheia de histórico e a Meta recusou (131047)" — 26/08
|
|
614
|
+
|
|
615
|
+
Conversa que só tem mensagens IMPORTADAS de histórico NÃO tem janela de 24h aberta — para a Meta,
|
|
616
|
+
aquele contato nunca escreveu pela conexão oficial (a mensagem existe no painel porque a importação a
|
|
617
|
+
copiou do celular). O envio de texto livre é recusado mesmo com a fala do cliente visível na tela.
|
|
618
|
+
Saída: modelo aprovado (template) ou esperar o cliente escrever de verdade pela caixa oficial.
|
|
619
|
+
|
|
620
|
+
## "Adicionei etiqueta e as antigas sumiram" — CORRIGIDO em 24/08
|
|
621
|
+
|
|
622
|
+
Era defeito real (o segundo bloco "Adicionar etiqueta" do mesmo fluxo apagava as do primeiro, e
|
|
623
|
+
salvar status/prioridade apagava etiqueta posta por outro no meio do caminho). Hoje ADICIONAR SOMA,
|
|
624
|
+
em todos os caminhos (fluxo, IA, API, ações em massa). Se um cliente relatar isso em versão antiga
|
|
625
|
+
(whitelabel atrasado), é a versão — não oriente gambiarra de "reaplicar etiqueta".
|
|
626
|
+
|
|
627
|
+
## "Os leads do Meta chegam só com id de campanha, sem nome" — 25/08
|
|
628
|
+
|
|
629
|
+
Nome de campanha/conjunto/anúncio exige o **token de ANÚNCIOS** (é outro token, de CONTA — o login
|
|
630
|
+
da página não basta). Diagnóstico: `lionchat_meta_lead_validate_token` (sem corpo testa o salvo) diz
|
|
631
|
+
se o token é válido, de qual app e se alcança anúncio de verdade. Gravar/trocar:
|
|
632
|
+
`lionchat_meta_lead_ads_token` — ao gravar, o servidor reprocessa retroativamente os leads que
|
|
633
|
+
ficaram sem nome. E desde 25/08 o CONECTAR exige escolha: `meta_lead_create` com `page_ids` (sem
|
|
634
|
+
ele TODAS as páginas do login entram — caso real de 25 páginas numa conta); pra limpar excesso
|
|
635
|
+
antigo, `lionchat_meta_lead_bulk_destroy`.
|
|
636
|
+
|
|
637
|
+
## "Atualizei a chave da caixa oficial pelo update e ela parou de receber" — 26/08
|
|
638
|
+
|
|
639
|
+
`inboxes_update` com `channel.provider_config` SUBSTITUI o objeto inteiro: mandar só o campo
|
|
640
|
+
alterado APAGA `webhook_verify_token` e a marca `source` em silêncio — a caixa para de receber
|
|
641
|
+
webhook da Meta. Regra: leia a caixa antes (`inboxes_show`), reenvie o `provider_config` COMPLETO
|
|
642
|
+
com o campo trocado. Os três campos da conexão manual (`phone_number_id`, `business_account_id`,
|
|
643
|
+
`api_key`) são validados JUNTOS na Meta a cada gravação — 422 "Invalid Credentials" significa que
|
|
644
|
+
algum dos três está errado ou a chave venceu (não salve campo a campo).
|
package/dist/instructions.js
CHANGED
|
@@ -9,7 +9,14 @@ let cachedInstructions = null;
|
|
|
9
9
|
export function getServerInstructions() {
|
|
10
10
|
if (cachedInstructions !== null)
|
|
11
11
|
return cachedInstructions;
|
|
12
|
+
// AIDEV-NOTE: [manual-nao-chegava 31/08] A 1a entrada e a que VALE nos dois modos, porque
|
|
13
|
+
// docs/ e irmao do arquivo compilado: em producao __dirname=dist/ (achado: dist/docs/) e em
|
|
14
|
+
// desenvolvimento __dirname=src/ (achado: src/docs/). As duas seguintes apontam um nivel ACIMA
|
|
15
|
+
// e NUNCA existiram no pacote publicado — sem a 1a, o servidor caia no texto de reserva e a IA
|
|
16
|
+
// conectada nunca recebia o manual (medido ao vivo em 30/08: a instrucao entregue era so a
|
|
17
|
+
// frase curta abaixo). Ficam como rede pra layout futuro; nao remover a primeira.
|
|
12
18
|
const candidates = [
|
|
19
|
+
join(__dirname, 'docs/instructions.md'),
|
|
13
20
|
join(__dirname, '../docs/instructions.md'),
|
|
14
21
|
join(__dirname, '../../src/docs/instructions.md'),
|
|
15
22
|
];
|
package/dist/instructions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,yEAAyE;AACzE,uEAAuE;AAEvE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAE7C,MAAM,UAAU,qBAAqB;IACnC,IAAI,kBAAkB,KAAK,IAAI;QAAE,OAAO,kBAAkB,CAAC;IAE3D,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,gCAAgC,CAAC;KAClD,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,kBAAkB,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,oGAAoG,CAAC;IACvG,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../src/instructions.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,yEAAyE;AACzE,uEAAuE;AAEvE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAE7C,MAAM,UAAU,qBAAqB;IACnC,IAAI,kBAAkB,KAAK,IAAI;QAAE,OAAO,kBAAkB,CAAC;IAE3D,0FAA0F;IAC1F,4FAA4F;IAC5F,+FAA+F;IAC/F,+FAA+F;IAC/F,2FAA2F;IAC3F,kFAAkF;IAClF,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC;QACvC,IAAI,CAAC,SAAS,EAAE,yBAAyB,CAAC;QAC1C,IAAI,CAAC,SAAS,EAAE,gCAAgC,CAAC;KAClD,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,kBAAkB,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,oGAAoG,CAAC;IACvG,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
|
package/endpoints.json
CHANGED
|
@@ -9906,6 +9906,20 @@
|
|
|
9906
9906
|
"location": "body",
|
|
9907
9907
|
"required": false,
|
|
9908
9908
|
"description": "Cor hex (#RRGGBB) dos compromissos deste tipo no calendario (2026-08-19); vazio = cor do agente. A tarefa devolve booking_color ja resolvido."
|
|
9909
|
+
},
|
|
9910
|
+
{
|
|
9911
|
+
"name": "booking_event_type.confirmation_message",
|
|
9912
|
+
"type": "string",
|
|
9913
|
+
"location": "body",
|
|
9914
|
+
"required": false,
|
|
9915
|
+
"description": "Texto da mensagem de CONFIRMACAO enviada ao paciente quando o agendamento e criado. Aceita variaveis {{nome}}, {{titulo}}, {{data}}, {{horario}} e quebra de linha (\\n). Negrito do WhatsApp = *texto*."
|
|
9916
|
+
},
|
|
9917
|
+
{
|
|
9918
|
+
"name": "booking_event_type.follow_up_schedules_attributes",
|
|
9919
|
+
"type": "array",
|
|
9920
|
+
"location": "body",
|
|
9921
|
+
"required": false,
|
|
9922
|
+
"description": "Lembretes do agendamento (o bloco '1d antes do evento' da tela). Array de objetos: {id (obrigatorio para EDITAR o existente — sem id CRIA outro), offset_direction ('before'/'after'), offset_days, offset_hours, offset_minutes, message_body, blocks, active, position, _destroy}. IMPORTANTE: message_body E blocks[0].content precisam do MESMO texto — a tela le blocks e o envio usa message_body; gravar so um deixa a tela e a mensagem entregue diferentes. blocks = [{type:'text', content:'...'}]. Aceita variaveis {{titulo}}, {{data}}, {{horario}} e quebra de linha (\\n)."
|
|
9909
9923
|
}
|
|
9910
9924
|
],
|
|
9911
9925
|
"returns": "tipo de evento criado (com novo ID)",
|
|
@@ -9953,7 +9967,7 @@
|
|
|
9953
9967
|
"method": "PATCH",
|
|
9954
9968
|
"path": "/api/v1/accounts/{account_id}/booking_event_types/{id}",
|
|
9955
9969
|
"title": "Atualizar Tipo de Evento",
|
|
9956
|
-
"description": "Atualiza um tipo de evento de agendamento.
|
|
9970
|
+
"description": "Atualiza um tipo de evento de agendamento. Suporta atualizacao parcial (PATCH) — so campos enviados sao alterados. Alem de title/active/color/slug/user_id, aceita os TEXTOS que o paciente recebe: confirmation_message (confirmacao) e follow_up_schedules_attributes (lembretes).",
|
|
9957
9971
|
"category": "Tipos de Evento",
|
|
9958
9972
|
"params": [
|
|
9959
9973
|
{
|
|
@@ -9997,6 +10011,20 @@
|
|
|
9997
10011
|
"location": "body",
|
|
9998
10012
|
"required": false,
|
|
9999
10013
|
"description": "Cor hex (#RRGGBB) dos compromissos deste tipo no calendario (2026-08-19); vazio = cor do agente. A tarefa devolve booking_color ja resolvido."
|
|
10014
|
+
},
|
|
10015
|
+
{
|
|
10016
|
+
"name": "booking_event_type.confirmation_message",
|
|
10017
|
+
"type": "string",
|
|
10018
|
+
"location": "body",
|
|
10019
|
+
"required": false,
|
|
10020
|
+
"description": "Texto da mensagem de CONFIRMACAO enviada ao paciente quando o agendamento e criado. Aceita variaveis {{nome}}, {{titulo}}, {{data}}, {{horario}} e quebra de linha (\\n). Negrito do WhatsApp = *texto*."
|
|
10021
|
+
},
|
|
10022
|
+
{
|
|
10023
|
+
"name": "booking_event_type.follow_up_schedules_attributes",
|
|
10024
|
+
"type": "array",
|
|
10025
|
+
"location": "body",
|
|
10026
|
+
"required": false,
|
|
10027
|
+
"description": "Lembretes do agendamento (o bloco '1d antes do evento' da tela). Array de objetos: {id (obrigatorio para EDITAR o existente — sem id CRIA outro), offset_direction ('before'/'after'), offset_days, offset_hours, offset_minutes, message_body, blocks, active, position, _destroy}. IMPORTANTE: message_body E blocks[0].content precisam do MESMO texto — a tela le blocks e o envio usa message_body; gravar so um deixa a tela e a mensagem entregue diferentes. blocks = [{type:'text', content:'...'}]. Aceita variaveis {{titulo}}, {{data}}, {{horario}} e quebra de linha (\\n)."
|
|
10000
10028
|
}
|
|
10001
10029
|
],
|
|
10002
10030
|
"returns": "tipo de evento atualizado",
|
|
@@ -16574,7 +16602,7 @@
|
|
|
16574
16602
|
"type": "object",
|
|
16575
16603
|
"location": "body",
|
|
16576
16604
|
"required": false,
|
|
16577
|
-
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration).
|
|
16605
|
+
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
16578
16606
|
},
|
|
16579
16607
|
{
|
|
16580
16608
|
"name": "sample_payload",
|
|
@@ -16686,7 +16714,7 @@
|
|
|
16686
16714
|
"type": "object",
|
|
16687
16715
|
"location": "body",
|
|
16688
16716
|
"required": false,
|
|
16689
|
-
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration).
|
|
16717
|
+
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
16690
16718
|
},
|
|
16691
16719
|
{
|
|
16692
16720
|
"name": "sample_payload",
|
|
@@ -16881,7 +16909,7 @@
|
|
|
16881
16909
|
"type": "object",
|
|
16882
16910
|
"location": "body",
|
|
16883
16911
|
"required": false,
|
|
16884
|
-
"description": "Mapeamento de evento para automacao (dentro de guru_webhook).
|
|
16912
|
+
"description": "Mapeamento de evento para automacao (dentro de guru_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
16885
16913
|
}
|
|
16886
16914
|
],
|
|
16887
16915
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -16986,7 +17014,7 @@
|
|
|
16986
17014
|
"type": "object",
|
|
16987
17015
|
"location": "body",
|
|
16988
17016
|
"required": false,
|
|
16989
|
-
"description": "Mapeamento de evento para automacao (dentro de guru_webhook).
|
|
17017
|
+
"description": "Mapeamento de evento para automacao (dentro de guru_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
16990
17018
|
}
|
|
16991
17019
|
],
|
|
16992
17020
|
"returns": "webhook atualizado",
|
|
@@ -17195,7 +17223,7 @@
|
|
|
17195
17223
|
"type": "object",
|
|
17196
17224
|
"location": "body",
|
|
17197
17225
|
"required": false,
|
|
17198
|
-
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook).
|
|
17226
|
+
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17199
17227
|
}
|
|
17200
17228
|
],
|
|
17201
17229
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -17293,7 +17321,7 @@
|
|
|
17293
17321
|
"type": "object",
|
|
17294
17322
|
"location": "body",
|
|
17295
17323
|
"required": false,
|
|
17296
|
-
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook).
|
|
17324
|
+
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17297
17325
|
}
|
|
17298
17326
|
],
|
|
17299
17327
|
"returns": "webhook atualizado",
|
|
@@ -17502,7 +17530,7 @@
|
|
|
17502
17530
|
"type": "object",
|
|
17503
17531
|
"location": "body",
|
|
17504
17532
|
"required": false,
|
|
17505
|
-
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook).
|
|
17533
|
+
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17506
17534
|
}
|
|
17507
17535
|
],
|
|
17508
17536
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -17600,7 +17628,7 @@
|
|
|
17600
17628
|
"type": "object",
|
|
17601
17629
|
"location": "body",
|
|
17602
17630
|
"required": false,
|
|
17603
|
-
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook).
|
|
17631
|
+
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17604
17632
|
}
|
|
17605
17633
|
],
|
|
17606
17634
|
"returns": "webhook atualizado",
|
|
@@ -17809,7 +17837,7 @@
|
|
|
17809
17837
|
"type": "object",
|
|
17810
17838
|
"location": "body",
|
|
17811
17839
|
"required": false,
|
|
17812
|
-
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook).
|
|
17840
|
+
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17813
17841
|
}
|
|
17814
17842
|
],
|
|
17815
17843
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -17907,7 +17935,7 @@
|
|
|
17907
17935
|
"type": "object",
|
|
17908
17936
|
"location": "body",
|
|
17909
17937
|
"required": false,
|
|
17910
|
-
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook).
|
|
17938
|
+
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17911
17939
|
}
|
|
17912
17940
|
],
|
|
17913
17941
|
"returns": "webhook atualizado",
|
|
@@ -18116,7 +18144,7 @@
|
|
|
18116
18144
|
"type": "object",
|
|
18117
18145
|
"location": "body",
|
|
18118
18146
|
"required": false,
|
|
18119
|
-
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook).
|
|
18147
|
+
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18120
18148
|
}
|
|
18121
18149
|
],
|
|
18122
18150
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -18214,7 +18242,7 @@
|
|
|
18214
18242
|
"type": "object",
|
|
18215
18243
|
"location": "body",
|
|
18216
18244
|
"required": false,
|
|
18217
|
-
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook).
|
|
18245
|
+
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18218
18246
|
}
|
|
18219
18247
|
],
|
|
18220
18248
|
"returns": "webhook atualizado",
|
|
@@ -18423,7 +18451,7 @@
|
|
|
18423
18451
|
"type": "object",
|
|
18424
18452
|
"location": "body",
|
|
18425
18453
|
"required": false,
|
|
18426
|
-
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook).
|
|
18454
|
+
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18427
18455
|
}
|
|
18428
18456
|
],
|
|
18429
18457
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -18521,7 +18549,7 @@
|
|
|
18521
18549
|
"type": "object",
|
|
18522
18550
|
"location": "body",
|
|
18523
18551
|
"required": false,
|
|
18524
|
-
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook).
|
|
18552
|
+
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18525
18553
|
}
|
|
18526
18554
|
],
|
|
18527
18555
|
"returns": "webhook atualizado",
|
|
@@ -18687,7 +18715,7 @@
|
|
|
18687
18715
|
"method": "POST",
|
|
18688
18716
|
"path": "/api/v1/accounts/{account_id}/integrations/meta_lead",
|
|
18689
18717
|
"title": "Conectar Pagina Meta Lead Ads",
|
|
18690
|
-
"description": "Conecta o Meta Lead Ads. Obrigatorio: user_access_token (token de usuario — conecta todas as paginas acessiveis).",
|
|
18718
|
+
"description": "Conecta o Meta Lead Ads. Obrigatorio: user_access_token (token de usuario — conecta todas as paginas acessiveis). ESCOLHA DE PAGINAS (25/08): mande `page_ids` com as paginas marcadas — sem ele TODAS as paginas do login entram (comportamento legado). Pra limpar excesso ja conectado: meta_lead_bulk_destroy.",
|
|
18691
18719
|
"category": "Meta Lead Ads",
|
|
18692
18720
|
"params": [
|
|
18693
18721
|
{
|
|
@@ -18696,6 +18724,13 @@
|
|
|
18696
18724
|
"location": "body",
|
|
18697
18725
|
"required": true,
|
|
18698
18726
|
"description": "Token de usuario do Facebook (conecta todas as paginas acessiveis)"
|
|
18727
|
+
},
|
|
18728
|
+
{
|
|
18729
|
+
"name": "page_ids",
|
|
18730
|
+
"type": "array",
|
|
18731
|
+
"location": "body",
|
|
18732
|
+
"required": false,
|
|
18733
|
+
"description": "As paginas MARCADAS pelo cliente (ids de pagina do Facebook). DESDE 25/08 mandar so as escolhidas — ausente/vazio conecta TODAS as paginas do login (era o defeito antigo: 25 paginas entraram numa conta real). SEMPRE pergunte quais paginas antes de conectar."
|
|
18699
18734
|
}
|
|
18700
18735
|
],
|
|
18701
18736
|
"returns": "integração Meta Lead criado (com novo ID)",
|
|
@@ -24961,7 +24996,7 @@
|
|
|
24961
24996
|
"method": "GET",
|
|
24962
24997
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations",
|
|
24963
24998
|
"title": "Listar Integração e-Clínica",
|
|
24964
|
-
"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). Cada unidade em units[] traz tambem settings {} (18/08). O atributo eclinica_cor (cor da agenda, hex com #) virou campo fresco dos lembretes: filtravel por filter_field e disponivel como variavel {{cor}}.",
|
|
24999
|
+
"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). Cada unidade em units[] traz tambem settings {} (18/08). O atributo eclinica_cor (cor da agenda, hex com #) virou campo fresco dos lembretes: filtravel por filter_field e disponivel como variavel {{cor}}. LEMBRETE POR AUTOMACAO (25/08): cada entrada de reminder_config aceita `automation_id` alem do `flow_id` — pelo menos um dos dois (422 sem nenhum); com os DOIS preenchidos a AUTOMACAO vence no disparo. A automacao precisa ser da propria conta (422 senao). ALERTA de regra de negocio ao configurar: o caminho por automacao RODA AS ACOES SEM AVALIAR AS CONDICOES da automacao, e paciente com duas consultas no dia recebe DOIS lembretes (o caminho por fluxo descarta o segundo) — avise o cliente antes de trocar fluxo por automacao.",
|
|
24965
25000
|
"category": "Integracoes",
|
|
24966
25001
|
"params": [],
|
|
24967
25002
|
"returns": "200 {payload: {eclinica_integrations: [...]}}",
|
|
@@ -25344,7 +25379,7 @@
|
|
|
25344
25379
|
"method": "PATCH",
|
|
25345
25380
|
"path": "/api/v1/accounts/{account_id}/inboxes/{id}",
|
|
25346
25381
|
"title": "Atualizar Caixa de Entrada",
|
|
25347
|
-
"description": "Atualiza configurações da caixa (nome, saudação, atribuição automática, atributos extras). MUDANÇA DE CONFIG — confirme com o usuário antes. additional_attributes.mark_as_seen (bool, default true, SÓ WhatsApp oficial, 2026-06-11): envia o visto/check azul quando o agente abre a conversa — desligar em coexistência app+API. ATENÇÃO: enviar additional_attributes substitui o objeto; para WAHA prefira não mexer nesse campo (config sensível). Email (sincronizacao de mao dupla, admin, via objeto channel): two_way_sync_enabled, sync_sent, sync_deletions, sync_read, delete_strategy.",
|
|
25382
|
+
"description": "Atualiza configurações da caixa (nome, saudação, atribuição automática, atributos extras). MUDANÇA DE CONFIG — confirme com o usuário antes. additional_attributes.mark_as_seen (bool, default true, SÓ WhatsApp oficial, 2026-06-11): envia o visto/check azul quando o agente abre a conversa — desligar em coexistência app+API. ATENÇÃO: enviar additional_attributes substitui o objeto; para WAHA prefira não mexer nesse campo (config sensível). Email (sincronizacao de mao dupla, admin, via objeto channel): two_way_sync_enabled, sync_sent, sync_deletions, sync_read, delete_strategy. CAIXA OFICIAL CRIADA A MAO (26/08): channel.provider_config aceita phone_number_id, business_account_id e api_key — mas o objeto SUBSTITUI o salvo: SEMPRE mande o provider_config INTEIRO (leia o atual antes e reenvie tudo com o campo alterado), senao webhook_verify_token e a marca source sao APAGADOS em silencio e a caixa para de receber. Os 3 campos sao validados JUNTOS na Meta a cada gravacao (422 'Invalid Credentials' = algum dos tres errado ou chave vencida). O telefone da caixa e somente leitura.",
|
|
25348
25383
|
"category": "Caixas de Entrada",
|
|
25349
25384
|
"params": [
|
|
25350
25385
|
{
|
|
@@ -25573,7 +25608,7 @@
|
|
|
25573
25608
|
"method": "POST",
|
|
25574
25609
|
"path": "/api/v2/accounts/{account_id}/custom_dashboards/preview_widget",
|
|
25575
25610
|
"title": "Calcular Bloco na Hora (sem salvar)",
|
|
25576
|
-
"description": "[POST] Monta um bloco de relatorio NA HORA e devolve os numeros, SEM salvar nada. E a ferramenta pra responder pergunta de relatorio que nao tem grafico pronto — ex.: 'quantos cards foram GANHOS em cada etapa do funil X nos ultimos 30 dias' (funnel_stages + date_basis:closed + status:won). Nao existe consulta livre: escolha um `widget_type` e preencha SO os campos daquele tipo; o servidor revalida tudo antes de calcular. So administrador (401 caso contrario). Campo que nao esta na lista abaixo e DESCARTADO EM SILENCIO. Formato da resposta pelo campo `shape`: series {series:[{timestamp,value}]} (timestamp unix em segundos; metricas de tempo trazem tambem `count` por ponto) · categories {categories:[{label,value}]} (funnel_stages vem na ORDEM DAS ETAPAS, nunca por valor) · scalar {value,total,secondary} (use `total` pra separar 'ninguem respondeu' de 'zero legitimo'; SLA sem nenhum prazo aplicado devolve 100.0) · table {dimension,columns,rows,total} (o `total` NAO e a soma das linhas, e contagem propria por metrica). Erros: 401 = quem chamou NAO e administrador (nao mande reconectar o conector). 422 com {error} = desenho invalido ou recurso nao liberado (code:'feature_unavailable' distingue) — o motivo vem em texto, corrija e tente de novo. 422 com {message,attributes} = teto atingido (50 relatorios por conta, 12 blocos por relatorio). Tabela completa de tipos, metricas e armadilhas no resource lionchat://docs/reports-guide. TIPOS NOVOS (21/08): `calls_report` = tabela de LIGACOES (feitas, atendidas, nao atendidas, nao concluidas, tempo total e medio) por atendente (`dimension:'agent'`) ou por caixa (`dimension:'inbox'`); ligacao sem atendente ganha linha propria. `stage_entries` = quantos cards ENTRARAM em cada etapa de um funil no periodo, lido do historico de movimentacao — DIFERENTE de `funnel_stages`, que conta quem ESTA na etapa agora: card que entrou e depois saiu aparece no stage_entries e SOME do funnel_stages (medido: 25% de diferenca). Use stage_entries pra 'quantos agendamentos/negocios aconteceram' e funnel_stages pra 'como esta o funil hoje'. stage_entries conta CARD DISTINTO (card que reentra na etapa conta uma vez) e o historico so existe a partir de 12/07/2026, com retencao de 365 dias — periodo anterior devolve menos do que aconteceu. PARAM NOVO `measure` em funnel_stages e stage_entries: 'count' (padrao, conta cards) ou 'value' (soma o VALOR dos cards = faturamento). Com status:'won' + date_basis:'closed' + measure:'value' sai o faturamento ganho da etapa no periodo. PERIODOS NOVOS: 'today' e 'yesterday'. CAMPO NOVO `title` em cada bloco: o nome que aparece no cabecalho. Sem ele varios blocos do mesmo tipo saem com rotulos identicos e nem a pessoa nem o agente sabem qual e qual — SEMPRE nomeie.",
|
|
25611
|
+
"description": "[POST] Monta um bloco de relatorio NA HORA e devolve os numeros, SEM salvar nada. E a ferramenta pra responder pergunta de relatorio que nao tem grafico pronto — ex.: 'quantos cards foram GANHOS em cada etapa do funil X nos ultimos 30 dias' (funnel_stages + date_basis:closed + status:won). Nao existe consulta livre: escolha um `widget_type` e preencha SO os campos daquele tipo; o servidor revalida tudo antes de calcular. So administrador (401 caso contrario). Campo que nao esta na lista abaixo e DESCARTADO EM SILENCIO. Formato da resposta pelo campo `shape`: series {series:[{timestamp,value}]} (timestamp unix em segundos; metricas de tempo trazem tambem `count` por ponto) · categories {categories:[{label,value}]} (funnel_stages vem na ORDEM DAS ETAPAS, nunca por valor) · scalar {value,total,secondary} (use `total` pra separar 'ninguem respondeu' de 'zero legitimo'; SLA sem nenhum prazo aplicado devolve 100.0) · table {dimension,columns,rows,total} (o `total` NAO e a soma das linhas, e contagem propria por metrica). Erros: 401 = quem chamou NAO e administrador (nao mande reconectar o conector). 422 com {error} = desenho invalido ou recurso nao liberado (code:'feature_unavailable' distingue) — o motivo vem em texto, corrija e tente de novo. 422 com {message,attributes} = teto atingido (50 relatorios por conta, 12 blocos por relatorio). Tabela completa de tipos, metricas e armadilhas no resource lionchat://docs/reports-guide. TIPOS NOVOS (21/08): `calls_report` = tabela de LIGACOES (feitas, atendidas, nao atendidas, nao concluidas, tempo total e medio) por atendente (`dimension:'agent'`) ou por caixa (`dimension:'inbox'`); ligacao sem atendente ganha linha propria. `stage_entries` = quantos cards ENTRARAM em cada etapa de um funil no periodo, lido do historico de movimentacao — DIFERENTE de `funnel_stages`, que conta quem ESTA na etapa agora: card que entrou e depois saiu aparece no stage_entries e SOME do funnel_stages (medido: 25% de diferenca). Use stage_entries pra 'quantos agendamentos/negocios aconteceram' e funnel_stages pra 'como esta o funil hoje'. stage_entries conta CARD DISTINTO (card que reentra na etapa conta uma vez) e o historico so existe a partir de 12/07/2026, com retencao de 365 dias — periodo anterior devolve menos do que aconteceu. PARAM NOVO `measure` em funnel_stages e stage_entries: 'count' (padrao, conta cards) ou 'value' (soma o VALOR dos cards = faturamento). Com status:'won' + date_basis:'closed' + measure:'value' sai o faturamento ganho da etapa no periodo. PERIODOS NOVOS: 'today' e 'yesterday'. CAMPO NOVO `title` em cada bloco: o nome que aparece no cabecalho. Sem ele varios blocos do mesmo tipo saem com rotulos identicos e nem a pessoa nem o agente sabem qual e qual — SEMPRE nomeie. TIPO NOVO (27/08, entra no ar com o PROXIMO deploy do app apos 27/08/2026 — antes disso o servidor recusa com 'widget_type desconhecido'): `stage_conversion` = CONVERSAO percentual entre grupos de etapas do funil, calculada pelo MOTOR: cards DISTINTOS que entraram nas etapas de `numerator_stage_ids` dividido pelos que entraram nas de `denominator_stage_ids` (listas de ids de etapa do funil — as chaves do hash stages do funnels_show), com `funnel_id` e `time_range`; chart_type 'number', shape scalar {value: percentual 1 casa, total: base do denominador (0 = sem dados), secondary: numerador/denominador nomeados}. Card que passou por DUAS etapas do denominador no periodo conta UMA vez (somar deflaria a conversao). Ex. real (Joint): Consulta Agendada dividido por Novos Leads + Agendamento Pendente. E o UNICO jeito de ter percentual confiavel no Aviso de relatorio (a IA do Aviso e PROIBIDA de calcular numeros). RECORTE POR CAIXA (26/08, ja no ar): em `agent_report` e `calls_report`, `scope_type:'inbox'` + `scope_id` recorta DE VERDADE pela caixa — membros da caixa contando SO o que fizeram NELA (antes os blocos saiam iguais pra qualquer caixa). `scope_type:'agent'/'team'` segue sendo recorte de PESSOAS (trabalho delas na conta inteira); 'inbox' + dimension 'team' e recusado. E `lead_origin` passou a respeitar `time_range` (antes ignorava o periodo).",
|
|
25577
25612
|
"category": "Relatorios",
|
|
25578
25613
|
"params": [
|
|
25579
25614
|
{
|
|
@@ -25714,7 +25749,7 @@
|
|
|
25714
25749
|
"method": "POST",
|
|
25715
25750
|
"path": "/api/v2/accounts/{account_id}/custom_dashboards",
|
|
25716
25751
|
"title": "Criar Relatorio Personalizado",
|
|
25717
|
-
"description": "[POST] Cria um relatorio personalizado que passa a APARECER NA TELA do cliente, na aba 'Personalizados' de Relatorios. ALTERA O QUE O CLIENTE VE: exige confirm:true depois de confirmar com ele. So administrador (401 caso contrario). Cada bloco de `widgets` usa os MESMOS campos do preview_widget (teste o desenho la antes de salvar) e PRECISA de um `id` proprio e unico — se faltar, o servidor gera. Um bloco invalido barra a criacao INTEIRA com 422 e o motivo em texto: nunca salva pela metade. Tetos: 50 relatorios por conta, 12 blocos por relatorio. Erros: 401 = quem chamou NAO e administrador (nao mande reconectar o conector). 422 com {error} = desenho invalido ou recurso nao liberado (code:'feature_unavailable' distingue) — o motivo vem em texto, corrija e tente de novo. 422 com {message,attributes} = teto atingido (50 relatorios por conta, 12 blocos por relatorio). TIPOS NOVOS (21/08): `calls_report` = tabela de LIGACOES (feitas, atendidas, nao atendidas, nao concluidas, tempo total e medio) por atendente (`dimension:'agent'`) ou por caixa (`dimension:'inbox'`); ligacao sem atendente ganha linha propria. `stage_entries` = quantos cards ENTRARAM em cada etapa de um funil no periodo, lido do historico de movimentacao — DIFERENTE de `funnel_stages`, que conta quem ESTA na etapa agora: card que entrou e depois saiu aparece no stage_entries e SOME do funnel_stages (medido: 25% de diferenca). Use stage_entries pra 'quantos agendamentos/negocios aconteceram' e funnel_stages pra 'como esta o funil hoje'. stage_entries conta CARD DISTINTO (card que reentra na etapa conta uma vez) e o historico so existe a partir de 12/07/2026, com retencao de 365 dias — periodo anterior devolve menos do que aconteceu. PARAM NOVO `measure` em funnel_stages e stage_entries: 'count' (padrao, conta cards) ou 'value' (soma o VALOR dos cards = faturamento). Com status:'won' + date_basis:'closed' + measure:'value' sai o faturamento ganho da etapa no periodo. PERIODOS NOVOS: 'today' e 'yesterday'. CAMPO NOVO `title` em cada bloco: o nome que aparece no cabecalho. Sem ele varios blocos do mesmo tipo saem com rotulos identicos e nem a pessoa nem o agente sabem qual e qual — SEMPRE nomeie.",
|
|
25752
|
+
"description": "[POST] Cria um relatorio personalizado que passa a APARECER NA TELA do cliente, na aba 'Personalizados' de Relatorios. ALTERA O QUE O CLIENTE VE: exige confirm:true depois de confirmar com ele. So administrador (401 caso contrario). Cada bloco de `widgets` usa os MESMOS campos do preview_widget (teste o desenho la antes de salvar) e PRECISA de um `id` proprio e unico — se faltar, o servidor gera. Um bloco invalido barra a criacao INTEIRA com 422 e o motivo em texto: nunca salva pela metade. Tetos: 50 relatorios por conta, 12 blocos por relatorio. Erros: 401 = quem chamou NAO e administrador (nao mande reconectar o conector). 422 com {error} = desenho invalido ou recurso nao liberado (code:'feature_unavailable' distingue) — o motivo vem em texto, corrija e tente de novo. 422 com {message,attributes} = teto atingido (50 relatorios por conta, 12 blocos por relatorio). TIPOS NOVOS (21/08): `calls_report` = tabela de LIGACOES (feitas, atendidas, nao atendidas, nao concluidas, tempo total e medio) por atendente (`dimension:'agent'`) ou por caixa (`dimension:'inbox'`); ligacao sem atendente ganha linha propria. `stage_entries` = quantos cards ENTRARAM em cada etapa de um funil no periodo, lido do historico de movimentacao — DIFERENTE de `funnel_stages`, que conta quem ESTA na etapa agora: card que entrou e depois saiu aparece no stage_entries e SOME do funnel_stages (medido: 25% de diferenca). Use stage_entries pra 'quantos agendamentos/negocios aconteceram' e funnel_stages pra 'como esta o funil hoje'. stage_entries conta CARD DISTINTO (card que reentra na etapa conta uma vez) e o historico so existe a partir de 12/07/2026, com retencao de 365 dias — periodo anterior devolve menos do que aconteceu. PARAM NOVO `measure` em funnel_stages e stage_entries: 'count' (padrao, conta cards) ou 'value' (soma o VALOR dos cards = faturamento). Com status:'won' + date_basis:'closed' + measure:'value' sai o faturamento ganho da etapa no periodo. PERIODOS NOVOS: 'today' e 'yesterday'. CAMPO NOVO `title` em cada bloco: o nome que aparece no cabecalho. Sem ele varios blocos do mesmo tipo saem com rotulos identicos e nem a pessoa nem o agente sabem qual e qual — SEMPRE nomeie. TIPO NOVO (27/08, entra no ar com o PROXIMO deploy do app apos 27/08/2026 — antes disso o servidor recusa com 'widget_type desconhecido'): `stage_conversion` = CONVERSAO percentual entre grupos de etapas do funil, calculada pelo MOTOR: cards DISTINTOS que entraram nas etapas de `numerator_stage_ids` dividido pelos que entraram nas de `denominator_stage_ids` (listas de ids de etapa do funil — as chaves do hash stages do funnels_show), com `funnel_id` e `time_range`; chart_type 'number', shape scalar {value: percentual 1 casa, total: base do denominador (0 = sem dados), secondary: numerador/denominador nomeados}. Card que passou por DUAS etapas do denominador no periodo conta UMA vez (somar deflaria a conversao). Ex. real (Joint): Consulta Agendada dividido por Novos Leads + Agendamento Pendente. E o UNICO jeito de ter percentual confiavel no Aviso de relatorio (a IA do Aviso e PROIBIDA de calcular numeros). RECORTE POR CAIXA (26/08, ja no ar): em `agent_report` e `calls_report`, `scope_type:'inbox'` + `scope_id` recorta DE VERDADE pela caixa — membros da caixa contando SO o que fizeram NELA (antes os blocos saiam iguais pra qualquer caixa). `scope_type:'agent'/'team'` segue sendo recorte de PESSOAS (trabalho delas na conta inteira); 'inbox' + dimension 'team' e recusado. E `lead_origin` passou a respeitar `time_range` (antes ignorava o periodo).",
|
|
25718
25753
|
"category": "Relatorios",
|
|
25719
25754
|
"params": [
|
|
25720
25755
|
{
|
|
@@ -25756,7 +25791,7 @@
|
|
|
25756
25791
|
"method": "PATCH",
|
|
25757
25792
|
"path": "/api/v2/accounts/{account_id}/custom_dashboards/{id}",
|
|
25758
25793
|
"title": "Alterar Relatorio Personalizado",
|
|
25759
|
-
"description": "[PATCH] Altera um relatorio personalizado. ALTERA O QUE O CLIENTE VE: exige confirm:true depois de confirmar com ele. So administrador (401 caso contrario). ATENCAO — `widgets` SUBSTITUI a lista inteira, nao acrescenta: mandar um bloco APAGA os outros. Leia o relatorio com custom_dashboards_list, altere o array e devolva-o COMPLETO. Se a listagem tiver vindo cortada, NAO use: voce apagaria o que nao chegou. Nao ha historico de alteracao — bloco apagado nao volta. Erros: 401 = quem chamou NAO e administrador (nao mande reconectar o conector). 422 com {error} = desenho invalido ou recurso nao liberado (code:'feature_unavailable' distingue) — o motivo vem em texto, corrija e tente de novo. 422 com {message,attributes} = teto atingido (50 relatorios por conta, 12 blocos por relatorio). TIPOS NOVOS (21/08): `calls_report` = tabela de LIGACOES (feitas, atendidas, nao atendidas, nao concluidas, tempo total e medio) por atendente (`dimension:'agent'`) ou por caixa (`dimension:'inbox'`); ligacao sem atendente ganha linha propria. `stage_entries` = quantos cards ENTRARAM em cada etapa de um funil no periodo, lido do historico de movimentacao — DIFERENTE de `funnel_stages`, que conta quem ESTA na etapa agora: card que entrou e depois saiu aparece no stage_entries e SOME do funnel_stages (medido: 25% de diferenca). Use stage_entries pra 'quantos agendamentos/negocios aconteceram' e funnel_stages pra 'como esta o funil hoje'. stage_entries conta CARD DISTINTO (card que reentra na etapa conta uma vez) e o historico so existe a partir de 12/07/2026, com retencao de 365 dias — periodo anterior devolve menos do que aconteceu. PARAM NOVO `measure` em funnel_stages e stage_entries: 'count' (padrao, conta cards) ou 'value' (soma o VALOR dos cards = faturamento). Com status:'won' + date_basis:'closed' + measure:'value' sai o faturamento ganho da etapa no periodo. PERIODOS NOVOS: 'today' e 'yesterday'. CAMPO NOVO `title` em cada bloco: o nome que aparece no cabecalho. Sem ele varios blocos do mesmo tipo saem com rotulos identicos e nem a pessoa nem o agente sabem qual e qual — SEMPRE nomeie.",
|
|
25794
|
+
"description": "[PATCH] Altera um relatorio personalizado. ALTERA O QUE O CLIENTE VE: exige confirm:true depois de confirmar com ele. So administrador (401 caso contrario). ATENCAO — `widgets` SUBSTITUI a lista inteira, nao acrescenta: mandar um bloco APAGA os outros. Leia o relatorio com custom_dashboards_list, altere o array e devolva-o COMPLETO. Se a listagem tiver vindo cortada, NAO use: voce apagaria o que nao chegou. Nao ha historico de alteracao — bloco apagado nao volta. Erros: 401 = quem chamou NAO e administrador (nao mande reconectar o conector). 422 com {error} = desenho invalido ou recurso nao liberado (code:'feature_unavailable' distingue) — o motivo vem em texto, corrija e tente de novo. 422 com {message,attributes} = teto atingido (50 relatorios por conta, 12 blocos por relatorio). TIPOS NOVOS (21/08): `calls_report` = tabela de LIGACOES (feitas, atendidas, nao atendidas, nao concluidas, tempo total e medio) por atendente (`dimension:'agent'`) ou por caixa (`dimension:'inbox'`); ligacao sem atendente ganha linha propria. `stage_entries` = quantos cards ENTRARAM em cada etapa de um funil no periodo, lido do historico de movimentacao — DIFERENTE de `funnel_stages`, que conta quem ESTA na etapa agora: card que entrou e depois saiu aparece no stage_entries e SOME do funnel_stages (medido: 25% de diferenca). Use stage_entries pra 'quantos agendamentos/negocios aconteceram' e funnel_stages pra 'como esta o funil hoje'. stage_entries conta CARD DISTINTO (card que reentra na etapa conta uma vez) e o historico so existe a partir de 12/07/2026, com retencao de 365 dias — periodo anterior devolve menos do que aconteceu. PARAM NOVO `measure` em funnel_stages e stage_entries: 'count' (padrao, conta cards) ou 'value' (soma o VALOR dos cards = faturamento). Com status:'won' + date_basis:'closed' + measure:'value' sai o faturamento ganho da etapa no periodo. PERIODOS NOVOS: 'today' e 'yesterday'. CAMPO NOVO `title` em cada bloco: o nome que aparece no cabecalho. Sem ele varios blocos do mesmo tipo saem com rotulos identicos e nem a pessoa nem o agente sabem qual e qual — SEMPRE nomeie. TIPO NOVO (27/08, entra no ar com o PROXIMO deploy do app apos 27/08/2026 — antes disso o servidor recusa com 'widget_type desconhecido'): `stage_conversion` = CONVERSAO percentual entre grupos de etapas do funil, calculada pelo MOTOR: cards DISTINTOS que entraram nas etapas de `numerator_stage_ids` dividido pelos que entraram nas de `denominator_stage_ids` (listas de ids de etapa do funil — as chaves do hash stages do funnels_show), com `funnel_id` e `time_range`; chart_type 'number', shape scalar {value: percentual 1 casa, total: base do denominador (0 = sem dados), secondary: numerador/denominador nomeados}. Card que passou por DUAS etapas do denominador no periodo conta UMA vez (somar deflaria a conversao). Ex. real (Joint): Consulta Agendada dividido por Novos Leads + Agendamento Pendente. E o UNICO jeito de ter percentual confiavel no Aviso de relatorio (a IA do Aviso e PROIBIDA de calcular numeros). RECORTE POR CAIXA (26/08, ja no ar): em `agent_report` e `calls_report`, `scope_type:'inbox'` + `scope_id` recorta DE VERDADE pela caixa — membros da caixa contando SO o que fizeram NELA (antes os blocos saiam iguais pra qualquer caixa). `scope_type:'agent'/'team'` segue sendo recorte de PESSOAS (trabalho delas na conta inteira); 'inbox' + dimension 'team' e recusado. E `lead_origin` passou a respeitar `time_range` (antes ignorava o periodo).",
|
|
25760
25795
|
"category": "Relatorios",
|
|
25761
25796
|
"params": [
|
|
25762
25797
|
{
|
|
@@ -30858,7 +30893,7 @@
|
|
|
30858
30893
|
"type": "object",
|
|
30859
30894
|
"location": "body",
|
|
30860
30895
|
"required": false,
|
|
30861
|
-
"description": "Mapeamento evento -> {automation_id | flow_id, first_purchase_only?: bool (pula renovações)
|
|
30896
|
+
"description": "Mapeamento evento -> {automation_id | flow_id, first_purchase_only?: bool (pula renovações)} — ids precisam ser desta conta (422). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto; o backend ignora a chave se gravada"
|
|
30862
30897
|
}
|
|
30863
30898
|
],
|
|
30864
30899
|
"returns": "webhook criado (com novo ID e webhook_url)",
|
|
@@ -30952,7 +30987,7 @@
|
|
|
30952
30987
|
"type": "object",
|
|
30953
30988
|
"location": "body",
|
|
30954
30989
|
"required": false,
|
|
30955
|
-
"description": "Mapeamento evento -> {automation_id | flow_id, first_purchase_only?: bool (pula renovações)
|
|
30990
|
+
"description": "Mapeamento evento -> {automation_id | flow_id, first_purchase_only?: bool (pula renovações)} — ids precisam ser desta conta (422). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto; o backend ignora a chave se gravada"
|
|
30956
30991
|
}
|
|
30957
30992
|
],
|
|
30958
30993
|
"returns": "webhook atualizado",
|
|
@@ -31372,6 +31407,105 @@
|
|
|
31372
31407
|
"lionchat_meta_lead_create_1"
|
|
31373
31408
|
]
|
|
31374
31409
|
},
|
|
31410
|
+
{
|
|
31411
|
+
"id": "lionchat_meta_lead_ads_token",
|
|
31412
|
+
"method": "POST",
|
|
31413
|
+
"path": "/api/v1/accounts/{account_id}/integrations/meta_lead/ads_token",
|
|
31414
|
+
"title": "Gravar Token de Anuncios (Meta Lead)",
|
|
31415
|
+
"description": "[POST] Grava o token de ANUNCIOS da Meta colado a mao pelo cliente — e de CONTA (vale pra todas as paginas conectadas), nao de pagina. Com ele os leads passam a mostrar NOME de campanha/conjunto/anuncio em vez de so ids, e o servidor ja reprocessa retroativamente os leads que ficaram sem nome. Mandar vazio LIMPA o token. Valide antes com meta_lead_validate_token. Resposta: {meta} com a situacao do token. A resposta e {meta:{ads_capable, has_manual_ads_token}} — os MESMOS booleanos que aparecem em cada integracao do meta_lead_list (e no meta de conta): ads_capable = a conta consegue resolver nomes; has_manual_ads_token = ha token colado a mao. Os campos com os NOMES ja resolvidos moram em conversation.custom_attributes com prefixo ctwa_ (conversa vinda de anuncio) e em contact.custom_attributes com prefixo meta_lead_ (lead de formulario) — existem desde antes; o token so habilita o preenchimento.",
|
|
31416
|
+
"category": "Integracoes",
|
|
31417
|
+
"params": [
|
|
31418
|
+
{
|
|
31419
|
+
"name": "manual_ads_token",
|
|
31420
|
+
"type": "string",
|
|
31421
|
+
"location": "body",
|
|
31422
|
+
"required": false,
|
|
31423
|
+
"description": "Token de anuncios da Meta (System User ou usuario com acesso a conta de anuncios). Vazio/ausente limpa o token salvo."
|
|
31424
|
+
}
|
|
31425
|
+
],
|
|
31426
|
+
"returns": "{meta: situacao do token de anuncios}",
|
|
31427
|
+
"common_use_cases": [
|
|
31428
|
+
"Ligar a resolucao de nomes de campanha/conjunto/anuncio nos leads"
|
|
31429
|
+
],
|
|
31430
|
+
"related_tools": [
|
|
31431
|
+
"lionchat_meta_lead_validate_token",
|
|
31432
|
+
"lionchat_meta_lead_list"
|
|
31433
|
+
]
|
|
31434
|
+
},
|
|
31435
|
+
{
|
|
31436
|
+
"id": "lionchat_meta_lead_validate_token",
|
|
31437
|
+
"method": "POST",
|
|
31438
|
+
"path": "/api/v1/accounts/{account_id}/integrations/meta_lead/validate_token",
|
|
31439
|
+
"title": "Testar Token de Anuncios (Meta Lead)",
|
|
31440
|
+
"description": "[POST] Confere o token de anuncios NA HORA, sem gravar nada: valido? de qual app? quais permissoes? alcanca anuncio de verdade? Sem manual_ads_token no corpo, testa o token JA SALVO. Resposta: {data} com o raio-x do token. Use pra diagnosticar 'os leads chegam so com id de campanha' antes de pedir token novo ao cliente.",
|
|
31441
|
+
"category": "Integracoes",
|
|
31442
|
+
"params": [
|
|
31443
|
+
{
|
|
31444
|
+
"name": "manual_ads_token",
|
|
31445
|
+
"type": "string",
|
|
31446
|
+
"location": "body",
|
|
31447
|
+
"required": false,
|
|
31448
|
+
"description": "Token a testar. Ausente = testa o token salvo na conta."
|
|
31449
|
+
}
|
|
31450
|
+
],
|
|
31451
|
+
"returns": "{data: diagnostico do token}",
|
|
31452
|
+
"common_use_cases": [
|
|
31453
|
+
"Diagnosticar por que o nome da campanha nao aparece nos leads"
|
|
31454
|
+
],
|
|
31455
|
+
"related_tools": [
|
|
31456
|
+
"lionchat_meta_lead_ads_token"
|
|
31457
|
+
]
|
|
31458
|
+
},
|
|
31459
|
+
{
|
|
31460
|
+
"id": "lionchat_meta_lead_bulk_destroy",
|
|
31461
|
+
"method": "POST",
|
|
31462
|
+
"path": "/api/v1/accounts/{account_id}/integrations/meta_lead/bulk_destroy",
|
|
31463
|
+
"title": "Desconectar Paginas em Lote (Meta Lead)",
|
|
31464
|
+
"description": "[POST] Remove VARIAS paginas conectadas de uma vez (assincrono — resposta 202 com {meta:{queued:N}}). Existiu porque ate 25/08 o conectar trazia TODAS as paginas do Facebook do cliente sem escolha (caso real: 25 paginas na Onipresenca) — esta e a ferramenta de limpeza. REMOVE integracoes de verdade: exige confirm:true depois de listar pro cliente QUAIS paginas vao sair. 422 se nenhum id for da conta.",
|
|
31465
|
+
"category": "Integracoes",
|
|
31466
|
+
"confirm_required": true,
|
|
31467
|
+
"params": [
|
|
31468
|
+
{
|
|
31469
|
+
"name": "ids",
|
|
31470
|
+
"type": "array",
|
|
31471
|
+
"location": "body",
|
|
31472
|
+
"required": true,
|
|
31473
|
+
"description": "Ids das integracoes de pagina a remover (campo id de cada item do meta_lead_list — id da INTEGRACAO, nao da pagina do Facebook)"
|
|
31474
|
+
}
|
|
31475
|
+
],
|
|
31476
|
+
"returns": "202 {meta:{queued:N}}",
|
|
31477
|
+
"common_use_cases": [
|
|
31478
|
+
"Limpar paginas que entraram sem escolha na conexao antiga"
|
|
31479
|
+
],
|
|
31480
|
+
"related_tools": [
|
|
31481
|
+
"lionchat_meta_lead_list",
|
|
31482
|
+
"lionchat_meta_lead_destroy"
|
|
31483
|
+
]
|
|
31484
|
+
},
|
|
31485
|
+
{
|
|
31486
|
+
"id": "lionchat_meta_lead_sync_forms",
|
|
31487
|
+
"method": "POST",
|
|
31488
|
+
"path": "/api/v1/accounts/{account_id}/integrations/meta_lead/{id}/sync_forms",
|
|
31489
|
+
"title": "Sincronizar Formularios da Pagina (Meta Lead)",
|
|
31490
|
+
"description": "[POST] Re-busca na Meta os formularios de lead da pagina conectada. Erro de PERMISSAO nao vira 422: volta 200 com meta.warnings e mode:'reactive' (a pagina segue funcionando no modo reativo — os formularios aparecem conforme os leads chegam). So token EXPIRADO da 422 (cliente precisa reconectar).",
|
|
31491
|
+
"category": "Integracoes",
|
|
31492
|
+
"params": [
|
|
31493
|
+
{
|
|
31494
|
+
"name": "id",
|
|
31495
|
+
"type": "integer",
|
|
31496
|
+
"location": "path",
|
|
31497
|
+
"required": true,
|
|
31498
|
+
"description": "Id da integracao da pagina (meta_lead_list)"
|
|
31499
|
+
}
|
|
31500
|
+
],
|
|
31501
|
+
"returns": "{data: formularios, meta: {warnings?, mode?}}",
|
|
31502
|
+
"common_use_cases": [
|
|
31503
|
+
"Formulario novo criado na Meta nao aparece na lista"
|
|
31504
|
+
],
|
|
31505
|
+
"related_tools": [
|
|
31506
|
+
"lionchat_meta_lead_list"
|
|
31507
|
+
]
|
|
31508
|
+
},
|
|
31375
31509
|
{
|
|
31376
31510
|
"id": "lionchat_reporting_events_list",
|
|
31377
31511
|
"method": "GET",
|
|
@@ -31647,7 +31781,7 @@
|
|
|
31647
31781
|
"method": "GET",
|
|
31648
31782
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations/{id}",
|
|
31649
31783
|
"title": "Detalhes da Integração e-Clínica",
|
|
31650
|
-
"description": "SÓ LEITURA, somente administrador. A integração e-Clínica da conta (1 por conta; o id precisa ser o dela — 404 caso contrário) com status, saúde, mapeamento de eventos, lembretes, webhook_url e as UNIDADES (filiais) com status/token-por-variável/webhook próprio. Mesmo conteúdo de lionchat_eclinica_integrations_list, que já resolve o id.",
|
|
31784
|
+
"description": "SÓ LEITURA, somente administrador. A integração e-Clínica da conta (1 por conta; o id precisa ser o dela — 404 caso contrário) com status, saúde, mapeamento de eventos, lembretes, webhook_url e as UNIDADES (filiais) com status/token-por-variável/webhook próprio. Mesmo conteúdo de lionchat_eclinica_integrations_list, que já resolve o id. LEMBRETE POR AUTOMACAO (25/08): cada entrada de reminder_config aceita `automation_id` alem do `flow_id` — pelo menos um dos dois (422 sem nenhum); com os DOIS preenchidos a AUTOMACAO vence no disparo. A automacao precisa ser da propria conta (422 senao). ALERTA de regra de negocio ao configurar: o caminho por automacao RODA AS ACOES SEM AVALIAR AS CONDICOES da automacao, e paciente com duas consultas no dia recebe DOIS lembretes (o caminho por fluxo descarta o segundo) — avise o cliente antes de trocar fluxo por automacao.",
|
|
31651
31785
|
"category": "Integracoes",
|
|
31652
31786
|
"params": [
|
|
31653
31787
|
{
|
|
@@ -31829,5 +31963,370 @@
|
|
|
31829
31963
|
"lionchat_custom_dashboards_widget_data",
|
|
31830
31964
|
"lionchat_custom_dashboards_update"
|
|
31831
31965
|
]
|
|
31966
|
+
},
|
|
31967
|
+
{
|
|
31968
|
+
"id": "lionchat_report_alerts_list",
|
|
31969
|
+
"method": "GET",
|
|
31970
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts",
|
|
31971
|
+
"title": "Listar Avisos de Relatorio",
|
|
31972
|
+
"description": "[GET] Lista os Avisos da conta (aba Relatorios > Avisos): envio diario do resumo de um relatorio personalizado num grupo/conversa de WhatsApp QR, com texto escrito pela IA da conta. Retorna {payload:[...]} com, por aviso: custom_dashboard_id/_name, inbox_id/_name, conversation_display_id, destination_name, send_hour, frequency (daily|weekdays), enabled, next_send_on (proximo envio previsto, fuso da conta), last_sent_on, last_attempt_at, last_delivery_status (generating|sent|confirmed|send_failed|skipped_late|error), last_error e text_prompt. So administrador (401 caso contrario). Teto: 10 avisos por conta.",
|
|
31973
|
+
"category": "Relatorios",
|
|
31974
|
+
"params": [],
|
|
31975
|
+
"returns": "{payload: [avisos]}",
|
|
31976
|
+
"common_use_cases": [
|
|
31977
|
+
"Ver quais resumos diarios a conta manda no WhatsApp e a situacao do ultimo envio",
|
|
31978
|
+
"Diagnosticar por que o resumo nao chegou (last_delivery_status/last_error)",
|
|
31979
|
+
"Descobrir o id do aviso antes de editar/ligar/desligar"
|
|
31980
|
+
],
|
|
31981
|
+
"related_tools": [
|
|
31982
|
+
"lionchat_report_alerts_create",
|
|
31983
|
+
"lionchat_report_alerts_deliveries",
|
|
31984
|
+
"lionchat_custom_dashboards_list"
|
|
31985
|
+
]
|
|
31986
|
+
},
|
|
31987
|
+
{
|
|
31988
|
+
"id": "lionchat_report_alerts_show",
|
|
31989
|
+
"method": "GET",
|
|
31990
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts/{id}",
|
|
31991
|
+
"title": "Ver Aviso de Relatorio",
|
|
31992
|
+
"description": "[GET] Um Aviso so, com os mesmos campos da lista. So administrador (401 caso contrario); 404 se nao e da conta.",
|
|
31993
|
+
"category": "Relatorios",
|
|
31994
|
+
"params": [
|
|
31995
|
+
{
|
|
31996
|
+
"name": "id",
|
|
31997
|
+
"type": "integer",
|
|
31998
|
+
"location": "path",
|
|
31999
|
+
"required": true,
|
|
32000
|
+
"description": "Id do aviso (vem do report_alerts_list)"
|
|
32001
|
+
}
|
|
32002
|
+
],
|
|
32003
|
+
"returns": "objeto do aviso",
|
|
32004
|
+
"common_use_cases": [
|
|
32005
|
+
"Conferir a configuracao exata antes de um update"
|
|
32006
|
+
],
|
|
32007
|
+
"related_tools": [
|
|
32008
|
+
"lionchat_report_alerts_list",
|
|
32009
|
+
"lionchat_report_alerts_update"
|
|
32010
|
+
]
|
|
32011
|
+
},
|
|
32012
|
+
{
|
|
32013
|
+
"id": "lionchat_report_alerts_create",
|
|
32014
|
+
"method": "POST",
|
|
32015
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts",
|
|
32016
|
+
"title": "Criar Aviso de Relatorio",
|
|
32017
|
+
"description": "[POST] Cria o envio diario do resumo de um relatorio personalizado num grupo/conversa de WhatsApp. MANDA MENSAGEM REAL NO WHATSAPP DO CLIENTE TODO DIA: exige confirm:true depois de confirmar destino, horario e relatorio com a pessoa. So administrador. FLUXO SEGURO (aprendido em producao 27/08): 1) crie com enabled:false; 2) rode report_alerts_preview e leia o texto com preview_status; 3) so entao ligue (update enabled:true) — criado LIGADO dentro da janela do dia (send_hour ate +3h, fuso da conta) dispara no proximo tick de hora. Regras do servidor: caixa PRECISA ser WhatsApp QR; a conversa precisa ser da MESMA caixa; teto 10 por conta; a mensagem sai como MENSAGEM DE SISTEMA na conversa (automacoes e fluxos ativos NAQUELA conversa reagem a ela; nao conta como resposta de atendente, nao mexe em SLA nem zera 'cliente aguardando'). O texto interno usa **negrito** e vira negrito do WhatsApp no envio. Erros 422 vem com a explicacao em texto (ex.: 'a caixa escolhida não é mais uma caixa QR').",
|
|
32018
|
+
"category": "Relatorios",
|
|
32019
|
+
"body_wrapper": "report_alert",
|
|
32020
|
+
"confirm_required": true,
|
|
32021
|
+
"params": [
|
|
32022
|
+
{
|
|
32023
|
+
"name": "custom_dashboard_id",
|
|
32024
|
+
"type": "integer",
|
|
32025
|
+
"location": "body",
|
|
32026
|
+
"required": false,
|
|
32027
|
+
"description": "Relatorio personalizado cujo resumo sera enviado (vem do custom_dashboards_list). Obrigatorio no create."
|
|
32028
|
+
},
|
|
32029
|
+
{
|
|
32030
|
+
"name": "inbox_id",
|
|
32031
|
+
"type": "integer",
|
|
32032
|
+
"location": "body",
|
|
32033
|
+
"required": false,
|
|
32034
|
+
"description": "Caixa que ENVIA — PRECISA ser WhatsApp QR (Channel::Waha; confira channel_type no inboxes_list). A API oficial e recusada (so manda modelo aprovado). Obrigatorio no create."
|
|
32035
|
+
},
|
|
32036
|
+
{
|
|
32037
|
+
"name": "conversation_display_id",
|
|
32038
|
+
"type": "integer",
|
|
32039
|
+
"location": "body",
|
|
32040
|
+
"required": false,
|
|
32041
|
+
"description": "Numero da conversa/grupo de DESTINO como aparece na tela e nas tools de conversa (o servidor resolve pro id interno). Use ESTE ou conversation_id — a conversa precisa ser DA MESMA caixa do inbox_id. Pra achar grupo pelo nome: conversations_list com inbox_id + busca."
|
|
32042
|
+
},
|
|
32043
|
+
{
|
|
32044
|
+
"name": "conversation_id",
|
|
32045
|
+
"type": "integer",
|
|
32046
|
+
"location": "body",
|
|
32047
|
+
"required": false,
|
|
32048
|
+
"description": "Id INTERNO da conversa de destino (alternativa ao conversation_display_id; na duvida use o display)."
|
|
32049
|
+
},
|
|
32050
|
+
{
|
|
32051
|
+
"name": "send_hour",
|
|
32052
|
+
"type": "integer",
|
|
32053
|
+
"location": "body",
|
|
32054
|
+
"required": false,
|
|
32055
|
+
"description": "Hora do envio (0-23) NO FUSO DA CONTA (campo timezone do account_show; sem fuso = America/Sao_Paulo). Default 7. Tolerancia de 3h: tick perdido sai atrasado; passou da janela = 'skipped_late' visivel e tenta de novo amanha."
|
|
32056
|
+
},
|
|
32057
|
+
{
|
|
32058
|
+
"name": "frequency",
|
|
32059
|
+
"type": "string",
|
|
32060
|
+
"location": "body",
|
|
32061
|
+
"required": false,
|
|
32062
|
+
"description": "daily (todo dia, default) ou weekdays (segunda a sexta)."
|
|
32063
|
+
},
|
|
32064
|
+
{
|
|
32065
|
+
"name": "period",
|
|
32066
|
+
"type": "string",
|
|
32067
|
+
"location": "body",
|
|
32068
|
+
"required": false,
|
|
32069
|
+
"description": "Janela dos numeros. Hoje so 'yesterday' (ontem no fuso da conta) — e o default; nao ha outros valores."
|
|
32070
|
+
},
|
|
32071
|
+
{
|
|
32072
|
+
"name": "text_prompt",
|
|
32073
|
+
"type": "string",
|
|
32074
|
+
"location": "body",
|
|
32075
|
+
"required": false,
|
|
32076
|
+
"description": "Instrucoes pra IA escrever o texto (ate 2000 chars), usando a chave OpenAI DA CONTA. Sem prompt ou sem chave = texto padrao do sistema (fiel, bloco a bloco). GOTCHAS medidos em producao: a conferencia de numeros REPROVA qualquer numero que nao exista no relatorio (a IA NUNCA calcula percentual/soma — percentual confiavel = bloco stage_conversion no relatorio) e prompt que pede pra RENOMEAR/reorganizar secoes ja fez a IA trocar rotulos de numeros (caso real 27/08). O prompt que funciona: 'mantenha os titulos e TODOS os numeros exatamente como estao, nao renomeie secoes, nao calcule nada, inclua TODOS os blocos'."
|
|
32077
|
+
},
|
|
32078
|
+
{
|
|
32079
|
+
"name": "enabled",
|
|
32080
|
+
"type": "boolean",
|
|
32081
|
+
"location": "body",
|
|
32082
|
+
"required": false,
|
|
32083
|
+
"description": "Liga/desliga o envio automatico. ATENCAO (incidente real 27/08): criar LIGADO dentro da janela do dia (entre send_hour e send_hour+3h no fuso da conta) DISPARA no proximo tick de hora — se ainda vai validar a previa, crie com enabled:false e ligue depois."
|
|
32084
|
+
}
|
|
32085
|
+
],
|
|
32086
|
+
"returns": "objeto do aviso criado (com next_send_on)",
|
|
32087
|
+
"common_use_cases": [
|
|
32088
|
+
"Configurar o resumo comercial diario da conta num grupo de gestao",
|
|
32089
|
+
"Migrar uma rotina externa de relatorio pro envio nativo do sistema"
|
|
32090
|
+
],
|
|
32091
|
+
"related_tools": [
|
|
32092
|
+
"lionchat_report_alerts_preview",
|
|
32093
|
+
"lionchat_report_alerts_update",
|
|
32094
|
+
"lionchat_report_alerts_send_now",
|
|
32095
|
+
"lionchat_custom_dashboards_show"
|
|
32096
|
+
]
|
|
32097
|
+
},
|
|
32098
|
+
{
|
|
32099
|
+
"id": "lionchat_report_alerts_update",
|
|
32100
|
+
"method": "PATCH",
|
|
32101
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts/{id}",
|
|
32102
|
+
"title": "Editar Aviso de Relatorio",
|
|
32103
|
+
"description": "[PATCH] Edita um Aviso (qualquer campo do create, todos opcionais — inclusive enabled pra ligar/desligar). ALTERA um envio automatico real: exige confirm:true. So administrador. GOTCHA de ligar (enabled:true): se ainda estiver dentro da janela do dia (send_hour ate +3h no fuso da conta) e o aviso nao enviou hoje, ele DISPARA no proximo tick de hora; religado FORA da janela ganha 'skipped_late' de hoje (linha ambar inofensiva) e roda normal amanha.",
|
|
32104
|
+
"category": "Relatorios",
|
|
32105
|
+
"body_wrapper": "report_alert",
|
|
32106
|
+
"confirm_required": true,
|
|
32107
|
+
"params": [
|
|
32108
|
+
{
|
|
32109
|
+
"name": "id",
|
|
32110
|
+
"type": "integer",
|
|
32111
|
+
"location": "path",
|
|
32112
|
+
"required": true,
|
|
32113
|
+
"description": "Id do aviso"
|
|
32114
|
+
},
|
|
32115
|
+
{
|
|
32116
|
+
"name": "custom_dashboard_id",
|
|
32117
|
+
"type": "integer",
|
|
32118
|
+
"location": "body",
|
|
32119
|
+
"required": false,
|
|
32120
|
+
"description": "Relatorio personalizado cujo resumo sera enviado (vem do custom_dashboards_list). Obrigatorio no create."
|
|
32121
|
+
},
|
|
32122
|
+
{
|
|
32123
|
+
"name": "inbox_id",
|
|
32124
|
+
"type": "integer",
|
|
32125
|
+
"location": "body",
|
|
32126
|
+
"required": false,
|
|
32127
|
+
"description": "Caixa que ENVIA — PRECISA ser WhatsApp QR (Channel::Waha; confira channel_type no inboxes_list). A API oficial e recusada (so manda modelo aprovado). Obrigatorio no create."
|
|
32128
|
+
},
|
|
32129
|
+
{
|
|
32130
|
+
"name": "conversation_display_id",
|
|
32131
|
+
"type": "integer",
|
|
32132
|
+
"location": "body",
|
|
32133
|
+
"required": false,
|
|
32134
|
+
"description": "Numero da conversa/grupo de DESTINO como aparece na tela e nas tools de conversa (o servidor resolve pro id interno). Use ESTE ou conversation_id — a conversa precisa ser DA MESMA caixa do inbox_id. Pra achar grupo pelo nome: conversations_list com inbox_id + busca."
|
|
32135
|
+
},
|
|
32136
|
+
{
|
|
32137
|
+
"name": "conversation_id",
|
|
32138
|
+
"type": "integer",
|
|
32139
|
+
"location": "body",
|
|
32140
|
+
"required": false,
|
|
32141
|
+
"description": "Id INTERNO da conversa de destino (alternativa ao conversation_display_id; na duvida use o display)."
|
|
32142
|
+
},
|
|
32143
|
+
{
|
|
32144
|
+
"name": "send_hour",
|
|
32145
|
+
"type": "integer",
|
|
32146
|
+
"location": "body",
|
|
32147
|
+
"required": false,
|
|
32148
|
+
"description": "Hora do envio (0-23) NO FUSO DA CONTA (campo timezone do account_show; sem fuso = America/Sao_Paulo). Default 7. Tolerancia de 3h: tick perdido sai atrasado; passou da janela = 'skipped_late' visivel e tenta de novo amanha."
|
|
32149
|
+
},
|
|
32150
|
+
{
|
|
32151
|
+
"name": "frequency",
|
|
32152
|
+
"type": "string",
|
|
32153
|
+
"location": "body",
|
|
32154
|
+
"required": false,
|
|
32155
|
+
"description": "daily (todo dia, default) ou weekdays (segunda a sexta)."
|
|
32156
|
+
},
|
|
32157
|
+
{
|
|
32158
|
+
"name": "period",
|
|
32159
|
+
"type": "string",
|
|
32160
|
+
"location": "body",
|
|
32161
|
+
"required": false,
|
|
32162
|
+
"description": "Janela dos numeros. Hoje so 'yesterday' (ontem no fuso da conta) — e o default; nao ha outros valores."
|
|
32163
|
+
},
|
|
32164
|
+
{
|
|
32165
|
+
"name": "text_prompt",
|
|
32166
|
+
"type": "string",
|
|
32167
|
+
"location": "body",
|
|
32168
|
+
"required": false,
|
|
32169
|
+
"description": "Instrucoes pra IA escrever o texto (ate 2000 chars), usando a chave OpenAI DA CONTA. Sem prompt ou sem chave = texto padrao do sistema (fiel, bloco a bloco). GOTCHAS medidos em producao: a conferencia de numeros REPROVA qualquer numero que nao exista no relatorio (a IA NUNCA calcula percentual/soma — percentual confiavel = bloco stage_conversion no relatorio) e prompt que pede pra RENOMEAR/reorganizar secoes ja fez a IA trocar rotulos de numeros (caso real 27/08). O prompt que funciona: 'mantenha os titulos e TODOS os numeros exatamente como estao, nao renomeie secoes, nao calcule nada, inclua TODOS os blocos'."
|
|
32170
|
+
},
|
|
32171
|
+
{
|
|
32172
|
+
"name": "enabled",
|
|
32173
|
+
"type": "boolean",
|
|
32174
|
+
"location": "body",
|
|
32175
|
+
"required": false,
|
|
32176
|
+
"description": "Liga/desliga o envio automatico. ATENCAO (incidente real 27/08): criar LIGADO dentro da janela do dia (entre send_hour e send_hour+3h no fuso da conta) DISPARA no proximo tick de hora — se ainda vai validar a previa, crie com enabled:false e ligue depois."
|
|
32177
|
+
}
|
|
32178
|
+
],
|
|
32179
|
+
"returns": "objeto do aviso atualizado",
|
|
32180
|
+
"common_use_cases": [
|
|
32181
|
+
"Ligar o aviso depois de validar a previa",
|
|
32182
|
+
"Trocar o destino/horario/prompt",
|
|
32183
|
+
"Desligar sem apagar"
|
|
32184
|
+
],
|
|
32185
|
+
"related_tools": [
|
|
32186
|
+
"lionchat_report_alerts_show",
|
|
32187
|
+
"lionchat_report_alerts_preview"
|
|
32188
|
+
]
|
|
32189
|
+
},
|
|
32190
|
+
{
|
|
32191
|
+
"id": "lionchat_report_alerts_destroy",
|
|
32192
|
+
"method": "DELETE",
|
|
32193
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts/{id}",
|
|
32194
|
+
"title": "Excluir Aviso de Relatorio",
|
|
32195
|
+
"description": "[DELETE] Apaga o aviso E o historico de envios dele (irreversivel). Exige confirm:true depois de confirmar com a pessoa. Se a ideia e so parar de mandar, prefira update com enabled:false (mantem configuracao e historico).",
|
|
32196
|
+
"category": "Relatorios",
|
|
32197
|
+
"confirm_required": true,
|
|
32198
|
+
"params": [
|
|
32199
|
+
{
|
|
32200
|
+
"name": "id",
|
|
32201
|
+
"type": "integer",
|
|
32202
|
+
"location": "path",
|
|
32203
|
+
"required": true,
|
|
32204
|
+
"description": "Id do aviso"
|
|
32205
|
+
}
|
|
32206
|
+
],
|
|
32207
|
+
"returns": "204 sem corpo",
|
|
32208
|
+
"common_use_cases": [
|
|
32209
|
+
"Remover de vez um aviso que nao faz mais sentido"
|
|
32210
|
+
],
|
|
32211
|
+
"related_tools": [
|
|
32212
|
+
"lionchat_report_alerts_update"
|
|
32213
|
+
]
|
|
32214
|
+
},
|
|
32215
|
+
{
|
|
32216
|
+
"id": "lionchat_report_alerts_send_now",
|
|
32217
|
+
"method": "POST",
|
|
32218
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts/{id}/send_now",
|
|
32219
|
+
"title": "Enviar Aviso Agora (teste real)",
|
|
32220
|
+
"description": "[POST] Dispara o aviso AGORA como teste: compoe com os numeros de ontem e ENVIA DE VERDADE no destino configurado — o grupo/conversa do cliente RECEBE a mensagem. Exige confirm:true SEMPRE, nomeando o destino ('vou mandar o resumo agora no grupo X, confirma?'). Nao consome o envio automatico do dia (o das send_hour continua saindo) e funciona mesmo com o aviso desligado. Resposta 200 = entrou na fila (o resultado real aparece no historico ~3-20 min depois, via report_alerts_deliveries, marcado test_mode:true). 429 = trava de 60s por aviso (um teste ja esta a caminho — nunca repita o clique). Pra ver o TEXTO sem enviar nada, use report_alerts_preview.",
|
|
32221
|
+
"category": "Relatorios",
|
|
32222
|
+
"confirm_required": true,
|
|
32223
|
+
"params": [
|
|
32224
|
+
{
|
|
32225
|
+
"name": "id",
|
|
32226
|
+
"type": "integer",
|
|
32227
|
+
"location": "path",
|
|
32228
|
+
"required": true,
|
|
32229
|
+
"description": "Id do aviso"
|
|
32230
|
+
}
|
|
32231
|
+
],
|
|
32232
|
+
"returns": "200 sem corpo (na fila) | 429 (trava de 60s)",
|
|
32233
|
+
"common_use_cases": [
|
|
32234
|
+
"Validar o envio de ponta a ponta com o cliente acompanhando o grupo"
|
|
32235
|
+
],
|
|
32236
|
+
"related_tools": [
|
|
32237
|
+
"lionchat_report_alerts_preview",
|
|
32238
|
+
"lionchat_report_alerts_deliveries"
|
|
32239
|
+
]
|
|
32240
|
+
},
|
|
32241
|
+
{
|
|
32242
|
+
"id": "lionchat_report_alerts_deliveries",
|
|
32243
|
+
"method": "GET",
|
|
32244
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts/{id}/deliveries",
|
|
32245
|
+
"title": "Historico de Envios do Aviso",
|
|
32246
|
+
"description": "[GET] Historico dos envios do aviso (90 dias, ate 100 linhas, mais novo primeiro): {payload:[{id, status, mode, test_mode, error_message, content_snapshot, created_at}]}. status: sent (saiu, aguardando recibo) -> confirmed (ENTREGUE com recibo do canal — o selo verde so existe com evidencia) | send_failed (recusado, motivo em error_message) | skipped_late (nao saiu no horario — sistema congestionado) | error (falha antes do envio). mode: ai (texto escrito pela IA) ou system/default (texto padrao). content_snapshot = o TEXTO EXATO enviado, congelado (apagar a mensagem na conversa nao apaga o historico). test_mode:true = disparo manual de teste.",
|
|
32247
|
+
"category": "Relatorios",
|
|
32248
|
+
"params": [
|
|
32249
|
+
{
|
|
32250
|
+
"name": "id",
|
|
32251
|
+
"type": "integer",
|
|
32252
|
+
"location": "path",
|
|
32253
|
+
"required": true,
|
|
32254
|
+
"description": "Id do aviso"
|
|
32255
|
+
}
|
|
32256
|
+
],
|
|
32257
|
+
"returns": "{payload: [envios]}",
|
|
32258
|
+
"common_use_cases": [
|
|
32259
|
+
"Auditar o que a IA escreveu em cada dia",
|
|
32260
|
+
"Investigar 'o grupo nao recebeu' (status + error_message)",
|
|
32261
|
+
"Conferir se o teste do send_now chegou"
|
|
32262
|
+
],
|
|
32263
|
+
"related_tools": [
|
|
32264
|
+
"lionchat_report_alerts_send_now",
|
|
32265
|
+
"lionchat_report_alerts_list"
|
|
32266
|
+
]
|
|
32267
|
+
},
|
|
32268
|
+
{
|
|
32269
|
+
"id": "lionchat_report_alerts_preview",
|
|
32270
|
+
"method": "POST",
|
|
32271
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts/preview",
|
|
32272
|
+
"title": "Previa do Aviso (nao envia nada)",
|
|
32273
|
+
"description": "[POST] Gera a PREVIA do texto do aviso SEM enviar nada — mesmo motor do envio real (blocos de ontem + IA da conta quando ha prompt/chave). ASSINCRONA: devolve {token} na hora e o texto sai depois; leia com report_alerts_preview_status (o job roda em fila de baixa prioridade — normalmente 5-60s, pode passar de 2 min com a plataforma cheia; o resultado fica guardado 5 min). O aviso NEM PRECISA existir: basta custom_dashboard_id (+ text_prompt opcional). Use SEMPRE antes de ligar um aviso novo ou depois de mudar o prompt.",
|
|
32274
|
+
"category": "Relatorios",
|
|
32275
|
+
"body_wrapper": "report_alert",
|
|
32276
|
+
"params": [
|
|
32277
|
+
{
|
|
32278
|
+
"name": "custom_dashboard_id",
|
|
32279
|
+
"type": "integer",
|
|
32280
|
+
"location": "body",
|
|
32281
|
+
"required": true,
|
|
32282
|
+
"description": "Relatorio personalizado a resumir"
|
|
32283
|
+
},
|
|
32284
|
+
{
|
|
32285
|
+
"name": "text_prompt",
|
|
32286
|
+
"type": "string",
|
|
32287
|
+
"location": "body",
|
|
32288
|
+
"required": false,
|
|
32289
|
+
"description": "Instrucoes pra IA (mesmas regras do create; ate 2000 chars)"
|
|
32290
|
+
},
|
|
32291
|
+
{
|
|
32292
|
+
"name": "period",
|
|
32293
|
+
"type": "string",
|
|
32294
|
+
"location": "body",
|
|
32295
|
+
"required": false,
|
|
32296
|
+
"description": "So 'yesterday' hoje (default)"
|
|
32297
|
+
}
|
|
32298
|
+
],
|
|
32299
|
+
"returns": "{token: hex de 32 chars}",
|
|
32300
|
+
"common_use_cases": [
|
|
32301
|
+
"Validar o texto com o cliente ANTES de ligar o envio automatico"
|
|
32302
|
+
],
|
|
32303
|
+
"related_tools": [
|
|
32304
|
+
"lionchat_report_alerts_preview_status",
|
|
32305
|
+
"lionchat_report_alerts_create"
|
|
32306
|
+
]
|
|
32307
|
+
},
|
|
32308
|
+
{
|
|
32309
|
+
"id": "lionchat_report_alerts_preview_status",
|
|
32310
|
+
"method": "GET",
|
|
32311
|
+
"path": "/api/v2/accounts/{account_id}/report_alerts/preview_status",
|
|
32312
|
+
"title": "Resultado da Previa do Aviso",
|
|
32313
|
+
"description": "[GET] Le o resultado da previa pelo token: {status:'pending'} (job ainda na fila — espere 5-10s e tente de novo, ate ~2-3 min) | {status:'ready', text, mode} (texto pronto; mode 'ai' ou 'default') | {status:'error', error}. O resultado expira em 5 min apos ficar pronto; token fora do formato (32 hex) = 422. Se expirar, rode report_alerts_preview de novo (cada rodada com IA gasta a chave OpenAI da conta — nao repita a toa).",
|
|
32314
|
+
"category": "Relatorios",
|
|
32315
|
+
"params": [
|
|
32316
|
+
{
|
|
32317
|
+
"name": "token",
|
|
32318
|
+
"type": "string",
|
|
32319
|
+
"location": "query",
|
|
32320
|
+
"required": true,
|
|
32321
|
+
"description": "Token devolvido pelo report_alerts_preview (32 caracteres hex)"
|
|
32322
|
+
}
|
|
32323
|
+
],
|
|
32324
|
+
"returns": "{status, text?, mode?, error?}",
|
|
32325
|
+
"common_use_cases": [
|
|
32326
|
+
"Polling do texto da previa"
|
|
32327
|
+
],
|
|
32328
|
+
"related_tools": [
|
|
32329
|
+
"lionchat_report_alerts_preview"
|
|
32330
|
+
]
|
|
31832
32331
|
}
|
|
31833
32332
|
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionchat/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.18.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",
|