@lionchat/mcp-server 1.12.1 → 1.14.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 +11 -1
- package/dist/docs/resources/api-conventions.md +7 -0
- package/dist/docs/resources/best-practices.md +48 -1
- package/dist/docs/resources/conversation-flows.md +36 -0
- package/dist/docs/resources/data-model.md +25 -0
- package/dist/docs/resources/flowbuilder-design-guide.md +6 -0
- package/dist/docs/resources/flowbuilder-patterns.md +27 -0
- package/dist/docs/resources/formularios-publicos.md +499 -0
- package/dist/docs/resources/glossary.md +49 -1
- package/dist/docs/resources/troubleshooting.md +76 -3
- package/dist/resources.js +6 -0
- package/dist/resources.js.map +1 -1
- package/dist/tools.js +27 -5
- package/dist/tools.js.map +1 -1
- package/endpoints.json +470 -73
- 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
|
{
|
|
@@ -9571,7 +9571,7 @@
|
|
|
9571
9571
|
"method": "POST",
|
|
9572
9572
|
"path": "/api/v1/accounts/{account_id}/flows",
|
|
9573
9573
|
"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).",
|
|
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). 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
9575
|
"category": "Flows",
|
|
9576
9576
|
"params": [
|
|
9577
9577
|
{
|
|
@@ -9666,7 +9666,7 @@
|
|
|
9666
9666
|
"method": "PUT",
|
|
9667
9667
|
"path": "/api/v1/accounts/{account_id}/flows/{id}",
|
|
9668
9668
|
"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).",
|
|
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). 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
9670
|
"category": "Flows",
|
|
9671
9671
|
"params": [
|
|
9672
9672
|
{
|
|
@@ -9881,6 +9881,13 @@
|
|
|
9881
9881
|
"location": "body",
|
|
9882
9882
|
"required": false,
|
|
9883
9883
|
"description": "Janelas de disponibilidade"
|
|
9884
|
+
},
|
|
9885
|
+
{
|
|
9886
|
+
"name": "slug",
|
|
9887
|
+
"type": "string",
|
|
9888
|
+
"location": "body",
|
|
9889
|
+
"required": false,
|
|
9890
|
+
"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
9891
|
}
|
|
9885
9892
|
],
|
|
9886
9893
|
"returns": "tipo de evento criado (com novo ID)",
|
|
@@ -9958,6 +9965,13 @@
|
|
|
9958
9965
|
"location": "body",
|
|
9959
9966
|
"required": false,
|
|
9960
9967
|
"description": "Ativo?"
|
|
9968
|
+
},
|
|
9969
|
+
{
|
|
9970
|
+
"name": "slug",
|
|
9971
|
+
"type": "string",
|
|
9972
|
+
"location": "body",
|
|
9973
|
+
"required": false,
|
|
9974
|
+
"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
9975
|
}
|
|
9962
9976
|
],
|
|
9963
9977
|
"returns": "tipo de evento atualizado",
|
|
@@ -12573,7 +12587,7 @@
|
|
|
12573
12587
|
"method": "PATCH",
|
|
12574
12588
|
"path": "/api/v1/accounts/{account_id}/flow_sessions/{id}",
|
|
12575
12589
|
"title": "Atualizar Sessão do Flow",
|
|
12576
|
-
"description": "Pausa, retoma ou remove a sessao de flow (action_type: pause/resume/remove).",
|
|
12590
|
+
"description": "Pausa, retoma ou remove a sessao de flow (action_type: pause/resume/remove). remove = o botao Parar do Historico de execucoes: encerra a sessao DE VEZ (status completed) e registra atividade na conversa dizendo quem parou. Valor fora da lista e no-op.",
|
|
12577
12591
|
"category": "Sessoes",
|
|
12578
12592
|
"params": [
|
|
12579
12593
|
{
|
|
@@ -20141,66 +20155,6 @@
|
|
|
20141
20155
|
"lionchat_voip_calls_show"
|
|
20142
20156
|
]
|
|
20143
20157
|
},
|
|
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
20158
|
{
|
|
20205
20159
|
"id": "lionchat_voip_calls_create_4",
|
|
20206
20160
|
"method": "POST",
|
|
@@ -22871,7 +22825,7 @@
|
|
|
22871
22825
|
"description": "ID da caixa de entrada"
|
|
22872
22826
|
}
|
|
22873
22827
|
],
|
|
22874
|
-
"returns": "{
|
|
22828
|
+
"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
22829
|
"common_use_cases": [
|
|
22876
22830
|
"Diagnosticar por que mensagens nao chegaram (agrupado por motivo, com erro real)",
|
|
22877
22831
|
"Ver quantas falhas sao reenviaveis antes de disparar o reenvio em massa",
|
|
@@ -22936,7 +22890,7 @@
|
|
|
22936
22890
|
"type": "string",
|
|
22937
22891
|
"location": "body",
|
|
22938
22892
|
"required": false,
|
|
22939
|
-
"description": "
|
|
22893
|
+
"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
22894
|
}
|
|
22941
22895
|
],
|
|
22942
22896
|
"returns": "{cancelled: N} — quantidade de mensagens canceladas",
|
|
@@ -24982,7 +24936,7 @@
|
|
|
24982
24936
|
"method": "GET",
|
|
24983
24937
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations",
|
|
24984
24938
|
"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).",
|
|
24939
|
+
"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
24940
|
"category": "Integracoes",
|
|
24987
24941
|
"params": [],
|
|
24988
24942
|
"returns": "200 {payload: {eclinica_integrations: [...]}}",
|
|
@@ -25170,7 +25124,7 @@
|
|
|
25170
25124
|
"description": "ID do contato"
|
|
25171
25125
|
}
|
|
25172
25126
|
],
|
|
25173
|
-
"returns": "{
|
|
25127
|
+
"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
25128
|
"common_use_cases": [
|
|
25175
25129
|
"Ver todos os arquivos de um cliente num lugar só"
|
|
25176
25130
|
],
|
|
@@ -26032,7 +25986,7 @@
|
|
|
26032
25986
|
"method": "POST",
|
|
26033
25987
|
"path": "/api/v1/accounts/{account_id}/contacts/import_validate",
|
|
26034
25988
|
"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.",
|
|
25989
|
+
"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
25990
|
"category": "Contatos",
|
|
26037
25991
|
"params": [
|
|
26038
25992
|
{
|
|
@@ -26072,7 +26026,7 @@
|
|
|
26072
26026
|
"method": "PUT",
|
|
26073
26027
|
"path": "/api/v1/accounts/{account_id}",
|
|
26074
26028
|
"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).",
|
|
26029
|
+
"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
26030
|
"category": "Conta",
|
|
26077
26031
|
"params": [
|
|
26078
26032
|
{
|
|
@@ -28254,5 +28208,448 @@
|
|
|
28254
28208
|
"lionchat_captain_assistants_show",
|
|
28255
28209
|
"lionchat_conversations_show"
|
|
28256
28210
|
]
|
|
28211
|
+
},
|
|
28212
|
+
{
|
|
28213
|
+
"id": "lionchat_lead_forms_list",
|
|
28214
|
+
"method": "GET",
|
|
28215
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms",
|
|
28216
|
+
"title": "Listar Formularios",
|
|
28217
|
+
"description": "Lista os formularios publicos de captacao da conta (estilo Typeform/Typebot), mais recentes primeiro. Cada item traz form_data (rascunho), settings, public_url e counts {views, responses, completed}. NAO traz media_urls (so no show). Leitura liberada a qualquer agente.",
|
|
28218
|
+
"category": "Formularios",
|
|
28219
|
+
"params": [],
|
|
28220
|
+
"returns": "array de formularios (id, name, slug, display_mode, active, form_data, published_at, settings, public_url, counts)",
|
|
28221
|
+
"common_use_cases": [
|
|
28222
|
+
"Ver os formularios da conta e seus numeros",
|
|
28223
|
+
"Achar o id antes de editar/publicar",
|
|
28224
|
+
"Copiar o link publico (public_url)"
|
|
28225
|
+
],
|
|
28226
|
+
"related_tools": [
|
|
28227
|
+
"lionchat_lead_forms_show",
|
|
28228
|
+
"lionchat_lead_forms_create",
|
|
28229
|
+
"lionchat_lead_forms_stats"
|
|
28230
|
+
]
|
|
28231
|
+
},
|
|
28232
|
+
{
|
|
28233
|
+
"id": "lionchat_lead_forms_create",
|
|
28234
|
+
"method": "POST",
|
|
28235
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms",
|
|
28236
|
+
"title": "Criar Formulario",
|
|
28237
|
+
"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.",
|
|
28238
|
+
"category": "Formularios",
|
|
28239
|
+
"params": [
|
|
28240
|
+
{
|
|
28241
|
+
"name": "name",
|
|
28242
|
+
"type": "string",
|
|
28243
|
+
"location": "body",
|
|
28244
|
+
"required": true,
|
|
28245
|
+
"description": "Nome do formulario"
|
|
28246
|
+
},
|
|
28247
|
+
{
|
|
28248
|
+
"name": "display_mode",
|
|
28249
|
+
"type": "string",
|
|
28250
|
+
"location": "body",
|
|
28251
|
+
"required": false,
|
|
28252
|
+
"description": "Formato da pagina publica: cards (um bloco por tela, estilo Typeform) ou chat (conversa, estilo Typebot). Default cards"
|
|
28253
|
+
},
|
|
28254
|
+
{
|
|
28255
|
+
"name": "active",
|
|
28256
|
+
"type": "boolean",
|
|
28257
|
+
"location": "body",
|
|
28258
|
+
"required": false,
|
|
28259
|
+
"description": "Liga/desliga o link publico (so responde ativo E publicado)"
|
|
28260
|
+
},
|
|
28261
|
+
{
|
|
28262
|
+
"name": "form_data",
|
|
28263
|
+
"type": "object",
|
|
28264
|
+
"location": "body",
|
|
28265
|
+
"required": false,
|
|
28266
|
+
"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."
|
|
28267
|
+
},
|
|
28268
|
+
{
|
|
28269
|
+
"name": "settings",
|
|
28270
|
+
"type": "object",
|
|
28271
|
+
"location": "body",
|
|
28272
|
+
"required": false,
|
|
28273
|
+
"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)}."
|
|
28274
|
+
},
|
|
28275
|
+
{
|
|
28276
|
+
"name": "inbox_id",
|
|
28277
|
+
"type": "integer",
|
|
28278
|
+
"location": "body",
|
|
28279
|
+
"required": false,
|
|
28280
|
+
"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)."
|
|
28281
|
+
},
|
|
28282
|
+
{
|
|
28283
|
+
"name": "slug",
|
|
28284
|
+
"type": "string",
|
|
28285
|
+
"location": "body",
|
|
28286
|
+
"required": false,
|
|
28287
|
+
"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."
|
|
28288
|
+
}
|
|
28289
|
+
],
|
|
28290
|
+
"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)",
|
|
28291
|
+
"common_use_cases": [
|
|
28292
|
+
"Criar formulario de captacao do zero via API",
|
|
28293
|
+
"Importar um desenho pronto (form_data completo)"
|
|
28294
|
+
],
|
|
28295
|
+
"related_tools": [
|
|
28296
|
+
"lionchat_lead_forms_list",
|
|
28297
|
+
"lionchat_lead_forms_show",
|
|
28298
|
+
"lionchat_lead_forms_update",
|
|
28299
|
+
"lionchat_lead_forms_publish",
|
|
28300
|
+
"lionchat_lead_forms_stats"
|
|
28301
|
+
]
|
|
28302
|
+
},
|
|
28303
|
+
{
|
|
28304
|
+
"id": "lionchat_lead_forms_show",
|
|
28305
|
+
"method": "GET",
|
|
28306
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}",
|
|
28307
|
+
"title": "Detalhe do Formulario",
|
|
28308
|
+
"description": "Retorna o formulario completo, incluindo form_data (rascunho atual) e media_urls (mapa blob_id -> url das imagens de bloco/opcao — SO neste endpoint). published_data (a foto que o publico usa) nunca sai pela API.",
|
|
28309
|
+
"category": "Formularios",
|
|
28310
|
+
"params": [
|
|
28311
|
+
{
|
|
28312
|
+
"name": "id",
|
|
28313
|
+
"type": "integer",
|
|
28314
|
+
"location": "path",
|
|
28315
|
+
"required": true,
|
|
28316
|
+
"description": "ID do formulario"
|
|
28317
|
+
}
|
|
28318
|
+
],
|
|
28319
|
+
"returns": "formulario (objeto completo + media_urls + counts)",
|
|
28320
|
+
"common_use_cases": [
|
|
28321
|
+
"Ler o form_data atual antes de editar (update substitui o desenho inteiro)",
|
|
28322
|
+
"Conferir estado publicado/ativo e o link publico"
|
|
28323
|
+
],
|
|
28324
|
+
"related_tools": [
|
|
28325
|
+
"lionchat_lead_forms_update",
|
|
28326
|
+
"lionchat_lead_forms_publish",
|
|
28327
|
+
"lionchat_lead_forms_responses_list"
|
|
28328
|
+
]
|
|
28329
|
+
},
|
|
28330
|
+
{
|
|
28331
|
+
"id": "lionchat_lead_forms_update",
|
|
28332
|
+
"method": "PATCH",
|
|
28333
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}",
|
|
28334
|
+
"title": "Atualizar Formulario",
|
|
28335
|
+
"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.",
|
|
28336
|
+
"category": "Formularios",
|
|
28337
|
+
"params": [
|
|
28338
|
+
{
|
|
28339
|
+
"name": "id",
|
|
28340
|
+
"type": "integer",
|
|
28341
|
+
"location": "path",
|
|
28342
|
+
"required": true,
|
|
28343
|
+
"description": "ID do formulario"
|
|
28344
|
+
},
|
|
28345
|
+
{
|
|
28346
|
+
"name": "name",
|
|
28347
|
+
"type": "string",
|
|
28348
|
+
"location": "body",
|
|
28349
|
+
"required": false,
|
|
28350
|
+
"description": "Nome do formulario"
|
|
28351
|
+
},
|
|
28352
|
+
{
|
|
28353
|
+
"name": "display_mode",
|
|
28354
|
+
"type": "string",
|
|
28355
|
+
"location": "body",
|
|
28356
|
+
"required": false,
|
|
28357
|
+
"description": "cards ou chat"
|
|
28358
|
+
},
|
|
28359
|
+
{
|
|
28360
|
+
"name": "active",
|
|
28361
|
+
"type": "boolean",
|
|
28362
|
+
"location": "body",
|
|
28363
|
+
"required": false,
|
|
28364
|
+
"description": "Liga/desliga o link publico"
|
|
28365
|
+
},
|
|
28366
|
+
{
|
|
28367
|
+
"name": "form_data",
|
|
28368
|
+
"type": "object",
|
|
28369
|
+
"location": "body",
|
|
28370
|
+
"required": false,
|
|
28371
|
+
"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."
|
|
28372
|
+
},
|
|
28373
|
+
{
|
|
28374
|
+
"name": "settings",
|
|
28375
|
+
"type": "object",
|
|
28376
|
+
"location": "body",
|
|
28377
|
+
"required": false,
|
|
28378
|
+
"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)}."
|
|
28379
|
+
},
|
|
28380
|
+
{
|
|
28381
|
+
"name": "inbox_id",
|
|
28382
|
+
"type": "integer",
|
|
28383
|
+
"location": "body",
|
|
28384
|
+
"required": false,
|
|
28385
|
+
"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)."
|
|
28386
|
+
},
|
|
28387
|
+
{
|
|
28388
|
+
"name": "slug",
|
|
28389
|
+
"type": "string",
|
|
28390
|
+
"location": "body",
|
|
28391
|
+
"required": false,
|
|
28392
|
+
"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."
|
|
28393
|
+
}
|
|
28394
|
+
],
|
|
28395
|
+
"returns": "formulario atualizado; 422 {errors} em validacao",
|
|
28396
|
+
"common_use_cases": [
|
|
28397
|
+
"Editar o desenho do formulario",
|
|
28398
|
+
"Ativar/desativar o link publico",
|
|
28399
|
+
"Trocar tema/cor/tempo de abandono"
|
|
28400
|
+
],
|
|
28401
|
+
"related_tools": [
|
|
28402
|
+
"lionchat_lead_forms_show",
|
|
28403
|
+
"lionchat_lead_forms_publish"
|
|
28404
|
+
]
|
|
28405
|
+
},
|
|
28406
|
+
{
|
|
28407
|
+
"id": "lionchat_lead_forms_destroy",
|
|
28408
|
+
"method": "DELETE",
|
|
28409
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}",
|
|
28410
|
+
"title": "Excluir Formulario",
|
|
28411
|
+
"description": "Exclui o formulario e (assincronamente) todas as respostas. Irreversivel — confirme com o usuario antes. Admin-only.",
|
|
28412
|
+
"category": "Formularios",
|
|
28413
|
+
"params": [
|
|
28414
|
+
{
|
|
28415
|
+
"name": "id",
|
|
28416
|
+
"type": "integer",
|
|
28417
|
+
"location": "path",
|
|
28418
|
+
"required": true,
|
|
28419
|
+
"description": "ID do formulario"
|
|
28420
|
+
}
|
|
28421
|
+
],
|
|
28422
|
+
"returns": "204 sem corpo",
|
|
28423
|
+
"common_use_cases": [
|
|
28424
|
+
"Remover formulario descontinuado"
|
|
28425
|
+
],
|
|
28426
|
+
"related_tools": [
|
|
28427
|
+
"lionchat_lead_forms_list"
|
|
28428
|
+
]
|
|
28429
|
+
},
|
|
28430
|
+
{
|
|
28431
|
+
"id": "lionchat_lead_forms_publish",
|
|
28432
|
+
"method": "POST",
|
|
28433
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}/publish",
|
|
28434
|
+
"title": "Publicar Formulario",
|
|
28435
|
+
"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.",
|
|
28436
|
+
"category": "Formularios",
|
|
28437
|
+
"params": [
|
|
28438
|
+
{
|
|
28439
|
+
"name": "id",
|
|
28440
|
+
"type": "integer",
|
|
28441
|
+
"location": "path",
|
|
28442
|
+
"required": true,
|
|
28443
|
+
"description": "ID do formulario"
|
|
28444
|
+
}
|
|
28445
|
+
],
|
|
28446
|
+
"returns": "formulario com published_at carimbado; 422 {errors: [chaves i18n]} se o desenho nao passa",
|
|
28447
|
+
"common_use_cases": [
|
|
28448
|
+
"Colocar edicoes do desenho no ar",
|
|
28449
|
+
"Descobrir o que falta no desenho (as chaves do 422 dizem exatamente)"
|
|
28450
|
+
],
|
|
28451
|
+
"related_tools": [
|
|
28452
|
+
"lionchat_lead_forms_update",
|
|
28453
|
+
"lionchat_lead_forms_show"
|
|
28454
|
+
]
|
|
28455
|
+
},
|
|
28456
|
+
{
|
|
28457
|
+
"id": "lionchat_lead_forms_duplicate",
|
|
28458
|
+
"method": "POST",
|
|
28459
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}/duplicate",
|
|
28460
|
+
"title": "Duplicar Formulario",
|
|
28461
|
+
"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.",
|
|
28462
|
+
"category": "Formularios",
|
|
28463
|
+
"params": [
|
|
28464
|
+
{
|
|
28465
|
+
"name": "id",
|
|
28466
|
+
"type": "integer",
|
|
28467
|
+
"location": "path",
|
|
28468
|
+
"required": true,
|
|
28469
|
+
"description": "ID do formulario"
|
|
28470
|
+
}
|
|
28471
|
+
],
|
|
28472
|
+
"returns": "201 + copia serializada",
|
|
28473
|
+
"common_use_cases": [
|
|
28474
|
+
"Usar um formulario existente como modelo"
|
|
28475
|
+
],
|
|
28476
|
+
"related_tools": [
|
|
28477
|
+
"lionchat_lead_forms_list",
|
|
28478
|
+
"lionchat_lead_forms_update"
|
|
28479
|
+
]
|
|
28480
|
+
},
|
|
28481
|
+
{
|
|
28482
|
+
"id": "lionchat_lead_forms_stats",
|
|
28483
|
+
"method": "GET",
|
|
28484
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{id}/stats",
|
|
28485
|
+
"title": "Funil do Formulario",
|
|
28486
|
+
"description": "Estatisticas agregadas: views, starts, completed, abandoned, completion_rate (%), funil bloco a bloco (reached + percent, so blocos visiveis, ordem do desenho publicado) e marcos (milestones).",
|
|
28487
|
+
"category": "Formularios",
|
|
28488
|
+
"params": [
|
|
28489
|
+
{
|
|
28490
|
+
"name": "id",
|
|
28491
|
+
"type": "integer",
|
|
28492
|
+
"location": "path",
|
|
28493
|
+
"required": true,
|
|
28494
|
+
"description": "ID do formulario"
|
|
28495
|
+
},
|
|
28496
|
+
{
|
|
28497
|
+
"name": "days",
|
|
28498
|
+
"type": "integer",
|
|
28499
|
+
"location": "query",
|
|
28500
|
+
"required": false,
|
|
28501
|
+
"description": "Janela em dias (default 30, maximo 90)"
|
|
28502
|
+
}
|
|
28503
|
+
],
|
|
28504
|
+
"returns": "{views, starts, completed, abandoned, completion_rate, funnel: [{node_id, type, label, reached, percent}], milestones: [{node_id, name, reached}]}",
|
|
28505
|
+
"common_use_cases": [
|
|
28506
|
+
"Onde os leads abandonam (funil por bloco)",
|
|
28507
|
+
"Taxa de conclusao do formulario",
|
|
28508
|
+
"Alcance de cada marco"
|
|
28509
|
+
],
|
|
28510
|
+
"related_tools": [
|
|
28511
|
+
"lionchat_lead_forms_responses_list",
|
|
28512
|
+
"lionchat_lead_forms_list"
|
|
28513
|
+
]
|
|
28514
|
+
},
|
|
28515
|
+
{
|
|
28516
|
+
"id": "lionchat_lead_forms_responses_list",
|
|
28517
|
+
"method": "GET",
|
|
28518
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{lead_form_id}/responses",
|
|
28519
|
+
"title": "Listar Respostas do Formulario",
|
|
28520
|
+
"description": "Lista as respostas (25 por pagina, colunas leves — as respostas em si NAO vem na lista, use o show). Filtra por status e janela de dias.",
|
|
28521
|
+
"category": "Formularios",
|
|
28522
|
+
"params": [
|
|
28523
|
+
{
|
|
28524
|
+
"name": "lead_form_id",
|
|
28525
|
+
"type": "integer",
|
|
28526
|
+
"location": "path",
|
|
28527
|
+
"required": true,
|
|
28528
|
+
"description": "ID do formulario"
|
|
28529
|
+
},
|
|
28530
|
+
{
|
|
28531
|
+
"name": "status",
|
|
28532
|
+
"type": "string",
|
|
28533
|
+
"location": "query",
|
|
28534
|
+
"required": false,
|
|
28535
|
+
"description": "in_progress, completed ou abandoned (fora da lista e ignorado)"
|
|
28536
|
+
},
|
|
28537
|
+
{
|
|
28538
|
+
"name": "days",
|
|
28539
|
+
"type": "integer",
|
|
28540
|
+
"location": "query",
|
|
28541
|
+
"required": false,
|
|
28542
|
+
"description": "Janela em dias (default 30, maximo 90)"
|
|
28543
|
+
},
|
|
28544
|
+
{
|
|
28545
|
+
"name": "page",
|
|
28546
|
+
"type": "integer",
|
|
28547
|
+
"location": "query",
|
|
28548
|
+
"required": false,
|
|
28549
|
+
"description": "Pagina (default 1)"
|
|
28550
|
+
}
|
|
28551
|
+
],
|
|
28552
|
+
"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.",
|
|
28553
|
+
"common_use_cases": [
|
|
28554
|
+
"Ver quem respondeu/abandonou",
|
|
28555
|
+
"Achar o id de uma resposta pro detalhe"
|
|
28556
|
+
],
|
|
28557
|
+
"related_tools": [
|
|
28558
|
+
"lionchat_lead_forms_responses_show",
|
|
28559
|
+
"lionchat_lead_forms_stats"
|
|
28560
|
+
]
|
|
28561
|
+
},
|
|
28562
|
+
{
|
|
28563
|
+
"id": "lionchat_lead_forms_responses_show",
|
|
28564
|
+
"method": "GET",
|
|
28565
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{lead_form_id}/responses/{id}",
|
|
28566
|
+
"title": "Detalhe da Resposta do Formulario",
|
|
28567
|
+
"description": "Resposta completa: answers legiveis [{label, value_label, at, download_url? (so arquivo enviado)}], marcos, utm_params e effects — o desfecho de cada bloco de API/IA ({node_id, label, state done|error|pending, error, status HTTP, url_short}) pra investigar consulta que falhou.",
|
|
28568
|
+
"category": "Formularios",
|
|
28569
|
+
"params": [
|
|
28570
|
+
{
|
|
28571
|
+
"name": "lead_form_id",
|
|
28572
|
+
"type": "integer",
|
|
28573
|
+
"location": "path",
|
|
28574
|
+
"required": true,
|
|
28575
|
+
"description": "ID do formulario"
|
|
28576
|
+
},
|
|
28577
|
+
{
|
|
28578
|
+
"name": "id",
|
|
28579
|
+
"type": "integer",
|
|
28580
|
+
"location": "path",
|
|
28581
|
+
"required": true,
|
|
28582
|
+
"description": "ID da resposta"
|
|
28583
|
+
}
|
|
28584
|
+
],
|
|
28585
|
+
"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",
|
|
28586
|
+
"common_use_cases": [
|
|
28587
|
+
"Ler o que o lead respondeu",
|
|
28588
|
+
"Investigar por que a consulta externa/IA falhou (effects)",
|
|
28589
|
+
"Ver a origem (utm_params)"
|
|
28590
|
+
],
|
|
28591
|
+
"related_tools": [
|
|
28592
|
+
"lionchat_lead_forms_responses_list",
|
|
28593
|
+
"lionchat_lead_forms_stats"
|
|
28594
|
+
]
|
|
28595
|
+
},
|
|
28596
|
+
{
|
|
28597
|
+
"id": "lionchat_lead_forms_test_run",
|
|
28598
|
+
"method": "POST",
|
|
28599
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/{lead_form_id}/test_runs",
|
|
28600
|
+
"title": "Testar Formulario (simulador)",
|
|
28601
|
+
"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.",
|
|
28602
|
+
"category": "Formularios",
|
|
28603
|
+
"params": [
|
|
28604
|
+
{
|
|
28605
|
+
"name": "lead_form_id",
|
|
28606
|
+
"type": "integer",
|
|
28607
|
+
"location": "path",
|
|
28608
|
+
"required": true,
|
|
28609
|
+
"description": "ID do formulario"
|
|
28610
|
+
},
|
|
28611
|
+
{
|
|
28612
|
+
"name": "answers",
|
|
28613
|
+
"type": "array",
|
|
28614
|
+
"location": "body",
|
|
28615
|
+
"required": false,
|
|
28616
|
+
"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)."
|
|
28617
|
+
}
|
|
28618
|
+
],
|
|
28619
|
+
"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}",
|
|
28620
|
+
"common_use_cases": [
|
|
28621
|
+
"Validar um formulario recem-montado antes de publicar",
|
|
28622
|
+
"Reproduzir o caminho de um lead pra depurar condicao/consulta/IA",
|
|
28623
|
+
"Conferir mensagens e variaveis sem enviar WhatsApp de verdade"
|
|
28624
|
+
],
|
|
28625
|
+
"related_tools": [
|
|
28626
|
+
"lionchat_lead_forms_show",
|
|
28627
|
+
"lionchat_lead_forms_publish"
|
|
28628
|
+
]
|
|
28629
|
+
},
|
|
28630
|
+
{
|
|
28631
|
+
"id": "lionchat_lead_forms_check_embed",
|
|
28632
|
+
"method": "POST",
|
|
28633
|
+
"path": "/api/v1/accounts/{account_id}/lead_forms/check_embed",
|
|
28634
|
+
"title": "Conferir site pra Pagina externa",
|
|
28635
|
+
"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.",
|
|
28636
|
+
"category": "Formularios",
|
|
28637
|
+
"params": [
|
|
28638
|
+
{
|
|
28639
|
+
"name": "url",
|
|
28640
|
+
"type": "string",
|
|
28641
|
+
"location": "body",
|
|
28642
|
+
"required": true,
|
|
28643
|
+
"description": "Endereco a conferir (precisa comecar com https://; {{variaveis}} sao ignoradas na conferencia)"
|
|
28644
|
+
}
|
|
28645
|
+
],
|
|
28646
|
+
"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)",
|
|
28647
|
+
"common_use_cases": [
|
|
28648
|
+
"Antes de salvar um bloco Pagina externa, saber se o site vai aparecer embutido",
|
|
28649
|
+
"Explicar ao cliente por que o checkout dele nao abre dentro do formulario"
|
|
28650
|
+
],
|
|
28651
|
+
"related_tools": [
|
|
28652
|
+
"lionchat_lead_forms_update"
|
|
28653
|
+
]
|
|
28257
28654
|
}
|
|
28258
28655
|
]
|