@lionchat/mcp-server 1.30.0 → 1.31.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 -2
- package/dist/docs/resources/agenda-multiplas-unidades.md +44 -2
- package/dist/docs/resources/assinatura-eletronica.md +19 -2
- package/dist/docs/resources/best-practices.md +7 -1
- package/dist/docs/resources/conversation-flows.md +12 -4
- package/dist/docs/resources/data-model.md +119 -1
- package/dist/docs/resources/filtros-e-relatorios.md +31 -2
- package/dist/docs/resources/flowbuilder-design-guide.md +62 -9
- package/dist/docs/resources/formularios-publicos.md +139 -0
- package/dist/docs/resources/glossary.md +23 -0
- package/dist/docs/resources/kanban-deep-dive.md +87 -4
- package/dist/docs/resources/reports-guide.md +11 -2
- package/dist/tools.js +69 -17
- package/dist/tools.js.map +1 -1
- package/endpoints.json +844 -69
- package/package.json +1 -1
package/endpoints.json
CHANGED
|
@@ -713,7 +713,7 @@
|
|
|
713
713
|
"method": "POST",
|
|
714
714
|
"path": "/api/v1/accounts/{account_id}/contacts/filter",
|
|
715
715
|
"title": "Filtrar Contatos",
|
|
716
|
-
"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_name (Empresa), job_title (Cargo) [company = campo antigo, nunca casa]; 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.\n\nTELEFONE COM E SEM O 9 (desde 05/09/2026): phone_number com equal_to/not_equal_to casa as DUAS formas do celular brasileiro (mande +5541999887766 ou +554199887766 — acham a mesma ficha; not_equal_to exclui as duas). Valor formatado ('(41) 99988-7766') tambem casa. Telefone fixo, estrangeiro ou trecho segue exato. ATENCAO: 'Selecionar todos' + excluir sobre um filtro de telefone apaga as 2 fichas da mesma pessoa (decisao do dono, 05/09).",
|
|
716
|
+
"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_name (Empresa), job_title (Cargo) [company = campo antigo, nunca casa]; 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. [2026-10-16] Campo PERSONALIZADO da EMPRESA do contato: condicao com custom_attribute_type 'company_attribute' (ex.: {attribute_key:'segmento', filter_operator:'equal_to', values:['Varejo'], custom_attribute_type:'company_attribute'}); operadores pelo tipo (texto: igual/diferente/contains/does_not_contain/preenchido; numero/data/hora: + is_greater_than/is_less_than); negativo inclui contato sem empresa; modulo Empresas desligado = ninguem; chave que nao e atributo de empresa = 422. So atributo personalizado (o cadastro da empresa nao filtra aqui).\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.\n\nTELEFONE COM E SEM O 9 (desde 05/09/2026): phone_number com equal_to/not_equal_to casa as DUAS formas do celular brasileiro (mande +5541999887766 ou +554199887766 — acham a mesma ficha; not_equal_to exclui as duas). Valor formatado ('(41) 99988-7766') tambem casa. Telefone fixo, estrangeiro ou trecho segue exato. ATENCAO: 'Selecionar todos' + excluir sobre um filtro de telefone apaga as 2 fichas da mesma pessoa (decisao do dono, 05/09).",
|
|
717
717
|
"category": "Contatos",
|
|
718
718
|
"params": [
|
|
719
719
|
{
|
|
@@ -1268,7 +1268,7 @@
|
|
|
1268
1268
|
"type": "string",
|
|
1269
1269
|
"location": "body",
|
|
1270
1270
|
"required": false,
|
|
1271
|
-
"description": "Mensagem inicial"
|
|
1271
|
+
"description": "Mensagem inicial. Aceita TEXTO solto (\"Ola!\") desde 07/10/2026 (antes dava erro 500) ou o objeto {content, attachments, template_params}. Sem mensagem a conversa nasce vazia"
|
|
1272
1272
|
},
|
|
1273
1273
|
{
|
|
1274
1274
|
"name": "priority",
|
|
@@ -1448,7 +1448,7 @@
|
|
|
1448
1448
|
"method": "POST",
|
|
1449
1449
|
"path": "/api/v1/accounts/{account_id}/conversations/filter",
|
|
1450
1450
|
"title": "Filtrar Conversas",
|
|
1451
|
-
"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'). 'contact_attribute' le a FICHA DO CONTATO da conversa (funciona desde 24/09/2026 — antes era ignorado): e o jeito de achar lead de formulario da Meta por meta_lead_form_name/meta_lead_ad_name/origin_first_*, que so existem no contato. A chave precisa de atributo DE CONTATO cadastrado.\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.",
|
|
1451
|
+
"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'). 'contact_attribute' le a FICHA DO CONTATO da conversa (funciona desde 24/09/2026 — antes era ignorado): e o jeito de achar lead de formulario da Meta por meta_lead_form_name/meta_lead_ad_name/origin_first_*, que so existem no contato. A chave precisa de atributo DE CONTATO cadastrado. 'company_attribute' (atributo de EMPRESA) NAO vale aqui: 422 (desde 2026-10-16) — filtre contatos com lionchat_contacts_filter.\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.",
|
|
1452
1452
|
"category": "Conversas",
|
|
1453
1453
|
"params": [
|
|
1454
1454
|
{
|
|
@@ -2483,7 +2483,7 @@
|
|
|
2483
2483
|
"type": "object",
|
|
2484
2484
|
"location": "body",
|
|
2485
2485
|
"required": false,
|
|
2486
|
-
"description": "Objeto de configuracoes do funil. Chaves: goals[], agents[] e automations[] (automacoes do funil). agents[] = [{id: <id do agente>}] — cada item e um OBJETO com id, nunca numero solto; use lionchat_agents_list para os IDs; o sistema completa sozinho nome, e-mail, cargo e foto de cada agente (e o que as telas mostram). Mande so agentes DESTA conta: id de outra conta fica sem nome e nao da acesso. Cada automacao: {id, enabled, trigger_type: 'card_created'|'stage_moved'|'status_change', trigger_value (id da etapa p/ stage_moved;
|
|
2486
|
+
"description": "Objeto de configuracoes do funil. Chaves: goals[], agents[] e automations[] (automacoes do funil). agents[] = [{id: <id do agente>}] — cada item e um OBJETO com id, nunca numero solto; use lionchat_agents_list para os IDs; o sistema completa sozinho nome, e-mail, cargo e foto de cada agente (e o que as telas mostram). Mande so agentes DESTA conta: id de outra conta fica sem nome e nao da acesso. Cada automacao: {id, enabled, trigger_type: 'card_created'|'stage_moved'|'status_change', trigger_value (id da etapa p/ stage_moved; 'won'|'lost'|'snoozed' p/ status_change ('snoozed' desde 11/10/2026: roda quando o card e ADIADO); vazio p/ card_created), action: 'move_to_stage'|'assign_agent'|'create_note'|'update_checklist'|'apply_checklist_template'|'notify_team'|'duplicate_item'|'send_webhook', action_config: {} (ex.: move_to_stage->{stage}; assign_agent->{agent_id}; create_note->{note_text}; apply_checklist_template->{template_id}; notify_team->{message}; send_webhook->{webhook_url}; duplicate_item->{funnel_id,stage})}. ATENCAO: gravar settings SUBSTITUI o objeto inteiro — leia o funil (show) e reenvie settings completo (goals+agents+automations). NOVO (2026-07-21): settings.teams[] = [{id: <team_id>}] — vincula TIMES ao funil: membros do time ganham acesso e entram no rodízio, resolvidos AO VIVO (mudou o time, mudou o funil). Lista efetiva = agents[] + membros dos teams[]; vazia = funil aberto a todos. IMPORTANTE: settings é substituído por inteiro — reenvie completo (goals+agents+teams+automations)."
|
|
2487
2487
|
},
|
|
2488
2488
|
{
|
|
2489
2489
|
"name": "funnel.global_custom_attributes",
|
|
@@ -2535,7 +2535,7 @@
|
|
|
2535
2535
|
"method": "GET",
|
|
2536
2536
|
"path": "/api/v1/accounts/{account_id}/funnels/{id}/stage_report",
|
|
2537
2537
|
"title": "Relatorio de UMA Etapa do Funil (Kanban)",
|
|
2538
|
-
"description": "Numeros de UMA etapa do funil calculados no SERVIDOR (antes a tela so somava os cards carregados na tela, mostrando '100' numa etapa de 432): total de cards, faixa de valores,
|
|
2538
|
+
"description": "Numeros de UMA etapa do funil calculados no SERVIDOR (antes a tela so somava os cards carregados na tela, mostrando '100' numa etapa de 432): total de cards, faixa de valores, a linha de cada situacao (open/won/lost/snoozed), distribuicao por prioridade e ranking de vendedores da etapa. Aceita escolher a REGUA de data e recortar por periodo. FUNIL = KANBAN (mesma coisa no LionChat). FILTRO DE DATA (02/09/2026): quatro eixos, cada um com janela fixa (_start/_end ISO) ou atalho relativo (_relative + _relative_days): criacao (date_*), entrada na etapa atual (stage_date_*), atualizacao (updated_date_*) e ganho/perdido em (closed_date_*). Operadores do atalho: today, yesterday (estes DOIS sem numero), last_days (ultimos N incluindo hoje), days_ago (o dia exato de N atras), days_before (mais de N atras). N inteiro 1..998; janela no fuso da CONTA. CUIDADO: operador invalido ou N invalido NAO da erro — o atalho e ignorado e a resposta volta MAIOR (ate 5.000 cards) com cara de filtrada; confira a contagem antes de qualquer acao em massa. Ver o resource de filtros. ATENCAO SITUACAO: este relatorio SEMPRE aplica os botoes de situacao, com o padrao da tela — sem show_* conta SO os abertos nao adiados, e as linhas won/lost/snoozed voltam ZERADAS. Para contar ganhos, perdidos ou adiados mande show_won/show_lost/show_snoozed=true (ou recorte com statuses[]).",
|
|
2539
2539
|
"category": "Funis",
|
|
2540
2540
|
"params": [
|
|
2541
2541
|
{
|
|
@@ -2628,9 +2628,45 @@
|
|
|
2628
2628
|
"location": "query",
|
|
2629
2629
|
"required": false,
|
|
2630
2630
|
"description": "Fim do filtro por agendamento (YYYY-MM-DD)"
|
|
2631
|
+
},
|
|
2632
|
+
{
|
|
2633
|
+
"name": "show_open",
|
|
2634
|
+
"type": "boolean",
|
|
2635
|
+
"location": "query",
|
|
2636
|
+
"required": false,
|
|
2637
|
+
"description": "Inclui os abertos NAO adiados. Padrao true (so \"false\" desliga)"
|
|
2638
|
+
},
|
|
2639
|
+
{
|
|
2640
|
+
"name": "show_won",
|
|
2641
|
+
"type": "boolean",
|
|
2642
|
+
"location": "query",
|
|
2643
|
+
"required": false,
|
|
2644
|
+
"description": "Inclui os ganhos. Padrao false: sem \"true\" a linha won vem zerada"
|
|
2645
|
+
},
|
|
2646
|
+
{
|
|
2647
|
+
"name": "show_lost",
|
|
2648
|
+
"type": "boolean",
|
|
2649
|
+
"location": "query",
|
|
2650
|
+
"required": false,
|
|
2651
|
+
"description": "Inclui os perdidos. Padrao false: sem \"true\" a linha lost vem zerada"
|
|
2652
|
+
},
|
|
2653
|
+
{
|
|
2654
|
+
"name": "show_snoozed",
|
|
2655
|
+
"type": "boolean",
|
|
2656
|
+
"location": "query",
|
|
2657
|
+
"required": false,
|
|
2658
|
+
"description": "Inclui os adiados (11/10/2026). Padrao false: sem \"true\" a linha snoozed vem zerada"
|
|
2659
|
+
},
|
|
2660
|
+
{
|
|
2661
|
+
"name": "statuses",
|
|
2662
|
+
"query_name": "statuses[]",
|
|
2663
|
+
"type": "array",
|
|
2664
|
+
"location": "query",
|
|
2665
|
+
"required": false,
|
|
2666
|
+
"description": "Recorte por situacao (open/won/lost/snoozed; \"open\" = aberto e NAO adiado), aplicado ALEM dos botoes show_*"
|
|
2631
2667
|
}
|
|
2632
2668
|
],
|
|
2633
|
-
"returns": "
|
|
2669
|
+
"returns": "{ stage, date_basis, count, values, status: { open, won, lost, snoozed — cada um {count, value} }, priorities, agents }: total de cards, faixa/soma de valores, a linha de cada situacao (open = aberto NAO adiado), distribuicao por prioridade e ranking de vendedores da etapa",
|
|
2634
2670
|
"common_use_cases": [
|
|
2635
2671
|
"Ver os numeros REAIS de uma etapa do funil num periodo",
|
|
2636
2672
|
"Comparar desempenho de vendedores numa etapa especifica"
|
|
@@ -2675,7 +2711,7 @@
|
|
|
2675
2711
|
"type": "object",
|
|
2676
2712
|
"location": "body",
|
|
2677
2713
|
"required": false,
|
|
2678
|
-
"description": "Objeto de configuracoes do funil. Chaves: goals[], agents[] e automations[] (automacoes do funil). agents[] = [{id: <id do agente>}] — cada item e um OBJETO com id, nunca numero solto; use lionchat_agents_list para os IDs; o sistema completa sozinho nome, e-mail, cargo e foto de cada agente (e o que as telas mostram). Mande so agentes DESTA conta: id de outra conta fica sem nome e nao da acesso. Cada automacao: {id (formato 'automation_<timestamp_ms>'), enabled: true, trigger_type: 'card_created'|'stage_moved'|'status_change', trigger_value SEMPRE preenchido ('card_created' literal p/ card_created; chave da etapa de destino no hash funnel.stages p/ stage_moved; 'won'|'lost' p/ status_change), action: 'move_to_stage'|'assign_agent'|'create_note'|'update_checklist'|'apply_checklist_template'|'notify_team'|'duplicate_item'|'send_webhook', action_config: {} (move_to_stage->{stage}; assign_agent->{agent_id}; create_note->{note_text}; update_checklist->{checklist_updates:[{checklist_item_id,completed,text}]}; apply_checklist_template->{template_id}; notify_team->{message}; send_webhook->{webhook_url}; duplicate_item->{funnel_id,stage})}. Regras: trigger_value vazio ou enabled=false fazem a UI descartar a automacao no proximo salvar do usuario; stage_moved + move_to_stage nunca executa (anti-loop); notify_team hoje so registra em log (nao notifica ninguem); update_checklist nao aparece na UI (so via API). ATENCAO: gravar settings SUBSTITUI o objeto inteiro — leia o funil (show) e reenvie settings completo (goals+agents+automations). NOVO (2026-07-21): settings.teams[] = [{id: <team_id>}] — vincula TIMES ao funil: membros do time ganham acesso e entram no rodízio, resolvidos AO VIVO (mudou o time, mudou o funil). Lista efetiva = agents[] + membros dos teams[]; vazia = funil aberto a todos. IMPORTANTE: settings é substituído por inteiro — reenvie completo (goals+agents+teams+automations)."
|
|
2714
|
+
"description": "Objeto de configuracoes do funil. Chaves: goals[], agents[] e automations[] (automacoes do funil). agents[] = [{id: <id do agente>}] — cada item e um OBJETO com id, nunca numero solto; use lionchat_agents_list para os IDs; o sistema completa sozinho nome, e-mail, cargo e foto de cada agente (e o que as telas mostram). Mande so agentes DESTA conta: id de outra conta fica sem nome e nao da acesso. Cada automacao: {id (formato 'automation_<timestamp_ms>'), enabled: true, trigger_type: 'card_created'|'stage_moved'|'status_change', trigger_value SEMPRE preenchido ('card_created' literal p/ card_created; chave da etapa de destino no hash funnel.stages p/ stage_moved; 'won'|'lost'|'snoozed' p/ status_change ('snoozed' desde 11/10/2026: roda quando o card e ADIADO)), action: 'move_to_stage'|'assign_agent'|'create_note'|'update_checklist'|'apply_checklist_template'|'notify_team'|'duplicate_item'|'send_webhook', action_config: {} (move_to_stage->{stage}; assign_agent->{agent_id}; create_note->{note_text}; update_checklist->{checklist_updates:[{checklist_item_id,completed,text}]}; apply_checklist_template->{template_id}; notify_team->{message}; send_webhook->{webhook_url}; duplicate_item->{funnel_id,stage})}. Regras: trigger_value vazio ou enabled=false fazem a UI descartar a automacao no proximo salvar do usuario; stage_moved + move_to_stage nunca executa (anti-loop); notify_team hoje so registra em log (nao notifica ninguem); update_checklist nao aparece na UI (so via API). ATENCAO: gravar settings SUBSTITUI o objeto inteiro — leia o funil (show) e reenvie settings completo (goals+agents+automations). NOVO (2026-07-21): settings.teams[] = [{id: <team_id>}] — vincula TIMES ao funil: membros do time ganham acesso e entram no rodízio, resolvidos AO VIVO (mudou o time, mudou o funil). Lista efetiva = agents[] + membros dos teams[]; vazia = funil aberto a todos. IMPORTANTE: settings é substituído por inteiro — reenvie completo (goals+agents+teams+automations)."
|
|
2679
2715
|
}
|
|
2680
2716
|
],
|
|
2681
2717
|
"returns": "funil atualizado Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil (2026-07-21).",
|
|
@@ -2921,7 +2957,7 @@
|
|
|
2921
2957
|
"method": "GET",
|
|
2922
2958
|
"path": "/api/v1/accounts/{account_id}/kanban_items",
|
|
2923
2959
|
"title": "Listar Items",
|
|
2924
|
-
"description": "Lista itens filtrados por funil com paginação, ordenação e filtros avançados. Lista itens Kanban paginados (per_page padrão 25, máximo 100). Filtros disponíveis: stage_id, agent_id, page, sort_by, sort_direction. Retorna meta (contadores) + payload (array de item Kanban).",
|
|
2960
|
+
"description": "Lista itens filtrados por funil com paginação, ordenação e filtros avançados. Lista itens Kanban paginados (per_page padrão 25, máximo 100). Filtros disponíveis: stage_id, agent_id, page, sort_by, sort_direction. Retorna meta (contadores) + payload (array de item Kanban). SITUACAO DO CARD (11/10/2026): esta lista NAO le statuses (ignorado aqui — o filtro por statuses[] e o lionchat_kanban_items_filter). Use os botoes show_open/show_won/show_lost/show_snoozed: SEM nenhum deles a lista traz TODAS as situacoes; mandando QUALQUER um, show_open vale true salvo se vier \"false\" (= aberto e NAO adiado) e os outros tres so valem com \"true\". So os adiados: show_snoozed=true E show_open=false. Cada card traz effective_status (open|snoozed|won|lost) e snoozed_until (ISO ou null). No card adiado item_details.status CONTINUA \"open\": a situacao real e o effective_status.",
|
|
2925
2961
|
"category": "Itens",
|
|
2926
2962
|
"params": [
|
|
2927
2963
|
{
|
|
@@ -3008,7 +3044,35 @@
|
|
|
3008
3044
|
"type": "array",
|
|
3009
3045
|
"location": "query",
|
|
3010
3046
|
"required": false,
|
|
3011
|
-
"description": "
|
|
3047
|
+
"description": "IGNORADO por esta ferramenta (a lista nao le este parametro). Para recortar por situacao aqui use show_open/show_won/show_lost/show_snoozed; statuses[] funciona no lionchat_kanban_items_filter"
|
|
3048
|
+
},
|
|
3049
|
+
{
|
|
3050
|
+
"name": "show_open",
|
|
3051
|
+
"type": "boolean",
|
|
3052
|
+
"location": "query",
|
|
3053
|
+
"required": false,
|
|
3054
|
+
"description": "Botao Abertos (desde 11/10/2026 = aberto e NAO adiado). So conta quando algum show_* vem no pedido; ai vale true salvo se vier \"false\""
|
|
3055
|
+
},
|
|
3056
|
+
{
|
|
3057
|
+
"name": "show_won",
|
|
3058
|
+
"type": "boolean",
|
|
3059
|
+
"location": "query",
|
|
3060
|
+
"required": false,
|
|
3061
|
+
"description": "Botao Ganhos: \"true\" inclui os ganhos (so conta quando algum show_* vem no pedido)"
|
|
3062
|
+
},
|
|
3063
|
+
{
|
|
3064
|
+
"name": "show_lost",
|
|
3065
|
+
"type": "boolean",
|
|
3066
|
+
"location": "query",
|
|
3067
|
+
"required": false,
|
|
3068
|
+
"description": "Botao Perdidos: \"true\" inclui os perdidos (so conta quando algum show_* vem no pedido)"
|
|
3069
|
+
},
|
|
3070
|
+
{
|
|
3071
|
+
"name": "show_snoozed",
|
|
3072
|
+
"type": "boolean",
|
|
3073
|
+
"location": "query",
|
|
3074
|
+
"required": false,
|
|
3075
|
+
"description": "Botao Adiados (11/10/2026): \"true\" inclui os adiados. So os adiados = show_snoozed=true e show_open=false"
|
|
3012
3076
|
},
|
|
3013
3077
|
{
|
|
3014
3078
|
"name": "user_ids",
|
|
@@ -3068,7 +3132,7 @@
|
|
|
3068
3132
|
"description": "Timestamp fim"
|
|
3069
3133
|
}
|
|
3070
3134
|
],
|
|
3071
|
-
"returns": "{ items: [...], pagination: {...} } (per_page 50)",
|
|
3135
|
+
"returns": "{ items: [...], pagination: {...} } (per_page 50) Cada card traz effective_status (open|snoozed|won|lost) e snoozed_until (ISO ou null). No card adiado item_details.status CONTINUA \"open\": a situacao real e o effective_status.",
|
|
3072
3136
|
"common_use_cases": [
|
|
3073
3137
|
"Dashboard: contar/exibir itens Kanban",
|
|
3074
3138
|
"Buscar com filtros antes de outra operação",
|
|
@@ -3232,7 +3296,7 @@
|
|
|
3232
3296
|
"method": "GET",
|
|
3233
3297
|
"path": "/api/v1/accounts/{account_id}/kanban_items/{id}",
|
|
3234
3298
|
"title": "Detalhe do Item",
|
|
3235
|
-
"description": "Retorna detalhes. Retorna detalhes completos de UM item Kanban específico pelo ID. Inclui campos relacionais quando aplicável. Resposta inclui selos de permissao (2026-06): can_edit, can_move, can_delete, can_assign (booleans calculados pro usuario do token).",
|
|
3299
|
+
"description": "Retorna detalhes. Retorna detalhes completos de UM item Kanban específico pelo ID. Inclui campos relacionais quando aplicável. Resposta inclui selos de permissao (2026-06): can_edit, can_move, can_delete, can_assign (booleans calculados pro usuario do token). Desde 11/10/2026: Cada card traz effective_status (open|snoozed|won|lost) e snoozed_until (ISO ou null). No card adiado item_details.status CONTINUA \"open\": a situacao real e o effective_status.",
|
|
3236
3300
|
"category": "Itens",
|
|
3237
3301
|
"params": [
|
|
3238
3302
|
{
|
|
@@ -3260,7 +3324,7 @@
|
|
|
3260
3324
|
"method": "PUT",
|
|
3261
3325
|
"path": "/api/v1/accounts/{account_id}/kanban_items/{id}",
|
|
3262
3326
|
"title": "Atualizar Item",
|
|
3263
|
-
"description": "Atualiza item (detalhes, agentes, timer, ofertas, automações). Atualiza campos do item Kanban existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: kanban_item.funnel_stage, kanban_item.position, kanban_item.item_details, kanban_item.assigned_agents, kanban_item.custom_attributes, kanban_item.timer_started_at.",
|
|
3327
|
+
"description": "Atualiza item (detalhes, agentes, timer, ofertas, automações). Atualiza campos do item Kanban existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: kanban_item.funnel_stage, kanban_item.position, kanban_item.item_details, kanban_item.assigned_agents, kanban_item.custom_attributes, kanban_item.timer_started_at. CARD ADIADO (11/10/2026): item_details.status \"open\" NAO abre um card adiado (e o mesmo salvar que o aplicativo faz o tempo todo); para abrir use lionchat_kanban_items_unsnooze ou lionchat_kanban_items_create_2. Mandar \"won\"/\"lost\" encerra o adiamento. CO-PARTICIPANTE (13/10/2026): num card GANHO, item_details.co_attributed_to = id do co-participante da venda (ex. o SDR); null tira. Fora de ganho a chave e apagada. Mande so o id — co_attributed_name o card preenche.",
|
|
3264
3328
|
"category": "Itens",
|
|
3265
3329
|
"params": [
|
|
3266
3330
|
{
|
|
@@ -3289,7 +3353,7 @@
|
|
|
3289
3353
|
"type": "object",
|
|
3290
3354
|
"location": "body",
|
|
3291
3355
|
"required": false,
|
|
3292
|
-
"description": "Objeto com os detalhes do card. MESCLA SO NO 1o NIVEL: cada chave enviada troca a chave inteira no card; as nao enviadas ficam. Lista FECHADA (outras chaves sao descartadas em silencio): title, description, status, reason, win_reason, loss_reason, attributed_to, duplicated_from_id, priority, value (NUMERO; texto de numero como \"1500.5\" e convertido, \"R$ 1.500,00\" e recusado com 422), currency, custom_attributes, offers, closed_offers, closed_offer, deadline_at, scheduling_type, scheduled_at, conversation_id, automations, notes, retroativo_em. custom_attributes = campos da aba Campos do card: LISTA [{name, type, value}] onde name+type batem EXATAMENTE com a definicao da CONTA (lionchat_kanban_config_list -> global_custom_attributes). Ex.: [{\"name\": \"Origem do Lead\", \"type\": \"string\", \"value\": \"Google\"}]. A lista e TROCADA inteira: leia o card com lionchat_kanban_items_show e reenvie TODOS os campos. Objeto {chave: valor} no lugar da lista APAGA todos os campos do card. notes e offers tambem sao listas trocadas inteiras. Motivo de ganho/perda: status \"won\"/\"lost\" + win_reason/loss_reason = o id (TEXTO) de um motivo de kanban_config.win_reasons/loss_reasons + reason = o titulo dele. Motivo livre (fora da lista): win_reason/loss_reason nulo e o texto em reason. Ex.: {\"status\": \"lost\", \"loss_reason\": \"perda-preco\", \"reason\": \"Preco alto\"}. Lancamento retroativo (marcar o fechamento com data PASSADA): retroativo_em = \"AAAA-MM-DD\" faz o ganho/perda contar no MES ESCOLHIDO em todos os relatorios, em vez do dia de hoje. So funciona JUNTO com um status \"won\"/\"lost\" que MUDA o status do card — card que ja esta ganho ignora a data (pra corrigir uma data lancada errado: mande status \"open\", que apaga o carimbo, e depois \"won\"/\"lost\" com o retroativo_em certo). A chave NAO fica gravada no card: ela so decide o carimbo item_details.status_changed_at, que e o que os relatorios contam. Data FUTURA ou ilegivel = 422. Data anterior a criacao do card e permitida. Vale SO nesta ferramenta — no criar card a chave e descartada. Ex.: {\"status\": \"won\", \"win_reason\": \"indicacao\", \"retroativo_em\": \"2026-08-05\"}."
|
|
3356
|
+
"description": "Objeto com os detalhes do card. MESCLA SO NO 1o NIVEL: cada chave enviada troca a chave inteira no card; as nao enviadas ficam. Lista FECHADA (outras chaves sao descartadas em silencio): title, description, status, reason, win_reason, loss_reason, attributed_to, co_attributed_to (co-participante da venda, so em card ganho; id de agente; null tira), duplicated_from_id, priority, value (NUMERO; texto de numero como \"1500.5\" e convertido, \"R$ 1.500,00\" e recusado com 422), currency, custom_attributes, offers, closed_offers, closed_offer, deadline_at, scheduling_type, scheduled_at, conversation_id, automations, notes, retroativo_em. custom_attributes = campos da aba Campos do card: LISTA [{name, type, value}] onde name+type batem EXATAMENTE com a definicao da CONTA (lionchat_kanban_config_list -> global_custom_attributes). Ex.: [{\"name\": \"Origem do Lead\", \"type\": \"string\", \"value\": \"Google\"}]. A lista e TROCADA inteira: leia o card com lionchat_kanban_items_show e reenvie TODOS os campos. Objeto {chave: valor} no lugar da lista APAGA todos os campos do card. notes e offers tambem sao listas trocadas inteiras. Motivo de ganho/perda: status \"won\"/\"lost\" + win_reason/loss_reason = o id (TEXTO) de um motivo de kanban_config.win_reasons/loss_reasons + reason = o titulo dele. Motivo livre (fora da lista): win_reason/loss_reason nulo e o texto em reason. Ex.: {\"status\": \"lost\", \"loss_reason\": \"perda-preco\", \"reason\": \"Preco alto\"}. Lancamento retroativo (marcar o fechamento com data PASSADA): retroativo_em = \"AAAA-MM-DD\" faz o ganho/perda contar no MES ESCOLHIDO em todos os relatorios, em vez do dia de hoje. So funciona JUNTO com um status \"won\"/\"lost\" que MUDA o status do card — card que ja esta ganho ignora a data (pra corrigir uma data lancada errado: mande status \"open\", que apaga o carimbo, e depois \"won\"/\"lost\" com o retroativo_em certo). A chave NAO fica gravada no card: ela so decide o carimbo item_details.status_changed_at, que e o que os relatorios contam. Data FUTURA ou ilegivel = 422. Data anterior a criacao do card e permitida. Vale SO nesta ferramenta — no criar card a chave e descartada. Ex.: {\"status\": \"won\", \"win_reason\": \"indicacao\", \"retroativo_em\": \"2026-08-05\"}."
|
|
3293
3357
|
},
|
|
3294
3358
|
{
|
|
3295
3359
|
"name": "kanban_item.assigned_agents",
|
|
@@ -3485,7 +3549,7 @@
|
|
|
3485
3549
|
"method": "POST",
|
|
3486
3550
|
"path": "/api/v1/accounts/{account_id}/kanban_items/{id}/change_status",
|
|
3487
3551
|
"title": "Mudar Status",
|
|
3488
|
-
"description": "Altera o status do card (open/won/lost). Param opcional attributed_to (id do responsavel pelo ganho/perda).",
|
|
3552
|
+
"description": "Altera o status do card (open/won/lost). Param opcional attributed_to (id do responsavel pelo ganho/perda). CARD ADIADO (11/10/2026): status \"open\" num card adiado ABRE o card na hora (sai do adiamento, fica no historico e dispara o fluxo \"Card aberto\"); \"won\"/\"lost\" encerram o adiamento. Para ADIAR use lionchat_kanban_items_snooze. Card ocupado = 409. CO-PARTICIPANTE (13/10/2026): com status \"won\" aceita co_attributed_to (id de UM agente, ex. o SDR que trouxe a venda) — a venda conta inteira para o vendedor (attributed_to) e o co-participante ganha numeros proprios no relatorio. Recusa 422 se nao for numero, nao for membro da conta, for o proprio vendedor ou nao tiver acesso ao funil. Reabrir/perder apaga o co-participante.",
|
|
3489
3553
|
"category": "Itens",
|
|
3490
3554
|
"params": [
|
|
3491
3555
|
{
|
|
@@ -3508,9 +3572,16 @@
|
|
|
3508
3572
|
"location": "body",
|
|
3509
3573
|
"required": false,
|
|
3510
3574
|
"description": "ID do responsavel pelo ganho/perda"
|
|
3575
|
+
},
|
|
3576
|
+
{
|
|
3577
|
+
"name": "co_attributed_to",
|
|
3578
|
+
"type": "integer",
|
|
3579
|
+
"location": "body",
|
|
3580
|
+
"required": false,
|
|
3581
|
+
"description": "So com status won: id do CO-PARTICIPANTE da venda (ex. o SDR). Nao pode ser o vendedor. Objeto ou lista = 422. O nome o card preenche sozinho."
|
|
3511
3582
|
}
|
|
3512
3583
|
],
|
|
3513
|
-
"returns": "
|
|
3584
|
+
"returns": "o card atualizado (mesmo id). Status fora de won/lost/open = 422 {error}",
|
|
3514
3585
|
"common_use_cases": [
|
|
3515
3586
|
"Cadastro inicial de item Kanban",
|
|
3516
3587
|
"Automação a partir de evento externo",
|
|
@@ -3522,6 +3593,83 @@
|
|
|
3522
3593
|
"lionchat_kanban_items_show"
|
|
3523
3594
|
]
|
|
3524
3595
|
},
|
|
3596
|
+
{
|
|
3597
|
+
"id": "lionchat_kanban_items_snooze",
|
|
3598
|
+
"method": "POST",
|
|
3599
|
+
"path": "/api/v1/accounts/{account_id}/kanban_items/{id}/snooze",
|
|
3600
|
+
"title": "Adiar Card",
|
|
3601
|
+
"description": "Adia o card ate uma data (o \"Adiar ate\" da tela, desde 11/10/2026): o card SAI da coluna e, na data marcada, ABRE sozinho e volta para a coluna, disparando o fluxo \"Card aberto\" se houver. E uma situacao DO CARD: nao mexe na conversa, e mensagem do cliente NAO abre o card. Regras: so card ABERTO (ganho/perdido = 422 \"So card aberto pode ser adiado.\"); a data precisa estar pelo menos 1 hora a frente (menos = 422 \"Escolha uma data pelo menos 1 hora a frente.\"); sem prazo maximo; adiar um card JA adiado so TROCA a data (nao dispara \"Card adiado\" de novo). Mover de etapa ou de funil, editar, nota, tarefa e responsavel NAO encerram o adiamento; marcar ganho/perdido e abrir (lionchat_kanban_items_unsnooze, ou lionchat_kanban_items_create_2 com status \"open\") encerram. item_details.status CONTINUA \"open\" — leia effective_status (\"snoozed\") e snoozed_until. A primeira passagem de aberto para adiado dispara o gatilho de fluxo \"Card adiado\" (card_snoozed) e as automacoes do funil com gatilho \"Adiado\". Quem pode: quem pode EDITAR o card (so ver = 401; card fora do alcance = 404). Card ocupado por outra operacao no mesmo instante = 409 (tente de novo em instantes). Na data, o card abre numa rodada de ate ~5 minutos depois da hora.",
|
|
3602
|
+
"category": "Itens",
|
|
3603
|
+
"params": [
|
|
3604
|
+
{
|
|
3605
|
+
"name": "account_id",
|
|
3606
|
+
"type": "integer",
|
|
3607
|
+
"location": "path",
|
|
3608
|
+
"required": true,
|
|
3609
|
+
"description": "ID da conta"
|
|
3610
|
+
},
|
|
3611
|
+
{
|
|
3612
|
+
"name": "id",
|
|
3613
|
+
"type": "integer",
|
|
3614
|
+
"location": "path",
|
|
3615
|
+
"required": true,
|
|
3616
|
+
"description": "ID do card do Kanban"
|
|
3617
|
+
},
|
|
3618
|
+
{
|
|
3619
|
+
"name": "snoozed_until",
|
|
3620
|
+
"type": "string",
|
|
3621
|
+
"location": "body",
|
|
3622
|
+
"required": true,
|
|
3623
|
+
"description": "Ate quando adiar. Aceita unix em SEGUNDOS (o mais seguro) ou milissegundos, ISO 8601 com fuso (ex.: \"2026-10-20T09:00:00-03:00\") e data/hora SEM fuso (ex.: \"2026-10-20 09:00\"), lida no fuso da CONTA. Data pura \"AAAA-MM-DD\" vale 00:00 daquele dia no fuso da conta (o card abre de madrugada; mande a hora se quiser outra). Data ilegivel ou ausente = 400 \"Data invalida para adiar o card.\". Precisa estar pelo menos 1 hora a frente."
|
|
3624
|
+
}
|
|
3625
|
+
],
|
|
3626
|
+
"returns": "O card no formato do detalhe (o mesmo de lionchat_kanban_items_show) com effective_status \"snoozed\", snoozed_until (ISO) e permissions. Erros: 400 {error} data ilegivel; 422 {error} card ganho/perdido ou data a menos de 1 hora; 409 {error} card ocupado; 404 card fora do alcance; 401 sem permissao de editar.",
|
|
3627
|
+
"common_use_cases": [
|
|
3628
|
+
"Adiar um negocio que so volta a importar numa data (\"o cliente pediu para falar em 20 dias\")",
|
|
3629
|
+
"Tirar da coluna os cards que esperam o cliente e fazer voltarem sozinhos na data",
|
|
3630
|
+
"Trocar a data de um card que ja esta adiado"
|
|
3631
|
+
],
|
|
3632
|
+
"related_tools": [
|
|
3633
|
+
"lionchat_kanban_items_unsnooze",
|
|
3634
|
+
"lionchat_kanban_items_show",
|
|
3635
|
+
"lionchat_kanban_items_list",
|
|
3636
|
+
"lionchat_kanban_items_create_2"
|
|
3637
|
+
]
|
|
3638
|
+
},
|
|
3639
|
+
{
|
|
3640
|
+
"id": "lionchat_kanban_items_unsnooze",
|
|
3641
|
+
"method": "DELETE",
|
|
3642
|
+
"path": "/api/v1/accounts/{account_id}/kanban_items/{id}/snooze",
|
|
3643
|
+
"title": "Abrir Card Adiado",
|
|
3644
|
+
"description": "Abre AGORA um card adiado (o \"Abrir agora\" da tela, desde 11/10/2026): ele volta para a coluna e o fluxo \"Card aberto\" (card_opened) dispara NA HORA — se esse fluxo manda mensagem, o cliente recebe ja; confirme antes. Nao apaga nada: so encerra o adiamento. Card que NAO esta adiado: nada acontece e a resposta e o card como esta (sem erro e sem aviso). item_details.status nao muda (continua \"open\"). Fica no historico do card (item_unsnoozed, motivo \"person\"). Quem pode: quem pode EDITAR o card (so ver = 401; fora do alcance = 404). Card ocupado = 409.",
|
|
3645
|
+
"category": "Itens",
|
|
3646
|
+
"params": [
|
|
3647
|
+
{
|
|
3648
|
+
"name": "account_id",
|
|
3649
|
+
"type": "integer",
|
|
3650
|
+
"location": "path",
|
|
3651
|
+
"required": true,
|
|
3652
|
+
"description": "ID da conta"
|
|
3653
|
+
},
|
|
3654
|
+
{
|
|
3655
|
+
"name": "id",
|
|
3656
|
+
"type": "integer",
|
|
3657
|
+
"location": "path",
|
|
3658
|
+
"required": true,
|
|
3659
|
+
"description": "ID do card do Kanban"
|
|
3660
|
+
}
|
|
3661
|
+
],
|
|
3662
|
+
"returns": "O card no formato do detalhe com effective_status \"open\" e snoozed_until null (ou o card como estava, se nao estava adiado). Erros: 409 {error} card ocupado; 404 card fora do alcance; 401 sem permissao de editar.",
|
|
3663
|
+
"common_use_cases": [
|
|
3664
|
+
"Trazer de volta antes da data um card adiado (\"o cliente respondeu antes\")",
|
|
3665
|
+
"Desfazer um adiamento feito por engano"
|
|
3666
|
+
],
|
|
3667
|
+
"related_tools": [
|
|
3668
|
+
"lionchat_kanban_items_snooze",
|
|
3669
|
+
"lionchat_kanban_items_show",
|
|
3670
|
+
"lionchat_kanban_items_list"
|
|
3671
|
+
]
|
|
3672
|
+
},
|
|
3525
3673
|
{
|
|
3526
3674
|
"id": "lionchat_kanban_items_list_1",
|
|
3527
3675
|
"method": "GET",
|
|
@@ -3611,7 +3759,7 @@
|
|
|
3611
3759
|
"method": "GET",
|
|
3612
3760
|
"path": "/api/v1/accounts/{account_id}/kanban_items/search",
|
|
3613
3761
|
"title": "Buscar Items",
|
|
3614
|
-
"description": "Busca items por título, descrição, nome ou email do cliente. Busca itens Kanban por texto livre. Suporta query parcial em nome/email/telefone. Use para \"encontrar X\" rapidamente.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao).",
|
|
3762
|
+
"description": "Busca items por título, descrição, nome ou email do cliente. Busca itens Kanban por texto livre. Suporta query parcial em nome/email/telefone. Use para \"encontrar X\" rapidamente.\n\nNOVO (2026-06): 'q' aceita multiplos termos (espacos = E/AND, cap 5; cada termo precisa bater) e dados cadastrais (CPF/CNPJ/RG por digitos, ignora pontuacao). Desde 11/10/2026: Cada card traz effective_status (open|snoozed|won|lost) e snoozed_until (ISO ou null). No card adiado item_details.status CONTINUA \"open\": a situacao real e o effective_status.",
|
|
3615
3763
|
"category": "Itens",
|
|
3616
3764
|
"params": [
|
|
3617
3765
|
{
|
|
@@ -3674,7 +3822,7 @@
|
|
|
3674
3822
|
"method": "GET",
|
|
3675
3823
|
"path": "/api/v1/accounts/{account_id}/kanban_items/filter",
|
|
3676
3824
|
"title": "Filtrar Items",
|
|
3677
|
-
"description": "Filtra cards do Kanban com o filtro RICO da plataforma (mesmo motor da tela '+ Filtro'). Filtros REAIS aplicados: etapas (stages), prioridades,
|
|
3825
|
+
"description": "Filtra cards do Kanban com o filtro RICO da plataforma (mesmo motor da tela '+ Filtro'). Filtros REAIS aplicados: etapas (stages), prioridades, situacao do card (open/won/lost/snoozed — desde 11/10/2026 \"open\" = aberto e NAO adiado), agente, faixa de valor, periodo de criacao (date_start/end), periodo de MOVIMENTACAO PARA A ETAPA atual (stage_date_start/end), periodo de agendamento (scheduled_date_*), tarefas (task_filter), canal, etiqueta da conversa, oferta e atributos personalizados de card/contato/conversa (JSON-string + custom_attribute_match all/any). ATENCAO: SEM paginacao — retorna ate 5000 cards em ordem created_at DESC, shape {items:[], total, filters}. NAO existe filtro por time aqui (use lionchat_kanban_items_list_3 pra relatorio por time, ou filtre por agent_id); ordenacao e fixa. (2026-07-24: removidos os parametros stage_id/inbox_id/sort_by/sort_direction/page — eram aceitos mas IGNORADOS pelo backend; use stages[] no lugar de stage_id.) NOVO 2026-08-13: updated_date_start/end (ultima alteracao, qualquer mexida) e closed_date_start/end (data do DESFECHO — ganho/perdido; use com statuses=['won'] pra 'os ganhos do mes'). FILTRO DE DATA (02/09/2026): quatro eixos, cada um com janela fixa (_start/_end ISO) ou atalho relativo (_relative + _relative_days): criacao (date_*), entrada na etapa atual (stage_date_*), atualizacao (updated_date_*) e ganho/perdido em (closed_date_*). Operadores do atalho: today, yesterday (estes DOIS sem numero), last_days (ultimos N incluindo hoje), days_ago (o dia exato de N atras), days_before (mais de N atras). N inteiro 1..998; janela no fuso da CONTA. CUIDADO: operador invalido ou N invalido NAO da erro — o atalho e ignorado e a resposta volta MAIOR (ate 5.000 cards) com cara de filtrada; confira a contagem antes de qualquer acao em massa. Ver o resource de filtros.",
|
|
3678
3826
|
"category": "Itens",
|
|
3679
3827
|
"params": [
|
|
3680
3828
|
{
|
|
@@ -3705,7 +3853,7 @@
|
|
|
3705
3853
|
"type": "array",
|
|
3706
3854
|
"location": "query",
|
|
3707
3855
|
"required": false,
|
|
3708
|
-
"description": "
|
|
3856
|
+
"description": "Situacao (open/won/lost/snoozed). Desde 11/10/2026: \"open\" = aberto e NAO adiado; \"snoozed\" = adiado. Sem o parametro vem todas as situacoes"
|
|
3709
3857
|
},
|
|
3710
3858
|
{
|
|
3711
3859
|
"name": "value_min",
|
|
@@ -3856,7 +4004,7 @@
|
|
|
3856
4004
|
"description": "'all' (E — todas as condicoes de atributo, padrao) ou 'any' (OU — qualquer uma)"
|
|
3857
4005
|
}
|
|
3858
4006
|
],
|
|
3859
|
-
"returns": "{ items: [cards serializados], total: <int>, filters: <eco dos filtros> } — cap 5000, sem paginacao",
|
|
4007
|
+
"returns": "{ items: [cards serializados], total: <int>, filters: <eco dos filtros> } — cap 5000, sem paginacao Cada card traz effective_status (open|snoozed|won|lost) e snoozed_until (ISO ou null). No card adiado item_details.status CONTINUA \"open\": a situacao real e o effective_status.",
|
|
3860
4008
|
"common_use_cases": [
|
|
3861
4009
|
"Relatorio de cards por periodo + etapa + valor",
|
|
3862
4010
|
"Cards com atributo personalizado especifico (card/contato/conversa)",
|
|
@@ -3891,6 +4039,14 @@
|
|
|
3891
4039
|
"required": false,
|
|
3892
4040
|
"description": "Prioridades"
|
|
3893
4041
|
},
|
|
4042
|
+
{
|
|
4043
|
+
"name": "statuses",
|
|
4044
|
+
"query_name": "statuses[]",
|
|
4045
|
+
"type": "array",
|
|
4046
|
+
"location": "query",
|
|
4047
|
+
"required": false,
|
|
4048
|
+
"description": "Situacao (open/won/lost/snoozed): \"open\" = aberto e NAO adiado; \"snoozed\" = adiado. Sem o parametro exporta todas as situacoes"
|
|
4049
|
+
},
|
|
3894
4050
|
{
|
|
3895
4051
|
"name": "agent_id",
|
|
3896
4052
|
"type": "integer",
|
|
@@ -3955,7 +4111,7 @@
|
|
|
3955
4111
|
"description": "Agendamento ate (YYYY-MM-DD)"
|
|
3956
4112
|
}
|
|
3957
4113
|
],
|
|
3958
|
-
"returns": "NAO devolve JSON. Devolve um ARQUIVO CSV pra download (text/csv, anexo `kanban_items_<funil>_<data>.csv`), com cabecalho e uma linha por card: id, titulo, descricao, status, prioridade, valor, etapa (nome amigavel), funil, agentes, cliente, email, telefone, criado em, atualizado em, prazo, id da conversa, conversas vinculadas e
|
|
4114
|
+
"returns": "NAO devolve JSON. Devolve um ARQUIVO CSV pra download (text/csv, anexo `kanban_items_<funil>_<data>.csv`), com cabecalho e uma linha por card: id, titulo, descricao, status, prioridade, valor, etapa (nome amigavel), funil, agentes, cliente, email, telefone, criado em, atualizado em, prazo, id da conversa, conversas vinculadas, ofertas e, desde 11/10/2026, \"Adiado ate\" (ultima coluna, data/hora no fuso da conta; na coluna status o card adiado sai como \"snoozed\"). Nao ha `meta` nem `payload` — o corpo e o CSV cru. `funnel_id` e OBRIGATORIO (sem ele volta 400 `{error}`). Filtros opcionais: priorities, statuses, value_min, value_max, agent_id, date_start/date_end (CRIACAO), stage_date_start/stage_date_end (quando o card ENTROU na etapa atual) e scheduled_date_start/scheduled_date_end. So exporta cards das caixas que o usuario pode ver.",
|
|
3959
4115
|
"common_use_cases": [
|
|
3960
4116
|
"Dashboard: contar/exibir itens Kanban",
|
|
3961
4117
|
"Buscar com filtros antes de outra operação",
|
|
@@ -4049,7 +4205,7 @@
|
|
|
4049
4205
|
"method": "GET",
|
|
4050
4206
|
"path": "/api/v1/accounts/{account_id}/kanban_items/reports",
|
|
4051
4207
|
"title": "Relatório Agregado do Kanban",
|
|
4052
|
-
"description": "RELATORIO AGREGADO do Kanban (funil de vendas) — a resposta e um OBJETO de metricas, nao lista de cards: soma de valores GANHOS no periodo, contagem/valor por etapa, previsao ponderada (forecast), top negocios, cards parados (stale) e metas do funil. Filtra por periodo (from/to), agentes (user_ids[]) e time (team_id). USE ESTA TOOL quando pedirem 'relatorio do funil/vendas/ganhos do mes por agente ou time'. Pra LISTAR os cards em si, use lionchat_kanban_items_filter. ATENCAO wonInPeriod/wonValueInPeriod: em instalacao ANTERIOR a atualizacao de 26/07/2026 eles SUBCONTAM — negocio ganho no periodo cujo card foi criado ANTES do periodo fica de fora (numa conta real, metade dos ganhos e R$3.750 sumiam). Ao responder receita nessas contas, avise que o numero pode estar subestimado em funil de ciclo longo.",
|
|
4208
|
+
"description": "RELATORIO AGREGADO do Kanban (funil de vendas) — a resposta e um OBJETO de metricas, nao lista de cards: soma de valores GANHOS no periodo, contagem/valor por etapa, previsao ponderada (forecast), top negocios, cards parados (stale) e metas do funil. CARD ADIADO (11/10/2026): statusDistribution.open CONTINUA incluindo os adiados (e a soma que o aplicativo le) e statusDistribution.snoozed vem ao lado: abertos de verdade = open - snoozed. Parados, maiores negocios, ranking e previsao ja deixam o adiado de fora. Filtra por periodo (from/to), agentes (user_ids[]) e time (team_id). USE ESTA TOOL quando pedirem 'relatorio do funil/vendas/ganhos do mes por agente ou time'. Pra LISTAR os cards em si, use lionchat_kanban_items_filter. ATENCAO wonInPeriod/wonValueInPeriod: em instalacao ANTERIOR a atualizacao de 26/07/2026 eles SUBCONTAM — negocio ganho no periodo cujo card foi criado ANTES do periodo fica de fora (numa conta real, metade dos ganhos e R$3.750 sumiam). Ao responder receita nessas contas, avise que o numero pode estar subestimado em funil de ciclo longo. CO-PARTICIPANTE DA VENDA (13/10/2026): vem sempre coParticipantRanking [{id, name, sales, value}] — uma linha por co-participante (ex. o SDR marcado no ganho), contando cards GANHOS no periodo com os mesmos recortes; o filtro de pessoa/time vale sobre o co-participante; nenhum numero antigo muda. Com include_shared_sales=true vem tambem sharedSalesSummary {solo, shared, sharedSellerLeft} (cada um {count, value}; sozinho + compartilhadas = ganhos do periodo) e sharedSalesBySeller [{id, sales, value}]. A LISTA das vendas compartilhadas e lionchat_kanban_items_shared_sales.",
|
|
4053
4209
|
"category": "Itens",
|
|
4054
4210
|
"params": [
|
|
4055
4211
|
{
|
|
@@ -4088,23 +4244,148 @@
|
|
|
4088
4244
|
"required": false,
|
|
4089
4245
|
"description": "ID do time — restringe aos cards dos agentes do time"
|
|
4090
4246
|
},
|
|
4247
|
+
{
|
|
4248
|
+
"name": "label_names",
|
|
4249
|
+
"query_name": "label_names[]",
|
|
4250
|
+
"type": "array",
|
|
4251
|
+
"location": "query",
|
|
4252
|
+
"required": false,
|
|
4253
|
+
"description": "Etiquetas (pelo NOME, como aparecem na conversa) — so cards com essas etiquetas"
|
|
4254
|
+
},
|
|
4255
|
+
{
|
|
4256
|
+
"name": "win_reason_ids",
|
|
4257
|
+
"query_name": "win_reason_ids[]",
|
|
4258
|
+
"type": "array",
|
|
4259
|
+
"location": "query",
|
|
4260
|
+
"required": false,
|
|
4261
|
+
"description": "Codigos dos motivos de GANHO (lionchat_kanban_config_list) — so ganhos com esses motivos"
|
|
4262
|
+
},
|
|
4091
4263
|
{
|
|
4092
4264
|
"name": "date_basis",
|
|
4093
4265
|
"type": "string",
|
|
4094
4266
|
"location": "query",
|
|
4095
4267
|
"required": false,
|
|
4096
4268
|
"description": "Qual data o periodo (from/to) considera. 'any' = PADRAO e regua historica (card CRIADO no periodo OU FECHADO no periodo) — omitir mantem exatamente os numeros de sempre. 'created' = so criados. 'moved' = so os que entraram na etapa atual no periodo. 'closed' = so ganhos/perdidos no periodo (a pergunta de receita). Valor invalido cai no padrao sem erro, e a regua aplicada volta em dateBasis."
|
|
4269
|
+
},
|
|
4270
|
+
{
|
|
4271
|
+
"name": "include_shared_sales",
|
|
4272
|
+
"type": "boolean",
|
|
4273
|
+
"location": "query",
|
|
4274
|
+
"required": false,
|
|
4275
|
+
"description": "true = traz sharedSalesSummary e sharedSalesBySeller (vendas sozinho x compartilhadas com co-participante). Sem o parametro a resposta e a de sempre."
|
|
4097
4276
|
}
|
|
4098
4277
|
],
|
|
4099
|
-
"returns": "objeto de metricas agregadas do funil (valores ganhos, por etapa, forecast, top deals, stale) — NAO e array de itens",
|
|
4278
|
+
"returns": "objeto de metricas agregadas do funil (valores ganhos, por etapa, forecast, top deals, stale, coParticipantRanking; com include_shared_sales=true tambem sharedSalesSummary e sharedSalesBySeller) — NAO e array de itens",
|
|
4100
4279
|
"common_use_cases": [
|
|
4101
4280
|
"Ganhos do mes por agente ou time",
|
|
4102
4281
|
"Valor total e contagem por etapa do funil",
|
|
4103
|
-
"Forecast (previsao ponderada) e negocios parados"
|
|
4282
|
+
"Forecast (previsao ponderada) e negocios parados",
|
|
4283
|
+
"Quanto cada SDR (co-participante) trouxe e vendas sozinho x compartilhadas para comissao dividida"
|
|
4104
4284
|
],
|
|
4105
4285
|
"related_tools": [
|
|
4106
4286
|
"lionchat_kanban_items_list",
|
|
4107
4287
|
"lionchat_kanban_items_create",
|
|
4288
|
+
"lionchat_kanban_items_show",
|
|
4289
|
+
"lionchat_kanban_items_shared_sales"
|
|
4290
|
+
]
|
|
4291
|
+
},
|
|
4292
|
+
{
|
|
4293
|
+
"id": "lionchat_kanban_items_shared_sales",
|
|
4294
|
+
"method": "GET",
|
|
4295
|
+
"path": "/api/v1/accounts/{account_id}/kanban_items/shared_sales",
|
|
4296
|
+
"title": "Vendas Compartilhadas (vendedor + co-participante)",
|
|
4297
|
+
"description": "[13/10/2026] A lista 'Vendas compartilhadas no periodo' do relatorio do Kanban (aba Vendedores): cards GANHOS no periodo com co-participante (ex. o SDR) DIFERENTE do vendedor gravado no card. Mesmos filtros e mesma regua do lionchat_kanban_items_list_3; a mais recente no topo, 50 por vez (limit ate 500). Para a proxima pagina devolva o nextCursor recebido: cursor_at = nextCursor.at e cursor_id = nextCursor.id; nextCursor nulo = acabou (cursor invalido volta a primeira pagina). Com filtro de pessoa/time so entra venda em que alguem do filtro foi VENDEDOR ou CO-PARTICIPANTE e vem asSellerCount/asCoCount (sem filtro, nulos). canOpen por linha diz se quem pediu pode abrir o card; quem ve so parte do Kanban recebe as vendas que nao ve so como hiddenCount (nunca o titulo). Sair da conta NAO transforma venda compartilhada em individual (vale o vendedor gravado). Mesma permissao do relatorio do Kanban.",
|
|
4298
|
+
"category": "Itens",
|
|
4299
|
+
"params": [
|
|
4300
|
+
{
|
|
4301
|
+
"name": "funnel_id",
|
|
4302
|
+
"type": "integer",
|
|
4303
|
+
"location": "query",
|
|
4304
|
+
"required": false,
|
|
4305
|
+
"description": "ID do funil (opcional; sem ele, todos os funis da conta)"
|
|
4306
|
+
},
|
|
4307
|
+
{
|
|
4308
|
+
"name": "from",
|
|
4309
|
+
"type": "string",
|
|
4310
|
+
"location": "query",
|
|
4311
|
+
"required": false,
|
|
4312
|
+
"description": "Inicio do periodo. Aceita: unix em SEGUNDOS (o mais seguro), unix em milissegundos, ISO 8601 (com Z ou offset; sem offset vale a hora da conta) e data pura AAAA-MM-DD (dia INTEIRO no fuso da conta: inicio 00:00:00, fim 23:59:59). Texto ilegivel devolve 400 com a explicacao do formato. Mande unix se quiser o instante exato; data SEM hora cobre o dia inteiro no fuso da conta. Padrao: 30 dias atras."
|
|
4313
|
+
},
|
|
4314
|
+
{
|
|
4315
|
+
"name": "to",
|
|
4316
|
+
"type": "string",
|
|
4317
|
+
"location": "query",
|
|
4318
|
+
"required": false,
|
|
4319
|
+
"description": "Fim do periodo. Aceita: unix em SEGUNDOS (o mais seguro), unix em milissegundos, ISO 8601 (com Z ou offset; sem offset vale a hora da conta) e data pura AAAA-MM-DD (dia INTEIRO no fuso da conta: inicio 00:00:00, fim 23:59:59). Texto ilegivel devolve 400 com a explicacao do formato. Data SEM hora cobre o dia inteiro (ate 23:59:59 no fuso da conta). Padrao: agora."
|
|
4320
|
+
},
|
|
4321
|
+
{
|
|
4322
|
+
"name": "date_basis",
|
|
4323
|
+
"type": "string",
|
|
4324
|
+
"location": "query",
|
|
4325
|
+
"required": false,
|
|
4326
|
+
"description": "Qual data o periodo (from/to) considera. 'any' = PADRAO e regua historica (card CRIADO no periodo OU FECHADO no periodo) — omitir mantem exatamente os numeros de sempre. 'created' = so criados. 'moved' = so os que entraram na etapa atual no periodo. 'closed' = so ganhos/perdidos no periodo (a pergunta de receita). Valor invalido cai no padrao sem erro, e a regua aplicada volta em dateBasis."
|
|
4327
|
+
},
|
|
4328
|
+
{
|
|
4329
|
+
"name": "user_ids",
|
|
4330
|
+
"query_name": "user_ids[]",
|
|
4331
|
+
"type": "array",
|
|
4332
|
+
"location": "query",
|
|
4333
|
+
"required": false,
|
|
4334
|
+
"description": "IDs de agentes — so vendas em que um deles foi o VENDEDOR gravado ou o CO-PARTICIPANTE"
|
|
4335
|
+
},
|
|
4336
|
+
{
|
|
4337
|
+
"name": "team_id",
|
|
4338
|
+
"type": "integer",
|
|
4339
|
+
"location": "query",
|
|
4340
|
+
"required": false,
|
|
4341
|
+
"description": "ID do time — mesma regra do user_ids para as pessoas do time"
|
|
4342
|
+
},
|
|
4343
|
+
{
|
|
4344
|
+
"name": "label_names",
|
|
4345
|
+
"query_name": "label_names[]",
|
|
4346
|
+
"type": "array",
|
|
4347
|
+
"location": "query",
|
|
4348
|
+
"required": false,
|
|
4349
|
+
"description": "Etiquetas (pelo NOME) — so cards com essas etiquetas"
|
|
4350
|
+
},
|
|
4351
|
+
{
|
|
4352
|
+
"name": "win_reason_ids",
|
|
4353
|
+
"query_name": "win_reason_ids[]",
|
|
4354
|
+
"type": "array",
|
|
4355
|
+
"location": "query",
|
|
4356
|
+
"required": false,
|
|
4357
|
+
"description": "Codigos dos motivos de GANHO — so ganhos com esses motivos"
|
|
4358
|
+
},
|
|
4359
|
+
{
|
|
4360
|
+
"name": "cursor_at",
|
|
4361
|
+
"type": "string",
|
|
4362
|
+
"location": "query",
|
|
4363
|
+
"required": false,
|
|
4364
|
+
"description": "Pagina seguinte: o nextCursor.at da resposta anterior (data do ganho com 6 casas)"
|
|
4365
|
+
},
|
|
4366
|
+
{
|
|
4367
|
+
"name": "cursor_id",
|
|
4368
|
+
"type": "integer",
|
|
4369
|
+
"location": "query",
|
|
4370
|
+
"required": false,
|
|
4371
|
+
"description": "Pagina seguinte: o nextCursor.id da resposta anterior"
|
|
4372
|
+
},
|
|
4373
|
+
{
|
|
4374
|
+
"name": "limit",
|
|
4375
|
+
"type": "integer",
|
|
4376
|
+
"location": "query",
|
|
4377
|
+
"required": false,
|
|
4378
|
+
"description": "Linhas por pagina (padrao 50, maximo 500; acima disso para no teto)"
|
|
4379
|
+
}
|
|
4380
|
+
],
|
|
4381
|
+
"returns": "{total, totalValue, asSellerCount, asCoCount, hiddenCount, nextCursor: {at, id} | null, items: [{id, title, value, wonAt, funnelId, sellerId, sellerName, sellerActive, coId, coName, coActive, canOpen}]}",
|
|
4382
|
+
"common_use_cases": [
|
|
4383
|
+
"Listar as vendas feitas com SDR (co-participante) no mes para pagar comissao dividida",
|
|
4384
|
+
"Ver as vendas compartilhadas de um vendedor ou de um SDR especifico (user_ids)"
|
|
4385
|
+
],
|
|
4386
|
+
"related_tools": [
|
|
4387
|
+
"lionchat_kanban_items_list_3",
|
|
4388
|
+
"lionchat_kanban_items_create_2",
|
|
4108
4389
|
"lionchat_kanban_items_show"
|
|
4109
4390
|
]
|
|
4110
4391
|
},
|
|
@@ -7998,7 +8279,7 @@
|
|
|
7998
8279
|
"method": "POST",
|
|
7999
8280
|
"path": "/api/v1/accounts/{account_id}/macros",
|
|
8000
8281
|
"title": "Criar Macro",
|
|
8001
|
-
"description": "Cria uma nova macro com ações. Obrigatórios: name, actions (visibility: personal ou global). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422. CARDÁPIO (
|
|
8282
|
+
"description": "Cria uma nova macro com ações. Obrigatórios: name, actions (visibility: personal ou global). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado (ex.: texto solto) retorna 422. CARDÁPIO (11/10/2026, 42 ações — os action_params seguem os MESMOS formatos das automações, ver conversation-flows.md 'Acoes de automacao'): send_message, add_private_note, send_canned_response ([id] — na MACRO a mensagem sai assinada pelo EXECUTOR; na automação sai como robô), send_attachment, send_email_transcript, send_email_to_team, send_webhook_event, add_label/remove_label (etiqueta da CONVERSA), add_contact_label/remove_contact_label ([titulos] — etiqueta do CONTATO), assign_agent, assign_team, remove_assigned_team, distribute_agents ([agent_ids] — rodízio de verdade, nunca sorteio), change_status, change_priority, open_conversation/pending_conversation/resolve_conversation, snooze_conversation ([] = até a próxima resposta, ou ['until_tomorrow'] etc.), mute_conversation, mark_unread ([]), add_sla ([sla_policy_id]), assign_captain_assistant ([id] ou [{assistant_id, proactive}]), deactivate_captain ([]), send_signature_document, update_contact_attribute/update_conversation_attribute ([{attribute_key, value}] — chave PROTEGIDA é recusada na execução e fica só no log: prefixos waha_whatsapp_/whatsapp_/origin_/ctwa_/meta_lead_/lt_ e atributos de sistema como utm_*/gclid), update_card_attribute ([{funnel_id, attribute_key, value}]), add_card_checklist ([{funnel_id, checklist_template_ids}]), add_card_offer ([{funnel_id, offer_ids}]), e as 8 de Kanban: create_kanban_item, move_kanban_item_to_stage, assign_agent_to_kanban_item, add_note_to_kanban_item, start_kanban_item_timer, stop_kanban_item_timer, set_kanban_item_status, snooze_kanban_item (todas exigem card já existente no funil informado, exceto create). snooze_kanban_item ([{funnel_id, amount, unit: \"hours\"|\"days\"}], desde 11/10/2026) ADIA o card e, ao contrário das irmãs, FALHA visível quando não dá para adiar (card fechado, sem card no funil, tempo inválido); set_kanban_item_status [\"open\"] num card adiado ABRE o card. send_conversion ([{destinations, event_names, value}] — Meta CAPI/GA4/Google Ads com trigger_type 'macro') só pode ser SALVO por administrador ou cargo com marketing_integrations_manage: para os demais, 422 com o motivo; EXECUTAR segue liberado; teto de 50 conversões por execução (o excedente é pulado com log e as outras ações rodam). Fora do cardápio: send_whatsapp_template. start_flow ([flow_id] — dispara um FLOW DE ACOES (flow_type 'action') na conversa; 17/09/2026). SO flow de acoes entra aqui: a macro roda em qualquer conversa e nao filtra caixa, entao um flow de MENSAGEM apontado aqui rodaria numa caixa que nao e dele. Flow inexistente, desligado ou de outro tipo e ignorado em silencio.",
|
|
8002
8283
|
"category": "Macros",
|
|
8003
8284
|
"params": [
|
|
8004
8285
|
{
|
|
@@ -8020,7 +8301,7 @@
|
|
|
8020
8301
|
"type": "array",
|
|
8021
8302
|
"location": "body",
|
|
8022
8303
|
"required": true,
|
|
8023
|
-
"description": "LISTA de objetos {action_name, action_params} — 41 nomes aceitos, listados na descricao da tool; formatos iguais aos das automacoes. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]. Tabela completa no resource conversation-flows ('Acoes de automacao')."
|
|
8304
|
+
"description": "LISTA de objetos {action_name, action_params} — 41 nomes aceitos, listados na descricao da tool; formatos iguais aos das automacoes. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]; snooze_kanban_item [{\"funnel_id\": 31, \"amount\": 3, \"unit\": \"days\"}] (11/10/2026: adia o card por N horas/dias; unit \"hours\" ou \"days\", amount inteiro >= 1; em regra de evento de CARD basta [{\"amount\": 3, \"unit\": \"days\"}]; falha visível se não der para adiar). Tabela completa no resource conversation-flows ('Acoes de automacao')."
|
|
8024
8305
|
}
|
|
8025
8306
|
],
|
|
8026
8307
|
"returns": "macro criado (com novo ID)",
|
|
@@ -8060,7 +8341,7 @@
|
|
|
8060
8341
|
"method": "PATCH",
|
|
8061
8342
|
"path": "/api/v1/accounts/{account_id}/macros/{id}",
|
|
8062
8343
|
"title": "Atualizar Macro",
|
|
8063
|
-
"description": "Atualiza macro. PATCH parcial: só campos enviados são alterados (name, actions, visibility). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado retorna 422. CARDÁPIO (
|
|
8344
|
+
"description": "Atualiza macro. PATCH parcial: só campos enviados são alterados (name, actions, visibility). As actions DEVEM ser um array de objetos {action_name, action_params} — item malformado retorna 422. CARDÁPIO (11/10/2026, 42 ações — os action_params seguem os MESMOS formatos das automações, ver conversation-flows.md 'Acoes de automacao'): send_message, add_private_note, send_canned_response ([id] — na MACRO a mensagem sai assinada pelo EXECUTOR; na automação sai como robô), send_attachment, send_email_transcript, send_email_to_team, send_webhook_event, add_label/remove_label (etiqueta da CONVERSA), add_contact_label/remove_contact_label ([titulos] — etiqueta do CONTATO), assign_agent, assign_team, remove_assigned_team, distribute_agents ([agent_ids] — rodízio de verdade, nunca sorteio), change_status, change_priority, open_conversation/pending_conversation/resolve_conversation, snooze_conversation ([] = até a próxima resposta, ou ['until_tomorrow'] etc.), mute_conversation, mark_unread ([]), add_sla ([sla_policy_id]), assign_captain_assistant ([id] ou [{assistant_id, proactive}]), deactivate_captain ([]), send_signature_document, update_contact_attribute/update_conversation_attribute ([{attribute_key, value}] — chave PROTEGIDA é recusada na execução e fica só no log: prefixos waha_whatsapp_/whatsapp_/origin_/ctwa_/meta_lead_/lt_ e atributos de sistema como utm_*/gclid), update_card_attribute ([{funnel_id, attribute_key, value}]), add_card_checklist ([{funnel_id, checklist_template_ids}]), add_card_offer ([{funnel_id, offer_ids}]), e as 8 de Kanban: create_kanban_item, move_kanban_item_to_stage, assign_agent_to_kanban_item, add_note_to_kanban_item, start_kanban_item_timer, stop_kanban_item_timer, set_kanban_item_status, snooze_kanban_item (todas exigem card já existente no funil informado, exceto create). snooze_kanban_item ([{funnel_id, amount, unit: \"hours\"|\"days\"}], desde 11/10/2026) ADIA o card e, ao contrário das irmãs, FALHA visível quando não dá para adiar (card fechado, sem card no funil, tempo inválido); set_kanban_item_status [\"open\"] num card adiado ABRE o card. send_conversion ([{destinations, event_names, value}] — Meta CAPI/GA4/Google Ads com trigger_type 'macro') só pode ser SALVO por administrador ou cargo com marketing_integrations_manage: para os demais, 422 com o motivo; EXECUTAR segue liberado; teto de 50 conversões por execução (o excedente é pulado com log e as outras ações rodam). Fora do cardápio: send_whatsapp_template. start_flow ([flow_id] — dispara um FLOW DE ACOES (flow_type 'action') na conversa; 17/09/2026). SO flow de acoes entra aqui: a macro roda em qualquer conversa e nao filtra caixa, entao um flow de MENSAGEM apontado aqui rodaria numa caixa que nao e dele. Flow inexistente, desligado ou de outro tipo e ignorado em silencio.",
|
|
8064
8345
|
"category": "Macros",
|
|
8065
8346
|
"params": [
|
|
8066
8347
|
{
|
|
@@ -8082,7 +8363,7 @@
|
|
|
8082
8363
|
"type": "array",
|
|
8083
8364
|
"location": "body",
|
|
8084
8365
|
"required": false,
|
|
8085
|
-
"description": "LISTA de objetos {action_name, action_params} — 41 nomes aceitos, listados na descricao da tool; formatos iguais aos das automacoes. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]. Tabela completa no resource conversation-flows ('Acoes de automacao'). No update a lista SUBSTITUI a anterior: mande TODAS as acoes."
|
|
8366
|
+
"description": "LISTA de objetos {action_name, action_params} — 41 nomes aceitos, listados na descricao da tool; formatos iguais aos das automacoes. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]; snooze_kanban_item [{\"funnel_id\": 31, \"amount\": 3, \"unit\": \"days\"}] (11/10/2026: adia o card por N horas/dias; unit \"hours\" ou \"days\", amount inteiro >= 1; em regra de evento de CARD basta [{\"amount\": 3, \"unit\": \"days\"}]; falha visível se não der para adiar). Tabela completa no resource conversation-flows ('Acoes de automacao'). No update a lista SUBSTITUI a anterior: mande TODAS as acoes."
|
|
8086
8367
|
},
|
|
8087
8368
|
{
|
|
8088
8369
|
"name": "visibility",
|
|
@@ -8520,7 +8801,7 @@
|
|
|
8520
8801
|
"description": "Recorta por AGENDA (unidade). SEM este parametro a listagem ja vem recortada pelas agendas que o usuario enxerga. Na agenda PRINCIPAL entram tambem os compromissos com agenda nula."
|
|
8521
8802
|
}
|
|
8522
8803
|
],
|
|
8523
|
-
"returns": "LISTA PURA (array no topo, SEM embrulho meta/payload) — a resposta JA E a lista de tarefas da agenda. Cada tarefa traz todos os campos da tarefa (id, title, description, task_type, status, scheduled_at, completed, recurrence_*), mais assignees [{id, name, agenda_color}], assignee_ids, conversation_display_id, conversation_contact_name, contact_name/contact_phone/contact_email, meeting_url, calendar_color, is_readonly, is_private, guest_emails, attendee_rsvp e booking_id. Lista vazia = []. Com filtro de data (date_start/date_end) devolve TUDO do periodo sem paginar (teto de 10.000). Sem filtro de data, pagina por `page`/`per_page` — mas a resposta NAO traz numero de paginas nem total: pagina cheia sugere que ha mais.",
|
|
8804
|
+
"returns": "LISTA PURA (array no topo, SEM embrulho meta/payload) — a resposta JA E a lista de tarefas da agenda. Cada tarefa traz todos os campos da tarefa (id, title, description, task_type, status, scheduled_at, completed, recurrence_*), mais assignees [{id, name, agenda_color}], assignee_ids, conversation_display_id, conversation_contact_name, contact_name/contact_phone/contact_email, meeting_url, calendar_color, is_readonly, is_private, guest_emails, attendee_rsvp e booking_id; o compromisso que veio do Booking traz tambem booking_reschedule_url e booking_calendar_url (16/10: link \"salvar na minha agenda\" para mandar ao cliente; nulo quando o compromisso foi cancelado, concluido ou ja passou). Lista vazia = []. Com filtro de data (date_start/date_end) devolve TUDO do periodo sem paginar (teto de 10.000). Sem filtro de data, pagina por `page`/`per_page` — mas a resposta NAO traz numero de paginas nem total: pagina cheia sugere que ha mais.",
|
|
8524
8805
|
"common_use_cases": [
|
|
8525
8806
|
"Dashboard: contar/exibir tarefas/agenda",
|
|
8526
8807
|
"Buscar com filtros antes de outra operação",
|
|
@@ -8728,7 +9009,7 @@
|
|
|
8728
9009
|
"description": "ID da tarefa"
|
|
8729
9010
|
}
|
|
8730
9011
|
],
|
|
8731
|
-
"returns": "tarefa/agenda (objeto completo com associações)",
|
|
9012
|
+
"returns": "tarefa/agenda (objeto completo com associações; compromisso do Booking traz booking_reschedule_url e booking_calendar_url — link \"salvar na minha agenda\", nulo quando não dá mais para salvar)",
|
|
8732
9013
|
"common_use_cases": [
|
|
8733
9014
|
"Ver dados completos antes de editar",
|
|
8734
9015
|
"Verificar estado atual antes de uma ação",
|
|
@@ -10294,7 +10575,7 @@
|
|
|
10294
10575
|
"type": "string",
|
|
10295
10576
|
"location": "body",
|
|
10296
10577
|
"required": false,
|
|
10297
|
-
"description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}}. Variavel desconhecida sai CRUA para o cliente."
|
|
10578
|
+
"description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}} {{link_salvar_na_agenda}} (16/10: abre a parte em que o cliente salva o compromisso no Google Agenda ou na agenda do iPhone/Outlook). Variavel desconhecida sai CRUA para o cliente."
|
|
10298
10579
|
},
|
|
10299
10580
|
{
|
|
10300
10581
|
"name": "booking_event_type.sessions_enabled",
|
|
@@ -10490,7 +10771,7 @@
|
|
|
10490
10771
|
"type": "string",
|
|
10491
10772
|
"location": "body",
|
|
10492
10773
|
"required": false,
|
|
10493
|
-
"description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}}. Variavel desconhecida sai CRUA para o cliente."
|
|
10774
|
+
"description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}} {{link_salvar_na_agenda}} (16/10: abre a parte em que o cliente salva o compromisso no Google Agenda ou na agenda do iPhone/Outlook). Variavel desconhecida sai CRUA para o cliente."
|
|
10494
10775
|
},
|
|
10495
10776
|
{
|
|
10496
10777
|
"name": "booking_event_type.sessions_enabled",
|
|
@@ -10804,14 +11085,14 @@
|
|
|
10804
11085
|
"type": "array",
|
|
10805
11086
|
"location": "body",
|
|
10806
11087
|
"required": true,
|
|
10807
|
-
"description": "[{attribute_key, filter_operator, query_operator, values[]}] REGRA DO CONECTOR (query_operator) — LEIA ANTES DE GRAVAR: o conector liga a condicao com a SEGUINTE, logo a ULTIMA condicao TEM que ter query_operator: null (condicao UNICA tambem = null). Nas demais: 'AND' ou 'OR'. A API valida o VALOR do conector mas NAO a POSICAO — conector na ultima condicao SALVA COM SUCESSO, aparece certo na tela e a regra NUNCA dispara. Incidente real: 8 regras criadas pelo conector de IA entre 26 e 30/07/2026 em 3 contas, todas com conector na ultima condicao, todas nasceram mortas (732 erros/hora medidos em producao 03/08; a conta 62 ficou com as 6 regras de etiquetagem automatica paradas). attribute_key precisa ser campo padrao OU atributo personalizado que EXISTA na conta (senao a regra inteira falha na validacao: 'Automation conditions <chave> not supported') — conferir antes com lionchat_custom_attributes_list; atributo personalizado exige tambem custom_attribute_type ('conversation_attribute' ou 'contact_attribute'). filter_operator: equal_to, not_equal_to, contains, does_not_contain, is_present, is_not_present, is_greater_than, is_less_than, starts_with, days_before, days_ago, last_days, today, yesterday — cada campo aceita so um subconjunto. Na duvida, leia uma regra que ja funciona com lionchat_automation_rules_show e copie o formato. Detalhe no resource 'conversation-flows'."
|
|
11088
|
+
"description": "[{attribute_key, filter_operator, query_operator, values[]}] REGRA DO CONECTOR (query_operator) — LEIA ANTES DE GRAVAR: o conector liga a condicao com a SEGUINTE, logo a ULTIMA condicao TEM que ter query_operator: null (condicao UNICA tambem = null). Nas demais: 'AND' ou 'OR'. A API valida o VALOR do conector mas NAO a POSICAO — conector na ultima condicao SALVA COM SUCESSO, aparece certo na tela e a regra NUNCA dispara. Incidente real: 8 regras criadas pelo conector de IA entre 26 e 30/07/2026 em 3 contas, todas com conector na ultima condicao, todas nasceram mortas (732 erros/hora medidos em producao 03/08; a conta 62 ficou com as 6 regras de etiquetagem automatica paradas). attribute_key precisa ser campo padrao OU atributo personalizado que EXISTA na conta (senao a regra inteira falha na validacao: 'Automation conditions <chave> not supported') — conferir antes com lionchat_custom_attributes_list; atributo personalizado exige tambem custom_attribute_type ('conversation_attribute' ou 'contact_attribute'). EMPRESA (2026-10-16): custom_attribute_type 'company_attribute' = campo PERSONALIZADO da empresa do contato (chave definida em lionchat_custom_attributes_list attribute_model=company_attribute; pode ser igual a de contato, o tipo decide). Operadores pelo tipo: todos equal_to/not_equal_to/is_present/is_not_present; texto + contains/does_not_contain; numero/data/hora + is_greater_than/is_less_than. attribute_changed recusado. Negativo inclui contato sem empresa. Modulo Empresas desligado = a condicao nunca casa. filter_operator: equal_to, not_equal_to, contains, does_not_contain, is_present, is_not_present, is_greater_than, is_less_than, starts_with, days_before, days_ago, last_days, today, yesterday — cada campo aceita so um subconjunto. Na duvida, leia uma regra que ja funciona com lionchat_automation_rules_show e copie o formato. Detalhe no resource 'conversation-flows'."
|
|
10808
11089
|
},
|
|
10809
11090
|
{
|
|
10810
11091
|
"name": "actions",
|
|
10811
11092
|
"type": "array",
|
|
10812
11093
|
"location": "body",
|
|
10813
11094
|
"required": true,
|
|
10814
|
-
"description": "CADA item de actions DEVE ser um OBJETO {action_name (string), action_params (array)} — NUNCA um texto/string solto. Ex.: [{\"action_name\":\"send_message\",\"action_params\":[\"Oi\"]}]. [{action_name, action_params[]}] Actions novas (2026-07-21): 'update_contact_attribute' e 'update_conversation_attribute' — action_params: [{attribute_key, value}], value aceita texto fixo OU variável Liquid (ex. {{contact.phone_number}}); grava atributo personalizado com MERGE (não apaga os demais) e passa pelo porteiro de data. 'pending_conversation' (2026-07-20, sem params) — deixa a conversa PENDENTE (handoff; mensagem nova do cliente NÃO reabre). ATENCAO — 'send_whatsapp_template': action_params: [{name, id, language, category, processed_params}]. 'name' e OBRIGATORIO e e o nome EXATO do modelo aprovado na Meta (o envio acontece por ele); 'language' precisa bater com o idioma aprovado (padrao pt_BR); processed_params: {\"body\": {\"1\": \"{{contact.first_name}}\"}}. NUNCA use template_name/template_id/template_category/template_language — esse e o formato dos nos do FlowBuilder e aqui e IGNORADO: a regra salva com sucesso, aparece na tela e NAO ENVIA NADA, sem erro nem log (incidente real conta 39 em 02/08/2026: 14h sem enviar, 9 leads perdidos). Confira o modelo antes com lionchat_inboxes_whatsapp_templates_list. So funciona em caixa WhatsApp API Oficial (Cloud). REGRA GERAL: action_params e SEMPRE um array (o backend le params[0]) e seu CONTEUDO nao e validado pela API. Se nao souber o formato de uma acao, leia uma regra existente com lionchat_automation_rules_show e copie — nunca invente nome de chave. Formato de TODAS as acoes no resource 'conversation-flows'. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]. Tabela completa no resource conversation-flows ('Acoes de automacao'). ESPERA QUE CONFERE (26/09/2026): 'wait' aceita o formato OBJETO [{\"seconds\": 120, \"only_if_open\": true, \"only_if_no_reply\": true}] — na VOLTA, only_if_open só segue se a conversa ainda estiver aberta/pendente e only_if_no_reply só segue se ninguém respondeu o cliente durante a espera (qualquer mensagem pública de saída conta). Barrou = o resto da regra não roda e o histórico da execução mostra o passo wait_check 'skipped'. O formato antigo [120] continua valendo, sem conferência. Teto 300 s."
|
|
11095
|
+
"description": "CADA item de actions DEVE ser um OBJETO {action_name (string), action_params (array)} — NUNCA um texto/string solto. Ex.: [{\"action_name\":\"send_message\",\"action_params\":[\"Oi\"]}]. [{action_name, action_params[]}] Actions novas (2026-07-21): 'update_contact_attribute' e 'update_conversation_attribute' — action_params: [{attribute_key, value}], value aceita texto fixo OU variável Liquid (ex. {{contact.phone_number}}); grava atributo personalizado com MERGE (não apaga os demais) e passa pelo porteiro de data. 'pending_conversation' (2026-07-20, sem params) — deixa a conversa PENDENTE (handoff; mensagem nova do cliente NÃO reabre). ATENCAO — 'send_whatsapp_template': action_params: [{name, id, language, category, processed_params}]. 'name' e OBRIGATORIO e e o nome EXATO do modelo aprovado na Meta (o envio acontece por ele); 'language' precisa bater com o idioma aprovado (padrao pt_BR); processed_params: {\"body\": {\"1\": \"{{contact.first_name}}\"}}. NUNCA use template_name/template_id/template_category/template_language — esse e o formato dos nos do FlowBuilder e aqui e IGNORADO: a regra salva com sucesso, aparece na tela e NAO ENVIA NADA, sem erro nem log (incidente real conta 39 em 02/08/2026: 14h sem enviar, 9 leads perdidos). Confira o modelo antes com lionchat_inboxes_whatsapp_templates_list. So funciona em caixa WhatsApp API Oficial (Cloud). REGRA GERAL: action_params e SEMPRE um array (o backend le params[0]) e seu CONTEUDO nao e validado pela API. Se nao souber o formato de uma acao, leia uma regra existente com lionchat_automation_rules_show e copie — nunca invente nome de chave. Formato de TODAS as acoes no resource 'conversation-flows'. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]; snooze_kanban_item [{\"funnel_id\": 31, \"amount\": 3, \"unit\": \"days\"}] (11/10/2026: adia o card por N horas/dias; unit \"hours\" ou \"days\", amount inteiro >= 1; em regra de evento de CARD basta [{\"amount\": 3, \"unit\": \"days\"}]; falha visível se não der para adiar). Tabela completa no resource conversation-flows ('Acoes de automacao'). ESPERA QUE CONFERE (26/09/2026): 'wait' aceita o formato OBJETO [{\"seconds\": 120, \"only_if_open\": true, \"only_if_no_reply\": true}] — na VOLTA, only_if_open só segue se a conversa ainda estiver aberta/pendente e only_if_no_reply só segue se ninguém respondeu o cliente durante a espera (qualquer mensagem pública de saída conta). Barrou = o resto da regra não roda e o histórico da execução mostra o passo wait_check 'skipped'. O formato antigo [120] continua valendo, sem conferência. Teto 300 s."
|
|
10815
11096
|
},
|
|
10816
11097
|
{
|
|
10817
11098
|
"name": "active",
|
|
@@ -10902,14 +11183,14 @@
|
|
|
10902
11183
|
"type": "array",
|
|
10903
11184
|
"location": "body",
|
|
10904
11185
|
"required": false,
|
|
10905
|
-
"description": "Condicoes REGRA DO CONECTOR (query_operator) — LEIA ANTES DE GRAVAR: o conector liga a condicao com a SEGUINTE, logo a ULTIMA condicao TEM que ter query_operator: null (condicao UNICA tambem = null). Nas demais: 'AND' ou 'OR'. A API valida o VALOR do conector mas NAO a POSICAO — conector na ultima condicao SALVA COM SUCESSO, aparece certo na tela e a regra NUNCA dispara. Incidente real: 8 regras criadas pelo conector de IA entre 26 e 30/07/2026 em 3 contas, todas com conector na ultima condicao, todas nasceram mortas (732 erros/hora medidos em producao 03/08; a conta 62 ficou com as 6 regras de etiquetagem automatica paradas). attribute_key precisa ser campo padrao OU atributo personalizado que EXISTA na conta (senao a regra inteira falha na validacao: 'Automation conditions <chave> not supported') — conferir antes com lionchat_custom_attributes_list; atributo personalizado exige tambem custom_attribute_type ('conversation_attribute' ou 'contact_attribute'). filter_operator: equal_to, not_equal_to, contains, does_not_contain, is_present, is_not_present, is_greater_than, is_less_than, starts_with, days_before, days_ago, last_days, today, yesterday — cada campo aceita so um subconjunto. Na duvida, leia uma regra que ja funciona com lionchat_automation_rules_show e copie o formato. Detalhe no resource 'conversation-flows'."
|
|
11186
|
+
"description": "Condicoes REGRA DO CONECTOR (query_operator) — LEIA ANTES DE GRAVAR: o conector liga a condicao com a SEGUINTE, logo a ULTIMA condicao TEM que ter query_operator: null (condicao UNICA tambem = null). Nas demais: 'AND' ou 'OR'. A API valida o VALOR do conector mas NAO a POSICAO — conector na ultima condicao SALVA COM SUCESSO, aparece certo na tela e a regra NUNCA dispara. Incidente real: 8 regras criadas pelo conector de IA entre 26 e 30/07/2026 em 3 contas, todas com conector na ultima condicao, todas nasceram mortas (732 erros/hora medidos em producao 03/08; a conta 62 ficou com as 6 regras de etiquetagem automatica paradas). attribute_key precisa ser campo padrao OU atributo personalizado que EXISTA na conta (senao a regra inteira falha na validacao: 'Automation conditions <chave> not supported') — conferir antes com lionchat_custom_attributes_list; atributo personalizado exige tambem custom_attribute_type ('conversation_attribute' ou 'contact_attribute'). EMPRESA (2026-10-16): custom_attribute_type 'company_attribute' = campo PERSONALIZADO da empresa do contato (chave definida em lionchat_custom_attributes_list attribute_model=company_attribute; pode ser igual a de contato, o tipo decide). Operadores pelo tipo: todos equal_to/not_equal_to/is_present/is_not_present; texto + contains/does_not_contain; numero/data/hora + is_greater_than/is_less_than. attribute_changed recusado. Negativo inclui contato sem empresa. Modulo Empresas desligado = a condicao nunca casa. filter_operator: equal_to, not_equal_to, contains, does_not_contain, is_present, is_not_present, is_greater_than, is_less_than, starts_with, days_before, days_ago, last_days, today, yesterday — cada campo aceita so um subconjunto. Na duvida, leia uma regra que ja funciona com lionchat_automation_rules_show e copie o formato. Detalhe no resource 'conversation-flows'."
|
|
10906
11187
|
},
|
|
10907
11188
|
{
|
|
10908
11189
|
"name": "actions",
|
|
10909
11190
|
"type": "array",
|
|
10910
11191
|
"location": "body",
|
|
10911
11192
|
"required": false,
|
|
10912
|
-
"description": "CADA item de actions DEVE ser um OBJETO {action_name (string), action_params (array)} — NUNCA um texto/string solto. Ex.: [{\"action_name\":\"send_message\",\"action_params\":[\"Oi\"]}]. Acoes Actions novas (2026-07-21): 'update_contact_attribute' e 'update_conversation_attribute' — action_params: [{attribute_key, value}], value aceita texto fixo OU variável Liquid (ex. {{contact.phone_number}}); grava atributo personalizado com MERGE (não apaga os demais) e passa pelo porteiro de data. 'pending_conversation' (2026-07-20, sem params) — deixa a conversa PENDENTE (handoff; mensagem nova do cliente NÃO reabre). ATENCAO — 'send_whatsapp_template': action_params: [{name, id, language, category, processed_params}]. 'name' e OBRIGATORIO e e o nome EXATO do modelo aprovado na Meta (o envio acontece por ele); 'language' precisa bater com o idioma aprovado (padrao pt_BR); processed_params: {\"body\": {\"1\": \"{{contact.first_name}}\"}}. NUNCA use template_name/template_id/template_category/template_language — esse e o formato dos nos do FlowBuilder e aqui e IGNORADO: a regra salva com sucesso, aparece na tela e NAO ENVIA NADA, sem erro nem log (incidente real conta 39 em 02/08/2026: 14h sem enviar, 9 leads perdidos). Confira o modelo antes com lionchat_inboxes_whatsapp_templates_list. So funciona em caixa WhatsApp API Oficial (Cloud). REGRA GERAL: action_params e SEMPRE um array (o backend le params[0]) e seu CONTEUDO nao e validado pela API. Se nao souber o formato de uma acao, leia uma regra existente com lionchat_automation_rules_show e copie — nunca invente nome de chave. Formato de TODAS as acoes no resource 'conversation-flows'. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]. Tabela completa no resource conversation-flows ('Acoes de automacao'). ESPERA QUE CONFERE (26/09/2026): 'wait' aceita o formato OBJETO [{\"seconds\": 120, \"only_if_open\": true, \"only_if_no_reply\": true}] — na VOLTA, only_if_open só segue se a conversa ainda estiver aberta/pendente e only_if_no_reply só segue se ninguém respondeu o cliente durante a espera (qualquer mensagem pública de saída conta). Barrou = o resto da regra não roda e o histórico da execução mostra o passo wait_check 'skipped'. O formato antigo [120] continua valendo, sem conferência. Teto 300 s."
|
|
11193
|
+
"description": "CADA item de actions DEVE ser um OBJETO {action_name (string), action_params (array)} — NUNCA um texto/string solto. Ex.: [{\"action_name\":\"send_message\",\"action_params\":[\"Oi\"]}]. Acoes Actions novas (2026-07-21): 'update_contact_attribute' e 'update_conversation_attribute' — action_params: [{attribute_key, value}], value aceita texto fixo OU variável Liquid (ex. {{contact.phone_number}}); grava atributo personalizado com MERGE (não apaga os demais) e passa pelo porteiro de data. 'pending_conversation' (2026-07-20, sem params) — deixa a conversa PENDENTE (handoff; mensagem nova do cliente NÃO reabre). ATENCAO — 'send_whatsapp_template': action_params: [{name, id, language, category, processed_params}]. 'name' e OBRIGATORIO e e o nome EXATO do modelo aprovado na Meta (o envio acontece por ele); 'language' precisa bater com o idioma aprovado (padrao pt_BR); processed_params: {\"body\": {\"1\": \"{{contact.first_name}}\"}}. NUNCA use template_name/template_id/template_category/template_language — esse e o formato dos nos do FlowBuilder e aqui e IGNORADO: a regra salva com sucesso, aparece na tela e NAO ENVIA NADA, sem erro nem log (incidente real conta 39 em 02/08/2026: 14h sem enviar, 9 leads perdidos). Confira o modelo antes com lionchat_inboxes_whatsapp_templates_list. So funciona em caixa WhatsApp API Oficial (Cloud). REGRA GERAL: action_params e SEMPRE um array (o backend le params[0]) e seu CONTEUDO nao e validado pela API. Se nao souber o formato de uma acao, leia uma regra existente com lionchat_automation_rules_show e copie — nunca invente nome de chave. Formato de TODAS as acoes no resource 'conversation-flows'. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]; snooze_kanban_item [{\"funnel_id\": 31, \"amount\": 3, \"unit\": \"days\"}] (11/10/2026: adia o card por N horas/dias; unit \"hours\" ou \"days\", amount inteiro >= 1; em regra de evento de CARD basta [{\"amount\": 3, \"unit\": \"days\"}]; falha visível se não der para adiar). Tabela completa no resource conversation-flows ('Acoes de automacao'). ESPERA QUE CONFERE (26/09/2026): 'wait' aceita o formato OBJETO [{\"seconds\": 120, \"only_if_open\": true, \"only_if_no_reply\": true}] — na VOLTA, only_if_open só segue se a conversa ainda estiver aberta/pendente e only_if_no_reply só segue se ninguém respondeu o cliente durante a espera (qualquer mensagem pública de saída conta). Barrou = o resto da regra não roda e o histórico da execução mostra o passo wait_check 'skipped'. O formato antigo [120] continua valendo, sem conferência. Teto 300 s."
|
|
10913
11194
|
}
|
|
10914
11195
|
],
|
|
10915
11196
|
"returns": "regra de automação atualizado",
|
|
@@ -11252,7 +11533,7 @@
|
|
|
11252
11533
|
"type": "string",
|
|
11253
11534
|
"location": "body",
|
|
11254
11535
|
"required": false,
|
|
11255
|
-
"description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}}. Variavel desconhecida sai CRUA para o cliente."
|
|
11536
|
+
"description": "Texto de abertura da pagina publica. Aceita {{nome}} {{titulo}} {{tipo}} {{agente}} {{data}} {{horario}} {{dia_semana}} {{duracao}} {{telefone}} {{email}} {{link_cancelar}} {{link_remarcar}} {{link_confirmar}} {{link_salvar_na_agenda}} (16/10: abre a parte em que o cliente salva o compromisso no Google Agenda ou na agenda do iPhone/Outlook). Variavel desconhecida sai CRUA para o cliente."
|
|
11256
11537
|
}
|
|
11257
11538
|
],
|
|
11258
11539
|
"returns": "tipo de evento criado (com novo ID)",
|
|
@@ -11878,7 +12159,7 @@
|
|
|
11878
12159
|
"description": "Ordenacao: name, domain, created_at, contacts_count, last_activity_at (prefixo - = decrescente, ex. -last_activity_at)"
|
|
11879
12160
|
}
|
|
11880
12161
|
],
|
|
11881
|
-
"returns": "meta (contadores globais) + payload (array de empresas)",
|
|
12162
|
+
"returns": "meta (contadores globais) + payload (array de empresas; cada uma com additional_attributes e custom_attributes)",
|
|
11882
12163
|
"common_use_cases": [
|
|
11883
12164
|
"Dashboard: contar/exibir empresas",
|
|
11884
12165
|
"Buscar com filtros antes de outra operação",
|
|
@@ -11891,7 +12172,7 @@
|
|
|
11891
12172
|
"method": "POST",
|
|
11892
12173
|
"path": "/api/v1/accounts/{account_id}/companies",
|
|
11893
12174
|
"title": "Criar Empresa",
|
|
11894
|
-
"description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar
|
|
12175
|
+
"description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. ENTERPRISE-only. Empresa so nasce assim (manual): o sistema nao cria empresa pelo dominio do e-mail dos contatos. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava so digitos), phone, email, address: {cep, street, number, complement, neighborhood, city, state, country}, social_profiles: {linkedin, facebook, instagram, telegram, tiktok, twitter, github} }. A gravacao MESCLA: mande so o que muda; valor vazio (\"\") apaga aquela chave; chave ausente nao mexe. CNPJ ou e-mail invalido = 422. additional_attributes, address e social_profiles precisam ser OBJETOS (texto ou lista = 422, nada e apagado).",
|
|
11895
12176
|
"category": "Empresas",
|
|
11896
12177
|
"params": [
|
|
11897
12178
|
{
|
|
@@ -11899,7 +12180,7 @@
|
|
|
11899
12180
|
"type": "object",
|
|
11900
12181
|
"location": "body",
|
|
11901
12182
|
"required": true,
|
|
11902
|
-
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} } }"
|
|
12183
|
+
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} }, custom_attributes: { chave: valor } }"
|
|
11903
12184
|
}
|
|
11904
12185
|
],
|
|
11905
12186
|
"returns": "empresa criado (com novo ID)",
|
|
@@ -11927,7 +12208,7 @@
|
|
|
11927
12208
|
"description": "ID da empresa"
|
|
11928
12209
|
}
|
|
11929
12210
|
],
|
|
11930
|
-
"returns": "empresa (objeto completo com associações)",
|
|
12211
|
+
"returns": "empresa (objeto completo com associações), incluindo additional_attributes (cadastro) e custom_attributes (atributos personalizados, {} quando vazio)",
|
|
11931
12212
|
"common_use_cases": [
|
|
11932
12213
|
"Ver dados completos antes de editar",
|
|
11933
12214
|
"Verificar estado atual antes de uma ação",
|
|
@@ -11944,7 +12225,7 @@
|
|
|
11944
12225
|
"method": "PATCH",
|
|
11945
12226
|
"path": "/api/v1/accounts/{account_id}/companies/{id}",
|
|
11946
12227
|
"title": "Atualizar Empresa",
|
|
11947
|
-
"description": "Atualiza dados da empresa. Suporta atualizacao parcial (PATCH) — so campos enviados sao alterados. Campos suportados: name, domain, description, avatar e
|
|
12228
|
+
"description": "Atualiza dados da empresa. Suporta atualizacao parcial (PATCH) — so campos enviados sao alterados. Campos suportados: name, domain, description, avatar, additional_attributes (cadastro) e custom_attributes (atributos personalizados). custom_attributes (2026-10-15): atributos personalizados da EMPRESA, objeto {chave: valor} de valores SIMPLES (texto, numero, verdadeiro/falso ou null; lista ou objeto dentro = 422). MESCLA: mande so o que muda; null ou texto vazio LIMPA a chave. So chave que ja existe como definicao company_attribute da conta (lionchat_custom_attributes_list com attribute_model=company_attribute); chave desconhecida = 422 com a lista das validas e NADA do pedido e gravado. Teto de 1.500 caracteres por valor; data aceita DD/MM/AAAA. ONDE MAIS APARECE (2026-10-16): o campo personalizado vira variavel {{contact.company.custom_attribute.CHAVE}} (e o cadastro {{contact.company.name|legal_name|cnpj|phone|email|address.city|address.state}}) em mensagem, fluxo, automacao, campanha e modelo oficial; condicao do bloco Condicao do fluxo (attrSource 'company'); condicao de automacao e filtro de contatos (custom_attribute_type 'company_attribute'); a IA (Agente e Copiloto) le a empresa do contato. Modulo Empresas desligado = tudo isso para. Cadastro da empresa em additional_attributes: { legal_name (razao social), cnpj (validado; grava so digitos), phone, email, address: {cep, street, number, complement, neighborhood, city, state, country}, social_profiles: {linkedin, facebook, instagram, telegram, tiktok, twitter, github} }. A gravacao MESCLA: mande so o que muda; valor vazio (\"\") apaga aquela chave; chave ausente nao mexe. CNPJ ou e-mail invalido = 422. additional_attributes, address e social_profiles precisam ser OBJETOS (texto ou lista = 422, nada e apagado).",
|
|
11948
12229
|
"category": "Empresas",
|
|
11949
12230
|
"params": [
|
|
11950
12231
|
{
|
|
@@ -11959,7 +12240,7 @@
|
|
|
11959
12240
|
"type": "object",
|
|
11960
12241
|
"location": "body",
|
|
11961
12242
|
"required": true,
|
|
11962
|
-
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} } }"
|
|
12243
|
+
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} }, custom_attributes: { chave: valor } }"
|
|
11963
12244
|
}
|
|
11964
12245
|
],
|
|
11965
12246
|
"returns": "empresa atualizado",
|
|
@@ -16363,14 +16644,14 @@
|
|
|
16363
16644
|
"type": "array",
|
|
16364
16645
|
"location": "body",
|
|
16365
16646
|
"required": true,
|
|
16366
|
-
"description": "LISTA de componentes no formato da Meta, cada item um OBJETO com type: HEADER {type, format: TEXT|IMAGE|VIDEO|DOCUMENT, text, example}; BODY {type, text, example: {body_text: [[...]]}} (obrigatorio); FOOTER {type, text}; BUTTONS {type, buttons: [{type: QUICK_REPLY|URL|PHONE_NUMBER, text, url, phone_number, example}]}. Ex.: [{\"type\": \"BODY\", \"text\": \"Ola {{1}}, seu pedido saiu.\", \"example\": {\"body_text\": [[\"Maria\"]]}}]. Variavel {{N}} no corpo exige example. Exemplos completos no resource best-practices (templates)."
|
|
16647
|
+
"description": "LISTA de componentes no formato da Meta, cada item um OBJETO com type: HEADER {type, format: TEXT|IMAGE|VIDEO|DOCUMENT, text, example}; BODY {type, text, example: {body_text: [[...]]}} (obrigatorio); FOOTER {type, text}; BUTTONS {type, buttons: [{type: QUICK_REPLY|URL|PHONE_NUMBER, text, url, phone_number, example} ou {type: FLOW, text (ate 25), flow_id: '<meta_flow_id do formulario PUBLICADO, como texto>', flow_action: 'navigate'} — botao que abre um Formulario do WhatsApp (whatsapp_forms_list); no maximo 1 por modelo]}. Ex.: [{\"type\": \"BODY\", \"text\": \"Ola {{1}}, seu pedido saiu.\", \"example\": {\"body_text\": [[\"Maria\"]]}}]. Variavel {{N}} no corpo exige example. Exemplos completos no resource best-practices (templates)."
|
|
16367
16648
|
},
|
|
16368
16649
|
{
|
|
16369
16650
|
"name": "variable_mapping",
|
|
16370
16651
|
"type": "object",
|
|
16371
16652
|
"location": "body",
|
|
16372
16653
|
"required": false,
|
|
16373
|
-
"description": "Opcional. Mapeia variaveis {{N}} do corpo a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta, fica salvo localmente). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Variavel sem mapping continua manual (digitada no envio). Fontes/campos: contact/name (Nome completo), contact/name.split.first (Primeiro nome), contact/name.split[1..] (Sobrenome), contact/phone_number, contact/email, conversation/assignee.name (Atendente), conversation/team.name (Equipe), account/name, ou contact/custom_attributes.CHAVE para campo personalizado. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo."
|
|
16654
|
+
"description": "Opcional. Mapeia variaveis {{N}} do corpo a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta, fica salvo localmente). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Variavel sem mapping continua manual (digitada no envio). Fontes/campos: contact/name (Nome completo), contact/name.split.first (Primeiro nome), contact/name.split[1..] (Sobrenome), contact/phone_number, contact/email, conversation/assignee.name (Atendente), conversation/team.name (Equipe), account/name, ou contact/custom_attributes.CHAVE para campo personalizado. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo. [2026-10-16] Empresa do contato: campo personalizado {source:'company', field:'custom_attribute.CHAVE'}; cadastro {source:'variable', field:'contact.company.legal_name'} (tambem .cnpj, .phone, .email, .address.city, .address.state). Contato sem empresa (ou modulo Empresas desligado) = posicao vazia."
|
|
16374
16655
|
}
|
|
16375
16656
|
],
|
|
16376
16657
|
"returns": "template WhatsApp criado (com novo ID)",
|
|
@@ -16496,7 +16777,7 @@
|
|
|
16496
16777
|
"type": "object",
|
|
16497
16778
|
"location": "body",
|
|
16498
16779
|
"required": false,
|
|
16499
|
-
"description": "Opcional. Mapeia variaveis {{N}} a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Mesmas fontes/campos do endpoint de criacao. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo."
|
|
16780
|
+
"description": "Opcional. Mapeia variaveis {{N}} a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Mesmas fontes/campos do endpoint de criacao. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo. [2026-10-16] Empresa do contato: campo personalizado {source:'company', field:'custom_attribute.CHAVE'}; cadastro {source:'variable', field:'contact.company.legal_name'} (tambem .cnpj, .phone, .email, .address.city, .address.state). Contato sem empresa (ou modulo Empresas desligado) = posicao vazia."
|
|
16500
16781
|
}
|
|
16501
16782
|
],
|
|
16502
16783
|
"returns": "{ success: true }",
|
|
@@ -16538,7 +16819,7 @@
|
|
|
16538
16819
|
"type": "object",
|
|
16539
16820
|
"location": "body",
|
|
16540
16821
|
"required": true,
|
|
16541
|
-
"description": "Mapa das variaveis do CORPO. Chave = texto interno de {{...}} do corpo aprovado ('1','2'... ou nomeada). Valor = {source: contact|conversation|account|custom, field: <campo>, label: <opcional>}. Fontes/campos validos: contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/id, conversation/display_id, conversation/assignee.name, conversation/team.name, account/name, {contact|conversation|account}/custom_attribute.<chave>, custom/<texto fixo>. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. AUTORITATIVO: substitui TODO o apontamento de corpo; {} limpa tudo. NAO aceita chaves com _ (cabecalho/botao)."
|
|
16822
|
+
"description": "Mapa das variaveis do CORPO. Chave = texto interno de {{...}} do corpo aprovado ('1','2'... ou nomeada). Valor = {source: contact|conversation|account|custom, field: <campo>, label: <opcional>}. Fontes/campos validos: contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/id, conversation/display_id, conversation/assignee.name, conversation/team.name, account/name, {contact|conversation|account}/custom_attribute.<chave>, custom/<texto fixo>. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. AUTORITATIVO: substitui TODO o apontamento de corpo; {} limpa tudo. NAO aceita chaves com _ (cabecalho/botao). [2026-10-16] Empresa do contato: campo personalizado {source:'company', field:'custom_attribute.CHAVE'}; cadastro {source:'variable', field:'contact.company.legal_name'} (tambem .cnpj, .phone, .email, .address.city, .address.state). Contato sem empresa (ou modulo Empresas desligado) = posicao vazia."
|
|
16542
16823
|
}
|
|
16543
16824
|
],
|
|
16544
16825
|
"returns": "template atualizado com o variable_mapping local salvo; status/review na Meta inalterados",
|
|
@@ -21271,7 +21552,7 @@
|
|
|
21271
21552
|
"description": "Lista numeros disponiveis para identificacao de chamada. Lista chamadas VoIP paginados (per_page padrão 25, máximo 100). Retorna meta (contadores) + payload (array de chamada VoIP).",
|
|
21272
21553
|
"category": "Chamadas",
|
|
21273
21554
|
"params": [],
|
|
21274
|
-
"returns": "Repassa CRUA a resposta da operadora Zenvia (GET /bina/relatorio) — nao ha meta, payload nem paginacao nossa. O formato e `{ sucesso: true, dados: { relatorio: [ { id, numero_telefone, ... } ] } }`: os numeros ficam em `dados.relatorio`. O conteudo sao NUMEROS DE IDENTIFICACAO DE CHAMADA (binas), nao chamadas VoIP. Se a conta nao tiver VoIP configurado (sem token Zenvia),
|
|
21555
|
+
"returns": "Repassa CRUA a resposta da operadora Zenvia (GET /bina/relatorio) — nao ha meta, payload nem paginacao nossa. O formato e `{ sucesso: true, dados: { relatorio: [ { id, numero_telefone, ... } ] } }`: os numeros ficam em `dados.relatorio`. O conteudo sao NUMEROS DE IDENTIFICACAO DE CHAMADA (binas), nao chamadas VoIP. Se a conta nao tiver VoIP configurado (sem token Zenvia), volta 404 { success: false, error: \"VoIP nao configurado\" } (desde 07/10/2026; antes era erro de servidor). Em resposta nao-JSON da operadora, vem `{ status, body }`.",
|
|
21275
21556
|
"common_use_cases": [
|
|
21276
21557
|
"Dashboard: contar/exibir chamadas VoIP",
|
|
21277
21558
|
"Buscar com filtros antes de outra operação",
|
|
@@ -22034,7 +22315,7 @@
|
|
|
22034
22315
|
"type": "string",
|
|
22035
22316
|
"location": "query",
|
|
22036
22317
|
"required": false,
|
|
22037
|
-
"description": "Filtra por modelo:
|
|
22318
|
+
"description": "Filtra por modelo, SEMPRE com o sufixo: conversation_attribute | contact_attribute | account_attribute | company_attribute (empresa). So 'conversation' ou 'contact' NAO da erro — devolve a lista VAZIA."
|
|
22038
22319
|
},
|
|
22039
22320
|
{
|
|
22040
22321
|
"name": "include_system",
|
|
@@ -22061,7 +22342,7 @@
|
|
|
22061
22342
|
"method": "POST",
|
|
22062
22343
|
"path": "/api/v1/accounts/{account_id}/custom_attribute_definitions",
|
|
22063
22344
|
"title": "Criar Definicao de Atributo",
|
|
22064
|
-
"description": "Cria uma nova definicao de atributo personalizado. **Requer perfil Administrador.** Obrigatórios: attribute_display_name, attribute_display_type, attribute_key. attribute_model tem default 'conversation_attribute' — para um atributo de contato, passe 'contact_attribute'. Retorna o atributo personalizado criado com ID atribuído.",
|
|
22345
|
+
"description": "Cria uma nova definicao de atributo personalizado. **Requer perfil Administrador.** Obrigatórios: attribute_display_name, attribute_display_type, attribute_key. attribute_model tem default 'conversation_attribute' — para um atributo de contato, passe 'contact_attribute'; de EMPRESA, 'company_attribute' (so com o modulo Empresas; depois preencha com lionchat_companies_update custom_attributes). Retorna o atributo personalizado criado com ID atribuído.",
|
|
22065
22346
|
"category": "Atributos Personalizados",
|
|
22066
22347
|
"params": [
|
|
22067
22348
|
{
|
|
@@ -22097,7 +22378,7 @@
|
|
|
22097
22378
|
"type": "string",
|
|
22098
22379
|
"location": "body",
|
|
22099
22380
|
"required": false,
|
|
22100
|
-
"description": "contact_attribute
|
|
22381
|
+
"description": "conversation_attribute (PADRAO) | contact_attribute | account_attribute (variavel da conta) | company_attribute (atributo personalizado de EMPRESA, 2026-10-15: exige o modulo Empresas ligado na conta, tipo secret recusado, chaves reservadas recusadas: name, domain, description, legal_name, cnpj, phone, email, address, social_profiles, contacts_count, created_at, last_activity_at). SEMPRE com o sufixo _attribute."
|
|
22101
22382
|
},
|
|
22102
22383
|
{
|
|
22103
22384
|
"name": "attribute_description",
|
|
@@ -22118,7 +22399,7 @@
|
|
|
22118
22399
|
"type": "string",
|
|
22119
22400
|
"location": "body",
|
|
22120
22401
|
"required": false,
|
|
22121
|
-
"description": "
|
|
22402
|
+
"description": "Regra de formato (opcional, atributo de texto). Aceita os dois jeitos: CRU como no Ruby (ex. \\A\\d{5}-\\d{3}\\z) ou COM BARRAS como a tela grava (ex. /^\\d{5}-\\d{3}$/, flags i e s). Os dois valem na tela, na IA e no bloco Esperar resposta (desde 13/10/2026)."
|
|
22122
22403
|
},
|
|
22123
22404
|
{
|
|
22124
22405
|
"name": "regex_cue",
|
|
@@ -22217,7 +22498,7 @@
|
|
|
22217
22498
|
"type": "string",
|
|
22218
22499
|
"location": "body",
|
|
22219
22500
|
"required": false,
|
|
22220
|
-
"description": "contact_attribute
|
|
22501
|
+
"description": "conversation_attribute (PADRAO) | contact_attribute | account_attribute (variavel da conta) | company_attribute (atributo personalizado de EMPRESA, 2026-10-15: exige o modulo Empresas ligado na conta, tipo secret recusado, chaves reservadas recusadas: name, domain, description, legal_name, cnpj, phone, email, address, social_profiles, contacts_count, created_at, last_activity_at). SEMPRE com o sufixo _attribute."
|
|
22221
22502
|
},
|
|
22222
22503
|
{
|
|
22223
22504
|
"name": "attribute_description",
|
|
@@ -22238,7 +22519,7 @@
|
|
|
22238
22519
|
"type": "string",
|
|
22239
22520
|
"location": "body",
|
|
22240
22521
|
"required": false,
|
|
22241
|
-
"description": "
|
|
22522
|
+
"description": "Regra de formato (opcional, atributo de texto). Aceita os dois jeitos: CRU como no Ruby (ex. \\A\\d{5}-\\d{3}\\z) ou COM BARRAS como a tela grava (ex. /^\\d{5}-\\d{3}$/, flags i e s). Os dois valem na tela, na IA e no bloco Esperar resposta (desde 13/10/2026)."
|
|
22242
22523
|
},
|
|
22243
22524
|
{
|
|
22244
22525
|
"name": "regex_cue",
|
|
@@ -22289,6 +22570,192 @@
|
|
|
22289
22570
|
"lionchat_custom_attributes_show"
|
|
22290
22571
|
]
|
|
22291
22572
|
},
|
|
22573
|
+
{
|
|
22574
|
+
"id": "lionchat_custom_attribute_categories_list",
|
|
22575
|
+
"method": "GET",
|
|
22576
|
+
"path": "/api/v1/accounts/{account_id}/custom_attribute_categories",
|
|
22577
|
+
"title": "Listar Categorias de Atributos",
|
|
22578
|
+
"description": "Lista as categorias (pastas que abrem e fecham) dos atributos personalizados da conta, de TODAS as abas. Qualquer pessoa da conta pode ler. Atributo que nao aparece em nenhum attribute_keys esta em 'Sem categoria' (o normal: categoria e opcional). Uma chave em attribute_keys que nao existe mais como atributo e ignorada pela tela (atributo apagado). Para a aba Card, attribute_keys traz o NOME do campo exatamente como gravado em lionchat_kanban_config (global_custom_attributes[].name).",
|
|
22579
|
+
"category": "Atributos Personalizados",
|
|
22580
|
+
"params": [],
|
|
22581
|
+
"returns": "Lista pura (array): [{id, attribute_model, name, position, attribute_keys: [...]}]. Ordene por attribute_model e position para reproduzir a tela.",
|
|
22582
|
+
"common_use_cases": [
|
|
22583
|
+
"Saber em que categoria cada atributo esta antes de mover",
|
|
22584
|
+
"Mostrar ao cliente como os atributos estao organizados em cada aba",
|
|
22585
|
+
"Achar o id da categoria para colocar um atributo nela"
|
|
22586
|
+
],
|
|
22587
|
+
"related_tools": [
|
|
22588
|
+
"lionchat_custom_attribute_categories_create",
|
|
22589
|
+
"lionchat_custom_attribute_categories_assign",
|
|
22590
|
+
"lionchat_custom_attributes_list",
|
|
22591
|
+
"lionchat_custom_attribute_categories_reorder"
|
|
22592
|
+
]
|
|
22593
|
+
},
|
|
22594
|
+
{
|
|
22595
|
+
"id": "lionchat_custom_attribute_categories_create",
|
|
22596
|
+
"method": "POST",
|
|
22597
|
+
"path": "/api/v1/accounts/{account_id}/custom_attribute_categories",
|
|
22598
|
+
"title": "Criar Categoria de Atributos",
|
|
22599
|
+
"description": "Cria uma categoria (pasta) numa aba de Configuracoes > Atributos personalizados. **Requer perfil Administrador.** A categoria pertence a UMA aba so (attribute_model) e entra no FIM da aba. Nome de 1 a 60 caracteres, sem repetir na mesma aba (sem diferenciar maiuscula); 'Sem categoria' e reservado; maximo 50 categorias por aba. NAO aceita atributos junto: para colocar atributos, use lionchat_custom_attribute_categories_assign depois.",
|
|
22600
|
+
"category": "Atributos Personalizados",
|
|
22601
|
+
"params": [
|
|
22602
|
+
{
|
|
22603
|
+
"name": "name",
|
|
22604
|
+
"type": "string",
|
|
22605
|
+
"location": "body",
|
|
22606
|
+
"required": true,
|
|
22607
|
+
"description": "Nome da categoria (ex: 'Sobre a casa'). Texto de 1 a 60 caracteres."
|
|
22608
|
+
},
|
|
22609
|
+
{
|
|
22610
|
+
"name": "attribute_model",
|
|
22611
|
+
"type": "string",
|
|
22612
|
+
"location": "body",
|
|
22613
|
+
"required": true,
|
|
22614
|
+
"description": "Aba da categoria, SEMPRE com o sufixo: conversation_attribute (Conversas) | contact_attribute (Contato) | company_attribute (Empresa, so com o modulo Empresas) | kanban_item_attribute (Card). Variavel de conta (account_attribute) NAO tem categoria."
|
|
22615
|
+
}
|
|
22616
|
+
],
|
|
22617
|
+
"returns": "A categoria criada: {id, attribute_model, name, position, attribute_keys: []} (201). 422 {error, code} se o nome repetir, for reservado, passar de 60 caracteres ou a aba ja tiver 50.",
|
|
22618
|
+
"common_use_cases": [
|
|
22619
|
+
"Organizar os atributos de contato em grupos (ex: 'Financeiro', 'Sobre a casa')",
|
|
22620
|
+
"Montar a estrutura de atributos de um cliente novo"
|
|
22621
|
+
],
|
|
22622
|
+
"related_tools": [
|
|
22623
|
+
"lionchat_custom_attribute_categories_assign",
|
|
22624
|
+
"lionchat_custom_attribute_categories_list",
|
|
22625
|
+
"lionchat_custom_attribute_categories_update"
|
|
22626
|
+
]
|
|
22627
|
+
},
|
|
22628
|
+
{
|
|
22629
|
+
"id": "lionchat_custom_attribute_categories_update",
|
|
22630
|
+
"method": "PATCH",
|
|
22631
|
+
"path": "/api/v1/accounts/{account_id}/custom_attribute_categories/{id}",
|
|
22632
|
+
"title": "Renomear Categoria de Atributos",
|
|
22633
|
+
"description": "Renomeia uma categoria. **Requer perfil Administrador.** So muda o nome: a aba (attribute_model) NAO muda e atributos mandados junto sao ignorados. Mesmas regras de nome do create.",
|
|
22634
|
+
"category": "Atributos Personalizados",
|
|
22635
|
+
"params": [
|
|
22636
|
+
{
|
|
22637
|
+
"name": "id",
|
|
22638
|
+
"type": "integer",
|
|
22639
|
+
"location": "path",
|
|
22640
|
+
"required": true,
|
|
22641
|
+
"description": "ID da categoria"
|
|
22642
|
+
},
|
|
22643
|
+
{
|
|
22644
|
+
"name": "name",
|
|
22645
|
+
"type": "string",
|
|
22646
|
+
"location": "body",
|
|
22647
|
+
"required": true,
|
|
22648
|
+
"description": "Novo nome (texto de 1 a 60 caracteres)."
|
|
22649
|
+
}
|
|
22650
|
+
],
|
|
22651
|
+
"returns": "A categoria atualizada: {id, attribute_model, name, position, attribute_keys}. 404 se for de outra conta.",
|
|
22652
|
+
"common_use_cases": [
|
|
22653
|
+
"Corrigir ou padronizar o nome de uma categoria"
|
|
22654
|
+
],
|
|
22655
|
+
"related_tools": [
|
|
22656
|
+
"lionchat_custom_attribute_categories_list",
|
|
22657
|
+
"lionchat_custom_attribute_categories_create"
|
|
22658
|
+
]
|
|
22659
|
+
},
|
|
22660
|
+
{
|
|
22661
|
+
"id": "lionchat_custom_attribute_categories_destroy",
|
|
22662
|
+
"method": "DELETE",
|
|
22663
|
+
"path": "/api/v1/accounts/{account_id}/custom_attribute_categories/{id}",
|
|
22664
|
+
"title": "Excluir Categoria de Atributos",
|
|
22665
|
+
"description": "Exclui uma categoria. **Requer perfil Administrador.** NUNCA apaga atributo nem valor: os atributos que estavam nela voltam para 'Sem categoria'. Confirme com o cliente antes.",
|
|
22666
|
+
"category": "Atributos Personalizados",
|
|
22667
|
+
"params": [
|
|
22668
|
+
{
|
|
22669
|
+
"name": "id",
|
|
22670
|
+
"type": "integer",
|
|
22671
|
+
"location": "path",
|
|
22672
|
+
"required": true,
|
|
22673
|
+
"description": "ID da categoria"
|
|
22674
|
+
}
|
|
22675
|
+
],
|
|
22676
|
+
"returns": "200 sem corpo. 404 se for de outra conta.",
|
|
22677
|
+
"common_use_cases": [
|
|
22678
|
+
"Desfazer uma categoria que nao e mais usada (os atributos ficam soltos)"
|
|
22679
|
+
],
|
|
22680
|
+
"related_tools": [
|
|
22681
|
+
"lionchat_custom_attribute_categories_list",
|
|
22682
|
+
"lionchat_custom_attribute_categories_assign"
|
|
22683
|
+
]
|
|
22684
|
+
},
|
|
22685
|
+
{
|
|
22686
|
+
"id": "lionchat_custom_attribute_categories_reorder",
|
|
22687
|
+
"method": "POST",
|
|
22688
|
+
"path": "/api/v1/accounts/{account_id}/custom_attribute_categories/reorder",
|
|
22689
|
+
"title": "Reordenar Categorias de Atributos",
|
|
22690
|
+
"description": "Define a ordem das categorias de UMA aba. **Requer perfil Administrador.** Mande a lista COMPLETA de ids da aba na ordem desejada: faltando ou sobrando id = 422 reorder_mismatch (alguem mexeu no meio; releia com lionchat_custom_attribute_categories_list e mande de novo). 'Sem categoria' sempre aparece primeiro na tela e nao entra na lista.",
|
|
22691
|
+
"category": "Atributos Personalizados",
|
|
22692
|
+
"params": [
|
|
22693
|
+
{
|
|
22694
|
+
"name": "attribute_model",
|
|
22695
|
+
"type": "string",
|
|
22696
|
+
"location": "body",
|
|
22697
|
+
"required": true,
|
|
22698
|
+
"description": "Aba da categoria, SEMPRE com o sufixo: conversation_attribute (Conversas) | contact_attribute (Contato) | company_attribute (Empresa, so com o modulo Empresas) | kanban_item_attribute (Card). Variavel de conta (account_attribute) NAO tem categoria."
|
|
22699
|
+
},
|
|
22700
|
+
{
|
|
22701
|
+
"name": "ids",
|
|
22702
|
+
"type": "array",
|
|
22703
|
+
"location": "body",
|
|
22704
|
+
"required": true,
|
|
22705
|
+
"description": "Lista com TODOS os ids de categoria da aba, na nova ordem (ex: [12, 10, 11]). Numeros."
|
|
22706
|
+
}
|
|
22707
|
+
],
|
|
22708
|
+
"returns": "Lista pura (array) das categorias DA ABA, na ordem: cada uma com id, attribute_model, name, position e attribute_keys (chaves dos atributos dentro dela, na ordem em que foram colocados).",
|
|
22709
|
+
"common_use_cases": [
|
|
22710
|
+
"Colocar a categoria mais usada no topo da aba"
|
|
22711
|
+
],
|
|
22712
|
+
"related_tools": [
|
|
22713
|
+
"lionchat_custom_attribute_categories_list"
|
|
22714
|
+
]
|
|
22715
|
+
},
|
|
22716
|
+
{
|
|
22717
|
+
"id": "lionchat_custom_attribute_categories_assign",
|
|
22718
|
+
"method": "POST",
|
|
22719
|
+
"path": "/api/v1/accounts/{account_id}/custom_attribute_categories/assign",
|
|
22720
|
+
"title": "Colocar ou Tirar Atributo de Categoria",
|
|
22721
|
+
"description": "Coloca um atributo numa categoria (ou tira, com category_id nulo). **Requer perfil Administrador.** Um atributo fica em UMA categoria so: colocar numa nova tira da anterior e ele entra no fim dela. A categoria tem de ser da MESMA aba (attribute_model) e o atributo tem de existir na aba (conversa/contato/empresa: attribute_key da definicao, ver lionchat_custom_attributes_list; Card: o NOME do campo exatamente como gravado em global_custom_attributes, com maiusculas e espacos, NUNCA uma chave em minuscula derivada). Tirar (category_id nulo) funciona mesmo se o atributo ja foi apagado.",
|
|
22722
|
+
"category": "Atributos Personalizados",
|
|
22723
|
+
"params": [
|
|
22724
|
+
{
|
|
22725
|
+
"name": "attribute_model",
|
|
22726
|
+
"type": "string",
|
|
22727
|
+
"location": "body",
|
|
22728
|
+
"required": true,
|
|
22729
|
+
"description": "Aba da categoria, SEMPRE com o sufixo: conversation_attribute (Conversas) | contact_attribute (Contato) | company_attribute (Empresa, so com o modulo Empresas) | kanban_item_attribute (Card). Variavel de conta (account_attribute) NAO tem categoria."
|
|
22730
|
+
},
|
|
22731
|
+
{
|
|
22732
|
+
"name": "attribute_key",
|
|
22733
|
+
"type": "string",
|
|
22734
|
+
"location": "body",
|
|
22735
|
+
"required": true,
|
|
22736
|
+
"description": "Chave do atributo (ex: 'renda'); na aba Card, o nome do campo (ex: 'Metragem Total')."
|
|
22737
|
+
},
|
|
22738
|
+
{
|
|
22739
|
+
"name": "category_id",
|
|
22740
|
+
"type": "integer",
|
|
22741
|
+
"location": "body",
|
|
22742
|
+
"required": false,
|
|
22743
|
+
"description": "ID da categoria de destino. Nulo ou ausente = tirar da categoria (vai para 'Sem categoria')."
|
|
22744
|
+
}
|
|
22745
|
+
],
|
|
22746
|
+
"returns": "Lista pura (array) das categorias DA ABA, na ordem: cada uma com id, attribute_model, name, position e attribute_keys (chaves dos atributos dentro dela, na ordem em que foram colocados). Erros: 422 {error, code} com code unknown_attribute (atributo nao existe na aba), category_other_tab (categoria de outra aba) ou invalid_format; 404 category_not_found.",
|
|
22747
|
+
"common_use_cases": [
|
|
22748
|
+
"Mover atributos existentes para uma categoria nova",
|
|
22749
|
+
"Tirar um atributo de uma categoria",
|
|
22750
|
+
"Logo depois de criar um atributo (lionchat_custom_attributes_create), coloca-lo na categoria certa"
|
|
22751
|
+
],
|
|
22752
|
+
"related_tools": [
|
|
22753
|
+
"lionchat_custom_attribute_categories_list",
|
|
22754
|
+
"lionchat_custom_attribute_categories_create",
|
|
22755
|
+
"lionchat_custom_attributes_list",
|
|
22756
|
+
"lionchat_kanban_config_list"
|
|
22757
|
+
]
|
|
22758
|
+
},
|
|
22292
22759
|
{
|
|
22293
22760
|
"id": "lionchat_csat_list",
|
|
22294
22761
|
"method": "GET",
|
|
@@ -26786,7 +27253,7 @@
|
|
|
26786
27253
|
"type": "object",
|
|
26787
27254
|
"location": "body",
|
|
26788
27255
|
"required": false,
|
|
26789
|
-
"description": "Atributos extras do CANAL — vai DENTRO de channel (o nome antigo additional_attributes, fora de channel, era descartado pelo servidor). Nas caixas WhatsApp (QR Code e oficial), Instagram, Facebook e TikTok a gravacao SOMA no 1o nivel: so as chaves enviadas mudam. Na caixa de API o objeto e TROCADO inteiro. QR Code: so estas chaves sao da tela —
|
|
27256
|
+
"description": "Atributos extras do CANAL — vai DENTRO de channel (o nome antigo additional_attributes, fora de channel, era descartado pelo servidor). Nas caixas WhatsApp (QR Code e oficial), Instagram, Facebook e TikTok a gravacao SOMA no 1o nivel: so as chaves enviadas mudam. Na caixa de API o objeto e TROCADO inteiro. QR Code: so estas chaves sao da tela — accept_groups, reject_calls, mark_as_seen (true/false de verdade, nunca \"false\" em texto) e reject_calls_message (texto). accept_status, accept_channels e accept_broadcast estao SEMPRE desligadas desde 09/10/2026 (status, canais e listas de transmissao nao trazem conversa de cliente): mandar true e desfeito ao salvar, sem erro; o resto (sessao, importacao, proxy, migracao, coex) e interno do sistema e NAO deve ser mandado. WhatsApp oficial: mark_as_seen (bool). Ex.: {\"accept_groups\": true, \"reject_calls\": false}."
|
|
26790
27257
|
},
|
|
26791
27258
|
{
|
|
26792
27259
|
"name": "out_of_office_enabled",
|
|
@@ -28143,7 +28610,7 @@
|
|
|
28143
28610
|
"type": "string",
|
|
28144
28611
|
"location": "query",
|
|
28145
28612
|
"required": false,
|
|
28146
|
-
"description": "Filtra pela situacao do card: 'open' (inclui card sem status gravado), 'won' ou 'lost'. Qualquer outro texto e ignorado em silencio e devolve TODOS os status"
|
|
28613
|
+
"description": "Filtra pela situacao do card: 'open' (inclui card sem status gravado; desde 11/10/2026 deixa de fora os ADIADOS), 'snoozed' (adiados), 'won' ou 'lost'. Qualquer outro texto e ignorado em silencio e devolve TODOS os status"
|
|
28147
28614
|
},
|
|
28148
28615
|
{
|
|
28149
28616
|
"name": "funnel_id",
|
|
@@ -28160,7 +28627,7 @@
|
|
|
28160
28627
|
"description": "Pagina (25 cards por pagina). Valor invalido ou ausente = pagina 1"
|
|
28161
28628
|
}
|
|
28162
28629
|
],
|
|
28163
|
-
"returns": "{ meta: { total_count, page, per_page: 25 }, payload: [ { id, funnel_id, funnel_stage, position, conversation_display_id, linked_conversations, item_details, custom_attributes, assigned_agents, checklist, labels, next_task, permissions, funnel: { id, name, description, active, stages, settings } } ] }",
|
|
28630
|
+
"returns": "{ meta: { total_count, page, per_page: 25 }, payload: [ { id, funnel_id, funnel_stage, position, conversation_display_id, linked_conversations, item_details, custom_attributes, assigned_agents, checklist, labels, next_task, permissions, funnel: { id, name, description, active, stages, settings } } ] } Cada card traz tambem effective_status e snoozed_until.",
|
|
28164
28631
|
"common_use_cases": [
|
|
28165
28632
|
"Ver todos os negocios abertos de um cliente antes de responder",
|
|
28166
28633
|
"Conferir se o contato ja tem card antes de criar outro",
|
|
@@ -28177,7 +28644,7 @@
|
|
|
28177
28644
|
"method": "GET",
|
|
28178
28645
|
"path": "/api/v1/accounts/{account_id}/funnels/open_counts",
|
|
28179
28646
|
"title": "Cards Abertos por Funil",
|
|
28180
|
-
"description": "Devolve quantos cards ABERTOS cada funil tem — resposta enxuta pra montar os contadores das abas do Kanban sem baixar card nenhum. Conta so status 'open' (ou card sem status gravado); ganhos e
|
|
28647
|
+
"description": "Devolve quantos cards ABERTOS cada funil tem — resposta enxuta pra montar os contadores das abas do Kanban sem baixar card nenhum. Conta so status 'open' (ou card sem status gravado) e NAO adiado (desde 11/10/2026); ganhos, perdidos e adiados ficam de fora. Traz APENAS funis ativos (arquivado nao aparece) e visiveis ao usuario do token; quem nao tem permissao ampla de Kanban conta so os cards em que e responsavel, e cards de caixas sem acesso saem da conta.",
|
|
28181
28648
|
"category": "Funis",
|
|
28182
28649
|
"params": [
|
|
28183
28650
|
{
|
|
@@ -28239,7 +28706,7 @@
|
|
|
28239
28706
|
"method": "POST",
|
|
28240
28707
|
"path": "/api/v1/accounts/{account_id}/kanban_items/{id}/start_flow",
|
|
28241
28708
|
"title": "Disparar Fluxo pelo Card",
|
|
28242
|
-
"description": "Inicia manualmente um fluxo do FlowBuilder na conversa vinculada ao card — o fluxo passa a FALAR com o cliente, entao confirme antes de disparar. Tres condicoes precisam valer, senao volta 422 explicando: (1) o card precisa ter conversa vinculada (a principal, ou uma vinculada marcada como 'recebe automacao'); (2) o fluxo precisa estar ativo, ser de conversa e ter no inicial; (3) o fluxo precisa ter pelo menos um gatilho de card do Kanban (card criado, movido, ganho, perdido ou
|
|
28709
|
+
"description": "Inicia manualmente um fluxo do FlowBuilder na conversa vinculada ao card — o fluxo passa a FALAR com o cliente, entao confirme antes de disparar. Tres condicoes precisam valer, senao volta 422 explicando: (1) o card precisa ter conversa vinculada (a principal, ou uma vinculada marcada como 'recebe automacao'); (2) o fluxo precisa estar ativo, ser de conversa e ter no inicial; (3) o fluxo precisa ter pelo menos um gatilho de card do Kanban (card criado, movido, ganho, perdido, atributo alterado e, desde 11/10/2026, card aberto ou card adiado) — fluxo de outro gatilho e recusado. Se ja existe sessao ativa daquele fluxo nessa conversa, volta 409. Alem de iniciar, grava uma mensagem de atividade na conversa e um registro no historico do card.",
|
|
28243
28710
|
"category": "Itens",
|
|
28244
28711
|
"params": [
|
|
28245
28712
|
{
|
|
@@ -28460,7 +28927,7 @@
|
|
|
28460
28927
|
"method": "GET",
|
|
28461
28928
|
"path": "/api/v1/accounts/{account_id}/search/kanban_items",
|
|
28462
28929
|
"title": "Buscar Cards do Kanban",
|
|
28463
|
-
"description": "Busca cards do Kanban por texto ou pelo numero do card. Procura em titulo, descricao, nome e e-mail do cliente, nos atributos personalizados do card (menos os do tipo secreto) e tambem na conversa/contato vinculados; com UM termo so de numeros, tenta antes casar o ID exato do card. Varios termos separados por espaco funcionam como E (todos precisam bater, ate 5). PISO DE 3 LETRAS (desde 04/08/2026): termo com letra e menos de 3 caracteres e recusado e a resposta vem VAZIA sem nenhum aviso — se todos os termos forem curtos, isso NAO quer dizer que o card nao existe, quer dizer que a busca nem rodou; refaca com 3+ letras. Termo so de digitos e isento do piso. Devolve no maximo 15 cards e NAO tem paginacao — pra listar de verdade use lionchat_kanban_items_filter. Quem nao e administrador so enxerga cards em que e responsavel. FILTRO DE DATA (02/09/2026): quatro eixos, cada um com janela fixa (_start/_end ISO) ou atalho relativo (_relative + _relative_days): criacao (date_*), entrada na etapa atual (stage_date_*), atualizacao (updated_date_*) e ganho/perdido em (closed_date_*). Operadores do atalho: today, yesterday (estes DOIS sem numero), last_days (ultimos N incluindo hoje), days_ago (o dia exato de N atras), days_before (mais de N atras). N inteiro 1..998; janela no fuso da CONTA. CUIDADO: operador invalido ou N invalido NAO da erro — o atalho e ignorado e a resposta volta MAIOR (ate 5.000 cards) com cara de filtrada; confira a contagem antes de qualquer acao em massa. Ver o resource de filtros.",
|
|
28930
|
+
"description": "Busca cards do Kanban por texto ou pelo numero do card. Procura em titulo, descricao, nome e e-mail do cliente, nos atributos personalizados do card (menos os do tipo secreto) e tambem na conversa/contato vinculados; com UM termo so de numeros, tenta antes casar o ID exato do card. Varios termos separados por espaco funcionam como E (todos precisam bater, ate 5). PISO DE 3 LETRAS (desde 04/08/2026): termo com letra e menos de 3 caracteres e recusado e a resposta vem VAZIA sem nenhum aviso — se todos os termos forem curtos, isso NAO quer dizer que o card nao existe, quer dizer que a busca nem rodou; refaca com 3+ letras. Termo so de digitos e isento do piso. Devolve no maximo 15 cards e NAO tem paginacao — pra listar de verdade use lionchat_kanban_items_filter. Quem nao e administrador so enxerga cards em que e responsavel. FILTRO DE DATA (02/09/2026): quatro eixos, cada um com janela fixa (_start/_end ISO) ou atalho relativo (_relative + _relative_days): criacao (date_*), entrada na etapa atual (stage_date_*), atualizacao (updated_date_*) e ganho/perdido em (closed_date_*). Operadores do atalho: today, yesterday (estes DOIS sem numero), last_days (ultimos N incluindo hoje), days_ago (o dia exato de N atras), days_before (mais de N atras). N inteiro 1..998; janela no fuso da CONTA. CUIDADO: operador invalido ou N invalido NAO da erro — o atalho e ignorado e a resposta volta MAIOR (ate 5.000 cards) com cara de filtrada; confira a contagem antes de qualquer acao em massa. Ver o resource de filtros. Desde 11/10/2026: em kanban_filters, statuses [\"open\"] = aberto e NAO adiado e [\"snoozed\"] = adiados; cada card traz effective_status e snoozed_until.",
|
|
28464
28931
|
"category": "Busca",
|
|
28465
28932
|
"params": [
|
|
28466
28933
|
{
|
|
@@ -29082,7 +29549,7 @@
|
|
|
29082
29549
|
"method": "GET",
|
|
29083
29550
|
"path": "/api/v1/accounts/{account_id}/captain/call_agents",
|
|
29084
29551
|
"title": "Listar Agentes de Ligacao",
|
|
29085
|
-
"description": "Agente de LIGACAO (area \"Agentes de ligacao\", separada dos agentes de texto desde 24/09/2026). Nao ocupa vaga de IA do plano. Exige Admin ou cargo com captain_manage. Devolve tambem meta.dial_inboxes: as caixas que podem fazer ligacao (LionCalls ligada).",
|
|
29552
|
+
"description": "Agente de LIGACAO (area \"Agentes de ligacao\", separada dos agentes de texto desde 24/09/2026). Nao ocupa vaga de IA do plano. Exige Admin ou cargo com captain_manage — EXCETO para quem edita fluxo (Admin ou flowbuilder_manage): esse recebe a forma LEVE (so id e name de cada agente, e as linhas recortadas pelas caixas que ve), que e o que o node ai_call do FlowBuilder precisa. Devolve tambem meta.dial_inboxes: as caixas que podem fazer ligacao (LionCalls ligada) — use o id no data.aiCallInboxId do node ai_call.",
|
|
29086
29553
|
"category": "Assistentes",
|
|
29087
29554
|
"params": [],
|
|
29088
29555
|
"returns": "{ payload: [agente de ligacao], meta: { dial_inboxes: [{id, name}] } }",
|
|
@@ -29193,7 +29660,7 @@
|
|
|
29193
29660
|
"type": "integer",
|
|
29194
29661
|
"location": "body",
|
|
29195
29662
|
"required": false,
|
|
29196
|
-
"description": "
|
|
29663
|
+
"description": "Tempo maximo da ligacao, 30 a 600 segundos (padrao 180). Aparece na tela do agente de ligacao (voltou em 17/10/2026). Quando acaba, o motor desliga a ligacao sozinho, com qualquer fornecedor (OpenAI ou ElevenLabs)."
|
|
29197
29664
|
},
|
|
29198
29665
|
{
|
|
29199
29666
|
"name": "captain_assistant_id",
|
|
@@ -29291,7 +29758,7 @@
|
|
|
29291
29758
|
"type": "integer",
|
|
29292
29759
|
"location": "body",
|
|
29293
29760
|
"required": false,
|
|
29294
|
-
"description": "
|
|
29761
|
+
"description": "Tempo maximo da ligacao, 30 a 600 segundos (padrao 180). Aparece na tela do agente de ligacao (voltou em 17/10/2026). Quando acaba, o motor desliga a ligacao sozinho, com qualquer fornecedor (OpenAI ou ElevenLabs)."
|
|
29295
29762
|
},
|
|
29296
29763
|
{
|
|
29297
29764
|
"name": "captain_assistant_id",
|
|
@@ -31175,6 +31642,299 @@
|
|
|
31175
31642
|
"lionchat_lead_forms_update"
|
|
31176
31643
|
]
|
|
31177
31644
|
},
|
|
31645
|
+
{
|
|
31646
|
+
"id": "lionchat_whatsapp_forms_list",
|
|
31647
|
+
"method": "GET",
|
|
31648
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms",
|
|
31649
|
+
"title": "Listar Formularios do WhatsApp",
|
|
31650
|
+
"description": "Lista os Formularios do WhatsApp (formulario nativo da Meta, preenchido DENTRO do WhatsApp e aberto por botao de modelo de mensagem). So caixa do WhatsApp Oficial (Cloud API). Status: draft, publishing, published, deprecated; unpublished_changes diz se o rascunho mudou depois da ultima publicacao. meta_flow_id e o numero do formulario na Meta (vai no botao FLOW do modelo).",
|
|
31651
|
+
"category": "Formularios",
|
|
31652
|
+
"params": [
|
|
31653
|
+
{
|
|
31654
|
+
"name": "inbox_id",
|
|
31655
|
+
"type": "integer",
|
|
31656
|
+
"location": "query",
|
|
31657
|
+
"required": false,
|
|
31658
|
+
"description": "Filtra pela conta do WhatsApp (WABA) desta caixa oficial"
|
|
31659
|
+
},
|
|
31660
|
+
{
|
|
31661
|
+
"name": "refresh",
|
|
31662
|
+
"type": "boolean",
|
|
31663
|
+
"location": "query",
|
|
31664
|
+
"required": false,
|
|
31665
|
+
"description": "true = rele o estado na Meta antes de responder (1 chamada por conta do WhatsApp)"
|
|
31666
|
+
},
|
|
31667
|
+
{
|
|
31668
|
+
"name": "with_questions",
|
|
31669
|
+
"type": "boolean",
|
|
31670
|
+
"location": "query",
|
|
31671
|
+
"required": false,
|
|
31672
|
+
"description": "true = inclui questions: [{code, label}] de cada formulario (as perguntas usadas nas variaveis do fluxo)"
|
|
31673
|
+
}
|
|
31674
|
+
],
|
|
31675
|
+
"returns": "lista [{id, name, status, meta_status, meta_flow_id, waba_id, inbox, publications_count, unpublished_changes, questions?}]",
|
|
31676
|
+
"common_use_cases": [
|
|
31677
|
+
"Achar o meta_flow_id para por o botao FLOW num modelo",
|
|
31678
|
+
"Escolher o formulario do gatilho \"Formulario do WhatsApp respondido\""
|
|
31679
|
+
],
|
|
31680
|
+
"related_tools": [
|
|
31681
|
+
"lionchat_whatsapp_forms_show",
|
|
31682
|
+
"lionchat_whatsapp_forms_create",
|
|
31683
|
+
"lionchat_inboxes_whatsapp_templates_create"
|
|
31684
|
+
]
|
|
31685
|
+
},
|
|
31686
|
+
{
|
|
31687
|
+
"id": "lionchat_whatsapp_forms_show",
|
|
31688
|
+
"method": "GET",
|
|
31689
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms/{id}",
|
|
31690
|
+
"title": "Ver Formulario do WhatsApp",
|
|
31691
|
+
"description": "Rascunho completo (editor_data), save_targets (\"Salvar em\"), image_urls, limits (limites da Meta por tipo), published_version e version_outdated (true = publicado numa versao que a Meta nao aceita mais: publicar de novo).",
|
|
31692
|
+
"category": "Formularios",
|
|
31693
|
+
"params": [
|
|
31694
|
+
{
|
|
31695
|
+
"name": "id",
|
|
31696
|
+
"type": "integer",
|
|
31697
|
+
"location": "path",
|
|
31698
|
+
"required": true,
|
|
31699
|
+
"description": "ID do Formulario do WhatsApp (o nosso, nao o da Meta)"
|
|
31700
|
+
},
|
|
31701
|
+
{
|
|
31702
|
+
"name": "refresh",
|
|
31703
|
+
"type": "boolean",
|
|
31704
|
+
"location": "query",
|
|
31705
|
+
"required": false,
|
|
31706
|
+
"description": "true = rele o estado na Meta"
|
|
31707
|
+
}
|
|
31708
|
+
],
|
|
31709
|
+
"returns": "formulario completo com editor_data, save_targets, image_urls, limits, published_version, version_outdated",
|
|
31710
|
+
"common_use_cases": [
|
|
31711
|
+
"Ler o rascunho antes de editar (update substitui o rascunho inteiro)",
|
|
31712
|
+
"Conferir os limites antes de montar perguntas"
|
|
31713
|
+
],
|
|
31714
|
+
"related_tools": [
|
|
31715
|
+
"lionchat_whatsapp_forms_update",
|
|
31716
|
+
"lionchat_whatsapp_forms_publish"
|
|
31717
|
+
]
|
|
31718
|
+
},
|
|
31719
|
+
{
|
|
31720
|
+
"id": "lionchat_whatsapp_forms_create",
|
|
31721
|
+
"method": "POST",
|
|
31722
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms",
|
|
31723
|
+
"title": "Criar Formulario do WhatsApp",
|
|
31724
|
+
"description": "Cria um Formulario do WhatsApp em rascunho (nada vai para a Meta ate publicar). Exige caixa do WhatsApp Oficial da propria conta (senao 422 inbox_must_be_official). O nome precisa ser unico na conta do WhatsApp (a Meta recusa repetido ao publicar). Admin-only.",
|
|
31725
|
+
"category": "Formularios",
|
|
31726
|
+
"params": [
|
|
31727
|
+
{
|
|
31728
|
+
"name": "name",
|
|
31729
|
+
"type": "string",
|
|
31730
|
+
"location": "body",
|
|
31731
|
+
"required": true,
|
|
31732
|
+
"description": "Nome do formulario (aparece no painel da Meta; unico na conta do WhatsApp)"
|
|
31733
|
+
},
|
|
31734
|
+
{
|
|
31735
|
+
"name": "inbox_id",
|
|
31736
|
+
"type": "integer",
|
|
31737
|
+
"location": "body",
|
|
31738
|
+
"required": true,
|
|
31739
|
+
"description": "ID de uma caixa do WhatsApp Oficial (Cloud API) da conta"
|
|
31740
|
+
},
|
|
31741
|
+
{
|
|
31742
|
+
"name": "editor_data",
|
|
31743
|
+
"type": "object",
|
|
31744
|
+
"location": "body",
|
|
31745
|
+
"required": false,
|
|
31746
|
+
"description": "Rascunho {category, next_label (ate 35), submit_label (ate 35), screens: [{title (ate 30), fields: [...]}]}. SUBSTITUI o rascunho inteiro: leia com whatsapp_forms_show e mande de volta completo. Campo: {code (f_<n>; omita no campo NOVO, o servidor da), type, label, helper, required, ...}. Tipos de pergunta: short_text, email, phone, number (pergunta ate 20), long_text (20), date e calendar (40), single_choice e multiple_choice (30; options [{code o_<n>, label ate 30, description ate 300}]), opt_in (120; read_more_url), photo e document (80; description, max_files 1-10, max_size_mb 1-25; a foto sai sempre com no maximo 5 MB, o limite de recebimento, photo: source camera_gallery|camera|gallery, document: file_kinds [pdf, word, spreadsheet, presentation, image, text, compressed, video]). Ajustes: max_chars (NUMERO 1-4000, texto), min_date/max_date 'AAAA-MM-DD' (data/calendario), calendar: mode single|range, end_label, end_helper, title, description, days [Mon..Sun]; multiple_choice: min_selected/max_selected. Conteudo (type + text): heading e subheading (80), paragraph e caption (4096), link (text ate 25 + url http(s), ate 2 por tela); image: suba antes por lionchat_whatsapp_forms_images (link) e use o blob_id em image, com alt_text ate 100. Por tela: 1 foto/arquivo, 3 imagens, 2 links; no formulario inteiro ate 10 arquivos. Limite de caracteres NAO barra o salvar (so o publicar). Codigo f_<n> ja publicado NUNCA e reaproveitado. Contrato completo: resource lionchat://docs/formularios-publicos (secao Formulario do WhatsApp)."
|
|
31747
|
+
}
|
|
31748
|
+
],
|
|
31749
|
+
"returns": "formulario completo (201)",
|
|
31750
|
+
"common_use_cases": [
|
|
31751
|
+
"Montar um formulario de cadastro, pesquisa ou agendamento que o cliente preenche sem sair do WhatsApp"
|
|
31752
|
+
],
|
|
31753
|
+
"related_tools": [
|
|
31754
|
+
"lionchat_whatsapp_forms_update",
|
|
31755
|
+
"lionchat_whatsapp_forms_publish",
|
|
31756
|
+
"lionchat_whatsapp_forms_images"
|
|
31757
|
+
]
|
|
31758
|
+
},
|
|
31759
|
+
{
|
|
31760
|
+
"id": "lionchat_whatsapp_forms_update",
|
|
31761
|
+
"method": "PATCH",
|
|
31762
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms/{id}",
|
|
31763
|
+
"title": "Atualizar Formulario do WhatsApp",
|
|
31764
|
+
"description": "Salva nome, rascunho e/ou \"Salvar em\". editor_data SUBSTITUI o rascunho inteiro (leia antes com whatsapp_forms_show). Formato errado = 422; limite de caracteres da Meta NAO barra o salvar (so o publicar). Durante a publicacao devolve 409 busy. Mudanca no rascunho so chega ao cliente depois de publicar; o \"Salvar em\" vale na hora. Admin-only.",
|
|
31765
|
+
"category": "Formularios",
|
|
31766
|
+
"params": [
|
|
31767
|
+
{
|
|
31768
|
+
"name": "id",
|
|
31769
|
+
"type": "integer",
|
|
31770
|
+
"location": "path",
|
|
31771
|
+
"required": true,
|
|
31772
|
+
"description": "ID do Formulario do WhatsApp (o nosso, nao o da Meta)"
|
|
31773
|
+
},
|
|
31774
|
+
{
|
|
31775
|
+
"name": "name",
|
|
31776
|
+
"type": "string",
|
|
31777
|
+
"location": "body",
|
|
31778
|
+
"required": false,
|
|
31779
|
+
"description": "Novo nome"
|
|
31780
|
+
},
|
|
31781
|
+
{
|
|
31782
|
+
"name": "editor_data",
|
|
31783
|
+
"type": "object",
|
|
31784
|
+
"location": "body",
|
|
31785
|
+
"required": false,
|
|
31786
|
+
"description": "Rascunho {category, next_label (ate 35), submit_label (ate 35), screens: [{title (ate 30), fields: [...]}]}. SUBSTITUI o rascunho inteiro: leia com whatsapp_forms_show e mande de volta completo. Campo: {code (f_<n>; omita no campo NOVO, o servidor da), type, label, helper, required, ...}. Tipos de pergunta: short_text, email, phone, number (pergunta ate 20), long_text (20), date e calendar (40), single_choice e multiple_choice (30; options [{code o_<n>, label ate 30, description ate 300}]), opt_in (120; read_more_url), photo e document (80; description, max_files 1-10, max_size_mb 1-25; a foto sai sempre com no maximo 5 MB, o limite de recebimento, photo: source camera_gallery|camera|gallery, document: file_kinds [pdf, word, spreadsheet, presentation, image, text, compressed, video]). Ajustes: max_chars (NUMERO 1-4000, texto), min_date/max_date 'AAAA-MM-DD' (data/calendario), calendar: mode single|range, end_label, end_helper, title, description, days [Mon..Sun]; multiple_choice: min_selected/max_selected. Conteudo (type + text): heading e subheading (80), paragraph e caption (4096), link (text ate 25 + url http(s), ate 2 por tela); image: suba antes por lionchat_whatsapp_forms_images (link) e use o blob_id em image, com alt_text ate 100. Por tela: 1 foto/arquivo, 3 imagens, 2 links; no formulario inteiro ate 10 arquivos. Limite de caracteres NAO barra o salvar (so o publicar). Codigo f_<n> ja publicado NUNCA e reaproveitado. Contrato completo: resource lionchat://docs/formularios-publicos (secao Formulario do WhatsApp)."
|
|
31787
|
+
},
|
|
31788
|
+
{
|
|
31789
|
+
"name": "save_targets",
|
|
31790
|
+
"type": "object",
|
|
31791
|
+
"location": "body",
|
|
31792
|
+
"required": false,
|
|
31793
|
+
"description": "\"Salvar em\" por codigo de pergunta: {\"f_1\": destino}. Destinos: contact.name, contact.email, contact.cadastral.<cpf|rg|cnpj|passport|profession|marital_status|gender|date_of_birth>, contact.address.<cep|street|number|complement|neighborhood|city|state|country>, custom.<chave de atributo do CONTATO>, conversation_custom.<chave de atributo da CONVERSA>. Telefone nunca. Atributo precisa estar definido na conta e fora dos protegidos; destino invalido = 422. Foto/arquivo nao tem destino (vira anexo; codigo de foto = 422). Pergunta tirada do rascunho mantem o destino ate publicar de novo. Mudar nao exige publicar de novo. Dado novo vence; resposta em branco nao apaga."
|
|
31794
|
+
}
|
|
31795
|
+
],
|
|
31796
|
+
"returns": "formulario completo; 422 {errors} com formato ou destino invalido",
|
|
31797
|
+
"common_use_cases": [
|
|
31798
|
+
"Acrescentar ou mudar perguntas",
|
|
31799
|
+
"Gravar as respostas na ficha do contato ou em atributos (save_targets)"
|
|
31800
|
+
],
|
|
31801
|
+
"related_tools": [
|
|
31802
|
+
"lionchat_whatsapp_forms_show",
|
|
31803
|
+
"lionchat_whatsapp_forms_publish",
|
|
31804
|
+
"lionchat_custom_attributes_list",
|
|
31805
|
+
"lionchat_whatsapp_forms_images"
|
|
31806
|
+
]
|
|
31807
|
+
},
|
|
31808
|
+
{
|
|
31809
|
+
"id": "lionchat_whatsapp_forms_images",
|
|
31810
|
+
"method": "POST",
|
|
31811
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms/{id}/images",
|
|
31812
|
+
"title": "Subir imagem do Formulario do WhatsApp (por link)",
|
|
31813
|
+
"description": "Sobe a imagem de um componente Image POR LINK (o conector nao envia arquivo): o servidor baixa com protecao contra endereco interno, aceita so imagem (ate 10 MB), reduz para o limite da Meta (ate 1200 px e 300 KB, JPEG/PNG) e anexa ao formulario. Use o blob_id devolvido no campo {type: 'image', image: '<blob_id>', alt_text: '...'} do editor_data. 422 {error}: fetch_failed (link inacessivel, pagina da web ou endereco interno), invalid_image (nao e imagem), file_too_large (acima de 10 MB), too_large (nao coube em 300 KB). Ate 3 imagens por tela. Admin-only.",
|
|
31814
|
+
"category": "Formularios",
|
|
31815
|
+
"params": [
|
|
31816
|
+
{
|
|
31817
|
+
"name": "id",
|
|
31818
|
+
"type": "integer",
|
|
31819
|
+
"location": "path",
|
|
31820
|
+
"required": true,
|
|
31821
|
+
"description": "ID do Formulario do WhatsApp (o nosso, nao o da Meta)"
|
|
31822
|
+
},
|
|
31823
|
+
{
|
|
31824
|
+
"name": "url",
|
|
31825
|
+
"type": "string",
|
|
31826
|
+
"location": "body",
|
|
31827
|
+
"required": true,
|
|
31828
|
+
"description": "Endereco http/https de uma imagem publica (o arquivo da imagem, nao a pagina onde ela aparece)"
|
|
31829
|
+
}
|
|
31830
|
+
],
|
|
31831
|
+
"returns": "{blob_id, url, width, height}; 422 {error}",
|
|
31832
|
+
"common_use_cases": [
|
|
31833
|
+
"Colocar logo ou foto ilustrativa no topo de uma tela do formulario"
|
|
31834
|
+
],
|
|
31835
|
+
"related_tools": [
|
|
31836
|
+
"lionchat_whatsapp_forms_update",
|
|
31837
|
+
"lionchat_whatsapp_forms_show"
|
|
31838
|
+
]
|
|
31839
|
+
},
|
|
31840
|
+
{
|
|
31841
|
+
"id": "lionchat_whatsapp_forms_publish",
|
|
31842
|
+
"method": "POST",
|
|
31843
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms/{id}/publish",
|
|
31844
|
+
"title": "Publicar Formulario do WhatsApp",
|
|
31845
|
+
"description": "Gera o arquivo, cria (ou edita no lugar) o formulario na conta do WhatsApp do cliente e publica. Fica PARA SEMPRE na conta do WhatsApp (so da para aposentar). Republicar mantem os modelos que usam o formulario funcionando, sem nova aprovacao. 422 {problems: [{code, screen, field, limit}], error: {kind, message}, form}: problems = o que corrigir no rascunho (lista completa e o que corrigir em cada um: resource lionchat://docs/formularios-publicos, secao Formulario do WhatsApp); error.kind: no_channel, busy, duplicate_name, validation, meta, network, too_large, unexpected. Admin-only.",
|
|
31846
|
+
"category": "Formularios",
|
|
31847
|
+
"params": [
|
|
31848
|
+
{
|
|
31849
|
+
"name": "id",
|
|
31850
|
+
"type": "integer",
|
|
31851
|
+
"location": "path",
|
|
31852
|
+
"required": true,
|
|
31853
|
+
"description": "ID do Formulario do WhatsApp (o nosso, nao o da Meta)"
|
|
31854
|
+
}
|
|
31855
|
+
],
|
|
31856
|
+
"returns": "formulario publicado; 422 com problems/error",
|
|
31857
|
+
"common_use_cases": [
|
|
31858
|
+
"Colocar o formulario no ar para usar no botao de um modelo",
|
|
31859
|
+
"Publicar de novo depois de editar ou quando version_outdated = true"
|
|
31860
|
+
],
|
|
31861
|
+
"related_tools": [
|
|
31862
|
+
"lionchat_whatsapp_forms_preview",
|
|
31863
|
+
"lionchat_inboxes_whatsapp_templates_create"
|
|
31864
|
+
]
|
|
31865
|
+
},
|
|
31866
|
+
{
|
|
31867
|
+
"id": "lionchat_whatsapp_forms_preview",
|
|
31868
|
+
"method": "GET",
|
|
31869
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms/{id}/preview",
|
|
31870
|
+
"title": "Previa oficial do Formulario do WhatsApp",
|
|
31871
|
+
"description": "Endereco da previa oficial da Meta (abre sem login, vale 30 dias). preview_url nulo = ainda nao publicado.",
|
|
31872
|
+
"category": "Formularios",
|
|
31873
|
+
"params": [
|
|
31874
|
+
{
|
|
31875
|
+
"name": "id",
|
|
31876
|
+
"type": "integer",
|
|
31877
|
+
"location": "path",
|
|
31878
|
+
"required": true,
|
|
31879
|
+
"description": "ID do Formulario do WhatsApp (o nosso, nao o da Meta)"
|
|
31880
|
+
}
|
|
31881
|
+
],
|
|
31882
|
+
"returns": "{preview_url, expires_at}",
|
|
31883
|
+
"common_use_cases": [
|
|
31884
|
+
"Mostrar ao cliente como o formulario aparece no WhatsApp"
|
|
31885
|
+
],
|
|
31886
|
+
"related_tools": [
|
|
31887
|
+
"lionchat_whatsapp_forms_publish"
|
|
31888
|
+
]
|
|
31889
|
+
},
|
|
31890
|
+
{
|
|
31891
|
+
"id": "lionchat_whatsapp_forms_deprecate",
|
|
31892
|
+
"method": "POST",
|
|
31893
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms/{id}/deprecate",
|
|
31894
|
+
"title": "Aposentar Formulario do WhatsApp",
|
|
31895
|
+
"description": "IRREVERSIVEL: desliga o formulario para sempre na Meta e os modelos que o abrem param de funcionar. CONFIRME com o usuario antes. As respostas antigas continuam nas conversas. Admin-only.",
|
|
31896
|
+
"category": "Formularios",
|
|
31897
|
+
"params": [
|
|
31898
|
+
{
|
|
31899
|
+
"name": "id",
|
|
31900
|
+
"type": "integer",
|
|
31901
|
+
"location": "path",
|
|
31902
|
+
"required": true,
|
|
31903
|
+
"description": "ID do Formulario do WhatsApp (o nosso, nao o da Meta)"
|
|
31904
|
+
}
|
|
31905
|
+
],
|
|
31906
|
+
"returns": "formulario com status deprecated; 422 not_published se nunca foi publicado",
|
|
31907
|
+
"common_use_cases": [
|
|
31908
|
+
"Tirar de uso um formulario que nao vale mais"
|
|
31909
|
+
],
|
|
31910
|
+
"related_tools": [
|
|
31911
|
+
"lionchat_whatsapp_forms_destroy"
|
|
31912
|
+
]
|
|
31913
|
+
},
|
|
31914
|
+
{
|
|
31915
|
+
"id": "lionchat_whatsapp_forms_destroy",
|
|
31916
|
+
"method": "DELETE",
|
|
31917
|
+
"path": "/api/v1/accounts/{account_id}/whatsapp_forms/{id}",
|
|
31918
|
+
"title": "Excluir Formulario do WhatsApp",
|
|
31919
|
+
"description": "Exclui so rascunho (nunca publicado) ou aposentado. Publicado devolve 422 deprecate_first. Admin-only.",
|
|
31920
|
+
"category": "Formularios",
|
|
31921
|
+
"params": [
|
|
31922
|
+
{
|
|
31923
|
+
"name": "id",
|
|
31924
|
+
"type": "integer",
|
|
31925
|
+
"location": "path",
|
|
31926
|
+
"required": true,
|
|
31927
|
+
"description": "ID do Formulario do WhatsApp (o nosso, nao o da Meta)"
|
|
31928
|
+
}
|
|
31929
|
+
],
|
|
31930
|
+
"returns": "204; 422 {error: {kind: deprecate_first}}",
|
|
31931
|
+
"common_use_cases": [
|
|
31932
|
+
"Apagar um rascunho de teste"
|
|
31933
|
+
],
|
|
31934
|
+
"related_tools": [
|
|
31935
|
+
"lionchat_whatsapp_forms_deprecate"
|
|
31936
|
+
]
|
|
31937
|
+
},
|
|
31178
31938
|
{
|
|
31179
31939
|
"id": "lionchat_agents_replace",
|
|
31180
31940
|
"method": "POST",
|
|
@@ -34232,7 +34992,7 @@
|
|
|
34232
34992
|
"path": "/api/v2/accounts/{account_id}/booking_reports",
|
|
34233
34993
|
"title": "Relatorio de Agendamentos",
|
|
34234
34994
|
"category": "Relatorios",
|
|
34235
|
-
"description": "[GET] A aba Relatorios > Agendamentos (2026-08-19). Unidade = o AGENDAMENTO (Booking nativo: link publico, IA e Agenda do painel — NAO e e-Clinica). Padrao de periodo: 30 dias pra TRAS e 30 pra FRENTE (agenda tem futuro). A SITUACAO vem da TAREFA da Agenda (account_tasks.status), nao de bookings.status — quem conclui/cancela pela Agenda deixa o booking parado em 'confirmado'; ler bookings direto pra contar concluidos da zero. attendance_rate (15/09) = attended / (attended + no_show), em %, pelas marcas Compareceu/Faltou; periodo SEM marca nenhuma cai na regra antiga concluidos / (concluidos + cancelados) — pendentes FORA do denominador (ainda nao aconteceram) — e attendance_basis diz qual valeu ('attendance' ou 'status'); nao recalcule com o total. snoozed (adiado) sai separado de pending. [15/09] totals traz tambem attended/no_show (marcas Compareceu/Faltou da tarefa — eixo proprio, NAO mexem no status nem na taxa) e a resposta ganha `treatments` (bloco Programas, refeito 15/09 a noite): o PERIODO since/until VALE; event_type_id recorta; user_id e status NAO. Programas: em_andamento e atrasados (medidos no FIM do periodo), comecaram/concluidos/encerrados (so se a data cair no periodo), sessoes_planejadas/sessoes_usadas/percentual (so dos em andamento). Sessoes do periodo: previstas = marcadas + nao_marcadas (nao_marcadas e PREVISAO), aconteceram, faltaram, taxa. Mais parados {programas, sessoes_restantes}, duracao {programas, dias_reais, dias_previstos}, linha[] {period, previstas, aconteceram, faltaram, aguardando (16/09), nao_marcadas} e por_tipo[] (mesmos campos + tipo). Sem valor em reais. Detalhe em lionchat://docs/reports-guide. Admin ou agente.",
|
|
34995
|
+
"description": "[GET] A aba Relatorios > Agendamentos (2026-08-19). Unidade = o AGENDAMENTO (Booking nativo: link publico, IA e Agenda do painel — NAO e e-Clinica). Padrao de periodo: 30 dias pra TRAS e 30 pra FRENTE (agenda tem futuro). A SITUACAO vem da TAREFA da Agenda (account_tasks.status), nao de bookings.status — quem conclui/cancela pela Agenda deixa o booking parado em 'confirmado'; ler bookings direto pra contar concluidos da zero. attendance_rate (15/09) = attended / (attended + no_show), em %, pelas marcas Compareceu/Faltou; periodo SEM marca nenhuma cai na regra antiga concluidos / (concluidos + cancelados) — pendentes FORA do denominador (ainda nao aconteceram) — e attendance_basis diz qual valeu ('attendance' ou 'status'); nao recalcule com o total. snoozed (adiado) sai separado de pending. [15/09] totals traz tambem attended/no_show (marcas Compareceu/Faltou da tarefa — eixo proprio, NAO mexem no status nem na taxa) e a resposta ganha `treatments` (bloco Programas, refeito 15/09 a noite): o PERIODO since/until VALE; event_type_id recorta; user_id e status NAO. Programas: em_andamento e atrasados (medidos no FIM do periodo), comecaram/concluidos/encerrados (so se a data cair no periodo), sessoes_planejadas/sessoes_usadas/percentual (so dos em andamento). Sessoes do periodo: previstas = marcadas + nao_marcadas (nao_marcadas e PREVISAO), aconteceram, faltaram, taxa. Mais parados {programas, sessoes_restantes}, duracao {programas, dias_reais, dias_previstos}, linha[] {period, previstas, aconteceram, faltaram, aguardando (16/09), nao_marcadas} e por_tipo[] (mesmos campos + tipo). Sem valor em reais. Detalhe em lionchat://docs/reports-guide. Admin ou agente. [14/10/2026] source=agenda troca a fonte para os compromissos marcados A MAO na Agenda, sem Booking — ligacao, reuniao, videochamada e tipos de compromisso da conta (tarefa comum e evento do Google ficam FORA). Use quando a conta nao usa Booking e o relatorio normal vem zerado. Nessa opcao o tipo vai em task_type (event_type_id e ignorado; a lista de tipos vem em appointment_types da propria resposta), by_agent conta pelos RESPONSAVEIS (quem tem dois aparece nas duas linhas; os totais contam uma vez), by_origin vem vazio e treatments vem nulo.",
|
|
34236
34996
|
"params": [
|
|
34237
34997
|
{
|
|
34238
34998
|
"name": "since",
|
|
@@ -34248,12 +35008,26 @@
|
|
|
34248
35008
|
"required": false,
|
|
34249
35009
|
"description": "Fim do periodo. Default: 30 dias a frente"
|
|
34250
35010
|
},
|
|
35011
|
+
{
|
|
35012
|
+
"name": "source",
|
|
35013
|
+
"type": "string",
|
|
35014
|
+
"location": "query",
|
|
35015
|
+
"required": false,
|
|
35016
|
+
"description": "booking (PADRAO, agendamentos do Booking) | agenda (compromissos marcados a mao na Agenda: ligacao, reuniao, videochamada e tipos da conta; tarefa comum e evento do Google ficam fora). Qualquer outro valor = booking."
|
|
35017
|
+
},
|
|
34251
35018
|
{
|
|
34252
35019
|
"name": "event_type_id",
|
|
34253
35020
|
"type": "integer",
|
|
34254
35021
|
"location": "query",
|
|
34255
35022
|
"required": false,
|
|
34256
|
-
"description": "Filtra por tipo de agendamento (booking_event_types)"
|
|
35023
|
+
"description": "Filtra por tipo de agendamento (booking_event_types) (so no modo Booking; com source=agenda use task_type)"
|
|
35024
|
+
},
|
|
35025
|
+
{
|
|
35026
|
+
"name": "task_type",
|
|
35027
|
+
"type": "string",
|
|
35028
|
+
"location": "query",
|
|
35029
|
+
"required": false,
|
|
35030
|
+
"description": "So com source=agenda: chave do tipo de compromisso (ex. meeting, call, video_call ou a chave de um tipo da conta). As opcoes vem em appointment_types da resposta com source=agenda."
|
|
34257
35031
|
},
|
|
34258
35032
|
{
|
|
34259
35033
|
"name": "user_id",
|
|
@@ -34277,11 +35051,12 @@
|
|
|
34277
35051
|
"description": "day | week | month (agrupamento da timeline; default day)"
|
|
34278
35052
|
}
|
|
34279
35053
|
],
|
|
34280
|
-
"returns": "{period: {since, until, group_by}, totals: {total, pending, completed, cancelled, snoozed, attended, no_show, attendance_rate, attendance_basis}, timeline: [{period, count}], by_event_type, by_agent, by_origin, treatments: {em_andamento, atrasados, comecaram, concluidos, encerrados, previstas, marcadas, aconteceram, faltaram, nao_marcadas, taxa, percentual, parados, duracao, linha, por_tipo}}",
|
|
35054
|
+
"returns": "{period: {since, until, group_by}, totals: {total, pending, completed, cancelled, snoozed, attended, no_show, attendance_rate, attendance_basis}, timeline: [{period, count}], by_event_type, by_agent, by_origin, treatments: {em_andamento, atrasados, comecaram, concluidos, encerrados, previstas, marcadas, aconteceram, faltaram, nao_marcadas, taxa, percentual, parados, duracao, linha, por_tipo}} | com source=agenda vem tambem source: 'agenda' e appointment_types: [{key, name}]; by_origin vazio e treatments nulo",
|
|
34281
35055
|
"common_use_cases": [
|
|
34282
35056
|
"Quantos agendamentos foram marcados/concluidos/cancelados no mes",
|
|
34283
35057
|
"Taxa de comparecimento por tipo de consulta ou por responsavel",
|
|
34284
|
-
"De onde vem os agendamentos (origem/UTM)"
|
|
35058
|
+
"De onde vem os agendamentos (origem/UTM)",
|
|
35059
|
+
"Relatorio dos compromissos marcados a mao na Agenda quando a conta nao usa Booking (source=agenda)"
|
|
34285
35060
|
],
|
|
34286
35061
|
"related_tools": [
|
|
34287
35062
|
"lionchat_booking_event_types_list",
|
|
@@ -34951,7 +35726,7 @@
|
|
|
34951
35726
|
"description": "Recorta pelos contatos de uma EMPRESA (aba Contratos da pagina da empresa). Empresa de outra conta = 404."
|
|
34952
35727
|
}
|
|
34953
35728
|
],
|
|
34954
|
-
"returns": "payload: [{id, title, status, signature_document_id, document_name, contact_id, contact_name, conversation_id, sent_at, completed_at, expires_at, participants[{id, name, role, status, delivery_channel, phone, email, signed_at, viewed_at, public_url, signs_in_panel}], delivery: {failed[], delivered_participant_ids[]}, has_signed_document, pending_for_me}], meta: {page, per_page, has_more, counts}",
|
|
35729
|
+
"returns": "payload: [{id, title, status, signature_document_id, document_name, contact_id, contact_name, conversation_id, sent_at, completed_at, expires_at, participants[{id, name, role, status, delivery_channel, phone, email, signed_at, viewed_at, public_url, signs_in_panel}], delivery: {failed[{participant_id, reason}], delivered_participant_ids[], copies[{participant_id, status: sent|failed, reason}]}, has_signed_document, pending_for_me}], meta: {page, per_page, has_more, counts}",
|
|
34955
35730
|
"common_use_cases": [
|
|
34956
35731
|
"Ver o status dos contratos de um cliente (assinou? abriu? expirou?)",
|
|
34957
35732
|
"Relatorio de um modelo: quantos aguardando/assinados, quem falta",
|
|
@@ -34979,7 +35754,7 @@
|
|
|
34979
35754
|
"description": "ID do contrato"
|
|
34980
35755
|
}
|
|
34981
35756
|
],
|
|
34982
|
-
"returns": "contrato + events: [{kind, occurred_at, ip, device, location, participant_id, panel}] + original_sha256/sealed_sha256",
|
|
35757
|
+
"returns": "contrato (com delivery: {failed[{participant_id, reason}], delivered_participant_ids[], copies[{participant_id, status: sent|failed, reason}]}, copies = a via assinada de cada pessoa) + events: [{kind, occurred_at, ip, device, location, participant_id, panel}] + original_sha256/sealed_sha256",
|
|
34983
35758
|
"common_use_cases": [
|
|
34984
35759
|
"Conferir quando e de onde a pessoa abriu e assinou",
|
|
34985
35760
|
"Ver por que um contrato nao foi entregue (delivery.failed) ou foi recusado"
|
|
@@ -36029,7 +36804,7 @@
|
|
|
36029
36804
|
"type": "string",
|
|
36030
36805
|
"location": "query",
|
|
36031
36806
|
"required": false,
|
|
36032
|
-
"description": "open (padrao na tela), won, lost; omitir = todos"
|
|
36807
|
+
"description": "open (padrao na tela; aberto e NAO adiado desde 11/10/2026), snoozed (adiados), won, lost; omitir = todos"
|
|
36033
36808
|
},
|
|
36034
36809
|
{
|
|
36035
36810
|
"name": "funnel_id",
|