@lionchat/mcp-server 1.24.0 → 1.26.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 +2 -1
- package/dist/docs/resources/api-conventions.md +1 -0
- package/dist/docs/resources/best-practices.md +48 -1
- package/dist/docs/resources/conversation-flows.md +19 -1
- package/dist/docs/resources/data-model.md +63 -7
- package/dist/docs/resources/filtros-e-relatorios.md +2 -1
- package/dist/docs/resources/flowbuilder-design-guide.md +2 -0
- package/dist/docs/resources/kanban-deep-dive.md +31 -0
- package/dist/docs/resources/reports-guide.md +45 -3
- package/endpoints.json +841 -69
- 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
|
{
|
|
@@ -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
|
{
|
|
@@ -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
|
{
|
|
@@ -3274,7 +3288,7 @@
|
|
|
3274
3288
|
"type": "object",
|
|
3275
3289
|
"location": "body",
|
|
3276
3290
|
"required": false,
|
|
3277
|
-
"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. 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\"}."
|
|
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",
|
|
@@ -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",
|
|
@@ -5513,7 +5528,7 @@
|
|
|
5513
5528
|
"method": "GET",
|
|
5514
5529
|
"path": "/api/v2/accounts/{account_id}/reports",
|
|
5515
5530
|
"title": "Relatorios Detalhados",
|
|
5516
|
-
"description": "Serie temporal de uma metrica. metric obrigatorio. group_by: hour/day/week/month/year.",
|
|
5531
|
+
"description": "Serie temporal de uma metrica. metric obrigatorio. group_by: hour/day/week/month/year. Pra ver QUAIS conversas formam um ponto, use lionchat_reports_drilldown com o 'timestamp' dele.",
|
|
5517
5532
|
"category": "Relatorios",
|
|
5518
5533
|
"params": [
|
|
5519
5534
|
{
|
|
@@ -5582,7 +5597,99 @@
|
|
|
5582
5597
|
"related_tools": [
|
|
5583
5598
|
"lionchat_reports_list",
|
|
5584
5599
|
"lionchat_reports_list_1",
|
|
5585
|
-
"lionchat_reports_list_2"
|
|
5600
|
+
"lionchat_reports_list_2",
|
|
5601
|
+
"lionchat_reports_drilldown"
|
|
5602
|
+
]
|
|
5603
|
+
},
|
|
5604
|
+
{
|
|
5605
|
+
"id": "lionchat_reports_drilldown",
|
|
5606
|
+
"method": "GET",
|
|
5607
|
+
"path": "/api/v2/accounts/{account_id}/reports/drilldown",
|
|
5608
|
+
"title": "Conversas por trás de um ponto do gráfico",
|
|
5609
|
+
"description": "Lista as CONVERSAS que formam UM ponto da série temporal (lionchat_reports_list_5) — o mesmo que clicar numa barra do gráfico nos Relatórios. Usa a MESMA régua que desenhou o ponto, então a lista bate com o número (ex.: etiqueta conta pela data em que foi APLICADA). Fluxo: chame lionchat_reports_list_5, pegue o 'timestamp' do ponto e passe aqui em bucket_timestamp, repetindo metric, group_by, type, id, timezone_offset e business_hours da série (são eles que definem onde o ponto começa e termina). Mostra SÓ as conversas que a pessoa do token pode abrir: meta.hidden_count diz quantas ficaram de fora por permissão — diga isso ao usuário em vez de concluir que faltam conversas. 25 por página, mais recentes primeiro; teto de 5.000 conversas por ponto. Exige permissão de ver relatórios. Métrica fora da lista = 422 {error: 'invalid metric'}; data fora do formato Unix = 400.",
|
|
5610
|
+
"category": "Relatorios",
|
|
5611
|
+
"params": [
|
|
5612
|
+
{
|
|
5613
|
+
"name": "metric",
|
|
5614
|
+
"type": "string",
|
|
5615
|
+
"location": "query",
|
|
5616
|
+
"required": true,
|
|
5617
|
+
"description": "A MESMA métrica da série. Aceita SÓ: conversations_count | incoming_messages_count | outgoing_messages_count | resolutions_count | avg_first_response_time | avg_resolution_time | reply_time. Métricas de bot (bot_resolutions_count, bot_handoffs_count) NÃO têm lista."
|
|
5618
|
+
},
|
|
5619
|
+
{
|
|
5620
|
+
"name": "bucket_timestamp",
|
|
5621
|
+
"type": "string",
|
|
5622
|
+
"location": "query",
|
|
5623
|
+
"required": true,
|
|
5624
|
+
"description": "Início do ponto: o campo 'timestamp' devolvido por lionchat_reports_list_5 (Unix em SEGUNDOS)."
|
|
5625
|
+
},
|
|
5626
|
+
{
|
|
5627
|
+
"name": "group_by",
|
|
5628
|
+
"type": "string",
|
|
5629
|
+
"location": "query",
|
|
5630
|
+
"required": false,
|
|
5631
|
+
"description": "Tamanho do ponto: hour | day | week | month | year (padrão day). Use o MESMO da série, senão o recorte muda e a lista não bate."
|
|
5632
|
+
},
|
|
5633
|
+
{
|
|
5634
|
+
"name": "type",
|
|
5635
|
+
"type": "string",
|
|
5636
|
+
"location": "query",
|
|
5637
|
+
"required": false,
|
|
5638
|
+
"description": "Escopo: account | inbox | agent | label | team (padrão account). O mesmo da série."
|
|
5639
|
+
},
|
|
5640
|
+
{
|
|
5641
|
+
"name": "id",
|
|
5642
|
+
"type": "string",
|
|
5643
|
+
"location": "query",
|
|
5644
|
+
"required": false,
|
|
5645
|
+
"description": "ID da caixa/agente/etiqueta/time quando type != account. O mesmo da série."
|
|
5646
|
+
},
|
|
5647
|
+
{
|
|
5648
|
+
"name": "since",
|
|
5649
|
+
"type": "string",
|
|
5650
|
+
"location": "query",
|
|
5651
|
+
"required": false,
|
|
5652
|
+
"description": "Início do período do relatório (Unix em SEGUNDOS). Recorta o ponto quando o período começa no meio dele (ex.: semana que começou antes)."
|
|
5653
|
+
},
|
|
5654
|
+
{
|
|
5655
|
+
"name": "until",
|
|
5656
|
+
"type": "string",
|
|
5657
|
+
"location": "query",
|
|
5658
|
+
"required": false,
|
|
5659
|
+
"description": "Fim do período do relatório (Unix em SEGUNDOS). Recorta o último ponto."
|
|
5660
|
+
},
|
|
5661
|
+
{
|
|
5662
|
+
"name": "timezone_offset",
|
|
5663
|
+
"type": "string",
|
|
5664
|
+
"location": "query",
|
|
5665
|
+
"required": false,
|
|
5666
|
+
"description": "Fuso em horas (ex: -3 pra Brasília). O MESMO da série — define a fronteira do dia/hora do ponto."
|
|
5667
|
+
},
|
|
5668
|
+
{
|
|
5669
|
+
"name": "business_hours",
|
|
5670
|
+
"type": "boolean",
|
|
5671
|
+
"location": "query",
|
|
5672
|
+
"required": false,
|
|
5673
|
+
"description": "Só nas médias de tempo: true = mede só o expediente (mesma regra da série). Use o MESMO valor da série."
|
|
5674
|
+
},
|
|
5675
|
+
{
|
|
5676
|
+
"name": "page",
|
|
5677
|
+
"type": "integer",
|
|
5678
|
+
"location": "query",
|
|
5679
|
+
"required": false,
|
|
5680
|
+
"description": "Página (25 por página, fixo). Padrão 1."
|
|
5681
|
+
}
|
|
5682
|
+
],
|
|
5683
|
+
"returns": "{ meta: { metric, since, until (o recorte REAL do ponto, Unix), page, per_page, total_count (conversas do ponto), visible_count (as que a pessoa pode abrir), hidden_count (fora por permissão) }, payload: [{ id, display_id (número da conversa na tela), status, created_at (Unix), contact_name, inbox_name, assignee_name, detail }] }. detail = o porquê de cada conversa: {count} (quantas mensagens/eventos dela caíram no ponto) nas contagens de mensagens e resoluções, {seconds} nas médias de tempo, ou null.",
|
|
5684
|
+
"common_use_cases": [
|
|
5685
|
+
"Quais conversas formam o pico de terça-feira no gráfico",
|
|
5686
|
+
"Ver quem demorou para responder naquela semana (avg_first_response_time)",
|
|
5687
|
+
"Listar as conversas resolvidas num dia específico"
|
|
5688
|
+
],
|
|
5689
|
+
"related_tools": [
|
|
5690
|
+
"lionchat_reports_list_5",
|
|
5691
|
+
"lionchat_reports_summary",
|
|
5692
|
+
"lionchat_conversations_show"
|
|
5586
5693
|
]
|
|
5587
5694
|
},
|
|
5588
5695
|
{
|
|
@@ -6395,9 +6502,16 @@
|
|
|
6395
6502
|
"location": "query",
|
|
6396
6503
|
"required": false,
|
|
6397
6504
|
"description": "Busca textual em pergunta/resposta"
|
|
6505
|
+
},
|
|
6506
|
+
{
|
|
6507
|
+
"name": "sort",
|
|
6508
|
+
"type": "string",
|
|
6509
|
+
"location": "query",
|
|
6510
|
+
"required": false,
|
|
6511
|
+
"description": "occurrences = mais perguntadas primeiro (use com status=pending pra ver as sugestões que mais se repetem). Sem o parâmetro = mais recentes primeiro."
|
|
6398
6512
|
}
|
|
6399
6513
|
],
|
|
6400
|
-
"returns": "array de respostas (AssistantResponse)",
|
|
6514
|
+
"returns": "array de respostas (AssistantResponse). Cada uma traz occurrences_count (desde 26/09/2026): em quantas conversas DIFERENTES a mesma pergunta pendente apareceu (começa em 1; só soma enquanto pendente) — é o 'perguntada em N conversas' da tela.",
|
|
6401
6515
|
"common_use_cases": [
|
|
6402
6516
|
"Dashboard: contar/exibir assistentes AI",
|
|
6403
6517
|
"Buscar com filtros antes de outra operação",
|
|
@@ -6422,7 +6536,7 @@
|
|
|
6422
6536
|
"type": "integer",
|
|
6423
6537
|
"location": "body",
|
|
6424
6538
|
"required": true,
|
|
6425
|
-
"description": "ID do agente dono da FAQ — NOT NULL no banco"
|
|
6539
|
+
"description": "ID do agente dono da FAQ — NOT NULL no banco. Tem que ser um agente DESTA conta: de outra conta = 404 (25/09/2026)."
|
|
6426
6540
|
},
|
|
6427
6541
|
{
|
|
6428
6542
|
"name": "question",
|
|
@@ -10479,46 +10593,102 @@
|
|
|
10479
10593
|
"method": "POST",
|
|
10480
10594
|
"path": "/api/v1/accounts/{account_id}/flows/test_api",
|
|
10481
10595
|
"title": "Testar Node API",
|
|
10482
|
-
"description": "
|
|
10596
|
+
"description": "Executa a requisição HTTP de um bloco de API do FlowBuilder pelo SERVIDOR (o mesmo que o botão 'Testar requisição' da tela) e devolve a resposta. Só administrador. Tudo vai dentro de 'config', com os MESMOS nomes que o bloco de API grava no flow_data (apiUrl, apiMethod, apiHeaders...): dá pra copiar o data do node lido com lionchat_flows_show. Variáveis {{...}} são trocadas pelo valor de test_variables; {{account.custom_attribute.X}} usa a variável da conta (inclusive secreta). Variável sem valor fica como {{nome}} no texto. CORRIGIDO 25/09/2026: antes o servidor descartava em silêncio apiQueryParams, apiBodyMode, apiBodyFields, apiSendHeaders e apiSendQueryParams — o teste saía sem parâmetro de URL e sem body em modo chave-valor. Não segue redirecionamento.",
|
|
10483
10597
|
"category": "Flows",
|
|
10484
10598
|
"params": [
|
|
10485
10599
|
{
|
|
10486
|
-
"name": "
|
|
10600
|
+
"name": "config.apiUrl",
|
|
10487
10601
|
"type": "string",
|
|
10488
10602
|
"location": "body",
|
|
10489
10603
|
"required": true,
|
|
10490
|
-
"description": "URL do endpoint"
|
|
10604
|
+
"description": "URL do endpoint (aceita {{variáveis}})."
|
|
10491
10605
|
},
|
|
10492
10606
|
{
|
|
10493
|
-
"name": "
|
|
10607
|
+
"name": "config.apiMethod",
|
|
10494
10608
|
"type": "string",
|
|
10495
10609
|
"location": "body",
|
|
10496
10610
|
"required": false,
|
|
10497
|
-
"description": "GET, POST, PUT, PATCH, DELETE"
|
|
10611
|
+
"description": "GET (padrão), POST, PUT, PATCH, DELETE. Body só é enviado em POST/PUT/PATCH."
|
|
10498
10612
|
},
|
|
10499
10613
|
{
|
|
10500
|
-
"name": "
|
|
10501
|
-
"type": "
|
|
10614
|
+
"name": "config.apiQueryParams",
|
|
10615
|
+
"type": "array",
|
|
10502
10616
|
"location": "body",
|
|
10503
10617
|
"required": false,
|
|
10504
|
-
"description": "
|
|
10618
|
+
"description": "Parâmetros de URL: lista de {key, value} (aceitam {{variáveis}}). Acrescentados à URL já codificados."
|
|
10505
10619
|
},
|
|
10506
10620
|
{
|
|
10507
|
-
"name": "
|
|
10621
|
+
"name": "config.apiSendQueryParams",
|
|
10622
|
+
"type": "boolean",
|
|
10623
|
+
"location": "body",
|
|
10624
|
+
"required": false,
|
|
10625
|
+
"description": "false = ignora apiQueryParams (chave desligada na tela). Padrão true."
|
|
10626
|
+
},
|
|
10627
|
+
{
|
|
10628
|
+
"name": "config.apiHeaders",
|
|
10629
|
+
"type": "array",
|
|
10630
|
+
"location": "body",
|
|
10631
|
+
"required": false,
|
|
10632
|
+
"description": "Cabeçalhos: lista de {key, value} (aceitam {{variáveis}})."
|
|
10633
|
+
},
|
|
10634
|
+
{
|
|
10635
|
+
"name": "config.apiSendHeaders",
|
|
10636
|
+
"type": "boolean",
|
|
10637
|
+
"location": "body",
|
|
10638
|
+
"required": false,
|
|
10639
|
+
"description": "false = ignora apiHeaders. Padrão true."
|
|
10640
|
+
},
|
|
10641
|
+
{
|
|
10642
|
+
"name": "config.apiAuthType",
|
|
10643
|
+
"type": "string",
|
|
10644
|
+
"location": "body",
|
|
10645
|
+
"required": false,
|
|
10646
|
+
"description": "bearer (vira Authorization: Bearer <token>) | basic (Authorization: Basic <token>, token já em base64) | api_key (X-Api-Key: <token>) | vazio = sem autenticação."
|
|
10647
|
+
},
|
|
10648
|
+
{
|
|
10649
|
+
"name": "config.apiAuthToken",
|
|
10650
|
+
"type": "string",
|
|
10651
|
+
"location": "body",
|
|
10652
|
+
"required": false,
|
|
10653
|
+
"description": "Token da autenticação (aceita {{variáveis}}, ex. {{account.custom_attribute.minha_chave}})."
|
|
10654
|
+
},
|
|
10655
|
+
{
|
|
10656
|
+
"name": "config.apiBodyMode",
|
|
10657
|
+
"type": "string",
|
|
10658
|
+
"location": "body",
|
|
10659
|
+
"required": false,
|
|
10660
|
+
"description": "json (padrão: manda apiBody como está) | fields (monta um JSON a partir de apiBodyFields)."
|
|
10661
|
+
},
|
|
10662
|
+
{
|
|
10663
|
+
"name": "config.apiBody",
|
|
10508
10664
|
"type": "string",
|
|
10509
10665
|
"location": "body",
|
|
10510
10666
|
"required": false,
|
|
10511
|
-
"description": "
|
|
10667
|
+
"description": "Corpo em texto (normalmente JSON) quando apiBodyMode=json. Aceita {{variáveis}}."
|
|
10668
|
+
},
|
|
10669
|
+
{
|
|
10670
|
+
"name": "config.apiBodyFields",
|
|
10671
|
+
"type": "array",
|
|
10672
|
+
"location": "body",
|
|
10673
|
+
"required": false,
|
|
10674
|
+
"description": "Corpo em modo chave-valor (apiBodyMode=fields): lista de {key, value}; vira um JSON {key: value}."
|
|
10512
10675
|
},
|
|
10513
10676
|
{
|
|
10514
|
-
"name": "
|
|
10677
|
+
"name": "config.apiTimeout",
|
|
10515
10678
|
"type": "integer",
|
|
10516
10679
|
"location": "body",
|
|
10517
10680
|
"required": false,
|
|
10518
|
-
"description": "
|
|
10681
|
+
"description": "Tempo limite em SEGUNDOS: padrão 10, máximo 25 (acima disso é limitado a 25)."
|
|
10682
|
+
},
|
|
10683
|
+
{
|
|
10684
|
+
"name": "test_variables",
|
|
10685
|
+
"type": "object",
|
|
10686
|
+
"location": "body",
|
|
10687
|
+
"required": false,
|
|
10688
|
+
"description": "Valores pras variáveis do teste: {\"contact.name\": \"Maria\", \"var.pedido\": \"123\"} — a chave é o texto de dentro das chaves duplas."
|
|
10519
10689
|
}
|
|
10520
10690
|
],
|
|
10521
|
-
"returns": "resposta
|
|
10691
|
+
"returns": "{ status (código HTTP; 0 = não chegou a responder), ok (true se 2xx), body (resposta como texto; em falha, o motivo — ex. 'URL nao configurada', 'Request timeout apos 10s') }",
|
|
10522
10692
|
"common_use_cases": [
|
|
10523
10693
|
"Cadastro inicial de flow",
|
|
10524
10694
|
"Automação a partir de evento externo",
|
|
@@ -10619,7 +10789,7 @@
|
|
|
10619
10789
|
"type": "array",
|
|
10620
10790
|
"location": "body",
|
|
10621
10791
|
"required": true,
|
|
10622
|
-
"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')."
|
|
10792
|
+
"description": "CADA item de actions DEVE ser um OBJETO {action_name (string), action_params (array)} — NUNCA um texto/string solto. Ex.: [{\"action_name\":\"send_message\",\"action_params\":[\"Oi\"]}]. [{action_name, action_params[]}] Actions novas (2026-07-21): 'update_contact_attribute' e 'update_conversation_attribute' — action_params: [{attribute_key, value}], value aceita texto fixo OU variável Liquid (ex. {{contact.phone_number}}); grava atributo personalizado com MERGE (não apaga os demais) e passa pelo porteiro de data. 'pending_conversation' (2026-07-20, sem params) — deixa a conversa PENDENTE (handoff; mensagem nova do cliente NÃO reabre). ATENCAO — 'send_whatsapp_template': action_params: [{name, id, language, category, processed_params}]. 'name' e OBRIGATORIO e e o nome EXATO do modelo aprovado na Meta (o envio acontece por ele); 'language' precisa bater com o idioma aprovado (padrao pt_BR); processed_params: {\"body\": {\"1\": \"{{contact.first_name}}\"}}. NUNCA use template_name/template_id/template_category/template_language — esse e o formato dos nos do FlowBuilder e aqui e IGNORADO: a regra salva com sucesso, aparece na tela e NAO ENVIA NADA, sem erro nem log (incidente real conta 39 em 02/08/2026: 14h sem enviar, 9 leads perdidos). Confira o modelo antes com lionchat_inboxes_whatsapp_templates_list. So funciona em caixa WhatsApp API Oficial (Cloud). REGRA GERAL: action_params e SEMPRE um array (o backend le params[0]) e seu CONTEUDO nao e validado pela API. Se nao souber o formato de uma acao, leia uma regra existente com lionchat_automation_rules_show e copie — nunca invente nome de chave. Formato de TODAS as acoes no resource 'conversation-flows'. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]. Tabela completa no resource conversation-flows ('Acoes de automacao'). ESPERA QUE CONFERE (26/09/2026): 'wait' aceita o formato OBJETO [{\"seconds\": 120, \"only_if_open\": true, \"only_if_no_reply\": true}] — na VOLTA, only_if_open só segue se a conversa ainda estiver aberta/pendente e only_if_no_reply só segue se ninguém respondeu o cliente durante a espera (qualquer mensagem pública de saída conta). Barrou = o resto da regra não roda e o histórico da execução mostra o passo wait_check 'skipped'. O formato antigo [120] continua valendo, sem conferência. Teto 300 s."
|
|
10623
10793
|
},
|
|
10624
10794
|
{
|
|
10625
10795
|
"name": "active",
|
|
@@ -10717,7 +10887,7 @@
|
|
|
10717
10887
|
"type": "array",
|
|
10718
10888
|
"location": "body",
|
|
10719
10889
|
"required": false,
|
|
10720
|
-
"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')."
|
|
10890
|
+
"description": "CADA item de actions DEVE ser um OBJETO {action_name (string), action_params (array)} — NUNCA um texto/string solto. Ex.: [{\"action_name\":\"send_message\",\"action_params\":[\"Oi\"]}]. Acoes Actions novas (2026-07-21): 'update_contact_attribute' e 'update_conversation_attribute' — action_params: [{attribute_key, value}], value aceita texto fixo OU variável Liquid (ex. {{contact.phone_number}}); grava atributo personalizado com MERGE (não apaga os demais) e passa pelo porteiro de data. 'pending_conversation' (2026-07-20, sem params) — deixa a conversa PENDENTE (handoff; mensagem nova do cliente NÃO reabre). ATENCAO — 'send_whatsapp_template': action_params: [{name, id, language, category, processed_params}]. 'name' e OBRIGATORIO e e o nome EXATO do modelo aprovado na Meta (o envio acontece por ele); 'language' precisa bater com o idioma aprovado (padrao pt_BR); processed_params: {\"body\": {\"1\": \"{{contact.first_name}}\"}}. NUNCA use template_name/template_id/template_category/template_language — esse e o formato dos nos do FlowBuilder e aqui e IGNORADO: a regra salva com sucesso, aparece na tela e NAO ENVIA NADA, sem erro nem log (incidente real conta 39 em 02/08/2026: 14h sem enviar, 9 leads perdidos). Confira o modelo antes com lionchat_inboxes_whatsapp_templates_list. So funciona em caixa WhatsApp API Oficial (Cloud). REGRA GERAL: action_params e SEMPRE um array (o backend le params[0]) e seu CONTEUDO nao e validado pela API. Se nao souber o formato de uma acao, leia uma regra existente com lionchat_automation_rules_show e copie — nunca invente nome de chave. Formato de TODAS as acoes no resource 'conversation-flows'. MAIS USADOS (action_params e SEMPRE lista): send_message [\"texto\"]; add_private_note [\"texto\"]; add_label/remove_label [\"nome-da-etiqueta\"]; assign_agent [70] ([\"nil\"] desatribui); assign_team [3]; change_status [\"resolved\"|\"open\"|\"pending\"|\"snoozed\"]; change_priority [\"high\"]; send_canned_response [12]; update_conversation_attribute [{\"attribute_key\": \"chave\", \"value\": \"texto\"}]; create_kanban_item [{\"funnel_id\": 31, \"funnel_stage\": \"prospeccao\"}]; move_kanban_item_to_stage [{\"funnel_id\": 31, \"funnel_stage\": \"qualificacao\"}]. Tabela completa no resource conversation-flows ('Acoes de automacao'). ESPERA QUE CONFERE (26/09/2026): 'wait' aceita o formato OBJETO [{\"seconds\": 120, \"only_if_open\": true, \"only_if_no_reply\": true}] — na VOLTA, only_if_open só segue se a conversa ainda estiver aberta/pendente e only_if_no_reply só segue se ninguém respondeu o cliente durante a espera (qualquer mensagem pública de saída conta). Barrou = o resto da regra não roda e o histórico da execução mostra o passo wait_check 'skipped'. O formato antigo [120] continua valendo, sem conferência. Teto 300 s."
|
|
10721
10891
|
}
|
|
10722
10892
|
],
|
|
10723
10893
|
"returns": "regra de automação atualizado",
|
|
@@ -11668,7 +11838,7 @@
|
|
|
11668
11838
|
"method": "GET",
|
|
11669
11839
|
"path": "/api/v1/accounts/{account_id}/companies",
|
|
11670
11840
|
"title": "Listar Empresas",
|
|
11671
|
-
"description": "Lista as empresas da conta. meta usa total_count/page.",
|
|
11841
|
+
"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.",
|
|
11672
11842
|
"category": "Empresas",
|
|
11673
11843
|
"params": [
|
|
11674
11844
|
{
|
|
@@ -11683,7 +11853,7 @@
|
|
|
11683
11853
|
"type": "string",
|
|
11684
11854
|
"location": "query",
|
|
11685
11855
|
"required": false,
|
|
11686
|
-
"description": "
|
|
11856
|
+
"description": "Ordenacao: name, domain, created_at, contacts_count, last_activity_at (prefixo - = decrescente, ex. -last_activity_at)"
|
|
11687
11857
|
}
|
|
11688
11858
|
],
|
|
11689
11859
|
"returns": "meta (contadores globais) + payload (array de empresas)",
|
|
@@ -11699,7 +11869,7 @@
|
|
|
11699
11869
|
"method": "POST",
|
|
11700
11870
|
"path": "/api/v1/accounts/{account_id}/companies",
|
|
11701
11871
|
"title": "Criar Empresa",
|
|
11702
|
-
"description": "Cria uma empresa. Body exige wrapper company. Aceita name, domain, description, avatar. NAO aceita custom_attributes. ENTERPRISE-only.",
|
|
11872
|
+
"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).",
|
|
11703
11873
|
"category": "Empresas",
|
|
11704
11874
|
"params": [
|
|
11705
11875
|
{
|
|
@@ -11707,7 +11877,7 @@
|
|
|
11707
11877
|
"type": "object",
|
|
11708
11878
|
"location": "body",
|
|
11709
11879
|
"required": true,
|
|
11710
|
-
"description": "Wrapper com { name, domain, description, avatar }"
|
|
11880
|
+
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} } }"
|
|
11711
11881
|
}
|
|
11712
11882
|
],
|
|
11713
11883
|
"returns": "empresa criado (com novo ID)",
|
|
@@ -11741,14 +11911,18 @@
|
|
|
11741
11911
|
"Verificar estado atual antes de uma ação",
|
|
11742
11912
|
"Mostrar perfil ou ficha de empresa"
|
|
11743
11913
|
],
|
|
11744
|
-
"related_tools": [
|
|
11914
|
+
"related_tools": [
|
|
11915
|
+
"lionchat_companies_contacts_list",
|
|
11916
|
+
"lionchat_companies_conversations_list",
|
|
11917
|
+
"lionchat_companies_notes_list"
|
|
11918
|
+
]
|
|
11745
11919
|
},
|
|
11746
11920
|
{
|
|
11747
11921
|
"id": "lionchat_companies_update",
|
|
11748
11922
|
"method": "PATCH",
|
|
11749
11923
|
"path": "/api/v1/accounts/{account_id}/companies/{id}",
|
|
11750
11924
|
"title": "Atualizar Empresa",
|
|
11751
|
-
"description": "Atualiza dados da empresa.
|
|
11925
|
+
"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).",
|
|
11752
11926
|
"category": "Empresas",
|
|
11753
11927
|
"params": [
|
|
11754
11928
|
{
|
|
@@ -11763,7 +11937,7 @@
|
|
|
11763
11937
|
"type": "object",
|
|
11764
11938
|
"location": "body",
|
|
11765
11939
|
"required": true,
|
|
11766
|
-
"description": "Wrapper com { name, domain, description, avatar }"
|
|
11940
|
+
"description": "Wrapper com { name, domain, description, avatar, additional_attributes: { legal_name, cnpj, phone, email, address: {...}, social_profiles: {...} } }"
|
|
11767
11941
|
}
|
|
11768
11942
|
],
|
|
11769
11943
|
"returns": "empresa atualizado",
|
|
@@ -11851,6 +12025,183 @@
|
|
|
11851
12025
|
],
|
|
11852
12026
|
"related_tools": []
|
|
11853
12027
|
},
|
|
12028
|
+
{
|
|
12029
|
+
"id": "lionchat_companies_contacts_list",
|
|
12030
|
+
"method": "GET",
|
|
12031
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/contacts",
|
|
12032
|
+
"title": "Contatos da Empresa",
|
|
12033
|
+
"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).",
|
|
12034
|
+
"category": "Empresas",
|
|
12035
|
+
"params": [
|
|
12036
|
+
{
|
|
12037
|
+
"name": "company_id",
|
|
12038
|
+
"type": "integer",
|
|
12039
|
+
"location": "path",
|
|
12040
|
+
"required": true,
|
|
12041
|
+
"description": "ID da empresa"
|
|
12042
|
+
},
|
|
12043
|
+
{
|
|
12044
|
+
"name": "page",
|
|
12045
|
+
"type": "integer",
|
|
12046
|
+
"location": "query",
|
|
12047
|
+
"required": false,
|
|
12048
|
+
"description": "Pagina (padrao: 1)"
|
|
12049
|
+
}
|
|
12050
|
+
],
|
|
12051
|
+
"returns": "meta {count, current_page} + payload (array de contatos)",
|
|
12052
|
+
"common_use_cases": [
|
|
12053
|
+
"Ver quem trabalha numa empresa",
|
|
12054
|
+
"Conferir cargo das pessoas de um cliente"
|
|
12055
|
+
],
|
|
12056
|
+
"related_tools": [
|
|
12057
|
+
"lionchat_companies_show",
|
|
12058
|
+
"lionchat_companies_contacts_create",
|
|
12059
|
+
"lionchat_companies_contacts_destroy"
|
|
12060
|
+
]
|
|
12061
|
+
},
|
|
12062
|
+
{
|
|
12063
|
+
"id": "lionchat_companies_contacts_create",
|
|
12064
|
+
"method": "POST",
|
|
12065
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/contacts",
|
|
12066
|
+
"title": "Colocar Contato na Empresa",
|
|
12067
|
+
"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.",
|
|
12068
|
+
"category": "Empresas",
|
|
12069
|
+
"params": [
|
|
12070
|
+
{
|
|
12071
|
+
"name": "company_id",
|
|
12072
|
+
"type": "integer",
|
|
12073
|
+
"location": "path",
|
|
12074
|
+
"required": true,
|
|
12075
|
+
"description": "ID da empresa"
|
|
12076
|
+
},
|
|
12077
|
+
{
|
|
12078
|
+
"name": "contact_id",
|
|
12079
|
+
"type": "integer",
|
|
12080
|
+
"location": "body",
|
|
12081
|
+
"required": true,
|
|
12082
|
+
"description": "ID do contato a colocar na empresa"
|
|
12083
|
+
}
|
|
12084
|
+
],
|
|
12085
|
+
"returns": "payload (contato atualizado)",
|
|
12086
|
+
"common_use_cases": [
|
|
12087
|
+
"Organizar contatos por cliente",
|
|
12088
|
+
"Corrigir a empresa de um contato"
|
|
12089
|
+
],
|
|
12090
|
+
"related_tools": [
|
|
12091
|
+
"lionchat_contacts_search",
|
|
12092
|
+
"lionchat_companies_contacts_list",
|
|
12093
|
+
"lionchat_contacts_update"
|
|
12094
|
+
]
|
|
12095
|
+
},
|
|
12096
|
+
{
|
|
12097
|
+
"id": "lionchat_companies_contacts_destroy",
|
|
12098
|
+
"method": "DELETE",
|
|
12099
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/contacts/{contact_id}",
|
|
12100
|
+
"title": "Tirar Contato da Empresa",
|
|
12101
|
+
"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.",
|
|
12102
|
+
"category": "Empresas",
|
|
12103
|
+
"params": [
|
|
12104
|
+
{
|
|
12105
|
+
"name": "company_id",
|
|
12106
|
+
"type": "integer",
|
|
12107
|
+
"location": "path",
|
|
12108
|
+
"required": true,
|
|
12109
|
+
"description": "ID da empresa"
|
|
12110
|
+
},
|
|
12111
|
+
{
|
|
12112
|
+
"name": "contact_id",
|
|
12113
|
+
"type": "integer",
|
|
12114
|
+
"location": "path",
|
|
12115
|
+
"required": true,
|
|
12116
|
+
"description": "ID do contato"
|
|
12117
|
+
}
|
|
12118
|
+
],
|
|
12119
|
+
"returns": "200 OK",
|
|
12120
|
+
"common_use_cases": [
|
|
12121
|
+
"Pessoa saiu da empresa",
|
|
12122
|
+
"Contato ligado errado pelo dominio do e-mail"
|
|
12123
|
+
],
|
|
12124
|
+
"related_tools": [
|
|
12125
|
+
"lionchat_companies_contacts_list"
|
|
12126
|
+
]
|
|
12127
|
+
},
|
|
12128
|
+
{
|
|
12129
|
+
"id": "lionchat_companies_notes_list",
|
|
12130
|
+
"method": "GET",
|
|
12131
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes",
|
|
12132
|
+
"title": "Anotacoes da Empresa",
|
|
12133
|
+
"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.",
|
|
12134
|
+
"category": "Empresas",
|
|
12135
|
+
"params": [
|
|
12136
|
+
{
|
|
12137
|
+
"name": "company_id",
|
|
12138
|
+
"type": "integer",
|
|
12139
|
+
"location": "path",
|
|
12140
|
+
"required": true,
|
|
12141
|
+
"description": "ID da empresa"
|
|
12142
|
+
}
|
|
12143
|
+
],
|
|
12144
|
+
"returns": "payload (array de anotacoes; kind = company ou contact)",
|
|
12145
|
+
"common_use_cases": [
|
|
12146
|
+
"Resumo do relacionamento com um cliente",
|
|
12147
|
+
"Preparar reuniao com a empresa"
|
|
12148
|
+
],
|
|
12149
|
+
"related_tools": [
|
|
12150
|
+
"lionchat_companies_notes_create",
|
|
12151
|
+
"lionchat_contacts_notes_show",
|
|
12152
|
+
"lionchat_companies_conversations_list"
|
|
12153
|
+
]
|
|
12154
|
+
},
|
|
12155
|
+
{
|
|
12156
|
+
"id": "lionchat_companies_conversations_list",
|
|
12157
|
+
"method": "GET",
|
|
12158
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/conversations",
|
|
12159
|
+
"title": "Conversas da Empresa",
|
|
12160
|
+
"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).",
|
|
12161
|
+
"category": "Empresas",
|
|
12162
|
+
"params": [
|
|
12163
|
+
{
|
|
12164
|
+
"name": "company_id",
|
|
12165
|
+
"type": "integer",
|
|
12166
|
+
"location": "path",
|
|
12167
|
+
"required": true,
|
|
12168
|
+
"description": "ID da empresa"
|
|
12169
|
+
}
|
|
12170
|
+
],
|
|
12171
|
+
"returns": "payload (array de conversas)",
|
|
12172
|
+
"common_use_cases": [
|
|
12173
|
+
"Historico de atendimento de um cliente",
|
|
12174
|
+
"Ver se alguem da empresa falou recentemente"
|
|
12175
|
+
],
|
|
12176
|
+
"related_tools": [
|
|
12177
|
+
"lionchat_companies_notes_list",
|
|
12178
|
+
"lionchat_conversations_show"
|
|
12179
|
+
]
|
|
12180
|
+
},
|
|
12181
|
+
{
|
|
12182
|
+
"id": "lionchat_companies_avatar_destroy",
|
|
12183
|
+
"method": "DELETE",
|
|
12184
|
+
"path": "/api/v1/accounts/{account_id}/companies/{id}/avatar",
|
|
12185
|
+
"title": "Tirar Foto da Empresa",
|
|
12186
|
+
"description": "Remove a foto da empresa. Para trocar a foto, envie avatar (arquivo) no lionchat_companies_update.",
|
|
12187
|
+
"category": "Empresas",
|
|
12188
|
+
"params": [
|
|
12189
|
+
{
|
|
12190
|
+
"name": "id",
|
|
12191
|
+
"type": "integer",
|
|
12192
|
+
"location": "path",
|
|
12193
|
+
"required": true,
|
|
12194
|
+
"description": "ID da empresa"
|
|
12195
|
+
}
|
|
12196
|
+
],
|
|
12197
|
+
"returns": "payload (empresa)",
|
|
12198
|
+
"common_use_cases": [
|
|
12199
|
+
"Foto errada puxada do site da empresa"
|
|
12200
|
+
],
|
|
12201
|
+
"related_tools": [
|
|
12202
|
+
"lionchat_companies_update"
|
|
12203
|
+
]
|
|
12204
|
+
},
|
|
11854
12205
|
{
|
|
11855
12206
|
"id": "lionchat_offers_list",
|
|
11856
12207
|
"method": "GET",
|
|
@@ -15118,10 +15469,10 @@
|
|
|
15118
15469
|
},
|
|
15119
15470
|
{
|
|
15120
15471
|
"name": "group_id",
|
|
15121
|
-
"type": "
|
|
15472
|
+
"type": "string",
|
|
15122
15473
|
"location": "path",
|
|
15123
15474
|
"required": true,
|
|
15124
|
-
"description": "ID do grupo"
|
|
15475
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15125
15476
|
}
|
|
15126
15477
|
],
|
|
15127
15478
|
"returns": "grupo WhatsApp (objeto completo com associações)",
|
|
@@ -15153,10 +15504,10 @@
|
|
|
15153
15504
|
},
|
|
15154
15505
|
{
|
|
15155
15506
|
"name": "group_id",
|
|
15156
|
-
"type": "
|
|
15507
|
+
"type": "string",
|
|
15157
15508
|
"location": "path",
|
|
15158
15509
|
"required": true,
|
|
15159
|
-
"description": "ID do grupo"
|
|
15510
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15160
15511
|
},
|
|
15161
15512
|
{
|
|
15162
15513
|
"name": "subject",
|
|
@@ -15195,10 +15546,10 @@
|
|
|
15195
15546
|
},
|
|
15196
15547
|
{
|
|
15197
15548
|
"name": "group_id",
|
|
15198
|
-
"type": "
|
|
15549
|
+
"type": "string",
|
|
15199
15550
|
"location": "path",
|
|
15200
15551
|
"required": true,
|
|
15201
|
-
"description": "ID do grupo"
|
|
15552
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15202
15553
|
},
|
|
15203
15554
|
{
|
|
15204
15555
|
"name": "description",
|
|
@@ -15237,10 +15588,10 @@
|
|
|
15237
15588
|
},
|
|
15238
15589
|
{
|
|
15239
15590
|
"name": "group_id",
|
|
15240
|
-
"type": "
|
|
15591
|
+
"type": "string",
|
|
15241
15592
|
"location": "path",
|
|
15242
15593
|
"required": true,
|
|
15243
|
-
"description": "ID do grupo"
|
|
15594
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15244
15595
|
}
|
|
15245
15596
|
],
|
|
15246
15597
|
"returns": "array de participantes do grupo (id, admin, etc.)",
|
|
@@ -15272,10 +15623,10 @@
|
|
|
15272
15623
|
},
|
|
15273
15624
|
{
|
|
15274
15625
|
"name": "group_id",
|
|
15275
|
-
"type": "
|
|
15626
|
+
"type": "string",
|
|
15276
15627
|
"location": "path",
|
|
15277
15628
|
"required": true,
|
|
15278
|
-
"description": "ID do grupo"
|
|
15629
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15279
15630
|
},
|
|
15280
15631
|
{
|
|
15281
15632
|
"name": "participants",
|
|
@@ -15314,10 +15665,10 @@
|
|
|
15314
15665
|
},
|
|
15315
15666
|
{
|
|
15316
15667
|
"name": "group_id",
|
|
15317
|
-
"type": "
|
|
15668
|
+
"type": "string",
|
|
15318
15669
|
"location": "path",
|
|
15319
15670
|
"required": true,
|
|
15320
|
-
"description": "ID do grupo"
|
|
15671
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15321
15672
|
},
|
|
15322
15673
|
{
|
|
15323
15674
|
"name": "participants",
|
|
@@ -15356,10 +15707,10 @@
|
|
|
15356
15707
|
},
|
|
15357
15708
|
{
|
|
15358
15709
|
"name": "group_id",
|
|
15359
|
-
"type": "
|
|
15710
|
+
"type": "string",
|
|
15360
15711
|
"location": "path",
|
|
15361
15712
|
"required": true,
|
|
15362
|
-
"description": "ID do grupo"
|
|
15713
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15363
15714
|
},
|
|
15364
15715
|
{
|
|
15365
15716
|
"name": "participants",
|
|
@@ -15398,10 +15749,10 @@
|
|
|
15398
15749
|
},
|
|
15399
15750
|
{
|
|
15400
15751
|
"name": "group_id",
|
|
15401
|
-
"type": "
|
|
15752
|
+
"type": "string",
|
|
15402
15753
|
"location": "path",
|
|
15403
15754
|
"required": true,
|
|
15404
|
-
"description": "ID do grupo"
|
|
15755
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15405
15756
|
},
|
|
15406
15757
|
{
|
|
15407
15758
|
"name": "participants",
|
|
@@ -15440,10 +15791,10 @@
|
|
|
15440
15791
|
},
|
|
15441
15792
|
{
|
|
15442
15793
|
"name": "group_id",
|
|
15443
|
-
"type": "
|
|
15794
|
+
"type": "string",
|
|
15444
15795
|
"location": "path",
|
|
15445
15796
|
"required": true,
|
|
15446
|
-
"description": "ID do grupo"
|
|
15797
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15447
15798
|
}
|
|
15448
15799
|
],
|
|
15449
15800
|
"returns": "link de convite do grupo (ex: { code, url })",
|
|
@@ -15463,7 +15814,7 @@
|
|
|
15463
15814
|
"method": "POST",
|
|
15464
15815
|
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha_groups/{group_id}/invite_code/revoke",
|
|
15465
15816
|
"title": "Revogar Link de Convite",
|
|
15466
|
-
"description": "Revoga o link de convite atual do grupo WAHA e gera um novo. O numero conectado precisa ser admin do grupo (403 senao).",
|
|
15817
|
+
"description": "Revoga o link de convite atual do grupo WAHA e gera um novo. O link antigo PARA DE FUNCIONAR, inclusive o que ja foi enviado por fluxos e campanhas — confirme com a pessoa antes. O numero conectado precisa ser admin do grupo (403 senao).",
|
|
15467
15818
|
"category": "Grupos WhatsApp",
|
|
15468
15819
|
"params": [
|
|
15469
15820
|
{
|
|
@@ -15475,10 +15826,10 @@
|
|
|
15475
15826
|
},
|
|
15476
15827
|
{
|
|
15477
15828
|
"name": "group_id",
|
|
15478
|
-
"type": "
|
|
15829
|
+
"type": "string",
|
|
15479
15830
|
"location": "path",
|
|
15480
15831
|
"required": true,
|
|
15481
|
-
"description": "ID do grupo"
|
|
15832
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15482
15833
|
}
|
|
15483
15834
|
],
|
|
15484
15835
|
"returns": "{ success: true } ou { data: ... }",
|
|
@@ -15498,7 +15849,7 @@
|
|
|
15498
15849
|
"method": "PUT",
|
|
15499
15850
|
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha_groups/{group_id}/settings",
|
|
15500
15851
|
"title": "Atualizar Config do Grupo",
|
|
15501
|
-
"description": "Atualiza as permissoes do grupo WAHA.",
|
|
15852
|
+
"description": "Atualiza as permissoes do grupo WAHA. Aplica chave por chave: se uma falhar, responde 422 com `applied` (o que ja foi gravado) e `failed` (a chave que falhou). O numero conectado precisa ser admin do grupo (403 senao). `approval_required` so existe em servidores do WhatsApp mais novos: onde nao existe, 422 dizendo que o servidor ainda nao tem a opcao (confira antes com lionchat_inboxes_waha_groups_list_4, campo approval_supported).",
|
|
15502
15853
|
"category": "Grupos WhatsApp",
|
|
15503
15854
|
"params": [
|
|
15504
15855
|
{
|
|
@@ -15510,10 +15861,10 @@
|
|
|
15510
15861
|
},
|
|
15511
15862
|
{
|
|
15512
15863
|
"name": "group_id",
|
|
15513
|
-
"type": "
|
|
15864
|
+
"type": "string",
|
|
15514
15865
|
"location": "path",
|
|
15515
15866
|
"required": true,
|
|
15516
|
-
"description": "ID do grupo"
|
|
15867
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15517
15868
|
},
|
|
15518
15869
|
{
|
|
15519
15870
|
"name": "info_admin_only",
|
|
@@ -15528,9 +15879,23 @@
|
|
|
15528
15879
|
"location": "body",
|
|
15529
15880
|
"required": false,
|
|
15530
15881
|
"description": "Se true, somente admins podem enviar mensagens"
|
|
15882
|
+
},
|
|
15883
|
+
{
|
|
15884
|
+
"name": "members_add_admin_only",
|
|
15885
|
+
"type": "boolean",
|
|
15886
|
+
"location": "body",
|
|
15887
|
+
"required": false,
|
|
15888
|
+
"description": "Se true, somente admins podem adicionar participantes (o servidor traduz para o sentido invertido do WhatsApp). So true ou false; qualquer outro valor e recusado com 422."
|
|
15889
|
+
},
|
|
15890
|
+
{
|
|
15891
|
+
"name": "approval_required",
|
|
15892
|
+
"type": "boolean",
|
|
15893
|
+
"location": "body",
|
|
15894
|
+
"required": false,
|
|
15895
|
+
"description": "Se true, quem pede para entrar pelo link espera um admin aprovar. So true ou false. ATENCAO ao desligar: com pedidos esperando, o WhatsApp pode aprovar todos de uma vez — liste os pedidos antes (lionchat_inboxes_waha_groups_list_5) e confirme com a pessoa."
|
|
15531
15896
|
}
|
|
15532
15897
|
],
|
|
15533
|
-
"returns": "{ success: true } ou {
|
|
15898
|
+
"returns": "{ success: true, applied: [...] } ou 422 { error, applied: [...], failed: \"chave\" }",
|
|
15534
15899
|
"common_use_cases": [
|
|
15535
15900
|
"Edição parcial de grupo WhatsApp",
|
|
15536
15901
|
"Alteração de status/estado",
|
|
@@ -15559,10 +15924,10 @@
|
|
|
15559
15924
|
},
|
|
15560
15925
|
{
|
|
15561
15926
|
"name": "group_id",
|
|
15562
|
-
"type": "
|
|
15927
|
+
"type": "string",
|
|
15563
15928
|
"location": "path",
|
|
15564
15929
|
"required": true,
|
|
15565
|
-
"description": "ID do grupo"
|
|
15930
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15566
15931
|
},
|
|
15567
15932
|
{
|
|
15568
15933
|
"name": "file",
|
|
@@ -15601,10 +15966,10 @@
|
|
|
15601
15966
|
},
|
|
15602
15967
|
{
|
|
15603
15968
|
"name": "group_id",
|
|
15604
|
-
"type": "
|
|
15969
|
+
"type": "string",
|
|
15605
15970
|
"location": "path",
|
|
15606
15971
|
"required": true,
|
|
15607
|
-
"description": "ID do grupo"
|
|
15972
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
15608
15973
|
}
|
|
15609
15974
|
],
|
|
15610
15975
|
"returns": "{ success: true } ou { data: ... }",
|
|
@@ -15688,6 +16053,183 @@
|
|
|
15688
16053
|
"lionchat_inboxes_waha_groups_show"
|
|
15689
16054
|
]
|
|
15690
16055
|
},
|
|
16056
|
+
{
|
|
16057
|
+
"id": "lionchat_inboxes_waha_groups_list_4",
|
|
16058
|
+
"method": "GET",
|
|
16059
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha_groups/{group_id}/security_settings",
|
|
16060
|
+
"title": "Ler Permissoes Extras do Grupo",
|
|
16061
|
+
"description": "SO LEITURA. Le \"apenas admins podem adicionar participantes\" (members_add_admin_only) e \"aprovar novos participantes\" (approval_required), ja no sentido da tela (true = so admins / precisa aprovar). null = o WhatsApp nao respondeu agora: NAO trate como false. approval_supported=false = o servidor do WhatsApp desta caixa ainda nao tem a opcao de aprovacao.",
|
|
16062
|
+
"category": "Grupos WhatsApp",
|
|
16063
|
+
"params": [
|
|
16064
|
+
{
|
|
16065
|
+
"name": "inbox_id",
|
|
16066
|
+
"type": "integer",
|
|
16067
|
+
"location": "path",
|
|
16068
|
+
"required": true,
|
|
16069
|
+
"description": "ID da inbox (precisa ser WhatsApp QR Code)"
|
|
16070
|
+
},
|
|
16071
|
+
{
|
|
16072
|
+
"name": "group_id",
|
|
16073
|
+
"type": "string",
|
|
16074
|
+
"location": "path",
|
|
16075
|
+
"required": true,
|
|
16076
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
16077
|
+
}
|
|
16078
|
+
],
|
|
16079
|
+
"returns": "{ data: { members_add_admin_only: true|false|null, approval_required: true|false|null, approval_supported: true|false|null } }",
|
|
16080
|
+
"common_use_cases": [
|
|
16081
|
+
"Conferir as permissoes do grupo antes de mudar",
|
|
16082
|
+
"Saber se o grupo exige aprovacao para entrar"
|
|
16083
|
+
],
|
|
16084
|
+
"related_tools": [
|
|
16085
|
+
"lionchat_inboxes_waha_groups_update_2",
|
|
16086
|
+
"lionchat_inboxes_waha_groups_show"
|
|
16087
|
+
]
|
|
16088
|
+
},
|
|
16089
|
+
{
|
|
16090
|
+
"id": "lionchat_inboxes_waha_groups_destroy",
|
|
16091
|
+
"method": "DELETE",
|
|
16092
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha_groups/{group_id}/picture",
|
|
16093
|
+
"title": "Remover Foto do Grupo",
|
|
16094
|
+
"description": "Remove a foto do grupo no WhatsApp e tambem a copia que o LionChat mostra na lista de conversas. O numero conectado precisa ser admin do grupo (403 senao).",
|
|
16095
|
+
"category": "Grupos WhatsApp",
|
|
16096
|
+
"params": [
|
|
16097
|
+
{
|
|
16098
|
+
"name": "inbox_id",
|
|
16099
|
+
"type": "integer",
|
|
16100
|
+
"location": "path",
|
|
16101
|
+
"required": true,
|
|
16102
|
+
"description": "ID da inbox (precisa ser WhatsApp QR Code)"
|
|
16103
|
+
},
|
|
16104
|
+
{
|
|
16105
|
+
"name": "group_id",
|
|
16106
|
+
"type": "string",
|
|
16107
|
+
"location": "path",
|
|
16108
|
+
"required": true,
|
|
16109
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
16110
|
+
}
|
|
16111
|
+
],
|
|
16112
|
+
"returns": "{ success: true }",
|
|
16113
|
+
"common_use_cases": [
|
|
16114
|
+
"Tirar a foto do grupo"
|
|
16115
|
+
],
|
|
16116
|
+
"related_tools": [
|
|
16117
|
+
"lionchat_inboxes_waha_groups_update_3",
|
|
16118
|
+
"lionchat_inboxes_waha_groups_show"
|
|
16119
|
+
]
|
|
16120
|
+
},
|
|
16121
|
+
{
|
|
16122
|
+
"id": "lionchat_inboxes_waha_groups_list_5",
|
|
16123
|
+
"method": "GET",
|
|
16124
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha_groups/{group_id}/join_requests",
|
|
16125
|
+
"title": "Listar Pedidos para Entrar no Grupo",
|
|
16126
|
+
"description": "SO LEITURA. Pedidos de quem quer entrar no grupo e espera aprovacao. Use o campo `id` de cada pedido para aprovar/recusar. `pn` e o telefone (pode vir null: o WhatsApp esconde o numero — NUNCA use os digitos do id como telefone). `name` so vem se a pessoa ja e contato. supported=false = o servidor do WhatsApp desta caixa ainda nao tem pedidos para entrar; allowed=false = o WhatsApp nao deixou (o numero da caixa nao e admin do grupo).",
|
|
16127
|
+
"category": "Grupos WhatsApp",
|
|
16128
|
+
"params": [
|
|
16129
|
+
{
|
|
16130
|
+
"name": "inbox_id",
|
|
16131
|
+
"type": "integer",
|
|
16132
|
+
"location": "path",
|
|
16133
|
+
"required": true,
|
|
16134
|
+
"description": "ID da inbox (precisa ser WhatsApp QR Code)"
|
|
16135
|
+
},
|
|
16136
|
+
{
|
|
16137
|
+
"name": "group_id",
|
|
16138
|
+
"type": "string",
|
|
16139
|
+
"location": "path",
|
|
16140
|
+
"required": true,
|
|
16141
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
16142
|
+
}
|
|
16143
|
+
],
|
|
16144
|
+
"returns": "{ data: { supported, allowed, requests: [{ id, requesterId, pn, name, request_method (invite_link|linked_group_join|non_admin_add|unknown), timestamp }] } }",
|
|
16145
|
+
"common_use_cases": [
|
|
16146
|
+
"Ver quem pediu para entrar no grupo",
|
|
16147
|
+
"Aprovar pedidos pendentes em lote"
|
|
16148
|
+
],
|
|
16149
|
+
"related_tools": [
|
|
16150
|
+
"lionchat_inboxes_waha_groups_create_7",
|
|
16151
|
+
"lionchat_inboxes_waha_groups_create_8",
|
|
16152
|
+
"lionchat_inboxes_waha_groups_list_4"
|
|
16153
|
+
]
|
|
16154
|
+
},
|
|
16155
|
+
{
|
|
16156
|
+
"id": "lionchat_inboxes_waha_groups_create_7",
|
|
16157
|
+
"method": "POST",
|
|
16158
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha_groups/{group_id}/join_requests/approve",
|
|
16159
|
+
"title": "Aprovar Pedidos para Entrar no Grupo",
|
|
16160
|
+
"description": "Aprovar pedidos para entrar no grupo. A pessoa entra no grupo e isso aciona a pilula \"entrou\" e os fluxos com gatilho \"Entrou no grupo\". Tentativa unica (nao repita sozinho). A resposta traz o resultado por pessoa e as listas RELIDAS no WhatsApp (pedidos e participantes). Se o WhatsApp recusar (ex.: pedido ja tratado pelo celular), 422 com a mensagem e as listas reais. O numero conectado precisa ser admin do grupo (403 senao); ids fora do formato = 422.",
|
|
16161
|
+
"category": "Grupos WhatsApp",
|
|
16162
|
+
"params": [
|
|
16163
|
+
{
|
|
16164
|
+
"name": "inbox_id",
|
|
16165
|
+
"type": "integer",
|
|
16166
|
+
"location": "path",
|
|
16167
|
+
"required": true,
|
|
16168
|
+
"description": "ID da inbox (precisa ser WhatsApp QR Code)"
|
|
16169
|
+
},
|
|
16170
|
+
{
|
|
16171
|
+
"name": "group_id",
|
|
16172
|
+
"type": "string",
|
|
16173
|
+
"location": "path",
|
|
16174
|
+
"required": true,
|
|
16175
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
16176
|
+
},
|
|
16177
|
+
{
|
|
16178
|
+
"name": "participants",
|
|
16179
|
+
"type": "array",
|
|
16180
|
+
"location": "body",
|
|
16181
|
+
"required": true,
|
|
16182
|
+
"description": "Lista de pedidos no formato [{ id: '...' }], com o `id` que veio em lionchat_inboxes_waha_groups_list_5"
|
|
16183
|
+
}
|
|
16184
|
+
],
|
|
16185
|
+
"returns": "{ data: { results: [{ id, success, error }], join_requests: [...]|null, participants: [...]|null } } ou 422 { error, data: { join_requests, participants } }",
|
|
16186
|
+
"common_use_cases": [
|
|
16187
|
+
"Aprovar quem pediu para entrar no grupo"
|
|
16188
|
+
],
|
|
16189
|
+
"related_tools": [
|
|
16190
|
+
"lionchat_inboxes_waha_groups_list_5",
|
|
16191
|
+
"lionchat_inboxes_waha_groups_list_1"
|
|
16192
|
+
]
|
|
16193
|
+
},
|
|
16194
|
+
{
|
|
16195
|
+
"id": "lionchat_inboxes_waha_groups_create_8",
|
|
16196
|
+
"method": "POST",
|
|
16197
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/waha_groups/{group_id}/join_requests/reject",
|
|
16198
|
+
"title": "Recusar Pedidos para Entrar no Grupo",
|
|
16199
|
+
"description": "Recusar pedidos para entrar no grupo. A pessoa nao entra e nada e disparado. Tentativa unica (nao repita sozinho). A resposta traz o resultado por pessoa e as listas RELIDAS no WhatsApp (pedidos e participantes). Se o WhatsApp recusar (ex.: pedido ja tratado pelo celular), 422 com a mensagem e as listas reais. O numero conectado precisa ser admin do grupo (403 senao); ids fora do formato = 422.",
|
|
16200
|
+
"category": "Grupos WhatsApp",
|
|
16201
|
+
"params": [
|
|
16202
|
+
{
|
|
16203
|
+
"name": "inbox_id",
|
|
16204
|
+
"type": "integer",
|
|
16205
|
+
"location": "path",
|
|
16206
|
+
"required": true,
|
|
16207
|
+
"description": "ID da inbox (precisa ser WhatsApp QR Code)"
|
|
16208
|
+
},
|
|
16209
|
+
{
|
|
16210
|
+
"name": "group_id",
|
|
16211
|
+
"type": "string",
|
|
16212
|
+
"location": "path",
|
|
16213
|
+
"required": true,
|
|
16214
|
+
"description": "ID do grupo no WhatsApp, com o sufixo (ex.: '120363389719781395@g.us')"
|
|
16215
|
+
},
|
|
16216
|
+
{
|
|
16217
|
+
"name": "participants",
|
|
16218
|
+
"type": "array",
|
|
16219
|
+
"location": "body",
|
|
16220
|
+
"required": true,
|
|
16221
|
+
"description": "Lista de pedidos no formato [{ id: '...' }], com o `id` que veio em lionchat_inboxes_waha_groups_list_5"
|
|
16222
|
+
}
|
|
16223
|
+
],
|
|
16224
|
+
"returns": "{ data: { results: [{ id, success, error }], join_requests: [...]|null, participants: [...]|null } } ou 422 { error, data: { join_requests, participants } }",
|
|
16225
|
+
"common_use_cases": [
|
|
16226
|
+
"Recusar quem pediu para entrar no grupo"
|
|
16227
|
+
],
|
|
16228
|
+
"related_tools": [
|
|
16229
|
+
"lionchat_inboxes_waha_groups_list_5",
|
|
16230
|
+
"lionchat_inboxes_waha_groups_list_1"
|
|
16231
|
+
]
|
|
16232
|
+
},
|
|
15691
16233
|
{
|
|
15692
16234
|
"id": "lionchat_inboxes_whatsapp_templates_list",
|
|
15693
16235
|
"method": "GET",
|
|
@@ -25667,7 +26209,7 @@
|
|
|
25667
26209
|
"method": "GET",
|
|
25668
26210
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations",
|
|
25669
26211
|
"title": "Listar Integração e-Clínica",
|
|
25670
|
-
"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.",
|
|
26212
|
+
"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. VARIAVEIS DA MENSAGEM (28/09/2026): na automacao alvo de lembrete use {{eclinica_lembrete.<campo>}} (data_consulta, hora_consulta, profissional, compromisso, paciente_nome, unidade, link_confirmacao, idagenda, cliente_id, agendatipo, cor; laboratorio: data_prevista/data_entrega/data_referencia; cobranca: vencimento/valor/descricao) — e a consulta DAQUELE lembrete, data em DD/MM/AAAA. NUNCA a ficha {{contact.custom_attribute.eclinica_*}}: guarda so a consulta do ULTIMO aviso e manda a data de outra consulta. O nome antigo {{agendamento.*}} ainda funciona. No FLUXO nada muda ({{data_consulta}} etc). Detalhe no resource data-model, secao e-Clinica.",
|
|
25671
26213
|
"category": "Integracoes",
|
|
25672
26214
|
"params": [],
|
|
25673
26215
|
"returns": "200 {payload: {eclinica_integrations: [...]}}",
|
|
@@ -25845,7 +26387,7 @@
|
|
|
25845
26387
|
"method": "GET",
|
|
25846
26388
|
"path": "/api/v1/accounts/{account_id}/contacts/{contact_id}/documents",
|
|
25847
26389
|
"title": "Documentos do Contato",
|
|
25848
|
-
"description": "Central de arquivos do contato: uploads diretos + espelho dos anexos dos cards Kanban + das conversas (só imagem/documento). Dedup por arquivo.",
|
|
26390
|
+
"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.",
|
|
25849
26391
|
"category": "Documentos do Contato",
|
|
25850
26392
|
"params": [
|
|
25851
26393
|
{
|
|
@@ -26495,6 +27037,13 @@
|
|
|
26495
27037
|
"required": false,
|
|
26496
27038
|
"description": "true/false (padrao false). SO no bloco `eclinica_no_show`: a % de falta passa a ser faltaram/agendados em vez de faltaram/(compareceram+faltaram). Ligado, a unidade que nao anota desfecho parece a melhor da rede — o rotulo da coluna declara a base. Aceita as strings 'true'/'false' (novo 10/09/2026)."
|
|
26497
27039
|
},
|
|
27040
|
+
{
|
|
27041
|
+
"name": "only_first_visit",
|
|
27042
|
+
"type": "boolean",
|
|
27043
|
+
"location": "body",
|
|
27044
|
+
"required": false,
|
|
27045
|
+
"description": "true/false (padrao false). SO no bloco `eclinica_no_show`: a tabela conta so a consulta INICIAL — retorno, sessao de tratamento e procedimento ficam de fora — e o rotulo da primeira coluna troca de 'Agendados' para 'Consultas iniciais'. A regra le o TEXTO do compromisso, porque a clinica escreve o tipo por extenso: comeca com CONSULTA e NAO contem RETORNO. Medido na conta 56 (01 a 24/09/2026): 'CONSULTA INICIAL' 1.445 vezes e 'CONSULTA DE RETORNO' 192, e Sorocaba tem 1.023 compromissos para 99 consultas iniciais. Use quando o pedido falar em primeira consulta, consulta inicial, paciente novo ou primeiro atendimento. Novo em 28/09/2026."
|
|
27046
|
+
},
|
|
26498
27047
|
{
|
|
26499
27048
|
"name": "count_retorno_as_consulta",
|
|
26500
27049
|
"type": "boolean",
|
|
@@ -26543,7 +27092,7 @@
|
|
|
26543
27092
|
"type": "array",
|
|
26544
27093
|
"location": "body",
|
|
26545
27094
|
"required": false,
|
|
26546
|
-
"description": "Lista de blocos. Cada item: {id, widget_type, chart_type, ...} com os mesmos campos do custom_dashboards_preview_widget. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026. Desde 10/09/2026,
|
|
27095
|
+
"description": "Lista de blocos. Cada item: {id, widget_type, chart_type, ...} com os mesmos campos do custom_dashboards_preview_widget. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026. Desde 10/09/2026, campos SO dos blocos da e-Clinica: `no_show_over_scheduled` (true/false, padrao false — a % de falta passa a ser faltaram/agendados em vez de sobre os desfechos conhecidos; so faz efeito em `eclinica_no_show`) e `count_retorno_as_consulta` (true/false, padrao true — retorno conta como consulta na base da conversao; desligado, o retorno vai para 'Nao classificado'; so faz efeito em `eclinica_conversion`). E desde 28/09/2026, `only_first_visit` (true/false, padrao false — SO em `eclinica_no_show`: conta so a consulta INICIAL, deixando de fora retorno, sessao de tratamento e procedimento, e o cabecalho da primeira coluna vira 'Consultas iniciais'). Aceitam as strings 'true'/'false'; qualquer outro valor = 422 com o motivo."
|
|
26547
27096
|
}
|
|
26548
27097
|
],
|
|
26549
27098
|
"returns": "{ id, name, position, widgets, created_at }",
|
|
@@ -26592,7 +27141,7 @@
|
|
|
26592
27141
|
"type": "array",
|
|
26593
27142
|
"location": "body",
|
|
26594
27143
|
"required": false,
|
|
26595
|
-
"description": "Lista COMPLETA de blocos — substitui a atual. Preserve o `id` de cada bloco que ja existia, senao a tela perde o vinculo. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026. Desde 10/09/2026,
|
|
27144
|
+
"description": "Lista COMPLETA de blocos — substitui a atual. Preserve o `id` de cada bloco que ja existia, senao a tela perde o vinculo. Maximo 12. DOIS campos de bloco que faltavam aqui: `follow_report_period` (true/false, tambem aceita as strings; AUSENTE = true) diz se o bloco obedece o calendario do TOPO do relatorio ou usa o periodo proprio — vale pra qualquer bloco, novo em 22/08/2026; e `direction_split` (true/false, padrao false) que SO faz efeito no bloco `calls_report` e troca as colunas fixas por Feitas x Recebidas, com quem atendeu na recebida — OPT-IN de proposito pra nao mexer no relatorio de quem ja usa o bloco, novo em 28/08/2026. Desde 10/09/2026, campos SO dos blocos da e-Clinica: `no_show_over_scheduled` (true/false, padrao false — a % de falta passa a ser faltaram/agendados em vez de sobre os desfechos conhecidos; so faz efeito em `eclinica_no_show`) e `count_retorno_as_consulta` (true/false, padrao true — retorno conta como consulta na base da conversao; desligado, o retorno vai para 'Nao classificado'; so faz efeito em `eclinica_conversion`). E desde 28/09/2026, `only_first_visit` (true/false, padrao false — SO em `eclinica_no_show`: conta so a consulta INICIAL, deixando de fora retorno, sessao de tratamento e procedimento, e o cabecalho da primeira coluna vira 'Consultas iniciais'). Aceitam as strings 'true'/'false'; qualquer outro valor = 422 com o motivo."
|
|
26596
27145
|
}
|
|
26597
27146
|
],
|
|
26598
27147
|
"returns": "{ id, name, position, widgets, created_at }",
|
|
@@ -27861,7 +28410,7 @@
|
|
|
27861
28410
|
"method": "GET",
|
|
27862
28411
|
"path": "/api/v1/accounts/{account_id}/audit_logs",
|
|
27863
28412
|
"title": "Registro de Auditoria",
|
|
27864
|
-
"description": "Histórico de quem mexeu no quê dentro da conta (criação, edição, exclusão, login e logout), com o autor, o IP e o antes/depois de cada campo. ATENÇÃO ao formato das datas: aqui 'since' e 'until' são DATA POR EXTENSO (AAAA-MM-DD) e NÃO timestamp Unix — é o oposto dos relatórios; mandar um número Unix derruba a chamada com erro. Somente administradores; a conta precisa ter o recurso de auditoria habilitado, senão a lista volta VAZIA sem nenhum aviso de erro.",
|
|
28413
|
+
"description": "Histórico de quem mexeu no quê dentro da conta (criação, edição, exclusão, login e logout), com o autor, o IP e o antes/depois de cada campo. ATENÇÃO ao formato das datas: aqui 'since' e 'until' são DATA POR EXTENSO (AAAA-MM-DD) e NÃO timestamp Unix — é o oposto dos relatórios; mandar um número Unix derruba a chamada com erro. Somente administradores; a conta precisa ter o recurso de auditoria habilitado, senão a lista volta VAZIA sem nenhum aviso de erro. MENSAGEM APAGADA (26/09/2026): quando alguém apaga uma mensagem pelo painel, fica um registro auditable_type 'Message', action 'destroy', com audited_changes = { content (texto, até 2000 caracteres), display_id (conversa), inbox_id, sender_type, sender_id, sender_name, attachments (nomes dos arquivos) } — é a foto tirada ANTES de apagar; auditable vem null nesse caso. Busque com q='trecho da mensagem' ou auditable_type=Message.",
|
|
27865
28414
|
"category": "Auditoria",
|
|
27866
28415
|
"params": [
|
|
27867
28416
|
{
|
|
@@ -27897,7 +28446,7 @@
|
|
|
27897
28446
|
"type": "string",
|
|
27898
28447
|
"location": "query",
|
|
27899
28448
|
"required": false,
|
|
27900
|
-
"description": "Tipo de recurso afetado: Account, AccountUser, AutomationRule, Conversation, Inbox, InboxMember, Macro, Team, TeamMember, User, Webhook"
|
|
28449
|
+
"description": "Tipo de recurso afetado: Account, AccountUser, AutomationRule, Conversation, Inbox, InboxMember, Macro, Message (mensagem APAGADA pelo painel, desde 26/09/2026), Team, TeamMember, User, Webhook"
|
|
27901
28450
|
},
|
|
27902
28451
|
{
|
|
27903
28452
|
"name": "remote_address",
|
|
@@ -27919,9 +28468,23 @@
|
|
|
27919
28468
|
"location": "query",
|
|
27920
28469
|
"required": false,
|
|
27921
28470
|
"description": "Data final no formato AAAA-MM-DD (o dia inteiro entra). NÃO é timestamp Unix — número aqui gera erro"
|
|
28471
|
+
},
|
|
28472
|
+
{
|
|
28473
|
+
"name": "q",
|
|
28474
|
+
"type": "string",
|
|
28475
|
+
"location": "query",
|
|
28476
|
+
"required": false,
|
|
28477
|
+
"description": "Busca por texto (3+ letras): nome de quem fez OU conteúdo da mudança (inclusive o texto de mensagem apagada). Menos de 3 letras = ignorado. Em conta grande pode levar ~1 s; combine com since/until pra encurtar."
|
|
28478
|
+
},
|
|
28479
|
+
{
|
|
28480
|
+
"name": "sort",
|
|
28481
|
+
"type": "string",
|
|
28482
|
+
"location": "query",
|
|
28483
|
+
"required": false,
|
|
28484
|
+
"description": "Ordem por data: desc (mais recentes primeiro, padrão) ou asc."
|
|
27922
28485
|
}
|
|
27923
28486
|
],
|
|
27924
|
-
"returns": "{ per_page, total_entries, current_page, audit_logs: [{ id, auditable_id, auditable_type, auditable, associated_id, associated_type, user_id, user_type, username, action, audited_changes (antes/depois por campo), version, comment, request_uuid, created_at (Unix em segundos), remote_address }] }",
|
|
28487
|
+
"returns": "{ per_page, total_entries, current_page, audit_logs: [{ id, auditable_id, auditable_type, auditable, associated_id, associated_type, user_id, user_type, username, action, audited_changes (antes/depois por campo), version, comment, request_uuid, created_at (Unix em segundos), remote_address (IP inteiro), ip_masked (IP parcial, ex. 177.12.x.x; null pra IP interno), ip_city, ip_region (cidade/estado do IP — só do que já foi descoberto; o que falta aparece na próxima consulta) }] }",
|
|
27925
28488
|
"common_use_cases": [
|
|
27926
28489
|
"Descobrir quem apagou uma caixa de entrada ou uma automação",
|
|
27927
28490
|
"Ver todos os logins de um agente num intervalo de datas",
|
|
@@ -33179,7 +33742,7 @@
|
|
|
33179
33742
|
"method": "GET",
|
|
33180
33743
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations/{id}",
|
|
33181
33744
|
"title": "Detalhes da Integração e-Clínica",
|
|
33182
|
-
"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.",
|
|
33745
|
+
"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. VARIAVEIS DA MENSAGEM (28/09/2026): na automacao alvo de lembrete use {{eclinica_lembrete.<campo>}} (data_consulta, hora_consulta, profissional, compromisso, paciente_nome, unidade, link_confirmacao, idagenda, cliente_id, agendatipo, cor; laboratorio: data_prevista/data_entrega/data_referencia; cobranca: vencimento/valor/descricao) — e a consulta DAQUELE lembrete, data em DD/MM/AAAA. NUNCA a ficha {{contact.custom_attribute.eclinica_*}}: guarda so a consulta do ULTIMO aviso e manda a data de outra consulta. O nome antigo {{agendamento.*}} ainda funciona. No FLUXO nada muda ({{data_consulta}} etc). Detalhe no resource data-model, secao e-Clinica.",
|
|
33183
33746
|
"category": "Integracoes",
|
|
33184
33747
|
"params": [
|
|
33185
33748
|
{
|
|
@@ -33982,7 +34545,7 @@
|
|
|
33982
34545
|
"method": "GET",
|
|
33983
34546
|
"path": "/api/v1/accounts/{account_id}/signature_envelopes",
|
|
33984
34547
|
"title": "Listar Contratos Enviados",
|
|
33985
|
-
"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.",
|
|
34548
|
+
"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).",
|
|
33986
34549
|
"category": "Assinatura eletronica",
|
|
33987
34550
|
"params": [
|
|
33988
34551
|
{
|
|
@@ -34026,6 +34589,13 @@
|
|
|
34026
34589
|
"location": "query",
|
|
34027
34590
|
"required": false,
|
|
34028
34591
|
"description": "Pagina (padrao 1, 25 por pagina)"
|
|
34592
|
+
},
|
|
34593
|
+
{
|
|
34594
|
+
"name": "company_id",
|
|
34595
|
+
"type": "integer",
|
|
34596
|
+
"location": "query",
|
|
34597
|
+
"required": false,
|
|
34598
|
+
"description": "Recorta pelos contatos de uma EMPRESA (aba Contratos da pagina da empresa). Empresa de outra conta = 404."
|
|
34029
34599
|
}
|
|
34030
34600
|
],
|
|
34031
34601
|
"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}",
|
|
@@ -34882,5 +35452,207 @@
|
|
|
34882
35452
|
"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).",
|
|
34883
35453
|
"category": "Integracoes / Google Calendar",
|
|
34884
35454
|
"params": []
|
|
35455
|
+
},
|
|
35456
|
+
{
|
|
35457
|
+
"id": "lionchat_companies_notes_create",
|
|
35458
|
+
"method": "POST",
|
|
35459
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes",
|
|
35460
|
+
"title": "Criar Anotacao da Empresa",
|
|
35461
|
+
"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'.",
|
|
35462
|
+
"category": "Empresas",
|
|
35463
|
+
"params": [
|
|
35464
|
+
{
|
|
35465
|
+
"name": "company_id",
|
|
35466
|
+
"type": "integer",
|
|
35467
|
+
"location": "path",
|
|
35468
|
+
"required": true,
|
|
35469
|
+
"description": "ID da empresa"
|
|
35470
|
+
},
|
|
35471
|
+
{
|
|
35472
|
+
"name": "note",
|
|
35473
|
+
"type": "object",
|
|
35474
|
+
"location": "body",
|
|
35475
|
+
"required": true,
|
|
35476
|
+
"description": "{ content: texto da anotacao }"
|
|
35477
|
+
}
|
|
35478
|
+
],
|
|
35479
|
+
"returns": "{payload: anotacao} com kind 'company'",
|
|
35480
|
+
"common_use_cases": [
|
|
35481
|
+
"Registrar historico comercial da empresa",
|
|
35482
|
+
"Anotar combinados com a empresa"
|
|
35483
|
+
],
|
|
35484
|
+
"related_tools": [
|
|
35485
|
+
"lionchat_companies_notes_list",
|
|
35486
|
+
"lionchat_companies_notes_update"
|
|
35487
|
+
]
|
|
35488
|
+
},
|
|
35489
|
+
{
|
|
35490
|
+
"id": "lionchat_companies_notes_update",
|
|
35491
|
+
"method": "PATCH",
|
|
35492
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes/{id}",
|
|
35493
|
+
"title": "Editar Anotacao da Empresa",
|
|
35494
|
+
"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.",
|
|
35495
|
+
"category": "Empresas",
|
|
35496
|
+
"params": [
|
|
35497
|
+
{
|
|
35498
|
+
"name": "company_id",
|
|
35499
|
+
"type": "integer",
|
|
35500
|
+
"location": "path",
|
|
35501
|
+
"required": true,
|
|
35502
|
+
"description": "ID da empresa"
|
|
35503
|
+
},
|
|
35504
|
+
{
|
|
35505
|
+
"name": "id",
|
|
35506
|
+
"type": "integer",
|
|
35507
|
+
"location": "path",
|
|
35508
|
+
"required": true,
|
|
35509
|
+
"description": "ID da anotacao da empresa (kind 'company')"
|
|
35510
|
+
},
|
|
35511
|
+
{
|
|
35512
|
+
"name": "note",
|
|
35513
|
+
"type": "object",
|
|
35514
|
+
"location": "body",
|
|
35515
|
+
"required": true,
|
|
35516
|
+
"description": "{ content: texto da anotacao }"
|
|
35517
|
+
}
|
|
35518
|
+
],
|
|
35519
|
+
"returns": "{payload: anotacao}",
|
|
35520
|
+
"common_use_cases": [
|
|
35521
|
+
"Corrigir uma anotacao da empresa"
|
|
35522
|
+
],
|
|
35523
|
+
"related_tools": [
|
|
35524
|
+
"lionchat_companies_notes_list"
|
|
35525
|
+
]
|
|
35526
|
+
},
|
|
35527
|
+
{
|
|
35528
|
+
"id": "lionchat_companies_notes_destroy",
|
|
35529
|
+
"method": "DELETE",
|
|
35530
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/notes/{id}",
|
|
35531
|
+
"title": "Apagar Anotacao da Empresa",
|
|
35532
|
+
"description": "Apaga uma anotacao da PROPRIA empresa (kind 'company'). Nao tem volta.",
|
|
35533
|
+
"category": "Empresas",
|
|
35534
|
+
"params": [
|
|
35535
|
+
{
|
|
35536
|
+
"name": "company_id",
|
|
35537
|
+
"type": "integer",
|
|
35538
|
+
"location": "path",
|
|
35539
|
+
"required": true,
|
|
35540
|
+
"description": "ID da empresa"
|
|
35541
|
+
},
|
|
35542
|
+
{
|
|
35543
|
+
"name": "id",
|
|
35544
|
+
"type": "integer",
|
|
35545
|
+
"location": "path",
|
|
35546
|
+
"required": true,
|
|
35547
|
+
"description": "ID da anotacao da empresa (kind 'company')"
|
|
35548
|
+
}
|
|
35549
|
+
],
|
|
35550
|
+
"returns": "200 sem corpo",
|
|
35551
|
+
"common_use_cases": [
|
|
35552
|
+
"Remover anotacao errada"
|
|
35553
|
+
],
|
|
35554
|
+
"related_tools": [
|
|
35555
|
+
"lionchat_companies_notes_list"
|
|
35556
|
+
]
|
|
35557
|
+
},
|
|
35558
|
+
{
|
|
35559
|
+
"id": "lionchat_companies_documents_list",
|
|
35560
|
+
"method": "GET",
|
|
35561
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/documents",
|
|
35562
|
+
"title": "Documentos da Empresa",
|
|
35563
|
+
"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).",
|
|
35564
|
+
"category": "Empresas",
|
|
35565
|
+
"params": [
|
|
35566
|
+
{
|
|
35567
|
+
"name": "company_id",
|
|
35568
|
+
"type": "integer",
|
|
35569
|
+
"location": "path",
|
|
35570
|
+
"required": true,
|
|
35571
|
+
"description": "ID da empresa"
|
|
35572
|
+
}
|
|
35573
|
+
],
|
|
35574
|
+
"returns": "{payload: [...], meta: {total, truncated}}",
|
|
35575
|
+
"common_use_cases": [
|
|
35576
|
+
"Achar um arquivo de qualquer pessoa da empresa",
|
|
35577
|
+
"Conferir documentos enviados para a empresa"
|
|
35578
|
+
],
|
|
35579
|
+
"related_tools": [
|
|
35580
|
+
"lionchat_contacts_documents_list",
|
|
35581
|
+
"lionchat_companies_contacts_list"
|
|
35582
|
+
]
|
|
35583
|
+
},
|
|
35584
|
+
{
|
|
35585
|
+
"id": "lionchat_companies_tasks_list",
|
|
35586
|
+
"method": "GET",
|
|
35587
|
+
"path": "/api/v1/accounts/{account_id}/companies/{company_id}/tasks",
|
|
35588
|
+
"title": "Compromissos da Empresa",
|
|
35589
|
+
"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.",
|
|
35590
|
+
"category": "Empresas",
|
|
35591
|
+
"params": [
|
|
35592
|
+
{
|
|
35593
|
+
"name": "company_id",
|
|
35594
|
+
"type": "integer",
|
|
35595
|
+
"location": "path",
|
|
35596
|
+
"required": true,
|
|
35597
|
+
"description": "ID da empresa"
|
|
35598
|
+
}
|
|
35599
|
+
],
|
|
35600
|
+
"returns": "array de compromissos (mesmo formato de lionchat_tasks_list)",
|
|
35601
|
+
"common_use_cases": [
|
|
35602
|
+
"Ver a agenda de uma empresa inteira",
|
|
35603
|
+
"Conferir proximas reunioes com a empresa"
|
|
35604
|
+
],
|
|
35605
|
+
"related_tools": [
|
|
35606
|
+
"lionchat_tasks_list",
|
|
35607
|
+
"lionchat_tasks_update"
|
|
35608
|
+
]
|
|
35609
|
+
},
|
|
35610
|
+
{
|
|
35611
|
+
"id": "lionchat_companies_kanban_items_list",
|
|
35612
|
+
"method": "GET",
|
|
35613
|
+
"path": "/api/v1/accounts/{account_id}/companies/{id}/kanban_items",
|
|
35614
|
+
"title": "Cards do Kanban da Empresa",
|
|
35615
|
+
"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.",
|
|
35616
|
+
"category": "Empresas",
|
|
35617
|
+
"params": [
|
|
35618
|
+
{
|
|
35619
|
+
"name": "id",
|
|
35620
|
+
"type": "integer",
|
|
35621
|
+
"location": "path",
|
|
35622
|
+
"required": true,
|
|
35623
|
+
"description": "ID da empresa"
|
|
35624
|
+
},
|
|
35625
|
+
{
|
|
35626
|
+
"name": "status",
|
|
35627
|
+
"type": "string",
|
|
35628
|
+
"location": "query",
|
|
35629
|
+
"required": false,
|
|
35630
|
+
"description": "open (padrao na tela), won, lost; omitir = todos"
|
|
35631
|
+
},
|
|
35632
|
+
{
|
|
35633
|
+
"name": "funnel_id",
|
|
35634
|
+
"type": "integer",
|
|
35635
|
+
"location": "query",
|
|
35636
|
+
"required": false,
|
|
35637
|
+
"description": "Filtra por funil"
|
|
35638
|
+
},
|
|
35639
|
+
{
|
|
35640
|
+
"name": "page",
|
|
35641
|
+
"type": "integer",
|
|
35642
|
+
"location": "query",
|
|
35643
|
+
"required": false,
|
|
35644
|
+
"description": "Pagina (25 por pagina)"
|
|
35645
|
+
}
|
|
35646
|
+
],
|
|
35647
|
+
"returns": "{ meta: {total_count, page, per_page}, payload: [card com funnel, labels, next_task, permissions e contacts[{id,name}]] }",
|
|
35648
|
+
"common_use_cases": [
|
|
35649
|
+
"Ver os negocios de uma empresa",
|
|
35650
|
+
"Somar oportunidades abertas de um cliente B2B"
|
|
35651
|
+
],
|
|
35652
|
+
"related_tools": [
|
|
35653
|
+
"lionchat_contacts_kanban_items_list",
|
|
35654
|
+
"lionchat_companies_contacts_list",
|
|
35655
|
+
"lionchat_kanban_items_show"
|
|
35656
|
+
]
|
|
34885
35657
|
}
|
|
34886
35658
|
]
|