@besales/mcp 0.45.0 → 0.46.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/resources/docs/crm-integration.md +3 -1
- package/dist/resources/workflows/compare-models.md +4 -3
- package/dist/resources/workflows/connect-crm-from-scratch.md +8 -0
- package/dist/schemas/mcp-tools.json +431 -30
- package/dist/tools/definitions/agent-design.d.ts +8 -0
- package/dist/tools/definitions/agent-design.js +3 -0
- package/dist/tools/definitions/agent-design.js.map +1 -1
- package/dist/tools/definitions/broadcast-analytics.d.ts +5 -4
- package/dist/tools/definitions/broadcast-analytics.js +14 -4
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-scheduler.d.ts +14 -1
- package/dist/tools/definitions/broadcast-scheduler.js +64 -5
- package/dist/tools/definitions/broadcast-scheduler.js.map +1 -1
- package/dist/tools/definitions/crm-platform.js +20 -0
- package/dist/tools/definitions/crm-platform.js.map +1 -1
- package/dist/tools/definitions/follow-up.js +2 -0
- package/dist/tools/definitions/follow-up.js.map +1 -1
- package/dist/tools/definitions/getcourse-cold-welcome.d.ts +8 -0
- package/dist/tools/definitions/getcourse-cold-welcome.js +49 -3
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/link-tracking.js +22 -0
- package/dist/tools/definitions/link-tracking.js.map +1 -1
- package/dist/tools/definitions/model-comparison.js +6 -3
- package/dist/tools/definitions/model-comparison.js.map +1 -1
- package/dist/tools/definitions/platform-setup.d.ts +29 -0
- package/dist/tools/definitions/platform-setup.js +14 -1
- package/dist/tools/definitions/platform-setup.js.map +1 -1
- package/dist/tools/definitions/shared.d.ts +120 -0
- package/dist/tools/definitions/shared.js +96 -0
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions/trigger-contact-claims.d.ts +7 -0
- package/dist/tools/definitions/trigger-contact-claims.js +58 -0
- package/dist/tools/definitions/trigger-contact-claims.js.map +1 -0
- package/dist/tools/definitions.d.ts +70 -5
- package/dist/tools/definitions.js +2 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/registry-mapping-cases-core.js +11 -2
- package/dist/tools/registry-mapping-cases-core.js.map +1 -1
- package/dist/tools/trigger-action-config.js +4 -0
- package/dist/tools/trigger-action-config.js.map +1 -1
- package/dist/types/api-contract.gen.d.ts +976 -37
- package/docs/agent-usage-guide.full.ru.md +1 -0
- package/package.json +1 -1
|
@@ -1325,7 +1325,7 @@
|
|
|
1325
1325
|
"funnel": {
|
|
1326
1326
|
"type": "string",
|
|
1327
1327
|
"maxLength": 200,
|
|
1328
|
-
"description": "
|
|
1328
|
+
"description": "Воронка ШКОЛЫ в форме «f11 — ДБО / NR / ВК / In Stream» — код fNN ОБЯЗАТЕЛЕН. ⚠️ Это НЕ когорта и НЕ подпись запуска: «reg-no-show», «post-web|дбо», «svs-zapusk» сюда класть нельзя — тип отбора идёт в segment, продукт в product_code, подпись запуска в cohort_label. Ось «Воронка» сравнивается по коду, поэтому значение без кода становится отдельной «воронкой» и засоряет фильтр аналитики."
|
|
1329
1329
|
},
|
|
1330
1330
|
"segment": {
|
|
1331
1331
|
"type": "string",
|
|
@@ -1610,7 +1610,7 @@
|
|
|
1610
1610
|
"funnel": {
|
|
1611
1611
|
"type": "string",
|
|
1612
1612
|
"maxLength": 200,
|
|
1613
|
-
"description": "
|
|
1613
|
+
"description": "Воронка ШКОЛЫ в форме «f11 — ДБО / NR / ВК / In Stream» — код fNN ОБЯЗАТЕЛЕН. ⚠️ Это НЕ когорта и НЕ подпись запуска: «reg-no-show», «post-web|дбо», «svs-zapusk» сюда класть нельзя — тип отбора идёт в segment, продукт в product_code, подпись запуска в cohort_label. Ось «Воронка» сравнивается по коду, поэтому значение без кода становится отдельной «воронкой» и засоряет фильтр аналитики."
|
|
1614
1614
|
},
|
|
1615
1615
|
"segment": {
|
|
1616
1616
|
"type": "string",
|
|
@@ -2053,7 +2053,7 @@
|
|
|
2053
2053
|
"funnel": {
|
|
2054
2054
|
"type": "string",
|
|
2055
2055
|
"maxLength": 200,
|
|
2056
|
-
"description": "
|
|
2056
|
+
"description": "Воронка ШКОЛЫ в форме «f11 — ДБО / NR / ВК / In Stream» — код fNN ОБЯЗАТЕЛЕН. ⚠️ Это НЕ когорта и НЕ подпись запуска: «reg-no-show», «post-web|дбо», «svs-zapusk» сюда класть нельзя — тип отбора идёт в segment, продукт в product_code, подпись запуска в cohort_label. Ось «Воронка» сравнивается по коду, поэтому значение без кода становится отдельной «воронкой» и засоряет фильтр аналитики."
|
|
2057
2057
|
},
|
|
2058
2058
|
"segment": {
|
|
2059
2059
|
"type": "string",
|
|
@@ -4504,6 +4504,45 @@
|
|
|
4504
4504
|
"type": "integer"
|
|
4505
4505
|
},
|
|
4506
4506
|
"description": "GetCourse offer ids whose paid orders are credited to us regardless of who created the order — the agent via GETCOURSE_CREATE_DEAL or a manager by hand in the GetCourse admin. Empty array turns the rule off. The set applies to the whole school (every platform sharing the GetCourse domain), not to a single platform. Changes money attribution retroactively — dangerous, requires explicit_confirmation."
|
|
4507
|
+
},
|
|
4508
|
+
"guard_active_series": {
|
|
4509
|
+
"type": [
|
|
4510
|
+
"string",
|
|
4511
|
+
"null"
|
|
4512
|
+
],
|
|
4513
|
+
"enum": [
|
|
4514
|
+
"OFF",
|
|
4515
|
+
"WARN",
|
|
4516
|
+
"BLOCK",
|
|
4517
|
+
null
|
|
4518
|
+
],
|
|
4519
|
+
"description": "Outbound guard: do not write while the person's webinar series is running. OFF — rule off; WARN — reason audited, send proceeds; BLOCK — send stopped. null = not configured (default: active_series BLOCK, others WARN). See docs/features/outbound-guards.md."
|
|
4520
|
+
},
|
|
4521
|
+
"guard_active_application": {
|
|
4522
|
+
"type": [
|
|
4523
|
+
"string",
|
|
4524
|
+
"null"
|
|
4525
|
+
],
|
|
4526
|
+
"enum": [
|
|
4527
|
+
"OFF",
|
|
4528
|
+
"WARN",
|
|
4529
|
+
"BLOCK",
|
|
4530
|
+
null
|
|
4531
|
+
],
|
|
4532
|
+
"description": "Outbound guard: do not write while a sales rep works an active application. OFF — rule off; WARN — reason audited, send proceeds; BLOCK — send stopped. null = not configured (default: active_series BLOCK, others WARN). See docs/features/outbound-guards.md."
|
|
4533
|
+
},
|
|
4534
|
+
"guard_paid": {
|
|
4535
|
+
"type": [
|
|
4536
|
+
"string",
|
|
4537
|
+
"null"
|
|
4538
|
+
],
|
|
4539
|
+
"enum": [
|
|
4540
|
+
"OFF",
|
|
4541
|
+
"WARN",
|
|
4542
|
+
"BLOCK",
|
|
4543
|
+
null
|
|
4544
|
+
],
|
|
4545
|
+
"description": "Outbound guard: do not write to someone who already paid for THIS product. OFF — rule off; WARN — reason audited, send proceeds; BLOCK — send stopped. null = not configured (default: active_series BLOCK, others WARN). See docs/features/outbound-guards.md."
|
|
4507
4546
|
}
|
|
4508
4547
|
}
|
|
4509
4548
|
},
|
|
@@ -4512,6 +4551,120 @@
|
|
|
4512
4551
|
},
|
|
4513
4552
|
"confirmation_reason": {
|
|
4514
4553
|
"type": "string"
|
|
4554
|
+
},
|
|
4555
|
+
"funnel_analytics": {
|
|
4556
|
+
"type": "object",
|
|
4557
|
+
"description": "Настройки раздела «Воронка канала»: ворота решения (тройка стадий «отправлено → одобрено | отклонено»), целевая стадия «Пути до стадии», пороги вовлечённости и «застрял». null у ворот и цели — СБРОС, отсутствие поля — «не трогать». Запись делегируется сервисам раздела, поэтому их проверки (стадии разные, стадии есть в каталоге площадки) не обходятся.",
|
|
4558
|
+
"properties": {
|
|
4559
|
+
"decision_gate": {
|
|
4560
|
+
"type": [
|
|
4561
|
+
"object",
|
|
4562
|
+
"null"
|
|
4563
|
+
],
|
|
4564
|
+
"required": [
|
|
4565
|
+
"submitted",
|
|
4566
|
+
"approved",
|
|
4567
|
+
"rejected"
|
|
4568
|
+
],
|
|
4569
|
+
"properties": {
|
|
4570
|
+
"submitted": {
|
|
4571
|
+
"type": "object",
|
|
4572
|
+
"required": [
|
|
4573
|
+
"pipeline_crm_id",
|
|
4574
|
+
"pipeline_id",
|
|
4575
|
+
"status_id"
|
|
4576
|
+
],
|
|
4577
|
+
"properties": {
|
|
4578
|
+
"pipeline_crm_id": {
|
|
4579
|
+
"type": "string"
|
|
4580
|
+
},
|
|
4581
|
+
"pipeline_id": {
|
|
4582
|
+
"type": "integer"
|
|
4583
|
+
},
|
|
4584
|
+
"status_id": {
|
|
4585
|
+
"type": "integer"
|
|
4586
|
+
}
|
|
4587
|
+
}
|
|
4588
|
+
},
|
|
4589
|
+
"approved": {
|
|
4590
|
+
"type": "object",
|
|
4591
|
+
"required": [
|
|
4592
|
+
"pipeline_crm_id",
|
|
4593
|
+
"pipeline_id",
|
|
4594
|
+
"status_id"
|
|
4595
|
+
],
|
|
4596
|
+
"properties": {
|
|
4597
|
+
"pipeline_crm_id": {
|
|
4598
|
+
"type": "string"
|
|
4599
|
+
},
|
|
4600
|
+
"pipeline_id": {
|
|
4601
|
+
"type": "integer"
|
|
4602
|
+
},
|
|
4603
|
+
"status_id": {
|
|
4604
|
+
"type": "integer"
|
|
4605
|
+
}
|
|
4606
|
+
}
|
|
4607
|
+
},
|
|
4608
|
+
"rejected": {
|
|
4609
|
+
"type": "object",
|
|
4610
|
+
"required": [
|
|
4611
|
+
"pipeline_crm_id",
|
|
4612
|
+
"pipeline_id",
|
|
4613
|
+
"status_id"
|
|
4614
|
+
],
|
|
4615
|
+
"properties": {
|
|
4616
|
+
"pipeline_crm_id": {
|
|
4617
|
+
"type": "string"
|
|
4618
|
+
},
|
|
4619
|
+
"pipeline_id": {
|
|
4620
|
+
"type": "integer"
|
|
4621
|
+
},
|
|
4622
|
+
"status_id": {
|
|
4623
|
+
"type": "integer"
|
|
4624
|
+
}
|
|
4625
|
+
}
|
|
4626
|
+
}
|
|
4627
|
+
}
|
|
4628
|
+
},
|
|
4629
|
+
"path_target_stage": {
|
|
4630
|
+
"type": [
|
|
4631
|
+
"object",
|
|
4632
|
+
"null"
|
|
4633
|
+
],
|
|
4634
|
+
"required": [
|
|
4635
|
+
"pipeline_crm_id",
|
|
4636
|
+
"pipeline_id",
|
|
4637
|
+
"status_id"
|
|
4638
|
+
],
|
|
4639
|
+
"properties": {
|
|
4640
|
+
"pipeline_crm_id": {
|
|
4641
|
+
"type": "string"
|
|
4642
|
+
},
|
|
4643
|
+
"pipeline_id": {
|
|
4644
|
+
"type": "integer"
|
|
4645
|
+
},
|
|
4646
|
+
"status_id": {
|
|
4647
|
+
"type": "integer"
|
|
4648
|
+
}
|
|
4649
|
+
}
|
|
4650
|
+
},
|
|
4651
|
+
"engaged_inbound_count": {
|
|
4652
|
+
"type": [
|
|
4653
|
+
"integer",
|
|
4654
|
+
"null"
|
|
4655
|
+
],
|
|
4656
|
+
"minimum": 2,
|
|
4657
|
+
"maximum": 20
|
|
4658
|
+
},
|
|
4659
|
+
"stuck_threshold_hours": {
|
|
4660
|
+
"type": [
|
|
4661
|
+
"integer",
|
|
4662
|
+
"null"
|
|
4663
|
+
],
|
|
4664
|
+
"minimum": 1,
|
|
4665
|
+
"maximum": 720
|
|
4666
|
+
}
|
|
4667
|
+
}
|
|
4515
4668
|
}
|
|
4516
4669
|
}
|
|
4517
4670
|
}
|
|
@@ -4829,7 +4982,7 @@
|
|
|
4829
4982
|
},
|
|
4830
4983
|
{
|
|
4831
4984
|
"name": "besales_prompt_patch_apply",
|
|
4832
|
-
"description": "S3.8: применяет batch operations к draft.currentContent. Resets TTL на 24h (activity-based). Возвращает `appliedCount` + `skippedCount` (anchor не найден / growth guard >30%). Endpoint: PATCH /api/v2/agents/{agentId}/prompt/drafts/{draftId}/operations. Scope: write:prompt-drafts. ВАЖНО: ведущие и замыкающие пробелы/переводы строк в replacement_text срезаются — чтобы вставить пустую строку-разделитель между абзацами, держи перевод строки В СЕРЕДИНЕ replacement_text или включи окружающий текст в anchor/target; иначе соседние заголовки/абзацы склеятся. Ответ
|
|
4985
|
+
"description": "S3.8: применяет batch operations к draft.currentContent. Resets TTL на 24h (activity-based). Возвращает `appliedCount` + `skippedCount` (anchor не найден / growth guard >30%). Endpoint: PATCH /api/v2/agents/{agentId}/prompt/drafts/{draftId}/operations. Scope: write:prompt-drafts. ВАЖНО: ведущие и замыкающие пробелы/переводы строк в replacement_text срезаются — чтобы вставить пустую строку-разделитель между абзацами, держи перевод строки В СЕРЕДИНЕ replacement_text или включи окружающий текст в anchor/target; иначе соседние заголовки/абзацы склеятся. Ответ НЕ содержит текст черновика: приезжают appliedCount/skippedCount, метаданные (draft.characters — длина после правки) и diff — построчная разница «до → после» (removedLines/addedLines, при обрезке truncated: true). ВНИМАНИЕ: пустые removedLines/addedLines НЕ означают «ничего не применилось» — diff строится как разность множеств строк, поэтому move_text_after_text и правка одних пробелов дают пустые списки; факт изменения читай по diff.contentChanged. Перечитать промпт целиком — besales_prompt_patch_get. между батчами.",
|
|
4833
4986
|
"inputSchema": {
|
|
4834
4987
|
"type": "object",
|
|
4835
4988
|
"required": [
|
|
@@ -4892,7 +5045,7 @@
|
|
|
4892
5045
|
},
|
|
4893
5046
|
{
|
|
4894
5047
|
"name": "besales_prompt_patch_commit",
|
|
4895
|
-
"description": "S3.8: коммитит draft как новую PromptVersion. Pipeline: (1) Lint (PromptLintService) — hard_fail блокирует commit с 400; (2) Optimistic lock в prompt-services — `agentSideHash` server-side читается из AgentChat (если production prompt изменился между fork и commit → 409 PROMPT_DRAFT_REBASE_REQUIRED, discard и создай новый); (3) AgentChat sync с conditional UPDATE; (4) если sync упал после успешного PS commit → retry queue (success клиенту). Endpoint: POST /api/v2/agents/{agentId}/prompt/drafts/{draftId}/commit. Scope: write:prompt-drafts.",
|
|
5048
|
+
"description": "S3.8: коммитит draft как новую PromptVersion. Pipeline: (1) Lint (PromptLintService) — hard_fail блокирует commit с 400; (2) Optimistic lock в prompt-services — `agentSideHash` server-side читается из AgentChat (если production prompt изменился между fork и commit → 409 PROMPT_DRAFT_REBASE_REQUIRED, discard и создай новый); (3) AgentChat sync с conditional UPDATE; (4) если sync упал после успешного PS commit → retry queue (success клиенту). Endpoint: POST /api/v2/agents/{agentId}/prompt/drafts/{draftId}/commit. Scope: write:prompt-drafts. Ответ несёт только адресацию новой версии (newVersion.id + version) и метаданные черновика — текст промпта не дублируется.",
|
|
4896
5049
|
"inputSchema": {
|
|
4897
5050
|
"type": "object",
|
|
4898
5051
|
"required": [
|
|
@@ -7451,6 +7604,21 @@
|
|
|
7451
7604
|
}
|
|
7452
7605
|
}
|
|
7453
7606
|
},
|
|
7607
|
+
{
|
|
7608
|
+
"name": "besales_crm_amocrm_channel_registration",
|
|
7609
|
+
"description": "Заявка на регистрацию чат-канала AmoCRM: адрес вебхука воркспейса + текст письма в техподдержку AmoCRM. Без зарегистрированного канала бот управляет сделкой, но переписка в её карточке не появляется — channelId/channelSecretKey выдаёт только их поддержка по письму заданной формы. Текст собирает бэкенд, тот же ответ показывает страница AmoCRM в интерфейсе: пересылай дословно, адрес сам не собирай. Scope: mcp:platform-setup.",
|
|
7610
|
+
"inputSchema": {
|
|
7611
|
+
"type": "object",
|
|
7612
|
+
"required": [],
|
|
7613
|
+
"properties": {
|
|
7614
|
+
"workspace_id": {
|
|
7615
|
+
"type": "string",
|
|
7616
|
+
"format": "uuid",
|
|
7617
|
+
"description": "Optional override. Normally omit — defaults to the workspace bound to this session."
|
|
7618
|
+
}
|
|
7619
|
+
}
|
|
7620
|
+
}
|
|
7621
|
+
},
|
|
7454
7622
|
{
|
|
7455
7623
|
"name": "besales_crm_field_mapping_get",
|
|
7456
7624
|
"description": "v1.5 Increment 5c: текущий маппинг полей CRM + доступные поля. Только AmoCRM/Bitrix24 (иначе unsupported_reason). Scope: mcp:platform-setup.",
|
|
@@ -7882,7 +8050,7 @@
|
|
|
7882
8050
|
},
|
|
7883
8051
|
{
|
|
7884
8052
|
"name": "besales_model_comparison_run_start",
|
|
7885
|
-
"description": "Запустить прогон сравнения промпта агента на нескольких моделях (один и тот же набор диалогов, меняется только модель агента). ДОРОГО — только по явному запросу оператора, НЕ после каждого фикса. models опционально (по умолчанию ~5 defaultSelected из besales_model_catalog_list), 1..
|
|
8053
|
+
"description": "Запустить прогон сравнения промпта агента на нескольких моделях (один и тот же набор диалогов, меняется только модель агента). ДОРОГО — только по явному запросу оператора, НЕ после каждого фикса. models опционально (по умолчанию ~5 defaultSelected из besales_model_catalog_list), 1..26. dialogue_count по умолчанию 5, до 20. Возвращает run_id для besales_model_comparison_get.",
|
|
7886
8054
|
"inputSchema": {
|
|
7887
8055
|
"type": "object",
|
|
7888
8056
|
"required": [
|
|
@@ -7900,8 +8068,8 @@
|
|
|
7900
8068
|
"type": "string"
|
|
7901
8069
|
},
|
|
7902
8070
|
"minItems": 1,
|
|
7903
|
-
"maxItems":
|
|
7904
|
-
"description": "Runnable id моделей из каталога (1..
|
|
8071
|
+
"maxItems": 26,
|
|
8072
|
+
"description": "Runnable id моделей из каталога (1..26). По умолчанию набор defaultSelected."
|
|
7905
8073
|
},
|
|
7906
8074
|
"dialogue_count": {
|
|
7907
8075
|
"type": "integer",
|
|
@@ -8409,7 +8577,8 @@
|
|
|
8409
8577
|
"type": "string",
|
|
8410
8578
|
"enum": [
|
|
8411
8579
|
"cohort",
|
|
8412
|
-
"period"
|
|
8580
|
+
"period",
|
|
8581
|
+
"entry"
|
|
8413
8582
|
],
|
|
8414
8583
|
"default": "period",
|
|
8415
8584
|
"description": "period — по дате события (как вкладка по дням); cohort — по дате запуска волны."
|
|
@@ -8422,20 +8591,24 @@
|
|
|
8422
8591
|
"0-7",
|
|
8423
8592
|
"8-14",
|
|
8424
8593
|
"15-30",
|
|
8425
|
-
"31
|
|
8594
|
+
"31-45",
|
|
8595
|
+
"46-60",
|
|
8596
|
+
"61+"
|
|
8426
8597
|
]
|
|
8427
8598
|
},
|
|
8428
8599
|
{
|
|
8429
8600
|
"type": "array",
|
|
8430
8601
|
"minItems": 1,
|
|
8431
|
-
"maxItems":
|
|
8602
|
+
"maxItems": 6,
|
|
8432
8603
|
"items": {
|
|
8433
8604
|
"type": "string",
|
|
8434
8605
|
"enum": [
|
|
8435
8606
|
"0-7",
|
|
8436
8607
|
"8-14",
|
|
8437
8608
|
"15-30",
|
|
8438
|
-
"31
|
|
8609
|
+
"31-45",
|
|
8610
|
+
"46-60",
|
|
8611
|
+
"61+"
|
|
8439
8612
|
]
|
|
8440
8613
|
}
|
|
8441
8614
|
}
|
|
@@ -8752,20 +8925,24 @@
|
|
|
8752
8925
|
"0-7",
|
|
8753
8926
|
"8-14",
|
|
8754
8927
|
"15-30",
|
|
8755
|
-
"31
|
|
8928
|
+
"31-45",
|
|
8929
|
+
"46-60",
|
|
8930
|
+
"61+"
|
|
8756
8931
|
]
|
|
8757
8932
|
},
|
|
8758
8933
|
{
|
|
8759
8934
|
"type": "array",
|
|
8760
8935
|
"minItems": 1,
|
|
8761
|
-
"maxItems":
|
|
8936
|
+
"maxItems": 6,
|
|
8762
8937
|
"items": {
|
|
8763
8938
|
"type": "string",
|
|
8764
8939
|
"enum": [
|
|
8765
8940
|
"0-7",
|
|
8766
8941
|
"8-14",
|
|
8767
8942
|
"15-30",
|
|
8768
|
-
"31
|
|
8943
|
+
"31-45",
|
|
8944
|
+
"46-60",
|
|
8945
|
+
"61+"
|
|
8769
8946
|
]
|
|
8770
8947
|
}
|
|
8771
8948
|
}
|
|
@@ -8816,7 +8993,8 @@
|
|
|
8816
8993
|
"type": "string",
|
|
8817
8994
|
"enum": [
|
|
8818
8995
|
"cohort",
|
|
8819
|
-
"period"
|
|
8996
|
+
"period",
|
|
8997
|
+
"entry"
|
|
8820
8998
|
],
|
|
8821
8999
|
"default": "period"
|
|
8822
9000
|
},
|
|
@@ -8907,7 +9085,7 @@
|
|
|
8907
9085
|
},
|
|
8908
9086
|
{
|
|
8909
9087
|
"name": "besales_followup_reactions",
|
|
8910
|
-
"description": "Read-only аналитика дожимов: на какой шаг follow-up-цепочки контакт реально отреагировал. Метрик ТРИ — операционная (следует за длиной окна шага, шаги по ней сравнивать нельзя), сравнительная на равном горизонте (сравнивать можно только при comparableReliable=true) и runs — отклик на ПРОХОЖДЕНИЕ цепочки за run_window_days от входа, единственная, на которую не влияет частота шагов. Срезы по сегменту/продукту/мессенджеру доступны только у каналов с рассылками. Scope: read:analytics.",
|
|
9088
|
+
"description": "Read-only аналитика дожимов: на какой шаг follow-up-цепочки контакт реально отреагировал. Метрик ТРИ — операционная (следует за длиной окна шага, шаги по ней сравнивать нельзя), сравнительная на равном горизонте (сравнивать можно только при comparableReliable=true) и runs — отклик на ПРОХОЖДЕНИЕ цепочки за run_window_days от входа, единственная, на которую не влияет частота шагов. Срезы по сегменту/продукту/мессенджеру доступны только у каналов с рассылками. Scope: read:analytics. ⚠️ Реакцией считается не только ответ: `horizonEngaged` — ответили ИЛИ перешли по ссылке касания в том же горизонте, разность с `horizonReplied` даёт «не ответил, но кликнул». Складывать `horizonReplied` и `linkClicked` нельзя — ответивший часто ещё и кликает.",
|
|
8911
9089
|
"inputSchema": {
|
|
8912
9090
|
"type": "object",
|
|
8913
9091
|
"required": [
|
|
@@ -9839,7 +10017,8 @@
|
|
|
9839
10017
|
},
|
|
9840
10018
|
"funnel": {
|
|
9841
10019
|
"type": "string",
|
|
9842
|
-
"maxLength": 200
|
|
10020
|
+
"maxLength": 200,
|
|
10021
|
+
"description": "Воронка ШКОЛЫ в форме «f11 — ДБО / NR / ВК / In Stream» — код fNN ОБЯЗАТЕЛЕН. ⚠️ Это НЕ когорта и НЕ подпись запуска: «reg-no-show», «post-web|дбо», «svs-zapusk» сюда класть нельзя — тип отбора идёт в segment, продукт в product_code, подпись запуска в cohort_label. Ось «Воронка» сравнивается по коду, поэтому значение без кода становится отдельной «воронкой» и засоряет фильтр аналитики. Файл из НЕСКОЛЬКИХ воронок — заполняй воронку построчно в contacts[].funnel."
|
|
9843
10022
|
},
|
|
9844
10023
|
"cohort_label": {
|
|
9845
10024
|
"type": "string",
|
|
@@ -9877,6 +10056,12 @@
|
|
|
9877
10056
|
"type": "string",
|
|
9878
10057
|
"format": "date-time",
|
|
9879
10058
|
"description": "Точный момент входа контакта в когорту (ISO с зоной). На нём считается свежесть в «Аналитике рассылок». Заполняй, когда предсписок собран ПРАВИЛОМ и у строки есть свой момент события. Дату запуска подставлять нельзя — она схлопнула бы месяцы когорт в одну."
|
|
10059
|
+
},
|
|
10060
|
+
"funnel": {
|
|
10061
|
+
"type": "string",
|
|
10062
|
+
"minLength": 1,
|
|
10063
|
+
"maxLength": 200,
|
|
10064
|
+
"description": "Воронка ЭТОГО контакта (например «f11 — ДБО / NR / ВК / In Stream»). Заполняй, когда файл собран из НЕСКОЛЬКИХ воронок: одна метка на запуск заставляет писать в поле воронки когорту («reg-no-show|дбо»), и фильтр по воронке перестаёт отвечать на свой вопрос. Не передан — берётся воронка запуска."
|
|
9880
10065
|
}
|
|
9881
10066
|
}
|
|
9882
10067
|
}
|
|
@@ -9977,7 +10162,8 @@
|
|
|
9977
10162
|
},
|
|
9978
10163
|
"funnel": {
|
|
9979
10164
|
"type": "string",
|
|
9980
|
-
"maxLength": 200
|
|
10165
|
+
"maxLength": 200,
|
|
10166
|
+
"description": "Воронка ШКОЛЫ в форме «f11 — ДБО / NR / ВК / In Stream» — код fNN ОБЯЗАТЕЛЕН. ⚠️ Это НЕ когорта и НЕ подпись запуска: «reg-no-show», «post-web|дбо», «svs-zapusk» сюда класть нельзя — тип отбора идёт в segment, продукт в product_code, подпись запуска в cohort_label. Ось «Воронка» сравнивается по коду, поэтому значение без кода становится отдельной «воронкой» и засоряет фильтр аналитики."
|
|
9981
10167
|
},
|
|
9982
10168
|
"cohort_label": {
|
|
9983
10169
|
"type": "string",
|
|
@@ -10052,13 +10238,47 @@
|
|
|
10052
10238
|
"ADD"
|
|
10053
10239
|
],
|
|
10054
10240
|
"description": "⚠️ УСТАРЕЛО и на поведение НЕ влияет (с 23.08.2026). Список channels значит «слать сюда», а судьбу КАЖДОГО канала решает сервер: мессенджер (Telegram/VK/MAX) уходит, только если школа подтвердила его наличие у контакта; SMS — только при известном телефоне; Email, WhatsApp, Viber, Сайт, Chatium уходят вслепую всем выбранным. Просят «написать ещё и на почту» — добавь Email в channels и перечисли мессенджеры явно, иначе уедет только письмо. Поле принимается ради обратной совместимости и игнорируется."
|
|
10241
|
+
},
|
|
10242
|
+
"guards": {
|
|
10243
|
+
"type": "object",
|
|
10244
|
+
"additionalProperties": false,
|
|
10245
|
+
"description": "Перекрытие предохранителей на ЭТОТ пакет — аварийный обход одной отправки. Не передано — берутся настройки площадки. Значение сохраняется в план пакета, поэтому resume после рестарта доедет с тем же решением. Постоянное ослабление делается в besales_platform_settings_update, где его видно всей команде.",
|
|
10246
|
+
"properties": {
|
|
10247
|
+
"active_series": {
|
|
10248
|
+
"type": "string",
|
|
10249
|
+
"enum": [
|
|
10250
|
+
"OFF",
|
|
10251
|
+
"WARN",
|
|
10252
|
+
"BLOCK"
|
|
10253
|
+
],
|
|
10254
|
+
"description": "Не писать, пока у человека идёт вебинарная серия. По умолчанию BLOCK: до внедрения правило уже блокировало внешними скриптами, и WARN снял бы действующую защиту."
|
|
10255
|
+
},
|
|
10256
|
+
"active_application": {
|
|
10257
|
+
"type": "string",
|
|
10258
|
+
"enum": [
|
|
10259
|
+
"OFF",
|
|
10260
|
+
"WARN",
|
|
10261
|
+
"BLOCK"
|
|
10262
|
+
],
|
|
10263
|
+
"description": "Не писать при действующей (не отменённой) заявке — с человеком работает менеджер. По умолчанию WARN."
|
|
10264
|
+
},
|
|
10265
|
+
"paid": {
|
|
10266
|
+
"type": "string",
|
|
10267
|
+
"enum": [
|
|
10268
|
+
"OFF",
|
|
10269
|
+
"WARN",
|
|
10270
|
+
"BLOCK"
|
|
10271
|
+
],
|
|
10272
|
+
"description": "Не писать оплатившему ЭТОТ продукт. Скоуп по продукту, а не «платил хоть раз». По умолчанию WARN."
|
|
10273
|
+
}
|
|
10274
|
+
}
|
|
10055
10275
|
}
|
|
10056
10276
|
}
|
|
10057
10277
|
}
|
|
10058
10278
|
},
|
|
10059
10279
|
{
|
|
10060
10280
|
"name": "besales_getcourse_cold_welcome_batch_status",
|
|
10061
|
-
"description": "Состояние пакета: агрегат state и разбивка segments[] со своим статусом, importJobId и причиной отказа у каждого. stalled=true — драйвер
|
|
10281
|
+
"description": "Состояние пакета: агрегат state и разбивка segments[] со своим статусом, importJobId и причиной отказа у каждого. completedAt — момент закрытия ВСЕХ сегментов (null, пока пакет идёт). summary — план, доказанные доставки (реестр рассылок) и разбивка исходов; segmentsWithoutOutcomes>0 значит, что у стольких сегментов прогон оборвался, не записав итог, и их исходы в разбивку не вошли. stalled=true — драйвер оборвался: зови besales_getcourse_cold_welcome_batch_resume, а не запускай пакет заново. Опрашивать в цикле не нужно: о завершении и об обрыве платформа докладывает в чат уведомлений воркспейса.",
|
|
10062
10282
|
"inputSchema": {
|
|
10063
10283
|
"type": "object",
|
|
10064
10284
|
"required": [
|
|
@@ -10365,6 +10585,11 @@
|
|
|
10365
10585
|
"type": "integer",
|
|
10366
10586
|
"minimum": 1,
|
|
10367
10587
|
"maximum": 50
|
|
10588
|
+
},
|
|
10589
|
+
"schedule_id": {
|
|
10590
|
+
"type": "string",
|
|
10591
|
+
"format": "uuid",
|
|
10592
|
+
"description": "Только прогоны этого расписания. Ручные отправки и волны при этом не возвращаются вовсе: расписанием они не запускались."
|
|
10368
10593
|
}
|
|
10369
10594
|
}
|
|
10370
10595
|
}
|
|
@@ -10665,7 +10890,7 @@
|
|
|
10665
10890
|
},
|
|
10666
10891
|
{
|
|
10667
10892
|
"name": "besales_tracked_link_list",
|
|
10668
|
-
"description": "Каталог коротких трекинговых ссылок workspace со сводкой «выдано → клики → ответы → заявки → оплаты». Поле placeholder — готовый токен {{link:slug}} для текстов дожимов, рассылок и шаблонов: вставляется ИМЕННО он, сырой URL мимо трекинга не считается. staticUrl — анонимный короткий адрес для мест без персональной выдачи (промпт агента, письмо школы). Ответ постраничный; hasMore=true означает, что каталог не дочитан. Scope: read:analytics. ⚠️ Токен берётся ТОЛЬКО копированием поля placeholder: собранный вручную токен с неточным слагом вырезается вместе с маркером, и клиент получает фразу без ссылки. В промпт агента токен не кладут — там staticUrl.",
|
|
10893
|
+
"description": "Каталог коротких трекинговых ссылок workspace со сводкой «выдано → клики → ответы → заявки → оплаты». Поле placeholder — готовый токен {{link:slug}} для текстов дожимов, рассылок и шаблонов: вставляется ИМЕННО он, сырой URL мимо трекинга не считается. staticUrl — анонимный короткий адрес для мест без персональной выдачи (промпт агента, письмо школы). Ответ постраничный; hasMore=true означает, что каталог не дочитан. Scope: read:analytics. ⚠️ Токен берётся ТОЛЬКО копированием поля placeholder: собранный вручную токен с неточным слагом вырезается вместе с маркером, и клиент получает фразу без ссылки. В промпт агента токен не кладут — там staticUrl. ⚠️ days НЕ ЗАДАН — сводка за ВСЁ ВРЕМЯ (прежде подставлялось окно 60 дней, и оно расходилось само с собой: выданное раньше него показывалось как «выдано 0», тогда как выручка в той же строке считалась за всё время). Нужно окно — назови его явно.",
|
|
10669
10894
|
"inputSchema": {
|
|
10670
10895
|
"type": "object",
|
|
10671
10896
|
"required": [],
|
|
@@ -10816,7 +11041,36 @@
|
|
|
10816
11041
|
},
|
|
10817
11042
|
{
|
|
10818
11043
|
"name": "besales_tracked_link_breakdown",
|
|
10819
|
-
"description": "Разрез одной ссылки по источникам выдачи: WAVE (волна), FOLLOWUP (дожим), CAMPAIGN (кампания), GREETING (приветствие), AGENT (обычный ответ агента) — с воронкой по каждому. Отвечает на вопрос «после чего по ссылке ходят», а не «каким сообщением она ушла». Оплата атрибутируется last-touch по ближайшему клику. Scope: read:analytics.",
|
|
11044
|
+
"description": "Разрез одной ссылки по источникам выдачи: WAVE (волна), FOLLOWUP (дожим), CAMPAIGN (кампания), GREETING (приветствие), AGENT (обычный ответ агента) — с воронкой по каждому. Отвечает на вопрос «после чего по ссылке ходят», а не «каким сообщением она ушла». Оплата атрибутируется last-touch по ближайшему клику. Scope: read:analytics. ⚠️ days НЕ ЗАДАН — сводка за ВСЁ ВРЕМЯ (прежде подставлялось окно 60 дней, и оно расходилось само с собой: выданное раньше него показывалось как «выдано 0», тогда как выручка в той же строке считалась за всё время). Нужно окно — назови его явно.",
|
|
11045
|
+
"inputSchema": {
|
|
11046
|
+
"type": "object",
|
|
11047
|
+
"required": [
|
|
11048
|
+
"link_id"
|
|
11049
|
+
],
|
|
11050
|
+
"additionalProperties": false,
|
|
11051
|
+
"properties": {
|
|
11052
|
+
"workspace_id": {
|
|
11053
|
+
"type": "string",
|
|
11054
|
+
"format": "uuid",
|
|
11055
|
+
"description": "Optional override. Normally omit — defaults to the workspace bound to this session."
|
|
11056
|
+
},
|
|
11057
|
+
"link_id": {
|
|
11058
|
+
"type": "string",
|
|
11059
|
+
"format": "uuid",
|
|
11060
|
+
"description": "UUID ссылки из каталога."
|
|
11061
|
+
},
|
|
11062
|
+
"days": {
|
|
11063
|
+
"type": "integer",
|
|
11064
|
+
"minimum": 1,
|
|
11065
|
+
"maximum": 366,
|
|
11066
|
+
"description": "Глубина сводки в днях (по умолчанию 60)."
|
|
11067
|
+
}
|
|
11068
|
+
}
|
|
11069
|
+
}
|
|
11070
|
+
},
|
|
11071
|
+
{
|
|
11072
|
+
"name": "besales_tracked_link_reach",
|
|
11073
|
+
"description": "Разрез одной ссылки по МЕСТУ применения: площадка и агент, через которых она уходила людям. Отвечает на «где ссылка работает», тогда как besales_tracked_link_breakdown — на «после какого касания по ней ходят». Оси независимые: одна выдача принадлежит ровно одной площадке и одному агенту. null в оси — «не определён», отдельная строка, а не ноль. Пустое имя при заполненном id значит, что площадку или агента удалили: id хранится снимком без внешнего ключа, чтобы история кликов пережила удаление. Scope: read:analytics.",
|
|
10820
11074
|
"inputSchema": {
|
|
10821
11075
|
"type": "object",
|
|
10822
11076
|
"required": [
|
|
@@ -10845,7 +11099,7 @@
|
|
|
10845
11099
|
},
|
|
10846
11100
|
{
|
|
10847
11101
|
"name": "besales_tracked_link_clicks",
|
|
10848
|
-
"description": "Лента переходов по ссылке: контакт, сообщение, источник выдачи и время. Клики-предпросмотры мессенджеров отсеяны. ⚠️ Анонимные переходы по staticUrl В ЛЕНТЕ ЕСТЬ — строками с null в chatUserId/contactName/messageId/issuedAt/sourceKind (у анонимного кода человека нет по построению); не считай их людьми, их суммарное число лежит в каталоге полем anonymousClicks. ⚠️ total — число КЛИКОВ (включая повторные и анонимные), а clicked в каталоге — число ВЫДАЧ с первым живым кликом: величины разные и сходиться не обязаны. Постранично: page + page_size (максимум 200). Scope: read:analytics + read:conversations (лента несёт имя контакта и id сообщения; композитный mcp:* покрывает оба).",
|
|
11102
|
+
"description": "Лента переходов по ссылке: контакт, сообщение, источник выдачи и время. Клики-предпросмотры мессенджеров отсеяны. ⚠️ Анонимные переходы по staticUrl В ЛЕНТЕ ЕСТЬ — строками с null в chatUserId/contactName/messageId/issuedAt/sourceKind (у анонимного кода человека нет по построению); не считай их людьми, их суммарное число лежит в каталоге полем anonymousClicks. ⚠️ total — число КЛИКОВ (включая повторные и анонимные), а clicked в каталоге — число ВЫДАЧ с первым живым кликом: величины разные и сходиться не обязаны. Постранично: page + page_size (максимум 200). Scope: read:analytics + read:conversations (лента несёт имя контакта и id сообщения; композитный mcp:* покрывает оба). ⚠️ days НЕ ЗАДАН — сводка за ВСЁ ВРЕМЯ (прежде подставлялось окно 60 дней, и оно расходилось само с собой: выданное раньше него показывалось как «выдано 0», тогда как выручка в той же строке считалась за всё время). Нужно окно — назови его явно.",
|
|
10849
11103
|
"inputSchema": {
|
|
10850
11104
|
"type": "object",
|
|
10851
11105
|
"required": [
|
|
@@ -11006,7 +11260,7 @@
|
|
|
11006
11260
|
"type": "integer",
|
|
11007
11261
|
"minimum": 1,
|
|
11008
11262
|
"maximum": 78,
|
|
11009
|
-
"description": "Окно
|
|
11263
|
+
"description": "Окно свежести при window_mode=ROLLING: вошедшие в сегмент за последние N дней. При FIXED не читается"
|
|
11010
11264
|
},
|
|
11011
11265
|
"time_local": {
|
|
11012
11266
|
"type": "string",
|
|
@@ -11023,6 +11277,16 @@
|
|
|
11023
11277
|
"maxItems": 7,
|
|
11024
11278
|
"description": "Дни недели ISO (1 = понедельник). Пусто = каждый день"
|
|
11025
11279
|
},
|
|
11280
|
+
"days_of_month": {
|
|
11281
|
+
"type": "array",
|
|
11282
|
+
"items": {
|
|
11283
|
+
"type": "integer",
|
|
11284
|
+
"minimum": 1,
|
|
11285
|
+
"maximum": 31
|
|
11286
|
+
},
|
|
11287
|
+
"maxItems": 31,
|
|
11288
|
+
"description": "Числа месяца 1–31. Пусто = не по числам месяца. Взаимоисключимо с days_of_week: вместе они означают «31-е И понедельник». Число больше длины месяца попадает на ПОСЛЕДНИЙ его день, иначе «31-е» пропускало бы февраль целиком."
|
|
11289
|
+
},
|
|
11026
11290
|
"daily_cap": {
|
|
11027
11291
|
"type": "integer",
|
|
11028
11292
|
"minimum": 1,
|
|
@@ -11074,6 +11338,24 @@
|
|
|
11074
11338
|
"ADD"
|
|
11075
11339
|
],
|
|
11076
11340
|
"description": "⚠️ УСТАРЕЛО и на поведение НЕ влияет (с 23.08.2026). Список channels значит «слать сюда», а судьбу КАЖДОГО канала решает сервер: мессенджер (Telegram/VK/MAX) уходит, только если школа подтвердила его наличие у контакта; SMS — только при известном телефоне; Email, WhatsApp, Viber, Сайт, Chatium уходят вслепую всем выбранным. Просят «написать ещё и на почту» — добавь Email в channels и перечисли мессенджеры явно, иначе уедет только письмо. Поле принимается ради обратной совместимости и игнорируется."
|
|
11341
|
+
},
|
|
11342
|
+
"window_mode": {
|
|
11343
|
+
"type": "string",
|
|
11344
|
+
"enum": [
|
|
11345
|
+
"ROLLING",
|
|
11346
|
+
"FIXED"
|
|
11347
|
+
],
|
|
11348
|
+
"description": "ROLLING (правый край окна — «сейчас», по умолчанию) или FIXED (явная пара дат)"
|
|
11349
|
+
},
|
|
11350
|
+
"window_from_local": {
|
|
11351
|
+
"type": "string",
|
|
11352
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
11353
|
+
"description": "Начало окна при FIXED — ЛОКАЛЬНАЯ дата площадки ГГГГ-ММ-ДД (не момент: момент сдвинул бы границу на смещение зоны)"
|
|
11354
|
+
},
|
|
11355
|
+
"window_to_local": {
|
|
11356
|
+
"type": "string",
|
|
11357
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
11358
|
+
"description": "Конец окна при FIXED, ВКЛЮЧИТЕЛЬНО: «по 20 августа» берёт весь двадцатый день"
|
|
11077
11359
|
}
|
|
11078
11360
|
},
|
|
11079
11361
|
"required": [
|
|
@@ -11158,7 +11440,7 @@
|
|
|
11158
11440
|
"type": "integer",
|
|
11159
11441
|
"minimum": 1,
|
|
11160
11442
|
"maximum": 78,
|
|
11161
|
-
"description": "Окно
|
|
11443
|
+
"description": "Окно свежести при window_mode=ROLLING: вошедшие в сегмент за последние N дней. При FIXED не читается"
|
|
11162
11444
|
},
|
|
11163
11445
|
"time_local": {
|
|
11164
11446
|
"type": "string",
|
|
@@ -11175,6 +11457,16 @@
|
|
|
11175
11457
|
"maxItems": 7,
|
|
11176
11458
|
"description": "Дни недели ISO (1 = понедельник). Пусто = каждый день"
|
|
11177
11459
|
},
|
|
11460
|
+
"days_of_month": {
|
|
11461
|
+
"type": "array",
|
|
11462
|
+
"items": {
|
|
11463
|
+
"type": "integer",
|
|
11464
|
+
"minimum": 1,
|
|
11465
|
+
"maximum": 31
|
|
11466
|
+
},
|
|
11467
|
+
"maxItems": 31,
|
|
11468
|
+
"description": "Числа месяца 1–31. Пусто = не по числам месяца. Взаимоисключимо с days_of_week: вместе они означают «31-е И понедельник». Число больше длины месяца попадает на ПОСЛЕДНИЙ его день, иначе «31-е» пропускало бы февраль целиком."
|
|
11469
|
+
},
|
|
11178
11470
|
"daily_cap": {
|
|
11179
11471
|
"type": "integer",
|
|
11180
11472
|
"minimum": 1,
|
|
@@ -11230,6 +11522,24 @@
|
|
|
11230
11522
|
"ADD"
|
|
11231
11523
|
],
|
|
11232
11524
|
"description": "⚠️ УСТАРЕЛО и на поведение НЕ влияет (с 23.08.2026). Список channels значит «слать сюда», а судьбу КАЖДОГО канала решает сервер: мессенджер (Telegram/VK/MAX) уходит, только если школа подтвердила его наличие у контакта; SMS — только при известном телефоне; Email, WhatsApp, Viber, Сайт, Chatium уходят вслепую всем выбранным. Просят «написать ещё и на почту» — добавь Email в channels и перечисли мессенджеры явно, иначе уедет только письмо. Поле принимается ради обратной совместимости и игнорируется."
|
|
11525
|
+
},
|
|
11526
|
+
"window_mode": {
|
|
11527
|
+
"type": "string",
|
|
11528
|
+
"enum": [
|
|
11529
|
+
"ROLLING",
|
|
11530
|
+
"FIXED"
|
|
11531
|
+
],
|
|
11532
|
+
"description": "ROLLING (правый край окна — «сейчас», по умолчанию) или FIXED (явная пара дат)"
|
|
11533
|
+
},
|
|
11534
|
+
"window_from_local": {
|
|
11535
|
+
"type": "string",
|
|
11536
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
11537
|
+
"description": "Начало окна при FIXED — ЛОКАЛЬНАЯ дата площадки ГГГГ-ММ-ДД (не момент: момент сдвинул бы границу на смещение зоны)"
|
|
11538
|
+
},
|
|
11539
|
+
"window_to_local": {
|
|
11540
|
+
"type": "string",
|
|
11541
|
+
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
|
|
11542
|
+
"description": "Конец окна при FIXED, ВКЛЮЧИТЕЛЬНО: «по 20 августа» берёт весь двадцатый день"
|
|
11233
11543
|
}
|
|
11234
11544
|
},
|
|
11235
11545
|
"required": [
|
|
@@ -11372,6 +11682,38 @@
|
|
|
11372
11682
|
"ANY"
|
|
11373
11683
|
],
|
|
11374
11684
|
"description": "NOT_ANYWHERE исключает всех, кто когда-либо успешно платил (включая возврат)"
|
|
11685
|
+
},
|
|
11686
|
+
"prelist": {
|
|
11687
|
+
"type": "string",
|
|
11688
|
+
"enum": [
|
|
11689
|
+
"YES",
|
|
11690
|
+
"NO",
|
|
11691
|
+
"ANY"
|
|
11692
|
+
],
|
|
11693
|
+
"description": "Предсписок: оформил заказ предсписка. Применимость и метки заказа объявляет ВОРОНКА в источнике фактов; если правило у воронки не задано или данные не готовы, строки приходят непроверяемыми и никому ничего не уйдёт"
|
|
11694
|
+
},
|
|
11695
|
+
"previousSegment": {
|
|
11696
|
+
"type": "object",
|
|
11697
|
+
"additionalProperties": false,
|
|
11698
|
+
"properties": {
|
|
11699
|
+
"key": {
|
|
11700
|
+
"type": "string",
|
|
11701
|
+
"minLength": 1,
|
|
11702
|
+
"maxLength": 64,
|
|
11703
|
+
"description": "Имя сегмента ПРЕДЫДУЩЕГО касания"
|
|
11704
|
+
},
|
|
11705
|
+
"minDaysSince": {
|
|
11706
|
+
"type": "integer",
|
|
11707
|
+
"minimum": 30,
|
|
11708
|
+
"maximum": 78,
|
|
11709
|
+
"description": "Сколько суток должно пройти с прошлого касания (минимум 30 — граница владельца)"
|
|
11710
|
+
}
|
|
11711
|
+
},
|
|
11712
|
+
"required": [
|
|
11713
|
+
"key",
|
|
11714
|
+
"minDaysSince"
|
|
11715
|
+
],
|
|
11716
|
+
"description": "ПОВТОРНОЕ касание: сегмент уходит тем, у кого названный сегмент был ПОСЛЕДНИМ нашим касанием и кто нам не ответил. Снимает вечный одноразовый claim приветствия — единственную защиту от второго сообщения живому человеку"
|
|
11375
11717
|
}
|
|
11376
11718
|
},
|
|
11377
11719
|
"required": [
|
|
@@ -11385,7 +11727,8 @@
|
|
|
11385
11727
|
"SERIES_END",
|
|
11386
11728
|
"SERIES_END_PLUS_WAIT",
|
|
11387
11729
|
"LAST_APPLICATION",
|
|
11388
|
-
"REGISTRATION"
|
|
11730
|
+
"REGISTRATION",
|
|
11731
|
+
"PRELIST"
|
|
11389
11732
|
],
|
|
11390
11733
|
"description": "Откуда берётся момент входа контакта в сегмент"
|
|
11391
11734
|
},
|
|
@@ -11393,7 +11736,7 @@
|
|
|
11393
11736
|
"type": "integer",
|
|
11394
11737
|
"minimum": 0,
|
|
11395
11738
|
"maximum": 720,
|
|
11396
|
-
"description": "Сколько ждать после эфира до признания «не пришёл».
|
|
11739
|
+
"description": "Сколько ждать после эфира до признания «не пришёл». Дефолт 1 час: касание свежее, но явка к этому моменту досчитана у меньшинства (6 ч → 56 %, 24 ч → 74 %, 48 ч → 81 %), а недосчитанный контакт в отбор не попадает. При коротком ожидании ставьте freshness_days от 3: при 1 человека смотрят ровно один раз"
|
|
11397
11740
|
},
|
|
11398
11741
|
"priority": {
|
|
11399
11742
|
"type": "integer",
|
|
@@ -11408,6 +11751,56 @@
|
|
|
11408
11751
|
"freshness_anchor"
|
|
11409
11752
|
]
|
|
11410
11753
|
}
|
|
11754
|
+
},
|
|
11755
|
+
{
|
|
11756
|
+
"name": "besales_trigger_claim_list",
|
|
11757
|
+
"description": "Read-only список одноразовых триггеров (runOncePerContact), уже сработавших на контакте. Право сжигается навсегда после первого срабатывания. Scope: mcp:platform-setup.",
|
|
11758
|
+
"inputSchema": {
|
|
11759
|
+
"type": "object",
|
|
11760
|
+
"required": [
|
|
11761
|
+
"chat_user_id"
|
|
11762
|
+
],
|
|
11763
|
+
"additionalProperties": false,
|
|
11764
|
+
"properties": {
|
|
11765
|
+
"chat_user_id": {
|
|
11766
|
+
"type": "string",
|
|
11767
|
+
"format": "uuid",
|
|
11768
|
+
"description": "Контакт (ChatUser). Единица права — канал, а не человек."
|
|
11769
|
+
}
|
|
11770
|
+
}
|
|
11771
|
+
}
|
|
11772
|
+
},
|
|
11773
|
+
{
|
|
11774
|
+
"name": "besales_trigger_claim_reset",
|
|
11775
|
+
"description": "Возвращает контакту право на повторное срабатывание одноразового триггера. Триггер сможет повторить необратимые действия (запись в CRM, передача оператору), поэтому требуется explicit_confirmation. Scope: mcp:platform-setup.",
|
|
11776
|
+
"inputSchema": {
|
|
11777
|
+
"type": "object",
|
|
11778
|
+
"required": [
|
|
11779
|
+
"chat_user_id",
|
|
11780
|
+
"trigger_id",
|
|
11781
|
+
"explicit_confirmation"
|
|
11782
|
+
],
|
|
11783
|
+
"additionalProperties": false,
|
|
11784
|
+
"properties": {
|
|
11785
|
+
"chat_user_id": {
|
|
11786
|
+
"type": "string",
|
|
11787
|
+
"format": "uuid",
|
|
11788
|
+
"description": "Контакт (ChatUser), которому возвращается право."
|
|
11789
|
+
},
|
|
11790
|
+
"trigger_id": {
|
|
11791
|
+
"type": "string",
|
|
11792
|
+
"format": "uuid",
|
|
11793
|
+
"description": "Одноразовый триггер, право на который снимается."
|
|
11794
|
+
},
|
|
11795
|
+
"explicit_confirmation": {
|
|
11796
|
+
"type": "boolean",
|
|
11797
|
+
"enum": [
|
|
11798
|
+
true
|
|
11799
|
+
],
|
|
11800
|
+
"description": "Обязательное подтверждение оператора: триггер сможет повторить необратимые действия во внешних системах. Проверяется и на сервере."
|
|
11801
|
+
}
|
|
11802
|
+
}
|
|
11803
|
+
}
|
|
11411
11804
|
}
|
|
11412
11805
|
],
|
|
11413
11806
|
"resources": [
|
|
@@ -11599,12 +11992,12 @@
|
|
|
11599
11992
|
}
|
|
11600
11993
|
],
|
|
11601
11994
|
"summary": {
|
|
11602
|
-
"total_tools":
|
|
11995
|
+
"total_tools": 213,
|
|
11603
11996
|
"tools_by_category": {
|
|
11604
11997
|
"getcourse_wave": 10,
|
|
11605
11998
|
"files_upload": 3,
|
|
11606
11999
|
"platform_provisioning": 3,
|
|
11607
|
-
"crm_provisioning":
|
|
12000
|
+
"crm_provisioning": 7,
|
|
11608
12001
|
"data_sources": 9,
|
|
11609
12002
|
"workspace_overview": 1,
|
|
11610
12003
|
"icp_management": 3,
|
|
@@ -11643,7 +12036,8 @@
|
|
|
11643
12036
|
"link_tracking": 6,
|
|
11644
12037
|
"dialogue_audit_external": 2,
|
|
11645
12038
|
"link_tracking_domain": 2,
|
|
11646
|
-
"broadcast_scheduler": 6
|
|
12039
|
+
"broadcast_scheduler": 6,
|
|
12040
|
+
"trigger_contact_claims": 2
|
|
11647
12041
|
},
|
|
11648
12042
|
"external_execution_pairs": [
|
|
11649
12043
|
"besales_icp_analysis_get_instructions / submit",
|
|
@@ -11861,6 +12255,13 @@
|
|
|
11861
12255
|
"besales_broadcast_schedule_delete",
|
|
11862
12256
|
"besales_broadcast_schedule_runs",
|
|
11863
12257
|
"besales_broadcast_segment_rule_set"
|
|
12258
|
+
],
|
|
12259
|
+
"newly_added_in_amocrm_channel_registration": [
|
|
12260
|
+
"besales_crm_amocrm_channel_registration"
|
|
12261
|
+
],
|
|
12262
|
+
"newly_added_in_trigger_contact_claims": [
|
|
12263
|
+
"besales_trigger_claim_list",
|
|
12264
|
+
"besales_trigger_claim_reset"
|
|
11864
12265
|
]
|
|
11865
12266
|
}
|
|
11866
12267
|
}
|