@lionchat/mcp-server 1.23.0 → 1.25.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 +22 -2
- package/dist/docs/resources/agenda-multiplas-unidades.md +44 -1
- package/dist/docs/resources/api-conventions.md +56 -2
- package/dist/docs/resources/best-practices.md +53 -3
- package/dist/docs/resources/data-model.md +43 -8
- package/dist/docs/resources/filtros-e-relatorios.md +17 -1
- package/dist/docs/resources/flowbuilder-design-guide.md +6 -1
- package/dist/docs/resources/glossary.md +4 -2
- package/dist/docs/resources/kanban-deep-dive.md +164 -24
- package/dist/tools.js +3 -2
- package/dist/tools.js.map +1 -1
- package/endpoints.json +1126 -105
- package/package.json +1 -1
package/endpoints.json
CHANGED
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
"method": "POST",
|
|
174
174
|
"path": "/api/v1/accounts/{account_id}/contacts",
|
|
175
175
|
"title": "Criar Contato",
|
|
176
|
-
"description": "Cria um contato. Nenhum campo e estritamente obrigatorio (recomendado phone_number ou email). Aceita name, email, phone_number, identifier, additional_attributes, custom_attributes, blocked. TELEFONE UNICO POR CONTA (trava no BANCO desde 01/09/2026, como e-mail e identifier): phone_number ja cadastrado em outro contato da conta = 422 'phone_number has already been taken' — inclusive em chamadas paralelas. Procure antes com contacts_search (acha com e sem o 9o digito) e use contacts_update no que existe.\n\nSE VOLTAR 422 com attributes:['phone_number']: o contato JA EXISTE — na forma exata OU na outra forma do nono digito. Nao tente criar de novo trocando a forma do numero (a recusa protege contra ficha em dobro): busque com lionchat_contacts_search e use contacts_update. Case os 'attributes' da resposta, nunca o texto da mensagem (ela sai no idioma padrao da instalacao, em ingles).",
|
|
176
|
+
"description": "Cria um contato. Nenhum campo e estritamente obrigatorio (recomendado phone_number ou email). Aceita name, email, phone_number, identifier, additional_attributes, custom_attributes, blocked. TELEFONE UNICO POR CONTA (trava no BANCO desde 01/09/2026, como e-mail e identifier): phone_number ja cadastrado em outro contato da conta = 422 'phone_number has already been taken' — inclusive em chamadas paralelas. Procure antes com contacts_search (acha com e sem o 9o digito) e use contacts_update no que existe.\n\nSE VOLTAR 422 com attributes:['phone_number']: o contato JA EXISTE — na forma exata OU na outra forma do nono digito. Nao tente criar de novo trocando a forma do numero (a recusa protege contra ficha em dobro): busque com lionchat_contacts_search e use contacts_update. Case os 'attributes' da resposta, nunca o texto da mensagem (ela sai no idioma padrao da instalacao, em ingles). EMPRESA (2026-09-25): aceita company_id (ver param); o contato devolve company_id. Cargo da pessoa = additional_attributes.job_title.",
|
|
177
177
|
"category": "Contatos",
|
|
178
178
|
"params": [
|
|
179
179
|
{
|
|
@@ -209,7 +209,7 @@
|
|
|
209
209
|
"type": "object",
|
|
210
210
|
"location": "body",
|
|
211
211
|
"required": false,
|
|
212
|
-
"description": "
|
|
212
|
+
"description": "Objeto {chave: valor} (chave = attribute_key de lionchat_custom_attributes_list, modelo contato). Por tipo: texto; numero como numero; data 'AAAA-MM-DD' (data-hora ISO com fuso; hora 'HH:MM'); lista = EXATAMENTE uma das opcoes cadastradas (outro valor aparece como 'Fora da lista'); sim/nao = true/false. NUNCA grave waha_whatsapp_lid, waha_whatsapp_jid nem waha_whatsapp_chat_id (endereco interno de envio do WhatsApp — escrever quebra a entrega). Ex.: {\"cpf\": \"123.456.789-00\", \"data_nascimento\": \"1990-05-17\", \"plano\": \"Premium\"}."
|
|
213
213
|
},
|
|
214
214
|
{
|
|
215
215
|
"name": "avatar_url",
|
|
@@ -231,6 +231,13 @@
|
|
|
231
231
|
"location": "body",
|
|
232
232
|
"required": false,
|
|
233
233
|
"description": "ID da sessão"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"name": "company_id",
|
|
237
|
+
"type": "integer",
|
|
238
|
+
"location": "body",
|
|
239
|
+
"required": false,
|
|
240
|
+
"description": "Empresa da mesma conta a ligar ao contato (null/vazio tira da empresa; sem a chave nada muda). Escolher a empresa faz additional_attributes.company_name virar o nome dela. Empresa de outra conta = 404. Empresa com 100 contatos = 422 (teto)."
|
|
234
241
|
}
|
|
235
242
|
],
|
|
236
243
|
"returns": "contato criado (com novo ID)",
|
|
@@ -283,7 +290,7 @@
|
|
|
283
290
|
"method": "PATCH",
|
|
284
291
|
"path": "/api/v1/accounts/{account_id}/contacts/{id}",
|
|
285
292
|
"title": "Atualizar Contato",
|
|
286
|
-
"description": "Atualiza um contato. Aceita name, email, phone_number, identifier, custom_attributes, additional_attributes, blocked, avatar/avatar_url. NUNCA sobrescreva phone_number/email ja preenchido sem confirmacao. TELEFONE UNICO POR CONTA (trava no banco desde 01/09/2026): trocar phone_number para um numero que ja e de outro contato da conta = 422 'phone_number has already been taken'.",
|
|
293
|
+
"description": "Atualiza um contato. Aceita name, email, phone_number, identifier, custom_attributes, additional_attributes, blocked, avatar/avatar_url. NUNCA sobrescreva phone_number/email ja preenchido sem confirmacao. TELEFONE UNICO POR CONTA (trava no banco desde 01/09/2026): trocar phone_number para um numero que ja e de outro contato da conta = 422 'phone_number has already been taken'. EMPRESA (2026-09-25): aceita company_id (ver param); o contato devolve company_id. Cargo da pessoa = additional_attributes.job_title.",
|
|
287
294
|
"category": "Contatos",
|
|
288
295
|
"params": [
|
|
289
296
|
{
|
|
@@ -326,7 +333,7 @@
|
|
|
326
333
|
"type": "object",
|
|
327
334
|
"location": "body",
|
|
328
335
|
"required": false,
|
|
329
|
-
"description": "
|
|
336
|
+
"description": "Objeto {chave: valor} (chave = attribute_key de lionchat_custom_attributes_list, modelo contato). Por tipo: texto; numero como numero; data 'AAAA-MM-DD' (data-hora ISO com fuso; hora 'HH:MM'); lista = EXATAMENTE uma das opcoes cadastradas (outro valor aparece como 'Fora da lista'); sim/nao = true/false. NUNCA grave waha_whatsapp_lid, waha_whatsapp_jid nem waha_whatsapp_chat_id (endereco interno de envio do WhatsApp — escrever quebra a entrega). Ex.: {\"cpf\": \"123.456.789-00\", \"data_nascimento\": \"1990-05-17\", \"plano\": \"Premium\"}. O update SOMA: so as chaves enviadas mudam, as demais ficam."
|
|
330
337
|
},
|
|
331
338
|
{
|
|
332
339
|
"name": "avatar",
|
|
@@ -348,6 +355,13 @@
|
|
|
348
355
|
"location": "body",
|
|
349
356
|
"required": false,
|
|
350
357
|
"description": "Bloquear contato"
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"name": "company_id",
|
|
361
|
+
"type": "integer",
|
|
362
|
+
"location": "body",
|
|
363
|
+
"required": false,
|
|
364
|
+
"description": "Empresa da mesma conta a ligar ao contato (null/vazio tira da empresa; sem a chave nada muda). Escolher a empresa faz additional_attributes.company_name virar o nome dela. Empresa de outra conta = 404. Empresa com 100 contatos = 422 (teto)."
|
|
351
365
|
}
|
|
352
366
|
],
|
|
353
367
|
"returns": "contato atualizado",
|
|
@@ -698,7 +712,7 @@
|
|
|
698
712
|
"method": "POST",
|
|
699
713
|
"path": "/api/v1/accounts/{account_id}/contacts/filter",
|
|
700
714
|
"title": "Filtrar Contatos",
|
|
701
|
-
"description": "Filtra contatos com condicoes avancadas (payload de condicoes). 15/pagina.\n\nCHAVES FILTRAVEIS: name, email, identifier (equal_to/not_equal_to/contains/does_not_contain — match parcial case-insensitive); phone_number (+starts_with); country_code, city, company; cpf, cnpj, rg, profession (cadastral; cpf/cnpj/rg aceitam is_present/is_not_present); labels; created_at, last_activity_at (is_greater_than/is_less_than/days_before); blocked (equal_to true/false); QUALQUER outra chave = atributo personalizado do contato.\n\nREGISTROS VINCULADOS (acha o contato pelo que aconteceu com ele): attribute_key 'conversation_search' (conversa vinculada: conversation_status/conversation_labels/conversation_inbox_id), condicoes com custom_attribute_type 'conversation_attribute' (atributo da conversa vinculada) e attribute_key 'kanban_card' (card vinculado: card_funnel_id/card_stage/card_priority/card_status). Combinaveis com E/OU.\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422. [2026-07-25] Nova chave id (id interno do contato, equal_to/not_equal_to) — serve pra exportar/checar UM contato especifico. 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).",
|
|
715
|
+
"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).",
|
|
702
716
|
"category": "Contatos",
|
|
703
717
|
"params": [
|
|
704
718
|
{
|
|
@@ -1433,7 +1447,7 @@
|
|
|
1433
1447
|
"method": "POST",
|
|
1434
1448
|
"path": "/api/v1/accounts/{account_id}/conversations/filter",
|
|
1435
1449
|
"title": "Filtrar Conversas",
|
|
1436
|
-
"description": "Filtra conversas com condicoes avancadas (payload de condicoes, mesmas da tela). Ordenacao fixa last_activity_at DESC, 25/pagina.\n\nCHAVES FILTRAVEIS (attribute_key -> operadores): status, chat_type, priority (equal_to/not_equal_to); assignee_id, inbox_id, team_id, campaign_id, captain_assistant_id, labels (equal_to/not_equal_to/is_present/is_not_present); display_id (equal_to/not_equal_to/contains/does_not_contain); created_at, last_activity_at (is_greater_than/is_less_than/days_before — valor de data); browser_language, conversation_language, referer, mail_subject; card_funnel_stage (conversa POR CARD do Kanban — valor 'funnel:<id>' ou 'stage:<id>:<chave_etapa>'); QUALQUER outra chave = atributo personalizado (use custom_attribute_type na condicao: 'conversation_attribute' ou 'contact_attribute').\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422 'Operador invalido' (ex: labels NAO aceita 'includes' — use equal_to). [2026-07-25] O operador contains em display_id agora funciona de verdade (busca por trecho do numero da conversa; antes dava erro de banco). 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.",
|
|
1450
|
+
"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.",
|
|
1437
1451
|
"category": "Conversas",
|
|
1438
1452
|
"params": [
|
|
1439
1453
|
{
|
|
@@ -1593,7 +1607,7 @@
|
|
|
1593
1607
|
"method": "POST",
|
|
1594
1608
|
"path": "/api/v1/accounts/{account_id}/conversations/{id}/custom_attributes",
|
|
1595
1609
|
"title": "Custom Attributes",
|
|
1596
|
-
"description": "Atualiza atributos customizados da conversa. Obrigatorios: id, custom_attributes.",
|
|
1610
|
+
"description": "Atualiza atributos customizados da conversa. Obrigatorios: id, custom_attributes. O custom_attributes enviado SUBSTITUI o conjunto da conversa (menos captain_*): leia antes com lionchat_conversations_show e reenvie tudo — mandar so a chave nova apaga clique do anuncio, gclid e origem.",
|
|
1597
1611
|
"category": "Conversas",
|
|
1598
1612
|
"params": [
|
|
1599
1613
|
{
|
|
@@ -1608,7 +1622,7 @@
|
|
|
1608
1622
|
"type": "object",
|
|
1609
1623
|
"location": "body",
|
|
1610
1624
|
"required": true,
|
|
1611
|
-
"description": "Objeto com
|
|
1625
|
+
"description": "Objeto {chave: valor} dos atributos da CONVERSA. ATENCAO: SUBSTITUI o conjunto inteiro — so os campos internos da IA (captain_*) sobrevivem; tudo que nao vier no envio e APAGADO, inclusive a origem do lead (utm_*, gclid, ctwa_*, origin_*). Leia antes com lionchat_conversations_show e reenvie TODOS os campos com o alterado. Ex.: {\"utm_source\": \"google\", \"motivo_contato\": \"orcamento\"}. Por tipo: data 'AAAA-MM-DD', numero como numero, lista = uma das opcoes cadastradas, sim/nao true/false."
|
|
1612
1626
|
}
|
|
1613
1627
|
],
|
|
1614
1628
|
"returns": "conversa atualizada",
|
|
@@ -2461,21 +2475,21 @@
|
|
|
2461
2475
|
"type": "object",
|
|
2462
2476
|
"location": "body",
|
|
2463
2477
|
"required": false,
|
|
2464
|
-
"description": "Etapas do kanban. Objeto com uma chave (slug) por etapa: {\"novo_lead\": {\"name\": \"Novo Lead\", \"color\": \"#3B82F6\", \"position\": 1, \"description\": \"opcional\"}}. position define a ordem das colunas."
|
|
2478
|
+
"description": "Etapas do kanban. Objeto com uma chave (slug) por etapa, e CADA ETAPA E UM OBJETO com name TEXTO: {\"novo_lead\": {\"name\": \"Novo Lead\", \"color\": \"#3B82F6\", \"position\": 1, \"description\": \"opcional\"}}. position define a ordem das colunas. Etapa como texto, numero ou null derruba a lista de funis e o Kanban da conta."
|
|
2465
2479
|
},
|
|
2466
2480
|
{
|
|
2467
2481
|
"name": "funnel.settings",
|
|
2468
2482
|
"type": "object",
|
|
2469
2483
|
"location": "body",
|
|
2470
2484
|
"required": false,
|
|
2471
|
-
"description": "Objeto de configuracoes do funil. Chaves: goals[], agents[] e automations[] (automacoes do funil). Cada automacao: {id, enabled, trigger_type: 'card_created'|'stage_moved'|'status_change', trigger_value (id da etapa p/ stage_moved; status p/ status_change; 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)."
|
|
2485
|
+
"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; status p/ status_change; 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)."
|
|
2472
2486
|
},
|
|
2473
2487
|
{
|
|
2474
2488
|
"name": "funnel.global_custom_attributes",
|
|
2475
2489
|
"type": "array",
|
|
2476
2490
|
"location": "body",
|
|
2477
2491
|
"required": false,
|
|
2478
|
-
"description": "
|
|
2492
|
+
"description": "LISTA de objetos [{name, type, is_list, list_values:[]}]. Ex.: [{\"name\": \"Origem\", \"type\": \"string\", \"is_list\": true, \"list_values\": [\"Google\", \"Meta\"]}]. ATENCAO: este campo do FUNIL nao aparece em tela nenhuma. Os campos da aba Campos do card sao os da CONTA: grave-os com lionchat_kanban_config_update (kanban_config.global_custom_attributes)."
|
|
2479
2493
|
}
|
|
2480
2494
|
],
|
|
2481
2495
|
"returns": "funil criado (com novo ID)",
|
|
@@ -2653,14 +2667,14 @@
|
|
|
2653
2667
|
"type": "object",
|
|
2654
2668
|
"location": "body",
|
|
2655
2669
|
"required": false,
|
|
2656
|
-
"description": "Etapas do kanban. Objeto com uma chave (slug) por etapa: {\"novo_lead\": {\"name\": \"Novo Lead\", \"color\": \"#3B82F6\", \"position\": 1, \"description\": \"opcional\"}}. position define a ordem das colunas."
|
|
2670
|
+
"description": "Etapas do kanban. Objeto com uma chave (slug) por etapa, e CADA ETAPA E UM OBJETO com name TEXTO: {\"novo_lead\": {\"name\": \"Novo Lead\", \"color\": \"#3B82F6\", \"position\": 1, \"description\": \"opcional\"}}. position define a ordem das colunas. Etapa como texto, numero ou null derruba a lista de funis e o Kanban da conta. No update o objeto SUBSTITUI as etapas: etapa que nao vier e REMOVIDA (recusado com 422 STAGE_HAS_ITEMS se tiver cards) — leia com lionchat_funnels_show e reenvie todas."
|
|
2657
2671
|
},
|
|
2658
2672
|
{
|
|
2659
2673
|
"name": "funnel.settings",
|
|
2660
2674
|
"type": "object",
|
|
2661
2675
|
"location": "body",
|
|
2662
2676
|
"required": false,
|
|
2663
|
-
"description": "Objeto de configuracoes do funil. Chaves: goals[], agents[] e automations[] (automacoes do funil). 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)."
|
|
2677
|
+
"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)."
|
|
2664
2678
|
}
|
|
2665
2679
|
],
|
|
2666
2680
|
"returns": "funil atualizado Inclui resolved_agents: [{id, name, avatar_url, via: 'agent'|'team'}] — quem efetivamente participa do funil (2026-07-21).",
|
|
@@ -3176,14 +3190,14 @@
|
|
|
3176
3190
|
"type": "array",
|
|
3177
3191
|
"location": "body",
|
|
3178
3192
|
"required": false,
|
|
3179
|
-
"description": "
|
|
3193
|
+
"description": "LISTA de NUMEROS (ids de lionchat_agents_list). Ex.: [5, 12]. O sistema completa nome, e-mail e foto. Objetos {id, ...} sao IGNORADOS em silencio (a lista nao muda)."
|
|
3180
3194
|
},
|
|
3181
3195
|
{
|
|
3182
3196
|
"name": "kanban_item.custom_attributes",
|
|
3183
3197
|
"type": "object",
|
|
3184
3198
|
"location": "body",
|
|
3185
3199
|
"required": false,
|
|
3186
|
-
"description": "
|
|
3200
|
+
"description": "Coluna propria do card, objeto {chave: valor}. NAO aparece na aba Campos, no filtro do quadro nem na busca — para campo visivel use kanban_item.item_details.custom_attributes (LISTA [{name, type, value}], ver lionchat_kanban_items_update). Enviada, SUBSTITUI o objeto inteiro."
|
|
3187
3201
|
},
|
|
3188
3202
|
{
|
|
3189
3203
|
"name": "kanban_item.timer_started_at",
|
|
@@ -3274,21 +3288,21 @@
|
|
|
3274
3288
|
"type": "object",
|
|
3275
3289
|
"location": "body",
|
|
3276
3290
|
"required": false,
|
|
3277
|
-
"description": "
|
|
3291
|
+
"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\"}."
|
|
3278
3292
|
},
|
|
3279
3293
|
{
|
|
3280
3294
|
"name": "kanban_item.assigned_agents",
|
|
3281
3295
|
"type": "array",
|
|
3282
3296
|
"location": "body",
|
|
3283
3297
|
"required": false,
|
|
3284
|
-
"description": "
|
|
3298
|
+
"description": "LISTA de NUMEROS (ids de lionchat_agents_list). Ex.: [5, 12]. O sistema completa nome, e-mail e foto. Objetos {id, ...} sao IGNORADOS em silencio (a lista nao muda). SUBSTITUI a lista inteira de responsaveis: mande todos que devem ficar."
|
|
3285
3299
|
},
|
|
3286
3300
|
{
|
|
3287
3301
|
"name": "kanban_item.custom_attributes",
|
|
3288
3302
|
"type": "object",
|
|
3289
3303
|
"location": "body",
|
|
3290
3304
|
"required": false,
|
|
3291
|
-
"description": "
|
|
3305
|
+
"description": "Coluna propria do card, objeto {chave: valor}. NAO aparece na aba Campos, no filtro do quadro nem na busca — para campo visivel use kanban_item.item_details.custom_attributes (LISTA [{name, type, value}], ver lionchat_kanban_items_update). Enviada, SUBSTITUI o objeto inteiro."
|
|
3292
3306
|
},
|
|
3293
3307
|
{
|
|
3294
3308
|
"name": "kanban_item.timer_started_at",
|
|
@@ -3316,7 +3330,8 @@
|
|
|
3316
3330
|
"common_use_cases": [
|
|
3317
3331
|
"Edição parcial de item Kanban",
|
|
3318
3332
|
"Alteração de status/estado",
|
|
3319
|
-
"Atualização em massa via automação"
|
|
3333
|
+
"Atualização em massa via automação",
|
|
3334
|
+
"Registrar uma venda fechada no mes passado: status \"won\" + retroativo_em \"AAAA-MM-DD\" (o relatorio conta no mes escolhido)"
|
|
3320
3335
|
],
|
|
3321
3336
|
"related_tools": [
|
|
3322
3337
|
"lionchat_kanban_items_list",
|
|
@@ -3984,7 +3999,7 @@
|
|
|
3984
3999
|
"method": "POST",
|
|
3985
4000
|
"path": "/api/v1/accounts/{account_id}/kanban_items/import",
|
|
3986
4001
|
"title": "Importar Items",
|
|
3987
|
-
"description": "Importa cards em massa (job async). REGRA DO DDI (18/08): telefone sem codigo do pais e considerado invalido e o card e criado SEM contato e SEM conversa, EM SILENCIO (diferente do import de contatos, que da erro na linha). Oriente a planilha a vir com DDI.",
|
|
4002
|
+
"description": "Importa cards em massa (job async). REGRA DO DDI (18/08): telefone sem codigo do pais e considerado invalido e o card e criado SEM contato e SEM conversa, EM SILENCIO (diferente do import de contatos, que da erro na linha). Oriente a planilha a vir com DDI. PARAMETROS CONFERIDOS (18/09/2026): o servidor le `mappings` (plural) e exige `inbox_id` — o antigo `mapping` era ignorado. Opcionais da API (fora deste conector): default_stage_id, stage_mappings (texto JSON {\"<valor da planilha>\": \"<id da etapa>\"}), auto_create_stages ('true'), agent_mode ('mapping' | 'round_robin'), agent_mappings (texto JSON {\"<valor da planilha>\": <id do agente>}). VIA MCP NAO RODA: exige upload do arquivo — oriente o usuario a importar pela tela do Kanban.",
|
|
3988
4003
|
"category": "Itens",
|
|
3989
4004
|
"params": [
|
|
3990
4005
|
{
|
|
@@ -4002,11 +4017,18 @@
|
|
|
4002
4017
|
"description": "ID do funil"
|
|
4003
4018
|
},
|
|
4004
4019
|
{
|
|
4005
|
-
"name": "
|
|
4006
|
-
"type": "
|
|
4020
|
+
"name": "inbox_id",
|
|
4021
|
+
"type": "integer",
|
|
4022
|
+
"location": "body",
|
|
4023
|
+
"required": true,
|
|
4024
|
+
"description": "OBRIGATORIO — caixa de entrada (desta conta) onde nascem o contato e a conversa de cada card. Sem ela: 400."
|
|
4025
|
+
},
|
|
4026
|
+
{
|
|
4027
|
+
"name": "mappings",
|
|
4028
|
+
"type": "string",
|
|
4007
4029
|
"location": "body",
|
|
4008
4030
|
"required": true,
|
|
4009
|
-
"description": "
|
|
4031
|
+
"description": "TEXTO JSON (o envio e multipart por causa do arquivo; objeto solto nao e lido) no formato {\"<coluna da planilha>\": \"<destino>\"}. Destinos aceitos: item_details.title, item_details.description, item_details.customer_name, item_details.customer_email, item_details.customer_phone, funnel_stage (nome ou id da etapa) e assigned_agents (so vale junto com agent_mode 'mapping' + agent_mappings). Ex.: '{\"Nome\":\"item_details.title\",\"Telefone\":\"item_details.customer_phone\",\"Etapa\":\"funnel_stage\"}'. Coluna com destino fora da lista e ignorada em silencio."
|
|
4010
4032
|
}
|
|
4011
4033
|
],
|
|
4012
4034
|
"returns": "status do import (assincrono)",
|
|
@@ -4333,14 +4355,14 @@
|
|
|
4333
4355
|
"type": "array",
|
|
4334
4356
|
"location": "body",
|
|
4335
4357
|
"required": false,
|
|
4336
|
-
"description": "
|
|
4358
|
+
"description": "LISTA de TEXTOS — cada item uma frase: [\"Responda em ate 3 frases\", \"Chame o cliente pelo primeiro nome\"]. Objeto ou lista de objetos NAO serve (o texto chega errado ao prompt)."
|
|
4337
4359
|
},
|
|
4338
4360
|
{
|
|
4339
4361
|
"name": "guardrails",
|
|
4340
4362
|
"type": "array",
|
|
4341
4363
|
"location": "body",
|
|
4342
4364
|
"required": false,
|
|
4343
|
-
"description": "
|
|
4365
|
+
"description": "LISTA de TEXTOS (proibicoes) — cada item uma frase: [\"Nunca informe precos\", \"Nao prometa prazo de entrega\"]. Objeto ou lista de objetos NAO serve (o texto chega errado ao prompt)."
|
|
4344
4366
|
},
|
|
4345
4367
|
{
|
|
4346
4368
|
"name": "config.model",
|
|
@@ -4558,14 +4580,14 @@
|
|
|
4558
4580
|
"type": "array",
|
|
4559
4581
|
"location": "body",
|
|
4560
4582
|
"required": false,
|
|
4561
|
-
"description": "
|
|
4583
|
+
"description": "LISTA de TEXTOS — cada item uma frase: [\"Responda em ate 3 frases\", \"Chame o cliente pelo primeiro nome\"]. Objeto ou lista de objetos NAO serve (o texto chega errado ao prompt). No update SUBSTITUI a lista inteira: leia com lionchat_captain_assistants_show e reenvie todas."
|
|
4562
4584
|
},
|
|
4563
4585
|
{
|
|
4564
4586
|
"name": "guardrails",
|
|
4565
4587
|
"type": "array",
|
|
4566
4588
|
"location": "body",
|
|
4567
4589
|
"required": false,
|
|
4568
|
-
"description": "
|
|
4590
|
+
"description": "LISTA de TEXTOS (proibicoes) — cada item uma frase: [\"Nunca informe precos\", \"Nao prometa prazo de entrega\"]. Objeto ou lista de objetos NAO serve (o texto chega errado ao prompt). No update SUBSTITUI a lista inteira: leia com lionchat_captain_assistants_show e reenvie todas."
|
|
4569
4591
|
},
|
|
4570
4592
|
{
|
|
4571
4593
|
"name": "config.model",
|
|
@@ -4706,6 +4728,20 @@
|
|
|
4706
4728
|
"location": "body",
|
|
4707
4729
|
"required": false,
|
|
4708
4730
|
"description": "Condicoes para a IA NAO fazer follow-up (ate 3). Array de objetos, ex.: {type, operator, attribute, value, labels:[]}."
|
|
4731
|
+
},
|
|
4732
|
+
{
|
|
4733
|
+
"name": "config.voice_provider",
|
|
4734
|
+
"type": "string",
|
|
4735
|
+
"location": "body",
|
|
4736
|
+
"required": false,
|
|
4737
|
+
"description": "Fornecedor da voz do AUDIO que a IA manda no WhatsApp: 'openai' ou 'elevenlabs'. A ligacao por IA NAO usa mais esta chave — ela mora no agente de ligacao (lionchat_captain_call_agents_update)."
|
|
4738
|
+
},
|
|
4739
|
+
{
|
|
4740
|
+
"name": "config.voice_id",
|
|
4741
|
+
"type": "string",
|
|
4742
|
+
"location": "body",
|
|
4743
|
+
"required": false,
|
|
4744
|
+
"description": "Voz do AUDIO que a IA manda no WhatsApp (catalogo em lionchat_captain_voices_list, sem engine). A voz da LIGACAO mora no agente de ligacao."
|
|
4709
4745
|
}
|
|
4710
4746
|
],
|
|
4711
4747
|
"returns": "assistente AI atualizado",
|
|
@@ -6800,7 +6836,7 @@
|
|
|
6800
6836
|
"type": "string",
|
|
6801
6837
|
"location": "body",
|
|
6802
6838
|
"required": false,
|
|
6803
|
-
"description": "
|
|
6839
|
+
"description": "none | bearer | basic | api_key (formato de auth_config em cada um: ver auth_config)"
|
|
6804
6840
|
},
|
|
6805
6841
|
{
|
|
6806
6842
|
"name": "enabled",
|
|
@@ -6814,14 +6850,14 @@
|
|
|
6814
6850
|
"type": "object",
|
|
6815
6851
|
"location": "body",
|
|
6816
6852
|
"required": false,
|
|
6817
|
-
"description": "
|
|
6853
|
+
"description": "Credenciais conforme auth_type, objeto: bearer {\"token\": \"...\"}; basic {\"username\": \"...\", \"password\": \"...\"}; api_key {\"name\": \"X-Api-Key\", \"key\": \"...\", \"location\": \"header\"} — location PRECISA ser 'header' (sem ele, ou com outro valor, a chave NAO e enviada); none = {}. token/password/key aceitam variavel {{ account.custom_attribute.CHAVE }}."
|
|
6818
6854
|
},
|
|
6819
6855
|
{
|
|
6820
6856
|
"name": "param_schema",
|
|
6821
6857
|
"type": "array",
|
|
6822
6858
|
"location": "body",
|
|
6823
6859
|
"required": false,
|
|
6824
|
-
"description": "
|
|
6860
|
+
"description": "LISTA de objetos, cada item {name, type, description, required}: type = string | integer | number | boolean (outro = 422); description OBRIGATORIA (sem ela = 422 — e o que a IA le para preencher o parametro); required true/false. Ex.: [{\"name\": \"cpf\", \"type\": \"string\", \"description\": \"CPF do cliente, so numeros\", \"required\": true}]."
|
|
6825
6861
|
}
|
|
6826
6862
|
],
|
|
6827
6863
|
"returns": "assistente AI criado (com novo ID)",
|
|
@@ -6927,7 +6963,7 @@
|
|
|
6927
6963
|
"type": "string",
|
|
6928
6964
|
"location": "body",
|
|
6929
6965
|
"required": false,
|
|
6930
|
-
"description": "
|
|
6966
|
+
"description": "none | bearer | basic | api_key (formato de auth_config em cada um: ver auth_config)"
|
|
6931
6967
|
},
|
|
6932
6968
|
{
|
|
6933
6969
|
"name": "enabled",
|
|
@@ -6941,14 +6977,14 @@
|
|
|
6941
6977
|
"type": "object",
|
|
6942
6978
|
"location": "body",
|
|
6943
6979
|
"required": false,
|
|
6944
|
-
"description": "
|
|
6980
|
+
"description": "Credenciais conforme auth_type, objeto: bearer {\"token\": \"...\"}; basic {\"username\": \"...\", \"password\": \"...\"}; api_key {\"name\": \"X-Api-Key\", \"key\": \"...\", \"location\": \"header\"} — location PRECISA ser 'header' (sem ele, ou com outro valor, a chave NAO e enviada); none = {}. token/password/key aceitam variavel {{ account.custom_attribute.CHAVE }}. SUBSTITUI o objeto inteiro: mande tudo de novo."
|
|
6945
6981
|
},
|
|
6946
6982
|
{
|
|
6947
6983
|
"name": "param_schema",
|
|
6948
6984
|
"type": "array",
|
|
6949
6985
|
"location": "body",
|
|
6950
6986
|
"required": false,
|
|
6951
|
-
"description": "
|
|
6987
|
+
"description": "LISTA de objetos, cada item {name, type, description, required}: type = string | integer | number | boolean (outro = 422); description OBRIGATORIA (sem ela = 422 — e o que a IA le para preencher o parametro); required true/false. Ex.: [{\"name\": \"cpf\", \"type\": \"string\", \"description\": \"CPF do cliente, so numeros\", \"required\": true}]. SUBSTITUI a lista inteira."
|
|
6952
6988
|
}
|
|
6953
6989
|
],
|
|
6954
6990
|
"returns": "assistente AI atualizado",
|
|
@@ -7884,7 +7920,7 @@
|
|
|
7884
7920
|
"type": "array",
|
|
7885
7921
|
"location": "body",
|
|
7886
7922
|
"required": true,
|
|
7887
|
-
"description": "
|
|
7923
|
+
"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')."
|
|
7888
7924
|
}
|
|
7889
7925
|
],
|
|
7890
7926
|
"returns": "macro criado (com novo ID)",
|
|
@@ -7946,7 +7982,7 @@
|
|
|
7946
7982
|
"type": "array",
|
|
7947
7983
|
"location": "body",
|
|
7948
7984
|
"required": false,
|
|
7949
|
-
"description": "
|
|
7985
|
+
"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."
|
|
7950
7986
|
},
|
|
7951
7987
|
{
|
|
7952
7988
|
"name": "visibility",
|
|
@@ -9730,7 +9766,7 @@
|
|
|
9730
9766
|
"method": "POST",
|
|
9731
9767
|
"path": "/api/v1/accounts/{account_id}/flows",
|
|
9732
9768
|
"title": "Criar Flow",
|
|
9733
|
-
"description": "Cria um flow (FlowBuilder) na conta. Requer Admin. flow_data segue formato Vue Flow {nodes:[], edges:[]}. NODE SCHEMA — start: {label}. send_message: {label, messageItems:[{id, type:'text', content}]} handles: success/no_response/error. wait_response: {label, waitTime, waitUnit:'minutes'|'seconds', validation:'any'|'options'|'regex', acceptedOptions:['1','2'] (se options), regexPattern (se regex), invalidMessage, maxRetries:3, saveTo:'variable'|'contact_name'|'contact_email'|'contact_phone'|'contact_attr'|'conversation_attr'|'', saveVariable, saveAttrKey} — quando validation='options' os handles ficam 'option_{val}' + 'timeout'; senão 'success' + 'timeout' — NUNCA precisa de condition node depois. condition: {label, conditions:[{id, label, field, operator, value}]} handles = 'cond_0','cond_1',... (INDICE no array, NAO o id) + 'default'. action: {label, items:[{key, config:{...}}]} keys comuns assign_team({team_id}), assign_agent({agent_id}), add_label({labels:['slug',...]}), remove_label({labels}), change_status({status}), change_priority({priority}), mute_conversation({}), add_private_note({content}), create_kanban_item({funnel_id, funnel_stage,...}), move_kanban_stage({funnel_id, funnel_stage}), deactivate_flow({}), assign_captain({assistant_id}). api: {label, method, url, headers:[{key,value}], body, apiResponseVar}. set_variable: {label, variables:[{name, value}]}. wait: {label, waitTime, waitUnit}. EDGE SCHEMA: {id, source, target, sourceHandle (opcional, OBRIGATORIO casar com handle exposto pelo node source), type:'deletable', animated:true}. ERROS COMUNS QUE DEVEM SER EVITADOS: (1) action usa items[].config NAO items[].params; (2) send_message usa messageItems NAO items; (3) wait_response com validation='options' NAO precisa de condition node — use sourceHandle='option_X' diretamente; (4) sourceHandle inventado tipo 'c1','c2' nao funciona — sempre usar o handle real; (5) inbox_ids precisa vir aninhado em {flow:{inbox_ids:[]}} no PUT bruto, mas no MCP basta inbox_ids no nivel raiz. Cria novo flow. Obrigatórios: name, channel_type. Valida unicidade quando aplicável. Retorna o flow criado com ID atribuído. POSITIONING (CRITICO): cada node DEVE ter position:{x,y}. Sem isso, todos empilham no canvas no (0,0). Regra basica de layout: start em {x:50,y:300}, espaco horizontal +320 entre nodes sequenciais, ramificacoes em +/-150 vertical. ANTES DE GERAR JSON consulte o resource lionchat://docs/flowbuilder-design-guide (schema completo de cada tipo de node, handles expostos, erros comuns, checklist) e lionchat://docs/flowbuilder-patterns (10 templates prontos pra adaptar). BRAINSTORMING: se faltou info critica (canal, gatilho, conteudo), use o prompt create_flow_brainstorm como banco de perguntas sugeridas — pergunte SO o que falta, sem checklist forcado. APOS GERAR: rode o checklist da secao 6 do design guide antes de submeter (1 node start, todo node com id unico + position + data, todo edge com sourceHandle valido). NUNCA invente sourceHandle (no condition use cond_0/cond_1/default, no wait_response options use option_X, no AI intent use intent_<opcao>). IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. conversation_mode: 'individual' (default) | 'group'. Sticky note (type 'note'): data usa title+body+color(yellow|teal|blue|violet|pink|orange|slate)+width+height — NUNCA 'content'. ORGANIZAÇÃO: preencha tags ao criar (reutilizando as tags já existentes nos flows da conta — veja flows_list) pra manter a lista organizada. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference. TIPO DE FLUXO (17/09/2026): o parametro flow_type aceita 'conversation' (padrao) ou 'action' (Fluxo de Acoes). O de ACOES nao fica ligado a caixa nenhuma, roda em QUALQUER conversa de QUALQUER caixa e SO executa acoes — NAO pode ter os blocos send_message, wait_response nem update_group (a validacao recusa o save inteiro), nao aceita inbox_ids e ignora conversation_mode. Use pra regra que vale na empresa toda e nao depende da caixa (ex.: etiqueta 'urgente' -> atribui equipe de suporte). Se precisa FALAR com a pessoa, o tipo e 'conversation'. Pra ferramenta da IA continue usando lionchat_flow_tools_create.",
|
|
9769
|
+
"description": "Cria um flow (FlowBuilder) na conta. Requer Admin. flow_data segue formato Vue Flow {nodes:[], edges:[]}. NODE SCHEMA — start: {label, items:[...]} — os GATILHOS moram em data.items (NUNCA data.triggers), cada item um OBJETO {key, config}. Ex.: {key:'message_received', config:{keywords:['oi','orcamento'], match_type:'contains'}}. config.keywords e LISTA de textos (texto solto quebra o despacho de TODA mensagem da caixa); listas de id vao como LISTA DE TEXTOS — team_ids:['3'], agent_ids:['70'], funnel_ids:['31'] (numero puro [3] nunca casa); label_names:['vip']. nodes e edges sao LISTAS de objetos; exit_conditions (irmao de nodes, no flow_data) e LISTA de {type, value}. send_message: {label, messageItems:[{id, type:'text', content}]} handles: success/no_response/error. wait_response: {label, waitTime, waitUnit:'minutes'|'seconds', validation:'any'|'options'|'regex', acceptedOptions:['1','2'] (se options), regexPattern (se regex), invalidMessage, maxRetries:3, saveTo:'variable'|'contact_name'|'contact_email'|'contact_phone'|'contact_attr'|'conversation_attr'|'', saveVariable, saveAttrKey} — quando validation='options' os handles ficam 'option_{val}' + 'timeout'; senão 'success' + 'timeout' — NUNCA precisa de condition node depois. condition: {label, conditions:[{id, label, field, operator, value}]} handles = 'cond_0','cond_1',... (INDICE no array, NAO o id) + 'default'. action: {label, items:[{key, config:{...}}]} keys comuns assign_team({team_id}), assign_agent({agent_id}), add_label({labels:['slug',...]}), remove_label({labels}), change_status({status}), change_priority({priority}), mute_conversation({}), add_private_note({content}), create_kanban_item({funnel_id, funnel_stage,...}), move_kanban_stage({funnel_id, funnel_stage}), deactivate_flow({}), assign_captain({assistant_id}). api: {label, method, url, headers:[{key,value}], body, apiResponseVar}. set_variable: {label, variables:[{name, value}]}. wait: {label, waitTime, waitUnit}. EDGE SCHEMA: {id, source, target, sourceHandle (opcional, OBRIGATORIO casar com handle exposto pelo node source), type:'deletable', animated:true}. ERROS COMUNS QUE DEVEM SER EVITADOS: (1) action usa items[].config NAO items[].params; (2) send_message usa messageItems NAO items; (3) wait_response com validation='options' NAO precisa de condition node — use sourceHandle='option_X' diretamente; (4) sourceHandle inventado tipo 'c1','c2' nao funciona — sempre usar o handle real; (5) inbox_ids precisa vir aninhado em {flow:{inbox_ids:[]}} no PUT bruto, mas no MCP basta inbox_ids no nivel raiz. Cria novo flow. Obrigatórios: name, channel_type. Valida unicidade quando aplicável. Retorna o flow criado com ID atribuído. POSITIONING (CRITICO): cada node DEVE ter position:{x,y}. Sem isso, todos empilham no canvas no (0,0). Regra basica de layout: start em {x:50,y:300}, espaco horizontal +320 entre nodes sequenciais, ramificacoes em +/-150 vertical. ANTES DE GERAR JSON consulte o resource lionchat://docs/flowbuilder-design-guide (schema completo de cada tipo de node, handles expostos, erros comuns, checklist) e lionchat://docs/flowbuilder-patterns (10 templates prontos pra adaptar). BRAINSTORMING: se faltou info critica (canal, gatilho, conteudo), use o prompt create_flow_brainstorm como banco de perguntas sugeridas — pergunte SO o que falta, sem checklist forcado. APOS GERAR: rode o checklist da secao 6 do design guide antes de submeter (1 node start, todo node com id unico + position + data, todo edge com sourceHandle valido). NUNCA invente sourceHandle (no condition use cond_0/cond_1/default, no wait_response options use option_X, no AI intent use intent_<opcao>). IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. conversation_mode: 'individual' (default) | 'group'. Sticky note (type 'note'): data usa title+body+color(yellow|teal|blue|violet|pink|orange|slate)+width+height — NUNCA 'content'. ORGANIZAÇÃO: preencha tags ao criar (reutilizando as tags já existentes nos flows da conta — veja flows_list) pra manter a lista organizada. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference. TIPO DE FLUXO (17/09/2026): o parametro flow_type aceita 'conversation' (padrao) ou 'action' (Fluxo de Acoes). O de ACOES nao fica ligado a caixa nenhuma, roda em QUALQUER conversa de QUALQUER caixa e SO executa acoes — NAO pode ter os blocos send_message, wait_response nem update_group (a validacao recusa o save inteiro), nao aceita inbox_ids e ignora conversation_mode. Use pra regra que vale na empresa toda e nao depende da caixa (ex.: etiqueta 'urgente' -> atribui equipe de suporte). Se precisa FALAR com a pessoa, o tipo e 'conversation'. Pra ferramenta da IA continue usando lionchat_flow_tools_create.",
|
|
9734
9770
|
"category": "Flows",
|
|
9735
9771
|
"params": [
|
|
9736
9772
|
{
|
|
@@ -9773,7 +9809,7 @@
|
|
|
9773
9809
|
"type": "object",
|
|
9774
9810
|
"location": "body",
|
|
9775
9811
|
"required": false,
|
|
9776
|
-
"description": "
|
|
9812
|
+
"description": "Objeto {nodes:[...], edges:[...], exit_conditions:[...]} em formato Vue Flow — nodes e edges sao LISTAS de objetos. Bloco Inicio: data.items = [{key, config}] (ex.: {\"key\": \"message_received\", \"config\": {\"keywords\": [\"oi\"], \"match_type\": \"contains\"}}); keywords e team_ids/agent_ids/funnel_ids sao LISTAS (ids como texto: [\"3\"]). exit_conditions = LISTA de {type, value}. Cada node tem 'data' com formato proprio (ver descricao da ferramenta e lionchat_flows_schema_reference). Edges precisam de sourceHandle real (ex: 'option_1', 'success', 'timeout', 'no_response')."
|
|
9777
9813
|
},
|
|
9778
9814
|
{
|
|
9779
9815
|
"name": "tags",
|
|
@@ -9832,7 +9868,7 @@
|
|
|
9832
9868
|
"method": "PUT",
|
|
9833
9869
|
"path": "/api/v1/accounts/{account_id}/flows/{id}",
|
|
9834
9870
|
"title": "Atualizar Flow",
|
|
9835
|
-
"description": "Atualiza nome, descricao, caixas de entrada ou dados dos blocos. Mesmo schema de flow_data do tool lionchat_flows_create — consulte a descricao daquele tool para o schema completo dos nodes (start, send_message, wait_response, condition, action, api, set_variable) e dos edges. RECAP RAPIDO: action items[].config (nao params); send_message messageItems (nao items); wait_response validation='options' gera handles 'option_X' (dispensa condition node); edges sourceHandle DEVE casar com handle real do node source. Atualiza campos do flow existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, description, inbox_ids, flow_data. IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference.",
|
|
9871
|
+
"description": "Atualiza nome, descricao, caixas de entrada ou dados dos blocos. Mesmo schema de flow_data do tool lionchat_flows_create — consulte a descricao daquele tool para o schema completo dos nodes (start, send_message, wait_response, condition, action, api, set_variable) e dos edges. RECAP RAPIDO: start: {label, items:[...]} — os GATILHOS moram em data.items (NUNCA data.triggers), cada item um OBJETO {key, config}. Ex.: {key:'message_received', config:{keywords:['oi','orcamento'], match_type:'contains'}}. config.keywords e LISTA de textos (texto solto quebra o despacho de TODA mensagem da caixa); listas de id vao como LISTA DE TEXTOS — team_ids:['3'], agent_ids:['70'], funnel_ids:['31'] (numero puro [3] nunca casa); label_names:['vip']. nodes e edges sao LISTAS de objetos; exit_conditions (irmao de nodes, no flow_data) e LISTA de {type, value}. flow_data enviado SUBSTITUI o desenho inteiro (nodes + edges + exit_conditions): leia com lionchat_flows_show e reenvie COMPLETO. action items[].config (nao params); send_message messageItems (nao items); wait_response validation='options' gera handles 'option_X' (dispensa condition node); edges sourceHandle DEVE casar com handle real do node source. Atualiza campos do flow existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: name, description, inbox_ids, flow_data. IMPORTANTE: chame lionchat_flows_schema_reference antes pra ver o schema COMPLETO e atualizado (nodes end/ai/note, etiqueta conversa vs contato, webhook embutido, timeout, anti-loop). Pra ferramentas da IA (ai_tool) use lionchat_flow_tools_create. STICKY NOTE: o texto da nota (type note) vai em data.title + data.body — content/label/text deixam a nota EM BRANCO na tela; nunca crie nota sem body. LAYOUT: espace os nodes (colunas a >=320px no x, ramos a >=180px no y; notas AO LADO/ACIMA do trecho, nunca sobre nodes ou linhas). REGRAS 18/08: acao start_flow com flow_id do PROPRIO flow e aceita no save mas IGNORADA EM SILENCIO na execucao (o fluxo para ali) — aponte sempre pra OUTRO flow. Condicoes: preencha operator E field juntos (tabela dos pares no resource flowbuilder-patterns), senao a regra roda certa e aparece errada na tela do cliente. NOVIDADES 01/09/2026 no schema (lionchat_flows_schema_reference): acao send_conversion (Meta/Google Ads/GA4 de dentro do fluxo) e condicao por origem/campanha (attr_config de conversa com origin_kind=paid_ad etc.). NOVIDADES 02/09/2026: (1) send_conversion ganhou event_names — UM evento por destino ({meta, google_ads, ga4}); event_name virou reserva (grave os dois); Google Ads so aceita nome do conversion_action_map. (2) preset 'Origem do lead' (attrScope 'lead_origin', attr_key origin_platform; valores: plataforma ou 'custom:<slug>'). (3) REGRA DE VALOR na condicao de atributo: equal/not_equal/contains/not_contains gravam em values:[...] (LISTA) com value:'' — value solo abre VAZIO na tela do cliente. Ver lionchat_flows_schema_reference.",
|
|
9836
9872
|
"category": "Flows",
|
|
9837
9873
|
"params": [
|
|
9838
9874
|
{
|
|
@@ -9868,7 +9904,7 @@
|
|
|
9868
9904
|
"type": "object",
|
|
9869
9905
|
"location": "body",
|
|
9870
9906
|
"required": false,
|
|
9871
|
-
"description": "
|
|
9907
|
+
"description": "Objeto {nodes:[...], edges:[...], exit_conditions:[...]} em formato Vue Flow — nodes e edges sao LISTAS de objetos. Bloco Inicio: data.items = [{key, config}] (ex.: {\"key\": \"message_received\", \"config\": {\"keywords\": [\"oi\"], \"match_type\": \"contains\"}}); keywords e team_ids/agent_ids/funnel_ids sao LISTAS (ids como texto: [\"3\"]). exit_conditions = LISTA de {type, value}. Cada node tem 'data' com formato proprio (ver descricao da ferramenta e lionchat_flows_schema_reference). Edges precisam de sourceHandle real (ex: 'option_1', 'success', 'timeout', 'no_response'). SUBSTITUI o desenho inteiro: leia com lionchat_flows_show e reenvie nodes + edges + exit_conditions completos."
|
|
9872
9908
|
},
|
|
9873
9909
|
{
|
|
9874
9910
|
"name": "tags",
|
|
@@ -10046,7 +10082,7 @@
|
|
|
10046
10082
|
"type": "array",
|
|
10047
10083
|
"location": "body",
|
|
10048
10084
|
"required": false,
|
|
10049
|
-
"description": "
|
|
10085
|
+
"description": "LISTA de janelas, cada item um OBJETO {day_of_week, start_time, end_time}: day_of_week inteiro 0..6 (0 = domingo, 1 = segunda ... 6 = sabado); start_time/end_time 'HH:MM' 24h, inicio multiplo de 5 min e antes do fim; varios blocos no mesmo dia pode, sem sobrepor. Ex.: [{\"day_of_week\": 1, \"start_time\": \"09:00\", \"end_time\": \"12:00\"}, {\"day_of_week\": 1, \"start_time\": \"14:00\", \"end_time\": \"18:00\"}]. Para EDITAR ou REMOVER uma janela existente mande o id dela (e _destroy: true para remover) — item sem id CRIA outra."
|
|
10050
10086
|
},
|
|
10051
10087
|
{
|
|
10052
10088
|
"name": "slug",
|
|
@@ -10598,7 +10634,7 @@
|
|
|
10598
10634
|
"type": "array",
|
|
10599
10635
|
"location": "body",
|
|
10600
10636
|
"required": true,
|
|
10601
|
-
"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'."
|
|
10637
|
+
"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')."
|
|
10602
10638
|
},
|
|
10603
10639
|
{
|
|
10604
10640
|
"name": "active",
|
|
@@ -10696,7 +10732,7 @@
|
|
|
10696
10732
|
"type": "array",
|
|
10697
10733
|
"location": "body",
|
|
10698
10734
|
"required": false,
|
|
10699
|
-
"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'."
|
|
10735
|
+
"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')."
|
|
10700
10736
|
}
|
|
10701
10737
|
],
|
|
10702
10738
|
"returns": "regra de automação atualizado",
|
|
@@ -11207,7 +11243,7 @@
|
|
|
11207
11243
|
"type": "object",
|
|
11208
11244
|
"location": "body",
|
|
11209
11245
|
"required": true,
|
|
11210
|
-
"description": "Wrapper
|
|
11246
|
+
"description": "Wrapper {name, filter_type, query}. filter_type: 'conversation' ou 'contact'. query = {\"payload\": [{\"attribute_key\": \"status\", \"filter_operator\": \"equal_to\", \"values\": [\"open\"], \"query_operator\": \"and\"}, {\"attribute_key\": \"assignee_id\", \"filter_operator\": \"equal_to\", \"values\": [5], \"query_operator\": null}], \"sort_by\": \"...\"} — payload e LISTA de condicoes (mesmo formato de lionchat_conversations_filter / lionchat_contacts_filter); values e SEMPRE lista; query_operator liga a condicao com a SEGUINTE e a ULTIMA vai null. sort_by e opcional (so pasta de conversa)."
|
|
11211
11247
|
}
|
|
11212
11248
|
],
|
|
11213
11249
|
"returns": "filtro personalizado criado (com novo ID)",
|
|
@@ -11271,7 +11307,7 @@
|
|
|
11271
11307
|
"type": "object",
|
|
11272
11308
|
"location": "body",
|
|
11273
11309
|
"required": true,
|
|
11274
|
-
"description": "Wrapper
|
|
11310
|
+
"description": "Wrapper {name, filter_type, query}. filter_type: 'conversation' ou 'contact'. query = {\"payload\": [{\"attribute_key\": \"status\", \"filter_operator\": \"equal_to\", \"values\": [\"open\"], \"query_operator\": \"and\"}, {\"attribute_key\": \"assignee_id\", \"filter_operator\": \"equal_to\", \"values\": [5], \"query_operator\": null}], \"sort_by\": \"...\"} — payload e LISTA de condicoes (mesmo formato de lionchat_conversations_filter / lionchat_contacts_filter); values e SEMPRE lista; query_operator liga a condicao com a SEGUINTE e a ULTIMA vai null. sort_by e opcional (so pasta de conversa). No update, query SUBSTITUI inteira: mande as condicoes E o sort_by (leia antes com lionchat_custom_filters_show)."
|
|
11275
11311
|
}
|
|
11276
11312
|
],
|
|
11277
11313
|
"returns": "filtro personalizado atualizado",
|
|
@@ -11647,7 +11683,7 @@
|
|
|
11647
11683
|
"method": "GET",
|
|
11648
11684
|
"path": "/api/v1/accounts/{account_id}/companies",
|
|
11649
11685
|
"title": "Listar Empresas",
|
|
11650
|
-
"description": "Lista as empresas da conta. meta usa total_count/page.",
|
|
11686
|
+
"description": "Lista as empresas da conta. meta usa total_count/page. Cada empresa traz last_activity_at (ultima atividade dos contatos dela; null = nunca). Excluir empresa (lionchat_companies_destroy) e so para administrador e NAO apaga os contatos.",
|
|
11651
11687
|
"category": "Empresas",
|
|
11652
11688
|
"params": [
|
|
11653
11689
|
{
|
|
@@ -11662,7 +11698,7 @@
|
|
|
11662
11698
|
"type": "string",
|
|
11663
11699
|
"location": "query",
|
|
11664
11700
|
"required": false,
|
|
11665
|
-
"description": "
|
|
11701
|
+
"description": "Ordenacao: name, domain, created_at, contacts_count, last_activity_at (prefixo - = decrescente, ex. -last_activity_at)"
|
|
11666
11702
|
}
|
|
11667
11703
|
],
|
|
11668
11704
|
"returns": "meta (contadores globais) + payload (array de empresas)",
|
|
@@ -11678,7 +11714,7 @@
|
|
|
11678
11714
|
"method": "POST",
|
|
11679
11715
|
"path": "/api/v1/accounts/{account_id}/companies",
|
|
11680
11716
|
"title": "Criar Empresa",
|
|
11681
|
-
"description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar. NAO aceita custom_attributes. ENTERPRISE-only.",
|
|
11717
|
+
"description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar e additional_attributes (cadastro). NAO aceita custom_attributes. 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).",
|
|
11682
11718
|
"category": "Empresas",
|
|
11683
11719
|
"params": [
|
|
11684
11720
|
{
|
|
@@ -11686,7 +11722,7 @@
|
|
|
11686
11722
|
"type": "object",
|
|
11687
11723
|
"location": "body",
|
|
11688
11724
|
"required": true,
|
|
11689
|
-
"description": "Wrapper com { name, domain, description, avatar }"
|
|
11725
|
+
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} } }"
|
|
11690
11726
|
}
|
|
11691
11727
|
],
|
|
11692
11728
|
"returns": "empresa criado (com novo ID)",
|
|
@@ -11720,14 +11756,18 @@
|
|
|
11720
11756
|
"Verificar estado atual antes de uma ação",
|
|
11721
11757
|
"Mostrar perfil ou ficha de empresa"
|
|
11722
11758
|
],
|
|
11723
|
-
"related_tools": [
|
|
11759
|
+
"related_tools": [
|
|
11760
|
+
"lionchat_companies_contacts_list",
|
|
11761
|
+
"lionchat_companies_conversations_list",
|
|
11762
|
+
"lionchat_companies_notes_list"
|
|
11763
|
+
]
|
|
11724
11764
|
},
|
|
11725
11765
|
{
|
|
11726
11766
|
"id": "lionchat_companies_update",
|
|
11727
11767
|
"method": "PATCH",
|
|
11728
11768
|
"path": "/api/v1/accounts/{account_id}/companies/{id}",
|
|
11729
11769
|
"title": "Atualizar Empresa",
|
|
11730
|
-
"description": "Atualiza dados da empresa.
|
|
11770
|
+
"description": "Atualiza dados da empresa. Suporta atualizacao parcial (PATCH) — so campos enviados sao alterados. Campos suportados: name, domain, description, avatar e additional_attributes (cadastro). 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).",
|
|
11731
11771
|
"category": "Empresas",
|
|
11732
11772
|
"params": [
|
|
11733
11773
|
{
|
|
@@ -11742,7 +11782,7 @@
|
|
|
11742
11782
|
"type": "object",
|
|
11743
11783
|
"location": "body",
|
|
11744
11784
|
"required": true,
|
|
11745
|
-
"description": "Wrapper com { name, domain, description, avatar }"
|
|
11785
|
+
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} } }"
|
|
11746
11786
|
}
|
|
11747
11787
|
],
|
|
11748
11788
|
"returns": "empresa atualizado",
|
|
@@ -11830,6 +11870,183 @@
|
|
|
11830
11870
|
],
|
|
11831
11871
|
"related_tools": []
|
|
11832
11872
|
},
|
|
11873
|
+
{
|
|
11874
|
+
"id": "lionchat_companies_contacts_list",
|
|
11875
|
+
"method": "GET",
|
|
11876
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/contacts",
|
|
11877
|
+
"title": "Contatos da Empresa",
|
|
11878
|
+
"description": "Lista os contatos ligados a UMA empresa, 25 por pagina, ordenados por nome. meta usa count/current_page. Cada contato traz company_id e additional_attributes (company_name = texto 'Empresa', job_title = cargo).",
|
|
11879
|
+
"category": "Empresas",
|
|
11880
|
+
"params": [
|
|
11881
|
+
{
|
|
11882
|
+
"name": "company_id",
|
|
11883
|
+
"type": "integer",
|
|
11884
|
+
"location": "path",
|
|
11885
|
+
"required": true,
|
|
11886
|
+
"description": "ID da empresa"
|
|
11887
|
+
},
|
|
11888
|
+
{
|
|
11889
|
+
"name": "page",
|
|
11890
|
+
"type": "integer",
|
|
11891
|
+
"location": "query",
|
|
11892
|
+
"required": false,
|
|
11893
|
+
"description": "Pagina (padrao: 1)"
|
|
11894
|
+
}
|
|
11895
|
+
],
|
|
11896
|
+
"returns": "meta {count, current_page} + payload (array de contatos)",
|
|
11897
|
+
"common_use_cases": [
|
|
11898
|
+
"Ver quem trabalha numa empresa",
|
|
11899
|
+
"Conferir cargo das pessoas de um cliente"
|
|
11900
|
+
],
|
|
11901
|
+
"related_tools": [
|
|
11902
|
+
"lionchat_companies_show",
|
|
11903
|
+
"lionchat_companies_contacts_create",
|
|
11904
|
+
"lionchat_companies_contacts_destroy"
|
|
11905
|
+
]
|
|
11906
|
+
},
|
|
11907
|
+
{
|
|
11908
|
+
"id": "lionchat_companies_contacts_create",
|
|
11909
|
+
"method": "POST",
|
|
11910
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/contacts",
|
|
11911
|
+
"title": "Colocar Contato na Empresa",
|
|
11912
|
+
"description": "Liga um contato da conta a esta empresa (se ele estava em outra, MOVE). O texto additional_attributes.company_name do contato passa a ser o nome da empresa. Para achar o contato use lionchat_contacts_search. Contato de outra conta = 404. TETO: 100 contatos por empresa (25/09) — o 101o e recusado com 422 'Esta empresa ja tem 100 contatos, o maximo permitido...'; tire alguem (lionchat_companies_contacts_destroy) antes de colocar outro. Empresa e vinculo sao SEMPRE manuais: o sistema NAO cria empresa nem vincula contato pelo dominio do e-mail.",
|
|
11913
|
+
"category": "Empresas",
|
|
11914
|
+
"params": [
|
|
11915
|
+
{
|
|
11916
|
+
"name": "company_id",
|
|
11917
|
+
"type": "integer",
|
|
11918
|
+
"location": "path",
|
|
11919
|
+
"required": true,
|
|
11920
|
+
"description": "ID da empresa"
|
|
11921
|
+
},
|
|
11922
|
+
{
|
|
11923
|
+
"name": "contact_id",
|
|
11924
|
+
"type": "integer",
|
|
11925
|
+
"location": "body",
|
|
11926
|
+
"required": true,
|
|
11927
|
+
"description": "ID do contato a colocar na empresa"
|
|
11928
|
+
}
|
|
11929
|
+
],
|
|
11930
|
+
"returns": "payload (contato atualizado)",
|
|
11931
|
+
"common_use_cases": [
|
|
11932
|
+
"Organizar contatos por cliente",
|
|
11933
|
+
"Corrigir a empresa de um contato"
|
|
11934
|
+
],
|
|
11935
|
+
"related_tools": [
|
|
11936
|
+
"lionchat_contacts_search",
|
|
11937
|
+
"lionchat_companies_contacts_list",
|
|
11938
|
+
"lionchat_contacts_update"
|
|
11939
|
+
]
|
|
11940
|
+
},
|
|
11941
|
+
{
|
|
11942
|
+
"id": "lionchat_companies_contacts_destroy",
|
|
11943
|
+
"method": "DELETE",
|
|
11944
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/contacts/{contact_id}",
|
|
11945
|
+
"title": "Tirar Contato da Empresa",
|
|
11946
|
+
"description": "Tira o contato da empresa (o contato NAO e excluido). O texto company_name so e apagado se ainda era exatamente o nome da empresa.",
|
|
11947
|
+
"category": "Empresas",
|
|
11948
|
+
"params": [
|
|
11949
|
+
{
|
|
11950
|
+
"name": "company_id",
|
|
11951
|
+
"type": "integer",
|
|
11952
|
+
"location": "path",
|
|
11953
|
+
"required": true,
|
|
11954
|
+
"description": "ID da empresa"
|
|
11955
|
+
},
|
|
11956
|
+
{
|
|
11957
|
+
"name": "contact_id",
|
|
11958
|
+
"type": "integer",
|
|
11959
|
+
"location": "path",
|
|
11960
|
+
"required": true,
|
|
11961
|
+
"description": "ID do contato"
|
|
11962
|
+
}
|
|
11963
|
+
],
|
|
11964
|
+
"returns": "200 OK",
|
|
11965
|
+
"common_use_cases": [
|
|
11966
|
+
"Pessoa saiu da empresa",
|
|
11967
|
+
"Contato ligado errado pelo dominio do e-mail"
|
|
11968
|
+
],
|
|
11969
|
+
"related_tools": [
|
|
11970
|
+
"lionchat_companies_contacts_list"
|
|
11971
|
+
]
|
|
11972
|
+
},
|
|
11973
|
+
{
|
|
11974
|
+
"id": "lionchat_companies_notes_list",
|
|
11975
|
+
"method": "GET",
|
|
11976
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes",
|
|
11977
|
+
"title": "Anotacoes da Empresa",
|
|
11978
|
+
"description": "Anotacoes da empresa, mais nova primeiro: as da PROPRIA empresa (kind 'company', criadas com lionchat_companies_notes_create) + as ultimas 50 feitas nos contatos dela (kind 'contact', com contact {id, name, thumbnail}). Cada item traz id, kind, content, user, created_at.",
|
|
11979
|
+
"category": "Empresas",
|
|
11980
|
+
"params": [
|
|
11981
|
+
{
|
|
11982
|
+
"name": "company_id",
|
|
11983
|
+
"type": "integer",
|
|
11984
|
+
"location": "path",
|
|
11985
|
+
"required": true,
|
|
11986
|
+
"description": "ID da empresa"
|
|
11987
|
+
}
|
|
11988
|
+
],
|
|
11989
|
+
"returns": "payload (array de anotacoes; kind = company ou contact)",
|
|
11990
|
+
"common_use_cases": [
|
|
11991
|
+
"Resumo do relacionamento com um cliente",
|
|
11992
|
+
"Preparar reuniao com a empresa"
|
|
11993
|
+
],
|
|
11994
|
+
"related_tools": [
|
|
11995
|
+
"lionchat_companies_notes_create",
|
|
11996
|
+
"lionchat_contacts_notes_show",
|
|
11997
|
+
"lionchat_companies_conversations_list"
|
|
11998
|
+
]
|
|
11999
|
+
},
|
|
12000
|
+
{
|
|
12001
|
+
"id": "lionchat_companies_conversations_list",
|
|
12002
|
+
"method": "GET",
|
|
12003
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/conversations",
|
|
12004
|
+
"title": "Conversas da Empresa",
|
|
12005
|
+
"description": "Ultimas 20 conversas dos contatos da empresa, da mais recente para a mais antiga, filtradas pelo que o usuario do token pode ver (mesma regra da lista de conversas).",
|
|
12006
|
+
"category": "Empresas",
|
|
12007
|
+
"params": [
|
|
12008
|
+
{
|
|
12009
|
+
"name": "company_id",
|
|
12010
|
+
"type": "integer",
|
|
12011
|
+
"location": "path",
|
|
12012
|
+
"required": true,
|
|
12013
|
+
"description": "ID da empresa"
|
|
12014
|
+
}
|
|
12015
|
+
],
|
|
12016
|
+
"returns": "payload (array de conversas)",
|
|
12017
|
+
"common_use_cases": [
|
|
12018
|
+
"Historico de atendimento de um cliente",
|
|
12019
|
+
"Ver se alguem da empresa falou recentemente"
|
|
12020
|
+
],
|
|
12021
|
+
"related_tools": [
|
|
12022
|
+
"lionchat_companies_notes_list",
|
|
12023
|
+
"lionchat_conversations_show"
|
|
12024
|
+
]
|
|
12025
|
+
},
|
|
12026
|
+
{
|
|
12027
|
+
"id": "lionchat_companies_avatar_destroy",
|
|
12028
|
+
"method": "DELETE",
|
|
12029
|
+
"path": "/api/v1/accounts/{account_id}/companies/{id}/avatar",
|
|
12030
|
+
"title": "Tirar Foto da Empresa",
|
|
12031
|
+
"description": "Remove a foto da empresa. Para trocar a foto, envie avatar (arquivo) no lionchat_companies_update.",
|
|
12032
|
+
"category": "Empresas",
|
|
12033
|
+
"params": [
|
|
12034
|
+
{
|
|
12035
|
+
"name": "id",
|
|
12036
|
+
"type": "integer",
|
|
12037
|
+
"location": "path",
|
|
12038
|
+
"required": true,
|
|
12039
|
+
"description": "ID da empresa"
|
|
12040
|
+
}
|
|
12041
|
+
],
|
|
12042
|
+
"returns": "payload (empresa)",
|
|
12043
|
+
"common_use_cases": [
|
|
12044
|
+
"Foto errada puxada do site da empresa"
|
|
12045
|
+
],
|
|
12046
|
+
"related_tools": [
|
|
12047
|
+
"lionchat_companies_update"
|
|
12048
|
+
]
|
|
12049
|
+
},
|
|
11833
12050
|
{
|
|
11834
12051
|
"id": "lionchat_offers_list",
|
|
11835
12052
|
"method": "GET",
|
|
@@ -12173,7 +12390,7 @@
|
|
|
12173
12390
|
"type": "object",
|
|
12174
12391
|
"location": "body",
|
|
12175
12392
|
"required": false,
|
|
12176
|
-
"description": "
|
|
12393
|
+
"description": "Objeto {chave: valor} (chave = attribute_key de lionchat_custom_attributes_list, modelo contato). Por tipo: texto; numero como numero; data 'AAAA-MM-DD' (data-hora ISO com fuso; hora 'HH:MM'); lista = EXATAMENTE uma das opcoes cadastradas (outro valor aparece como 'Fora da lista'); sim/nao = true/false. NUNCA grave waha_whatsapp_lid, waha_whatsapp_jid nem waha_whatsapp_chat_id (endereco interno de envio do WhatsApp — escrever quebra a entrega). Ex.: {\"cpf\": \"123.456.789-00\", \"data_nascimento\": \"1990-05-17\", \"plano\": \"Premium\"}. So vale se o contato for NOVO: se ja existir contato com o mesmo identifier/e-mail/telefone, os atributos NAO sao gravados."
|
|
12177
12394
|
}
|
|
12178
12395
|
],
|
|
12179
12396
|
"returns": "contato criado (com novo ID)",
|
|
@@ -15764,7 +15981,7 @@
|
|
|
15764
15981
|
"type": "array",
|
|
15765
15982
|
"location": "body",
|
|
15766
15983
|
"required": true,
|
|
15767
|
-
"description": "
|
|
15984
|
+
"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)."
|
|
15768
15985
|
},
|
|
15769
15986
|
{
|
|
15770
15987
|
"name": "variable_mapping",
|
|
@@ -15868,7 +16085,7 @@
|
|
|
15868
16085
|
"method": "POST",
|
|
15869
16086
|
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/whatsapp_templates/{id}",
|
|
15870
16087
|
"title": "Atualizar Template WhatsApp",
|
|
15871
|
-
"description": "Atualiza um template de WhatsApp. SOMENTE Channel::Whatsapp Cloud.",
|
|
16088
|
+
"description": "Atualiza um template de WhatsApp. SOMENTE Channel::Whatsapp Cloud. REENVIA o modelo a Meta (status volta para revisao). Para mudar SO o variable_mapping de um modelo aprovado, use lionchat_inboxes_whatsapp_templates_update.",
|
|
15872
16089
|
"category": "Templates WhatsApp",
|
|
15873
16090
|
"params": [
|
|
15874
16091
|
{
|
|
@@ -15890,7 +16107,7 @@
|
|
|
15890
16107
|
"type": "array",
|
|
15891
16108
|
"location": "body",
|
|
15892
16109
|
"required": false,
|
|
15893
|
-
"description": "
|
|
16110
|
+
"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). ATENCAO: esta ferramenta REENVIA o modelo a Meta — o status volta para revisao. Para mudar SO o apontamento das variaveis use lionchat_inboxes_whatsapp_templates_update (nao passa pela Meta)."
|
|
15894
16111
|
},
|
|
15895
16112
|
{
|
|
15896
16113
|
"name": "variable_mapping",
|
|
@@ -17064,14 +17281,14 @@
|
|
|
17064
17281
|
"type": "object",
|
|
17065
17282
|
"location": "body",
|
|
17066
17283
|
"required": false,
|
|
17067
|
-
"description": "Mapeamento de campos do payload para campos internos (dentro de custom_webhook_integration). Suporta caminhos com indice de array (messages.0.content) — mapeamento POSICIONAL; limites: profundidade 5, 10 itens/array, 500 chaves"
|
|
17284
|
+
"description": "Mapeamento de campos do payload para campos internos (dentro de custom_webhook_integration). Suporta caminhos com indice de array (messages.0.content) — mapeamento POSICIONAL; limites: profundidade 5, 10 itens/array, 500 chaves FORMATO: {\"<caminho no payload>\": \"<destino>\"} — caminho com ponto (cliente.telefone, messages.0.content); destino SEMPRE texto: contact_name, contact_email, contact_phone, contact_company, contact_city, contact_attr_<chave>, conversation_attr_<chave>, cadastral_<campo> (ex.: cadastral_cpf), social_<rede>. Dois caminhos pro mesmo destino sao concatenados; destino fora da lista e ignorado. Ex.: {\"cliente.nome\": \"contact_name\", \"cliente.telefone\": \"contact_phone\"}."
|
|
17068
17285
|
},
|
|
17069
17286
|
{
|
|
17070
17287
|
"name": "event_automation_mapping",
|
|
17071
17288
|
"type": "object",
|
|
17072
17289
|
"location": "body",
|
|
17073
17290
|
"required": false,
|
|
17074
|
-
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17291
|
+
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<valor do campo de evento (event_field) no payload>\": {\"automation_id\": 12, \"flow_id\": null}}, ou {\"__all__\": {...}} para qualquer evento (o __all__ vence os demais). Cada valor e um OBJETO."
|
|
17075
17292
|
},
|
|
17076
17293
|
{
|
|
17077
17294
|
"name": "sample_payload",
|
|
@@ -17176,14 +17393,14 @@
|
|
|
17176
17393
|
"type": "object",
|
|
17177
17394
|
"location": "body",
|
|
17178
17395
|
"required": false,
|
|
17179
|
-
"description": "Mapeamento de campos do payload para campos internos (dentro de custom_webhook_integration)"
|
|
17396
|
+
"description": "Mapeamento de campos do payload para campos internos (dentro de custom_webhook_integration) FORMATO: {\"<caminho no payload>\": \"<destino>\"} — caminho com ponto (cliente.telefone, messages.0.content); destino SEMPRE texto: contact_name, contact_email, contact_phone, contact_company, contact_city, contact_attr_<chave>, conversation_attr_<chave>, cadastral_<campo> (ex.: cadastral_cpf), social_<rede>. Dois caminhos pro mesmo destino sao concatenados; destino fora da lista e ignorado. Ex.: {\"cliente.nome\": \"contact_name\", \"cliente.telefone\": \"contact_phone\"}. SUBSTITUI o mapa inteiro."
|
|
17180
17397
|
},
|
|
17181
17398
|
{
|
|
17182
17399
|
"name": "event_automation_mapping",
|
|
17183
17400
|
"type": "object",
|
|
17184
17401
|
"location": "body",
|
|
17185
17402
|
"required": false,
|
|
17186
|
-
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17403
|
+
"description": "Mapeamento de evento para automacao a disparar (dentro de custom_webhook_integration). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<valor do campo de evento (event_field) no payload>\": {\"automation_id\": 12, \"flow_id\": null}}, ou {\"__all__\": {...}} para qualquer evento (o __all__ vence os demais). Cada valor e um OBJETO. SUBSTITUI o mapa inteiro: leia com a ferramenta show e reenvie tudo."
|
|
17187
17404
|
},
|
|
17188
17405
|
{
|
|
17189
17406
|
"name": "sample_payload",
|
|
@@ -17378,7 +17595,7 @@
|
|
|
17378
17595
|
"type": "object",
|
|
17379
17596
|
"location": "body",
|
|
17380
17597
|
"required": false,
|
|
17381
|
-
"description": "Mapeamento de evento para automacao (dentro de guru_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17598
|
+
"description": "Mapeamento de evento para automacao (dentro de guru_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"approved\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Guru (maiuscula/minuscula tanto faz): transacao: approved, waiting_payment, abandoned, refused, canceled, expired, refunded, chargeback, pix_generated, boleto_printed, in_analysis, recovery, trial; assinatura: active, trial, past_due, unpaid, canceled, expired; ingresso: invited, confirmed, checked_in, canceled. Ids de automacao/fluxo de outra conta = 400."
|
|
17382
17599
|
}
|
|
17383
17600
|
],
|
|
17384
17601
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -17483,7 +17700,7 @@
|
|
|
17483
17700
|
"type": "object",
|
|
17484
17701
|
"location": "body",
|
|
17485
17702
|
"required": false,
|
|
17486
|
-
"description": "Mapeamento de evento para automacao (dentro de guru_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17703
|
+
"description": "Mapeamento de evento para automacao (dentro de guru_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"approved\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Guru (maiuscula/minuscula tanto faz): transacao: approved, waiting_payment, abandoned, refused, canceled, expired, refunded, chargeback, pix_generated, boleto_printed, in_analysis, recovery, trial; assinatura: active, trial, past_due, unpaid, canceled, expired; ingresso: invited, confirmed, checked_in, canceled. Ids de automacao/fluxo de outra conta = 400. SUBSTITUI o mapa inteiro: leia com a ferramenta show e reenvie todos os eventos."
|
|
17487
17704
|
}
|
|
17488
17705
|
],
|
|
17489
17706
|
"returns": "webhook atualizado",
|
|
@@ -17692,7 +17909,7 @@
|
|
|
17692
17909
|
"type": "object",
|
|
17693
17910
|
"location": "body",
|
|
17694
17911
|
"required": false,
|
|
17695
|
-
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
17912
|
+
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"PURCHASE_APPROVED\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Hotmart (maiuscula/minuscula tanto faz): PURCHASE_APPROVED, PURCHASE_COMPLETE, PURCHASE_BILLET_PRINTED, PURCHASE_CANCELED, PURCHASE_REFUNDED, PURCHASE_CHARGEBACK, PURCHASE_EXPIRED, PURCHASE_DELAYED, PURCHASE_PROTEST, SUBSCRIPTION_CANCELLATION, SWITCH_PLAN, UPDATE_SUBSCRIPTION_CHARGE_DATE, CLUB_FIRST_ACCESS, CLUB_MODULE_COMPLETED, PURCHASE_OUT_OF_SHOPPING_CART. Ids de automacao/fluxo de outra conta = 400."
|
|
17696
17913
|
}
|
|
17697
17914
|
],
|
|
17698
17915
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -17790,7 +18007,7 @@
|
|
|
17790
18007
|
"type": "object",
|
|
17791
18008
|
"location": "body",
|
|
17792
18009
|
"required": false,
|
|
17793
|
-
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18010
|
+
"description": "Mapeamento de evento para automacao (dentro de hotmart_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"PURCHASE_APPROVED\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Hotmart (maiuscula/minuscula tanto faz): PURCHASE_APPROVED, PURCHASE_COMPLETE, PURCHASE_BILLET_PRINTED, PURCHASE_CANCELED, PURCHASE_REFUNDED, PURCHASE_CHARGEBACK, PURCHASE_EXPIRED, PURCHASE_DELAYED, PURCHASE_PROTEST, SUBSCRIPTION_CANCELLATION, SWITCH_PLAN, UPDATE_SUBSCRIPTION_CHARGE_DATE, CLUB_FIRST_ACCESS, CLUB_MODULE_COMPLETED, PURCHASE_OUT_OF_SHOPPING_CART. Ids de automacao/fluxo de outra conta = 400. SUBSTITUI o mapa inteiro: leia com a ferramenta show e reenvie todos os eventos."
|
|
17794
18011
|
}
|
|
17795
18012
|
],
|
|
17796
18013
|
"returns": "webhook atualizado",
|
|
@@ -17999,7 +18216,7 @@
|
|
|
17999
18216
|
"type": "object",
|
|
18000
18217
|
"location": "body",
|
|
18001
18218
|
"required": false,
|
|
18002
|
-
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18219
|
+
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"compra_aprovada\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Kiwify (maiuscula/minuscula tanto faz): compra_aprovada, compra_recusada, compra_reembolsada, chargeback, boleto_gerado, pix_gerado, carrinho_abandonado, subscription_renewed, subscription_canceled, subscription_late. Ids de automacao/fluxo de outra conta = 400."
|
|
18003
18220
|
}
|
|
18004
18221
|
],
|
|
18005
18222
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -18097,7 +18314,7 @@
|
|
|
18097
18314
|
"type": "object",
|
|
18098
18315
|
"location": "body",
|
|
18099
18316
|
"required": false,
|
|
18100
|
-
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18317
|
+
"description": "Mapeamento de evento para automacao (dentro de kiwify_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"compra_aprovada\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Kiwify (maiuscula/minuscula tanto faz): compra_aprovada, compra_recusada, compra_reembolsada, chargeback, boleto_gerado, pix_gerado, carrinho_abandonado, subscription_renewed, subscription_canceled, subscription_late. Ids de automacao/fluxo de outra conta = 400. SUBSTITUI o mapa inteiro: leia com a ferramenta show e reenvie todos os eventos."
|
|
18101
18318
|
}
|
|
18102
18319
|
],
|
|
18103
18320
|
"returns": "webhook atualizado",
|
|
@@ -18306,7 +18523,7 @@
|
|
|
18306
18523
|
"type": "object",
|
|
18307
18524
|
"location": "body",
|
|
18308
18525
|
"required": false,
|
|
18309
|
-
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18526
|
+
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"authorized\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Ticto (maiuscula/minuscula tanto faz): authorized, refused, refunded, chargeback, claimed, close, waiting_payment, bank_slip_created, bank_slip_delayed, pix_created, pix_expired, abandoned_cart, trial, trial_started, trial_ended, subscription_canceled, subscription_delayed, all_charges_paid, card_exchanged, extended, uncanceled. Ids de automacao/fluxo de outra conta = 400."
|
|
18310
18527
|
}
|
|
18311
18528
|
],
|
|
18312
18529
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -18404,7 +18621,7 @@
|
|
|
18404
18621
|
"type": "object",
|
|
18405
18622
|
"location": "body",
|
|
18406
18623
|
"required": false,
|
|
18407
|
-
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18624
|
+
"description": "Mapeamento de evento para automacao (dentro de ticto_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"authorized\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Ticto (maiuscula/minuscula tanto faz): authorized, refused, refunded, chargeback, claimed, close, waiting_payment, bank_slip_created, bank_slip_delayed, pix_created, pix_expired, abandoned_cart, trial, trial_started, trial_ended, subscription_canceled, subscription_delayed, all_charges_paid, card_exchanged, extended, uncanceled. Ids de automacao/fluxo de outra conta = 400. SUBSTITUI o mapa inteiro: leia com a ferramenta show e reenvie todos os eventos."
|
|
18408
18625
|
}
|
|
18409
18626
|
],
|
|
18410
18627
|
"returns": "webhook atualizado",
|
|
@@ -18613,7 +18830,7 @@
|
|
|
18613
18830
|
"type": "object",
|
|
18614
18831
|
"location": "body",
|
|
18615
18832
|
"required": false,
|
|
18616
|
-
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18833
|
+
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"myeduzz.invoice_paid\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Eduzz (maiuscula/minuscula tanto faz): myeduzz.invoice_paid, myeduzz.invoice_canceled, myeduzz.invoice_refunded, myeduzz.invoice_waiting_refund, myeduzz.invoice_refused, myeduzz.invoice_expired, myeduzz.invoice_overdue, myeduzz.invoice_opened, myeduzz.invoice_waiting_payment, myeduzz.invoice_scheduled, sun.cart_abandonment, myeduzz.contract_created, myeduzz.contract_updated, myeduzz.contract_card_attempted. Ids de automacao/fluxo de outra conta = 400."
|
|
18617
18834
|
}
|
|
18618
18835
|
],
|
|
18619
18836
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -18711,7 +18928,7 @@
|
|
|
18711
18928
|
"type": "object",
|
|
18712
18929
|
"location": "body",
|
|
18713
18930
|
"required": false,
|
|
18714
|
-
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
18931
|
+
"description": "Mapeamento de evento para automacao (dentro de eduzz_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"myeduzz.invoice_paid\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Eduzz (maiuscula/minuscula tanto faz): myeduzz.invoice_paid, myeduzz.invoice_canceled, myeduzz.invoice_refunded, myeduzz.invoice_waiting_refund, myeduzz.invoice_refused, myeduzz.invoice_expired, myeduzz.invoice_overdue, myeduzz.invoice_opened, myeduzz.invoice_waiting_payment, myeduzz.invoice_scheduled, sun.cart_abandonment, myeduzz.contract_created, myeduzz.contract_updated, myeduzz.contract_card_attempted. Ids de automacao/fluxo de outra conta = 400. SUBSTITUI o mapa inteiro: leia com a ferramenta show e reenvie todos os eventos."
|
|
18715
18932
|
}
|
|
18716
18933
|
],
|
|
18717
18934
|
"returns": "webhook atualizado",
|
|
@@ -18920,7 +19137,7 @@
|
|
|
18920
19137
|
"type": "object",
|
|
18921
19138
|
"location": "body",
|
|
18922
19139
|
"required": false,
|
|
18923
|
-
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
19140
|
+
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"2\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Monetizze (maiuscula/minuscula tanto faz): codigo do evento como TEXTO — '1' aguardando pagamento, '2' compra aprovada, '3' cancelada, '4' reembolsada, '5' bloqueada, '6' completa, '7' carrinho abandonado, '101' assinatura ativa, '102' inadimplente, '103' cancelada, '104' aguardando pagamento. Ids de automacao/fluxo de outra conta = 400."
|
|
18924
19141
|
}
|
|
18925
19142
|
],
|
|
18926
19143
|
"returns": "webhook criado (com novo ID)",
|
|
@@ -19018,7 +19235,7 @@
|
|
|
19018
19235
|
"type": "object",
|
|
19019
19236
|
"location": "body",
|
|
19020
19237
|
"required": false,
|
|
19021
|
-
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal."
|
|
19238
|
+
"description": "Mapeamento de evento para automacao (dentro de monetizze_webhook). ATENCAO (26/08/2026): conversation_attribute_keys foi REMOVIDA do produto — o backend ignora a chave se gravada. Atributo de conversa mapeado existe so no Meta Lead e no mapeamento de campos (field_mapping) do Webhook Universal. FORMATO: {\"<evento>\": {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO; first_purchase_only e booleano de verdade (true/false, texto 'true' nao vale) e pula renovacoes. Ex.: {\"2\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": true}}. Eventos do Monetizze (maiuscula/minuscula tanto faz): codigo do evento como TEXTO — '1' aguardando pagamento, '2' compra aprovada, '3' cancelada, '4' reembolsada, '5' bloqueada, '6' completa, '7' carrinho abandonado, '101' assinatura ativa, '102' inadimplente, '103' cancelada, '104' aguardando pagamento. Ids de automacao/fluxo de outra conta = 400. SUBSTITUI o mapa inteiro: leia com a ferramenta show e reenvie todos os eventos."
|
|
19022
19239
|
}
|
|
19023
19240
|
],
|
|
19024
19241
|
"returns": "webhook atualizado",
|
|
@@ -19318,14 +19535,14 @@
|
|
|
19318
19535
|
"type": "object",
|
|
19319
19536
|
"location": "body",
|
|
19320
19537
|
"required": false,
|
|
19321
|
-
"description": "Mapeamento de campos (singular), dentro de form. Destino tambem pode ser conversation_attr_<chave> (2026-08-21): o atributo vai pra CONVERSA que a automacao/fluxo mapeado abrir pro lead (sem automacao/fluxo nao nasce conversa e o valor e descartado). Chaves reservadas (imported_from, type, in_reply_to...) sao recusadas; valor convertido pelo TIPO do atributo."
|
|
19538
|
+
"description": "Mapeamento de campos (singular), dentro de form. Destino tambem pode ser conversation_attr_<chave> (2026-08-21): o atributo vai pra CONVERSA que a automacao/fluxo mapeado abrir pro lead (sem automacao/fluxo nao nasce conversa e o valor e descartado). Chaves reservadas (imported_from, type, in_reply_to...) sao recusadas; valor convertido pelo TIPO do atributo. FORMATO: {\"<campo do lead>\": \"<destino>\"}, destino SEMPRE texto: contact_name, contact_email, contact_phone, contact_company, contact_city, contact_attr_<chave>, conversation_attr_<chave>, cadastral_<campo> (ex.: cadastral_cpf), social_<rede>. Ex.: {\"full_name\": \"contact_name\", \"phone_number\": \"contact_phone\", \"cidade\": \"contact_attr_cidade\"}. Destino fora da lista e ignorado. SUBSTITUI o mapa inteiro: leia com lionchat_meta_lead_show e reenvie tudo."
|
|
19322
19539
|
},
|
|
19323
19540
|
{
|
|
19324
19541
|
"name": "event_automation_mapping",
|
|
19325
19542
|
"type": "object",
|
|
19326
19543
|
"location": "body",
|
|
19327
19544
|
"required": false,
|
|
19328
|
-
"description": "
|
|
19545
|
+
"description": "Objeto com UMA chave fixa \"__all__\" (vale para todo lead do formulario), dentro de form: {\"__all__\": {\"automation_id\": 12, \"flow_id\": null}} — ou flow_id no lugar. O valor e um OBJETO: numero solto ({\"__all__\": 12}) NAO dispara nada. Ids precisam ser desta conta. SUBSTITUI o objeto inteiro."
|
|
19329
19546
|
}
|
|
19330
19547
|
],
|
|
19331
19548
|
"returns": "integração Meta Lead atualizado",
|
|
@@ -19493,21 +19710,21 @@
|
|
|
19493
19710
|
"type": "array",
|
|
19494
19711
|
"location": "body",
|
|
19495
19712
|
"required": false,
|
|
19496
|
-
"description": "Motivos de ganho
|
|
19713
|
+
"description": "Motivos de ganho (valem para TODOS os funis da conta). Formato: [{\"id\": \"ganho-indicacao\", \"title\": \"Indicacao\"}]. O id e TEXTO estavel (ex.: \"ganho-indicacao\"), nunca numero — numero e convertido para texto, mas mande texto. A lista SUBSTITUI a atual: leia antes com lionchat_kanban_config_list e reenvie os MESMOS id dos motivos que ja existem (trocar o id tira o nome dos cards ja marcados com ele). Recusado com 422: lista de textos soltos ([\"Preco\"]), motivo sem id, motivo sem title, id repetido. O servidor nao inventa id. [] limpa a lista."
|
|
19497
19714
|
},
|
|
19498
19715
|
{
|
|
19499
19716
|
"name": "kanban_config.loss_reasons",
|
|
19500
19717
|
"type": "array",
|
|
19501
19718
|
"location": "body",
|
|
19502
19719
|
"required": false,
|
|
19503
|
-
"description": "Motivos de perda
|
|
19720
|
+
"description": "Motivos de perda (valem para TODOS os funis da conta). Formato: [{\"id\": \"perda-preco\", \"title\": \"Preco alto\"}]. O id e TEXTO estavel (ex.: \"perda-preco\"), nunca numero — numero e convertido para texto, mas mande texto. A lista SUBSTITUI a atual: leia antes com lionchat_kanban_config_list e reenvie os MESMOS id dos motivos que ja existem (trocar o id tira o nome dos cards ja marcados com ele). Recusado com 422: lista de textos soltos ([\"Preco\"]), motivo sem id, motivo sem title, id repetido. O servidor nao inventa id. [] limpa a lista."
|
|
19504
19721
|
},
|
|
19505
19722
|
{
|
|
19506
19723
|
"name": "kanban_config.global_custom_attributes",
|
|
19507
19724
|
"type": "array",
|
|
19508
19725
|
"location": "body",
|
|
19509
19726
|
"required": false,
|
|
19510
|
-
"description": "
|
|
19727
|
+
"description": "LISTA de objetos [{name, type, is_list, list_values:[]}] — sao OS campos da aba Campos de todo card. Tipos que a tela cria: string (texto), number, date, boolean; is_list true + list_values = opcoes. Ex.: [{\"name\": \"Origem do Lead\", \"type\": \"string\", \"is_list\": true, \"list_values\": [\"Google\", \"Meta\"]}]. O valor de cada card mora em item_details.custom_attributes e casa por name+type."
|
|
19511
19728
|
},
|
|
19512
19729
|
{
|
|
19513
19730
|
"name": "kanban_config.config",
|
|
@@ -19577,21 +19794,21 @@
|
|
|
19577
19794
|
"type": "array",
|
|
19578
19795
|
"location": "body",
|
|
19579
19796
|
"required": false,
|
|
19580
|
-
"description": "Motivos de ganho
|
|
19797
|
+
"description": "Motivos de ganho (valem para TODOS os funis da conta). Formato: [{\"id\": \"ganho-indicacao\", \"title\": \"Indicacao\"}]. O id e TEXTO estavel (ex.: \"ganho-indicacao\"), nunca numero — numero e convertido para texto, mas mande texto. A lista SUBSTITUI a atual: leia antes com lionchat_kanban_config_list e reenvie os MESMOS id dos motivos que ja existem (trocar o id tira o nome dos cards ja marcados com ele). Recusado com 422: lista de textos soltos ([\"Preco\"]), motivo sem id, motivo sem title, id repetido. O servidor nao inventa id. [] limpa a lista."
|
|
19581
19798
|
},
|
|
19582
19799
|
{
|
|
19583
19800
|
"name": "kanban_config.loss_reasons",
|
|
19584
19801
|
"type": "array",
|
|
19585
19802
|
"location": "body",
|
|
19586
19803
|
"required": false,
|
|
19587
|
-
"description": "Motivos de perda
|
|
19804
|
+
"description": "Motivos de perda (valem para TODOS os funis da conta). Formato: [{\"id\": \"perda-preco\", \"title\": \"Preco alto\"}]. O id e TEXTO estavel (ex.: \"perda-preco\"), nunca numero — numero e convertido para texto, mas mande texto. A lista SUBSTITUI a atual: leia antes com lionchat_kanban_config_list e reenvie os MESMOS id dos motivos que ja existem (trocar o id tira o nome dos cards ja marcados com ele). Recusado com 422: lista de textos soltos ([\"Preco\"]), motivo sem id, motivo sem title, id repetido. O servidor nao inventa id. [] limpa a lista."
|
|
19588
19805
|
},
|
|
19589
19806
|
{
|
|
19590
19807
|
"name": "kanban_config.global_custom_attributes",
|
|
19591
19808
|
"type": "array",
|
|
19592
19809
|
"location": "body",
|
|
19593
19810
|
"required": false,
|
|
19594
|
-
"description": "
|
|
19811
|
+
"description": "LISTA de objetos [{name, type, is_list, list_values:[]}] — sao OS campos da aba Campos de todo card. Tipos que a tela cria: string (texto), number, date, boolean; is_list true + list_values = opcoes. Ex.: [{\"name\": \"Origem do Lead\", \"type\": \"string\", \"is_list\": true, \"list_values\": [\"Google\", \"Meta\"]}]. O valor de cada card mora em item_details.custom_attributes e casa por name+type. SUBSTITUI a lista inteira: leia com lionchat_kanban_config_list e reenvie todos os campos (campo removido some da aba de todos os cards)."
|
|
19595
19812
|
},
|
|
19596
19813
|
{
|
|
19597
19814
|
"name": "kanban_config.config",
|
|
@@ -21899,7 +22116,7 @@
|
|
|
21899
22116
|
"type": "array",
|
|
21900
22117
|
"location": "body",
|
|
21901
22118
|
"required": false,
|
|
21902
|
-
"description": "Lista de secoes do publico-alvo (uniao/intersecao conforme audience_mode). Sao 7 tipos: 'Label' {id} (etiqueta de CONVERSA); 'Funnel' {id, stages: ['slug_da_etapa'], include_won: bool, include_lost: bool} (SO 1 funil por campanha); 'ConversationAttribute' {key, value, operator}; 'ContactLabel' {id} (etiqueta de CONTATO); 'ContactAttribute' {key, value, operator}; 'CardAttribute' {key, value, operator} (atributo do card Kanban); 'AgentTeam' {assignee_ids: [], team_ids: []} (responsavel atual OU time da conversa). OPERADOR (28/07/2026): as tres secoes de atributo (ConversationAttribute, ContactAttribute, CardAttribute) aceitam `operator` com 7 valores: eq (padrao), neq, contains, not_contains, starts_with, present, blank. Em `present`/`blank` NAO se manda `value`; nos outros cinco, secao SEM `value` e DESCARTADA em silencio e o publico muda sem aviso nenhum. Vocabulario PROPRIO da campanha: `equal_to`/`is_present` (dos filtros de conversa) NAO existem aqui e caem em igualdade exata, tambem sem erro. `neq` e `not_contains` INCLUEM de proposito quem nao tem o atributo preenchido. Nos operadores de TEXTO (`contains`, `not_contains`, `starts_with`) maiuscula/minuscula NAO importam; ja `eq`/`neq` comparam EXATO — \"Ativo\" NAO casa com \"ativo\". Nos tres de texto, `%`/`_` digitados valem como texto normal, nunca como curinga. OBRIGATORIO em campanha one-off. Use exatamente as MESMAS secoes que voce passou em lionchat_campaigns_estimate_audience — estimar com um tipo e criar com outro entrega um publico diferente do numero que voce mostrou."
|
|
22119
|
+
"description": "LISTA de objetos — cada secao e um OBJETO com type: [{\"type\": \"Label\", \"id\": 12}, {\"type\": \"ContactAttribute\", \"key\": \"plano\", \"operator\": \"eq\", \"value\": \"Premium\"}]; uma secao unica mandada como objeto vira lista de um; texto ou numero no lugar da lista e RECUSADO (422). Lista de secoes do publico-alvo (uniao/intersecao conforme audience_mode). Sao 7 tipos: 'Label' {id} (etiqueta de CONVERSA); 'Funnel' {id, stages: ['slug_da_etapa'], include_won: bool, include_lost: bool} (SO 1 funil por campanha); 'ConversationAttribute' {key, value, operator}; 'ContactLabel' {id} (etiqueta de CONTATO); 'ContactAttribute' {key, value, operator}; 'CardAttribute' {key, value, operator} (atributo do card Kanban); 'AgentTeam' {assignee_ids: [], team_ids: [], assignee_mode?, team_mode?} (responsavel atual OU time da conversa; assignee_mode 'none' = conversa SEM responsavel ('Sem atendente'), 'any' = com qualquer responsavel; team_mode 'none'|'any' igual para time; ausente/'specific' = usa os ids. Vale qualquer conversa do contato. Atendente e time SEMPRE somam, mesmo em blocos AgentTeam separados). OPERADOR (28/07/2026): as tres secoes de atributo (ConversationAttribute, ContactAttribute, CardAttribute) aceitam `operator` com 7 valores: eq (padrao), neq, contains, not_contains, starts_with, present, blank. Em `present`/`blank` NAO se manda `value`; nos outros cinco, secao SEM `value` e DESCARTADA em silencio e o publico muda sem aviso nenhum. Vocabulario PROPRIO da campanha: `equal_to`/`is_present` (dos filtros de conversa) NAO existem aqui e caem em igualdade exata, tambem sem erro. `neq` e `not_contains` INCLUEM de proposito quem nao tem o atributo preenchido. Nos operadores de TEXTO (`contains`, `not_contains`, `starts_with`) maiuscula/minuscula NAO importam; ja `eq`/`neq` comparam EXATO — \"Ativo\" NAO casa com \"ativo\". Nos tres de texto, `%`/`_` digitados valem como texto normal, nunca como curinga. OBRIGATORIO em campanha one-off. Use exatamente as MESMAS secoes que voce passou em lionchat_campaigns_estimate_audience — estimar com um tipo e criar com outro entrega um publico diferente do numero que voce mostrou."
|
|
21903
22120
|
},
|
|
21904
22121
|
{
|
|
21905
22122
|
"name": "audience_mode",
|
|
@@ -21948,7 +22165,7 @@
|
|
|
21948
22165
|
"type": "object",
|
|
21949
22166
|
"location": "body",
|
|
21950
22167
|
"required": false,
|
|
21951
|
-
"description": "Regras da campanha (hash aberto). Carrega: 'audience_mode' ('sum'|'all', combinacao das secoes de publico) e 'exclusion' (array no MESMO formato do audience — publico a negativar/excluir do disparo). Ex.: {\"audience_mode\":\"sum\",\"exclusion\":[{\"type\":\"ContactLabel\",\"id\":12}]}. audience_mode top-level so vale no estimate_audience; ao criar/editar ele PRECISA ir aqui dentro. A `exclusion` usa o MESMO formato e os MESMOS 7 tipos do audience, inclusive o `operator` nas secoes de atributo."
|
|
22168
|
+
"description": "Regras da campanha (hash aberto). Carrega: 'audience_mode' ('sum'|'all', combinacao das secoes de publico) e 'exclusion' (array no MESMO formato do audience — publico a negativar/excluir do disparo). Ex.: {\"audience_mode\":\"sum\",\"exclusion\":[{\"type\":\"ContactLabel\",\"id\":12}]}. audience_mode top-level so vale no estimate_audience; ao criar/editar ele PRECISA ir aqui dentro. A `exclusion` usa o MESMO formato e os MESMOS 7 tipos do audience, inclusive o `operator` nas secoes de atributo. A exclusion e LISTA de objetos (objeto unico vira lista de um; texto e recusado com 422)."
|
|
21952
22169
|
},
|
|
21953
22170
|
{
|
|
21954
22171
|
"name": "template_params",
|
|
@@ -22034,7 +22251,7 @@
|
|
|
22034
22251
|
"type": "array",
|
|
22035
22252
|
"location": "body",
|
|
22036
22253
|
"required": false,
|
|
22037
|
-
"description": "Lista de secoes do publico-alvo (uniao/intersecao conforme audience_mode). Sao 7 tipos: 'Label' {id} (etiqueta de CONVERSA); 'Funnel' {id, stages: ['slug_da_etapa'], include_won: bool, include_lost: bool} (SO 1 funil por campanha); 'ConversationAttribute' {key, value, operator}; 'ContactLabel' {id} (etiqueta de CONTATO); 'ContactAttribute' {key, value, operator}; 'CardAttribute' {key, value, operator} (atributo do card Kanban); 'AgentTeam' {assignee_ids: [], team_ids: []} (responsavel atual OU time da conversa). OPERADOR (28/07/2026): as tres secoes de atributo (ConversationAttribute, ContactAttribute, CardAttribute) aceitam `operator` com 7 valores: eq (padrao), neq, contains, not_contains, starts_with, present, blank. Em `present`/`blank` NAO se manda `value`; nos outros cinco, secao SEM `value` e DESCARTADA em silencio e o publico muda sem aviso nenhum. Vocabulario PROPRIO da campanha: `equal_to`/`is_present` (dos filtros de conversa) NAO existem aqui e caem em igualdade exata, tambem sem erro. `neq` e `not_contains` INCLUEM de proposito quem nao tem o atributo preenchido. Nos operadores de TEXTO (`contains`, `not_contains`, `starts_with`) maiuscula/minuscula NAO importam; ja `eq`/`neq` comparam EXATO — \"Ativo\" NAO casa com \"ativo\". Nos tres de texto, `%`/`_` digitados valem como texto normal, nunca como curinga. OBRIGATORIO em campanha one-off. Use exatamente as MESMAS secoes que voce passou em lionchat_campaigns_estimate_audience — estimar com um tipo e criar com outro entrega um publico diferente do numero que voce mostrou."
|
|
22254
|
+
"description": "LISTA de objetos — cada secao e um OBJETO com type: [{\"type\": \"Label\", \"id\": 12}, {\"type\": \"ContactAttribute\", \"key\": \"plano\", \"operator\": \"eq\", \"value\": \"Premium\"}]; uma secao unica mandada como objeto vira lista de um; texto ou numero no lugar da lista e RECUSADO (422). Lista de secoes do publico-alvo (uniao/intersecao conforme audience_mode). Sao 7 tipos: 'Label' {id} (etiqueta de CONVERSA); 'Funnel' {id, stages: ['slug_da_etapa'], include_won: bool, include_lost: bool} (SO 1 funil por campanha); 'ConversationAttribute' {key, value, operator}; 'ContactLabel' {id} (etiqueta de CONTATO); 'ContactAttribute' {key, value, operator}; 'CardAttribute' {key, value, operator} (atributo do card Kanban); 'AgentTeam' {assignee_ids: [], team_ids: [], assignee_mode?, team_mode?} (responsavel atual OU time da conversa; assignee_mode 'none' = conversa SEM responsavel ('Sem atendente'), 'any' = com qualquer responsavel; team_mode 'none'|'any' igual para time; ausente/'specific' = usa os ids. Vale qualquer conversa do contato. Atendente e time SEMPRE somam, mesmo em blocos AgentTeam separados). OPERADOR (28/07/2026): as tres secoes de atributo (ConversationAttribute, ContactAttribute, CardAttribute) aceitam `operator` com 7 valores: eq (padrao), neq, contains, not_contains, starts_with, present, blank. Em `present`/`blank` NAO se manda `value`; nos outros cinco, secao SEM `value` e DESCARTADA em silencio e o publico muda sem aviso nenhum. Vocabulario PROPRIO da campanha: `equal_to`/`is_present` (dos filtros de conversa) NAO existem aqui e caem em igualdade exata, tambem sem erro. `neq` e `not_contains` INCLUEM de proposito quem nao tem o atributo preenchido. Nos operadores de TEXTO (`contains`, `not_contains`, `starts_with`) maiuscula/minuscula NAO importam; ja `eq`/`neq` comparam EXATO — \"Ativo\" NAO casa com \"ativo\". Nos tres de texto, `%`/`_` digitados valem como texto normal, nunca como curinga. OBRIGATORIO em campanha one-off. Use exatamente as MESMAS secoes que voce passou em lionchat_campaigns_estimate_audience — estimar com um tipo e criar com outro entrega um publico diferente do numero que voce mostrou. No update a lista SUBSTITUI o publico anterior: mande todas as secoes."
|
|
22038
22255
|
},
|
|
22039
22256
|
{
|
|
22040
22257
|
"name": "audience_mode",
|
|
@@ -22132,7 +22349,7 @@
|
|
|
22132
22349
|
"type": "array",
|
|
22133
22350
|
"location": "body",
|
|
22134
22351
|
"required": true,
|
|
22135
|
-
"description": "Lista de secoes do publico-alvo (uniao/intersecao conforme audience_mode). Sao 7 tipos: 'Label' {id} (etiqueta de CONVERSA); 'Funnel' {id, stages: ['slug_da_etapa'], include_won: bool, include_lost: bool} (SO 1 funil por campanha); 'ConversationAttribute' {key, value, operator}; 'ContactLabel' {id} (etiqueta de CONTATO); 'ContactAttribute' {key, value, operator}; 'CardAttribute' {key, value, operator} (atributo do card Kanban); 'AgentTeam' {assignee_ids: [], team_ids: []} (responsavel atual OU time da conversa). OPERADOR (28/07/2026): as tres secoes de atributo (ConversationAttribute, ContactAttribute, CardAttribute) aceitam `operator` com 7 valores: eq (padrao), neq, contains, not_contains, starts_with, present, blank. Em `present`/`blank` NAO se manda `value`; nos outros cinco, secao SEM `value` e DESCARTADA em silencio e o publico muda sem aviso nenhum. Vocabulario PROPRIO da campanha: `equal_to`/`is_present` (dos filtros de conversa) NAO existem aqui e caem em igualdade exata, tambem sem erro. `neq` e `not_contains` INCLUEM de proposito quem nao tem o atributo preenchido. Nos operadores de TEXTO (`contains`, `not_contains`, `starts_with`) maiuscula/minuscula NAO importam; ja `eq`/`neq` comparam EXATO — \"Ativo\" NAO casa com \"ativo\". Nos tres de texto, `%`/`_` digitados valem como texto normal, nunca como curinga."
|
|
22352
|
+
"description": "LISTA de objetos — cada secao e um OBJETO com type: [{\"type\": \"Label\", \"id\": 12}, {\"type\": \"ContactAttribute\", \"key\": \"plano\", \"operator\": \"eq\", \"value\": \"Premium\"}]; nunca numero solto nem objeto unico (objeto no lugar da lista nao e lido como publico). Lista de secoes do publico-alvo (uniao/intersecao conforme audience_mode). Sao 7 tipos: 'Label' {id} (etiqueta de CONVERSA); 'Funnel' {id, stages: ['slug_da_etapa'], include_won: bool, include_lost: bool} (SO 1 funil por campanha); 'ConversationAttribute' {key, value, operator}; 'ContactLabel' {id} (etiqueta de CONTATO); 'ContactAttribute' {key, value, operator}; 'CardAttribute' {key, value, operator} (atributo do card Kanban); 'AgentTeam' {assignee_ids: [], team_ids: [], assignee_mode?, team_mode?} (responsavel atual OU time da conversa; assignee_mode 'none' = conversa SEM responsavel ('Sem atendente'), 'any' = com qualquer responsavel; team_mode 'none'|'any' igual para time; ausente/'specific' = usa os ids. Vale qualquer conversa do contato. Atendente e time SEMPRE somam, mesmo em blocos AgentTeam separados). OPERADOR (28/07/2026): as tres secoes de atributo (ConversationAttribute, ContactAttribute, CardAttribute) aceitam `operator` com 7 valores: eq (padrao), neq, contains, not_contains, starts_with, present, blank. Em `present`/`blank` NAO se manda `value`; nos outros cinco, secao SEM `value` e DESCARTADA em silencio e o publico muda sem aviso nenhum. Vocabulario PROPRIO da campanha: `equal_to`/`is_present` (dos filtros de conversa) NAO existem aqui e caem em igualdade exata, tambem sem erro. `neq` e `not_contains` INCLUEM de proposito quem nao tem o atributo preenchido. Nos operadores de TEXTO (`contains`, `not_contains`, `starts_with`) maiuscula/minuscula NAO importam; ja `eq`/`neq` comparam EXATO — \"Ativo\" NAO casa com \"ativo\". Nos tres de texto, `%`/`_` digitados valem como texto normal, nunca como curinga."
|
|
22136
22353
|
},
|
|
22137
22354
|
{
|
|
22138
22355
|
"name": "audience_mode",
|
|
@@ -22153,7 +22370,7 @@
|
|
|
22153
22370
|
"type": "array",
|
|
22154
22371
|
"location": "body",
|
|
22155
22372
|
"required": false,
|
|
22156
|
-
"description": "Publico a EXCLUIR/negativar antes de estimar (mesmo formato do 'audience': lista de secoes por tipo). O contador desconta quem cair na exclusao. Tipos aceitos iguais aos do audience (Label, Funnel, ConversationAttribute, ContactLabel, ContactAttribute, CardAttribute, AgentTeam). As secoes de atributo aceitam o mesmo `operator` do audience (eq, neq, contains, not_contains, starts_with, present, blank)."
|
|
22373
|
+
"description": "LISTA de objetos (mesmo formato do audience, ex.: [{\"type\": \"ContactLabel\", \"id\": 12}]). Publico a EXCLUIR/negativar antes de estimar (mesmo formato do 'audience': lista de secoes por tipo). O contador desconta quem cair na exclusao. Tipos aceitos iguais aos do audience (Label, Funnel, ConversationAttribute, ContactLabel, ContactAttribute, CardAttribute, AgentTeam). As secoes de atributo aceitam o mesmo `operator` do audience (eq, neq, contains, not_contains, starts_with, present, blank). AgentTeam aceita os mesmos assignee_mode/team_mode ('none'|'any') do audience."
|
|
22157
22374
|
}
|
|
22158
22375
|
],
|
|
22159
22376
|
"returns": "{ estimated_count: <int>, limit_info: { tier, cap, used_24h, remaining, will_send_now, batches_preview: [{date, count}] } } — NAO existe o campo `count`. `limit_info` so vem preenchido quando se manda `inbox_id` de caixa WhatsApp OFICIAL (Cloud): `cap` = teto de contatos NOVOS por dia que a Meta libera, `used_24h` = quanto ja foi usado nas ultimas 24h, `remaining` = o que sobra hoje, `will_send_now` = quanto sai agora e `batches_preview` = o cronograma dia a dia do restante. Em caixa QR Code/SMS, ou sem inbox_id, `tier`/`cap`/`used_24h`/`remaining` vem NULOS, `batches_preview` vem VAZIO e `will_send_now` e a lista inteira — nulo NAO significa \"sem limite\". Sempre mostre o teto do dia junto com o numero, senao voce promete 5.000 disparos num numero que so fala com 2.000.",
|
|
@@ -24388,7 +24605,7 @@
|
|
|
24388
24605
|
"type": "object",
|
|
24389
24606
|
"location": "body",
|
|
24390
24607
|
"required": false,
|
|
24391
|
-
"description": "Mapa {
|
|
24608
|
+
"description": "Mapa {<evento>: '<recurso COMPLETO da acao de conversao>'}. O VALOR e o recurso inteiro, nunca so o numero: 'customers/<customer_id sem hifen>/conversionActions/<id da acao>'. Ex.: {\"Lead\": \"customers/1234567890/conversionActions/987654321\", \"Purchase\": \"customers/1234567890/conversionActions/987654322\"}. Pegue o valor pronto no campo resource_name de lionchat_google_ads_integrations_list_conversion_actions. O valor vai CRU pro Google: numero solto e recusado la, e 10 recusas travam a integracao por 1h. Eventos da tela: Lead, Purchase, Contact, CompleteRegistration, Subscribe, Schedule (a acao send_conversion do fluxo so aceita nome que esteja neste mapa). O update SUBSTITUI o mapa inteiro: leia antes com lionchat_google_ads_integrations_show e reenvie TODOS os eventos."
|
|
24392
24609
|
}
|
|
24393
24610
|
],
|
|
24394
24611
|
"returns": "{ id, ... }",
|
|
@@ -24525,7 +24742,7 @@
|
|
|
24525
24742
|
"type": "object",
|
|
24526
24743
|
"location": "body",
|
|
24527
24744
|
"required": false,
|
|
24528
|
-
"description": "Mapa de
|
|
24745
|
+
"description": "Mapa {<evento>: {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO so com essas 3 chaves (outra chave ou valor que nao seja objeto = 422). Ex.: {\"pagamento_confirmado\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": false}}. Eventos: cobranca_criada, vencimento_7d, vencimento_3d, vencimento_1d, vencimento_hoje, vencido, vencido_3d, vencido_7d, vencido_15d, vencido_30d, pagamento_confirmado, pagamento_parcial, cancelado, renegociado. ACHADO 18/09 (lendo o codigo, nao conferido no banco): o disparo compara o mapa com o STATUS da parcela, e nao com o nome do evento — o mapeamento pode nao acionar nada; confira em lionchat_conta_azul_integrations_events antes de prometer ao cliente."
|
|
24529
24746
|
}
|
|
24530
24747
|
],
|
|
24531
24748
|
"returns": "{ id, status: 'pending' } (201)",
|
|
@@ -24563,7 +24780,7 @@
|
|
|
24563
24780
|
"type": "object",
|
|
24564
24781
|
"location": "body",
|
|
24565
24782
|
"required": false,
|
|
24566
|
-
"description": "
|
|
24783
|
+
"description": "Mapa {<evento>: {automation_id, flow_id, first_purchase_only}} — cada valor e um OBJETO so com essas 3 chaves (outra chave ou valor que nao seja objeto = 422). Ex.: {\"pagamento_confirmado\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": false}}. Eventos: cobranca_criada, vencimento_7d, vencimento_3d, vencimento_1d, vencimento_hoje, vencido, vencido_3d, vencido_7d, vencido_15d, vencido_30d, pagamento_confirmado, pagamento_parcial, cancelado, renegociado. ACHADO 18/09 (lendo o codigo, nao conferido no banco): o disparo compara o mapa com o STATUS da parcela, e nao com o nome do evento — o mapeamento pode nao acionar nada; confira em lionchat_conta_azul_integrations_events antes de prometer ao cliente. O update SUBSTITUI o mapa inteiro: leia com lionchat_conta_azul_integrations_show e reenvie tudo."
|
|
24567
24784
|
}
|
|
24568
24785
|
],
|
|
24569
24786
|
"returns": "{ id, ... }",
|
|
@@ -24784,14 +25001,14 @@
|
|
|
24784
25001
|
"type": "array",
|
|
24785
25002
|
"location": "body",
|
|
24786
25003
|
"required": false,
|
|
24787
|
-
"description": "
|
|
25004
|
+
"description": "LISTA de textos. Valores aceitos (em portugues): recebimentos, pagamentos, vendas, os, contratos, clientes, fiscais. Ex.: [\"recebimentos\", \"vendas\"]. Outro valor (ex.: receivables, sales) = 422."
|
|
24788
25005
|
},
|
|
24789
25006
|
{
|
|
24790
25007
|
"name": "event_mapping",
|
|
24791
25008
|
"type": "object",
|
|
24792
25009
|
"location": "body",
|
|
24793
25010
|
"required": false,
|
|
24794
|
-
"description": "Mapa de
|
|
25011
|
+
"description": "Mapa AGRUPADO POR CATEGORIA: {<categoria>: {<evento>: {automation_id, flow_id, first_purchase_only}}}. Ex.: {\"recebimentos\": {\"pagamento_confirmado\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": false}}}. Cada valor e um OBJETO so com essas 3 chaves (outra chave, categoria fora da lista ou valor que nao seja objeto = 422). Eventos por categoria — recebimentos: cobranca_criada, boleto_gerado, pix_gerado, vencimento_3d, vencimento_1d, pagamento_confirmado, cobranca_vencida, cobranca_cancelada; pagamentos: despesa_criada, despesa_paga, despesa_vencida, despesa_cancelada; vendas: pedido_criado, pedido_faturado, pedido_cancelado, pedido_etapa_alterada; os: os_criada, os_faturada, os_concluida, os_cancelada; contratos: contrato_criado, contrato_faturado, contrato_cancelado; clientes: cliente_cadastrado, fornecedor_cadastrado; fiscais: nfe_autorizada, nfe_cancelada, nfse_emitida, nfse_cancelada. ACHADO 18/09 (lendo o codigo, em conserto): o disparo procura o mapa pelo STATUS do titulo, e nao por categoria+evento — hoje este mapeamento pode nao acionar nada; confira em lionchat_omie_integrations_events antes de prometer o disparo ao cliente."
|
|
24795
25012
|
}
|
|
24796
25013
|
],
|
|
24797
25014
|
"returns": "{ id, status } (201)",
|
|
@@ -24843,14 +25060,14 @@
|
|
|
24843
25060
|
"type": "array",
|
|
24844
25061
|
"location": "body",
|
|
24845
25062
|
"required": false,
|
|
24846
|
-
"description": "
|
|
25063
|
+
"description": "LISTA de textos. Valores aceitos (em portugues): recebimentos, pagamentos, vendas, os, contratos, clientes, fiscais. Ex.: [\"recebimentos\", \"vendas\"]. Outro valor (ex.: receivables, sales) = 422. SUBSTITUI a lista inteira — para ligar/desligar UMA categoria use lionchat_omie_integrations_toggle_category."
|
|
24847
25064
|
},
|
|
24848
25065
|
{
|
|
24849
25066
|
"name": "event_mapping",
|
|
24850
25067
|
"type": "object",
|
|
24851
25068
|
"location": "body",
|
|
24852
25069
|
"required": false,
|
|
24853
|
-
"description": "
|
|
25070
|
+
"description": "Mapa AGRUPADO POR CATEGORIA: {<categoria>: {<evento>: {automation_id, flow_id, first_purchase_only}}}. Ex.: {\"recebimentos\": {\"pagamento_confirmado\": {\"automation_id\": 12, \"flow_id\": null, \"first_purchase_only\": false}}}. Cada valor e um OBJETO so com essas 3 chaves (outra chave, categoria fora da lista ou valor que nao seja objeto = 422). Eventos por categoria — recebimentos: cobranca_criada, boleto_gerado, pix_gerado, vencimento_3d, vencimento_1d, pagamento_confirmado, cobranca_vencida, cobranca_cancelada; pagamentos: despesa_criada, despesa_paga, despesa_vencida, despesa_cancelada; vendas: pedido_criado, pedido_faturado, pedido_cancelado, pedido_etapa_alterada; os: os_criada, os_faturada, os_concluida, os_cancelada; contratos: contrato_criado, contrato_faturado, contrato_cancelado; clientes: cliente_cadastrado, fornecedor_cadastrado; fiscais: nfe_autorizada, nfe_cancelada, nfse_emitida, nfse_cancelada. ACHADO 18/09 (lendo o codigo, em conserto): o disparo procura o mapa pelo STATUS do titulo, e nao por categoria+evento — hoje este mapeamento pode nao acionar nada; confira em lionchat_omie_integrations_events antes de prometer o disparo ao cliente. O update SUBSTITUI o mapa inteiro: leia com lionchat_omie_integrations_show e reenvie tudo."
|
|
24854
25071
|
}
|
|
24855
25072
|
],
|
|
24856
25073
|
"returns": "{ id, ... }",
|
|
@@ -24945,7 +25162,7 @@
|
|
|
24945
25162
|
"type": "string",
|
|
24946
25163
|
"location": "body",
|
|
24947
25164
|
"required": true,
|
|
24948
|
-
"description": "
|
|
25165
|
+
"description": "recebimentos | pagamentos | vendas | os | contratos | clientes | fiscais (em portugues; outro valor = 422)"
|
|
24949
25166
|
},
|
|
24950
25167
|
{
|
|
24951
25168
|
"name": "enabled",
|
|
@@ -25602,7 +25819,7 @@
|
|
|
25602
25819
|
"type": "object",
|
|
25603
25820
|
"location": "body",
|
|
25604
25821
|
"required": false,
|
|
25605
|
-
"description": "
|
|
25822
|
+
"description": "Objeto de configuracao do app. ATENCAO: SUBSTITUI o objeto inteiro — mandar so api_key APAGA fallback_api_keys e as demais chaves. Leia antes com lionchat_integrations_hooks_show e reenvie tudo. OpenAI: {\"api_key\": \"sk-...\", \"fallback_api_keys\": [\"sk-...\"]} (chaves revalidadas ao trocar)."
|
|
25606
25823
|
},
|
|
25607
25824
|
{
|
|
25608
25825
|
"name": "status",
|
|
@@ -25646,7 +25863,7 @@
|
|
|
25646
25863
|
"method": "GET",
|
|
25647
25864
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations",
|
|
25648
25865
|
"title": "Listar Integração e-Clínica",
|
|
25649
|
-
"description": "Lista a integração e-Clínica da conta (no máximo 1 por conta) com id, status e configurações. Use PRIMEIRO para descobrir o {id} exigido pelas ferramentas de histórico de lembretes. Eventos mapeáveis incluem (23/07) os novos cliente_inclusao_pagamento ('Inclusão de cobrança' — cobrança/carnê criado, ainda não pago; grava eclinica_ultima_cobranca_valor/vencimento/descricao no contato) e controle_laboratorio_novo ('Controle de laboratório' — grava eclinica_laboratorio_data_prevista/data_moldagem/data_entrega/situacao). O mapeamento evento→flow É EDITÁVEL via MCP desde 31/08/2026 — use lionchat_eclinica_integrations_update (ele SUBSTITUI o mapeamento inteiro: leia aqui primeiro e devolva completo). [2026-07-25] Cada linha de reminder_config traz agora event_type ('agendamento' padrao, 'controle_laboratorio_novo' para lembrete de laboratorio/medicacao, 'cliente_inclusao_pagamento' para lembrete de vencimento de cobranca), dispatch_time (hora do disparo, OBRIGATORIA: 'HH:MM' fixo ou formula Liquid com variavel de conta/contato) e o filtro opcional filter_field/filter_operator/filter_value. Os lembretes SAO editaveis via MCP desde 31/08/2026 — use lionchat_eclinica_integrations_update (ele SUBSTITUI a lista inteira: leia aqui primeiro e devolva completa). Cada unidade em units[] traz tambem settings {} (18/08). O atributo eclinica_cor (cor da agenda, hex com #) virou campo fresco dos lembretes: filtravel por filter_field e disponivel como variavel {{cor}}. LEMBRETE POR AUTOMACAO (25/08): cada entrada de reminder_config aceita `automation_id` alem do `flow_id` — pelo menos um dos dois (422 sem nenhum); com os DOIS preenchidos a AUTOMACAO vence no disparo. A automacao precisa ser da propria conta (422 senao). ALERTA de regra de negocio ao configurar: o caminho por automacao RODA AS ACOES SEM AVALIAR AS CONDICOES da automacao
|
|
25866
|
+
"description": "Lista a integração e-Clínica da conta (no máximo 1 por conta) com id, status e configurações. Use PRIMEIRO para descobrir o {id} exigido pelas ferramentas de histórico de lembretes. Eventos mapeáveis incluem (23/07) os novos cliente_inclusao_pagamento ('Inclusão de cobrança' — cobrança/carnê criado, ainda não pago; grava eclinica_ultima_cobranca_valor/vencimento/descricao no contato) e controle_laboratorio_novo ('Controle de laboratório' — grava eclinica_laboratorio_data_prevista/data_moldagem/data_entrega/situacao). O mapeamento evento→flow É EDITÁVEL via MCP desde 31/08/2026 — use lionchat_eclinica_integrations_update (ele SUBSTITUI o mapeamento inteiro: leia aqui primeiro e devolva completo). [2026-07-25] Cada linha de reminder_config traz agora event_type ('agendamento' padrao, 'controle_laboratorio_novo' para lembrete de laboratorio/medicacao, 'cliente_inclusao_pagamento' para lembrete de vencimento de cobranca), dispatch_time (hora do disparo, OBRIGATORIA: 'HH:MM' fixo ou formula Liquid com variavel de conta/contato) e o filtro opcional filter_field/filter_operator/filter_value. Os lembretes SAO editaveis via MCP desde 31/08/2026 — use lionchat_eclinica_integrations_update (ele SUBSTITUI a lista inteira: leia aqui primeiro e devolva completa). Cada unidade em units[] traz tambem settings {} (18/08). O atributo eclinica_cor (cor da agenda, hex com #) virou campo fresco dos lembretes: filtravel por filter_field e disponivel como variavel {{cor}}. LEMBRETE POR AUTOMACAO (25/08): cada entrada de reminder_config aceita `automation_id` alem do `flow_id` — pelo menos um dos dois (422 sem nenhum); com os DOIS preenchidos a AUTOMACAO vence no disparo. A automacao precisa ser da propria conta (422 senao). ALERTA de regra de negocio ao configurar: o caminho por automacao RODA AS ACOES SEM AVALIAR AS CONDICOES da automacao. Desde 17/09/2026 os DOIS caminhos (fluxo e automacao) mandam um aviso POR CONSULTA: paciente com duas consultas no dia (ou dois pacientes no mesmo celular) recebe um aviso para cada uma, ~10 min um do outro (fila por contato). Quem quer so um por dia monta no FLUXO (condicao num atributo com {{data_consulta}}); na automacao nao da, porque as condicoes dela nao sao avaliadas — avise o cliente antes de trocar fluxo por automacao.",
|
|
25650
25867
|
"category": "Integracoes",
|
|
25651
25868
|
"params": [],
|
|
25652
25869
|
"returns": "200 {payload: {eclinica_integrations: [...]}}",
|
|
@@ -25824,7 +26041,7 @@
|
|
|
25824
26041
|
"method": "GET",
|
|
25825
26042
|
"path": "/api/v1/accounts/{account_id}/contacts/{contact_id}/documents",
|
|
25826
26043
|
"title": "Documentos do Contato",
|
|
25827
|
-
"description": "Central de arquivos do contato: uploads diretos + espelho dos anexos dos cards Kanban + das conversas (só imagem/documento). Dedup por arquivo.",
|
|
26044
|
+
"description": "Central de arquivos do contato: uploads diretos + espelho dos anexos dos cards Kanban + das conversas (só imagem/documento). Dedup por arquivo. (25/09) O mesmo arquivo em varias origens vem UMA vez (representado pelo upload da ficha, se houver); cada item traz contacts [{id,name}]. Contrato assinado so aparece para quem pode ver contratos; arquivo de compromisso particular de outra pessoa nao aparece. mirror aceita tambem anexo de compromisso e de contrato.",
|
|
25828
26045
|
"category": "Documentos do Contato",
|
|
25829
26046
|
"params": [
|
|
25830
26047
|
{
|
|
@@ -26095,7 +26312,7 @@
|
|
|
26095
26312
|
"method": "PATCH",
|
|
26096
26313
|
"path": "/api/v1/accounts/{account_id}/inboxes/{id}",
|
|
26097
26314
|
"title": "Atualizar Caixa de Entrada",
|
|
26098
|
-
"description": "Atualiza configurações da caixa (nome, saudação, atribuição automática, atributos extras). MUDANÇA DE CONFIG — confirme com o usuário antes. additional_attributes.mark_as_seen (bool, default true,
|
|
26315
|
+
"description": "Atualiza configurações da caixa (nome, saudação, atribuição automática, atributos extras). MUDANÇA DE CONFIG — confirme com o usuário antes. channel.additional_attributes.mark_as_seen (bool, default true, WhatsApp oficial, 2026-06-11): envia o visto/check azul quando o agente abre a conversa — desligar em coexistência app+API. channel.additional_attributes SOMA no 1o nivel nas caixas de WhatsApp/Instagram/Facebook/TikTok (troca inteiro so na caixa de API); no QR Code mande SO as chaves da tela (accept_*, reject_calls, reject_calls_message, mark_as_seen) com true/false de verdade — o resto e interno do sistema. Email (sincronizacao de mao dupla, admin, via objeto channel): two_way_sync_enabled, sync_sent, sync_deletions, sync_read, delete_strategy. CAIXA OFICIAL CRIADA A MAO (26/08): channel.provider_config aceita phone_number_id, business_account_id e api_key — mas o objeto SUBSTITUI o salvo: SEMPRE mande o provider_config INTEIRO (leia o atual antes e reenvie tudo com o campo alterado), senao webhook_verify_token e a marca source sao APAGADOS em silencio e a caixa para de receber. Os 3 campos sao validados JUNTOS na Meta a cada gravacao (422 'Invalid Credentials' = algum dos tres errado ou chave vencida). O telefone da caixa e somente leitura.",
|
|
26099
26316
|
"category": "Caixas de Entrada",
|
|
26100
26317
|
"params": [
|
|
26101
26318
|
{
|
|
@@ -26141,11 +26358,11 @@
|
|
|
26141
26358
|
"description": "Bloco de configuracao da Distribuicao Automatica da propria caixa (29/07/2026): { assign_offline_agents (bool — distribuir tambem para quem esta offline), fair_distribution_limit (int — quantas conversas o robo entrega a cada atendente por janela), fair_distribution_window (int — tamanho da janela em SEGUNDOS) }. ATENCAO: o envio SUBSTITUI o bloco INTEIRO — reenvie as chaves que ja existem, senao elas somem. Chave fora dessas 3 e DESCARTADA em silencio (responde 200 e nada muda). Aqui `fair_distribution_limit: 0` E aceito e significa SEM FREIO (na Politica de Atribuicao o 0 e recusado). So vale quando a caixa NAO tem politica vinculada — com politica, este bloco e ignorado e a secao some da tela da caixa."
|
|
26142
26359
|
},
|
|
26143
26360
|
{
|
|
26144
|
-
"name": "additional_attributes",
|
|
26361
|
+
"name": "channel.additional_attributes",
|
|
26145
26362
|
"type": "object",
|
|
26146
26363
|
"location": "body",
|
|
26147
26364
|
"required": false,
|
|
26148
|
-
"description": "Atributos extras (
|
|
26365
|
+
"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_status, accept_groups, accept_channels, accept_broadcast, reject_calls, mark_as_seen (true/false de verdade, nunca \"false\" em texto) e reject_calls_message (texto); 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}."
|
|
26149
26366
|
},
|
|
26150
26367
|
{
|
|
26151
26368
|
"name": "out_of_office_enabled",
|
|
@@ -27286,10 +27503,10 @@
|
|
|
27286
27503
|
},
|
|
27287
27504
|
{
|
|
27288
27505
|
"name": "reassignments",
|
|
27289
|
-
"type": "
|
|
27506
|
+
"type": "array",
|
|
27290
27507
|
"location": "body",
|
|
27291
27508
|
"required": false,
|
|
27292
|
-
"description": "
|
|
27509
|
+
"description": "LISTA de objetos — cada item e um OBJETO {agent_id, funnel_id, target_agent_id}, um por (agente removido x funil). Ex.: [{\"agent_id\": 12, \"funnel_id\": 31, \"target_agent_id\": 5}]. Monte a partir de lionchat_team_members_kanban_reassignment_preview: para cada agente e cada funil da previa, escolha target_agent_id entre os eligible_targets. Funil com has_target=false dispensa item (os cards ficam sem dono). Destino ausente ou fora dos eligible_targets = 422 'reassignment_failed' e NADA e aplicado. Objeto unico no lugar da lista nao funciona."
|
|
27293
27510
|
}
|
|
27294
27511
|
],
|
|
27295
27512
|
"returns": "200 com o time atualizado | 422 { error: 'reassignment_failed', reason } (atômico — nada muda)",
|
|
@@ -27649,6 +27866,150 @@
|
|
|
27649
27866
|
"lionchat_kanban_items_list"
|
|
27650
27867
|
]
|
|
27651
27868
|
},
|
|
27869
|
+
{
|
|
27870
|
+
"id": "lionchat_kanban_sales_reconciliation_preview",
|
|
27871
|
+
"method": "POST",
|
|
27872
|
+
"path": "/api/v1/accounts/{account_id}/kanban_items/sales_reconciliation/preview",
|
|
27873
|
+
"title": "Conferir planilha de vendas",
|
|
27874
|
+
"description": "CONFERE uma planilha de vendas contra os cards de um funil e NAO GRAVA NADA. Devolve, linha a linha, o que aconteceria: completar um card aberto, so atualizar o valor de um card ja ganho, criar card pra quem nao tem, conferir a mao (card marcado como perdido) ou erro da linha. SEMPRE chame isto antes de `lionchat_kanban_sales_reconciliation_apply` e mostre o resumo pra pessoa confirmar. O MCP NAO sobe arquivo: mande as linhas da planilha em `rows` (lista de objetos). Se a pessoa anexar uma planilha na conversa, LEIA o arquivo e monte as linhas voce mesmo. Quem prefere a tela usa Kanban > botao azul + > Importar vendas. Cada item aceita: phone (obrigatorio, COM codigo do pais, ex.: 5511999887766), value (obrigatorio, valor da venda; aceita 1500, '1500,00', 'R$ 1.500,00'), sale_date (obrigatorio, data da VENDA; aceita '01/08/2026' ou '2026-08-01'), name, email, agent (nome ou e-mail do vendedor) e order_id.",
|
|
27875
|
+
"category": "Itens",
|
|
27876
|
+
"params": [
|
|
27877
|
+
{
|
|
27878
|
+
"name": "account_id",
|
|
27879
|
+
"type": "integer",
|
|
27880
|
+
"location": "path",
|
|
27881
|
+
"required": true,
|
|
27882
|
+
"description": "ID da conta"
|
|
27883
|
+
},
|
|
27884
|
+
{
|
|
27885
|
+
"name": "funnel_id",
|
|
27886
|
+
"type": "integer",
|
|
27887
|
+
"location": "body",
|
|
27888
|
+
"required": true,
|
|
27889
|
+
"description": "ID do funil onde os cards vivem"
|
|
27890
|
+
},
|
|
27891
|
+
{
|
|
27892
|
+
"name": "inbox_id",
|
|
27893
|
+
"type": "integer",
|
|
27894
|
+
"location": "body",
|
|
27895
|
+
"required": true,
|
|
27896
|
+
"description": "Caixa de entrada usada pra criar contato e conversa de quem ainda nao tem card"
|
|
27897
|
+
},
|
|
27898
|
+
{
|
|
27899
|
+
"name": "rows",
|
|
27900
|
+
"type": "array",
|
|
27901
|
+
"location": "body",
|
|
27902
|
+
"required": true,
|
|
27903
|
+
"description": "Linhas da planilha. Cada item aceita: phone (obrigatorio, COM codigo do pais, ex.: 5511999887766), value (obrigatorio, valor da venda; aceita 1500, '1500,00', 'R$ 1.500,00'), sale_date (obrigatorio, data da VENDA; aceita '01/08/2026' ou '2026-08-01'), name, email, agent (nome ou e-mail do vendedor) e order_id."
|
|
27904
|
+
}
|
|
27905
|
+
],
|
|
27906
|
+
"returns": "{ total, erros, conversoes, conversao_ligada, pos_venda, automacoes_de_ganho, responsavel, contagem: { completa, ja_ganho, cria, conferir, erro }, linhas: [...] } — nada e gravado.",
|
|
27907
|
+
"common_use_cases": [
|
|
27908
|
+
"Conferir a planilha do financeiro antes de aplicar",
|
|
27909
|
+
"Saber quantas vendas viram conversao e quantos cards de pos-venda nascem",
|
|
27910
|
+
"Achar as linhas com telefone sem codigo do pais"
|
|
27911
|
+
],
|
|
27912
|
+
"related_tools": [
|
|
27913
|
+
"lionchat_kanban_sales_reconciliation_apply",
|
|
27914
|
+
"lionchat_kanban_sales_reconciliation_status",
|
|
27915
|
+
"lionchat_funnels_list"
|
|
27916
|
+
]
|
|
27917
|
+
},
|
|
27918
|
+
{
|
|
27919
|
+
"id": "lionchat_kanban_sales_reconciliation_apply",
|
|
27920
|
+
"method": "POST",
|
|
27921
|
+
"path": "/api/v1/accounts/{account_id}/kanban_items/sales_reconciliation/apply",
|
|
27922
|
+
"title": "Aplicar planilha de vendas",
|
|
27923
|
+
"description": "APLICA a planilha de vendas: grava o valor no card e marca o GANHO com a DATA DA VENDA (nao com a data de hoje), pra o relatorio de faturamento contar a venda no mes certo. Card aberto e completado; card ja ganho recebe SO o valor (a data do ganho dele nao muda); card marcado como perdido nao e tocado. Roda em segundo plano — acompanhe com `lionchat_kanban_sales_reconciliation_status`. Rodar a mesma planilha duas vezes nao dobra valor nem cria card repetido. ATENCAO: `criar_sem_card: true` abre uma CONVERSA nova por card criado, e conversa nova aciona o que a conta tiver em 'Conversa criada' (automacao, fluxo, notificacao) — avise a pessoa antes de ligar isso numa planilha grande. O MCP NAO sobe arquivo: mande as linhas da planilha em `rows` (lista de objetos). Se a pessoa anexar uma planilha na conversa, LEIA o arquivo e monte as linhas voce mesmo. Quem prefere a tela usa Kanban > botao azul + > Importar vendas. Cada item aceita: phone (obrigatorio, COM codigo do pais, ex.: 5511999887766), value (obrigatorio, valor da venda; aceita 1500, '1500,00', 'R$ 1.500,00'), sale_date (obrigatorio, data da VENDA; aceita '01/08/2026' ou '2026-08-01'), name, email, agent (nome ou e-mail do vendedor) e order_id.",
|
|
27924
|
+
"category": "Itens",
|
|
27925
|
+
"params": [
|
|
27926
|
+
{
|
|
27927
|
+
"name": "account_id",
|
|
27928
|
+
"type": "integer",
|
|
27929
|
+
"location": "path",
|
|
27930
|
+
"required": true,
|
|
27931
|
+
"description": "ID da conta"
|
|
27932
|
+
},
|
|
27933
|
+
{
|
|
27934
|
+
"name": "funnel_id",
|
|
27935
|
+
"type": "integer",
|
|
27936
|
+
"location": "body",
|
|
27937
|
+
"required": true,
|
|
27938
|
+
"description": "ID do funil onde os cards vivem"
|
|
27939
|
+
},
|
|
27940
|
+
{
|
|
27941
|
+
"name": "inbox_id",
|
|
27942
|
+
"type": "integer",
|
|
27943
|
+
"location": "body",
|
|
27944
|
+
"required": true,
|
|
27945
|
+
"description": "Caixa de entrada usada pra criar contato e conversa de quem ainda nao tem card"
|
|
27946
|
+
},
|
|
27947
|
+
{
|
|
27948
|
+
"name": "rows",
|
|
27949
|
+
"type": "array",
|
|
27950
|
+
"location": "body",
|
|
27951
|
+
"required": true,
|
|
27952
|
+
"description": "Linhas da planilha. Cada item aceita: phone (obrigatorio, COM codigo do pais, ex.: 5511999887766), value (obrigatorio, valor da venda; aceita 1500, '1500,00', 'R$ 1.500,00'), sale_date (obrigatorio, data da VENDA; aceita '01/08/2026' ou '2026-08-01'), name, email, agent (nome ou e-mail do vendedor) e order_id."
|
|
27953
|
+
},
|
|
27954
|
+
{
|
|
27955
|
+
"name": "criar_sem_card",
|
|
27956
|
+
"type": "boolean",
|
|
27957
|
+
"location": "body",
|
|
27958
|
+
"required": false,
|
|
27959
|
+
"description": "Cria card (ja ganho) pra quem nao tem nenhum no funil. Padrao: false"
|
|
27960
|
+
},
|
|
27961
|
+
{
|
|
27962
|
+
"name": "stage",
|
|
27963
|
+
"type": "string",
|
|
27964
|
+
"location": "body",
|
|
27965
|
+
"required": false,
|
|
27966
|
+
"description": "Etapa onde o card novo nasce. Padrao: a primeira etapa do funil"
|
|
27967
|
+
}
|
|
27968
|
+
],
|
|
27969
|
+
"returns": "{ run_id, status: 'queued', total } — o trabalho roda em segundo plano",
|
|
27970
|
+
"common_use_cases": [
|
|
27971
|
+
"Fechar o mes com a planilha do financeiro",
|
|
27972
|
+
"Corrigir cards que o vendedor esqueceu de marcar como ganho",
|
|
27973
|
+
"Trazer o valor real da venda pro relatorio"
|
|
27974
|
+
],
|
|
27975
|
+
"related_tools": [
|
|
27976
|
+
"lionchat_kanban_sales_reconciliation_preview",
|
|
27977
|
+
"lionchat_kanban_sales_reconciliation_status"
|
|
27978
|
+
]
|
|
27979
|
+
},
|
|
27980
|
+
{
|
|
27981
|
+
"id": "lionchat_kanban_sales_reconciliation_status",
|
|
27982
|
+
"method": "GET",
|
|
27983
|
+
"path": "/api/v1/accounts/{account_id}/kanban_items/sales_reconciliation/status/{run_id}",
|
|
27984
|
+
"title": "Andamento da planilha de vendas",
|
|
27985
|
+
"description": "Acompanha a aplicacao de uma planilha de vendas ja enviada. O run_id vem de `lionchat_kanban_sales_reconciliation_apply`. Consulte de tempos em tempos ate o status virar 'completed' ou 'failed'. O registro vive 7 dias.",
|
|
27986
|
+
"category": "Itens",
|
|
27987
|
+
"params": [
|
|
27988
|
+
{
|
|
27989
|
+
"name": "account_id",
|
|
27990
|
+
"type": "integer",
|
|
27991
|
+
"location": "path",
|
|
27992
|
+
"required": true,
|
|
27993
|
+
"description": "ID da conta"
|
|
27994
|
+
},
|
|
27995
|
+
{
|
|
27996
|
+
"name": "run_id",
|
|
27997
|
+
"type": "string",
|
|
27998
|
+
"location": "path",
|
|
27999
|
+
"required": true,
|
|
28000
|
+
"description": "Codigo da rodada, devolvido pela aplicacao"
|
|
28001
|
+
}
|
|
28002
|
+
],
|
|
28003
|
+
"returns": "{ status, total, completados, valor_atualizado, criados, sem_mudanca, pulados, erros } — 'sem_mudanca' e a linha cujo card ja estava com aquele valor",
|
|
28004
|
+
"common_use_cases": [
|
|
28005
|
+
"Saber se a planilha terminou de ser aplicada",
|
|
28006
|
+
"Contar quantos cards foram completados e quantos foram criados"
|
|
28007
|
+
],
|
|
28008
|
+
"related_tools": [
|
|
28009
|
+
"lionchat_kanban_sales_reconciliation_apply",
|
|
28010
|
+
"lionchat_kanban_sales_reconciliation_preview"
|
|
28011
|
+
]
|
|
28012
|
+
},
|
|
27652
28013
|
{
|
|
27653
28014
|
"id": "lionchat_search_kanban_items",
|
|
27654
28015
|
"method": "GET",
|
|
@@ -28257,6 +28618,450 @@
|
|
|
28257
28618
|
"lionchat_captain_liquid_variables_list"
|
|
28258
28619
|
]
|
|
28259
28620
|
},
|
|
28621
|
+
{
|
|
28622
|
+
"id": "lionchat_captain_call_agents_list",
|
|
28623
|
+
"method": "GET",
|
|
28624
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents",
|
|
28625
|
+
"title": "Listar Agentes de Ligacao",
|
|
28626
|
+
"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).",
|
|
28627
|
+
"category": "Assistentes",
|
|
28628
|
+
"params": [],
|
|
28629
|
+
"returns": "{ payload: [agente de ligacao], meta: { dial_inboxes: [{id, name}] } }",
|
|
28630
|
+
"common_use_cases": [
|
|
28631
|
+
"Ver agentes de ligacao configurados",
|
|
28632
|
+
"Descobrir qual caixa pode ligar"
|
|
28633
|
+
],
|
|
28634
|
+
"related_tools": [
|
|
28635
|
+
"lionchat_captain_call_agents_list",
|
|
28636
|
+
"lionchat_captain_call_agents_update",
|
|
28637
|
+
"lionchat_captain_call_agents_test_call",
|
|
28638
|
+
"lionchat_captain_call_test_phones_list"
|
|
28639
|
+
]
|
|
28640
|
+
},
|
|
28641
|
+
{
|
|
28642
|
+
"id": "lionchat_captain_call_agents_show",
|
|
28643
|
+
"method": "GET",
|
|
28644
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents/{id}",
|
|
28645
|
+
"title": "Ver Agente de Ligacao",
|
|
28646
|
+
"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.",
|
|
28647
|
+
"category": "Assistentes",
|
|
28648
|
+
"params": [
|
|
28649
|
+
{
|
|
28650
|
+
"name": "id",
|
|
28651
|
+
"type": "integer",
|
|
28652
|
+
"location": "path",
|
|
28653
|
+
"required": true,
|
|
28654
|
+
"description": "ID do agente de ligacao"
|
|
28655
|
+
}
|
|
28656
|
+
],
|
|
28657
|
+
"returns": "agente de ligacao { id, name, objective, first_message, style, voice_provider, engine, voice_id, elevenlabs_agent_id, max_duration_seconds, captain_assistant_id, captain_assistant_name }",
|
|
28658
|
+
"common_use_cases": [
|
|
28659
|
+
"Conferir a configuracao antes de editar"
|
|
28660
|
+
],
|
|
28661
|
+
"related_tools": [
|
|
28662
|
+
"lionchat_captain_call_agents_list",
|
|
28663
|
+
"lionchat_captain_call_agents_update",
|
|
28664
|
+
"lionchat_captain_call_agents_test_call",
|
|
28665
|
+
"lionchat_captain_call_test_phones_list"
|
|
28666
|
+
]
|
|
28667
|
+
},
|
|
28668
|
+
{
|
|
28669
|
+
"id": "lionchat_captain_call_agents_create",
|
|
28670
|
+
"method": "POST",
|
|
28671
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents",
|
|
28672
|
+
"title": "Criar Agente de Ligacao",
|
|
28673
|
+
"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. Campos em body (pode mandar solto ou dentro de call_agent). Durante a ligacao a voz so CONSULTA agenda e REPASSA pedidos; quem executa e o agente de texto de captain_assistant_id.",
|
|
28674
|
+
"category": "Assistentes",
|
|
28675
|
+
"params": [
|
|
28676
|
+
{
|
|
28677
|
+
"name": "name",
|
|
28678
|
+
"type": "string",
|
|
28679
|
+
"location": "body",
|
|
28680
|
+
"required": false,
|
|
28681
|
+
"description": "Nome do agente de ligacao (ex.: \"Pesquisa de satisfacao\"). Obrigatorio na criacao. Ate 120 caracteres."
|
|
28682
|
+
},
|
|
28683
|
+
{
|
|
28684
|
+
"name": "objective",
|
|
28685
|
+
"type": "string",
|
|
28686
|
+
"location": "body",
|
|
28687
|
+
"required": false,
|
|
28688
|
+
"description": "Objetivo e roteiro da ligacao: o que ela deve conversar. Ate 4000 caracteres."
|
|
28689
|
+
},
|
|
28690
|
+
{
|
|
28691
|
+
"name": "first_message",
|
|
28692
|
+
"type": "string",
|
|
28693
|
+
"location": "body",
|
|
28694
|
+
"required": false,
|
|
28695
|
+
"description": "Primeira frase quando atendem (ex.: \"Oi, tudo bem? Aqui e a Ana...\"). Ate 400 caracteres."
|
|
28696
|
+
},
|
|
28697
|
+
{
|
|
28698
|
+
"name": "style",
|
|
28699
|
+
"type": "string",
|
|
28700
|
+
"location": "body",
|
|
28701
|
+
"required": false,
|
|
28702
|
+
"description": "Jeito de falar ao telefone (tom, ritmo, sotaque). Ate 1200 caracteres."
|
|
28703
|
+
},
|
|
28704
|
+
{
|
|
28705
|
+
"name": "voice_provider",
|
|
28706
|
+
"type": "string",
|
|
28707
|
+
"location": "body",
|
|
28708
|
+
"required": false,
|
|
28709
|
+
"description": "Fornecedor da voz: 'openai' (padrao) ou 'elevenlabs'. E PROPRIO do agente de ligacao — nao mexe na voz do audio da IA no WhatsApp."
|
|
28710
|
+
},
|
|
28711
|
+
{
|
|
28712
|
+
"name": "engine",
|
|
28713
|
+
"type": "string",
|
|
28714
|
+
"location": "body",
|
|
28715
|
+
"required": false,
|
|
28716
|
+
"description": "So na OpenAI: 'gptlive' (padrao; a voz fala enquanto consulta, e o UNICO motor com consultas de agenda e pedidos ao agente de texto) ou 'realtime' (so conversa)."
|
|
28717
|
+
},
|
|
28718
|
+
{
|
|
28719
|
+
"name": "voice_id",
|
|
28720
|
+
"type": "string",
|
|
28721
|
+
"location": "body",
|
|
28722
|
+
"required": false,
|
|
28723
|
+
"description": "Voz. Catalogo em lionchat_captain_voices_list (engine=gptlive para o GPT-Live: aceita alloy, ash, ballad, coral, echo, sage, shimmer, verse, marin, cedar; voz fora disso cai na marin)."
|
|
28724
|
+
},
|
|
28725
|
+
{
|
|
28726
|
+
"name": "elevenlabs_agent_id",
|
|
28727
|
+
"type": "string",
|
|
28728
|
+
"location": "body",
|
|
28729
|
+
"required": false,
|
|
28730
|
+
"description": "Obrigatorio quando voice_provider=elevenlabs: id do agente criado na ElevenLabs."
|
|
28731
|
+
},
|
|
28732
|
+
{
|
|
28733
|
+
"name": "max_duration_seconds",
|
|
28734
|
+
"type": "integer",
|
|
28735
|
+
"location": "body",
|
|
28736
|
+
"required": false,
|
|
28737
|
+
"description": "Duracao maxima da ligacao, 30 a 600 segundos (padrao 180)."
|
|
28738
|
+
},
|
|
28739
|
+
{
|
|
28740
|
+
"name": "captain_assistant_id",
|
|
28741
|
+
"type": "integer",
|
|
28742
|
+
"location": "body",
|
|
28743
|
+
"required": false,
|
|
28744
|
+
"description": "Agente de TEXTO que EXECUTA durante a ligacao o que o cliente pedir (mandar link no WhatsApp, mover card, anotar), com as ferramentas e a configuracao DELE. Sem ele a voz so conversa. Tem de ser desta conta (422 se nao for)."
|
|
28745
|
+
}
|
|
28746
|
+
],
|
|
28747
|
+
"returns": "agente de ligacao criado",
|
|
28748
|
+
"common_use_cases": [
|
|
28749
|
+
"Criar uma ligacao de pesquisa",
|
|
28750
|
+
"Criar confirmacao de consulta por voz"
|
|
28751
|
+
],
|
|
28752
|
+
"related_tools": [
|
|
28753
|
+
"lionchat_captain_call_agents_list",
|
|
28754
|
+
"lionchat_captain_call_agents_update",
|
|
28755
|
+
"lionchat_captain_call_agents_test_call",
|
|
28756
|
+
"lionchat_captain_call_test_phones_list"
|
|
28757
|
+
]
|
|
28758
|
+
},
|
|
28759
|
+
{
|
|
28760
|
+
"id": "lionchat_captain_call_agents_update",
|
|
28761
|
+
"method": "PATCH",
|
|
28762
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents/{id}",
|
|
28763
|
+
"title": "Atualizar Agente de Ligacao",
|
|
28764
|
+
"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. Edicao parcial.",
|
|
28765
|
+
"category": "Assistentes",
|
|
28766
|
+
"params": [
|
|
28767
|
+
{
|
|
28768
|
+
"name": "id",
|
|
28769
|
+
"type": "integer",
|
|
28770
|
+
"location": "path",
|
|
28771
|
+
"required": true,
|
|
28772
|
+
"description": "ID do agente de ligacao"
|
|
28773
|
+
},
|
|
28774
|
+
{
|
|
28775
|
+
"name": "name",
|
|
28776
|
+
"type": "string",
|
|
28777
|
+
"location": "body",
|
|
28778
|
+
"required": false,
|
|
28779
|
+
"description": "Nome do agente de ligacao (ex.: \"Pesquisa de satisfacao\"). Obrigatorio na criacao. Ate 120 caracteres."
|
|
28780
|
+
},
|
|
28781
|
+
{
|
|
28782
|
+
"name": "objective",
|
|
28783
|
+
"type": "string",
|
|
28784
|
+
"location": "body",
|
|
28785
|
+
"required": false,
|
|
28786
|
+
"description": "Objetivo e roteiro da ligacao: o que ela deve conversar. Ate 4000 caracteres."
|
|
28787
|
+
},
|
|
28788
|
+
{
|
|
28789
|
+
"name": "first_message",
|
|
28790
|
+
"type": "string",
|
|
28791
|
+
"location": "body",
|
|
28792
|
+
"required": false,
|
|
28793
|
+
"description": "Primeira frase quando atendem (ex.: \"Oi, tudo bem? Aqui e a Ana...\"). Ate 400 caracteres."
|
|
28794
|
+
},
|
|
28795
|
+
{
|
|
28796
|
+
"name": "style",
|
|
28797
|
+
"type": "string",
|
|
28798
|
+
"location": "body",
|
|
28799
|
+
"required": false,
|
|
28800
|
+
"description": "Jeito de falar ao telefone (tom, ritmo, sotaque). Ate 1200 caracteres."
|
|
28801
|
+
},
|
|
28802
|
+
{
|
|
28803
|
+
"name": "voice_provider",
|
|
28804
|
+
"type": "string",
|
|
28805
|
+
"location": "body",
|
|
28806
|
+
"required": false,
|
|
28807
|
+
"description": "Fornecedor da voz: 'openai' (padrao) ou 'elevenlabs'. E PROPRIO do agente de ligacao — nao mexe na voz do audio da IA no WhatsApp."
|
|
28808
|
+
},
|
|
28809
|
+
{
|
|
28810
|
+
"name": "engine",
|
|
28811
|
+
"type": "string",
|
|
28812
|
+
"location": "body",
|
|
28813
|
+
"required": false,
|
|
28814
|
+
"description": "So na OpenAI: 'gptlive' (padrao; a voz fala enquanto consulta, e o UNICO motor com consultas de agenda e pedidos ao agente de texto) ou 'realtime' (so conversa)."
|
|
28815
|
+
},
|
|
28816
|
+
{
|
|
28817
|
+
"name": "voice_id",
|
|
28818
|
+
"type": "string",
|
|
28819
|
+
"location": "body",
|
|
28820
|
+
"required": false,
|
|
28821
|
+
"description": "Voz. Catalogo em lionchat_captain_voices_list (engine=gptlive para o GPT-Live: aceita alloy, ash, ballad, coral, echo, sage, shimmer, verse, marin, cedar; voz fora disso cai na marin)."
|
|
28822
|
+
},
|
|
28823
|
+
{
|
|
28824
|
+
"name": "elevenlabs_agent_id",
|
|
28825
|
+
"type": "string",
|
|
28826
|
+
"location": "body",
|
|
28827
|
+
"required": false,
|
|
28828
|
+
"description": "Obrigatorio quando voice_provider=elevenlabs: id do agente criado na ElevenLabs."
|
|
28829
|
+
},
|
|
28830
|
+
{
|
|
28831
|
+
"name": "max_duration_seconds",
|
|
28832
|
+
"type": "integer",
|
|
28833
|
+
"location": "body",
|
|
28834
|
+
"required": false,
|
|
28835
|
+
"description": "Duracao maxima da ligacao, 30 a 600 segundos (padrao 180)."
|
|
28836
|
+
},
|
|
28837
|
+
{
|
|
28838
|
+
"name": "captain_assistant_id",
|
|
28839
|
+
"type": "integer",
|
|
28840
|
+
"location": "body",
|
|
28841
|
+
"required": false,
|
|
28842
|
+
"description": "Agente de TEXTO que EXECUTA durante a ligacao o que o cliente pedir (mandar link no WhatsApp, mover card, anotar), com as ferramentas e a configuracao DELE. Sem ele a voz so conversa. Tem de ser desta conta (422 se nao for)."
|
|
28843
|
+
}
|
|
28844
|
+
],
|
|
28845
|
+
"returns": "agente de ligacao atualizado",
|
|
28846
|
+
"common_use_cases": [
|
|
28847
|
+
"Trocar roteiro, voz ou o agente de texto que executa"
|
|
28848
|
+
],
|
|
28849
|
+
"related_tools": [
|
|
28850
|
+
"lionchat_captain_call_agents_list",
|
|
28851
|
+
"lionchat_captain_call_agents_update",
|
|
28852
|
+
"lionchat_captain_call_agents_test_call",
|
|
28853
|
+
"lionchat_captain_call_test_phones_list"
|
|
28854
|
+
]
|
|
28855
|
+
},
|
|
28856
|
+
{
|
|
28857
|
+
"id": "lionchat_captain_call_agents_destroy",
|
|
28858
|
+
"method": "DELETE",
|
|
28859
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents/{id}",
|
|
28860
|
+
"title": "Excluir Agente de Ligacao",
|
|
28861
|
+
"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.",
|
|
28862
|
+
"category": "Assistentes",
|
|
28863
|
+
"params": [
|
|
28864
|
+
{
|
|
28865
|
+
"name": "id",
|
|
28866
|
+
"type": "integer",
|
|
28867
|
+
"location": "path",
|
|
28868
|
+
"required": true,
|
|
28869
|
+
"description": "ID do agente de ligacao"
|
|
28870
|
+
}
|
|
28871
|
+
],
|
|
28872
|
+
"returns": "204 sem corpo",
|
|
28873
|
+
"common_use_cases": [
|
|
28874
|
+
"Remover agente de ligacao que nao e mais usado"
|
|
28875
|
+
],
|
|
28876
|
+
"related_tools": [
|
|
28877
|
+
"lionchat_captain_call_agents_list",
|
|
28878
|
+
"lionchat_captain_call_agents_update",
|
|
28879
|
+
"lionchat_captain_call_agents_test_call",
|
|
28880
|
+
"lionchat_captain_call_test_phones_list"
|
|
28881
|
+
]
|
|
28882
|
+
},
|
|
28883
|
+
{
|
|
28884
|
+
"id": "lionchat_captain_call_agents_duplicate",
|
|
28885
|
+
"method": "POST",
|
|
28886
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents/{id}/duplicate",
|
|
28887
|
+
"title": "Duplicar Agente de Ligacao",
|
|
28888
|
+
"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. Cria uma copia com \"(cópia)\" no nome.",
|
|
28889
|
+
"category": "Assistentes",
|
|
28890
|
+
"params": [
|
|
28891
|
+
{
|
|
28892
|
+
"name": "id",
|
|
28893
|
+
"type": "integer",
|
|
28894
|
+
"location": "path",
|
|
28895
|
+
"required": true,
|
|
28896
|
+
"description": "ID do agente de ligacao"
|
|
28897
|
+
}
|
|
28898
|
+
],
|
|
28899
|
+
"returns": "a copia criada",
|
|
28900
|
+
"common_use_cases": [
|
|
28901
|
+
"Criar variacao de um agente de ligacao"
|
|
28902
|
+
],
|
|
28903
|
+
"related_tools": [
|
|
28904
|
+
"lionchat_captain_call_agents_list",
|
|
28905
|
+
"lionchat_captain_call_agents_update",
|
|
28906
|
+
"lionchat_captain_call_agents_test_call",
|
|
28907
|
+
"lionchat_captain_call_test_phones_list"
|
|
28908
|
+
]
|
|
28909
|
+
},
|
|
28910
|
+
{
|
|
28911
|
+
"id": "lionchat_captain_call_agents_test_call",
|
|
28912
|
+
"method": "POST",
|
|
28913
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents/{id}/test_call",
|
|
28914
|
+
"title": "Ligar de Teste",
|
|
28915
|
+
"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. LIGA DE VERDADE para um numero de teste CADASTRADO (lionchat_captain_call_test_phones_list) — o telefone nunca vai no corpo, so o id do numero. Cria contato e conversa reais, pode disparar automacoes de \"conversa criada\" e fica gravada. Limite: 10 por hora na conta. Exige a Ligacao com IA liberada na conta e a linha da caixa conectada; recusa volta 422 com o motivo em message.",
|
|
28916
|
+
"category": "Assistentes",
|
|
28917
|
+
"params": [
|
|
28918
|
+
{
|
|
28919
|
+
"name": "id",
|
|
28920
|
+
"type": "integer",
|
|
28921
|
+
"location": "path",
|
|
28922
|
+
"required": true,
|
|
28923
|
+
"description": "ID do agente de ligacao"
|
|
28924
|
+
},
|
|
28925
|
+
{
|
|
28926
|
+
"name": "test_phone_id",
|
|
28927
|
+
"type": "integer",
|
|
28928
|
+
"location": "body",
|
|
28929
|
+
"required": true,
|
|
28930
|
+
"description": "ID do numero de teste cadastrado"
|
|
28931
|
+
},
|
|
28932
|
+
{
|
|
28933
|
+
"name": "inbox_id",
|
|
28934
|
+
"type": "integer",
|
|
28935
|
+
"location": "body",
|
|
28936
|
+
"required": true,
|
|
28937
|
+
"description": "Caixa que faz a ligacao (uma de meta.dial_inboxes)"
|
|
28938
|
+
}
|
|
28939
|
+
],
|
|
28940
|
+
"returns": "{ call_id, call_log_id } — acompanhar com lionchat_captain_call_agents_test_call_status",
|
|
28941
|
+
"common_use_cases": [
|
|
28942
|
+
"Testar o agente de ligacao no proprio celular"
|
|
28943
|
+
],
|
|
28944
|
+
"related_tools": [
|
|
28945
|
+
"lionchat_captain_call_agents_list",
|
|
28946
|
+
"lionchat_captain_call_agents_update",
|
|
28947
|
+
"lionchat_captain_call_agents_test_call",
|
|
28948
|
+
"lionchat_captain_call_test_phones_list"
|
|
28949
|
+
]
|
|
28950
|
+
},
|
|
28951
|
+
{
|
|
28952
|
+
"id": "lionchat_captain_call_agents_test_call_status",
|
|
28953
|
+
"method": "GET",
|
|
28954
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_agents/{id}/test_call_status",
|
|
28955
|
+
"title": "Andamento da Ligacao de Teste",
|
|
28956
|
+
"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.",
|
|
28957
|
+
"category": "Assistentes",
|
|
28958
|
+
"params": [
|
|
28959
|
+
{
|
|
28960
|
+
"name": "id",
|
|
28961
|
+
"type": "integer",
|
|
28962
|
+
"location": "path",
|
|
28963
|
+
"required": true,
|
|
28964
|
+
"description": "ID do agente de ligacao"
|
|
28965
|
+
},
|
|
28966
|
+
{
|
|
28967
|
+
"name": "call_log_id",
|
|
28968
|
+
"type": "integer",
|
|
28969
|
+
"location": "query",
|
|
28970
|
+
"required": true,
|
|
28971
|
+
"description": "call_log_id devolvido por lionchat_captain_call_agents_test_call"
|
|
28972
|
+
}
|
|
28973
|
+
],
|
|
28974
|
+
"returns": "{ status: initiated|ringing|active|answered|no_answer|failed|canceled, conversation_display_id, duration_seconds, finished }",
|
|
28975
|
+
"common_use_cases": [
|
|
28976
|
+
"Saber se a ligacao de teste foi atendida e em qual conversa ficou"
|
|
28977
|
+
],
|
|
28978
|
+
"related_tools": [
|
|
28979
|
+
"lionchat_captain_call_agents_list",
|
|
28980
|
+
"lionchat_captain_call_agents_update",
|
|
28981
|
+
"lionchat_captain_call_agents_test_call",
|
|
28982
|
+
"lionchat_captain_call_test_phones_list"
|
|
28983
|
+
]
|
|
28984
|
+
},
|
|
28985
|
+
{
|
|
28986
|
+
"id": "lionchat_captain_call_test_phones_list",
|
|
28987
|
+
"method": "GET",
|
|
28988
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_test_phones",
|
|
28989
|
+
"title": "Listar Numeros de Teste de Ligacao",
|
|
28990
|
+
"description": "Numeros autorizados a receber \"Ligar de teste\" dos agentes de ligacao. Exige Admin ou captain_manage.",
|
|
28991
|
+
"category": "Assistentes",
|
|
28992
|
+
"params": [],
|
|
28993
|
+
"returns": "{ payload: [{id, phone, label}] }",
|
|
28994
|
+
"common_use_cases": [
|
|
28995
|
+
"Ver para quem a ligacao de teste pode ligar"
|
|
28996
|
+
],
|
|
28997
|
+
"related_tools": [
|
|
28998
|
+
"lionchat_captain_call_agents_list",
|
|
28999
|
+
"lionchat_captain_call_agents_update",
|
|
29000
|
+
"lionchat_captain_call_agents_test_call",
|
|
29001
|
+
"lionchat_captain_call_test_phones_list"
|
|
29002
|
+
]
|
|
29003
|
+
},
|
|
29004
|
+
{
|
|
29005
|
+
"id": "lionchat_captain_call_test_phones_create",
|
|
29006
|
+
"method": "POST",
|
|
29007
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_test_phones",
|
|
29008
|
+
"title": "Cadastrar Numero de Teste de Ligacao",
|
|
29009
|
+
"description": "Autoriza um numero a receber ligacao de teste. Telefone com DDI (10 a 15 digitos); repetido na conta volta 422.",
|
|
29010
|
+
"category": "Assistentes",
|
|
29011
|
+
"params": [
|
|
29012
|
+
{
|
|
29013
|
+
"name": "phone",
|
|
29014
|
+
"type": "string",
|
|
29015
|
+
"location": "body",
|
|
29016
|
+
"required": true,
|
|
29017
|
+
"description": "Telefone com DDI, ex. +5511999998888"
|
|
29018
|
+
},
|
|
29019
|
+
{
|
|
29020
|
+
"name": "label",
|
|
29021
|
+
"type": "string",
|
|
29022
|
+
"location": "body",
|
|
29023
|
+
"required": false,
|
|
29024
|
+
"description": "Nome de quem atende (ate 80 caracteres)"
|
|
29025
|
+
}
|
|
29026
|
+
],
|
|
29027
|
+
"returns": "numero cadastrado { id, phone, label }",
|
|
29028
|
+
"common_use_cases": [
|
|
29029
|
+
"Cadastrar o proprio celular para testar"
|
|
29030
|
+
],
|
|
29031
|
+
"related_tools": [
|
|
29032
|
+
"lionchat_captain_call_agents_list",
|
|
29033
|
+
"lionchat_captain_call_agents_update",
|
|
29034
|
+
"lionchat_captain_call_agents_test_call",
|
|
29035
|
+
"lionchat_captain_call_test_phones_list"
|
|
29036
|
+
]
|
|
29037
|
+
},
|
|
29038
|
+
{
|
|
29039
|
+
"id": "lionchat_captain_call_test_phones_destroy",
|
|
29040
|
+
"method": "DELETE",
|
|
29041
|
+
"path": "/api/v1/accounts/{account_id}/captain/call_test_phones/{id}",
|
|
29042
|
+
"title": "Remover Numero de Teste de Ligacao",
|
|
29043
|
+
"description": "Remove um numero de teste.",
|
|
29044
|
+
"category": "Assistentes",
|
|
29045
|
+
"params": [
|
|
29046
|
+
{
|
|
29047
|
+
"name": "id",
|
|
29048
|
+
"type": "integer",
|
|
29049
|
+
"location": "path",
|
|
29050
|
+
"required": true,
|
|
29051
|
+
"description": "ID do numero de teste"
|
|
29052
|
+
}
|
|
29053
|
+
],
|
|
29054
|
+
"returns": "204 sem corpo",
|
|
29055
|
+
"common_use_cases": [
|
|
29056
|
+
"Tirar um numero da lista de teste"
|
|
29057
|
+
],
|
|
29058
|
+
"related_tools": [
|
|
29059
|
+
"lionchat_captain_call_agents_list",
|
|
29060
|
+
"lionchat_captain_call_agents_update",
|
|
29061
|
+
"lionchat_captain_call_agents_test_call",
|
|
29062
|
+
"lionchat_captain_call_test_phones_list"
|
|
29063
|
+
]
|
|
29064
|
+
},
|
|
28260
29065
|
{
|
|
28261
29066
|
"id": "lionchat_captain_liquid_variables_list",
|
|
28262
29067
|
"method": "GET",
|
|
@@ -30544,6 +31349,13 @@
|
|
|
30544
31349
|
"location": "query",
|
|
30545
31350
|
"required": false,
|
|
30546
31351
|
"description": "openai (padrão) | elevenlabs"
|
|
31352
|
+
},
|
|
31353
|
+
{
|
|
31354
|
+
"name": "engine",
|
|
31355
|
+
"type": "string",
|
|
31356
|
+
"location": "query",
|
|
31357
|
+
"required": false,
|
|
31358
|
+
"description": "Motor da ligacao: 'gptlive' devolve o catalogo do GPT-Live (inclui marin e cedar; NAO inclui fable/nova/onyx, que ele recusa). Sem este parametro devolve a lista do audio de texto. So vale com provider=openai."
|
|
30547
31359
|
}
|
|
30548
31360
|
],
|
|
30549
31361
|
"returns": "{voices: [{id, name, category, available, ...}], configured: bool, error: null|string, cloning_allowed?}",
|
|
@@ -32563,7 +33375,7 @@
|
|
|
32563
33375
|
"method": "GET",
|
|
32564
33376
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations/{id}",
|
|
32565
33377
|
"title": "Detalhes da Integração e-Clínica",
|
|
32566
|
-
"description": "SÓ LEITURA, somente administrador. A integração e-Clínica da conta (1 por conta; o id precisa ser o dela — 404 caso contrário) com status, saúde, mapeamento de eventos, lembretes, webhook_url e as UNIDADES (filiais) com status/token-por-variável/webhook próprio. Mesmo conteúdo de lionchat_eclinica_integrations_list, que já resolve o id. LEMBRETE POR AUTOMACAO (25/08): cada entrada de reminder_config aceita `automation_id` alem do `flow_id` — pelo menos um dos dois (422 sem nenhum); com os DOIS preenchidos a AUTOMACAO vence no disparo. A automacao precisa ser da propria conta (422 senao). ALERTA de regra de negocio ao configurar: o caminho por automacao RODA AS ACOES SEM AVALIAR AS CONDICOES da automacao
|
|
33378
|
+
"description": "SÓ LEITURA, somente administrador. A integração e-Clínica da conta (1 por conta; o id precisa ser o dela — 404 caso contrário) com status, saúde, mapeamento de eventos, lembretes, webhook_url e as UNIDADES (filiais) com status/token-por-variável/webhook próprio. Mesmo conteúdo de lionchat_eclinica_integrations_list, que já resolve o id. LEMBRETE POR AUTOMACAO (25/08): cada entrada de reminder_config aceita `automation_id` alem do `flow_id` — pelo menos um dos dois (422 sem nenhum); com os DOIS preenchidos a AUTOMACAO vence no disparo. A automacao precisa ser da propria conta (422 senao). ALERTA de regra de negocio ao configurar: o caminho por automacao RODA AS ACOES SEM AVALIAR AS CONDICOES da automacao. Desde 17/09/2026 os DOIS caminhos (fluxo e automacao) mandam um aviso POR CONSULTA: paciente com duas consultas no dia (ou dois pacientes no mesmo celular) recebe um aviso para cada uma, ~10 min um do outro (fila por contato). Quem quer so um por dia monta no FLUXO (condicao num atributo com {{data_consulta}}); na automacao nao da, porque as condicoes dela nao sao avaliadas — avise o cliente antes de trocar fluxo por automacao.",
|
|
32567
33379
|
"category": "Integracoes",
|
|
32568
33380
|
"params": [
|
|
32569
33381
|
{
|
|
@@ -32587,7 +33399,7 @@
|
|
|
32587
33399
|
"method": "PATCH",
|
|
32588
33400
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations/{id}",
|
|
32589
33401
|
"title": "Configurar Integração e-Clínica (mapeamento de eventos e lembretes)",
|
|
32590
|
-
"description": "AÇÃO DE ESCRITA, somente administrador. Configura a integração e-Clínica: o MAPEAMENTO evento→automação/fluxo (event_mapping) e os LEMBRETES automáticos (reminder_config). Até 31/08/2026 os dois só existiam na tela — este comando fecha a lacuna.\n\nSUBSTITUIÇÃO TOTAL — LEIA ANTES DE GRAVAR: os dois campos SUBSTITUEM o conteúdo inteiro, NÃO mesclam (o backend faz update! direto no jsonb). Mandar event_mapping com um evento só APAGA todos os outros mapeamentos do cliente; o mesmo vale pra reminder_config. SEMPRE chame lionchat_eclinica_integrations_show ANTES, pegue o objeto atual, altere só o que precisa e devolva o objeto COMPLETO.\n\nevent_mapping: objeto {tipo_do_evento: {automation_id, flow_id}} — pode deixar um dos dois nulo. Tipos aceitos: cliente_novo, cliente_alteracao, agendamento_novo, agendamento_alterado, agendamento_atendido, agendamento_desmarcado, agendamento_transferido, falta, pagamento, cliente_baixa_pagamento, cliente_inclusao_pagamento, controle_laboratorio_novo, controle_laboratorio_alterado, agendamento_aguardando, odontograma_aprovado, cliente_alteracao_pagamento (NOVO 01/09 — a cobrança foi EDITADA: mesmos campos da inclusão e o lembrete de vencimento é MOVIDO, não duplicado; dispara a cada edição, então não sirva para avisar \"nova cobrança\"), procedimento_finalizado (NOVO 31/08 — um procedimento do plano de tratamento foi concluído; dispara UMA VEZ POR PROCEDIMENTO e grava eclinica_procedimento_id/_dente/_valor/_finalizado_em/_profissional no contato, então o fluxo ligado aqui precisa filtrar pelo número do procedimento). odontograma_finalizado (NOVO 01/09 — o plano de tratamento INTEIRO foi concluido; nao confundir com procedimento_finalizado, que e UM item do plano; grava eclinica_odontograma_finalizado_em e nao mexe na data de aprovacao), inclusao_procedimento (NOVO 01/09 — um procedimento foi ACRESCENTADO ao plano, ainda nao executado: serve para aviso de orcamento, NAO e gatilho de orientacao pos-procedimento; grava eclinica_procedimento_incluido_id/_dente/_valor, nunca nos campos do finalizado). Tipo fora da lista = 422; flow_id e automation_id precisam ser da PRÓPRIA conta = 422 senão.\n\nreminder_config: array de {days_before (inteiro >= 0), event_type ('agendamento' padrão | 'controle_laboratorio_novo' | 'cliente_inclusao_pagamento'), flow_id e/ou automation_id (pelo menos um dos dois; com os dois a AUTOMAÇÃO vence), label, dispatch_time (OBRIGATÓRIA — 'HH:MM' fixo ou fórmula Liquid), filter_field/filter_operator/filter_value (opcional; filter_field precisa começar com eclinica_, operadores contains/equal/not_equal)}. Duas linhas com a MESMA régua = 422.\n\nALERTA de regra de negócio: isto muda, na hora e em produção, o que o paciente recebe. E no lembrete por automação as AÇÕES rodam SEM avaliar as CONDIÇÕES da automação
|
|
33402
|
+
"description": "AÇÃO DE ESCRITA, somente administrador. Configura a integração e-Clínica: o MAPEAMENTO evento→automação/fluxo (event_mapping) e os LEMBRETES automáticos (reminder_config). Até 31/08/2026 os dois só existiam na tela — este comando fecha a lacuna.\n\nSUBSTITUIÇÃO TOTAL — LEIA ANTES DE GRAVAR: os dois campos SUBSTITUEM o conteúdo inteiro, NÃO mesclam (o backend faz update! direto no jsonb). Mandar event_mapping com um evento só APAGA todos os outros mapeamentos do cliente; o mesmo vale pra reminder_config. SEMPRE chame lionchat_eclinica_integrations_show ANTES, pegue o objeto atual, altere só o que precisa e devolva o objeto COMPLETO.\n\nevent_mapping: objeto {tipo_do_evento: {automation_id, flow_id}} — pode deixar um dos dois nulo. Tipos aceitos: cliente_novo, cliente_alteracao, agendamento_novo, agendamento_alterado, agendamento_atendido, agendamento_desmarcado, agendamento_transferido, falta, pagamento, cliente_baixa_pagamento, cliente_inclusao_pagamento, controle_laboratorio_novo, controle_laboratorio_alterado, agendamento_aguardando, odontograma_aprovado, cliente_alteracao_pagamento (NOVO 01/09 — a cobrança foi EDITADA: mesmos campos da inclusão e o lembrete de vencimento é MOVIDO, não duplicado; dispara a cada edição, então não sirva para avisar \"nova cobrança\"), procedimento_finalizado (NOVO 31/08 — um procedimento do plano de tratamento foi concluído; dispara UMA VEZ POR PROCEDIMENTO e grava eclinica_procedimento_id/_dente/_valor/_finalizado_em/_profissional no contato, então o fluxo ligado aqui precisa filtrar pelo número do procedimento). odontograma_finalizado (NOVO 01/09 — o plano de tratamento INTEIRO foi concluido; nao confundir com procedimento_finalizado, que e UM item do plano; grava eclinica_odontograma_finalizado_em e nao mexe na data de aprovacao), inclusao_procedimento (NOVO 01/09 — um procedimento foi ACRESCENTADO ao plano, ainda nao executado: serve para aviso de orcamento, NAO e gatilho de orientacao pos-procedimento; grava eclinica_procedimento_incluido_id/_dente/_valor, nunca nos campos do finalizado). Tipo fora da lista = 422; flow_id e automation_id precisam ser da PRÓPRIA conta = 422 senão.\n\nreminder_config: array de {days_before (inteiro >= 0), event_type ('agendamento' padrão | 'controle_laboratorio_novo' | 'cliente_inclusao_pagamento'), flow_id e/ou automation_id (pelo menos um dos dois; com os dois a AUTOMAÇÃO vence), label, dispatch_time (OBRIGATÓRIA — 'HH:MM' fixo ou fórmula Liquid), filter_field/filter_operator/filter_value (opcional; filter_field precisa começar com eclinica_, operadores contains/equal/not_equal)}. Duas linhas com a MESMA régua = 422.\n\nALERTA de regra de negócio: isto muda, na hora e em produção, o que o paciente recebe. E no lembrete por automação as AÇÕES rodam SEM avaliar as CONDIÇÕES da automação. Desde 17/09/2026 os DOIS caminhos (fluxo e automacao) mandam um aviso POR CONSULTA: paciente com duas consultas no dia (ou dois pacientes no mesmo celular) recebe um aviso para cada uma, ~10 min um do outro (fila por contato). Quem quer so um por dia monta no FLUXO (condicao num atributo com {{data_consulta}}); na automacao nao da, porque as condicoes dela nao sao avaliadas.",
|
|
32591
33403
|
"category": "Integracoes",
|
|
32592
33404
|
"params": [
|
|
32593
33405
|
{
|
|
@@ -33245,7 +34057,7 @@
|
|
|
33245
34057
|
"type": "object",
|
|
33246
34058
|
"location": "body",
|
|
33247
34059
|
"required": false,
|
|
33248
|
-
"description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto). O LEMBRETE NAO E MAIS CAMPO DO MODELO (2026-09-14): o reminder_days e a tarefa diaria das 10h foram REMOVIDOS. Quem lembra e um fluxo do cliente, com o texto e a caixa dele — gatilho signature_delivered (dispara por PESSOA), bloco Esperar em dias e condicao signature_status (person_not_signed + pending, logic and). NUNCA sugerir reminder_days."
|
|
34060
|
+
"description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto). O LEMBRETE NAO E MAIS CAMPO DO MODELO (2026-09-14): o reminder_days e a tarefa diaria das 10h foram REMOVIDOS. Quem lembra e um fluxo do cliente, com o texto e a caixa dele — gatilho signature_delivered (dispara por PESSOA), bloco Esperar em dias e condicao signature_status (person_not_signed + pending, logic and). NUNCA sugerir reminder_days. FORMATO: signers, witnesses e validity_days sao NUMEROS inteiros puros (ex.: {\"signers\": 2, \"witnesses\": 1, \"validity_days\": 7}) — lista ou objeto nesses campos derruba a lista de modelos de contrato da conta; sender_signs e require_id_photo sao true/false."
|
|
33249
34061
|
}
|
|
33250
34062
|
],
|
|
33251
34063
|
"returns": "o modelo criado (id, name, kind, body, variables, roles_layout, progress)",
|
|
@@ -33307,7 +34119,7 @@
|
|
|
33307
34119
|
"type": "object",
|
|
33308
34120
|
"location": "body",
|
|
33309
34121
|
"required": false,
|
|
33310
|
-
"description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto). O LEMBRETE NAO E MAIS CAMPO DO MODELO (2026-09-14): o reminder_days e a tarefa diaria das 10h foram REMOVIDOS. Quem lembra e um fluxo do cliente, com o texto e a caixa dele — gatilho signature_delivered (dispara por PESSOA), bloco Esperar em dias e condicao signature_status (person_not_signed + pending, logic and). NUNCA sugerir reminder_days."
|
|
34122
|
+
"description": "Configuracao do modelo (objeto, MESCLADO no update — mande so o que muda): signers (quantos titulares assinam, 1..), witnesses (testemunhas, 0..), sender_signs (bool: quem envia tambem assina, NO PAINEL), require_id_photo (bool: exige foto do documento na assinatura), validity_days (validade em dias contada do ENVIO; padrao 7; 1..365 — vira {{document.deadline}} no texto). O LEMBRETE NAO E MAIS CAMPO DO MODELO (2026-09-14): o reminder_days e a tarefa diaria das 10h foram REMOVIDOS. Quem lembra e um fluxo do cliente, com o texto e a caixa dele — gatilho signature_delivered (dispara por PESSOA), bloco Esperar em dias e condicao signature_status (person_not_signed + pending, logic and). NUNCA sugerir reminder_days. FORMATO: signers, witnesses e validity_days sao NUMEROS inteiros puros (ex.: {\"signers\": 2, \"witnesses\": 1, \"validity_days\": 7}) — lista ou objeto nesses campos derruba a lista de modelos de contrato da conta; sender_signs e require_id_photo sao true/false."
|
|
33311
34123
|
}
|
|
33312
34124
|
],
|
|
33313
34125
|
"returns": "o modelo atualizado",
|
|
@@ -33366,7 +34178,7 @@
|
|
|
33366
34178
|
"method": "GET",
|
|
33367
34179
|
"path": "/api/v1/accounts/{account_id}/signature_envelopes",
|
|
33368
34180
|
"title": "Listar Contratos Enviados",
|
|
33369
|
-
"description": "Lista os CONTRATOS (cada envio a uma pessoa e um contrato, com PDF proprio e linha do tempo), paginada (25 por pagina) com filtro e busca no servidor. Recortes: por modelo (signature_document_id), por contato (contact_id — o que aparece na aba Contratos da ficha) ou por conversa (conversation_id). status aceita os baldes aguardando (draft/sent), visualizado (viewed/partially_signed), assinado (signed_pending_seal/signed), encerrado (refused/cancelled/expired) ou falta_eu (contratos em que o usuario do token e o remetente e ainda nao assinou). Resposta traz meta.counts com a contagem por balde.",
|
|
34181
|
+
"description": "Lista os CONTRATOS (cada envio a uma pessoa e um contrato, com PDF proprio e linha do tempo), paginada (25 por pagina) com filtro e busca no servidor. Recortes: por modelo (signature_document_id), por contato (contact_id — o que aparece na aba Contratos da ficha) ou por conversa (conversation_id). status aceita os baldes aguardando (draft/sent), visualizado (viewed/partially_signed), assinado (signed_pending_seal/signed), encerrado (refused/cancelled/expired) ou falta_eu (contratos em que o usuario do token e o remetente e ainda nao assinou). Resposta traz meta.counts com a contagem por balde. Por empresa: company_id (contratos de todos os contatos dela).",
|
|
33370
34182
|
"category": "Assinatura eletronica",
|
|
33371
34183
|
"params": [
|
|
33372
34184
|
{
|
|
@@ -33410,6 +34222,13 @@
|
|
|
33410
34222
|
"location": "query",
|
|
33411
34223
|
"required": false,
|
|
33412
34224
|
"description": "Pagina (padrao 1, 25 por pagina)"
|
|
34225
|
+
},
|
|
34226
|
+
{
|
|
34227
|
+
"name": "company_id",
|
|
34228
|
+
"type": "integer",
|
|
34229
|
+
"location": "query",
|
|
34230
|
+
"required": false,
|
|
34231
|
+
"description": "Recorta pelos contatos de uma EMPRESA (aba Contratos da pagina da empresa). Empresa de outra conta = 404."
|
|
33413
34232
|
}
|
|
33414
34233
|
],
|
|
33415
34234
|
"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}",
|
|
@@ -34266,5 +35085,207 @@
|
|
|
34266
35085
|
"description": "Uma linha por AGENDA com o estado do Google de cada uma: `connected`, `state`, `calendar_id`, `connected_by`. A conexao Google e UMA POR AGENDA — cada unidade liga a conta Google dela, inclusive a mesma pessoa com contas diferentes. SO ADMINISTRADOR. Conta sem agendas devolve uma linha com agenda_id nulo (a principal).",
|
|
34267
35086
|
"category": "Integracoes / Google Calendar",
|
|
34268
35087
|
"params": []
|
|
35088
|
+
},
|
|
35089
|
+
{
|
|
35090
|
+
"id": "lionchat_companies_notes_create",
|
|
35091
|
+
"method": "POST",
|
|
35092
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes",
|
|
35093
|
+
"title": "Criar Anotacao da Empresa",
|
|
35094
|
+
"description": "Escreve uma anotacao da PROPRIA empresa (nao de um contato). Qualquer atendente da conta pode. Aparece na aba Anotacoes da pagina da empresa com o selo 'Empresa'.",
|
|
35095
|
+
"category": "Empresas",
|
|
35096
|
+
"params": [
|
|
35097
|
+
{
|
|
35098
|
+
"name": "company_id",
|
|
35099
|
+
"type": "integer",
|
|
35100
|
+
"location": "path",
|
|
35101
|
+
"required": true,
|
|
35102
|
+
"description": "ID da empresa"
|
|
35103
|
+
},
|
|
35104
|
+
{
|
|
35105
|
+
"name": "note",
|
|
35106
|
+
"type": "object",
|
|
35107
|
+
"location": "body",
|
|
35108
|
+
"required": true,
|
|
35109
|
+
"description": "{ content: texto da anotacao }"
|
|
35110
|
+
}
|
|
35111
|
+
],
|
|
35112
|
+
"returns": "{payload: anotacao} com kind 'company'",
|
|
35113
|
+
"common_use_cases": [
|
|
35114
|
+
"Registrar historico comercial da empresa",
|
|
35115
|
+
"Anotar combinados com a empresa"
|
|
35116
|
+
],
|
|
35117
|
+
"related_tools": [
|
|
35118
|
+
"lionchat_companies_notes_list",
|
|
35119
|
+
"lionchat_companies_notes_update"
|
|
35120
|
+
]
|
|
35121
|
+
},
|
|
35122
|
+
{
|
|
35123
|
+
"id": "lionchat_companies_notes_update",
|
|
35124
|
+
"method": "PATCH",
|
|
35125
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes/{id}",
|
|
35126
|
+
"title": "Editar Anotacao da Empresa",
|
|
35127
|
+
"description": "Edita uma anotacao da PROPRIA empresa (kind 'company'). A autoria passa para quem editou, como na anotacao do contato. Anotacao de contato (kind 'contact') NAO se edita aqui.",
|
|
35128
|
+
"category": "Empresas",
|
|
35129
|
+
"params": [
|
|
35130
|
+
{
|
|
35131
|
+
"name": "company_id",
|
|
35132
|
+
"type": "integer",
|
|
35133
|
+
"location": "path",
|
|
35134
|
+
"required": true,
|
|
35135
|
+
"description": "ID da empresa"
|
|
35136
|
+
},
|
|
35137
|
+
{
|
|
35138
|
+
"name": "id",
|
|
35139
|
+
"type": "integer",
|
|
35140
|
+
"location": "path",
|
|
35141
|
+
"required": true,
|
|
35142
|
+
"description": "ID da anotacao da empresa (kind 'company')"
|
|
35143
|
+
},
|
|
35144
|
+
{
|
|
35145
|
+
"name": "note",
|
|
35146
|
+
"type": "object",
|
|
35147
|
+
"location": "body",
|
|
35148
|
+
"required": true,
|
|
35149
|
+
"description": "{ content: texto da anotacao }"
|
|
35150
|
+
}
|
|
35151
|
+
],
|
|
35152
|
+
"returns": "{payload: anotacao}",
|
|
35153
|
+
"common_use_cases": [
|
|
35154
|
+
"Corrigir uma anotacao da empresa"
|
|
35155
|
+
],
|
|
35156
|
+
"related_tools": [
|
|
35157
|
+
"lionchat_companies_notes_list"
|
|
35158
|
+
]
|
|
35159
|
+
},
|
|
35160
|
+
{
|
|
35161
|
+
"id": "lionchat_companies_notes_destroy",
|
|
35162
|
+
"method": "DELETE",
|
|
35163
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes/{id}",
|
|
35164
|
+
"title": "Apagar Anotacao da Empresa",
|
|
35165
|
+
"description": "Apaga uma anotacao da PROPRIA empresa (kind 'company'). Nao tem volta.",
|
|
35166
|
+
"category": "Empresas",
|
|
35167
|
+
"params": [
|
|
35168
|
+
{
|
|
35169
|
+
"name": "company_id",
|
|
35170
|
+
"type": "integer",
|
|
35171
|
+
"location": "path",
|
|
35172
|
+
"required": true,
|
|
35173
|
+
"description": "ID da empresa"
|
|
35174
|
+
},
|
|
35175
|
+
{
|
|
35176
|
+
"name": "id",
|
|
35177
|
+
"type": "integer",
|
|
35178
|
+
"location": "path",
|
|
35179
|
+
"required": true,
|
|
35180
|
+
"description": "ID da anotacao da empresa (kind 'company')"
|
|
35181
|
+
}
|
|
35182
|
+
],
|
|
35183
|
+
"returns": "200 sem corpo",
|
|
35184
|
+
"common_use_cases": [
|
|
35185
|
+
"Remover anotacao errada"
|
|
35186
|
+
],
|
|
35187
|
+
"related_tools": [
|
|
35188
|
+
"lionchat_companies_notes_list"
|
|
35189
|
+
]
|
|
35190
|
+
},
|
|
35191
|
+
{
|
|
35192
|
+
"id": "lionchat_companies_documents_list",
|
|
35193
|
+
"method": "GET",
|
|
35194
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/documents",
|
|
35195
|
+
"title": "Documentos da Empresa",
|
|
35196
|
+
"description": "Documentos de TODOS os contatos da empresa juntos (mesmas origens e regras da aba Documentos do contato: ficha, card, conversa, compromisso, formulario e contrato assinado). Cada item traz contacts [{id, name}] (de quem e). O mesmo arquivo mandado a varios contatos vem UMA vez, com todos os nomes. SO LEITURA: favoritar/renomear/enviar/apagar e pela ficha do contato (lionchat_contacts_documents_*). Lista inteira, teto de 1000 (meta.truncated avisa).",
|
|
35197
|
+
"category": "Empresas",
|
|
35198
|
+
"params": [
|
|
35199
|
+
{
|
|
35200
|
+
"name": "company_id",
|
|
35201
|
+
"type": "integer",
|
|
35202
|
+
"location": "path",
|
|
35203
|
+
"required": true,
|
|
35204
|
+
"description": "ID da empresa"
|
|
35205
|
+
}
|
|
35206
|
+
],
|
|
35207
|
+
"returns": "{payload: [...], meta: {total, truncated}}",
|
|
35208
|
+
"common_use_cases": [
|
|
35209
|
+
"Achar um arquivo de qualquer pessoa da empresa",
|
|
35210
|
+
"Conferir documentos enviados para a empresa"
|
|
35211
|
+
],
|
|
35212
|
+
"related_tools": [
|
|
35213
|
+
"lionchat_contacts_documents_list",
|
|
35214
|
+
"lionchat_companies_contacts_list"
|
|
35215
|
+
]
|
|
35216
|
+
},
|
|
35217
|
+
{
|
|
35218
|
+
"id": "lionchat_companies_tasks_list",
|
|
35219
|
+
"method": "GET",
|
|
35220
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/tasks",
|
|
35221
|
+
"title": "Compromissos da Empresa",
|
|
35222
|
+
"description": "Compromissos de TODOS os contatos da empresa, mais novo primeiro, pela mesma regra da ficha do contato (sem o compromisso particular de outra pessoa, so as agendas que o usuario ve). Cada item traz contact_name / conversation_contact_name. Precisa da Agenda ligada (senao 404). Editar/concluir: lionchat_tasks_update / lionchat_tasks_toggle.",
|
|
35223
|
+
"category": "Empresas",
|
|
35224
|
+
"params": [
|
|
35225
|
+
{
|
|
35226
|
+
"name": "company_id",
|
|
35227
|
+
"type": "integer",
|
|
35228
|
+
"location": "path",
|
|
35229
|
+
"required": true,
|
|
35230
|
+
"description": "ID da empresa"
|
|
35231
|
+
}
|
|
35232
|
+
],
|
|
35233
|
+
"returns": "array de compromissos (mesmo formato de lionchat_tasks_list)",
|
|
35234
|
+
"common_use_cases": [
|
|
35235
|
+
"Ver a agenda de uma empresa inteira",
|
|
35236
|
+
"Conferir proximas reunioes com a empresa"
|
|
35237
|
+
],
|
|
35238
|
+
"related_tools": [
|
|
35239
|
+
"lionchat_tasks_list",
|
|
35240
|
+
"lionchat_tasks_update"
|
|
35241
|
+
]
|
|
35242
|
+
},
|
|
35243
|
+
{
|
|
35244
|
+
"id": "lionchat_companies_kanban_items_list",
|
|
35245
|
+
"method": "GET",
|
|
35246
|
+
"path": "/api/v1/accounts/{account_id}/companies/{id}/kanban_items",
|
|
35247
|
+
"title": "Cards do Kanban da Empresa",
|
|
35248
|
+
"description": "Lista os cards do Kanban de TODOS os contatos da empresa (aba Cards da pagina da empresa). Mesma lista da aba Kanban da ficha do contato: card ligado a qualquer conversa dos contatos (principal ou vinculada), so os cards que o usuario ve no quadro (funil restrito e caixa respeitados), 25 por pagina, mais recentes primeiro. Cada card traz contacts[{id,name}] = de quem e (card ligado a 2 contatos da empresa traz os dois). ENTERPRISE; exige a funcao Empresas.",
|
|
35249
|
+
"category": "Empresas",
|
|
35250
|
+
"params": [
|
|
35251
|
+
{
|
|
35252
|
+
"name": "id",
|
|
35253
|
+
"type": "integer",
|
|
35254
|
+
"location": "path",
|
|
35255
|
+
"required": true,
|
|
35256
|
+
"description": "ID da empresa"
|
|
35257
|
+
},
|
|
35258
|
+
{
|
|
35259
|
+
"name": "status",
|
|
35260
|
+
"type": "string",
|
|
35261
|
+
"location": "query",
|
|
35262
|
+
"required": false,
|
|
35263
|
+
"description": "open (padrao na tela), won, lost; omitir = todos"
|
|
35264
|
+
},
|
|
35265
|
+
{
|
|
35266
|
+
"name": "funnel_id",
|
|
35267
|
+
"type": "integer",
|
|
35268
|
+
"location": "query",
|
|
35269
|
+
"required": false,
|
|
35270
|
+
"description": "Filtra por funil"
|
|
35271
|
+
},
|
|
35272
|
+
{
|
|
35273
|
+
"name": "page",
|
|
35274
|
+
"type": "integer",
|
|
35275
|
+
"location": "query",
|
|
35276
|
+
"required": false,
|
|
35277
|
+
"description": "Pagina (25 por pagina)"
|
|
35278
|
+
}
|
|
35279
|
+
],
|
|
35280
|
+
"returns": "{ meta: {total_count, page, per_page}, payload: [card com funnel, labels, next_task, permissions e contacts[{id,name}]] }",
|
|
35281
|
+
"common_use_cases": [
|
|
35282
|
+
"Ver os negocios de uma empresa",
|
|
35283
|
+
"Somar oportunidades abertas de um cliente B2B"
|
|
35284
|
+
],
|
|
35285
|
+
"related_tools": [
|
|
35286
|
+
"lionchat_contacts_kanban_items_list",
|
|
35287
|
+
"lionchat_companies_contacts_list",
|
|
35288
|
+
"lionchat_kanban_items_show"
|
|
35289
|
+
]
|
|
34269
35290
|
}
|
|
34270
35291
|
]
|