@lionchat/mcp-server 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/instructions.md +10 -3
- package/dist/docs/resources/best-practices.md +18 -0
- package/dist/docs/resources/conversation-flows.md +11 -0
- package/dist/docs/resources/data-model.md +32 -4
- package/dist/docs/resources/filtros-e-relatorios.md +44 -1
- package/dist/docs/resources/flowbuilder-design-guide.md +17 -9
- package/dist/docs/resources/flowbuilder-patterns.md +42 -15
- package/dist/docs/resources/formularios-publicos.md +309 -220
- package/dist/docs/resources/glossary.md +15 -20
- package/dist/docs/resources/reports-guide.md +150 -0
- package/dist/docs/resources/troubleshooting.md +67 -12
- package/dist/sanitize.d.ts +2 -0
- package/dist/sanitize.js +6 -0
- package/dist/sanitize.js.map +1 -1
- package/dist/tools.js +58 -13
- package/dist/tools.js.map +1 -1
- package/endpoints.json +448 -242
- package/package.json +1 -1
package/endpoints.json
CHANGED
|
@@ -698,7 +698,7 @@
|
|
|
698
698
|
"method": "POST",
|
|
699
699
|
"path": "/api/v1/accounts/{account_id}/contacts/filter",
|
|
700
700
|
"title": "Filtrar Contatos",
|
|
701
|
-
"description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422. [2026-07-25] Nova chave id (id interno do contato, equal_to/not_equal_to) — serve pra exportar/checar UM contato especifico.",
|
|
701
|
+
"description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422. [2026-07-25] Nova chave id (id interno do contato, equal_to/not_equal_to) — serve pra exportar/checar UM contato especifico. NOTA 18/08: data FIXA com is_greater_than/is_less_than corta o dia no FUSO DA CONTA (padrao America/Sao_Paulo), nao mais em UTC — mesmo criterio das datas relativas.",
|
|
702
702
|
"category": "Contatos",
|
|
703
703
|
"params": [
|
|
704
704
|
{
|
|
@@ -904,7 +904,7 @@
|
|
|
904
904
|
"method": "POST",
|
|
905
905
|
"path": "/api/v1/accounts/{account_id}/contacts/import",
|
|
906
906
|
"title": "Importar Contatos",
|
|
907
|
-
"description": "Importa contatos em lote via CSV. **Requer perfil Administrador.**. Cria novo contato. Obrigatórios: import_file. Valida unicidade quando aplicável. Retorna o contato criado com ID atribuído.",
|
|
907
|
+
"description": "Importa contatos em lote via CSV. **Requer perfil Administrador.**. Cria novo contato. Obrigatórios: import_file. Valida unicidade quando aplicável. Retorna o contato criado com ID atribuído. REGRA DO DDI (18/08): o telefone precisa vir COM o codigo do pais (5511988887777 ou +351912345678; o + e opcional). O sistema NAO completa mais 55: sem DDI ou numero que nao existe em pais nenhum = ERRO na linha (o contato nao e criado; o relatorio de erros mostra linha a linha); comecando com 0 = recusado; brasileiro com 55 e 12-13 digitos e aceito mesmo no formato antigo sem o 9o digito.",
|
|
908
908
|
"category": "Contatos",
|
|
909
909
|
"params": [
|
|
910
910
|
{
|
|
@@ -1433,7 +1433,7 @@
|
|
|
1433
1433
|
"method": "POST",
|
|
1434
1434
|
"path": "/api/v1/accounts/{account_id}/conversations/filter",
|
|
1435
1435
|
"title": "Filtrar Conversas",
|
|
1436
|
-
"description": "Filtra conversas com condicoes avancadas (payload de condicoes, mesmas da tela). Ordenacao fixa last_activity_at DESC, 25/pagina.\n\nCHAVES FILTRAVEIS (attribute_key -> operadores): status, chat_type, priority (equal_to/not_equal_to); assignee_id, inbox_id, team_id, campaign_id, captain_assistant_id, labels (equal_to/not_equal_to/is_present/is_not_present); display_id (equal_to/not_equal_to/contains/does_not_contain); created_at, last_activity_at (is_greater_than/is_less_than/days_before — valor de data); browser_language, conversation_language, referer, mail_subject; card_funnel_stage (conversa POR CARD do Kanban — valor 'funnel:<id>' ou 'stage:<id>:<chave_etapa>'); QUALQUER outra chave = atributo personalizado (use custom_attribute_type na condicao: 'conversation_attribute' ou 'contact_attribute').\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422 'Operador invalido' (ex: labels NAO aceita 'includes' — use equal_to). [2026-07-25] O operador contains em display_id agora funciona de verdade (busca por trecho do numero da conversa; antes dava erro de banco).",
|
|
1436
|
+
"description": "Filtra conversas com condicoes avancadas (payload de condicoes, mesmas da tela). Ordenacao fixa last_activity_at DESC, 25/pagina.\n\nCHAVES FILTRAVEIS (attribute_key -> operadores): status, chat_type, priority (equal_to/not_equal_to); assignee_id, inbox_id, team_id, campaign_id, captain_assistant_id, labels (equal_to/not_equal_to/is_present/is_not_present); display_id (equal_to/not_equal_to/contains/does_not_contain); created_at, last_activity_at (is_greater_than/is_less_than/days_before — valor de data); browser_language, conversation_language, referer, mail_subject; card_funnel_stage (conversa POR CARD do Kanban — valor 'funnel:<id>' ou 'stage:<id>:<chave_etapa>'); QUALQUER outra chave = atributo personalizado (use custom_attribute_type na condicao: 'conversation_attribute' ou 'contact_attribute').\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422 'Operador invalido' (ex: labels NAO aceita 'includes' — use equal_to). [2026-07-25] O operador contains em display_id agora funciona de verdade (busca por trecho do numero da conversa; antes dava erro de banco). NOTA 18/08: data FIXA com is_greater_than/is_less_than corta o dia no FUSO DA CONTA (padrao America/Sao_Paulo), nao mais em UTC — mesmo criterio das datas relativas.",
|
|
1437
1437
|
"category": "Conversas",
|
|
1438
1438
|
"params": [
|
|
1439
1439
|
{
|
|
@@ -3984,7 +3984,7 @@
|
|
|
3984
3984
|
"method": "POST",
|
|
3985
3985
|
"path": "/api/v1/accounts/{account_id}/kanban_items/import",
|
|
3986
3986
|
"title": "Importar Items",
|
|
3987
|
-
"description": "Importa cards em massa (job async).",
|
|
3987
|
+
"description": "Importa cards em massa (job async). REGRA DO DDI (18/08): telefone sem codigo do pais e considerado invalido e o card e criado SEM contato e SEM conversa, EM SILENCIO (diferente do import de contatos, que da erro na linha). Oriente a planilha a vir com DDI.",
|
|
3988
3988
|
"category": "Itens",
|
|
3989
3989
|
"params": [
|
|
3990
3990
|
{
|
|
@@ -9540,7 +9540,7 @@
|
|
|
9540
9540
|
"method": "GET",
|
|
9541
9541
|
"path": "/api/v1/accounts/{account_id}/flows",
|
|
9542
9542
|
"title": "Listar Flows",
|
|
9543
|
-
"description": "Lista
|
|
9543
|
+
"description": "Lista os fluxos da conta. SEM paginacao e SEM meta: devolve todos de uma vez, com os filtros opcionais inbox_id, with_webhook_trigger e with_campaign_trigger. Use a lista pra ESCOLHER e FILTRAR fluxos (id, name, description, flow_type, conversation_mode, active, inbox_ids/inboxes, tags, session_stats = totais de execucao). Pra ler o DESENHO de um fluxo (blocos, conexoes, variaveis) use flows_show — a lista nao e o lugar de inspecionar blocos. Cada flow traz o campo tags (array de strings, 22/07) — use pra organizar/agrupar.",
|
|
9544
9544
|
"category": "Flows",
|
|
9545
9545
|
"params": [
|
|
9546
9546
|
{
|
|
@@ -9558,20 +9558,24 @@
|
|
|
9558
9558
|
"description": "Filtra os flows vinculados a essa caixa de entrada."
|
|
9559
9559
|
}
|
|
9560
9560
|
],
|
|
9561
|
-
"returns": "Objeto { data: [flows] } — a lista fica em data, sem meta e sem
|
|
9561
|
+
"returns": "Objeto { data: [flows] } — a lista fica em data, sem meta e sem paginacao. Campos de cada item: id, name, description, tool_name, tool_description, flow_type, conversation_mode, active, inbox_ids, inboxes[{id,name,channel_type}], tags, session_stats{total,active,waiting,completed,exited,error}, created_at, updated_at. ATENCAO (ago/2026): hoje cada item ainda carrega flow_data inteiro e metricas por bloco, o que deixa a resposta MUITO pesada em conta com muitos fluxos/execucoes (ate 19 MB medidos) — NAO dependa disso: esta em andamento a lista leve, que tira flow_data/node_metrics/waiting_counts/variables e passa a trazer `triggers` (gatilhos do bloco Inicio). Pra flow_data use flows_show; pra conferir gatilho duplicado use flows_check_conflicts.",
|
|
9562
9562
|
"common_use_cases": [
|
|
9563
9563
|
"Dashboard: contar/exibir flows",
|
|
9564
9564
|
"Buscar com filtros antes de outra operação",
|
|
9565
9565
|
"Auditoria/relatório de flows ativas"
|
|
9566
9566
|
],
|
|
9567
|
-
"related_tools": [
|
|
9567
|
+
"related_tools": [
|
|
9568
|
+
"lionchat_flows_show",
|
|
9569
|
+
"lionchat_flows_check_conflicts",
|
|
9570
|
+
"lionchat_flows_toggle"
|
|
9571
|
+
]
|
|
9568
9572
|
},
|
|
9569
9573
|
{
|
|
9570
9574
|
"id": "lionchat_flows_create",
|
|
9571
9575
|
"method": "POST",
|
|
9572
9576
|
"path": "/api/v1/accounts/{account_id}/flows",
|
|
9573
9577
|
"title": "Criar Flow",
|
|
9574
|
-
"description": "Cria um flow (FlowBuilder) na conta. Requer Admin. flow_data segue formato Vue Flow {nodes:[], edges:[]}. NODE SCHEMA — start: {label}. send_message: {label, messageItems:[{id, type:'text', content}]} handles: success/no_response/error. wait_response: {label, waitTime, waitUnit:'minutes'|'seconds', validation:'any'|'options'|'regex', acceptedOptions:['1','2'] (se options), regexPattern (se regex), invalidMessage, maxRetries:3, saveTo:'variable'|'contact_name'|'contact_email'|'contact_phone'|'contact_attr'|'conversation_attr'|'', saveVariable, saveAttrKey} — quando validation='options' os handles ficam 'option_{val}' + 'timeout'; senão 'success' + 'timeout' — NUNCA precisa de condition node depois. condition: {label, conditions:[{id, label, field, operator, value}]} handles = 'cond_0','cond_1',... (INDICE no array, NAO o id) + 'default'. action: {label, items:[{key, config:{...}}]} keys comuns assign_team({team_id}), assign_agent({agent_id}), add_label({labels:['slug',...]}), remove_label({labels}), change_status({status}), change_priority({priority}), mute_conversation({}), add_private_note({content}), create_kanban_item({funnel_id, funnel_stage,...}), move_kanban_stage({funnel_id, funnel_stage}), deactivate_flow({}), assign_captain({assistant_id}). api: {label, method, url, headers:[{key,value}], body, apiResponseVar}. set_variable: {label, variables:[{name, value}]}. wait: {label, waitTime, waitUnit}. EDGE SCHEMA: {id, source, target, sourceHandle (opcional, OBRIGATORIO casar com handle exposto pelo node source), type:'deletable', animated:true}. ERROS COMUNS QUE DEVEM SER EVITADOS: (1) action usa items[].config NAO items[].params; (2) send_message usa messageItems NAO items; (3) wait_response com validation='options' NAO precisa de condition node — use sourceHandle='option_X' diretamente; (4) sourceHandle inventado tipo 'c1','c2' nao funciona — sempre usar o handle real; (5) inbox_ids precisa vir aninhado em {flow:{inbox_ids:[]}} no PUT bruto, mas no MCP basta inbox_ids no nivel raiz. Cria novo flow. Obrigatórios: name, channel_type. Valida unicidade quando aplicável. Retorna o flow criado com ID atribuído. POSITIONING (CRITICO): cada node DEVE ter position:{x,y}. Sem isso, todos empilham no canvas no (0,0). Regra basica de layout: start em {x:50,y:300}, espaco horizontal +320 entre nodes sequenciais, ramificacoes em +/-150 vertical. ANTES DE GERAR JSON consulte o resource lionchat://docs/flowbuilder-design-guide (schema completo de cada tipo de node, handles expostos, erros comuns, checklist) e lionchat://docs/flowbuilder-patterns (10 templates prontos pra adaptar). BRAINSTORMING: se faltou info critica (canal, gatilho, conteudo), use o prompt create_flow_brainstorm como banco de perguntas sugeridas — pergunte SO o que falta, sem checklist forcado. APOS GERAR: rode o checklist da secao 6 do design guide antes de submeter (1 node start, todo node com id unico + position + data, todo edge com sourceHandle valido). NUNCA invente sourceHandle (no condition use cond_0/cond_1/default, no wait_response options use option_X, no AI intent use intent_<opcao>). IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. conversation_mode: 'individual' (default) | 'group'. Sticky note (type 'note'): data usa title+body+color(yellow|teal|blue|violet|pink|orange|slate)+width+height — NUNCA 'content'. ORGANIZAÇÃO: preencha tags ao criar (reutilizando as tags já existentes nos flows da conta — veja flows_list) pra manter a lista organizada. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas).",
|
|
9578
|
+
"description": "Cria um flow (FlowBuilder) na conta. Requer Admin. flow_data segue formato Vue Flow {nodes:[], edges:[]}. NODE SCHEMA — start: {label}. send_message: {label, messageItems:[{id, type:'text', content}]} handles: success/no_response/error. wait_response: {label, waitTime, waitUnit:'minutes'|'seconds', validation:'any'|'options'|'regex', acceptedOptions:['1','2'] (se options), regexPattern (se regex), invalidMessage, maxRetries:3, saveTo:'variable'|'contact_name'|'contact_email'|'contact_phone'|'contact_attr'|'conversation_attr'|'', saveVariable, saveAttrKey} — quando validation='options' os handles ficam 'option_{val}' + 'timeout'; senão 'success' + 'timeout' — NUNCA precisa de condition node depois. condition: {label, conditions:[{id, label, field, operator, value}]} handles = 'cond_0','cond_1',... (INDICE no array, NAO o id) + 'default'. action: {label, items:[{key, config:{...}}]} keys comuns assign_team({team_id}), assign_agent({agent_id}), add_label({labels:['slug',...]}), remove_label({labels}), change_status({status}), change_priority({priority}), mute_conversation({}), add_private_note({content}), create_kanban_item({funnel_id, funnel_stage,...}), move_kanban_stage({funnel_id, funnel_stage}), deactivate_flow({}), assign_captain({assistant_id}). api: {label, method, url, headers:[{key,value}], body, apiResponseVar}. set_variable: {label, variables:[{name, value}]}. wait: {label, waitTime, waitUnit}. EDGE SCHEMA: {id, source, target, sourceHandle (opcional, OBRIGATORIO casar com handle exposto pelo node source), type:'deletable', animated:true}. ERROS COMUNS QUE DEVEM SER EVITADOS: (1) action usa items[].config NAO items[].params; (2) send_message usa messageItems NAO items; (3) wait_response com validation='options' NAO precisa de condition node — use sourceHandle='option_X' diretamente; (4) sourceHandle inventado tipo 'c1','c2' nao funciona — sempre usar o handle real; (5) inbox_ids precisa vir aninhado em {flow:{inbox_ids:[]}} no PUT bruto, mas no MCP basta inbox_ids no nivel raiz. Cria novo flow. Obrigatórios: name, channel_type. Valida unicidade quando aplicável. Retorna o flow criado com ID atribuído. POSITIONING (CRITICO): cada node DEVE ter position:{x,y}. Sem isso, todos empilham no canvas no (0,0). Regra basica de layout: start em {x:50,y:300}, espaco horizontal +320 entre nodes sequenciais, ramificacoes em +/-150 vertical. ANTES DE GERAR JSON consulte o resource lionchat://docs/flowbuilder-design-guide (schema completo de cada tipo de node, handles expostos, erros comuns, checklist) e lionchat://docs/flowbuilder-patterns (10 templates prontos pra adaptar). BRAINSTORMING: se faltou info critica (canal, gatilho, conteudo), use o prompt create_flow_brainstorm como banco de perguntas sugeridas — pergunte SO o que falta, sem checklist forcado. APOS GERAR: rode o checklist da secao 6 do design guide antes de submeter (1 node start, todo node com id unico + position + data, todo edge com sourceHandle valido). NUNCA invente sourceHandle (no condition use cond_0/cond_1/default, no wait_response options use option_X, no AI intent use intent_<opcao>). IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. conversation_mode: 'individual' (default) | 'group'. Sticky note (type 'note'): data usa title+body+color(yellow|teal|blue|violet|pink|orange|slate)+width+height — NUNCA 'content'. ORGANIZAÇÃO: preencha tags ao criar (reutilizando as tags já existentes nos flows da conta — veja flows_list) pra manter a lista organizada. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente.",
|
|
9575
9579
|
"category": "Flows",
|
|
9576
9580
|
"params": [
|
|
9577
9581
|
{
|
|
@@ -9666,7 +9670,7 @@
|
|
|
9666
9670
|
"method": "PUT",
|
|
9667
9671
|
"path": "/api/v1/accounts/{account_id}/flows/{id}",
|
|
9668
9672
|
"title": "Atualizar Flow",
|
|
9669
|
-
"description": "Atualiza nome, descricao, caixas de entrada ou dados dos blocos. Mesmo schema de flow_data do tool lionchat_flows_create — consulte a descricao daquele tool para o schema completo dos nodes (start, send_message, wait_response, condition, action, api, set_variable) e dos edges. RECAP RAPIDO: action items[].config (nao params); send_message messageItems (nao items); wait_response validation='options' gera handles 'option_X' (dispensa condition node); edges sourceHandle DEVE casar com handle real do node source. Atualiza campos do flow existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, description, inbox_ids, flow_data. IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas).",
|
|
9673
|
+
"description": "Atualiza nome, descricao, caixas de entrada ou dados dos blocos. Mesmo schema de flow_data do tool lionchat_flows_create — consulte a descricao daquele tool para o schema completo dos nodes (start, send_message, wait_response, condition, action, api, set_variable) e dos edges. RECAP RAPIDO: action items[].config (nao params); send_message messageItems (nao items); wait_response validation='options' gera handles 'option_X' (dispensa condition node); edges sourceHandle DEVE casar com handle real do node source. Atualiza campos do flow existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, description, inbox_ids, flow_data. IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente.",
|
|
9670
9674
|
"category": "Flows",
|
|
9671
9675
|
"params": [
|
|
9672
9676
|
{
|
|
@@ -9881,6 +9885,13 @@
|
|
|
9881
9885
|
"location": "body",
|
|
9882
9886
|
"required": false,
|
|
9883
9887
|
"description": "Janelas de disponibilidade"
|
|
9888
|
+
},
|
|
9889
|
+
{
|
|
9890
|
+
"name": "slug",
|
|
9891
|
+
"type": "string",
|
|
9892
|
+
"location": "body",
|
|
9893
|
+
"required": false,
|
|
9894
|
+
"description": "Endereco do link publico do tipo de evento. EDITAVEL (18/08): normalizado no servidor, 3..60 chars, minusculas+numeros+hifen, unico. Vazio = mantem; duplicado = 422. Trocar derruba link ja enviado, codigo de incorporar e anuncio — NAO quebra agendamentos feitos, IA nem links de cancelar/remarcar (trabalham por id)."
|
|
9884
9895
|
}
|
|
9885
9896
|
],
|
|
9886
9897
|
"returns": "tipo de evento criado (com novo ID)",
|
|
@@ -9958,6 +9969,13 @@
|
|
|
9958
9969
|
"location": "body",
|
|
9959
9970
|
"required": false,
|
|
9960
9971
|
"description": "Ativo?"
|
|
9972
|
+
},
|
|
9973
|
+
{
|
|
9974
|
+
"name": "slug",
|
|
9975
|
+
"type": "string",
|
|
9976
|
+
"location": "body",
|
|
9977
|
+
"required": false,
|
|
9978
|
+
"description": "Endereco do link publico do tipo de evento. EDITAVEL (18/08): normalizado no servidor, 3..60 chars, minusculas+numeros+hifen, unico. Vazio = mantem; duplicado = 422. Trocar derruba link ja enviado, codigo de incorporar e anuncio — NAO quebra agendamentos feitos, IA nem links de cancelar/remarcar (trabalham por id)."
|
|
9961
9979
|
}
|
|
9962
9980
|
],
|
|
9963
9981
|
"returns": "tipo de evento atualizado",
|
|
@@ -20141,66 +20159,6 @@
|
|
|
20141
20159
|
"lionchat_voip_calls_show"
|
|
20142
20160
|
]
|
|
20143
20161
|
},
|
|
20144
|
-
{
|
|
20145
|
-
"id": "lionchat_voip_calls_list_3",
|
|
20146
|
-
"method": "GET",
|
|
20147
|
-
"path": "/api/v1/accounts/{account_id}/voip/settings/balance",
|
|
20148
|
-
"title": "Saldo VoIP",
|
|
20149
|
-
"description": "Retorna o saldo disponivel no provedor VoIP. Lista chamadas VoIP paginados (per_page padrão 25, máximo 100). Retorna meta (contadores) + payload (array de chamada VoIP).",
|
|
20150
|
-
"category": "Chamadas",
|
|
20151
|
-
"params": [],
|
|
20152
|
-
"returns": "Objeto unico com a resposta crua do provedor Zenvia (endpoint /saldo) — NAO e lista de ligacoes e nao tem meta nem payload. O valor do saldo vem em dados.saldo (o painel le exatamente `data.dados.saldo`).",
|
|
20153
|
-
"common_use_cases": [
|
|
20154
|
-
"Dashboard: contar/exibir chamadas VoIP",
|
|
20155
|
-
"Buscar com filtros antes de outra operação",
|
|
20156
|
-
"Auditoria/relatório de chamadas VoIP ativas"
|
|
20157
|
-
],
|
|
20158
|
-
"related_tools": [
|
|
20159
|
-
"lionchat_voip_calls_list",
|
|
20160
|
-
"lionchat_voip_calls_create",
|
|
20161
|
-
"lionchat_voip_calls_show"
|
|
20162
|
-
]
|
|
20163
|
-
},
|
|
20164
|
-
{
|
|
20165
|
-
"id": "lionchat_voip_calls_list_4",
|
|
20166
|
-
"method": "GET",
|
|
20167
|
-
"path": "/api/v1/accounts/{account_id}/voip/settings/recharge_url",
|
|
20168
|
-
"title": "URL de Recarga VoIP",
|
|
20169
|
-
"description": "Retorna URL para recarga de creditos VoIP. Lista chamadas VoIP paginados (per_page padrão 25, máximo 100). Retorna meta (contadores) + payload (array de chamada VoIP).",
|
|
20170
|
-
"category": "Chamadas",
|
|
20171
|
-
"params": [],
|
|
20172
|
-
"returns": "NAO devolve chamadas. Este endpoint repassa cru a resposta da Zenvia para a URL de recarga de credito: um OBJETO (ex.: { sucesso, url, ... }, chaves conforme a Zenvia), sem meta/payload. Em falha de parse vem { status, body }.",
|
|
20173
|
-
"common_use_cases": [
|
|
20174
|
-
"Dashboard: contar/exibir chamadas VoIP",
|
|
20175
|
-
"Buscar com filtros antes de outra operação",
|
|
20176
|
-
"Auditoria/relatório de chamadas VoIP ativas"
|
|
20177
|
-
],
|
|
20178
|
-
"related_tools": [
|
|
20179
|
-
"lionchat_voip_calls_list",
|
|
20180
|
-
"lionchat_voip_calls_create",
|
|
20181
|
-
"lionchat_voip_calls_show"
|
|
20182
|
-
]
|
|
20183
|
-
},
|
|
20184
|
-
{
|
|
20185
|
-
"id": "lionchat_voip_calls_list_5",
|
|
20186
|
-
"method": "GET",
|
|
20187
|
-
"path": "/api/v1/accounts/{account_id}/voip/settings/recharge_report",
|
|
20188
|
-
"title": "Relatorio de Recarga VoIP",
|
|
20189
|
-
"description": "Retorna historico de recargas. Lista chamadas VoIP paginados (per_page padrão 25, máximo 100). Retorna meta (contadores) + payload (array de chamada VoIP).",
|
|
20190
|
-
"category": "Chamadas",
|
|
20191
|
-
"params": [],
|
|
20192
|
-
"returns": "Repasse direto da resposta da Zenvia (/minha-conta/relatorio-recarga): objeto no formato dela, tipicamente com o campo 'sucesso' mais os dados da recarga. Nao tem meta, nao tem payload e nao sao chamadas VoIP — e o historico de RECARGAS de credito. Se a Zenvia devolver algo que nao e JSON, vem { status, body }.",
|
|
20193
|
-
"common_use_cases": [
|
|
20194
|
-
"Dashboard: contar/exibir chamadas VoIP",
|
|
20195
|
-
"Buscar com filtros antes de outra operação",
|
|
20196
|
-
"Auditoria/relatório de chamadas VoIP ativas"
|
|
20197
|
-
],
|
|
20198
|
-
"related_tools": [
|
|
20199
|
-
"lionchat_voip_calls_list",
|
|
20200
|
-
"lionchat_voip_calls_create",
|
|
20201
|
-
"lionchat_voip_calls_show"
|
|
20202
|
-
]
|
|
20203
|
-
},
|
|
20204
20162
|
{
|
|
20205
20163
|
"id": "lionchat_voip_calls_create_4",
|
|
20206
20164
|
"method": "POST",
|
|
@@ -22871,7 +22829,7 @@
|
|
|
22871
22829
|
"description": "ID da caixa de entrada"
|
|
22872
22830
|
}
|
|
22873
22831
|
],
|
|
22874
|
-
"returns": "{
|
|
22832
|
+
"returns": "{window_hours, eligible_channel, bulk_retry_running, groups: {billing, transient, window_expired, permanent, limit, spam_limit, account_locked}, group_details (cada classe + campaign + partial + accepted_then_failed + deleted, itens ate 30), campaign_count, partial_count, accepted_then_failed_count, deleted_count, retryable_count, total}. NOVO 18/08: account_locked = conta comercial TRANCADA pela Meta (erro 131031, nunca reenviavel); accepted_then_failed = aceita pelo canal e recusada depois (tem recibo — reenviar entregaria em dobro); 'partial' MUDOU de significado: agora e so envio MULTI-anexo com recibo parcial.",
|
|
22875
22833
|
"common_use_cases": [
|
|
22876
22834
|
"Diagnosticar por que mensagens nao chegaram (agrupado por motivo, com erro real)",
|
|
22877
22835
|
"Ver quantas falhas sao reenviaveis antes de disparar o reenvio em massa",
|
|
@@ -22936,7 +22894,7 @@
|
|
|
22936
22894
|
"type": "string",
|
|
22937
22895
|
"location": "body",
|
|
22938
22896
|
"required": false,
|
|
22939
|
-
"description": "
|
|
22897
|
+
"description": "Classe a cancelar: billing, transient, window_expired, permanent, limit, spam_limit, account_locked, campaign, partial, accepted_then_failed. Ausente = todas. ATENCAO 18/08: 'partial' deixou de atingir mensagem de 1 anexo com recibo — essas agora saem por 'accepted_then_failed'. Valor fora da lista = 422 invalid_classification."
|
|
22940
22898
|
}
|
|
22941
22899
|
],
|
|
22942
22900
|
"returns": "{cancelled: N} — quantidade de mensagens canceladas",
|
|
@@ -24982,7 +24940,7 @@
|
|
|
24982
24940
|
"method": "GET",
|
|
24983
24941
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations",
|
|
24984
24942
|
"title": "Listar Integração e-Clínica",
|
|
24985
|
-
"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).",
|
|
24943
|
+
"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}}.",
|
|
24986
24944
|
"category": "Integracoes",
|
|
24987
24945
|
"params": [],
|
|
24988
24946
|
"returns": "200 {payload: {eclinica_integrations: [...]}}",
|
|
@@ -25170,7 +25128,7 @@
|
|
|
25170
25128
|
"description": "ID do contato"
|
|
25171
25129
|
}
|
|
25172
25130
|
],
|
|
25173
|
-
"returns": "{
|
|
25131
|
+
"returns": "{payload: [...]} ordenado por favorito e depois data. source tem 5 origens: contact, kanban, conversation, agenda e lead_form (NOVO 18/08 — arquivos que o lead enviou num formulario publico; itens trazem lead_form_id e lead_form_name; aparecem depois que a resposta e ligada ao contato). Anexo de lead_form aceita mirror (renomear/favoritar) mas NAO aceita destroy_mirror (422) — o arquivo pertence a resposta do formulario.",
|
|
25174
25132
|
"common_use_cases": [
|
|
25175
25133
|
"Ver todos os arquivos de um cliente num lugar só"
|
|
25176
25134
|
],
|
|
@@ -25502,6 +25460,350 @@
|
|
|
25502
25460
|
"lionchat_journey_funnel_reports"
|
|
25503
25461
|
]
|
|
25504
25462
|
},
|
|
25463
|
+
{
|
|
25464
|
+
"id": "lionchat_custom_dashboards_list",
|
|
25465
|
+
"method": "GET",
|
|
25466
|
+
"path": "/api/v2/accounts/{account_id}/custom_dashboards",
|
|
25467
|
+
"title": "Relatorios Personalizados (listar)",
|
|
25468
|
+
"description": "[GET] Lista TODOS os relatorios personalizados da conta (a aba 'Personalizados' em Relatorios), cada um JA com o array `widgets` completo — id e desenho de cada bloco. E daqui que sai o `widget_id` pra calcular um bloco. So administrador (401 caso contrario). ATENCAO: NAO tem paginacao nem filtro. Com muitos relatorios cheios a resposta pode vir CORTADA no limite do conector — se vier o aviso de corte, NUNCA use essa lista pra montar um `custom_dashboards_update`: voce apagaria os blocos que nao chegaram.",
|
|
25469
|
+
"category": "Relatorios",
|
|
25470
|
+
"params": [],
|
|
25471
|
+
"returns": "Array de { id, name, position, widgets: [...], created_at }",
|
|
25472
|
+
"common_use_cases": [
|
|
25473
|
+
"Descobrir quais relatorios personalizados o cliente montou",
|
|
25474
|
+
"Pegar o widget_id de um bloco pra calcular o numero dele",
|
|
25475
|
+
"Ler o desenho de um bloco antes de alterar o relatorio"
|
|
25476
|
+
],
|
|
25477
|
+
"related_tools": [
|
|
25478
|
+
"lionchat_custom_dashboards_widget_data",
|
|
25479
|
+
"lionchat_custom_dashboards_update"
|
|
25480
|
+
]
|
|
25481
|
+
},
|
|
25482
|
+
{
|
|
25483
|
+
"id": "lionchat_custom_dashboards_widget_data",
|
|
25484
|
+
"method": "POST",
|
|
25485
|
+
"path": "/api/v2/accounts/{account_id}/custom_dashboards/{id}/widget_data",
|
|
25486
|
+
"title": "Calcular Bloco Salvo",
|
|
25487
|
+
"description": "[POST] Calcula UM bloco que JA esta salvo num relatorio personalizado e devolve os numeros. O desenho e lido de dentro do relatorio salvo — o corpo so diz QUAL bloco (widget_id). Pra calcular um desenho que ainda nao existe, use `custom_dashboards_preview_widget`. So administrador (401 caso contrario). 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). PERIODO SOB DEMANDA: `time_range`/`from`/`to`/`bucket` recalculam o bloco em outra janela SEM alterar o relatorio salvo — e assim que se monta um resumo DIARIO a partir de um relatorio que o cliente deixou salvo em 30 dias (peca `time_range:'yesterday'` e escreva o texto). Recorte (scope/dimension/funnel) e metrica NAO sao aceitos aqui de proposito: janela nao amplia permissao, recorte ampliaria.",
|
|
25488
|
+
"category": "Relatorios",
|
|
25489
|
+
"params": [
|
|
25490
|
+
{
|
|
25491
|
+
"name": "id",
|
|
25492
|
+
"type": "integer",
|
|
25493
|
+
"location": "path",
|
|
25494
|
+
"required": true,
|
|
25495
|
+
"description": "Id do relatorio personalizado (vem do custom_dashboards_list)"
|
|
25496
|
+
},
|
|
25497
|
+
{
|
|
25498
|
+
"name": "widget_id",
|
|
25499
|
+
"type": "string",
|
|
25500
|
+
"location": "body",
|
|
25501
|
+
"required": true,
|
|
25502
|
+
"description": "Id do bloco DENTRO daquele relatorio (campo `id` de um item de `widgets`)"
|
|
25503
|
+
},
|
|
25504
|
+
{
|
|
25505
|
+
"name": "timezone_offset",
|
|
25506
|
+
"type": "number",
|
|
25507
|
+
"location": "body",
|
|
25508
|
+
"required": false,
|
|
25509
|
+
"description": "Fuso em HORAS. NAO chute nem assuma -3: LEIA o fuso DA CONTA com `lionchat_account_show` (campo `timezone`, ex.: 'America/Sao_Paulo') e converta pra horas. O padrao da plataforma e America/Sao_Paulo (-3), mas a conta pode ter outro — Mato Grosso do Sul e -4, e cliente fora do Brasil existe. SEMPRE envie: ausente calcula em UTC e o numero nao bate com o que o cliente ve na tela. Em janela de UM DIA (time_range 'today'/'yesterday') isso e decisivo: uma hora de diferenca joga o que aconteceu de madrugada pro dia errado."
|
|
25510
|
+
},
|
|
25511
|
+
{
|
|
25512
|
+
"name": "time_range",
|
|
25513
|
+
"type": "string",
|
|
25514
|
+
"location": "body",
|
|
25515
|
+
"required": false,
|
|
25516
|
+
"description": "RECALCULA o bloco salvo em OUTRO periodo, sem alterar o que esta gravado (a tela do cliente nao muda). E o que permite pedir 'o relatorio de ontem' a partir de um relatorio salvo em 'ultimos 30 dias'. Valores: today, yesterday, last_7_days, last_30_days, this_month, last_month, custom. Ausente = usa o periodo salvo no bloco."
|
|
25517
|
+
},
|
|
25518
|
+
{
|
|
25519
|
+
"name": "from",
|
|
25520
|
+
"type": "string",
|
|
25521
|
+
"location": "body",
|
|
25522
|
+
"required": false,
|
|
25523
|
+
"description": "Inicio do periodo (AAAA-MM-DD). SO com time_range=custom; sozinho e ignorado. Janela maxima de 92 dias — acima disso volta 422 com o motivo."
|
|
25524
|
+
},
|
|
25525
|
+
{
|
|
25526
|
+
"name": "to",
|
|
25527
|
+
"type": "string",
|
|
25528
|
+
"location": "body",
|
|
25529
|
+
"required": false,
|
|
25530
|
+
"description": "Fim do periodo (AAAA-MM-DD). SO com time_range=custom."
|
|
25531
|
+
},
|
|
25532
|
+
{
|
|
25533
|
+
"name": "bucket",
|
|
25534
|
+
"type": "string",
|
|
25535
|
+
"location": "body",
|
|
25536
|
+
"required": false,
|
|
25537
|
+
"description": "Agrupamento no tempo (day, week, month) para blocos de serie. Ausente = usa o agrupamento salvo."
|
|
25538
|
+
}
|
|
25539
|
+
],
|
|
25540
|
+
"returns": "Um dos 4 formatos normalizados (series | categories | scalar | table), com o campo `shape` dizendo qual",
|
|
25541
|
+
"common_use_cases": [
|
|
25542
|
+
"Responder 'o que meu relatorio de vendas mostra hoje?'",
|
|
25543
|
+
"Ler o numero de um grafico que o cliente montou na tela"
|
|
25544
|
+
],
|
|
25545
|
+
"related_tools": [
|
|
25546
|
+
"lionchat_custom_dashboards_list",
|
|
25547
|
+
"lionchat_custom_dashboards_preview_widget"
|
|
25548
|
+
]
|
|
25549
|
+
},
|
|
25550
|
+
{
|
|
25551
|
+
"id": "lionchat_custom_dashboards_preview_widget",
|
|
25552
|
+
"method": "POST",
|
|
25553
|
+
"path": "/api/v2/accounts/{account_id}/custom_dashboards/preview_widget",
|
|
25554
|
+
"title": "Calcular Bloco na Hora (sem salvar)",
|
|
25555
|
+
"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.",
|
|
25556
|
+
"category": "Relatorios",
|
|
25557
|
+
"params": [
|
|
25558
|
+
{
|
|
25559
|
+
"name": "widget_type",
|
|
25560
|
+
"type": "string",
|
|
25561
|
+
"location": "body",
|
|
25562
|
+
"required": false,
|
|
25563
|
+
"description": "OBRIGATORIO. Um de: conversations_timeseries (evolucao no tempo) | entity_ranking (comparar agente/caixa/equipe/etiqueta) | csat_summary (satisfacao) | sla_summary (cumprimento de prazo, exige o recurso 'sla') | funnel_stages (cards por etapa de UM funil, exige 'kanban_board') | lead_origin (origem do lead, exige 'liontrack') | agent_report (tabela de produtividade por operador)."
|
|
25564
|
+
},
|
|
25565
|
+
{
|
|
25566
|
+
"name": "chart_type",
|
|
25567
|
+
"type": "string",
|
|
25568
|
+
"location": "body",
|
|
25569
|
+
"required": false,
|
|
25570
|
+
"description": "line|bar (timeseries) · bar|table (entity_ranking, funnel_stages) · number (csat_summary, sla_summary) · bar|pie (lead_origin) · table (agent_report). Omitir aplica o padrao do tipo."
|
|
25571
|
+
},
|
|
25572
|
+
{
|
|
25573
|
+
"name": "metric",
|
|
25574
|
+
"type": "string",
|
|
25575
|
+
"location": "body",
|
|
25576
|
+
"required": false,
|
|
25577
|
+
"description": "timeseries: conversations | incoming_messages | outgoing_messages | resolutions | reopens | avg_first_response_time | avg_resolution_time. entity_ranking: conversations | resolutions | avg_first_response_time | avg_resolution_time. Os dois tempos vem em SEGUNDOS."
|
|
25578
|
+
},
|
|
25579
|
+
{
|
|
25580
|
+
"name": "dimension",
|
|
25581
|
+
"type": "string",
|
|
25582
|
+
"location": "body",
|
|
25583
|
+
"required": false,
|
|
25584
|
+
"description": "entity_ranking: agent|inbox|team|label. agent_report: agent|team|inbox (as LINHAS da tabela)."
|
|
25585
|
+
},
|
|
25586
|
+
{
|
|
25587
|
+
"name": "bucket",
|
|
25588
|
+
"type": "string",
|
|
25589
|
+
"location": "body",
|
|
25590
|
+
"required": false,
|
|
25591
|
+
"description": "So no timeseries: day | week | month."
|
|
25592
|
+
},
|
|
25593
|
+
{
|
|
25594
|
+
"name": "funnel_id",
|
|
25595
|
+
"type": "integer",
|
|
25596
|
+
"location": "body",
|
|
25597
|
+
"required": false,
|
|
25598
|
+
"description": "So no funnel_stages. Precisa ser funil DESTA conta."
|
|
25599
|
+
},
|
|
25600
|
+
{
|
|
25601
|
+
"name": "date_basis",
|
|
25602
|
+
"type": "string",
|
|
25603
|
+
"location": "body",
|
|
25604
|
+
"required": false,
|
|
25605
|
+
"description": "So no funnel_stages: created (entrou no funil) | moved (entrou na etapa, padrao) | closed (foi fechado) | any. Combine com status: closed+won = 'ganhos no periodo'."
|
|
25606
|
+
},
|
|
25607
|
+
{
|
|
25608
|
+
"name": "status",
|
|
25609
|
+
"type": "string",
|
|
25610
|
+
"location": "body",
|
|
25611
|
+
"required": false,
|
|
25612
|
+
"description": "So no funnel_stages: all | open | won | lost."
|
|
25613
|
+
},
|
|
25614
|
+
{
|
|
25615
|
+
"name": "scope_type",
|
|
25616
|
+
"type": "string",
|
|
25617
|
+
"location": "body",
|
|
25618
|
+
"required": false,
|
|
25619
|
+
"description": "ATENCAO — sentido DIFERENTE por tipo. No timeseries: 'o grafico e SO daquela entidade' (agent|inbox|team). No agent_report: 'mostre so as LINHAS de quem e dessa equipe/caixa'. Exige scope_id junto, senao e recusado."
|
|
25620
|
+
},
|
|
25621
|
+
{
|
|
25622
|
+
"name": "scope_id",
|
|
25623
|
+
"type": "integer",
|
|
25624
|
+
"location": "body",
|
|
25625
|
+
"required": false,
|
|
25626
|
+
"description": "Id da entidade do scope_type. Precisa ser DESTA conta."
|
|
25627
|
+
},
|
|
25628
|
+
{
|
|
25629
|
+
"name": "time_range",
|
|
25630
|
+
"type": "string",
|
|
25631
|
+
"location": "body",
|
|
25632
|
+
"required": false,
|
|
25633
|
+
"description": "last_7_days | last_30_days | this_month | last_month | custom. 'custom' SO existe em conversations_timeseries e agent_report, exige from+to, e a janela nao pode passar de 92 DIAS (o teto e da janela, vale pros dois). Pedir 'esse ano' e recusado."
|
|
25634
|
+
},
|
|
25635
|
+
{
|
|
25636
|
+
"name": "from",
|
|
25637
|
+
"type": "string",
|
|
25638
|
+
"location": "body",
|
|
25639
|
+
"required": false,
|
|
25640
|
+
"description": "AAAA-MM-DD. Obrigatorio quando time_range=custom."
|
|
25641
|
+
},
|
|
25642
|
+
{
|
|
25643
|
+
"name": "to",
|
|
25644
|
+
"type": "string",
|
|
25645
|
+
"location": "body",
|
|
25646
|
+
"required": false,
|
|
25647
|
+
"description": "AAAA-MM-DD. Obrigatorio quando time_range=custom."
|
|
25648
|
+
},
|
|
25649
|
+
{
|
|
25650
|
+
"name": "columns",
|
|
25651
|
+
"type": "array",
|
|
25652
|
+
"location": "body",
|
|
25653
|
+
"required": false,
|
|
25654
|
+
"description": "So no agent_report — as COLUNAS da tabela. Cada item: {metric, as?} com metric em leads | atendidos | resolvidas | abertas | pendentes | adiadas | label_count | conversao. label_count exige label_id (id de etiqueta DESTA conta). conversao exige denominator (uma das metricas do nucleo) e numerator = LISTA DE IDS DE ETIQUETA (ex: [5,9]) — NUNCA nome de metrica."
|
|
25655
|
+
},
|
|
25656
|
+
{
|
|
25657
|
+
"name": "timezone_offset",
|
|
25658
|
+
"type": "number",
|
|
25659
|
+
"location": "query",
|
|
25660
|
+
"required": false,
|
|
25661
|
+
"description": "Fuso em HORAS. NAO chute nem assuma -3: LEIA o fuso DA CONTA com `lionchat_account_show` (campo `timezone`, ex.: 'America/Sao_Paulo') e converta pra horas. O padrao da plataforma e America/Sao_Paulo (-3), mas a conta pode ter outro — Mato Grosso do Sul e -4, e cliente fora do Brasil existe. SEMPRE envie: ausente calcula em UTC e o numero nao bate com o que o cliente ve na tela. Em janela de UM DIA (time_range 'today'/'yesterday') isso e decisivo: uma hora de diferenca joga o que aconteceu de madrugada pro dia errado."
|
|
25662
|
+
},
|
|
25663
|
+
{
|
|
25664
|
+
"name": "measure",
|
|
25665
|
+
"type": "string",
|
|
25666
|
+
"location": "body",
|
|
25667
|
+
"required": false,
|
|
25668
|
+
"description": "Contar cards ('count', padrao) ou somar o VALOR deles ('value'). So em funnel_stages e stage_entries."
|
|
25669
|
+
},
|
|
25670
|
+
{
|
|
25671
|
+
"name": "title",
|
|
25672
|
+
"type": "string",
|
|
25673
|
+
"location": "body",
|
|
25674
|
+
"required": false,
|
|
25675
|
+
"description": "Nome do bloco, exibido no cabecalho (ate 80 caracteres). Vazio = mostra o rotulo do tipo."
|
|
25676
|
+
}
|
|
25677
|
+
],
|
|
25678
|
+
"returns": "Um dos 4 formatos normalizados (series | categories | scalar | table), com o campo `shape` dizendo qual",
|
|
25679
|
+
"common_use_cases": [
|
|
25680
|
+
"Responder pergunta de relatorio que nenhuma outra ferramenta cobre",
|
|
25681
|
+
"Comparar atendentes/caixas/equipes num periodo",
|
|
25682
|
+
"Cards por etapa de um funil, com recorte por situacao e por data de fechamento",
|
|
25683
|
+
"Tabela de produtividade por operador com colunas escolhidas"
|
|
25684
|
+
],
|
|
25685
|
+
"related_tools": [
|
|
25686
|
+
"lionchat_custom_dashboards_create",
|
|
25687
|
+
"lionchat_custom_dashboards_widget_data"
|
|
25688
|
+
],
|
|
25689
|
+
"body_wrapper": "widget"
|
|
25690
|
+
},
|
|
25691
|
+
{
|
|
25692
|
+
"id": "lionchat_custom_dashboards_create",
|
|
25693
|
+
"method": "POST",
|
|
25694
|
+
"path": "/api/v2/accounts/{account_id}/custom_dashboards",
|
|
25695
|
+
"title": "Criar Relatorio Personalizado",
|
|
25696
|
+
"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.",
|
|
25697
|
+
"category": "Relatorios",
|
|
25698
|
+
"params": [
|
|
25699
|
+
{
|
|
25700
|
+
"name": "name",
|
|
25701
|
+
"type": "string",
|
|
25702
|
+
"location": "body",
|
|
25703
|
+
"required": true,
|
|
25704
|
+
"description": "Nome do relatorio, como aparece na aba do cliente"
|
|
25705
|
+
},
|
|
25706
|
+
{
|
|
25707
|
+
"name": "position",
|
|
25708
|
+
"type": "integer",
|
|
25709
|
+
"location": "body",
|
|
25710
|
+
"required": false,
|
|
25711
|
+
"description": "Ordem na lista (padrao 0)"
|
|
25712
|
+
},
|
|
25713
|
+
{
|
|
25714
|
+
"name": "widgets",
|
|
25715
|
+
"type": "array",
|
|
25716
|
+
"location": "body",
|
|
25717
|
+
"required": false,
|
|
25718
|
+
"description": "Lista de blocos. Cada item: {id, widget_type, chart_type, ...} com os mesmos campos do custom_dashboards_preview_widget. Maximo 12."
|
|
25719
|
+
}
|
|
25720
|
+
],
|
|
25721
|
+
"returns": "{ id, name, position, widgets, created_at }",
|
|
25722
|
+
"common_use_cases": [
|
|
25723
|
+
"Montar pro cliente um relatorio que ele pediu em palavras",
|
|
25724
|
+
"Deixar salvo na tela um recorte que ele consulta toda semana"
|
|
25725
|
+
],
|
|
25726
|
+
"related_tools": [
|
|
25727
|
+
"lionchat_custom_dashboards_preview_widget",
|
|
25728
|
+
"lionchat_custom_dashboards_update"
|
|
25729
|
+
],
|
|
25730
|
+
"body_wrapper": "custom_dashboard",
|
|
25731
|
+
"confirm_required": true
|
|
25732
|
+
},
|
|
25733
|
+
{
|
|
25734
|
+
"id": "lionchat_custom_dashboards_update",
|
|
25735
|
+
"method": "PATCH",
|
|
25736
|
+
"path": "/api/v2/accounts/{account_id}/custom_dashboards/{id}",
|
|
25737
|
+
"title": "Alterar Relatorio Personalizado",
|
|
25738
|
+
"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.",
|
|
25739
|
+
"category": "Relatorios",
|
|
25740
|
+
"params": [
|
|
25741
|
+
{
|
|
25742
|
+
"name": "id",
|
|
25743
|
+
"type": "integer",
|
|
25744
|
+
"location": "path",
|
|
25745
|
+
"required": true,
|
|
25746
|
+
"description": "Id do relatorio personalizado"
|
|
25747
|
+
},
|
|
25748
|
+
{
|
|
25749
|
+
"name": "name",
|
|
25750
|
+
"type": "string",
|
|
25751
|
+
"location": "body",
|
|
25752
|
+
"required": false,
|
|
25753
|
+
"description": "Novo nome"
|
|
25754
|
+
},
|
|
25755
|
+
{
|
|
25756
|
+
"name": "position",
|
|
25757
|
+
"type": "integer",
|
|
25758
|
+
"location": "body",
|
|
25759
|
+
"required": false,
|
|
25760
|
+
"description": "Nova ordem na lista"
|
|
25761
|
+
},
|
|
25762
|
+
{
|
|
25763
|
+
"name": "widgets",
|
|
25764
|
+
"type": "array",
|
|
25765
|
+
"location": "body",
|
|
25766
|
+
"required": false,
|
|
25767
|
+
"description": "Lista COMPLETA de blocos — substitui a atual. Preserve o `id` de cada bloco que ja existia, senao a tela perde o vinculo. Maximo 12."
|
|
25768
|
+
}
|
|
25769
|
+
],
|
|
25770
|
+
"returns": "{ id, name, position, widgets, created_at }",
|
|
25771
|
+
"common_use_cases": [
|
|
25772
|
+
"Acrescentar um bloco a um relatorio que ja existe",
|
|
25773
|
+
"Trocar o periodo ou o recorte de um bloco"
|
|
25774
|
+
],
|
|
25775
|
+
"related_tools": [
|
|
25776
|
+
"lionchat_custom_dashboards_list",
|
|
25777
|
+
"lionchat_custom_dashboards_create"
|
|
25778
|
+
],
|
|
25779
|
+
"body_wrapper": "custom_dashboard",
|
|
25780
|
+
"confirm_required": true
|
|
25781
|
+
},
|
|
25782
|
+
{
|
|
25783
|
+
"id": "lionchat_custom_dashboards_destroy",
|
|
25784
|
+
"method": "DELETE",
|
|
25785
|
+
"path": "/api/v2/accounts/{account_id}/custom_dashboards/{id}",
|
|
25786
|
+
"title": "Apagar Relatorio Personalizado",
|
|
25787
|
+
"description": "[DELETE] Apaga um relatorio personalizado da tela do cliente. SEM LIXEIRA E SEM DESFAZER. Exige confirm:true depois de confirmar com o usuario EXATAMENTE qual relatorio sera apagado (confira o nome com custom_dashboards_list antes). So administrador (401 caso contrario).",
|
|
25788
|
+
"category": "Relatorios",
|
|
25789
|
+
"params": [
|
|
25790
|
+
{
|
|
25791
|
+
"name": "id",
|
|
25792
|
+
"type": "integer",
|
|
25793
|
+
"location": "path",
|
|
25794
|
+
"required": true,
|
|
25795
|
+
"description": "Id do relatorio personalizado a apagar"
|
|
25796
|
+
}
|
|
25797
|
+
],
|
|
25798
|
+
"returns": "204 sem corpo",
|
|
25799
|
+
"common_use_cases": [
|
|
25800
|
+
"Remover um relatorio que o cliente nao usa mais"
|
|
25801
|
+
],
|
|
25802
|
+
"related_tools": [
|
|
25803
|
+
"lionchat_custom_dashboards_list"
|
|
25804
|
+
],
|
|
25805
|
+
"confirm_required": true
|
|
25806
|
+
},
|
|
25505
25807
|
{
|
|
25506
25808
|
"id": "lionchat_inboxes_whatsapp_history_start",
|
|
25507
25809
|
"method": "POST",
|
|
@@ -26032,7 +26334,7 @@
|
|
|
26032
26334
|
"method": "POST",
|
|
26033
26335
|
"path": "/api/v1/accounts/{account_id}/contacts/import_validate",
|
|
26034
26336
|
"title": "Validar Import de Contatos (pré-check)",
|
|
26035
|
-
"description": "Valida o CSV de import ANTES de importar: confere tipos dos valores contra os atributos de destino (data, número, lista...) e devolve os problemas por linha/coluna. Aceita os mesmos file + mappings + value_mappings do import_csv. Use pra conferir antes de rodar o import de verdade.",
|
|
26337
|
+
"description": "Valida o CSV de import ANTES de importar: confere tipos dos valores contra os atributos de destino (data, número, lista...) e devolve os problemas por linha/coluna. Aceita os mesmos file + mappings + value_mappings do import_csv. Use pra conferir antes de rodar o import de verdade. ATENCAO (18/08): esta conferencia NAO valida telefone — so coercao de tipo dos atributos. Validate verde NAO garante import sem erro de DDI; os erros de telefone aparecem so no relatorio do import.",
|
|
26036
26338
|
"category": "Contatos",
|
|
26037
26339
|
"params": [
|
|
26038
26340
|
{
|
|
@@ -26072,7 +26374,7 @@
|
|
|
26072
26374
|
"method": "PUT",
|
|
26073
26375
|
"path": "/api/v1/accounts/{account_id}",
|
|
26074
26376
|
"title": "Atualizar Configurações da Conta",
|
|
26075
|
-
"description": "Atualiza as configurações GERAIS da conta (Configurações > Conta). Inclui o FUSO HORÁRIO próprio da conta (novo 2026-07-21): timezone IANA, default America/Sao_Paulo — caixas novas e o Gatilho de Data do FlowBuilder herdam. ATENÇÃO: timezone inválido é DESCARTADO em silêncio (não dá erro) — confirme com account_show depois. Não confundir com account_update (que é o PERFIL do usuário logado).",
|
|
26377
|
+
"description": "Atualiza as configurações GERAIS da conta (Configurações > Conta). Inclui o FUSO HORÁRIO próprio da conta (novo 2026-07-21): timezone IANA, default America/Sao_Paulo — caixas novas e o Gatilho de Data do FlowBuilder herdam. ATENÇÃO: timezone inválido é DESCARTADO em silêncio (não dá erro) — confirme com account_show depois. Não confundir com account_update (que é o PERFIL do usuário logado). NOTA 18/08: mudar o timezone da conta move a fronteira do dia dos filtros de DATA FIXA e das datas relativas (contatos, conversas, segmentos e condicoes de automacao).",
|
|
26076
26378
|
"category": "Conta",
|
|
26077
26379
|
"params": [
|
|
26078
26380
|
{
|
|
@@ -28280,7 +28582,7 @@
|
|
|
28280
28582
|
"method": "POST",
|
|
28281
28583
|
"path": "/api/v1/accounts/{account_id}/lead_forms",
|
|
28282
28584
|
"title": "Criar Formulario",
|
|
28283
|
-
"description": "Cria um formulario publico de captacao. So name e obrigatorio (o desenho pode vir depois via update).
|
|
28585
|
+
"description": "Cria um formulario publico de captacao. So name e obrigatorio (o desenho pode vir depois via update). Nasce inativo e nao publicado — publique com lead_forms_publish e ative com update {active: true}. Pra publicar e OBRIGATORIO vincular uma caixa de WhatsApp (inbox_id). O slug pode ser escolhido (normalizado no servidor) ou fica sorteado. Escrita admin-only (401 para agente comum). Guia completo do form_data: resource lionchat://docs/formularios-publicos.",
|
|
28284
28586
|
"category": "Formularios",
|
|
28285
28587
|
"params": [
|
|
28286
28588
|
{
|
|
@@ -28309,17 +28611,31 @@
|
|
|
28309
28611
|
"type": "object",
|
|
28310
28612
|
"location": "body",
|
|
28311
28613
|
"required": false,
|
|
28312
|
-
"description": "Desenho do formulario {nodes:[{id,type,position:{x,y},data}], edges:[{id,source,target,sourceHandle}]}. Tipos: start, question, choice, message, condition, action, send_message, end, api_request, ai. Chave de data fora da lista permitida do tipo e DESCARTADA em silencio. Teto 2MB. Contrato completo, variaveis e exemplos: resource lionchat://docs/formularios-publicos. ATENCAO: substitui o desenho INTEIRO — leia com lead_forms_show antes de editar."
|
|
28614
|
+
"description": "Desenho do formulario {nodes:[{id,type,position:{x,y},data}], edges:[{id,source,target,sourceHandle}]}. Tipos: start, question, choice, message, condition, action, send_message, booking, set_variable, embed, end, api_request, ai. Bloco action usa items:[{key,config}]; send_message usa messageItems; api_request aceita method (GET/POST/PUT/PATCH/DELETE) e body. Chave de data fora da lista permitida do tipo e DESCARTADA em silencio. Teto 2MB. Contrato completo, variaveis e exemplos: resource lionchat://docs/formularios-publicos. ATENCAO: substitui o desenho INTEIRO — leia com lead_forms_show antes de editar."
|
|
28313
28615
|
},
|
|
28314
28616
|
{
|
|
28315
28617
|
"name": "settings",
|
|
28316
28618
|
"type": "object",
|
|
28317
28619
|
"location": "body",
|
|
28318
28620
|
"required": false,
|
|
28319
|
-
"description": "Configuracao visual/comportamento: {primary_color: '#7C3AED', theme: 'light'|'dark', abandon_minutes: 1..
|
|
28621
|
+
"description": "Configuracao visual/comportamento: {primary_color: '#7C3AED', theme: 'light'|'dark', abandon_minutes: 1..15 (default 15), button_label: string|null, resume: bool (continuar de onde parou, default true), chat_avatar: id de blob ja subido (foto dos baloes no formato chat)}."
|
|
28622
|
+
},
|
|
28623
|
+
{
|
|
28624
|
+
"name": "inbox_id",
|
|
28625
|
+
"type": "integer",
|
|
28626
|
+
"location": "body",
|
|
28627
|
+
"required": false,
|
|
28628
|
+
"description": "Caixa de WhatsApp vinculada (obrigatoria pra PUBLICAR). So Channel::Whatsapp (oficial) ou Channel::Waha (QR). Trocar de caixa pode; trocar de TIPO de canal nao (422 'channel type cannot change'). A troca so vale ao republicar (a foto guarda a caixa)."
|
|
28629
|
+
},
|
|
28630
|
+
{
|
|
28631
|
+
"name": "slug",
|
|
28632
|
+
"type": "string",
|
|
28633
|
+
"location": "body",
|
|
28634
|
+
"required": false,
|
|
28635
|
+
"description": "Endereco do link publico. EDITAVEL (mudou 16/08): normalizado no servidor (acento vira letra, resto vira hifen), 3..60 chars, minusculas+numeros+hifen, unico na conta. Vazio = mantem o atual; duplicado = 422. Trocar derruba links ja divulgados."
|
|
28320
28636
|
}
|
|
28321
28637
|
],
|
|
28322
|
-
"returns": "formulario criado (201) com slug
|
|
28638
|
+
"returns": "formulario criado (201) com slug, public_url, inbox {id,name,channel_type}|null e published_inbox_id; 422 {errors} em validacao (inclusive errors.inbox_id)",
|
|
28323
28639
|
"common_use_cases": [
|
|
28324
28640
|
"Criar formulario de captacao do zero via API",
|
|
28325
28641
|
"Importar um desenho pronto (form_data completo)"
|
|
@@ -28364,7 +28680,7 @@
|
|
|
28364
28680
|
"method": "PATCH",
|
|
28365
28681
|
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}",
|
|
28366
28682
|
"title": "Atualizar Formulario",
|
|
28367
|
-
"description": "
|
|
28683
|
+
"description": "Edita um formulario. form_data SUBSTITUI o desenho inteiro (leia antes com lead_forms_show). Aceita trocar inbox_id (so por caixa do MESMO tipo de canal) e slug (editavel, normalizado; trocar derruba links ja divulgados). Mudancas no desenho/caixa so valem pra quem preenche depois de um novo publish. Admin-only.",
|
|
28368
28684
|
"category": "Formularios",
|
|
28369
28685
|
"params": [
|
|
28370
28686
|
{
|
|
@@ -28400,14 +28716,28 @@
|
|
|
28400
28716
|
"type": "object",
|
|
28401
28717
|
"location": "body",
|
|
28402
28718
|
"required": false,
|
|
28403
|
-
"description": "Desenho do formulario {nodes:[{id,type,position:{x,y},data}], edges:[{id,source,target,sourceHandle}]}. Tipos: start, question, choice, message, condition, action, send_message, end, api_request, ai. Chave de data fora da lista permitida do tipo e DESCARTADA em silencio. Teto 2MB. Contrato completo, variaveis e exemplos: resource lionchat://docs/formularios-publicos. ATENCAO: substitui o desenho INTEIRO — leia com lead_forms_show antes de editar."
|
|
28719
|
+
"description": "Desenho do formulario {nodes:[{id,type,position:{x,y},data}], edges:[{id,source,target,sourceHandle}]}. Tipos: start, question, choice, message, condition, action, send_message, booking, set_variable, embed, end, api_request, ai. Bloco action usa items:[{key,config}]; send_message usa messageItems; api_request aceita method (GET/POST/PUT/PATCH/DELETE) e body. Chave de data fora da lista permitida do tipo e DESCARTADA em silencio. Teto 2MB. Contrato completo, variaveis e exemplos: resource lionchat://docs/formularios-publicos. ATENCAO: substitui o desenho INTEIRO — leia com lead_forms_show antes de editar."
|
|
28404
28720
|
},
|
|
28405
28721
|
{
|
|
28406
28722
|
"name": "settings",
|
|
28407
28723
|
"type": "object",
|
|
28408
28724
|
"location": "body",
|
|
28409
28725
|
"required": false,
|
|
28410
|
-
"description": "Configuracao visual/comportamento: {primary_color: '#7C3AED', theme: 'light'|'dark', abandon_minutes: 1..
|
|
28726
|
+
"description": "Configuracao visual/comportamento: {primary_color: '#7C3AED', theme: 'light'|'dark', abandon_minutes: 1..15 (default 15), button_label: string|null, resume: bool (continuar de onde parou, default true), chat_avatar: id de blob ja subido (foto dos baloes no formato chat)}."
|
|
28727
|
+
},
|
|
28728
|
+
{
|
|
28729
|
+
"name": "inbox_id",
|
|
28730
|
+
"type": "integer",
|
|
28731
|
+
"location": "body",
|
|
28732
|
+
"required": false,
|
|
28733
|
+
"description": "Caixa de WhatsApp vinculada (obrigatoria pra PUBLICAR). So Channel::Whatsapp (oficial) ou Channel::Waha (QR). Trocar de caixa pode; trocar de TIPO de canal nao (422 'channel type cannot change'). A troca so vale ao republicar (a foto guarda a caixa)."
|
|
28734
|
+
},
|
|
28735
|
+
{
|
|
28736
|
+
"name": "slug",
|
|
28737
|
+
"type": "string",
|
|
28738
|
+
"location": "body",
|
|
28739
|
+
"required": false,
|
|
28740
|
+
"description": "Endereco do link publico. EDITAVEL (mudou 16/08): normalizado no servidor (acento vira letra, resto vira hifen), 3..60 chars, minusculas+numeros+hifen, unico na conta. Vazio = mantem o atual; duplicado = 422. Trocar derruba links ja divulgados."
|
|
28411
28741
|
}
|
|
28412
28742
|
],
|
|
28413
28743
|
"returns": "formulario atualizado; 422 {errors} em validacao",
|
|
@@ -28450,7 +28780,7 @@
|
|
|
28450
28780
|
"method": "POST",
|
|
28451
28781
|
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}/publish",
|
|
28452
28782
|
"title": "Publicar Formulario",
|
|
28453
|
-
"description": "
|
|
28783
|
+
"description": "Publica: valida o desenho e tira a foto (form_data + inbox_id -> published_data). Quem preenche usa SEMPRE a foto. 422 {errors: [chaves]} quando o desenho nao passa — 34 chaves possiveis (tabela completa no resource formularios-publicos). As mais comuns: form_without_inbox (sem caixa de WhatsApp vinculada), form_requires_phone_question (todo formulario exige pergunta com map_to contact.phone), *_without_exit (saida obrigatoria desligada). Admin-only.",
|
|
28454
28784
|
"category": "Formularios",
|
|
28455
28785
|
"params": [
|
|
28456
28786
|
{
|
|
@@ -28476,7 +28806,7 @@
|
|
|
28476
28806
|
"method": "POST",
|
|
28477
28807
|
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}/duplicate",
|
|
28478
28808
|
"title": "Duplicar Formulario",
|
|
28479
|
-
"description": "Cria uma copia do formulario: nome + ' (copia)', slug novo, INATIVA e NAO publicada; as imagens dos blocos sao duplicadas (arquivos novos). Admin-only.",
|
|
28809
|
+
"description": "Cria uma copia do formulario: nome + ' (copia)', slug novo, INATIVA e NAO publicada; as imagens dos blocos sao duplicadas (arquivos novos). Admin-only. A copia nasce inativa e nao publicada, com slug novo, imagens duplicadas de verdade e o MESMO inbox_id do original.",
|
|
28480
28810
|
"category": "Formularios",
|
|
28481
28811
|
"params": [
|
|
28482
28812
|
{
|
|
@@ -28567,7 +28897,7 @@
|
|
|
28567
28897
|
"description": "Pagina (default 1)"
|
|
28568
28898
|
}
|
|
28569
28899
|
],
|
|
28570
|
-
"returns": "{payload: [{id, status, contact
|
|
28900
|
+
"returns": "{payload: [{id, status, contact, current_node_label, answered_count, created_at, completed_at}], meta}. contact pode vir {id: null, name, phone, pending: true} = pessoa AINDA preenchendo (o contato so nasce ao concluir, no fechamento do abandono ou antes de um envio de WhatsApp). NUNCA traz as respostas em si.",
|
|
28571
28901
|
"common_use_cases": [
|
|
28572
28902
|
"Ver quem respondeu/abandonou",
|
|
28573
28903
|
"Achar o id de uma resposta pro detalhe"
|
|
@@ -28600,7 +28930,7 @@
|
|
|
28600
28930
|
"description": "ID da resposta"
|
|
28601
28931
|
}
|
|
28602
28932
|
],
|
|
28603
|
-
"returns": "{
|
|
28933
|
+
"returns": "Resposta completa: answers [{label, value_label, at, download_url?}] (ATENCAO: o bloco de Acoes grava entradas sinteticas com chave '<node_id>::<n>' — nem toda chave e id de bloco), conversation {id, display_id}|null (a conversa aberta na caixa vinculada), milestones, effects [{node_id, label, state, error, status, url_short, at}] e utm_params",
|
|
28604
28934
|
"common_use_cases": [
|
|
28605
28935
|
"Ler o que o lead respondeu",
|
|
28606
28936
|
"Investigar por que a consulta externa/IA falhou (effects)",
|
|
@@ -28612,186 +28942,62 @@
|
|
|
28612
28942
|
]
|
|
28613
28943
|
},
|
|
28614
28944
|
{
|
|
28615
|
-
"id": "
|
|
28616
|
-
"method": "GET",
|
|
28617
|
-
"path": "/api/v1/accounts/{account_id}/guru_subscription",
|
|
28618
|
-
"title": "Ver Assinatura (Guru)",
|
|
28619
|
-
"description": "Assinatura da PROPRIA conta na plataforma, direto do Guru (passthrough) + dados locais do plano (plan_name, billing_period, subscription_expires_at, valor). Requer a feature 'Gestao de assinatura (Guru)' ligada pra conta no Super Admin — desligada devolve 404 {code: 'feature_disabled'} (diferente do 404 de assinatura inexistente no Guru). Somente administrator (403). 422 = validacao/nao configurado; 503 = Guru fora do ar.",
|
|
28620
|
-
"category": "Assinatura",
|
|
28621
|
-
"params": [],
|
|
28622
|
-
"returns": "{subscription: <objeto do Guru>, local: {plan_name, plan_slug, billing_period, subscription_expires_at, subscription_value_cents}}",
|
|
28623
|
-
"common_use_cases": [
|
|
28624
|
-
"Ver status/vencimento da assinatura da conta",
|
|
28625
|
-
"Conferir o plano atual antes de simular troca"
|
|
28626
|
-
],
|
|
28627
|
-
"related_tools": [
|
|
28628
|
-
"lionchat_guru_subscription_available_plans",
|
|
28629
|
-
"lionchat_guru_subscription_invoices"
|
|
28630
|
-
]
|
|
28631
|
-
},
|
|
28632
|
-
{
|
|
28633
|
-
"id": "lionchat_guru_subscription_available_plans",
|
|
28634
|
-
"method": "GET",
|
|
28635
|
-
"path": "/api/v1/accounts/{account_id}/guru_subscription/available_plans",
|
|
28636
|
-
"title": "Planos Disponiveis (Guru)",
|
|
28637
|
-
"description": "Ofertas do Guru FILTRADAS: so aparecem ofertas vinculadas a um plano da plataforma (cada uma com local_plan {plan_name, plan_slug, period}). Requer a feature 'Gestao de assinatura (Guru)' ligada pra conta no Super Admin — desligada devolve 404 {code: 'feature_disabled'} (diferente do 404 de assinatura inexistente no Guru). Somente administrator (403). 422 = validacao/nao configurado; 503 = Guru fora do ar.",
|
|
28638
|
-
"category": "Assinatura",
|
|
28639
|
-
"params": [],
|
|
28640
|
-
"returns": "{offers: [...com local_plan], local: {...}}",
|
|
28641
|
-
"common_use_cases": [
|
|
28642
|
-
"Listar opcoes de upgrade/downgrade antes de simular"
|
|
28643
|
-
],
|
|
28644
|
-
"related_tools": [
|
|
28645
|
-
"lionchat_guru_subscription_simulate",
|
|
28646
|
-
"lionchat_guru_subscription_change_plan"
|
|
28647
|
-
]
|
|
28648
|
-
},
|
|
28649
|
-
{
|
|
28650
|
-
"id": "lionchat_guru_subscription_invoices",
|
|
28651
|
-
"method": "GET",
|
|
28652
|
-
"path": "/api/v1/accounts/{account_id}/guru_subscription/invoices",
|
|
28653
|
-
"title": "Faturas da Assinatura (Guru)",
|
|
28654
|
-
"description": "Faturas da assinatura, direto do Guru (passthrough). Requer a feature 'Gestao de assinatura (Guru)' ligada pra conta no Super Admin — desligada devolve 404 {code: 'feature_disabled'} (diferente do 404 de assinatura inexistente no Guru). Somente administrator (403). 422 = validacao/nao configurado; 503 = Guru fora do ar.",
|
|
28655
|
-
"category": "Assinatura",
|
|
28656
|
-
"params": [],
|
|
28657
|
-
"returns": "{invoices: <passthrough do Guru>}",
|
|
28658
|
-
"common_use_cases": [
|
|
28659
|
-
"Historico de faturas da conta"
|
|
28660
|
-
],
|
|
28661
|
-
"related_tools": [
|
|
28662
|
-
"lionchat_guru_subscription_transactions",
|
|
28663
|
-
"lionchat_guru_subscription_show"
|
|
28664
|
-
]
|
|
28665
|
-
},
|
|
28666
|
-
{
|
|
28667
|
-
"id": "lionchat_guru_subscription_transactions",
|
|
28668
|
-
"method": "GET",
|
|
28669
|
-
"path": "/api/v1/accounts/{account_id}/guru_subscription/transactions",
|
|
28670
|
-
"title": "Transacoes da Assinatura (Guru)",
|
|
28671
|
-
"description": "Transacoes de pagamento da assinatura, direto do Guru (passthrough). Requer a feature 'Gestao de assinatura (Guru)' ligada pra conta no Super Admin — desligada devolve 404 {code: 'feature_disabled'} (diferente do 404 de assinatura inexistente no Guru). Somente administrator (403). 422 = validacao/nao configurado; 503 = Guru fora do ar.",
|
|
28672
|
-
"category": "Assinatura",
|
|
28673
|
-
"params": [],
|
|
28674
|
-
"returns": "{transactions: <passthrough do Guru>}",
|
|
28675
|
-
"common_use_cases": [
|
|
28676
|
-
"Conferir pagamentos aprovados/recusados"
|
|
28677
|
-
],
|
|
28678
|
-
"related_tools": [
|
|
28679
|
-
"lionchat_guru_subscription_invoices"
|
|
28680
|
-
]
|
|
28681
|
-
},
|
|
28682
|
-
{
|
|
28683
|
-
"id": "lionchat_guru_subscription_activities",
|
|
28684
|
-
"method": "GET",
|
|
28685
|
-
"path": "/api/v1/accounts/{account_id}/guru_subscription/activities",
|
|
28686
|
-
"title": "Atividades da Assinatura (Guru)",
|
|
28687
|
-
"description": "Linha do tempo de eventos da assinatura no Guru (passthrough). Requer a feature 'Gestao de assinatura (Guru)' ligada pra conta no Super Admin — desligada devolve 404 {code: 'feature_disabled'} (diferente do 404 de assinatura inexistente no Guru). Somente administrator (403). 422 = validacao/nao configurado; 503 = Guru fora do ar.",
|
|
28688
|
-
"category": "Assinatura",
|
|
28689
|
-
"params": [],
|
|
28690
|
-
"returns": "{activities: <passthrough do Guru>}",
|
|
28691
|
-
"common_use_cases": [
|
|
28692
|
-
"Auditar mudancas recentes da assinatura"
|
|
28693
|
-
],
|
|
28694
|
-
"related_tools": [
|
|
28695
|
-
"lionchat_guru_subscription_show"
|
|
28696
|
-
]
|
|
28697
|
-
},
|
|
28698
|
-
{
|
|
28699
|
-
"id": "lionchat_guru_subscription_simulate",
|
|
28945
|
+
"id": "lionchat_lead_forms_test_run",
|
|
28700
28946
|
"method": "POST",
|
|
28701
|
-
"path": "/api/v1/accounts/{account_id}/
|
|
28702
|
-
"title": "
|
|
28703
|
-
"description": "
|
|
28704
|
-
"category": "
|
|
28947
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{lead_form_id}/test_runs",
|
|
28948
|
+
"title": "Testar Formulario (simulador)",
|
|
28949
|
+
"description": "Roda o RASCUNHO (form_data, nao a foto publicada) no motor de verdade e desfaz tudo no fim — nada fica no banco: sem contato, sem conversa, sem WhatsApp, sem pixel, sem resposta nos relatorios. NAO exige admin (qualquer agente da conta). O estado do teste vive em quem chama: cada chamada reproduz o caminho inteiro a partir da lista de respostas. Item cujo node_id nao e o bloco atual PARA a reproducao ali.",
|
|
28950
|
+
"category": "Formularios",
|
|
28705
28951
|
"params": [
|
|
28706
28952
|
{
|
|
28707
|
-
"name": "
|
|
28708
|
-
"type": "
|
|
28709
|
-
"location": "
|
|
28953
|
+
"name": "lead_form_id",
|
|
28954
|
+
"type": "integer",
|
|
28955
|
+
"location": "path",
|
|
28710
28956
|
"required": true,
|
|
28711
|
-
"description": "ID
|
|
28712
|
-
}
|
|
28713
|
-
],
|
|
28714
|
-
"returns": "previa de rateio (passthrough do Guru)",
|
|
28715
|
-
"common_use_cases": [
|
|
28716
|
-
"Mostrar ao usuario quanto custaria a troca antes de confirmar"
|
|
28717
|
-
],
|
|
28718
|
-
"related_tools": [
|
|
28719
|
-
"lionchat_guru_subscription_available_plans",
|
|
28720
|
-
"lionchat_guru_subscription_change_plan"
|
|
28721
|
-
]
|
|
28722
|
-
},
|
|
28723
|
-
{
|
|
28724
|
-
"id": "lionchat_guru_subscription_change_plan",
|
|
28725
|
-
"method": "POST",
|
|
28726
|
-
"path": "/api/v1/accounts/{account_id}/guru_subscription/change_plan",
|
|
28727
|
-
"title": "Trocar Plano (Guru)",
|
|
28728
|
-
"description": "EFETIVA a troca de plano: upgrade cobra o proporcional NA HORA; downgrade agenda pro fim do ciclo. Confirme com o usuario e rode simulate antes. Acoes de escrita tem trava de 30s por conta — segunda tentativa na janela devolve 422 'operacao em andamento'. Requer a feature 'Gestao de assinatura (Guru)' ligada pra conta no Super Admin — desligada devolve 404 {code: 'feature_disabled'} (diferente do 404 de assinatura inexistente no Guru). Somente administrator (403). 422 = validacao/nao configurado; 503 = Guru fora do ar.",
|
|
28729
|
-
"category": "Assinatura",
|
|
28730
|
-
"params": [
|
|
28957
|
+
"description": "ID do formulario"
|
|
28958
|
+
},
|
|
28731
28959
|
{
|
|
28732
|
-
"name": "
|
|
28733
|
-
"type": "
|
|
28960
|
+
"name": "answers",
|
|
28961
|
+
"type": "array",
|
|
28734
28962
|
"location": "body",
|
|
28735
|
-
"required":
|
|
28736
|
-
"description": "
|
|
28963
|
+
"required": false,
|
|
28964
|
+
"description": "Respostas a reproduzir, na ordem: [{node_id, value}]. Ate 60 itens. Vazio/ausente = comeca do inicio (devolve o primeiro bloco). value null avanca bloco sem resposta (start/message/embed)."
|
|
28737
28965
|
}
|
|
28738
28966
|
],
|
|
28739
|
-
"returns": "
|
|
28967
|
+
"returns": "{block, log, answers, variables, form}. block = envelope do bloco atual (mesmo shape da pagina publica); log = caminho percorrido [{node_id, type, label, answer, detail}] (detail mostra variavel criada, acoes executadas, resultado de consulta/IA e o rumo das condicoes); 422 {error: 'invalid_value'|'test_run_failed', reason}",
|
|
28740
28968
|
"common_use_cases": [
|
|
28741
|
-
"
|
|
28969
|
+
"Validar um formulario recem-montado antes de publicar",
|
|
28970
|
+
"Reproduzir o caminho de um lead pra depurar condicao/consulta/IA",
|
|
28971
|
+
"Conferir mensagens e variaveis sem enviar WhatsApp de verdade"
|
|
28742
28972
|
],
|
|
28743
28973
|
"related_tools": [
|
|
28744
|
-
"
|
|
28745
|
-
"
|
|
28974
|
+
"lionchat_lead_forms_show",
|
|
28975
|
+
"lionchat_lead_forms_publish"
|
|
28746
28976
|
]
|
|
28747
28977
|
},
|
|
28748
28978
|
{
|
|
28749
|
-
"id": "
|
|
28979
|
+
"id": "lionchat_lead_forms_check_embed",
|
|
28750
28980
|
"method": "POST",
|
|
28751
|
-
"path": "/api/v1/accounts/{account_id}/
|
|
28752
|
-
"title": "
|
|
28753
|
-
"description": "
|
|
28754
|
-
"category": "
|
|
28981
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/check_embed",
|
|
28982
|
+
"title": "Conferir site pra Pagina externa",
|
|
28983
|
+
"description": "Confere no SERVIDOR se um site aceita ser exibido em iframe (bloco 'embed' / Pagina externa). O navegador de quem preenche NAO consegue detectar recusa — site bloqueado vira quadrado vazio sem erro; por isso a conferencia e feita aqui, lendo os cabecalhos de recusa, seguindo ate 3 redirects (cada salto validado contra rede interna) com 5s por salto. Grave o veredito em embed_allowed do bloco. Admin-only. Aviso: paginas de CHECKOUT sao as que mais recusam iframe.",
|
|
28984
|
+
"category": "Formularios",
|
|
28755
28985
|
"params": [
|
|
28756
28986
|
{
|
|
28757
|
-
"name": "
|
|
28987
|
+
"name": "url",
|
|
28758
28988
|
"type": "string",
|
|
28759
28989
|
"location": "body",
|
|
28760
|
-
"required":
|
|
28761
|
-
"description": "
|
|
28762
|
-
},
|
|
28763
|
-
{
|
|
28764
|
-
"name": "cancel_at_cycle_end",
|
|
28765
|
-
"type": "boolean",
|
|
28766
|
-
"location": "body",
|
|
28767
|
-
"required": false,
|
|
28768
|
-
"description": "Default true (cancela no fim do ciclo). false = imediato"
|
|
28990
|
+
"required": true,
|
|
28991
|
+
"description": "Endereco a conferir (precisa comecar com https://; {{variaveis}} sao ignoradas na conferencia)"
|
|
28769
28992
|
}
|
|
28770
28993
|
],
|
|
28771
|
-
"returns": "
|
|
28772
|
-
"common_use_cases": [
|
|
28773
|
-
"Cancelamento pedido explicitamente pelo dono da conta"
|
|
28774
|
-
],
|
|
28775
|
-
"related_tools": [
|
|
28776
|
-
"lionchat_guru_subscription_revert_cancel",
|
|
28777
|
-
"lionchat_guru_subscription_show"
|
|
28778
|
-
]
|
|
28779
|
-
},
|
|
28780
|
-
{
|
|
28781
|
-
"id": "lionchat_guru_subscription_revert_cancel",
|
|
28782
|
-
"method": "POST",
|
|
28783
|
-
"path": "/api/v1/accounts/{account_id}/guru_subscription/revert_cancel",
|
|
28784
|
-
"title": "Reverter Cancelamento (Guru)",
|
|
28785
|
-
"description": "Desfaz um cancelamento agendado pro fim do ciclo (enquanto ainda nao venceu). Acoes de escrita tem trava de 30s por conta — segunda tentativa na janela devolve 422 'operacao em andamento'. Requer a feature 'Gestao de assinatura (Guru)' ligada pra conta no Super Admin — desligada devolve 404 {code: 'feature_disabled'} (diferente do 404 de assinatura inexistente no Guru). Somente administrator (403). 422 = validacao/nao configurado; 503 = Guru fora do ar.",
|
|
28786
|
-
"category": "Assinatura",
|
|
28787
|
-
"params": [],
|
|
28788
|
-
"returns": "resultado (passthrough do Guru)",
|
|
28994
|
+
"returns": "{status, reason}. status: 'allowed' (aceita) | 'blocked' (reason: not_https, x_frame_options, frame_ancestors, url_blocked) | 'unknown' (reason: unreachable ou http_<codigo> — nao deu pra conferir; a pagina tenta o iframe e o botao de abrir fora cobre)",
|
|
28789
28995
|
"common_use_cases": [
|
|
28790
|
-
"
|
|
28996
|
+
"Antes de salvar um bloco Pagina externa, saber se o site vai aparecer embutido",
|
|
28997
|
+
"Explicar ao cliente por que o checkout dele nao abre dentro do formulario"
|
|
28791
28998
|
],
|
|
28792
28999
|
"related_tools": [
|
|
28793
|
-
"
|
|
28794
|
-
"lionchat_guru_subscription_show"
|
|
29000
|
+
"lionchat_lead_forms_update"
|
|
28795
29001
|
]
|
|
28796
29002
|
}
|
|
28797
29003
|
]
|