@lionchat/mcp-server 1.5.0 → 1.7.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/best-practices.md +61 -2
- package/dist/docs/resources/data-model.md +16 -0
- package/dist/docs/resources/filtros-e-relatorios.md +147 -0
- package/dist/docs/resources/reports-guide.md +32 -3
- package/dist/docs/resources/troubleshooting.md +33 -0
- package/dist/resources.js +6 -0
- package/dist/resources.js.map +1 -1
- package/dist/sanitize.d.ts +9 -0
- package/dist/sanitize.js +136 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/tools.js +27 -3
- package/dist/tools.js.map +1 -1
- package/dist/utils.d.ts +5 -1
- package/dist/utils.js +78 -10
- package/dist/utils.js.map +1 -1
- package/endpoints.json +428 -68
- package/package.json +1 -1
package/endpoints.json
CHANGED
|
@@ -698,7 +698,7 @@
|
|
|
698
698
|
"method": "POST",
|
|
699
699
|
"path": "/api/v1/accounts/{account_id}/contacts/filter",
|
|
700
700
|
"title": "Filtrar Contatos",
|
|
701
|
-
"description": "Filtra contatos com
|
|
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.",
|
|
702
702
|
"category": "Contatos",
|
|
703
703
|
"params": [
|
|
704
704
|
{
|
|
@@ -1426,7 +1426,7 @@
|
|
|
1426
1426
|
"method": "POST",
|
|
1427
1427
|
"path": "/api/v1/accounts/{account_id}/conversations/filter",
|
|
1428
1428
|
"title": "Filtrar Conversas",
|
|
1429
|
-
"description": "Filtra conversas com
|
|
1429
|
+
"description": "Filtra conversas com condicoes avancadas (payload de condicoes, mesmas da tela). Ordenacao fixa last_activity_at DESC, 25/pagina.\n\nCHAVES FILTRAVEIS (attribute_key -> operadores): status, chat_type, priority (equal_to/not_equal_to); assignee_id, inbox_id, team_id, campaign_id, captain_assistant_id, labels (equal_to/not_equal_to/is_present/is_not_present); display_id (equal_to/not_equal_to/contains/does_not_contain); created_at, last_activity_at (is_greater_than/is_less_than/days_before — valor de data); browser_language, conversation_language, referer, mail_subject; card_funnel_stage (conversa POR CARD do Kanban — valor 'funnel:<id>' ou 'stage:<id>:<chave_etapa>'); QUALQUER outra chave = atributo personalizado (use custom_attribute_type na condicao: 'conversation_attribute' ou 'contact_attribute').\n\nCada condicao: {attribute_key, filter_operator, values[], query_operator:'and'|'or', custom_attribute_type?}. Operador fora da lista da chave = 422 'Operador invalido' (ex: labels NAO aceita 'includes' — use equal_to). [2026-07-25] O operador contains em display_id agora funciona de verdade (busca por trecho do numero da conversa; antes dava erro de banco).",
|
|
1430
1430
|
"category": "Conversas",
|
|
1431
1431
|
"params": [
|
|
1432
1432
|
{
|
|
@@ -2252,7 +2252,7 @@
|
|
|
2252
2252
|
"method": "POST",
|
|
2253
2253
|
"path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{id}/retry",
|
|
2254
2254
|
"title": "Reenviar Mensagem",
|
|
2255
|
-
"description": "Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id.",
|
|
2255
|
+
"description": "[POST] Reenvia uma mensagem que falhou. Obrigatorios: conversation_id, id. [2026-07-24] Motor unico de reenvio: limpeza cirurgica de content_attributes (preserva vinculos de flow/automacao/comentario IG) + trava anti-duplicata por mensagem. Pra reenviar TODAS as falhadas de uma caixa de uma vez, use lionchat_inboxes_failed_messages_bulk_retry. [2026-07-25] Mensagem cancelada ou excluida NAO reenvia — a chamada responde 422 com o motivo. Pra cancelar de vez o reenvio, use lionchat_conversations_messages_cancel_retry.",
|
|
2256
2256
|
"category": "Mensagens",
|
|
2257
2257
|
"params": [
|
|
2258
2258
|
{
|
|
@@ -2279,7 +2279,43 @@
|
|
|
2279
2279
|
"related_tools": [
|
|
2280
2280
|
"lionchat_conversations_messages_list",
|
|
2281
2281
|
"lionchat_conversations_messages_create",
|
|
2282
|
-
"lionchat_conversations_messages_update"
|
|
2282
|
+
"lionchat_conversations_messages_update",
|
|
2283
|
+
"lionchat_inboxes_failed_messages_summary",
|
|
2284
|
+
"lionchat_inboxes_failed_messages_bulk_retry"
|
|
2285
|
+
]
|
|
2286
|
+
},
|
|
2287
|
+
{
|
|
2288
|
+
"id": "lionchat_conversations_messages_cancel_retry",
|
|
2289
|
+
"method": "POST",
|
|
2290
|
+
"path": "/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{id}/cancel_retry",
|
|
2291
|
+
"title": "Cancelar Reenvio de Mensagem Falhada",
|
|
2292
|
+
"description": "[NOVO 2026-07-25] Cancela DE VEZ o reenvio de UMA mensagem que falhou: na conversa ela vira o selo cinza 'Envio cancelado', sai do painel Falhas de envio e fica FORA de TODO reenvio (botao da bolha, reenvio em lote e auto-recuperacao do WAHA). IRREVERSIVEL — sempre confirme com o usuario antes de chamar. Exige mensagem outgoing + status failed + nao-privada (qualquer outra coisa responde 400). Mesma permissao do reenvio (agente com acesso a conversa). Pra cancelar todas as falhadas de uma caixa de uma vez use lionchat_inboxes_failed_messages_bulk_cancel.",
|
|
2293
|
+
"category": "Mensagens",
|
|
2294
|
+
"params": [
|
|
2295
|
+
{
|
|
2296
|
+
"name": "conversation_id",
|
|
2297
|
+
"type": "integer",
|
|
2298
|
+
"location": "path",
|
|
2299
|
+
"required": true,
|
|
2300
|
+
"description": "Display ID da conversa"
|
|
2301
|
+
},
|
|
2302
|
+
{
|
|
2303
|
+
"name": "id",
|
|
2304
|
+
"type": "integer",
|
|
2305
|
+
"location": "path",
|
|
2306
|
+
"required": true,
|
|
2307
|
+
"description": "ID da mensagem falhada"
|
|
2308
|
+
}
|
|
2309
|
+
],
|
|
2310
|
+
"returns": "mensagem atualizada (retry_cancelled + retry_cancelled_at em content_attributes)",
|
|
2311
|
+
"common_use_cases": [
|
|
2312
|
+
"Desistir de reenviar uma mensagem que falhou",
|
|
2313
|
+
"Limpar uma falha antiga do painel sem mandar nada pro cliente"
|
|
2314
|
+
],
|
|
2315
|
+
"related_tools": [
|
|
2316
|
+
"lionchat_conversations_messages_create_1",
|
|
2317
|
+
"lionchat_inboxes_failed_messages_bulk_cancel",
|
|
2318
|
+
"lionchat_inboxes_failed_messages_summary"
|
|
2283
2319
|
]
|
|
2284
2320
|
},
|
|
2285
2321
|
{
|
|
@@ -3504,7 +3540,7 @@
|
|
|
3504
3540
|
"method": "GET",
|
|
3505
3541
|
"path": "/api/v1/accounts/{account_id}/kanban_items/filter",
|
|
3506
3542
|
"title": "Filtrar Items",
|
|
3507
|
-
"description": "Filtra
|
|
3543
|
+
"description": "Filtra cards do Kanban com o filtro RICO da plataforma (mesmo motor da tela '+ Filtro'). Filtros REAIS aplicados: etapas (stages), prioridades, status do card (open/won/lost), agente, faixa de valor, periodo de criacao (date_start/end), periodo de agendamento (scheduled_date_*), tarefas (task_filter), canal, etiqueta da conversa, oferta e atributos personalizados de card/contato/conversa (JSON-string + custom_attribute_match all/any). ATENCAO: SEM paginacao — retorna ate 5000 cards em ordem created_at DESC, shape {items:[], total, filters}. NAO existe filtro por time aqui (use lionchat_kanban_items_list_3 pra relatorio por time, ou filtre por agent_id); ordenacao e fixa. (2026-07-24: removidos os parametros stage_id/inbox_id/sort_by/sort_direction/page — eram aceitos mas IGNORADOS pelo backend; use stages[] no lugar de stage_id.)",
|
|
3508
3544
|
"category": "Itens",
|
|
3509
3545
|
"params": [
|
|
3510
3546
|
{
|
|
@@ -3514,13 +3550,6 @@
|
|
|
3514
3550
|
"required": true,
|
|
3515
3551
|
"description": "ID do funil"
|
|
3516
3552
|
},
|
|
3517
|
-
{
|
|
3518
|
-
"name": "stage_id",
|
|
3519
|
-
"type": "string",
|
|
3520
|
-
"location": "query",
|
|
3521
|
-
"required": false,
|
|
3522
|
-
"description": "Etapa"
|
|
3523
|
-
},
|
|
3524
3553
|
{
|
|
3525
3554
|
"name": "agent_id",
|
|
3526
3555
|
"type": "integer",
|
|
@@ -3559,39 +3588,103 @@
|
|
|
3559
3588
|
"description": "Valor máximo"
|
|
3560
3589
|
},
|
|
3561
3590
|
{
|
|
3562
|
-
"name": "
|
|
3563
|
-
"
|
|
3591
|
+
"name": "stages",
|
|
3592
|
+
"query_name": "stages[]",
|
|
3593
|
+
"type": "array",
|
|
3564
3594
|
"location": "query",
|
|
3565
3595
|
"required": false,
|
|
3566
|
-
"description": "
|
|
3596
|
+
"description": "Etapas do funil (chaves internas/slugs, ex: ['novo_lead','qualificado'])"
|
|
3567
3597
|
},
|
|
3568
3598
|
{
|
|
3569
|
-
"name": "
|
|
3599
|
+
"name": "date_start",
|
|
3570
3600
|
"type": "string",
|
|
3571
3601
|
"location": "query",
|
|
3572
3602
|
"required": false,
|
|
3573
|
-
"description": "
|
|
3603
|
+
"description": "Criado a partir de (YYYY-MM-DD) — filtra created_at do card"
|
|
3574
3604
|
},
|
|
3575
3605
|
{
|
|
3576
|
-
"name": "
|
|
3606
|
+
"name": "date_end",
|
|
3577
3607
|
"type": "string",
|
|
3578
3608
|
"location": "query",
|
|
3579
3609
|
"required": false,
|
|
3580
|
-
"description": "
|
|
3610
|
+
"description": "Criado ate (YYYY-MM-DD)"
|
|
3581
3611
|
},
|
|
3582
3612
|
{
|
|
3583
|
-
"name": "
|
|
3584
|
-
"type": "
|
|
3613
|
+
"name": "scheduled_date_start",
|
|
3614
|
+
"type": "string",
|
|
3585
3615
|
"location": "query",
|
|
3586
3616
|
"required": false,
|
|
3587
|
-
"description": "
|
|
3617
|
+
"description": "Agendamento a partir de (YYYY-MM-DD) — considera scheduled_at/deadline_at do card E tarefas da agenda vinculadas"
|
|
3618
|
+
},
|
|
3619
|
+
{
|
|
3620
|
+
"name": "scheduled_date_end",
|
|
3621
|
+
"type": "string",
|
|
3622
|
+
"location": "query",
|
|
3623
|
+
"required": false,
|
|
3624
|
+
"description": "Agendamento ate (YYYY-MM-DD)"
|
|
3625
|
+
},
|
|
3626
|
+
{
|
|
3627
|
+
"name": "task_filter",
|
|
3628
|
+
"type": "string",
|
|
3629
|
+
"location": "query",
|
|
3630
|
+
"required": false,
|
|
3631
|
+
"description": "Filtro por tarefas vinculadas: has_task | no_task | today | tomorrow | this_week | overdue"
|
|
3632
|
+
},
|
|
3633
|
+
{
|
|
3634
|
+
"name": "channel",
|
|
3635
|
+
"type": "string",
|
|
3636
|
+
"location": "query",
|
|
3637
|
+
"required": false,
|
|
3638
|
+
"description": "Tipo de canal da conversa do card, SEM o prefixo Channel:: (ex: Waha, Whatsapp, Instagram, Email)"
|
|
3639
|
+
},
|
|
3640
|
+
{
|
|
3641
|
+
"name": "label",
|
|
3642
|
+
"type": "string",
|
|
3643
|
+
"location": "query",
|
|
3644
|
+
"required": false,
|
|
3645
|
+
"description": "Etiqueta aplicada na CONVERSA vinculada ao card (match parcial por titulo)"
|
|
3646
|
+
},
|
|
3647
|
+
{
|
|
3648
|
+
"name": "offer",
|
|
3649
|
+
"type": "string",
|
|
3650
|
+
"location": "query",
|
|
3651
|
+
"required": false,
|
|
3652
|
+
"description": "Descricao exata de uma oferta presente no card (item_details.offers)"
|
|
3653
|
+
},
|
|
3654
|
+
{
|
|
3655
|
+
"name": "card_custom_attribute_filters",
|
|
3656
|
+
"type": "string",
|
|
3657
|
+
"location": "query",
|
|
3658
|
+
"required": false,
|
|
3659
|
+
"description": "STRING JSON (array serializado) de condicoes sobre atributos personalizados do CARD: [{\"attribute_key\":\"...\",\"filter_operator\":\"equal_to|not_equal_to|contains|does_not_contain|is_present|is_not_present\",\"values\":[\"...\"]}]. Ex: \"[{\\\"attribute_key\\\":\\\"origem\\\",\\\"filter_operator\\\":\\\"equal_to\\\",\\\"values\\\":[\\\"indicacao\\\"]}]\". NAO enviar como array nativo — o backend faz JSON.parse da string."
|
|
3660
|
+
},
|
|
3661
|
+
{
|
|
3662
|
+
"name": "contact_custom_attribute_filters",
|
|
3663
|
+
"type": "string",
|
|
3664
|
+
"location": "query",
|
|
3665
|
+
"required": false,
|
|
3666
|
+
"description": "STRING JSON (array serializado) de condicoes sobre atributos personalizados do CONTATO vinculado: [{\"attribute_key\":\"...\",\"filter_operator\":\"equal_to|not_equal_to|contains|does_not_contain|is_present|is_not_present\",\"values\":[\"...\"]}]. Ex: \"[{\\\"attribute_key\\\":\\\"origem\\\",\\\"filter_operator\\\":\\\"equal_to\\\",\\\"values\\\":[\\\"indicacao\\\"]}]\". NAO enviar como array nativo — o backend faz JSON.parse da string."
|
|
3667
|
+
},
|
|
3668
|
+
{
|
|
3669
|
+
"name": "conversation_custom_attribute_filters",
|
|
3670
|
+
"type": "string",
|
|
3671
|
+
"location": "query",
|
|
3672
|
+
"required": false,
|
|
3673
|
+
"description": "STRING JSON (array serializado) de condicoes sobre atributos personalizados da CONVERSA vinculada: [{\"attribute_key\":\"...\",\"filter_operator\":\"equal_to|not_equal_to|contains|does_not_contain|is_present|is_not_present\",\"values\":[\"...\"]}]. Ex: \"[{\\\"attribute_key\\\":\\\"origem\\\",\\\"filter_operator\\\":\\\"equal_to\\\",\\\"values\\\":[\\\"indicacao\\\"]}]\". NAO enviar como array nativo — o backend faz JSON.parse da string."
|
|
3674
|
+
},
|
|
3675
|
+
{
|
|
3676
|
+
"name": "custom_attribute_match",
|
|
3677
|
+
"type": "string",
|
|
3678
|
+
"location": "query",
|
|
3679
|
+
"required": false,
|
|
3680
|
+
"description": "'all' (E — todas as condicoes de atributo, padrao) ou 'any' (OU — qualquer uma)"
|
|
3588
3681
|
}
|
|
3589
3682
|
],
|
|
3590
|
-
"returns": "
|
|
3683
|
+
"returns": "{ items: [cards serializados], total: <int>, filters: <eco dos filtros> } — cap 5000, sem paginacao",
|
|
3591
3684
|
"common_use_cases": [
|
|
3592
|
-
"
|
|
3593
|
-
"
|
|
3594
|
-
"
|
|
3685
|
+
"Relatorio de cards por periodo + etapa + valor",
|
|
3686
|
+
"Cards com atributo personalizado especifico (card/contato/conversa)",
|
|
3687
|
+
"Cards com tarefa atrasada (task_filter=overdue) ou sem tarefa"
|
|
3595
3688
|
],
|
|
3596
3689
|
"related_tools": [
|
|
3597
3690
|
"lionchat_kanban_items_list",
|
|
@@ -3730,8 +3823,8 @@
|
|
|
3730
3823
|
"id": "lionchat_kanban_items_list_3",
|
|
3731
3824
|
"method": "GET",
|
|
3732
3825
|
"path": "/api/v1/accounts/{account_id}/kanban_items/reports",
|
|
3733
|
-
"title": "
|
|
3734
|
-
"description": "
|
|
3826
|
+
"title": "Relatório Agregado do Kanban",
|
|
3827
|
+
"description": "RELATORIO AGREGADO do Kanban (funil de vendas) — a resposta e um OBJETO de metricas, nao lista de cards: soma de valores GANHOS no periodo, contagem/valor por etapa, previsao ponderada (forecast), top negocios, cards parados (stale) e metas do funil. Filtra por periodo (from/to), agentes (user_ids[]) e time (team_id). USE ESTA TOOL quando pedirem 'relatorio do funil/vendas/ganhos do mes por agente ou time'. Pra LISTAR os cards em si, use lionchat_kanban_items_filter.",
|
|
3735
3828
|
"category": "Itens",
|
|
3736
3829
|
"params": [
|
|
3737
3830
|
{
|
|
@@ -3740,13 +3833,42 @@
|
|
|
3740
3833
|
"location": "query",
|
|
3741
3834
|
"required": true,
|
|
3742
3835
|
"description": "ID do funil"
|
|
3836
|
+
},
|
|
3837
|
+
{
|
|
3838
|
+
"name": "from",
|
|
3839
|
+
"type": "string",
|
|
3840
|
+
"location": "query",
|
|
3841
|
+
"required": false,
|
|
3842
|
+
"description": "Inicio do periodo (YYYY-MM-DD ou ISO 8601)"
|
|
3843
|
+
},
|
|
3844
|
+
{
|
|
3845
|
+
"name": "to",
|
|
3846
|
+
"type": "string",
|
|
3847
|
+
"location": "query",
|
|
3848
|
+
"required": false,
|
|
3849
|
+
"description": "Fim do periodo (YYYY-MM-DD ou ISO 8601)"
|
|
3850
|
+
},
|
|
3851
|
+
{
|
|
3852
|
+
"name": "user_ids",
|
|
3853
|
+
"query_name": "user_ids[]",
|
|
3854
|
+
"type": "array",
|
|
3855
|
+
"location": "query",
|
|
3856
|
+
"required": false,
|
|
3857
|
+
"description": "IDs de agentes — restringe o relatorio aos cards atribuidos a eles"
|
|
3858
|
+
},
|
|
3859
|
+
{
|
|
3860
|
+
"name": "team_id",
|
|
3861
|
+
"type": "integer",
|
|
3862
|
+
"location": "query",
|
|
3863
|
+
"required": false,
|
|
3864
|
+
"description": "ID do time — restringe aos cards dos agentes do time"
|
|
3743
3865
|
}
|
|
3744
3866
|
],
|
|
3745
|
-
"returns": "objeto de
|
|
3867
|
+
"returns": "objeto de metricas agregadas do funil (valores ganhos, por etapa, forecast, top deals, stale) — NAO e array de itens",
|
|
3746
3868
|
"common_use_cases": [
|
|
3747
|
-
"
|
|
3748
|
-
"
|
|
3749
|
-
"
|
|
3869
|
+
"Ganhos do mes por agente ou time",
|
|
3870
|
+
"Valor total e contagem por etapa do funil",
|
|
3871
|
+
"Forecast (previsao ponderada) e negocios parados"
|
|
3750
3872
|
],
|
|
3751
3873
|
"related_tools": [
|
|
3752
3874
|
"lionchat_kanban_items_list",
|
|
@@ -5092,7 +5214,7 @@
|
|
|
5092
5214
|
"method": "GET",
|
|
5093
5215
|
"path": "/api/v2/accounts/{account_id}/summary_reports/agent",
|
|
5094
5216
|
"title": "Relatorio por Agente",
|
|
5095
|
-
"description": "Relatório por agente — lista métricas (conversas atendidas, tempos médios, CSAT) por cada agente da conta no período. ⚠️ Tempos em SEGUNDOS.",
|
|
5217
|
+
"description": "Relatório por agente — lista métricas (conversas atendidas, tempos médios, CSAT) por cada agente da conta no período. ⚠️ Tempos em SEGUNDOS. [2026-07-24] Aceita inbox_id (opcional) pra ver o desempenho dos agentes DENTRO de uma caixa.",
|
|
5096
5218
|
"category": "Relatorios",
|
|
5097
5219
|
"params": [
|
|
5098
5220
|
{
|
|
@@ -5100,14 +5222,14 @@
|
|
|
5100
5222
|
"type": "string",
|
|
5101
5223
|
"location": "query",
|
|
5102
5224
|
"required": false,
|
|
5103
|
-
"description": "
|
|
5225
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5104
5226
|
},
|
|
5105
5227
|
{
|
|
5106
5228
|
"name": "until",
|
|
5107
5229
|
"type": "string",
|
|
5108
5230
|
"location": "query",
|
|
5109
5231
|
"required": false,
|
|
5110
|
-
"description": "
|
|
5232
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5111
5233
|
},
|
|
5112
5234
|
{
|
|
5113
5235
|
"name": "business_hours",
|
|
@@ -5115,6 +5237,13 @@
|
|
|
5115
5237
|
"location": "query",
|
|
5116
5238
|
"required": false,
|
|
5117
5239
|
"description": "Considerar apenas horario comercial"
|
|
5240
|
+
},
|
|
5241
|
+
{
|
|
5242
|
+
"name": "inbox_id",
|
|
5243
|
+
"type": "integer",
|
|
5244
|
+
"location": "query",
|
|
5245
|
+
"required": false,
|
|
5246
|
+
"description": "Opcional (2026-07-24): so as conversas daquela caixa entram no calculo por agente. Exclusivo deste relatorio (os resumos de time/caixa/etiqueta/canal NAO aceitam)."
|
|
5118
5247
|
}
|
|
5119
5248
|
],
|
|
5120
5249
|
"returns": "Array por agente de { id, name, conversations_count, avg_first_response_time (seg), avg_reply_time (seg), avg_resolution_time (seg), resolved_count, csat_score_average }",
|
|
@@ -5142,14 +5271,21 @@
|
|
|
5142
5271
|
"type": "string",
|
|
5143
5272
|
"location": "query",
|
|
5144
5273
|
"required": false,
|
|
5145
|
-
"description": "
|
|
5274
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5146
5275
|
},
|
|
5147
5276
|
{
|
|
5148
5277
|
"name": "until",
|
|
5149
5278
|
"type": "string",
|
|
5150
5279
|
"location": "query",
|
|
5151
5280
|
"required": false,
|
|
5152
|
-
"description": "
|
|
5281
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5282
|
+
},
|
|
5283
|
+
{
|
|
5284
|
+
"name": "business_hours",
|
|
5285
|
+
"type": "boolean",
|
|
5286
|
+
"location": "query",
|
|
5287
|
+
"required": false,
|
|
5288
|
+
"description": "true = medias consideram so o horario de atendimento configurado"
|
|
5153
5289
|
}
|
|
5154
5290
|
],
|
|
5155
5291
|
"returns": "array por time { id, name, conversations_count, avg_resolution_time (seg), avg_first_response_time (seg), avg_reply_time (seg), resolved_count } (sem paginacao/meta)",
|
|
@@ -5177,14 +5313,21 @@
|
|
|
5177
5313
|
"type": "string",
|
|
5178
5314
|
"location": "query",
|
|
5179
5315
|
"required": false,
|
|
5180
|
-
"description": "
|
|
5316
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5181
5317
|
},
|
|
5182
5318
|
{
|
|
5183
5319
|
"name": "until",
|
|
5184
5320
|
"type": "string",
|
|
5185
5321
|
"location": "query",
|
|
5186
5322
|
"required": false,
|
|
5187
|
-
"description": "
|
|
5323
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5324
|
+
},
|
|
5325
|
+
{
|
|
5326
|
+
"name": "business_hours",
|
|
5327
|
+
"type": "boolean",
|
|
5328
|
+
"location": "query",
|
|
5329
|
+
"required": false,
|
|
5330
|
+
"description": "true = medias consideram so o horario de atendimento configurado"
|
|
5188
5331
|
}
|
|
5189
5332
|
],
|
|
5190
5333
|
"returns": "array por inbox (mesma estrutura do resumo); sem meta",
|
|
@@ -5212,14 +5355,21 @@
|
|
|
5212
5355
|
"type": "string",
|
|
5213
5356
|
"location": "query",
|
|
5214
5357
|
"required": false,
|
|
5215
|
-
"description": "
|
|
5358
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5216
5359
|
},
|
|
5217
5360
|
{
|
|
5218
5361
|
"name": "until",
|
|
5219
5362
|
"type": "string",
|
|
5220
5363
|
"location": "query",
|
|
5221
5364
|
"required": false,
|
|
5222
|
-
"description": "
|
|
5365
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5366
|
+
},
|
|
5367
|
+
{
|
|
5368
|
+
"name": "business_hours",
|
|
5369
|
+
"type": "boolean",
|
|
5370
|
+
"location": "query",
|
|
5371
|
+
"required": false,
|
|
5372
|
+
"description": "true = medias consideram so o horario de atendimento configurado"
|
|
5223
5373
|
}
|
|
5224
5374
|
],
|
|
5225
5375
|
"returns": "array por label; sem meta",
|
|
@@ -5247,14 +5397,21 @@
|
|
|
5247
5397
|
"type": "string",
|
|
5248
5398
|
"location": "query",
|
|
5249
5399
|
"required": false,
|
|
5250
|
-
"description": "
|
|
5400
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5251
5401
|
},
|
|
5252
5402
|
{
|
|
5253
5403
|
"name": "until",
|
|
5254
5404
|
"type": "string",
|
|
5255
5405
|
"location": "query",
|
|
5256
5406
|
"required": false,
|
|
5257
|
-
"description": "
|
|
5407
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5408
|
+
},
|
|
5409
|
+
{
|
|
5410
|
+
"name": "business_hours",
|
|
5411
|
+
"type": "boolean",
|
|
5412
|
+
"location": "query",
|
|
5413
|
+
"required": false,
|
|
5414
|
+
"description": "true = medias consideram so o horario de atendimento configurado"
|
|
5258
5415
|
}
|
|
5259
5416
|
],
|
|
5260
5417
|
"returns": "array por canal; sem meta",
|
|
@@ -5282,7 +5439,7 @@
|
|
|
5282
5439
|
"type": "string",
|
|
5283
5440
|
"location": "query",
|
|
5284
5441
|
"required": false,
|
|
5285
|
-
"description": "Metrica: conversations_count
|
|
5442
|
+
"description": "Metrica (UMA por chamada): conversations_count | incoming_messages_count | outgoing_messages_count | avg_first_response_time | avg_resolution_time | resolutions_count | reply_time | bot_resolutions_count | bot_handoffs_count. Tempos em SEGUNDOS."
|
|
5286
5443
|
},
|
|
5287
5444
|
{
|
|
5288
5445
|
"name": "type",
|
|
@@ -5296,14 +5453,14 @@
|
|
|
5296
5453
|
"type": "string",
|
|
5297
5454
|
"location": "query",
|
|
5298
5455
|
"required": false,
|
|
5299
|
-
"description": "
|
|
5456
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5300
5457
|
},
|
|
5301
5458
|
{
|
|
5302
5459
|
"name": "until",
|
|
5303
5460
|
"type": "string",
|
|
5304
5461
|
"location": "query",
|
|
5305
5462
|
"required": false,
|
|
5306
|
-
"description": "
|
|
5463
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5307
5464
|
},
|
|
5308
5465
|
{
|
|
5309
5466
|
"name": "id",
|
|
@@ -5331,7 +5488,7 @@
|
|
|
5331
5488
|
"type": "string",
|
|
5332
5489
|
"location": "query",
|
|
5333
5490
|
"required": false,
|
|
5334
|
-
"description": "
|
|
5491
|
+
"description": "Deslocamento de fuso em horas (ex: -3 pra Brasilia) — afeta SO o agrupamento dos pontos do grafico (fronteira do dia/hora), NAO altera totais de summary."
|
|
5335
5492
|
}
|
|
5336
5493
|
],
|
|
5337
5494
|
"returns": "array de { value, timestamp[, count] } (sem meta)",
|
|
@@ -5359,14 +5516,14 @@
|
|
|
5359
5516
|
"type": "string",
|
|
5360
5517
|
"location": "query",
|
|
5361
5518
|
"required": false,
|
|
5362
|
-
"description": "
|
|
5519
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5363
5520
|
},
|
|
5364
5521
|
{
|
|
5365
5522
|
"name": "until",
|
|
5366
5523
|
"type": "string",
|
|
5367
5524
|
"location": "query",
|
|
5368
5525
|
"required": false,
|
|
5369
|
-
"description": "
|
|
5526
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
5370
5527
|
},
|
|
5371
5528
|
{
|
|
5372
5529
|
"name": "type",
|
|
@@ -5394,7 +5551,7 @@
|
|
|
5394
5551
|
"type": "string",
|
|
5395
5552
|
"location": "query",
|
|
5396
5553
|
"required": false,
|
|
5397
|
-
"description": "
|
|
5554
|
+
"description": "Deslocamento de fuso em horas (ex: -3). NAO altera os totais do summary — so afeta agrupamento em endpoints de serie temporal."
|
|
5398
5555
|
}
|
|
5399
5556
|
],
|
|
5400
5557
|
"returns": "{ conversations_count, incoming_messages_count, outgoing_messages_count, resolutions_count, avg_first_response_time (seg), avg_resolution_time (seg), previous: {...mesma estrutura...} }",
|
|
@@ -5630,7 +5787,7 @@
|
|
|
5630
5787
|
"method": "GET",
|
|
5631
5788
|
"path": "/api/v2/accounts/{account_id}/reports/conversation_traffic",
|
|
5632
5789
|
"title": "Trafego de Conversas",
|
|
5633
|
-
"description": "
|
|
5790
|
+
"description": "[GET] Conversation Traffic (heatmap de volume por hora x dia, CSV). ATENCAO: janela FIXA calculada a partir de HOJE no fuso informado — NAO aceita since/until (nao adianta passar). Unico parametro: timezone_offset (ex: -3 pra Brasilia; sem ele o pico sai em UTC).",
|
|
5634
5791
|
"category": "Relatorios",
|
|
5635
5792
|
"params": [
|
|
5636
5793
|
{
|
|
@@ -5706,7 +5863,7 @@
|
|
|
5706
5863
|
"method": "GET",
|
|
5707
5864
|
"path": "/api/v2/accounts/{account_id}/live_reports/conversation_metrics",
|
|
5708
5865
|
"title": "Metricas em Tempo Real",
|
|
5709
|
-
"description": "Metricas ao vivo de conversas (conversation_metrics). Filtro opcional team_id.",
|
|
5866
|
+
"description": "Metricas ao vivo de conversas (conversation_metrics). Filtro opcional team_id. [2026-07-24] Aceita tambem inbox_id e assignee_id (opcionais) — e o mesmo recorte da tela Visao Geral. Combinaveis com team_id.",
|
|
5710
5867
|
"category": "Relatorios",
|
|
5711
5868
|
"params": [
|
|
5712
5869
|
{
|
|
@@ -5715,6 +5872,20 @@
|
|
|
5715
5872
|
"location": "query",
|
|
5716
5873
|
"required": false,
|
|
5717
5874
|
"description": "Filtrar por time (opcional)"
|
|
5875
|
+
},
|
|
5876
|
+
{
|
|
5877
|
+
"name": "inbox_id",
|
|
5878
|
+
"type": "integer",
|
|
5879
|
+
"location": "query",
|
|
5880
|
+
"required": false,
|
|
5881
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UMA caixa de entrada."
|
|
5882
|
+
},
|
|
5883
|
+
{
|
|
5884
|
+
"name": "assignee_id",
|
|
5885
|
+
"type": "integer",
|
|
5886
|
+
"location": "query",
|
|
5887
|
+
"required": false,
|
|
5888
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UM atendente responsavel."
|
|
5718
5889
|
}
|
|
5719
5890
|
],
|
|
5720
5891
|
"returns": "{ open, unattended, unassigned, pending }",
|
|
@@ -5734,7 +5905,7 @@
|
|
|
5734
5905
|
"method": "GET",
|
|
5735
5906
|
"path": "/api/v2/accounts/{account_id}/live_reports/grouped_conversation_metrics",
|
|
5736
5907
|
"title": "Metricas Agrupadas em Tempo Real",
|
|
5737
|
-
"description": "Metricas ao vivo agrupadas. group_by OBRIGATORIO (team_id ou assignee_id).",
|
|
5908
|
+
"description": "Metricas ao vivo agrupadas. group_by OBRIGATORIO (team_id ou assignee_id). [2026-07-24] Aceita tambem inbox_id e assignee_id (opcionais) pra recortar a base antes do agrupamento.",
|
|
5738
5909
|
"category": "Relatorios",
|
|
5739
5910
|
"params": [
|
|
5740
5911
|
{
|
|
@@ -5750,6 +5921,20 @@
|
|
|
5750
5921
|
"location": "query",
|
|
5751
5922
|
"required": false,
|
|
5752
5923
|
"description": "Filtrar por time (opcional)"
|
|
5924
|
+
},
|
|
5925
|
+
{
|
|
5926
|
+
"name": "inbox_id",
|
|
5927
|
+
"type": "integer",
|
|
5928
|
+
"location": "query",
|
|
5929
|
+
"required": false,
|
|
5930
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UMA caixa de entrada."
|
|
5931
|
+
},
|
|
5932
|
+
{
|
|
5933
|
+
"name": "assignee_id",
|
|
5934
|
+
"type": "integer",
|
|
5935
|
+
"location": "query",
|
|
5936
|
+
"required": false,
|
|
5937
|
+
"description": "Opcional (2026-07-24): recorta as metricas por UM atendente responsavel."
|
|
5753
5938
|
}
|
|
5754
5939
|
],
|
|
5755
5940
|
"returns": "array { open, unattended, unassigned, <group_id> } (sem meta)",
|
|
@@ -12769,7 +12954,7 @@
|
|
|
12769
12954
|
"type": "string",
|
|
12770
12955
|
"location": "body",
|
|
12771
12956
|
"required": false,
|
|
12772
|
-
"description": "Tipo do valor: text (
|
|
12957
|
+
"description": "Tipo do valor: text (padrao), date (data — grava normalizado AAAA-MM-DD), time (hora — grava normalizado HH:MM, formato 24h), secret (valor secreto, guardado criptografado), number, checkbox, list, link, currency, percent, datetime. A tela de Variaveis da Conta oferece Texto, Data, Hora e Confidencial (2026-07-25) com seletor nativo; os demais tipos funcionam pela API mas a tela os edita como texto. Apelido legado: encrypted_text e aceito e convertido para secret automaticamente. Tipo fora dessa lista retorna 422."
|
|
12773
12958
|
},
|
|
12774
12959
|
{
|
|
12775
12960
|
"name": "value",
|
|
@@ -12797,7 +12982,7 @@
|
|
|
12797
12982
|
"method": "PATCH",
|
|
12798
12983
|
"path": "/api/v1/accounts/{account_id}/account_variables/{id}",
|
|
12799
12984
|
"title": "Atualizar Variável",
|
|
12800
|
-
"description": "Atualiza valor de uma variável existente. Atualiza campos do variável de conta existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: value.",
|
|
12985
|
+
"description": "Atualiza valor de uma variável existente. Atualiza campos do variável de conta existente. Suporta atualização parcial (PATCH) — só campos enviados são alterados. Campos suportados: value. O TIPO (attribute_display_type) e a CHAVE (attribute_key) NAO mudam depois de criados — pra trocar o tipo, apague a variavel e crie de novo.",
|
|
12801
12986
|
"category": "Variaveis da Conta",
|
|
12802
12987
|
"params": [
|
|
12803
12988
|
{
|
|
@@ -13850,9 +14035,60 @@
|
|
|
13850
14035
|
"method": "GET",
|
|
13851
14036
|
"path": "/api/v1/accounts/{account_id}/applied_slas/metrics",
|
|
13852
14037
|
"title": "Metricas SLA",
|
|
13853
|
-
"description": "
|
|
14038
|
+
"description": "[GET] Agregado de SLA (ENTERPRISE-ONLY): total_applied_slas, number_of_sla_misses e hit_rate (string pronta com %). [2026-07-24] Agora com os filtros REAIS expostos: periodo since/until (unix SEGUNDOS), inbox_id, team_id, sla_policy_id, label_list[] e assigned_agent_id. Conta sem Enterprise/SLA: endpoint indisponivel.",
|
|
13854
14039
|
"category": "SLA",
|
|
13855
|
-
"params": [
|
|
14040
|
+
"params": [
|
|
14041
|
+
{
|
|
14042
|
+
"name": "since",
|
|
14043
|
+
"type": "string",
|
|
14044
|
+
"location": "query",
|
|
14045
|
+
"required": false,
|
|
14046
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
14047
|
+
},
|
|
14048
|
+
{
|
|
14049
|
+
"name": "until",
|
|
14050
|
+
"type": "string",
|
|
14051
|
+
"location": "query",
|
|
14052
|
+
"required": false,
|
|
14053
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
14054
|
+
},
|
|
14055
|
+
{
|
|
14056
|
+
"name": "inbox_id",
|
|
14057
|
+
"type": "integer",
|
|
14058
|
+
"location": "query",
|
|
14059
|
+
"required": false,
|
|
14060
|
+
"description": "Filtra por caixa de entrada"
|
|
14061
|
+
},
|
|
14062
|
+
{
|
|
14063
|
+
"name": "team_id",
|
|
14064
|
+
"type": "integer",
|
|
14065
|
+
"location": "query",
|
|
14066
|
+
"required": false,
|
|
14067
|
+
"description": "Filtra por time"
|
|
14068
|
+
},
|
|
14069
|
+
{
|
|
14070
|
+
"name": "sla_policy_id",
|
|
14071
|
+
"type": "integer",
|
|
14072
|
+
"location": "query",
|
|
14073
|
+
"required": false,
|
|
14074
|
+
"description": "Filtra por politica de SLA"
|
|
14075
|
+
},
|
|
14076
|
+
{
|
|
14077
|
+
"name": "label_list",
|
|
14078
|
+
"query_name": "label_list[]",
|
|
14079
|
+
"type": "array",
|
|
14080
|
+
"location": "query",
|
|
14081
|
+
"required": false,
|
|
14082
|
+
"description": "Filtra por etiquetas da conversa (titulos)"
|
|
14083
|
+
},
|
|
14084
|
+
{
|
|
14085
|
+
"name": "assigned_agent_id",
|
|
14086
|
+
"type": "integer",
|
|
14087
|
+
"location": "query",
|
|
14088
|
+
"required": false,
|
|
14089
|
+
"description": "Filtra por atendente responsavel (admin; agente comum ve so o proprio)"
|
|
14090
|
+
}
|
|
14091
|
+
],
|
|
13856
14092
|
"returns": "{ total_applied_slas, number_of_sla_misses, hit_rate } — hit_rate e STRING tipo '95.5%'",
|
|
13857
14093
|
"common_use_cases": [
|
|
13858
14094
|
"Dashboard: contar/exibir políticas SLA",
|
|
@@ -14811,7 +15047,7 @@
|
|
|
14811
15047
|
"type": "object",
|
|
14812
15048
|
"location": "body",
|
|
14813
15049
|
"required": false,
|
|
14814
|
-
"description": "Opcional. Mapeia variaveis {{N}} do corpo a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta, fica salvo localmente). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Variavel sem mapping continua manual (digitada no envio). Fontes/campos: contact/name (Nome completo), contact/name.split.first (Primeiro nome), contact/name.split[1..] (Sobrenome), contact/phone_number, contact/email, conversation/assignee.name (Atendente), conversation/team.name (Equipe), account/name, ou contact/custom_attributes.CHAVE para campo personalizado."
|
|
15050
|
+
"description": "Opcional. Mapeia variaveis {{N}} do corpo a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta, fica salvo localmente). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Variavel sem mapping continua manual (digitada no envio). Fontes/campos: contact/name (Nome completo), contact/name.split.first (Primeiro nome), contact/name.split[1..] (Sobrenome), contact/phone_number, contact/email, conversation/assignee.name (Atendente), conversation/team.name (Equipe), account/name, ou contact/custom_attributes.CHAVE para campo personalizado. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo."
|
|
14815
15051
|
}
|
|
14816
15052
|
],
|
|
14817
15053
|
"returns": "template WhatsApp criado (com novo ID)",
|
|
@@ -14937,7 +15173,7 @@
|
|
|
14937
15173
|
"type": "object",
|
|
14938
15174
|
"location": "body",
|
|
14939
15175
|
"required": false,
|
|
14940
|
-
"description": "Opcional. Mapeia variaveis {{N}} a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Mesmas fontes/campos do endpoint de criacao."
|
|
15176
|
+
"description": "Opcional. Mapeia variaveis {{N}} a campos do sistema para auto-preenchimento no envio (NAO vai para a Meta). Chave = posicao da variavel (\"1\", \"2\"...), valor = objeto {source, field, label}. Ex: {\"1\": {\"source\": \"contact\", \"field\": \"name.split.first\", \"label\": \"Primeiro nome\"}}. Mesmas fontes/campos do endpoint de criacao. [NOVO 2026-07-25] Botao de link (URL) com variavel — link rastreavel por cliente: a URL do botao pode terminar com {{1}} (regra da Meta: no maximo UMA variavel, exatamente {{1}}, sempre NO FINAL, com base https:// fixa antes). Nesse caso o componente BUTTONS precisa mandar example: [\"<url com o exemplo no lugar do {{1}}>\"] (sem o example a Meta recusa o template na hora, erro 100) e o variable_mapping recebe a chave especial _button_url = {source, field, label, example, button_index}, onde button_index e a POSICAO do botao dentro do componente BUTTONS. source/field usam a mesma tabela das variaveis de corpo (contact/name, contact/name.split.first, contact/phone_number, contact/email, contact/custom_attributes.CHAVE, conversation/display_id, conversation/assignee.name, account/name), mais 'custom' (texto fixo, vai no field). No envio o valor e codificado automaticamente (espaco vira %20), entao o link nunca quebra. A chave comeca com _ de proposito: ela NAO conta como variavel de corpo."
|
|
14941
15177
|
}
|
|
14942
15178
|
],
|
|
14943
15179
|
"returns": "{ success: true }",
|
|
@@ -20738,7 +20974,7 @@
|
|
|
20738
20974
|
"method": "GET",
|
|
20739
20975
|
"path": "/api/v1/accounts/{account_id}/csat_survey_responses/metrics",
|
|
20740
20976
|
"title": "Metricas CSAT",
|
|
20741
|
-
"description": "
|
|
20977
|
+
"description": "[GET] Agregado de CSAT: total de respostas, distribuicao por nota (ratings_count) e pesquisas enviadas (total_sent_messages_count). [2026-07-24] Agora com os filtros REAIS expostos: user_ids[] (atendentes), inbox_id (caixa), team_id, rating e periodo since/until (unix SEGUNDOS). Nota media = soma(nota x qtd)/total; taxa de resposta = total_count/total_sent_messages_count (calcule — nao vem prontas).",
|
|
20742
20978
|
"category": "CSAT",
|
|
20743
20979
|
"params": [
|
|
20744
20980
|
{
|
|
@@ -20746,14 +20982,43 @@
|
|
|
20746
20982
|
"type": "string",
|
|
20747
20983
|
"location": "query",
|
|
20748
20984
|
"required": false,
|
|
20749
|
-
"description": "
|
|
20985
|
+
"description": "Inicio do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
20750
20986
|
},
|
|
20751
20987
|
{
|
|
20752
20988
|
"name": "until",
|
|
20753
20989
|
"type": "string",
|
|
20754
20990
|
"location": "query",
|
|
20755
20991
|
"required": false,
|
|
20756
|
-
"description": "
|
|
20992
|
+
"description": "Fim do periodo — timestamp UNIX em SEGUNDOS (ex: 1782864000). NAO use ISO 8601 — o backend faz strptime %s e a janela quebra em silencio."
|
|
20993
|
+
},
|
|
20994
|
+
{
|
|
20995
|
+
"name": "user_ids",
|
|
20996
|
+
"query_name": "user_ids[]",
|
|
20997
|
+
"type": "array",
|
|
20998
|
+
"location": "query",
|
|
20999
|
+
"required": false,
|
|
21000
|
+
"description": "IDs de atendentes — CSAT so das conversas atribuidas a eles (admin; agente comum ve so o proprio)"
|
|
21001
|
+
},
|
|
21002
|
+
{
|
|
21003
|
+
"name": "inbox_id",
|
|
21004
|
+
"type": "integer",
|
|
21005
|
+
"location": "query",
|
|
21006
|
+
"required": false,
|
|
21007
|
+
"description": "Filtra por caixa de entrada"
|
|
21008
|
+
},
|
|
21009
|
+
{
|
|
21010
|
+
"name": "team_id",
|
|
21011
|
+
"type": "integer",
|
|
21012
|
+
"location": "query",
|
|
21013
|
+
"required": false,
|
|
21014
|
+
"description": "Filtra por time"
|
|
21015
|
+
},
|
|
21016
|
+
{
|
|
21017
|
+
"name": "rating",
|
|
21018
|
+
"type": "integer",
|
|
21019
|
+
"location": "query",
|
|
21020
|
+
"required": false,
|
|
21021
|
+
"description": "Filtra por nota (1-5)"
|
|
20757
21022
|
}
|
|
20758
21023
|
],
|
|
20759
21024
|
"returns": "{ total_count, ratings_count (hash rating=>qtd), total_sent_messages_count }",
|
|
@@ -20922,7 +21187,7 @@
|
|
|
20922
21187
|
"method": "GET",
|
|
20923
21188
|
"path": "/api/v1/accounts/{account_id}/campaigns/{id}",
|
|
20924
21189
|
"title": "Detalhes da Campanha",
|
|
20925
|
-
"description": "Retorna uma campanha pelo display_id (o número visível na UI, não o id interno). Inclui audience, trigger_rules e template_params completos.",
|
|
21190
|
+
"description": "Retorna uma campanha pelo display_id (o número visível na UI, não o id interno). Inclui audience, trigger_rules e template_params completos. [2026-07-25] Campanha inexistente/apagada responde 404 limpo (antes dava erro 500).",
|
|
20926
21191
|
"category": "Campanhas",
|
|
20927
21192
|
"params": [
|
|
20928
21193
|
{
|
|
@@ -21035,7 +21300,7 @@
|
|
|
21035
21300
|
"method": "GET",
|
|
21036
21301
|
"path": "/api/v1/accounts/{account_id}/campaigns/{id}/statistics",
|
|
21037
21302
|
"title": "Estatísticas da Campanha",
|
|
21038
|
-
"description": "Métricas de entrega de campanha one-off: total, enviadas, entregues, lidas, falhas e taxas (%).",
|
|
21303
|
+
"description": "Métricas de entrega de campanha one-off: total, enviadas, entregues, lidas, falhas e taxas (%). [2026-07-25] Campanha inexistente/apagada responde 404 limpo (antes dava erro 500).",
|
|
21039
21304
|
"category": "Campanhas",
|
|
21040
21305
|
"params": [
|
|
21041
21306
|
{
|
|
@@ -21058,7 +21323,7 @@
|
|
|
21058
21323
|
"method": "POST",
|
|
21059
21324
|
"path": "/api/v1/accounts/{account_id}/campaigns/estimate_audience",
|
|
21060
21325
|
"title": "Estimar Audiência da Campanha",
|
|
21061
|
-
"description": "Conta quantos contatos COM TELEFONE atendem aos critérios ANTES de criar a campanha. Usa o MESMO motor do disparo (estimativa = lista real). SEMPRE chame antes de campaigns_create e mostre o número ao usuário.",
|
|
21326
|
+
"description": "Conta quantos contatos COM TELEFONE atendem aos critérios ANTES de criar a campanha. Usa o MESMO motor do disparo (estimativa = lista real). SEMPRE chame antes de campaigns_create e mostre o número ao usuário. [2026-07-25] audience e exclusion aceitam tanto lista quanto texto JSON de uma lista; qualquer outro formato responde 422 com a mensagem do erro (antes dava erro 500).",
|
|
21062
21327
|
"category": "Campanhas",
|
|
21063
21328
|
"params": [
|
|
21064
21329
|
{
|
|
@@ -21078,7 +21343,7 @@
|
|
|
21078
21343
|
{
|
|
21079
21344
|
"name": "exclusion",
|
|
21080
21345
|
"type": "array",
|
|
21081
|
-
"location": "
|
|
21346
|
+
"location": "body",
|
|
21082
21347
|
"required": false,
|
|
21083
21348
|
"description": "Publico a EXCLUIR/negativar antes de estimar (mesmo formato do 'audience': lista de secoes por tipo). O contador desconta quem cair na exclusao. Tipos aceitos iguais aos do audience (Label, Funnel, ConversationAttribute, ContactLabel, ContactAttribute, CardAttribute, AgentTeam)."
|
|
21084
21349
|
}
|
|
@@ -22215,6 +22480,101 @@
|
|
|
22215
22480
|
],
|
|
22216
22481
|
"related_tools": []
|
|
22217
22482
|
},
|
|
22483
|
+
{
|
|
22484
|
+
"id": "lionchat_inboxes_failed_messages_summary",
|
|
22485
|
+
"method": "GET",
|
|
22486
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/summary",
|
|
22487
|
+
"title": "Falhas de Envio da Caixa (painel)",
|
|
22488
|
+
"description": "[NOVO 2026-07-24] Painel 'Falhas de envio' da caixa: mensagens FALHADAS das ultimas 24h agrupadas por motivo — billing (falta de saldo/pagamento), transient (erro comum, reenviavel), window_expired (janela de 24h da API oficial fechou), permanent (erro definitivo) — + grupos informativos campaign (mensagem de campanha NUNCA reenvia por aqui) e partial (multi-anexo parcial, anti-duplicata). group_details traz ate 30 itens por grupo com contato, conversa, erro real e horario. Canais elegiveis: WAHA (QR), WhatsApp oficial e Messenger (Telegram/Instagram nao marcam failed). ADMIN-ONLY. Use antes do bulk_retry pra mostrar ao usuario O QUE falhou e quanto e reenviavel (retryable_count = billing + transient). [ATUALIZADO 2026-07-25] Novo grupo informativo 'deleted' (Excluidas): mensagem falhada que o usuario APAGOU continua no painel como registro, com o motivo ORIGINAL da falha preservado e sem botao de reenviar/cancelar; vem tambem no campo deleted_count e fica FORA de retryable_count e do total. Mensagem CANCELADA (lionchat_conversations_messages_cancel_retry ou bulk_cancel) some do painel de vez.",
|
|
22489
|
+
"category": "Caixas de Entrada",
|
|
22490
|
+
"params": [
|
|
22491
|
+
{
|
|
22492
|
+
"name": "inbox_id",
|
|
22493
|
+
"type": "integer",
|
|
22494
|
+
"location": "path",
|
|
22495
|
+
"required": true,
|
|
22496
|
+
"description": "ID da caixa de entrada"
|
|
22497
|
+
}
|
|
22498
|
+
],
|
|
22499
|
+
"returns": "{ window_hours, eligible_channel, bulk_retry_running, groups:{billing,transient,window_expired,permanent}, group_details, campaign_count, partial_count, retryable_count, total }",
|
|
22500
|
+
"common_use_cases": [
|
|
22501
|
+
"Diagnosticar por que mensagens nao chegaram (agrupado por motivo, com erro real)",
|
|
22502
|
+
"Ver quantas falhas sao reenviaveis antes de disparar o reenvio em massa",
|
|
22503
|
+
"Auditoria pos-incidente de envio (saldo Meta, sessao WAHA caida)"
|
|
22504
|
+
],
|
|
22505
|
+
"related_tools": [
|
|
22506
|
+
"lionchat_inboxes_failed_messages_bulk_retry",
|
|
22507
|
+
"lionchat_conversations_messages_create_1",
|
|
22508
|
+
"lionchat_inboxes_waha_status"
|
|
22509
|
+
]
|
|
22510
|
+
},
|
|
22511
|
+
{
|
|
22512
|
+
"id": "lionchat_inboxes_failed_messages_bulk_retry",
|
|
22513
|
+
"method": "POST",
|
|
22514
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/bulk_retry",
|
|
22515
|
+
"title": "Reenvio em Massa das Falhadas",
|
|
22516
|
+
"description": "[NOVO 2026-07-24] Reenvia EM LOTE as mensagens falhadas REENVIAVEIS das ultimas 24h da caixa (grupos billing + transient do summary). Teto 500 por clique; cadencia anti-ban (WAHA 8s entre mensagens, demais 1s); trava de 1 lote por caixa (409 bulk_retry_running se ja houver lote rodando); cada mensagem e re-validada na hora do reenvio (ainda failed, sem source_id, sessao WAHA WORKING, janela 24h da oficial) e tem teto de 3 tentativas no erro comum. Mensagens de CAMPANHA e multi-anexo PARCIAL nunca entram (anti-duplicata). ADMIN-ONLY. Sempre chame o summary antes e mostre as contagens ao usuario; confirme antes de disparar (acao de envio em massa real). [2026-07-25] Mensagem CANCELADA ou EXCLUIDA nunca entra no lote (bloqueio na fonte, vale tambem pro botao de reenvio e pra auto-recuperacao do WAHA). Pra descartar em vez de reenviar use lionchat_inboxes_failed_messages_bulk_cancel.",
|
|
22517
|
+
"category": "Caixas de Entrada",
|
|
22518
|
+
"params": [
|
|
22519
|
+
{
|
|
22520
|
+
"name": "inbox_id",
|
|
22521
|
+
"type": "integer",
|
|
22522
|
+
"location": "path",
|
|
22523
|
+
"required": true,
|
|
22524
|
+
"description": "ID da caixa de entrada"
|
|
22525
|
+
},
|
|
22526
|
+
{
|
|
22527
|
+
"name": "classification",
|
|
22528
|
+
"type": "string",
|
|
22529
|
+
"location": "body",
|
|
22530
|
+
"required": false,
|
|
22531
|
+
"description": "Opcional: restringe o lote a UM grupo — 'billing' (so as de falta de saldo, ex: apos pagar a Meta) ou 'transient' (so erro comum). Ausente = todos os reenviaveis."
|
|
22532
|
+
}
|
|
22533
|
+
],
|
|
22534
|
+
"returns": "{ scheduled: <agendadas agora>, remaining: <elegiveis que ficaram alem do teto de 500> } | 409 {error:'bulk_retry_running'} | 422 {error:'inbox_not_eligible'|'invalid_classification'}",
|
|
22535
|
+
"common_use_cases": [
|
|
22536
|
+
"Pos-incidente: reenviar tudo que falhou nas ultimas 24h da caixa",
|
|
22537
|
+
"Pagou o saldo da Meta: reenviar SO o grupo billing (classification='billing')"
|
|
22538
|
+
],
|
|
22539
|
+
"related_tools": [
|
|
22540
|
+
"lionchat_inboxes_failed_messages_summary",
|
|
22541
|
+
"lionchat_conversations_messages_create_1"
|
|
22542
|
+
]
|
|
22543
|
+
},
|
|
22544
|
+
{
|
|
22545
|
+
"id": "lionchat_inboxes_failed_messages_bulk_cancel",
|
|
22546
|
+
"method": "POST",
|
|
22547
|
+
"path": "/api/v1/accounts/{account_id}/inboxes/{inbox_id}/failed_messages/bulk_cancel",
|
|
22548
|
+
"title": "Cancelar Falhadas em Lote",
|
|
22549
|
+
"description": "[NOVO 2026-07-25] Cancela EM LOTE o reenvio das mensagens falhadas das ultimas 24h da caixa: elas somem do painel Falhas de envio e ficam fora de todo reenvio (botao, lote e auto-recuperacao do WAHA). Diferente do reenvio, cancelar vale pra TODOS os grupos — billing, transient, window_expired, permanent, campaign e partial — e e exatamente o jeito de limpar do painel o que nunca seria reenviado. Sincrono (sem job): responde {cancelled: N} na hora. Teto de 1000 por chamada. NAO mexe no grupo 'deleted' (Excluidas), que e registro permanente. IRREVERSIVEL e ADMIN-ONLY: chame lionchat_inboxes_failed_messages_summary antes, mostre as contagens ao usuario e confirme antes de disparar.",
|
|
22550
|
+
"category": "Caixas de Entrada",
|
|
22551
|
+
"params": [
|
|
22552
|
+
{
|
|
22553
|
+
"name": "inbox_id",
|
|
22554
|
+
"type": "integer",
|
|
22555
|
+
"location": "path",
|
|
22556
|
+
"required": true,
|
|
22557
|
+
"description": "ID da caixa de entrada"
|
|
22558
|
+
},
|
|
22559
|
+
{
|
|
22560
|
+
"name": "classification",
|
|
22561
|
+
"type": "string",
|
|
22562
|
+
"location": "body",
|
|
22563
|
+
"required": false,
|
|
22564
|
+
"description": "Opcional: restringe o cancelamento a UM grupo — 'billing', 'transient', 'window_expired', 'permanent', 'campaign' ou 'partial'. Ausente = cancela TODAS as falhadas da janela de 24h. Valor fora dessa lista responde 422 invalid_classification."
|
|
22565
|
+
}
|
|
22566
|
+
],
|
|
22567
|
+
"returns": "{cancelled: N} — quantidade de mensagens canceladas",
|
|
22568
|
+
"common_use_cases": [
|
|
22569
|
+
"Limpar o painel de falhas de envio de uma caixa",
|
|
22570
|
+
"Descartar em massa falhas que nunca serao reenviadas (janela fechada, erro definitivo)"
|
|
22571
|
+
],
|
|
22572
|
+
"related_tools": [
|
|
22573
|
+
"lionchat_inboxes_failed_messages_summary",
|
|
22574
|
+
"lionchat_inboxes_failed_messages_bulk_retry",
|
|
22575
|
+
"lionchat_conversations_messages_cancel_retry"
|
|
22576
|
+
]
|
|
22577
|
+
},
|
|
22218
22578
|
{
|
|
22219
22579
|
"id": "lionchat_internal_chat_rooms_list",
|
|
22220
22580
|
"method": "GET",
|
|
@@ -24247,7 +24607,7 @@
|
|
|
24247
24607
|
"method": "GET",
|
|
24248
24608
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations",
|
|
24249
24609
|
"title": "Listar Integração e-Clínica",
|
|
24250
|
-
"description": "Lista a integração e-Clínica da conta (no máximo 1 por conta) com id, status e configurações. Use PRIMEIRO para descobrir o {id} exigido pelas ferramentas de histórico de lembretes. Eventos mapeáveis incluem (23/07) os novos cliente_inclusao_pagamento ('Inclusão de cobrança' — cobrança/carnê criado, ainda não pago; grava eclinica_ultima_cobranca_valor/vencimento/descricao no contato) e controle_laboratorio_novo ('Controle de laboratório' — grava eclinica_laboratorio_data_prevista/data_moldagem/data_entrega/situacao). ATENÇÃO: o mapeamento evento→flow NÃO é editável via MCP (somente pelo painel).",
|
|
24610
|
+
"description": "Lista a integração e-Clínica da conta (no máximo 1 por conta) com id, status e configurações. Use PRIMEIRO para descobrir o {id} exigido pelas ferramentas de histórico de lembretes. Eventos mapeáveis incluem (23/07) os novos cliente_inclusao_pagamento ('Inclusão de cobrança' — cobrança/carnê criado, ainda não pago; grava eclinica_ultima_cobranca_valor/vencimento/descricao no contato) e controle_laboratorio_novo ('Controle de laboratório' — grava eclinica_laboratorio_data_prevista/data_moldagem/data_entrega/situacao). ATENÇÃO: o mapeamento evento→flow NÃO é editável via MCP (somente pelo painel). [2026-07-25] Cada linha de reminder_config traz agora event_type ('agendamento' padrao, 'controle_laboratorio_novo' para lembrete de laboratorio/medicacao, 'cliente_inclusao_pagamento' para lembrete de vencimento de cobranca), dispatch_time (hora do disparo, OBRIGATORIA: 'HH:MM' fixo ou formula Liquid com variavel de conta/contato) e o filtro opcional filter_field/filter_operator/filter_value. Os lembretes NAO sao editaveis via MCP — somente pelo painel (Integracoes > e-Clinica > Lembretes).",
|
|
24251
24611
|
"category": "Integracoes",
|
|
24252
24612
|
"params": [],
|
|
24253
24613
|
"returns": "200 {payload: {eclinica_integrations: [...]}}",
|
|
@@ -24264,7 +24624,7 @@
|
|
|
24264
24624
|
"method": "GET",
|
|
24265
24625
|
"path": "/api/v1/accounts/{account_id}/eclinica_integrations/{id}/reminder_history",
|
|
24266
24626
|
"title": "Histórico dos Lembretes e-Clínica",
|
|
24267
|
-
"description": "Lista os disparos de lembrete agendados da integração e-Clínica (novo 23/07) — responde 'o lembrete do paciente X saiu?'. Cada item traz status (pending aguardando | fired enviado | cancelled | skipped pulado + skip_reason | failed falhou + fail_reason), datas (created_at recebido, fire_at agendado, fired_at disparado, data_consulta), flow_name, contact_name, compromisso e unidade. Somente administrador.",
|
|
24627
|
+
"description": "Lista os disparos de lembrete agendados da integração e-Clínica (novo 23/07) — responde 'o lembrete do paciente X saiu?'. Cada item traz status (pending aguardando | fired enviado | cancelled | skipped pulado + skip_reason | failed falhou + fail_reason), datas (created_at recebido, fire_at agendado, fired_at disparado, data_consulta), flow_name, contact_name, compromisso e unidade. Somente administrador. [2026-07-25] O historico cobre os tres tipos de lembrete: consulta (conta a partir da data da consulta), laboratorio/medicacao (conta a partir da data prevista do laboratorio) e vencimento de cobranca (conta a partir do vencimento). O horario de cada disparo vem da 'Hora do disparo' configurada na linha do lembrete.",
|
|
24268
24628
|
"category": "Integracoes",
|
|
24269
24629
|
"params": [
|
|
24270
24630
|
{
|