@besales/mcp 1.0.0-beta.2 → 1.0.0-beta.4

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.
Files changed (60) hide show
  1. package/README.md +12 -3
  2. package/dist/http/api-client.d.ts +2 -0
  3. package/dist/http/api-client.js +1 -0
  4. package/dist/http/api-client.js.map +1 -1
  5. package/dist/resources/concepts/triggers.md +35 -0
  6. package/dist/resources/docs/platforms.md +43 -0
  7. package/dist/schemas/mcp-tools.json +604 -40
  8. package/dist/tools/definitions/agent-design.d.ts +5 -5
  9. package/dist/tools/definitions/ai-costs.d.ts +1 -1
  10. package/dist/tools/definitions/broadcast-analytics.d.ts +1 -1
  11. package/dist/tools/definitions/crm-platform.d.ts +5 -2
  12. package/dist/tools/definitions/crm-platform.js +30 -0
  13. package/dist/tools/definitions/crm-platform.js.map +1 -1
  14. package/dist/tools/definitions/dialogue-export.d.ts +1 -1
  15. package/dist/tools/definitions/dialogue-reprocess.d.ts +5 -0
  16. package/dist/tools/definitions/dialogue-reprocess.js +107 -0
  17. package/dist/tools/definitions/dialogue-reprocess.js.map +1 -0
  18. package/dist/tools/definitions/follow-up.d.ts +1 -1
  19. package/dist/tools/definitions/funnel-analytics.d.ts +1 -1
  20. package/dist/tools/definitions/getcourse-cold-welcome.js +18 -7
  21. package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
  22. package/dist/tools/definitions/knowledge.d.ts +1 -1
  23. package/dist/tools/definitions/model-comparison.d.ts +1 -1
  24. package/dist/tools/definitions/platform-setup-wave.d.ts +1 -1
  25. package/dist/tools/definitions/platform-setup.d.ts +12 -1
  26. package/dist/tools/definitions/shared.d.ts +5 -0
  27. package/dist/tools/definitions/shared.js.map +1 -1
  28. package/dist/tools/definitions/task-state.d.ts +4 -4
  29. package/dist/tools/definitions/telegram-personal-management.d.ts +34 -0
  30. package/dist/tools/definitions/telegram-personal-management.js +139 -0
  31. package/dist/tools/definitions/telegram-personal-management.js.map +1 -0
  32. package/dist/tools/definitions/telegram-personal-restrictions.d.ts +19 -0
  33. package/dist/tools/definitions/telegram-personal-restrictions.js +109 -0
  34. package/dist/tools/definitions/telegram-personal-restrictions.js.map +1 -0
  35. package/dist/tools/definitions/telegram-pool-policy.d.ts +1 -1
  36. package/dist/tools/definitions/trigger-upsert.tool.d.ts +12 -0
  37. package/dist/tools/definitions/trigger-upsert.tool.js +38 -1
  38. package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -1
  39. package/dist/tools/definitions.d.ts +89 -25
  40. package/dist/tools/definitions.js +6 -0
  41. package/dist/tools/definitions.js.map +1 -1
  42. package/dist/tools/registry-mapping-primary.cases.js +12 -0
  43. package/dist/tools/registry-mapping-primary.cases.js.map +1 -1
  44. package/dist/tools/registry-mapping.cases.js +157 -0
  45. package/dist/tools/registry-mapping.cases.js.map +1 -1
  46. package/dist/tools/registry.js +3 -1
  47. package/dist/tools/registry.js.map +1 -1
  48. package/dist/types/api-contract.gen.d.ts +81138 -55369
  49. package/docs/dialogue-reprocess.md +37 -0
  50. package/docs/modules/besales-mcp.md +7 -0
  51. package/docs/telegram-personal-management.md +50 -0
  52. package/docs/telegram-personal-restrictions.md +87 -0
  53. package/package.json +1 -1
  54. package/scripts/getcourse-text-source.spec.mjs +110 -0
  55. package/scripts/shipped-sample.mjs +3 -0
  56. package/scripts/sync-trigger-argument-schema.mjs +10 -34
  57. package/scripts/sync-trigger-argument-schema.spec.mjs +91 -0
  58. package/scripts/sync-trigger-event-schema.mjs +20 -0
  59. package/scripts/sync-trigger-task-schema.mjs +45 -0
  60. package/scripts/telegram-personal-confirmation-mutants.mjs +74 -0
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "title": "besales-mcp Tool Definitions",
4
4
  "version": "1.2.0-draft",
5
- "lastUpdated": "2026-09-11",
5
+ "lastUpdated": "2026-11-09",
6
6
  "description": "MCP tool schemas для besales-mcp npm package. Активная v2-поверхность содержит ICP, Sandbox, Knowledge, prompt operations и stateless Platform Setup Bridge. 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.",
@@ -3872,7 +3872,7 @@
3872
3872
  },
3873
3873
  {
3874
3874
  "name": "besales_trigger_upsert",
3875
- "description": "Create trigger, patch trigger metadata, or replace its full action set (replace_actions=true) for an agent. Without replace_actions existing actions are not bulk-replaced; webhook, operator, silent AI, CRM, calendar, outbound and follow-up actions require explicit_confirmation. В ответе вместо самих шагов и условий приходит их количество (actionsCount / activationsCount): эхо повторяло отправленное целиком и уносило контекст на каждой правке, а правят их десятками подряд. Текущий состав читается через besales_platform_context_get. Включённое действие, сохраняющее почту, названную клиентом (шаг SAVE_CONTACT_INFO с полем email ровно {{slots.email}}), записывается только с allow_repeat_in_conversation=true, иначе 422: первая попытка заняла бы право до закрытия переписки, и исправленный адрес сохранить было бы нельзя. Действию, записывающему значение из переписки (поле CRM без шаблона — input_type ai_text или ai_dropdown; заметка с input_type=ai_text; переменная с value_source=MODEL; поле школы из ai_fields с вариантами options), повтор рекомендован, но не обязателен: частичное извлечение занимает право, и названное позже без allow_repeat_in_conversation=true не запишется. В getcourseCreateDealConfig для GETCOURSE_CREATE_DEAL можно передать reuse_open_invoice=true: переиспользуется только открытый счёт с продуктом из предложения шага; нового заказа нет. Срок давности счёта: по умолчанию не старше 14 суток; open_invoice_age=ANY_AGE — без срока, WITHIN_MAX_AGE — 14 суток. Отсутствующий ключ получает 14 суток, в том числе у перенесённых шагов; ключ умолчания при сохранении удаляется. Количество открытых счетов считается в пределах выбранного срока. ru/en/es/id/uz используют подпись поля и двух вариантов на языке пользователя. Упорядоченный список уникальных ответственных сотрудников своего подключения amoCRM. Пропуск ключа сохраняет прежний пул цепочки; [] или null снимают. При полной замене действий передай прочитанный пул явно. Ссылки — UUID из каталога операторов CRM, а не номера пользователей. Голосовые шаги: канон stepType=VOICE_INITIATE_OUTBOUND_CALL / VOICE_TRANSFER_CALL и config. Старые initiateOutboundCall/initiateOutboundCallConfig и transferCall/transferCallConfig принимаются как ввод. Конфликты и непустой чужой конфиг отклоняются до HTTP; снимается только служебное эхо верхнего уровня, вложенные поля сохраняются. Редактирование не выполняет звонок или перевод. При replace_actions=true явно сохраняй обе оси SILENT_MODE: config.silence_bot и config.silence_followups. Пропущенная ось получает true, а не прежнее значение. Для старого конверта — silenceBot/silenceFollowUps.",
3875
+ "description": "Create trigger, patch trigger metadata, or replace its full action set (replace_actions=true) for an agent. Without replace_actions existing actions are not bulk-replaced; webhook, operator, silent AI, CRM, calendar, outbound and follow-up actions require explicit_confirmation. В ответе вместо самих шагов и условий приходит их количество (actionsCount / activationsCount): эхо повторяло отправленное целиком и уносило контекст на каждой правке, а правят их десятками подряд. Текущий состав читается через besales_platform_context_get. Включённое действие, сохраняющее почту, названную клиентом (шаг SAVE_CONTACT_INFO с полем email ровно {{slots.email}}), записывается только с allow_repeat_in_conversation=true, иначе 422: первая попытка заняла бы право до закрытия переписки, и исправленный адрес сохранить было бы нельзя. Действию, записывающему значение из переписки (поле CRM без шаблона — input_type ai_text или ai_dropdown; заметка с input_type=ai_text; переменная с value_source=MODEL; поле школы из ai_fields с вариантами options), повтор рекомендован, но не обязателен: частичное извлечение занимает право, и названное позже без allow_repeat_in_conversation=true не запишется. В getcourseCreateDealConfig для GETCOURSE_CREATE_DEAL можно передать reuse_open_invoice=true: переиспользуется только открытый счёт с продуктом из предложения шага; нового заказа нет. Срок давности счёта: по умолчанию не старше 14 суток; open_invoice_age=ANY_AGE — без срока, WITHIN_MAX_AGE — 14 суток. Отсутствующий ключ получает 14 суток, в том числе у перенесённых шагов; ключ умолчания при сохранении удаляется. Количество открытых счетов считается в пределах выбранного срока. ru/en/es/id/uz используют подпись поля и двух вариантов на языке пользователя. Упорядоченный список уникальных ответственных сотрудников своего подключения amoCRM. Пропуск ключа сохраняет прежний пул цепочки; [] или null снимают. При полной замене действий передай прочитанный пул явно. Ссылки — UUID из каталога операторов CRM, а не номера пользователей. Голосовые шаги: канон stepType=VOICE_INITIATE_OUTBOUND_CALL / VOICE_TRANSFER_CALL и config. Старые initiateOutboundCall/initiateOutboundCallConfig и transferCall/transferCallConfig принимаются как ввод. Конфликты и непустой чужой конфиг отклоняются до HTTP; снимается только служебное эхо верхнего уровня, вложенные поля сохраняются. Редактирование не выполняет звонок или перевод. При replace_actions=true явно сохраняй обе оси SILENT_MODE: config.silence_bot и config.silence_followups. Пропущенная ось получает true, а не прежнее значение. Для старого конверта — silenceBot/silenceFollowUps. Для автоматического запуска по событию передай trigger вместо scope и строкового condition верхнего уровня. NEW_CONVERSATION — начало новой переписки; CONTACT_MESSAGE — сообщение клиента; OPERATOR_REPLY — ответ живого оператора; AGENT_REPLY — после ответа бота клиенту, пустой или молчаливый ход события не даёт. Шаги событийного триггера статичные: без arguments, {{args.*}} и полей «заполняет ИИ» — автозапуск не получает значений ИИ. Для шагов с оператором или отправкой требуется explicit_confirmation=true. Горизонт allow_repeat_in_conversation — ПЕРЕПИСКА. В trigger.condition можно использовать conversation.lastActionFailureCode, если сервер его знает.",
3876
3876
  "inputSchema": {
3877
3877
  "type": "object",
3878
3878
  "required": [
@@ -4089,38 +4089,127 @@
4089
4089
  "additionalProperties": true
4090
4090
  },
4091
4091
  "callOperatorConfig": {
4092
- "type": "object",
4093
- "properties": {
4094
- "taskText": {
4095
- "anyOf": [
4096
- {
4097
- "maxLength": 500,
4098
- "type": "string"
4092
+ "anyOf": [
4093
+ {
4094
+ "type": "object",
4095
+ "properties": {
4096
+ "taskText": {
4097
+ "anyOf": [
4098
+ {
4099
+ "maxLength": 500,
4100
+ "type": "string"
4101
+ },
4102
+ {
4103
+ "type": "null"
4104
+ }
4105
+ ],
4106
+ "description": "Свой текст задачи в CRM, до 500 знаков (кодовых точек Unicode); составной эмодзи может занимать несколько знаков (🇷🇺 — два). Передаётся буквально, без подстановки переменных. Пустой или пробельный текст включает штатный. Не передавай поле, чтобы сохранить прежний текст; null очищает его; строка заменяет."
4099
4107
  },
4100
- {
4101
- "type": "null"
4108
+ "taskDueHours": {
4109
+ "anyOf": [
4110
+ {
4111
+ "maximum": 720,
4112
+ "minimum": 1,
4113
+ "type": "integer"
4114
+ },
4115
+ {
4116
+ "type": "null"
4117
+ }
4118
+ ],
4119
+ "description": "Срок задачи в CRM: целое число от 1 до 720 часов от момента передачи оператору. При запасном пути и повторе срок не сдвигается. Не передавай поле, чтобы сохранить прежний срок; null очищает его; число заменяет. Без своего срока amoCRM — момент передачи, Bitrix24 — через 24 часа."
4102
4120
  }
4103
- ],
4104
- "description": "Свой текст задачи в CRM, до 500 знаков (кодовых точек Unicode); составной эмодзи может занимать несколько знаков (🇷🇺 — два). Передаётся буквально, без подстановки переменных. Пустой или пробельный текст включает штатный. Не передавай поле, чтобы сохранить прежний текст; null очищает его; строка заменяет."
4121
+ },
4122
+ "additionalProperties": {}
4105
4123
  },
4106
- "taskDueHours": {
4107
- "anyOf": [
4108
- {
4109
- "maximum": 720,
4110
- "minimum": 1,
4111
- "type": "integer"
4112
- },
4113
- {
4114
- "type": "null"
4115
- }
4116
- ],
4117
- "description": "Срок задачи в CRM: целое число от 1 до 720 часов от момента передачи оператору. При запасном пути и повторе срок не сдвигается. Не передавай поле, чтобы сохранить прежний срок; null очищает его; число заменяет. Без своего срока amoCRM — момент передачи, Bitrix24 — через 24 часа."
4124
+ {
4125
+ "type": "null"
4118
4126
  }
4119
- },
4120
- "additionalProperties": {}
4127
+ ]
4121
4128
  },
4122
4129
  "config": {
4123
- "type": "object",
4130
+ "anyOf": [
4131
+ {},
4132
+ {
4133
+ "type": "object",
4134
+ "properties": {
4135
+ "task_text": {},
4136
+ "task_due_hours": {},
4137
+ "assign_responsible_operator_ids": {
4138
+ "anyOf": [
4139
+ {},
4140
+ {
4141
+ "description": "Упорядоченный список уникальных ответственных сотрудников своего подключения amoCRM. Пропуск ключа сохраняет прежний пул цепочки; [] или null снимают. При полной замене действий передай прочитанный пул явно. Ссылки — UUID из каталога операторов CRM, а не номера пользователей.",
4142
+ "anyOf": [
4143
+ {
4144
+ "type": "array",
4145
+ "items": {
4146
+ "type": "string",
4147
+ "format": "uuid",
4148
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
4149
+ }
4150
+ },
4151
+ {
4152
+ "type": "null"
4153
+ }
4154
+ ],
4155
+ "uniqueItems": true
4156
+ }
4157
+ ]
4158
+ },
4159
+ "assignResponsibleOperatorIds": {
4160
+ "anyOf": [
4161
+ {},
4162
+ {
4163
+ "description": "Упорядоченный список уникальных ответственных сотрудников своего подключения amoCRM. Пропуск ключа сохраняет прежний пул цепочки; [] или null снимают. При полной замене действий передай прочитанный пул явно. Прежняя форма: положительные целые номера пользователей amoCRM; API преобразует их в ссылки каталога.",
4164
+ "anyOf": [
4165
+ {
4166
+ "type": "array",
4167
+ "items": {
4168
+ "type": "integer",
4169
+ "exclusiveMinimum": 0,
4170
+ "maximum": 9007199254740991
4171
+ }
4172
+ },
4173
+ {
4174
+ "type": "null"
4175
+ }
4176
+ ],
4177
+ "uniqueItems": true
4178
+ }
4179
+ ]
4180
+ },
4181
+ "extra": {
4182
+ "anyOf": [
4183
+ {},
4184
+ {
4185
+ "type": "object",
4186
+ "properties": {
4187
+ "assignResponsibleOperatorIds": {
4188
+ "description": "Упорядоченный список уникальных ответственных сотрудников своего подключения amoCRM. Пропуск ключа сохраняет прежний пул цепочки; [] или null снимают. При полной замене действий передай прочитанный пул явно. Прежняя форма: положительные целые номера пользователей amoCRM; API преобразует их в ссылки каталога.",
4189
+ "anyOf": [
4190
+ {
4191
+ "type": "array",
4192
+ "items": {
4193
+ "type": "integer",
4194
+ "exclusiveMinimum": 0,
4195
+ "maximum": 9007199254740991
4196
+ }
4197
+ },
4198
+ {
4199
+ "type": "null"
4200
+ }
4201
+ ],
4202
+ "uniqueItems": true
4203
+ }
4204
+ },
4205
+ "additionalProperties": false
4206
+ }
4207
+ ]
4208
+ }
4209
+ },
4210
+ "additionalProperties": {}
4211
+ }
4212
+ ],
4124
4213
  "properties": {
4125
4214
  "task_text": {
4126
4215
  "anyOf": [
@@ -4210,12 +4299,10 @@
4210
4299
  },
4211
4300
  "additionalProperties": false
4212
4301
  }
4213
- },
4214
- "additionalProperties": {}
4302
+ }
4215
4303
  },
4216
4304
  "type": {
4217
- "type": "string",
4218
- "description": "Совместимое имя типа действия."
4305
+ "type": "string"
4219
4306
  },
4220
4307
  "crmMoveStage": {
4221
4308
  "type": "object",
@@ -4891,6 +4978,58 @@
4891
4978
  "run_once_per_contact": {
4892
4979
  "description": "Прежняя однократность: true переводится в allow_repeat_in_conversation=false. После закрытия переписки право возвращается; повтор в CRM возможен. Не смешивайте с новым именем.",
4893
4980
  "type": "boolean"
4981
+ },
4982
+ "trigger": {
4983
+ "type": "object",
4984
+ "properties": {
4985
+ "event": {
4986
+ "type": "string",
4987
+ "enum": [
4988
+ "NEW_CONVERSATION",
4989
+ "CONTACT_MESSAGE",
4990
+ "OPERATOR_REPLY",
4991
+ "AGENT_REPLY"
4992
+ ]
4993
+ },
4994
+ "condition": {
4995
+ "type": "object",
4996
+ "properties": {
4997
+ "schema_version": {
4998
+ "type": "number",
4999
+ "const": 1
5000
+ },
5001
+ "combinator": {
5002
+ "type": "string",
5003
+ "enum": [
5004
+ "AND",
5005
+ "OR"
5006
+ ]
5007
+ },
5008
+ "rules": {
5009
+ "type": "array",
5010
+ "items": {
5011
+ "type": "object",
5012
+ "properties": {},
5013
+ "additionalProperties": {}
5014
+ }
5015
+ },
5016
+ "preset": {
5017
+ "type": "string"
5018
+ }
5019
+ },
5020
+ "required": [
5021
+ "schema_version",
5022
+ "combinator",
5023
+ "rules"
5024
+ ],
5025
+ "additionalProperties": false
5026
+ }
5027
+ },
5028
+ "required": [
5029
+ "event"
5030
+ ],
5031
+ "additionalProperties": false,
5032
+ "description": "Для автоматического запуска по событию передай trigger вместо scope и строкового condition верхнего уровня. NEW_CONVERSATION — начало новой переписки; CONTACT_MESSAGE — сообщение клиента; OPERATOR_REPLY — ответ живого оператора; AGENT_REPLY — после ответа бота клиенту, пустой или молчаливый ход события не даёт. Шаги событийного триггера статичные: без arguments, {{args.*}} и полей «заполняет ИИ» — автозапуск не получает значений ИИ. Для шагов с оператором или отправкой требуется explicit_confirmation=true. Горизонт allow_repeat_in_conversation — ПЕРЕПИСКА. В trigger.condition можно использовать conversation.lastActionFailureCode, если сервер его знает."
4894
5033
  }
4895
5034
  }
4896
5035
  }
@@ -8492,7 +8631,7 @@
8492
8631
  "continuation": {
8493
8632
  "type": "boolean",
8494
8633
  "const": true,
8495
- "description": "Явное продолжение по contacts; только literal true, отсутствие сохраняет обычный режим. Сначала preview с теми же текстом, сегментом, продуктом и каналами, затем подтверждённый start."
8634
+ "description": "Только по явной просьбе человека продолжить обращение по файлу contacts. Сначала preview с теми же текстом, сегментом, продуктом и каналами, затем подтверждённый start. Не выбирать автоматически по alreadyWelcomed."
8496
8635
  }
8497
8636
  }
8498
8637
  }
@@ -8642,12 +8781,12 @@
8642
8781
  "continuation": {
8643
8782
  "type": "boolean",
8644
8783
  "const": true,
8645
- "description": "Явное продолжение по contacts; только literal true, отсутствие сохраняет обычный режим. Сначала preview с теми же текстом, сегментом, продуктом и каналами, затем подтверждённый start."
8784
+ "description": "Только по явной просьбе человека продолжить обращение по файлу contacts. Сначала preview с теми же текстом, сегментом, продуктом и каналами, затем подтверждённый start. Не выбирать автоматически по alreadyWelcomed."
8646
8785
  },
8647
8786
  "idempotency_key": {
8648
8787
  "type": "string",
8649
8788
  "format": "uuid",
8650
- "description": "UUID намерения. Сохрани до отправки вместе с подтверждёнными параметрами; повтор того же запуска использует тот же ключ. Передаётся заголовком Idempotency-Key. Отсутствие сохраняет прежний вызов без ключа."
8789
+ "description": "UUID намерения: сохрани до отправки с подтверждёнными файлом и текстом. Повтор того же запуска — с тем же ключом; новый подтверждённый запуск — с новым. Передаётся заголовком Idempotency-Key."
8651
8790
  }
8652
8791
  }
8653
8792
  }
@@ -11003,6 +11142,45 @@
11003
11142
  }
11004
11143
  }
11005
11144
  },
11145
+ {
11146
+ "name": "besales_crm_bitrix24_deal_tab_get",
11147
+ "description": "Состояние CRM-регистрации вкладки AI Агенты в сделке Bitrix24: NOT_ATTEMPTED, BOUND или FAILED с безопасной reason и checkedAt. BOUND — последнее наблюдение placement.get, не проверка браузера. Scope: read:crm.",
11148
+ "inputSchema": {
11149
+ "type": "object",
11150
+ "required": [
11151
+ "crm_id"
11152
+ ],
11153
+ "additionalProperties": false,
11154
+ "properties": {
11155
+ "crm_id": {
11156
+ "type": "string",
11157
+ "format": "uuid"
11158
+ }
11159
+ }
11160
+ }
11161
+ },
11162
+ {
11163
+ "name": "besales_crm_bitrix24_deal_tab_register",
11164
+ "description": "Повторить регистрацию вкладки AI Агенты без переустановки приложения. Адрес берётся из окружения сервера, токен и домен — из сохранённого подключения. Нужны CRM_MANAGE и write:crm. HTTP 200 с FAILED не означает успех; 409 BITRIX24_DEAL_TAB_BUSY означает, что нужно повторить позже.",
11165
+ "inputSchema": {
11166
+ "type": "object",
11167
+ "required": [
11168
+ "crm_id",
11169
+ "acknowledge_external_side_effect"
11170
+ ],
11171
+ "additionalProperties": false,
11172
+ "properties": {
11173
+ "crm_id": {
11174
+ "type": "string",
11175
+ "format": "uuid"
11176
+ },
11177
+ "acknowledge_external_side_effect": {
11178
+ "type": "boolean",
11179
+ "const": true
11180
+ }
11181
+ }
11182
+ }
11183
+ },
11006
11184
  {
11007
11185
  "name": "besales_crm_pipeline_list",
11008
11186
  "description": "Список v2 CRM pipelines со статусами; перед чтением выполняется best-effort sync, include_deleted поддерживается. Scope: read:crm. Ответ: data + cursor. Непустой cursor означает, что показан НЕ весь перечень воронок; вызов без limit/cursor при неполной выдаче вернёт ошибку — недостающая воронка = молча суженный охват задачи.",
@@ -12856,7 +13034,7 @@
12856
13034
  "outreach": {
12857
13035
  "type": "string",
12858
13036
  "const": "true",
12859
- "description": "Только сохранённый факт начала холодного обращения, не подтверждение доставки; старая история может быть неполной. Дата outreachInitiatedAt — ISO либо null."
13037
+ "description": "Люди с сохранённым фактом начала холодного обращения; это допуск к отправке, а не подтверждение доставки. outreachInitiatedAt — ISO-момент либо null; старая история может быть неполной."
12860
13038
  }
12861
13039
  }
12862
13040
  }
@@ -13291,6 +13469,41 @@
13291
13469
  ]
13292
13470
  }
13293
13471
  },
13472
+ {
13473
+ "name": "besales_dialogue_reprocess_last_inbound",
13474
+ "description": "Заново ответить ботом на последнее сообщение клиента в одном или нескольких диалогах (1–50). Новой строки входящего в переписке нет; клиент получит настоящее сообщение. Применяй после сбоя, когда клиент ещё не видел ответа. Не применяй, если ответ уже доставлен, бот заглушён или ход идёт: сервер откажет. Нужно явное «да» человека и explicit_confirmation=true. Только администратор с управлением каналом; область run:conversation-reprocess входит в mcp:*. Запросы последовательные, 429 останавливает пакет. При неизвестном исходе сначала найди квитанцию/статус и проверь переписку, не повторяй отправку автоматически. ENQUEUED означает очередь, а не доставку.",
13475
+ "inputSchema": {
13476
+ "type": "object",
13477
+ "properties": {
13478
+ "workspace_id": {
13479
+ "type": "string",
13480
+ "format": "uuid",
13481
+ "description": "Рабочая область; без поля используется выбранное подключение."
13482
+ },
13483
+ "conversation_ids": {
13484
+ "type": "array",
13485
+ "minItems": 1,
13486
+ "maxItems": 50,
13487
+ "uniqueItems": true,
13488
+ "items": {
13489
+ "type": "string",
13490
+ "format": "uuid"
13491
+ },
13492
+ "description": "Идентификаторы диалогов без дублей, в порядке обработки."
13493
+ },
13494
+ "explicit_confirmation": {
13495
+ "type": "boolean",
13496
+ "const": true,
13497
+ "description": "Только после явного «да» человека: каждый клиент получит настоящее сообщение бота."
13498
+ }
13499
+ },
13500
+ "required": [
13501
+ "conversation_ids",
13502
+ "explicit_confirmation"
13503
+ ],
13504
+ "additionalProperties": false
13505
+ }
13506
+ },
13294
13507
  {
13295
13508
  "name": "besales_broadcast_analytics_get",
13296
13509
  "description": "Отчёты страницы аналитики рассылок: выбор отчёта полем report (16 значений). Scope: read:analytics. Персональные отчёты recipients, recipients+notSent (recipient_metric=notSent), deals, action_failures, indirect_payments, recent_leads, payment_candidates, registration_intake требуют дополнительно read:conversations: ответ несёт имена и идентификаторы людей, номера заказов или ссылки на карточки. Агрегатные отчёты summary, cohorts, skip_reasons, response_windows, insights, data_quality, segments_catalog, funnel_products, payment_candidates_summary доступны с read:analytics. Для report=response_windows в conversionCycles поле cut различает overall (серверный итог), product и segment; пустой ключ в разрезе не является итогом. Строку «Итого» берите только по cut=overall, медианы строк не складывайте. registration_intake — сверка регистраций: состояние, всего/вошли/не вошли, группы, исход приёма и приветствия, воронка, момент, номера заказов, ссылка на живой контакт. Один канал, ограниченный период, view=period; фильтр funnel допустим. Поздние записи могут появиться позже; недошедший заказ без решения при двух каналах одной воронки виден обоим. Отчёт registration_intake также возвращает персональные данные клиентов воркспейса: имя, контакт и номера заказов. У регистраций применяется только view=period; entry/cohort отвергаются. Валютный фильтр currency: ISO 4217 или UNKNOWN. Точные десятичные строки сохраняются без округления; moneyTotalsByCurrency показывает раздельные итоги по валютам, currencyAssumed отмечает предположение. Для segments_catalog, funnel_products, payment_candidates и payment_candidates_summary валютный фильтр недоступен. Список и сводка оплат поддерживают platform_id, funnel, остальные общие измерения и include_archived. Период оплат передаётся как periodMode: без mode/days всё время; mode=days без days — 30 дней. mode=range принимает открытый диапазон: только from, только to или обе границы; если заданы обе, to не раньше from. Параметры должны поддерживаться выбранным report; payment_candidates: page_size не больше 100. payment_view можно сочетать с payment_status/payment_eligibility: API отдаёт приоритет view.",
@@ -18151,6 +18364,357 @@
18151
18364
  }
18152
18365
  ]
18153
18366
  }
18367
+ },
18368
+ {
18369
+ "name": "besales_platform_telegram_personal_restriction_check",
18370
+ "description": "Проверить ограничения всех номеров канала (all:true) или выбранного списка (account_ids, 1–100). Требует manage:channels. Номер обращается только к системному боту @SpamBot; людям сообщения не отправляются, подтверждение не требуется. Ответ по каждому номеру: исход постановки и taskId принятой задачи. QUEUED означает очередь, не итог проверки. Используй стабильный idempotency_key. При неизвестном исходе сначала прочитай задачу или доступность номеров; новый ключ автоматически не создавай.",
18371
+ "inputSchema": {
18372
+ "type": "object",
18373
+ "additionalProperties": false,
18374
+ "required": [
18375
+ "channel_id",
18376
+ "idempotency_key"
18377
+ ],
18378
+ "properties": {
18379
+ "workspace_id": {
18380
+ "type": "string",
18381
+ "format": "uuid"
18382
+ },
18383
+ "channel_id": {
18384
+ "type": "string",
18385
+ "format": "uuid"
18386
+ },
18387
+ "account_ids": {
18388
+ "type": "array",
18389
+ "minItems": 1,
18390
+ "maxItems": 100,
18391
+ "uniqueItems": true,
18392
+ "items": {
18393
+ "type": "string",
18394
+ "format": "uuid",
18395
+ "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
18396
+ }
18397
+ },
18398
+ "all": {
18399
+ "type": "boolean",
18400
+ "const": true
18401
+ },
18402
+ "idempotency_key": {
18403
+ "type": "string",
18404
+ "minLength": 1,
18405
+ "maxLength": 200,
18406
+ "pattern": "^[!-~]+$"
18407
+ }
18408
+ },
18409
+ "oneOf": [
18410
+ {
18411
+ "required": [
18412
+ "account_ids"
18413
+ ],
18414
+ "not": {
18415
+ "required": [
18416
+ "all"
18417
+ ]
18418
+ }
18419
+ },
18420
+ {
18421
+ "required": [
18422
+ "all"
18423
+ ],
18424
+ "not": {
18425
+ "required": [
18426
+ "account_ids"
18427
+ ]
18428
+ }
18429
+ }
18430
+ ]
18431
+ }
18432
+ },
18433
+ {
18434
+ "name": "besales_platform_telegram_personal_restriction_appeal",
18435
+ "description": "Подать апелляцию об ограничениях от всех номеров канала (all:true) или выбранного списка (account_ids, 1–100). Требует manage:channels. text необязателен: по умолчанию система подбирает английский текст из набора разных апелляций со спинтаксом (18 шаблонов, 144 раскрытия), отдельно для каждого номера. Свой text — 1–500 знаков после удаления пробелов по краям. Выбор сохраняется для повтора с тем же ключом; ответ содержит appealTemplateId, без текста. Жалоба в @SpamBot подаётся вручную, не чаще раза в сутки на номер; необратима — перед вызовом покажи человеку номер и свой text, если он задан (без text система подберёт английский шаблон сама), и получи явное согласие (explicit_confirmation: true). Автоматическая подача сейчас выключена. Только после явного согласия человека передай explicit_confirmation:true: каждый выбранный номер отправит текст системному боту @SpamBot от своего имени; отменить отправку нельзя. Не чаще раза в UTC-сутки на номер. Ответ по каждому номеру: QUEUED/taskId, FAILED или SKIPPED с причиной (нет ограничений либо суточный предел). При неизвестном исходе сначала прочитай задачу или доступность номеров; новый ключ автоматически не создавай, сохраняй ключ и аргументы прежнего намерения.",
18436
+ "inputSchema": {
18437
+ "type": "object",
18438
+ "additionalProperties": false,
18439
+ "required": [
18440
+ "channel_id",
18441
+ "idempotency_key",
18442
+ "explicit_confirmation"
18443
+ ],
18444
+ "properties": {
18445
+ "workspace_id": {
18446
+ "type": "string",
18447
+ "format": "uuid"
18448
+ },
18449
+ "channel_id": {
18450
+ "type": "string",
18451
+ "format": "uuid"
18452
+ },
18453
+ "account_ids": {
18454
+ "type": "array",
18455
+ "minItems": 1,
18456
+ "maxItems": 100,
18457
+ "uniqueItems": true,
18458
+ "items": {
18459
+ "type": "string",
18460
+ "format": "uuid",
18461
+ "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"
18462
+ }
18463
+ },
18464
+ "all": {
18465
+ "type": "boolean",
18466
+ "const": true
18467
+ },
18468
+ "idempotency_key": {
18469
+ "type": "string",
18470
+ "minLength": 1,
18471
+ "maxLength": 200,
18472
+ "pattern": "^[!-~]+$"
18473
+ },
18474
+ "text": {
18475
+ "type": "string",
18476
+ "minLength": 1,
18477
+ "maxLength": 500,
18478
+ "pattern": "\\S",
18479
+ "description": "Необязательный текст: 1–500 знаков после удаления пробелов по краям. Без text система подбирает разные английские апелляции для каждого номера."
18480
+ },
18481
+ "explicit_confirmation": {
18482
+ "type": "boolean",
18483
+ "const": true,
18484
+ "description": "Явное согласие человека на необратимую отправку апелляции от номера."
18485
+ }
18486
+ },
18487
+ "oneOf": [
18488
+ {
18489
+ "required": [
18490
+ "account_ids"
18491
+ ],
18492
+ "not": {
18493
+ "required": [
18494
+ "all"
18495
+ ]
18496
+ }
18497
+ },
18498
+ {
18499
+ "required": [
18500
+ "all"
18501
+ ],
18502
+ "not": {
18503
+ "required": [
18504
+ "account_ids"
18505
+ ]
18506
+ }
18507
+ }
18508
+ ]
18509
+ }
18510
+ },
18511
+ {
18512
+ "name": "besales_platform_telegram_personal_operational_task_get",
18513
+ "description": "Прочитать состояние проверки ограничений или апелляции по task_id. Требует read:channels. Возвращает состояние задачи и restrictionStatus — текущий статус ограничений номера, прочитанный после задачи; это не исторический снимок её исхода. Успешное выполнение не означает отсутствие ограничений, более поздние действия могли изменить номер. null означает недоступный статус номера. Ничего не отправляет.",
18514
+ "inputSchema": {
18515
+ "type": "object",
18516
+ "additionalProperties": false,
18517
+ "required": [
18518
+ "channel_id",
18519
+ "task_id"
18520
+ ],
18521
+ "properties": {
18522
+ "workspace_id": {
18523
+ "type": "string",
18524
+ "format": "uuid"
18525
+ },
18526
+ "channel_id": {
18527
+ "type": "string",
18528
+ "format": "uuid"
18529
+ },
18530
+ "task_id": {
18531
+ "type": "string",
18532
+ "format": "uuid"
18533
+ }
18534
+ }
18535
+ }
18536
+ },
18537
+ {
18538
+ "name": "besales_platform_telegram_personal_accounts",
18539
+ "description": "Прочитать таблицу личных номеров Telegram канала. Требует read:channels. Фильтры search, status, page, limit; summary — сводка до отбора, pagination — листание, truncated — неполное чтение. campaign и состояние строки показывают участие и ступень лесенки; warmup.active/reason/label/until/optedOut — отдельная пометка прогрева, он не блокирует рассылку. restriction — ограничение, последняя проверка и жалоба; autoAppealNotBefore — только время из ответа, автоматическая подача сейчас выключена. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
18540
+ "inputSchema": {
18541
+ "type": "object",
18542
+ "additionalProperties": false,
18543
+ "required": [
18544
+ "channel_id"
18545
+ ],
18546
+ "properties": {
18547
+ "workspace_id": {
18548
+ "type": "string",
18549
+ "format": "uuid"
18550
+ },
18551
+ "channel_id": {
18552
+ "type": "string",
18553
+ "format": "uuid"
18554
+ },
18555
+ "search": {
18556
+ "type": "string",
18557
+ "maxLength": 200
18558
+ },
18559
+ "status": {
18560
+ "type": "string",
18561
+ "enum": [
18562
+ "BANNED",
18563
+ "CONNECTED",
18564
+ "CONNECTING",
18565
+ "DISCONNECTED",
18566
+ "ERROR",
18567
+ "NEEDS_CODE",
18568
+ "NEEDS_PASSWORD",
18569
+ "PENDING_VERIFICATION",
18570
+ "SESSION_UPLOADED"
18571
+ ]
18572
+ },
18573
+ "page": {
18574
+ "type": "integer",
18575
+ "minimum": 1
18576
+ },
18577
+ "limit": {
18578
+ "type": "integer",
18579
+ "minimum": 1,
18580
+ "maximum": 100
18581
+ }
18582
+ }
18583
+ }
18584
+ },
18585
+ {
18586
+ "name": "besales_platform_telegram_personal_warmup",
18587
+ "description": "Прочитать настройки и аналитику прогрева личных номеров Telegram. Требует read:channels. Сообщения прогрева идут только между своими номерами. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
18588
+ "inputSchema": {
18589
+ "type": "object",
18590
+ "additionalProperties": false,
18591
+ "required": [
18592
+ "channel_id"
18593
+ ],
18594
+ "properties": {
18595
+ "workspace_id": {
18596
+ "type": "string",
18597
+ "format": "uuid"
18598
+ },
18599
+ "channel_id": {
18600
+ "type": "string",
18601
+ "format": "uuid"
18602
+ }
18603
+ }
18604
+ }
18605
+ },
18606
+ {
18607
+ "name": "besales_platform_telegram_personal_warmup_update",
18608
+ "description": "Частично изменить настройки прогрева личных номеров Telegram. Требует manage:channels. Передавай только изменяемые поля; пропуск сохраняет прежнее значение. Подтверждение не требуется: сообщения прогрева идут только между своими номерами. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
18609
+ "inputSchema": {
18610
+ "type": "object",
18611
+ "additionalProperties": false,
18612
+ "required": [
18613
+ "channel_id"
18614
+ ],
18615
+ "properties": {
18616
+ "workspace_id": {
18617
+ "type": "string",
18618
+ "format": "uuid"
18619
+ },
18620
+ "channel_id": {
18621
+ "type": "string",
18622
+ "format": "uuid"
18623
+ },
18624
+ "enabled": {
18625
+ "type": "boolean"
18626
+ },
18627
+ "images_enabled": {
18628
+ "type": "boolean"
18629
+ },
18630
+ "messages_per_day": {
18631
+ "type": "integer"
18632
+ },
18633
+ "time_variation_minutes": {
18634
+ "type": "integer"
18635
+ },
18636
+ "response_delay_min_minutes": {
18637
+ "type": "integer"
18638
+ },
18639
+ "response_delay_max_minutes": {
18640
+ "type": "integer"
18641
+ },
18642
+ "image_chance_percent": {
18643
+ "type": "integer"
18644
+ },
18645
+ "posts_to_react": {
18646
+ "type": "integer"
18647
+ },
18648
+ "max_accounts_per_channel_reaction": {
18649
+ "type": "integer"
18650
+ },
18651
+ "pairing_hour_utc": {
18652
+ "type": "integer"
18653
+ },
18654
+ "hourly_interval_hours": {
18655
+ "type": "number"
18656
+ },
18657
+ "reaction_types": {
18658
+ "type": "array",
18659
+ "items": {
18660
+ "type": "string"
18661
+ },
18662
+ "maxItems": 100
18663
+ },
18664
+ "reaction_hours_utc": {
18665
+ "type": "array",
18666
+ "items": {
18667
+ "type": "integer"
18668
+ },
18669
+ "maxItems": 24
18670
+ }
18671
+ }
18672
+ }
18673
+ },
18674
+ {
18675
+ "name": "besales_platform_telegram_personal_account_warmup",
18676
+ "description": "Включить или выключить прогрев одного личного номера Telegram. Требует manage:channels. is_warming_up:false означает выход номера из автоматического прогрева до ручного включения; true снимает ручной отказ. Подтверждение не требуется: сообщения только между своими номерами. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
18677
+ "inputSchema": {
18678
+ "type": "object",
18679
+ "additionalProperties": false,
18680
+ "required": [
18681
+ "channel_id",
18682
+ "account_id",
18683
+ "is_warming_up"
18684
+ ],
18685
+ "properties": {
18686
+ "workspace_id": {
18687
+ "type": "string",
18688
+ "format": "uuid"
18689
+ },
18690
+ "channel_id": {
18691
+ "type": "string",
18692
+ "format": "uuid"
18693
+ },
18694
+ "account_id": {
18695
+ "type": "string",
18696
+ "format": "uuid"
18697
+ },
18698
+ "is_warming_up": {
18699
+ "type": "boolean"
18700
+ }
18701
+ }
18702
+ }
18703
+ },
18704
+ {
18705
+ "name": "besales_platform_telegram_personal_ramp",
18706
+ "description": "Прочитать, включена ли лесенка новых личных номеров Telegram в рабочей области. Требует read:channels. Возвращает только этот флаг. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
18707
+ "inputSchema": {
18708
+ "type": "object",
18709
+ "additionalProperties": false,
18710
+ "required": [],
18711
+ "properties": {
18712
+ "workspace_id": {
18713
+ "type": "string",
18714
+ "format": "uuid"
18715
+ }
18716
+ }
18717
+ }
18154
18718
  }
18155
18719
  ],
18156
18720
  "resources": [
@@ -18390,16 +18954,16 @@
18390
18954
  }
18391
18955
  ],
18392
18956
  "summary": {
18393
- "total_tools": 292,
18957
+ "total_tools": 303,
18394
18958
  "tools_by_category": {
18395
18959
  "workspace_and_help": 18,
18396
18960
  "agent_configuration": 15,
18397
18961
  "prompt_and_testing": 40,
18398
18962
  "icp": 11,
18399
18963
  "knowledge_and_content": 52,
18400
- "crm_and_data_sources": 30,
18401
- "channels_and_credentials": 16,
18402
- "dialogues_and_contacts": 33,
18964
+ "crm_and_data_sources": 32,
18965
+ "channels_and_credentials": 24,
18966
+ "dialogues_and_contacts": 34,
18403
18967
  "automation": 5,
18404
18968
  "outbound_and_analytics": 72
18405
18969
  },