@besales/mcp 0.39.0 → 0.41.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/README.md +55 -9
- package/dist/auth/oauth-client.d.ts +31 -1
- package/dist/auth/oauth-client.js +37 -2
- package/dist/auth/oauth-client.js.map +1 -1
- package/dist/cli.js +13 -1
- package/dist/cli.js.map +1 -1
- package/dist/instructions/server-instructions.d.ts +1 -1
- package/dist/instructions/server-instructions.js +4 -0
- package/dist/instructions/server-instructions.js.map +1 -1
- package/dist/schemas/mcp-tools.json +450 -56
- package/dist/skills/besales-dialogue-audit/SKILL.md +8 -0
- package/dist/tools/definitions/agent-design.d.ts +7 -7
- package/dist/tools/definitions/broadcast-analytics.d.ts +3 -3
- package/dist/tools/definitions/broadcast-analytics.js +1 -0
- package/dist/tools/definitions/broadcast-analytics.js.map +1 -1
- package/dist/tools/definitions/broadcast-mailing-variants.d.ts +2 -0
- package/dist/tools/definitions/broadcast-mailing-variants.js +5 -0
- package/dist/tools/definitions/broadcast-mailing-variants.js.map +1 -1
- package/dist/tools/definitions/dialogue-audit.d.ts +15 -0
- package/dist/tools/definitions/dialogue-audit.js +99 -0
- package/dist/tools/definitions/dialogue-audit.js.map +1 -1
- package/dist/tools/definitions/follow-up-funnel-test.d.ts +19 -0
- package/dist/tools/definitions/follow-up-funnel-test.js +141 -0
- package/dist/tools/definitions/follow-up-funnel-test.js.map +1 -0
- package/dist/tools/definitions/follow-up.d.ts +23 -2
- package/dist/tools/definitions/follow-up.js +75 -1
- package/dist/tools/definitions/follow-up.js.map +1 -1
- package/dist/tools/definitions/getcourse-cold-welcome.d.ts +4 -0
- package/dist/tools/definitions/getcourse-cold-welcome.js +17 -4
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/knowledge.d.ts +2 -2
- package/dist/tools/definitions/platform-setup.d.ts +5 -5
- package/dist/tools/definitions/shared.d.ts +10 -10
- package/dist/tools/definitions.d.ts +48 -18
- package/dist/tools/definitions.js +2 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/result.js +6 -1
- package/dist/tools/result.js.map +1 -1
- package/dist/types/api-contract.gen.d.ts +24684 -0
- package/dist/types/api-contract.gen.js +6 -0
- package/dist/types/api-contract.gen.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"title": "besales-mcp Tool Definitions",
|
|
4
|
-
"version": "1.
|
|
5
|
-
"lastUpdated": "2026-08-
|
|
4
|
+
"version": "1.3.0-draft",
|
|
5
|
+
"lastUpdated": "2026-08-18",
|
|
6
6
|
"description": "MCP tool schemas для besales-mcp npm package. Active v1.5 set содержит PromptHub/ICP/Sandbox/Knowledge external-execution operations и stateless Platform Setup Bridge direct tools. Setup Pipeline session tools сохранены как Phase 4+ future design, но не входят в active toolset.",
|
|
7
7
|
"executionModes": {
|
|
8
8
|
"summary": "Каждая active LLM-операция имеет 2 MCP tools: get_instructions + submit. Claude локально между tools выполняет LLM-вызовы своими моделями. Auto-detection через JWT scope mcp:* → external default.",
|
|
@@ -3623,6 +3623,48 @@
|
|
|
3623
3623
|
"messageConfig": {
|
|
3624
3624
|
"type": "object",
|
|
3625
3625
|
"description": "Текст/шаблон касания. Плейсхолдеры {name} календарного шага обязаны резолвиться, иначе шаг пропускается в рантайме."
|
|
3626
|
+
},
|
|
3627
|
+
"getcourse": {
|
|
3628
|
+
"type": "object",
|
|
3629
|
+
"description": "Каналы отправки ШАГА, только GetCourse. К шагу-вебхуку неприменимо.",
|
|
3630
|
+
"properties": {
|
|
3631
|
+
"delivery": {
|
|
3632
|
+
"type": "object",
|
|
3633
|
+
"required": [
|
|
3634
|
+
"mode"
|
|
3635
|
+
],
|
|
3636
|
+
"description": "Набор каналов шага. Поля нет — набор решает состояние контакта: ответил, значит ровно его канал; молчит, значит все его привязки. 'all' — привязки плюс канал ответа плюс Email/Сайт/Chatium; SMS в него НЕ входит (у отправки один текст на весь набор, SMS нужен свой короткий) и задаётся только через 'explicit' отдельным шагом. Пустое пересечение с разрешёнными каналами площадки — шаг пропускается, цепочка идёт дальше.",
|
|
3637
|
+
"properties": {
|
|
3638
|
+
"mode": {
|
|
3639
|
+
"type": "string",
|
|
3640
|
+
"enum": [
|
|
3641
|
+
"contact",
|
|
3642
|
+
"all",
|
|
3643
|
+
"explicit"
|
|
3644
|
+
]
|
|
3645
|
+
},
|
|
3646
|
+
"transports": {
|
|
3647
|
+
"type": "array",
|
|
3648
|
+
"description": "Только для mode='explicit'; в остальных режимах поле отвергается как ничего не меняющее.",
|
|
3649
|
+
"items": {
|
|
3650
|
+
"type": "string",
|
|
3651
|
+
"enum": [
|
|
3652
|
+
"Site",
|
|
3653
|
+
"Email",
|
|
3654
|
+
"SMS",
|
|
3655
|
+
"Telegram",
|
|
3656
|
+
"Facebook",
|
|
3657
|
+
"VK",
|
|
3658
|
+
"Chatium",
|
|
3659
|
+
"WhatsApp",
|
|
3660
|
+
"Viber",
|
|
3661
|
+
"MAX"
|
|
3662
|
+
]
|
|
3663
|
+
}
|
|
3664
|
+
}
|
|
3665
|
+
}
|
|
3666
|
+
}
|
|
3667
|
+
}
|
|
3626
3668
|
}
|
|
3627
3669
|
}
|
|
3628
3670
|
}
|
|
@@ -8213,30 +8255,6 @@
|
|
|
8213
8255
|
],
|
|
8214
8256
|
"description": "Один или несколько ID именованных вариантов рассылки."
|
|
8215
8257
|
},
|
|
8216
|
-
"mechanism": {
|
|
8217
|
-
"oneOf": [
|
|
8218
|
-
{
|
|
8219
|
-
"type": "string",
|
|
8220
|
-
"enum": [
|
|
8221
|
-
"wave",
|
|
8222
|
-
"cold_welcome"
|
|
8223
|
-
]
|
|
8224
|
-
},
|
|
8225
|
-
{
|
|
8226
|
-
"type": "array",
|
|
8227
|
-
"minItems": 1,
|
|
8228
|
-
"maxItems": 2,
|
|
8229
|
-
"items": {
|
|
8230
|
-
"type": "string",
|
|
8231
|
-
"enum": [
|
|
8232
|
-
"wave",
|
|
8233
|
-
"cold_welcome"
|
|
8234
|
-
]
|
|
8235
|
-
}
|
|
8236
|
-
}
|
|
8237
|
-
],
|
|
8238
|
-
"description": "Механизм запуска: wave — доставляет процесс школы (мы штампуем поля сделки), cold_welcome — пишем первыми сами. Оба значения = фильтра нет."
|
|
8239
|
-
},
|
|
8240
8258
|
"product": {
|
|
8241
8259
|
"oneOf": [
|
|
8242
8260
|
{
|
|
@@ -8452,6 +8470,30 @@
|
|
|
8452
8470
|
"include_archived": {
|
|
8453
8471
|
"type": "boolean",
|
|
8454
8472
|
"description": "Только для report=payment_candidates."
|
|
8473
|
+
},
|
|
8474
|
+
"mechanism": {
|
|
8475
|
+
"oneOf": [
|
|
8476
|
+
{
|
|
8477
|
+
"type": "string",
|
|
8478
|
+
"enum": [
|
|
8479
|
+
"wave",
|
|
8480
|
+
"cold_welcome"
|
|
8481
|
+
]
|
|
8482
|
+
},
|
|
8483
|
+
{
|
|
8484
|
+
"type": "array",
|
|
8485
|
+
"minItems": 1,
|
|
8486
|
+
"maxItems": 2,
|
|
8487
|
+
"items": {
|
|
8488
|
+
"type": "string",
|
|
8489
|
+
"enum": [
|
|
8490
|
+
"wave",
|
|
8491
|
+
"cold_welcome"
|
|
8492
|
+
]
|
|
8493
|
+
}
|
|
8494
|
+
}
|
|
8495
|
+
],
|
|
8496
|
+
"description": "Механизм запуска: wave — доставляет процесс школы (мы штампуем поля сделки), cold_welcome — пишем первыми сами. Оба значения = фильтра нет."
|
|
8455
8497
|
}
|
|
8456
8498
|
}
|
|
8457
8499
|
}
|
|
@@ -8553,30 +8595,6 @@
|
|
|
8553
8595
|
}
|
|
8554
8596
|
]
|
|
8555
8597
|
},
|
|
8556
|
-
"mechanism": {
|
|
8557
|
-
"oneOf": [
|
|
8558
|
-
{
|
|
8559
|
-
"type": "string",
|
|
8560
|
-
"enum": [
|
|
8561
|
-
"wave",
|
|
8562
|
-
"cold_welcome"
|
|
8563
|
-
]
|
|
8564
|
-
},
|
|
8565
|
-
{
|
|
8566
|
-
"type": "array",
|
|
8567
|
-
"minItems": 1,
|
|
8568
|
-
"maxItems": 2,
|
|
8569
|
-
"items": {
|
|
8570
|
-
"type": "string",
|
|
8571
|
-
"enum": [
|
|
8572
|
-
"wave",
|
|
8573
|
-
"cold_welcome"
|
|
8574
|
-
]
|
|
8575
|
-
}
|
|
8576
|
-
}
|
|
8577
|
-
],
|
|
8578
|
-
"description": "Механизм запуска: wave — доставляет процесс школы (мы штампуем поля сделки), cold_welcome — пишем первыми сами. Оба значения = фильтра нет."
|
|
8579
|
-
},
|
|
8580
8598
|
"product": {
|
|
8581
8599
|
"oneOf": [
|
|
8582
8600
|
{
|
|
@@ -8675,6 +8693,30 @@
|
|
|
8675
8693
|
"period"
|
|
8676
8694
|
],
|
|
8677
8695
|
"default": "period"
|
|
8696
|
+
},
|
|
8697
|
+
"mechanism": {
|
|
8698
|
+
"oneOf": [
|
|
8699
|
+
{
|
|
8700
|
+
"type": "string",
|
|
8701
|
+
"enum": [
|
|
8702
|
+
"wave",
|
|
8703
|
+
"cold_welcome"
|
|
8704
|
+
]
|
|
8705
|
+
},
|
|
8706
|
+
{
|
|
8707
|
+
"type": "array",
|
|
8708
|
+
"minItems": 1,
|
|
8709
|
+
"maxItems": 2,
|
|
8710
|
+
"items": {
|
|
8711
|
+
"type": "string",
|
|
8712
|
+
"enum": [
|
|
8713
|
+
"wave",
|
|
8714
|
+
"cold_welcome"
|
|
8715
|
+
]
|
|
8716
|
+
}
|
|
8717
|
+
}
|
|
8718
|
+
],
|
|
8719
|
+
"description": "Механизм запуска: wave — доставляет процесс школы (мы штампуем поля сделки), cold_welcome — пишем первыми сами. Оба значения = фильтра нет."
|
|
8678
8720
|
}
|
|
8679
8721
|
}
|
|
8680
8722
|
}
|
|
@@ -8808,6 +8850,114 @@
|
|
|
8808
8850
|
}
|
|
8809
8851
|
}
|
|
8810
8852
|
},
|
|
8853
|
+
{
|
|
8854
|
+
"name": "besales_followup_funnel_test_plan",
|
|
8855
|
+
"description": "Построить и ЗАМОРОЗИТЬ план «Теста воронки» для контакта, ничего не отправляя. Вызов платный: динамические шаги генерируются LLM. Возвращает compact-план и runId; показывай человеку все тексты, транспорты, блокировки, исключённые цепочки и truncated ДО запуска. Scope: mcp:funnel-test.",
|
|
8856
|
+
"inputSchema": {
|
|
8857
|
+
"type": "object",
|
|
8858
|
+
"required": [
|
|
8859
|
+
"chat_user_id"
|
|
8860
|
+
],
|
|
8861
|
+
"additionalProperties": false,
|
|
8862
|
+
"properties": {
|
|
8863
|
+
"workspace_id": {
|
|
8864
|
+
"type": "string",
|
|
8865
|
+
"format": "uuid",
|
|
8866
|
+
"description": "Optional override. Normally omit — defaults to the workspace bound to this session."
|
|
8867
|
+
},
|
|
8868
|
+
"chat_user_id": {
|
|
8869
|
+
"type": "string",
|
|
8870
|
+
"format": "uuid",
|
|
8871
|
+
"description": "Контакт, который получит сообщения только после отдельного start."
|
|
8872
|
+
},
|
|
8873
|
+
"funnel_id": {
|
|
8874
|
+
"type": "string",
|
|
8875
|
+
"format": "uuid",
|
|
8876
|
+
"description": "Персональная воронка; без неё планируются все цепочки платформы."
|
|
8877
|
+
}
|
|
8878
|
+
}
|
|
8879
|
+
}
|
|
8880
|
+
},
|
|
8881
|
+
{
|
|
8882
|
+
"name": "besales_followup_funnel_test_start",
|
|
8883
|
+
"description": "Запустить ТОЛЬКО замороженный runId из besales_followup_funnel_test_plan. ОТПРАВЛЯЕТ НАСТОЯЩИЕ сообщения живому человеку с паузой 15 секунд; отправку нельзя отозвать. Требует explicit_confirmation=true и непустой confirmation_reason после показа compact-плана. Scope: mcp:funnel-test.",
|
|
8884
|
+
"inputSchema": {
|
|
8885
|
+
"type": "object",
|
|
8886
|
+
"required": [
|
|
8887
|
+
"run_id",
|
|
8888
|
+
"explicit_confirmation",
|
|
8889
|
+
"confirmation_reason"
|
|
8890
|
+
],
|
|
8891
|
+
"additionalProperties": false,
|
|
8892
|
+
"properties": {
|
|
8893
|
+
"workspace_id": {
|
|
8894
|
+
"type": "string",
|
|
8895
|
+
"format": "uuid",
|
|
8896
|
+
"description": "Optional override. Normally omit — defaults to the workspace bound to this session."
|
|
8897
|
+
},
|
|
8898
|
+
"run_id": {
|
|
8899
|
+
"type": "string",
|
|
8900
|
+
"format": "uuid",
|
|
8901
|
+
"description": "runId, возвращённый plan tool; тексты не пересобираются."
|
|
8902
|
+
},
|
|
8903
|
+
"explicit_confirmation": {
|
|
8904
|
+
"type": "boolean",
|
|
8905
|
+
"const": true,
|
|
8906
|
+
"description": "Явное подтверждение отправки реальных сообщений живому человеку."
|
|
8907
|
+
},
|
|
8908
|
+
"confirmation_reason": {
|
|
8909
|
+
"type": "string",
|
|
8910
|
+
"minLength": 1,
|
|
8911
|
+
"maxLength": 500,
|
|
8912
|
+
"description": "Почему оператор подтвердил запуск после просмотра замороженного плана; MCP safety gate, в backend не отправляется."
|
|
8913
|
+
}
|
|
8914
|
+
}
|
|
8915
|
+
}
|
|
8916
|
+
},
|
|
8917
|
+
{
|
|
8918
|
+
"name": "besales_followup_funnel_test_status",
|
|
8919
|
+
"description": "Получить состояние замороженного теста воронки: PENDING/RUNNING/COMPLETED/CANCELLED/FAILED, число заклеймленных пунктов, исходы sent/unverified/failed/skipped и stalled. Claim берётся ДО транспорта, поэтому dispatchedCount не равен доказанной доставке. Scope: mcp:funnel-test.",
|
|
8920
|
+
"inputSchema": {
|
|
8921
|
+
"type": "object",
|
|
8922
|
+
"required": [
|
|
8923
|
+
"run_id"
|
|
8924
|
+
],
|
|
8925
|
+
"additionalProperties": false,
|
|
8926
|
+
"properties": {
|
|
8927
|
+
"workspace_id": {
|
|
8928
|
+
"type": "string",
|
|
8929
|
+
"format": "uuid",
|
|
8930
|
+
"description": "Optional override. Normally omit — defaults to the workspace bound to this session."
|
|
8931
|
+
},
|
|
8932
|
+
"run_id": {
|
|
8933
|
+
"type": "string",
|
|
8934
|
+
"format": "uuid"
|
|
8935
|
+
}
|
|
8936
|
+
}
|
|
8937
|
+
}
|
|
8938
|
+
},
|
|
8939
|
+
{
|
|
8940
|
+
"name": "besales_followup_funnel_test_cancel",
|
|
8941
|
+
"description": "Остановить тест воронки со СЛЕДУЮЩЕГО касания. Уже заклеймленный пункт может дойти до транспорта, поэтому после cancel проверь status; отмена PENDING-плана безопасна и ничего не отправляет. Scope: mcp:funnel-test.",
|
|
8942
|
+
"inputSchema": {
|
|
8943
|
+
"type": "object",
|
|
8944
|
+
"required": [
|
|
8945
|
+
"run_id"
|
|
8946
|
+
],
|
|
8947
|
+
"additionalProperties": false,
|
|
8948
|
+
"properties": {
|
|
8949
|
+
"workspace_id": {
|
|
8950
|
+
"type": "string",
|
|
8951
|
+
"format": "uuid",
|
|
8952
|
+
"description": "Optional override. Normally omit — defaults to the workspace bound to this session."
|
|
8953
|
+
},
|
|
8954
|
+
"run_id": {
|
|
8955
|
+
"type": "string",
|
|
8956
|
+
"format": "uuid"
|
|
8957
|
+
}
|
|
8958
|
+
}
|
|
8959
|
+
}
|
|
8960
|
+
},
|
|
8811
8961
|
{
|
|
8812
8962
|
"name": "besales_scheduled_task_list",
|
|
8813
8963
|
"description": "Read-only список плановых задач канала (модуль «Задачи»). Единственный тип — DIALOGUE_ANALYSIS (суфлёр: саммари дня + почасовой «Статус коммуникации»). Scope: mcp:platform-setup.",
|
|
@@ -9178,6 +9328,25 @@
|
|
|
9178
9328
|
],
|
|
9179
9329
|
"format": "uuid",
|
|
9180
9330
|
"description": "Платформа запуска по умолчанию; подставляется, если на запуске не передана."
|
|
9331
|
+
},
|
|
9332
|
+
"cold_welcome_channels": {
|
|
9333
|
+
"type": "array",
|
|
9334
|
+
"items": {
|
|
9335
|
+
"type": "string",
|
|
9336
|
+
"enum": [
|
|
9337
|
+
"Site",
|
|
9338
|
+
"Email",
|
|
9339
|
+
"SMS",
|
|
9340
|
+
"Telegram",
|
|
9341
|
+
"Facebook",
|
|
9342
|
+
"VK",
|
|
9343
|
+
"Chatium",
|
|
9344
|
+
"WhatsApp",
|
|
9345
|
+
"Viber",
|
|
9346
|
+
"MAX"
|
|
9347
|
+
]
|
|
9348
|
+
},
|
|
9349
|
+
"description": "Каналы «Первого сообщения»: ОГРАНИЧЕНИЕ поверх канона выбора транспорта — канон считается целиком, затем его результат фильтруется этим списком. Пусто = не ограничивать. НЕ путать с волновым default_channels."
|
|
9181
9350
|
}
|
|
9182
9351
|
}
|
|
9183
9352
|
}
|
|
@@ -9315,6 +9484,25 @@
|
|
|
9315
9484
|
],
|
|
9316
9485
|
"format": "uuid",
|
|
9317
9486
|
"description": "Платформа запуска по умолчанию; подставляется, если на запуске не передана."
|
|
9487
|
+
},
|
|
9488
|
+
"cold_welcome_channels": {
|
|
9489
|
+
"type": "array",
|
|
9490
|
+
"items": {
|
|
9491
|
+
"type": "string",
|
|
9492
|
+
"enum": [
|
|
9493
|
+
"Site",
|
|
9494
|
+
"Email",
|
|
9495
|
+
"SMS",
|
|
9496
|
+
"Telegram",
|
|
9497
|
+
"Facebook",
|
|
9498
|
+
"VK",
|
|
9499
|
+
"Chatium",
|
|
9500
|
+
"WhatsApp",
|
|
9501
|
+
"Viber",
|
|
9502
|
+
"MAX"
|
|
9503
|
+
]
|
|
9504
|
+
},
|
|
9505
|
+
"description": "Каналы «Первого сообщения»: ОГРАНИЧЕНИЕ поверх канона выбора транспорта — канон считается целиком, затем его результат фильтруется этим списком. Пусто = не ограничивать. НЕ путать с волновым default_channels."
|
|
9318
9506
|
}
|
|
9319
9507
|
},
|
|
9320
9508
|
"if": {
|
|
@@ -9410,6 +9598,30 @@
|
|
|
9410
9598
|
}
|
|
9411
9599
|
}
|
|
9412
9600
|
}
|
|
9601
|
+
},
|
|
9602
|
+
"channels": {
|
|
9603
|
+
"type": "array",
|
|
9604
|
+
"items": {
|
|
9605
|
+
"type": "string",
|
|
9606
|
+
"enum": [
|
|
9607
|
+
"Site",
|
|
9608
|
+
"Email",
|
|
9609
|
+
"SMS",
|
|
9610
|
+
"Telegram",
|
|
9611
|
+
"Facebook",
|
|
9612
|
+
"VK",
|
|
9613
|
+
"Chatium",
|
|
9614
|
+
"WhatsApp",
|
|
9615
|
+
"Viber",
|
|
9616
|
+
"MAX"
|
|
9617
|
+
]
|
|
9618
|
+
},
|
|
9619
|
+
"description": "Каналы «Первого сообщения» на этом запуске: ОГРАНИЧЕНИЕ поверх канона. Ключ не передан — берётся дефолт рассылки; ПУСТОЙ массив — «на этом запуске без ограничения»; список — он. null отвергается."
|
|
9620
|
+
},
|
|
9621
|
+
"mailing_variant_id": {
|
|
9622
|
+
"type": "string",
|
|
9623
|
+
"format": "uuid",
|
|
9624
|
+
"description": "Рассылка — источник каналов по умолчанию и «Платформы по умолчанию»."
|
|
9413
9625
|
}
|
|
9414
9626
|
}
|
|
9415
9627
|
}
|
|
@@ -9506,6 +9718,25 @@
|
|
|
9506
9718
|
]
|
|
9507
9719
|
},
|
|
9508
9720
|
"description": "Поля сделки, проставляемые ПОСЛЕ успешной отправки (ключ — числовой fieldId). Ключ не передан — берутся дефолты рассылки; передан ПУСТОЙ объект — явное «на этом запуске без полей»."
|
|
9721
|
+
},
|
|
9722
|
+
"channels": {
|
|
9723
|
+
"type": "array",
|
|
9724
|
+
"items": {
|
|
9725
|
+
"type": "string",
|
|
9726
|
+
"enum": [
|
|
9727
|
+
"Site",
|
|
9728
|
+
"Email",
|
|
9729
|
+
"SMS",
|
|
9730
|
+
"Telegram",
|
|
9731
|
+
"Facebook",
|
|
9732
|
+
"VK",
|
|
9733
|
+
"Chatium",
|
|
9734
|
+
"WhatsApp",
|
|
9735
|
+
"Viber",
|
|
9736
|
+
"MAX"
|
|
9737
|
+
]
|
|
9738
|
+
},
|
|
9739
|
+
"description": "Каналы «Первого сообщения» на этом запуске: ОГРАНИЧЕНИЕ поверх канона. Ключ не передан — берётся дефолт рассылки; ПУСТОЙ массив — «на этом запуске без ограничения»; список — он. null отвергается."
|
|
9509
9740
|
}
|
|
9510
9741
|
}
|
|
9511
9742
|
}
|
|
@@ -9599,6 +9830,25 @@
|
|
|
9599
9830
|
"type": "boolean",
|
|
9600
9831
|
"const": true,
|
|
9601
9832
|
"description": "Подтверждение пользователя. Обязательно: отправку нельзя отозвать."
|
|
9833
|
+
},
|
|
9834
|
+
"channels": {
|
|
9835
|
+
"type": "array",
|
|
9836
|
+
"items": {
|
|
9837
|
+
"type": "string",
|
|
9838
|
+
"enum": [
|
|
9839
|
+
"Site",
|
|
9840
|
+
"Email",
|
|
9841
|
+
"SMS",
|
|
9842
|
+
"Telegram",
|
|
9843
|
+
"Facebook",
|
|
9844
|
+
"VK",
|
|
9845
|
+
"Chatium",
|
|
9846
|
+
"WhatsApp",
|
|
9847
|
+
"Viber",
|
|
9848
|
+
"MAX"
|
|
9849
|
+
]
|
|
9850
|
+
},
|
|
9851
|
+
"description": "Каналы «Первого сообщения» на ВЕСЬ пакет: ограничение поверх канона. Ключ не передан — дефолт рассылки; ПУСТОЙ массив — без ограничения; список — он. Фиксируется снимком на старте пакета: правка рассылки между сегментами его не меняет."
|
|
9602
9852
|
}
|
|
9603
9853
|
}
|
|
9604
9854
|
}
|
|
@@ -9880,6 +10130,142 @@
|
|
|
9880
10130
|
}
|
|
9881
10131
|
}
|
|
9882
10132
|
},
|
|
10133
|
+
{
|
|
10134
|
+
"name": "besales_dialogue_audit_segments_get",
|
|
10135
|
+
"description": "Материал ревизора для разбора СВОЕЙ моделью: методика (хеш), реконструированный промпт агента и транскрипты отрезков с якорями msg=. Страница однородна — один агент и один снимок промпта. Ничего не пишет: водяной знак двигает импорт, поэтому две выдачи подряд вернут одну и ту же страницу. Scope: read:conversations + read:agents.",
|
|
10136
|
+
"inputSchema": {
|
|
10137
|
+
"type": "object",
|
|
10138
|
+
"required": [
|
|
10139
|
+
"platform_id"
|
|
10140
|
+
],
|
|
10141
|
+
"additionalProperties": false,
|
|
10142
|
+
"properties": {
|
|
10143
|
+
"platform_id": {
|
|
10144
|
+
"type": "string",
|
|
10145
|
+
"format": "uuid",
|
|
10146
|
+
"description": "Канал (платформа)."
|
|
10147
|
+
}
|
|
10148
|
+
}
|
|
10149
|
+
}
|
|
10150
|
+
},
|
|
10151
|
+
{
|
|
10152
|
+
"name": "besales_dialogue_audit_import",
|
|
10153
|
+
"description": "Импорт находок внешнего разбора. Перечисляй ВСЕ разобранные отрезки, включая чистые: тикет — единственное, что двигает их водяной знак. Сервер проверяет свою подпись, пересобирает подготовку и принимает находки через ту же границу якорей, что и внутренний путь. Scope: mcp:platform-setup + read:conversations.",
|
|
10154
|
+
"inputSchema": {
|
|
10155
|
+
"type": "object",
|
|
10156
|
+
"required": [
|
|
10157
|
+
"platform_id",
|
|
10158
|
+
"tickets",
|
|
10159
|
+
"findings"
|
|
10160
|
+
],
|
|
10161
|
+
"additionalProperties": false,
|
|
10162
|
+
"properties": {
|
|
10163
|
+
"platform_id": {
|
|
10164
|
+
"type": "string",
|
|
10165
|
+
"format": "uuid",
|
|
10166
|
+
"description": "Канал (платформа)."
|
|
10167
|
+
},
|
|
10168
|
+
"client_id": {
|
|
10169
|
+
"type": "string",
|
|
10170
|
+
"minLength": 2,
|
|
10171
|
+
"maxLength": 40,
|
|
10172
|
+
"description": "Кто разбирал: попадает в model прогона как external:<client_id>. По умолчанию claude-code."
|
|
10173
|
+
},
|
|
10174
|
+
"principles_hash": {
|
|
10175
|
+
"type": "string",
|
|
10176
|
+
"minLength": 1,
|
|
10177
|
+
"maxLength": 64,
|
|
10178
|
+
"description": "sha256 методики, по которой шёл разбор. Расхождение с хешем прогона = разбор по другой версии правил."
|
|
10179
|
+
},
|
|
10180
|
+
"tickets": {
|
|
10181
|
+
"type": "array",
|
|
10182
|
+
"minItems": 1,
|
|
10183
|
+
"maxItems": 25,
|
|
10184
|
+
"items": {
|
|
10185
|
+
"type": "string",
|
|
10186
|
+
"minLength": 1
|
|
10187
|
+
},
|
|
10188
|
+
"description": "Тикеты ВСЕХ разобранных отрезков, включая те, где находок нет."
|
|
10189
|
+
},
|
|
10190
|
+
"findings": {
|
|
10191
|
+
"type": "array",
|
|
10192
|
+
"maxItems": 500,
|
|
10193
|
+
"items": {
|
|
10194
|
+
"type": "object",
|
|
10195
|
+
"required": [
|
|
10196
|
+
"ticket",
|
|
10197
|
+
"category",
|
|
10198
|
+
"severity",
|
|
10199
|
+
"title",
|
|
10200
|
+
"description",
|
|
10201
|
+
"primary_message_id"
|
|
10202
|
+
],
|
|
10203
|
+
"additionalProperties": false,
|
|
10204
|
+
"properties": {
|
|
10205
|
+
"ticket": {
|
|
10206
|
+
"type": "string",
|
|
10207
|
+
"minLength": 1,
|
|
10208
|
+
"description": "Тикет отрезка из выдачи. Непрозрачная подписанная строка: назвать отрезок самому нельзя."
|
|
10209
|
+
},
|
|
10210
|
+
"category": {
|
|
10211
|
+
"type": "string",
|
|
10212
|
+
"enum": [
|
|
10213
|
+
"HALLUCINATION",
|
|
10214
|
+
"WRONG_ACTION",
|
|
10215
|
+
"WRONG_ROUTING",
|
|
10216
|
+
"BAD_TONE",
|
|
10217
|
+
"MISSED_CONTEXT",
|
|
10218
|
+
"RAG_MISS",
|
|
10219
|
+
"SCRIPT_DEVIATION",
|
|
10220
|
+
"PROMPT_VIOLATION",
|
|
10221
|
+
"CUSTOM_RULE_CONFLICT",
|
|
10222
|
+
"OTHER"
|
|
10223
|
+
],
|
|
10224
|
+
"description": "Категория находки."
|
|
10225
|
+
},
|
|
10226
|
+
"severity": {
|
|
10227
|
+
"type": "string",
|
|
10228
|
+
"enum": [
|
|
10229
|
+
"LOW",
|
|
10230
|
+
"MEDIUM",
|
|
10231
|
+
"CRITICAL"
|
|
10232
|
+
],
|
|
10233
|
+
"description": "Важность."
|
|
10234
|
+
},
|
|
10235
|
+
"title": {
|
|
10236
|
+
"type": "string",
|
|
10237
|
+
"minLength": 1,
|
|
10238
|
+
"maxLength": 300,
|
|
10239
|
+
"description": "Заголовок находки."
|
|
10240
|
+
},
|
|
10241
|
+
"description": {
|
|
10242
|
+
"type": "string",
|
|
10243
|
+
"minLength": 1,
|
|
10244
|
+
"maxLength": 4000,
|
|
10245
|
+
"description": "Что не так и почему."
|
|
10246
|
+
},
|
|
10247
|
+
"prompt_suggestion": {
|
|
10248
|
+
"type": "string",
|
|
10249
|
+
"maxLength": 4000,
|
|
10250
|
+
"description": "Что поменять в промпте — текст предложения, не патч."
|
|
10251
|
+
},
|
|
10252
|
+
"primary_message_id": {
|
|
10253
|
+
"type": "string",
|
|
10254
|
+
"minLength": 1,
|
|
10255
|
+
"description": "Якорь: значение msg= из транскрипта. Сервер проверяет принадлежность отрезку и новизну по курсору."
|
|
10256
|
+
},
|
|
10257
|
+
"quote": {
|
|
10258
|
+
"type": "string",
|
|
10259
|
+
"maxLength": 4000,
|
|
10260
|
+
"description": "Цитата реплики — доказательство."
|
|
10261
|
+
}
|
|
10262
|
+
}
|
|
10263
|
+
},
|
|
10264
|
+
"description": "Находки разбора; пустой массив — законный результат «претензий нет»."
|
|
10265
|
+
}
|
|
10266
|
+
}
|
|
10267
|
+
}
|
|
10268
|
+
},
|
|
9883
10269
|
{
|
|
9884
10270
|
"name": "besales_tracked_link_list",
|
|
9885
10271
|
"description": "Каталог коротких трекинговых ссылок workspace со сводкой «выдано → клики → ответы → заявки → оплаты». Поле placeholder — готовый токен {{link:slug}} для текстов дожимов, рассылок и шаблонов: вставляется ИМЕННО он, сырой URL мимо трекинга не считается. staticUrl — анонимный короткий адрес для мест без персональной выдачи (промпт агента, письмо школы). Ответ постраничный; hasMore=true означает, что каталог не дочитан. Scope: read:analytics. ⚠️ Токен берётся ТОЛЬКО копированием поля placeholder: собранный вручную токен с неточным слагом вырезается вместе с маркером, и клиент получает фразу без ссылки. В промпт агента токен не кладут — там staticUrl.",
|
|
@@ -9919,7 +10305,7 @@
|
|
|
9919
10305
|
},
|
|
9920
10306
|
{
|
|
9921
10307
|
"name": "besales_tracked_link_create",
|
|
9922
|
-
"description": "Завести трекинговую ссылку: имя, слаг и целевой http(s)-адрес. В ответе приходит placeholder {{link:slug}} — вставляй его в тексты вместо сырого URL, иначе переход не попадёт в аналитику. Слаг НЕИЗМЕНЯЕМ (он уходит в отправленные сообщения) и уникален в workspace; 409 значит, что слаг занят живой ИЛИ архивной ссылкой — архивную восстанавливают besales_tracked_link_update(restore=true), а не заводят новую. Scope: mcp:platform-setup. ⚠️ В тексты вставляется поле placeholder из ответа ДОСЛОВНО, а не собранный вручную токен: неточный слаг вырежется и клиент получит фразу без ссылки.",
|
|
10308
|
+
"description": "Завести трекинговую ссылку: имя, слаг и целевой http(s)-адрес. В ответе приходит placeholder {{link:slug}} — вставляй его в тексты вместо сырого URL, иначе переход не попадёт в аналитику. Слаг НЕИЗМЕНЯЕМ (он уходит в отправленные сообщения) и уникален в workspace; 409 значит, что слаг занят живой ИЛИ архивной ссылкой — архивную восстанавливают besales_tracked_link_update(restore=true), а не заводят новую. Scope: mcp:platform-setup. ⚠️ В тексты вставляется поле placeholder из ответа ДОСЛОВНО, а не собранный вручную токен: неточный слаг вырежется и клиент получит фразу без ссылки. ⭐ Целевой адрес может быть ШАБЛОНОМ с переменными контакта в значениях query-параметров (?email={email}¶m1={getcourseUserId}) — подставляются они при ОТПРАВКЕ через placeholder, поэтому персональные данные в текст сообщения не попадают, человек видит только короткий код. В анонимном staticUrl переменные вычищаются: за ним нет конкретного человека.",
|
|
9923
10309
|
"inputSchema": {
|
|
9924
10310
|
"type": "object",
|
|
9925
10311
|
"required": [
|
|
@@ -9948,7 +10334,7 @@
|
|
|
9948
10334
|
"target_url": {
|
|
9949
10335
|
"type": "string",
|
|
9950
10336
|
"maxLength": 2048,
|
|
9951
|
-
"description": "Абсолютный http(s)-адрес, куда ведёт ссылка. Только http/https.",
|
|
10337
|
+
"description": "Абсолютный http(s)-адрес, куда ведёт ссылка. Только http/https. В ЗНАЧЕНИЯ query-параметров можно подставлять переменные контакта: {firstName}, {lastName}, {fullName}, {username}, {email}, {phone}, {getcourseUserId}, {getcourseDealId} — например ?email={email}¶m1={getcourseUserId}&autologin=1. Переменная обязана составлять ЦЕЛОЕ значение параметра; в хосте, пути, фрагменте, имени параметра или вперемешку с текстом она отвергается 400-й. Пустое у контакта значение убирает параметр из адреса целиком.",
|
|
9952
10338
|
"pattern": "^https?://"
|
|
9953
10339
|
},
|
|
9954
10340
|
"product_code": {
|
|
@@ -9961,7 +10347,7 @@
|
|
|
9961
10347
|
},
|
|
9962
10348
|
{
|
|
9963
10349
|
"name": "besales_tracked_link_update",
|
|
9964
|
-
"description": "Изменить название, целевой адрес или код продукта ссылки либо снять её из архива (restore=true). Требуется хотя бы одно изменяемое поле. ⚠️ Правка target_url действует ТОЛЬКО ВПЕРЁД: персональные коды, уже ушедшие людям, остаются на СТАРОМ адресе (каждая выдача хранит снимок адреса на момент отправки, резолвер читает его), новые выдачи получат новый адрес, анонимный staticUrl переключится сразу. Перенаправить тех, кому ссылка уже отправлена, правкой НЕЛЬЗЯ — нужна новая ссылка в новом тексте. Поля ответа сюда не копируются: slug неизменяем, archivedAt не поле записи (архивация — besales_tracked_link_archive), счётчики и placeholder только читаются. Scope: mcp:platform-setup.",
|
|
10350
|
+
"description": "Изменить название, целевой адрес или код продукта ссылки либо снять её из архива (restore=true). Требуется хотя бы одно изменяемое поле. ⚠️ Правка target_url действует ТОЛЬКО ВПЕРЁД: персональные коды, уже ушедшие людям, остаются на СТАРОМ адресе (каждая выдача хранит снимок адреса на момент отправки, резолвер читает его), новые выдачи получат новый адрес, анонимный staticUrl переключится сразу. Перенаправить тех, кому ссылка уже отправлена, правкой НЕЛЬЗЯ — нужна новая ссылка в новом тексте. Поля ответа сюда не копируются: slug неизменяем, archivedAt не поле записи (архивация — besales_tracked_link_archive), счётчики и placeholder только читаются. Scope: mcp:platform-setup. ⭐ Целевой адрес поддерживает те же переменные контакта в значениях query-параметров, что и создание. Правка адреса действует только ВПЕРЁД: уже отправленные персональные коды остаются на прежней цели, staticUrl переключается сразу.",
|
|
9965
10351
|
"inputSchema": {
|
|
9966
10352
|
"type": "object",
|
|
9967
10353
|
"required": [
|
|
@@ -9987,7 +10373,7 @@
|
|
|
9987
10373
|
"target_url": {
|
|
9988
10374
|
"type": "string",
|
|
9989
10375
|
"maxLength": 2048,
|
|
9990
|
-
"description": "
|
|
10376
|
+
"description": "Абсолютный http(s)-адрес, куда ведёт ссылка. Только http/https. В ЗНАЧЕНИЯ query-параметров можно подставлять переменные контакта: {firstName}, {lastName}, {fullName}, {username}, {email}, {phone}, {getcourseUserId}, {getcourseDealId} — например ?email={email}¶m1={getcourseUserId}&autologin=1. Переменная обязана составлять ЦЕЛОЕ значение параметра; в хосте, пути, фрагменте, имени параметра или вперемешку с текстом она отвергается 400-й. Пустое у контакта значение убирает параметр из адреса целиком.",
|
|
9991
10377
|
"pattern": "^https?://"
|
|
9992
10378
|
},
|
|
9993
10379
|
"product_code": {
|
|
@@ -10288,7 +10674,7 @@
|
|
|
10288
10674
|
}
|
|
10289
10675
|
],
|
|
10290
10676
|
"summary": {
|
|
10291
|
-
"total_tools":
|
|
10677
|
+
"total_tools": 197,
|
|
10292
10678
|
"tools_by_category": {
|
|
10293
10679
|
"getcourse_wave": 10,
|
|
10294
10680
|
"files_upload": 3,
|
|
@@ -10327,8 +10713,10 @@
|
|
|
10327
10713
|
"broadcast_analytics": 2,
|
|
10328
10714
|
"scheduled_tasks": 2,
|
|
10329
10715
|
"follow_up_read": 3,
|
|
10716
|
+
"follow_up_funnel_test": 4,
|
|
10330
10717
|
"dialogue_audit": 6,
|
|
10331
|
-
"link_tracking": 6
|
|
10718
|
+
"link_tracking": 6,
|
|
10719
|
+
"dialogue_audit_external": 2
|
|
10332
10720
|
},
|
|
10333
10721
|
"external_execution_pairs": [
|
|
10334
10722
|
"besales_icp_analysis_get_instructions / submit",
|
|
@@ -10521,6 +10909,12 @@
|
|
|
10521
10909
|
"newly_added_in_followup_reactions": [
|
|
10522
10910
|
"besales_followup_reactions"
|
|
10523
10911
|
],
|
|
10912
|
+
"newly_added_in_followup_funnel_test": [
|
|
10913
|
+
"besales_followup_funnel_test_plan",
|
|
10914
|
+
"besales_followup_funnel_test_start",
|
|
10915
|
+
"besales_followup_funnel_test_status",
|
|
10916
|
+
"besales_followup_funnel_test_cancel"
|
|
10917
|
+
],
|
|
10524
10918
|
"newly_added_in_link_tracking": [
|
|
10525
10919
|
"besales_tracked_link_list",
|
|
10526
10920
|
"besales_tracked_link_create",
|
|
@@ -14,6 +14,14 @@ description: Read-only аудит production-переписок BeSales чере
|
|
|
14
14
|
> чтобы починить промпт) — это другие инструменты: `besales_dialogue_audit_runs_list` →
|
|
15
15
|
> `besales_dialogue_audit_findings`. Путать их нельзя: материал и выводы разные.
|
|
16
16
|
|
|
17
|
+
> ⭐ Если задача — «разобрать работу агента и починить промпт», а не «найти ложные заявки»,
|
|
18
|
+
> у ревизора с 17.08.2026 есть ВНЕШНИЙ режим, и материал в нём строго богаче сырой выгрузки:
|
|
19
|
+
> `besales_dialogue_audit_segments_get` отдаёт реконструированный промпт агента, механический линт
|
|
20
|
+
> и транскрипт с ПОЛНЫМИ результатами обращений в 1С/CRM (публичная выгрузка отдаёт только
|
|
21
|
+
> `{dealId, dealNumber, skipped}`), с якорями `msg=` и с пометками «НЕ судить» на репликах чужих
|
|
22
|
+
> агентов. Разбираешь своей моделью, возвращаешь через `besales_dialogue_audit_import` — находки
|
|
23
|
+
> ложатся в отчёт ревизора с водяными знаками и дедупом. Цикл замкнутый: выдача → разбор → импорт.
|
|
24
|
+
|
|
17
25
|
1. Прочитай MCP resource `besales://workflows/audit-dialogues` и следуй ему как source of truth.
|
|
18
26
|
2. Если период не задан, возьми последние 7 суток и явно зафиксируй допущение.
|
|
19
27
|
3. Для точного аудита новых заявок фильтруй `GETCOURSE_CREATE_DEAL` через
|