@besales/mcp 1.0.0-beta.2 → 1.0.0-beta.5
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 +14 -3
- package/dist/http/api-client.d.ts +10 -0
- package/dist/http/api-client.js +2 -1
- package/dist/http/api-client.js.map +1 -1
- package/dist/resources/concepts/triggers.md +35 -0
- package/dist/resources/docs/platforms.md +58 -0
- package/dist/schemas/mcp-tools.json +892 -40
- package/dist/tools/definitions/agent-design.d.ts +5 -5
- package/dist/tools/definitions/ai-costs.d.ts +1 -1
- package/dist/tools/definitions/api-tool-request.d.ts +4 -2
- package/dist/tools/definitions/broadcast-analytics.d.ts +1 -1
- package/dist/tools/definitions/crm-platform.d.ts +5 -2
- package/dist/tools/definitions/crm-platform.js +30 -0
- package/dist/tools/definitions/crm-platform.js.map +1 -1
- package/dist/tools/definitions/dialogue-export.d.ts +1 -1
- package/dist/tools/definitions/dialogue-nudge.d.ts +7 -0
- package/dist/tools/definitions/dialogue-nudge.js +139 -0
- package/dist/tools/definitions/dialogue-nudge.js.map +1 -0
- package/dist/tools/definitions/dialogue-reprocess.d.ts +5 -0
- package/dist/tools/definitions/dialogue-reprocess.js +107 -0
- package/dist/tools/definitions/dialogue-reprocess.js.map +1 -0
- package/dist/tools/definitions/follow-up.d.ts +1 -1
- package/dist/tools/definitions/funnel-analytics.d.ts +1 -1
- package/dist/tools/definitions/getcourse-cold-welcome.js +18 -7
- package/dist/tools/definitions/getcourse-cold-welcome.js.map +1 -1
- package/dist/tools/definitions/knowledge.d.ts +1 -1
- package/dist/tools/definitions/model-comparison.d.ts +1 -1
- package/dist/tools/definitions/platform-setup-wave.d.ts +1 -1
- package/dist/tools/definitions/platform-setup.d.ts +12 -1
- package/dist/tools/definitions/shared.d.ts +5 -0
- package/dist/tools/definitions/shared.js.map +1 -1
- package/dist/tools/definitions/task-state.d.ts +4 -4
- package/dist/tools/definitions/telegram-personal-management.d.ts +34 -0
- package/dist/tools/definitions/telegram-personal-management.js +139 -0
- package/dist/tools/definitions/telegram-personal-management.js.map +1 -0
- package/dist/tools/definitions/telegram-personal-profile.d.ts +24 -0
- package/dist/tools/definitions/telegram-personal-profile.js +154 -0
- package/dist/tools/definitions/telegram-personal-profile.js.map +1 -0
- package/dist/tools/definitions/telegram-personal-restrictions.d.ts +19 -0
- package/dist/tools/definitions/telegram-personal-restrictions.js +109 -0
- package/dist/tools/definitions/telegram-personal-restrictions.js.map +1 -0
- package/dist/tools/definitions/telegram-pool-policy.d.ts +1 -1
- package/dist/tools/definitions/trigger-upsert.tool.d.ts +12 -0
- package/dist/tools/definitions/trigger-upsert.tool.js +38 -1
- package/dist/tools/definitions/trigger-upsert.tool.js.map +1 -1
- package/dist/tools/definitions.d.ts +117 -25
- package/dist/tools/definitions.js +10 -0
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/follow-up-request.js +3 -0
- package/dist/tools/follow-up-request.js.map +1 -1
- package/dist/tools/registry-mapping-primary.cases.js +12 -0
- package/dist/tools/registry-mapping-primary.cases.js.map +1 -1
- package/dist/tools/registry-mapping.cases.js +230 -0
- package/dist/tools/registry-mapping.cases.js.map +1 -1
- package/dist/tools/registry-test-fixtures.js +5 -1
- package/dist/tools/registry-test-fixtures.js.map +1 -1
- package/dist/tools/registry.js +3 -1
- package/dist/tools/registry.js.map +1 -1
- package/dist/types/api-contract.gen.d.ts +81138 -55369
- package/docs/dialogue-nudge.md +50 -0
- package/docs/dialogue-reprocess.md +37 -0
- package/docs/modules/besales-mcp.md +7 -0
- package/docs/telegram-personal-management.md +100 -0
- package/docs/telegram-personal-restrictions.md +87 -0
- package/package.json +1 -1
- package/scripts/getcourse-text-source.spec.mjs +110 -0
- package/scripts/shipped-sample.mjs +3 -0
- package/scripts/sync-trigger-argument-schema.mjs +10 -34
- package/scripts/sync-trigger-argument-schema.spec.mjs +91 -0
- package/scripts/sync-trigger-event-schema.mjs +20 -0
- package/scripts/sync-trigger-task-schema.mjs +45 -0
- package/scripts/telegram-personal-confirmation-mutants.mjs +74 -0
- package/scripts/telegram-personal-profile-mutants.mjs +96 -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
|
|
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
|
-
"
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
"
|
|
4096
|
-
{
|
|
4097
|
-
"
|
|
4098
|
-
|
|
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
|
-
"
|
|
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
|
-
"
|
|
4121
|
+
},
|
|
4122
|
+
"additionalProperties": {}
|
|
4105
4123
|
},
|
|
4106
|
-
|
|
4107
|
-
"
|
|
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
|
-
"
|
|
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": "
|
|
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": "
|
|
8784
|
+
"description": "Только по явной просьбе человека продолжить обращение по файлу contacts. Сначала preview с теми же текстом, сегментом, продуктом и каналами, затем подтверждённый start. Не выбирать автоматически по alreadyWelcomed."
|
|
8646
8785
|
},
|
|
8647
8786
|
"idempotency_key": {
|
|
8648
8787
|
"type": "string",
|
|
8649
8788
|
"format": "uuid",
|
|
8650
|
-
"description": "UUID
|
|
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": "
|
|
13037
|
+
"description": "Люди с сохранённым фактом начала холодного обращения; это допуск к отправке, а не подтверждение доставки. outreachInitiatedAt — ISO-момент либо null; старая история может быть неполной."
|
|
12860
13038
|
}
|
|
12861
13039
|
}
|
|
12862
13040
|
}
|
|
@@ -13291,6 +13469,84 @@
|
|
|
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
|
+
},
|
|
13507
|
+
{
|
|
13508
|
+
"name": "besales_dialogue_nudge_agent",
|
|
13509
|
+
"description": "Подтолкнуть агента, если клиент без ответа из-за сбоя или ошибки бота, а переобработка последнего входящего не подходит. Полный ход по ВСЕЙ истории диалога; клиент получит настоящее сообщение, операция платная. Отказывает (REFUSED, при тишине обычно BOT_SILENCED) при тишине, поставленной человеком/оператором (ручная остановка, стоп-слово), отписке, блокировке, бане, вне срока переписки канала, при выключенном канале/ИИ и пока ход уже идёт. Служебную тишину (ожидание оператора «до /start», стадия CRM, фильтр сделки, тишина агента) СНИМАЕТ, возвращая reactivated: true. Перед подтверждением предупреди человека: клиент получит настоящее сообщение бота даже при служебном ожидании оператора. Покажи reactivated в итоге. Не обходи отказ сервера. Только после явного «да» человека: explicit_confirmation=true. От 1 до 30 диалогов без дублей, запросы последовательные, 429 останавливает пакет. Область run:conversation-nudge. attempt_key (до 64 символов, по умолчанию пусто) даёт стабильный ключ на диалог: тот же вход не отправит второй ответ. Новый ключ допустим для нового подтверждённого запуска позже. При 503, таймауте или неизвестном исходе не повторяй и не меняй ключ: проверь besales_dialogue_transcript. Отчёт отдельно: запущено / отказано (код+причина) / исход неизвестен / не обработано; доставка указана отдельно.",
|
|
13510
|
+
"inputSchema": {
|
|
13511
|
+
"type": "object",
|
|
13512
|
+
"properties": {
|
|
13513
|
+
"workspace_id": {
|
|
13514
|
+
"type": "string",
|
|
13515
|
+
"format": "uuid",
|
|
13516
|
+
"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)$",
|
|
13517
|
+
"description": "Рабочая область; без поля используется выбранное подключение."
|
|
13518
|
+
},
|
|
13519
|
+
"conversation_ids": {
|
|
13520
|
+
"minItems": 1,
|
|
13521
|
+
"maxItems": 30,
|
|
13522
|
+
"type": "array",
|
|
13523
|
+
"items": {
|
|
13524
|
+
"type": "string",
|
|
13525
|
+
"format": "uuid",
|
|
13526
|
+
"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)$"
|
|
13527
|
+
},
|
|
13528
|
+
"uniqueItems": true,
|
|
13529
|
+
"description": "Идентификаторы диалогов без дублей, в порядке обработки (1–30)."
|
|
13530
|
+
},
|
|
13531
|
+
"explicit_confirmation": {
|
|
13532
|
+
"type": "boolean",
|
|
13533
|
+
"const": true,
|
|
13534
|
+
"description": "Только после явного «да» человека. Перед подтверждением предупреди: клиент получит настоящее сообщение бота даже при служебном ожидании оператора; служебная тишина снимается (reactivated: true)."
|
|
13535
|
+
},
|
|
13536
|
+
"attempt_key": {
|
|
13537
|
+
"default": "",
|
|
13538
|
+
"description": "Ключ осознанной попытки, до 64 символов; по умолчанию пусто. Тот же ключ для диалога возвращает прежний результат. Новый ключ — только для нового подтверждённого запуска позже, не для повтора неизвестного исхода.",
|
|
13539
|
+
"type": "string",
|
|
13540
|
+
"maxLength": 64
|
|
13541
|
+
}
|
|
13542
|
+
},
|
|
13543
|
+
"required": [
|
|
13544
|
+
"conversation_ids",
|
|
13545
|
+
"explicit_confirmation"
|
|
13546
|
+
],
|
|
13547
|
+
"additionalProperties": false
|
|
13548
|
+
}
|
|
13549
|
+
},
|
|
13294
13550
|
{
|
|
13295
13551
|
"name": "besales_broadcast_analytics_get",
|
|
13296
13552
|
"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 +18407,602 @@
|
|
|
18151
18407
|
}
|
|
18152
18408
|
]
|
|
18153
18409
|
}
|
|
18410
|
+
},
|
|
18411
|
+
{
|
|
18412
|
+
"name": "besales_platform_telegram_personal_restriction_check",
|
|
18413
|
+
"description": "Проверить ограничения всех номеров канала (all:true) или выбранного списка (account_ids, 1–100). Требует manage:channels. Номер обращается только к системному боту @SpamBot; людям сообщения не отправляются, подтверждение не требуется. Ответ по каждому номеру: исход постановки и taskId принятой задачи. QUEUED означает очередь, не итог проверки. Используй стабильный idempotency_key. При неизвестном исходе сначала прочитай задачу или доступность номеров; новый ключ автоматически не создавай.",
|
|
18414
|
+
"inputSchema": {
|
|
18415
|
+
"type": "object",
|
|
18416
|
+
"additionalProperties": false,
|
|
18417
|
+
"required": [
|
|
18418
|
+
"channel_id",
|
|
18419
|
+
"idempotency_key"
|
|
18420
|
+
],
|
|
18421
|
+
"properties": {
|
|
18422
|
+
"workspace_id": {
|
|
18423
|
+
"type": "string",
|
|
18424
|
+
"format": "uuid"
|
|
18425
|
+
},
|
|
18426
|
+
"channel_id": {
|
|
18427
|
+
"type": "string",
|
|
18428
|
+
"format": "uuid"
|
|
18429
|
+
},
|
|
18430
|
+
"account_ids": {
|
|
18431
|
+
"type": "array",
|
|
18432
|
+
"minItems": 1,
|
|
18433
|
+
"maxItems": 100,
|
|
18434
|
+
"uniqueItems": true,
|
|
18435
|
+
"items": {
|
|
18436
|
+
"type": "string",
|
|
18437
|
+
"format": "uuid",
|
|
18438
|
+
"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}$"
|
|
18439
|
+
}
|
|
18440
|
+
},
|
|
18441
|
+
"all": {
|
|
18442
|
+
"type": "boolean",
|
|
18443
|
+
"const": true
|
|
18444
|
+
},
|
|
18445
|
+
"idempotency_key": {
|
|
18446
|
+
"type": "string",
|
|
18447
|
+
"minLength": 1,
|
|
18448
|
+
"maxLength": 200,
|
|
18449
|
+
"pattern": "^[!-~]+$"
|
|
18450
|
+
}
|
|
18451
|
+
},
|
|
18452
|
+
"oneOf": [
|
|
18453
|
+
{
|
|
18454
|
+
"required": [
|
|
18455
|
+
"account_ids"
|
|
18456
|
+
],
|
|
18457
|
+
"not": {
|
|
18458
|
+
"required": [
|
|
18459
|
+
"all"
|
|
18460
|
+
]
|
|
18461
|
+
}
|
|
18462
|
+
},
|
|
18463
|
+
{
|
|
18464
|
+
"required": [
|
|
18465
|
+
"all"
|
|
18466
|
+
],
|
|
18467
|
+
"not": {
|
|
18468
|
+
"required": [
|
|
18469
|
+
"account_ids"
|
|
18470
|
+
]
|
|
18471
|
+
}
|
|
18472
|
+
}
|
|
18473
|
+
]
|
|
18474
|
+
}
|
|
18475
|
+
},
|
|
18476
|
+
{
|
|
18477
|
+
"name": "besales_platform_telegram_personal_restriction_appeal",
|
|
18478
|
+
"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 с причиной (нет ограничений либо суточный предел). При неизвестном исходе сначала прочитай задачу или доступность номеров; новый ключ автоматически не создавай, сохраняй ключ и аргументы прежнего намерения.",
|
|
18479
|
+
"inputSchema": {
|
|
18480
|
+
"type": "object",
|
|
18481
|
+
"additionalProperties": false,
|
|
18482
|
+
"required": [
|
|
18483
|
+
"channel_id",
|
|
18484
|
+
"idempotency_key",
|
|
18485
|
+
"explicit_confirmation"
|
|
18486
|
+
],
|
|
18487
|
+
"properties": {
|
|
18488
|
+
"workspace_id": {
|
|
18489
|
+
"type": "string",
|
|
18490
|
+
"format": "uuid"
|
|
18491
|
+
},
|
|
18492
|
+
"channel_id": {
|
|
18493
|
+
"type": "string",
|
|
18494
|
+
"format": "uuid"
|
|
18495
|
+
},
|
|
18496
|
+
"account_ids": {
|
|
18497
|
+
"type": "array",
|
|
18498
|
+
"minItems": 1,
|
|
18499
|
+
"maxItems": 100,
|
|
18500
|
+
"uniqueItems": true,
|
|
18501
|
+
"items": {
|
|
18502
|
+
"type": "string",
|
|
18503
|
+
"format": "uuid",
|
|
18504
|
+
"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}$"
|
|
18505
|
+
}
|
|
18506
|
+
},
|
|
18507
|
+
"all": {
|
|
18508
|
+
"type": "boolean",
|
|
18509
|
+
"const": true
|
|
18510
|
+
},
|
|
18511
|
+
"idempotency_key": {
|
|
18512
|
+
"type": "string",
|
|
18513
|
+
"minLength": 1,
|
|
18514
|
+
"maxLength": 200,
|
|
18515
|
+
"pattern": "^[!-~]+$"
|
|
18516
|
+
},
|
|
18517
|
+
"text": {
|
|
18518
|
+
"type": "string",
|
|
18519
|
+
"minLength": 1,
|
|
18520
|
+
"maxLength": 500,
|
|
18521
|
+
"pattern": "\\S",
|
|
18522
|
+
"description": "Необязательный текст: 1–500 знаков после удаления пробелов по краям. Без text система подбирает разные английские апелляции для каждого номера."
|
|
18523
|
+
},
|
|
18524
|
+
"explicit_confirmation": {
|
|
18525
|
+
"type": "boolean",
|
|
18526
|
+
"const": true,
|
|
18527
|
+
"description": "Явное согласие человека на необратимую отправку апелляции от номера."
|
|
18528
|
+
}
|
|
18529
|
+
},
|
|
18530
|
+
"oneOf": [
|
|
18531
|
+
{
|
|
18532
|
+
"required": [
|
|
18533
|
+
"account_ids"
|
|
18534
|
+
],
|
|
18535
|
+
"not": {
|
|
18536
|
+
"required": [
|
|
18537
|
+
"all"
|
|
18538
|
+
]
|
|
18539
|
+
}
|
|
18540
|
+
},
|
|
18541
|
+
{
|
|
18542
|
+
"required": [
|
|
18543
|
+
"all"
|
|
18544
|
+
],
|
|
18545
|
+
"not": {
|
|
18546
|
+
"required": [
|
|
18547
|
+
"account_ids"
|
|
18548
|
+
]
|
|
18549
|
+
}
|
|
18550
|
+
}
|
|
18551
|
+
]
|
|
18552
|
+
}
|
|
18553
|
+
},
|
|
18554
|
+
{
|
|
18555
|
+
"name": "besales_platform_telegram_personal_operational_task_get",
|
|
18556
|
+
"description": "Прочитать состояние проверки ограничений или апелляции по task_id. Требует read:channels. Возвращает состояние задачи и restrictionStatus — текущий статус ограничений номера, прочитанный после задачи; это не исторический снимок её исхода. Успешное выполнение не означает отсутствие ограничений, более поздние действия могли изменить номер. null означает недоступный статус номера. Ничего не отправляет.",
|
|
18557
|
+
"inputSchema": {
|
|
18558
|
+
"type": "object",
|
|
18559
|
+
"additionalProperties": false,
|
|
18560
|
+
"required": [
|
|
18561
|
+
"channel_id",
|
|
18562
|
+
"task_id"
|
|
18563
|
+
],
|
|
18564
|
+
"properties": {
|
|
18565
|
+
"workspace_id": {
|
|
18566
|
+
"type": "string",
|
|
18567
|
+
"format": "uuid"
|
|
18568
|
+
},
|
|
18569
|
+
"channel_id": {
|
|
18570
|
+
"type": "string",
|
|
18571
|
+
"format": "uuid"
|
|
18572
|
+
},
|
|
18573
|
+
"task_id": {
|
|
18574
|
+
"type": "string",
|
|
18575
|
+
"format": "uuid"
|
|
18576
|
+
}
|
|
18577
|
+
}
|
|
18578
|
+
}
|
|
18579
|
+
},
|
|
18580
|
+
{
|
|
18581
|
+
"name": "besales_platform_telegram_personal_accounts",
|
|
18582
|
+
"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 дней и включается сам при подключении номера, если его не выключить вручную.",
|
|
18583
|
+
"inputSchema": {
|
|
18584
|
+
"type": "object",
|
|
18585
|
+
"additionalProperties": false,
|
|
18586
|
+
"required": [
|
|
18587
|
+
"channel_id"
|
|
18588
|
+
],
|
|
18589
|
+
"properties": {
|
|
18590
|
+
"workspace_id": {
|
|
18591
|
+
"type": "string",
|
|
18592
|
+
"format": "uuid"
|
|
18593
|
+
},
|
|
18594
|
+
"channel_id": {
|
|
18595
|
+
"type": "string",
|
|
18596
|
+
"format": "uuid"
|
|
18597
|
+
},
|
|
18598
|
+
"search": {
|
|
18599
|
+
"type": "string",
|
|
18600
|
+
"maxLength": 200
|
|
18601
|
+
},
|
|
18602
|
+
"status": {
|
|
18603
|
+
"type": "string",
|
|
18604
|
+
"enum": [
|
|
18605
|
+
"BANNED",
|
|
18606
|
+
"CONNECTED",
|
|
18607
|
+
"CONNECTING",
|
|
18608
|
+
"DISCONNECTED",
|
|
18609
|
+
"ERROR",
|
|
18610
|
+
"NEEDS_CODE",
|
|
18611
|
+
"NEEDS_PASSWORD",
|
|
18612
|
+
"PENDING_VERIFICATION",
|
|
18613
|
+
"SESSION_UPLOADED"
|
|
18614
|
+
]
|
|
18615
|
+
},
|
|
18616
|
+
"page": {
|
|
18617
|
+
"type": "integer",
|
|
18618
|
+
"minimum": 1
|
|
18619
|
+
},
|
|
18620
|
+
"limit": {
|
|
18621
|
+
"type": "integer",
|
|
18622
|
+
"minimum": 1,
|
|
18623
|
+
"maximum": 100
|
|
18624
|
+
}
|
|
18625
|
+
}
|
|
18626
|
+
}
|
|
18627
|
+
},
|
|
18628
|
+
{
|
|
18629
|
+
"name": "besales_platform_telegram_personal_warmup",
|
|
18630
|
+
"description": "Прочитать настройки и аналитику прогрева личных номеров Telegram. Требует read:channels. Сообщения прогрева идут только между своими номерами. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
|
|
18631
|
+
"inputSchema": {
|
|
18632
|
+
"type": "object",
|
|
18633
|
+
"additionalProperties": false,
|
|
18634
|
+
"required": [
|
|
18635
|
+
"channel_id"
|
|
18636
|
+
],
|
|
18637
|
+
"properties": {
|
|
18638
|
+
"workspace_id": {
|
|
18639
|
+
"type": "string",
|
|
18640
|
+
"format": "uuid"
|
|
18641
|
+
},
|
|
18642
|
+
"channel_id": {
|
|
18643
|
+
"type": "string",
|
|
18644
|
+
"format": "uuid"
|
|
18645
|
+
}
|
|
18646
|
+
}
|
|
18647
|
+
}
|
|
18648
|
+
},
|
|
18649
|
+
{
|
|
18650
|
+
"name": "besales_platform_telegram_personal_warmup_update",
|
|
18651
|
+
"description": "Частично изменить настройки прогрева личных номеров Telegram. Требует manage:channels. Передавай только изменяемые поля; пропуск сохраняет прежнее значение. Подтверждение не требуется: сообщения прогрева идут только между своими номерами. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
|
|
18652
|
+
"inputSchema": {
|
|
18653
|
+
"type": "object",
|
|
18654
|
+
"additionalProperties": false,
|
|
18655
|
+
"required": [
|
|
18656
|
+
"channel_id"
|
|
18657
|
+
],
|
|
18658
|
+
"properties": {
|
|
18659
|
+
"workspace_id": {
|
|
18660
|
+
"type": "string",
|
|
18661
|
+
"format": "uuid"
|
|
18662
|
+
},
|
|
18663
|
+
"channel_id": {
|
|
18664
|
+
"type": "string",
|
|
18665
|
+
"format": "uuid"
|
|
18666
|
+
},
|
|
18667
|
+
"enabled": {
|
|
18668
|
+
"type": "boolean"
|
|
18669
|
+
},
|
|
18670
|
+
"images_enabled": {
|
|
18671
|
+
"type": "boolean"
|
|
18672
|
+
},
|
|
18673
|
+
"messages_per_day": {
|
|
18674
|
+
"type": "integer"
|
|
18675
|
+
},
|
|
18676
|
+
"time_variation_minutes": {
|
|
18677
|
+
"type": "integer"
|
|
18678
|
+
},
|
|
18679
|
+
"response_delay_min_minutes": {
|
|
18680
|
+
"type": "integer"
|
|
18681
|
+
},
|
|
18682
|
+
"response_delay_max_minutes": {
|
|
18683
|
+
"type": "integer"
|
|
18684
|
+
},
|
|
18685
|
+
"image_chance_percent": {
|
|
18686
|
+
"type": "integer"
|
|
18687
|
+
},
|
|
18688
|
+
"posts_to_react": {
|
|
18689
|
+
"type": "integer"
|
|
18690
|
+
},
|
|
18691
|
+
"max_accounts_per_channel_reaction": {
|
|
18692
|
+
"type": "integer"
|
|
18693
|
+
},
|
|
18694
|
+
"pairing_hour_utc": {
|
|
18695
|
+
"type": "integer"
|
|
18696
|
+
},
|
|
18697
|
+
"hourly_interval_hours": {
|
|
18698
|
+
"type": "number"
|
|
18699
|
+
},
|
|
18700
|
+
"reaction_types": {
|
|
18701
|
+
"type": "array",
|
|
18702
|
+
"items": {
|
|
18703
|
+
"type": "string"
|
|
18704
|
+
},
|
|
18705
|
+
"maxItems": 100
|
|
18706
|
+
},
|
|
18707
|
+
"reaction_hours_utc": {
|
|
18708
|
+
"type": "array",
|
|
18709
|
+
"items": {
|
|
18710
|
+
"type": "integer"
|
|
18711
|
+
},
|
|
18712
|
+
"maxItems": 24
|
|
18713
|
+
}
|
|
18714
|
+
}
|
|
18715
|
+
}
|
|
18716
|
+
},
|
|
18717
|
+
{
|
|
18718
|
+
"name": "besales_platform_telegram_personal_account_warmup",
|
|
18719
|
+
"description": "Включить или выключить прогрев одного личного номера Telegram. Требует manage:channels. is_warming_up:false означает выход номера из автоматического прогрева до ручного включения; true снимает ручной отказ. Подтверждение не требуется: сообщения только между своими номерами. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
|
|
18720
|
+
"inputSchema": {
|
|
18721
|
+
"type": "object",
|
|
18722
|
+
"additionalProperties": false,
|
|
18723
|
+
"required": [
|
|
18724
|
+
"channel_id",
|
|
18725
|
+
"account_id",
|
|
18726
|
+
"is_warming_up"
|
|
18727
|
+
],
|
|
18728
|
+
"properties": {
|
|
18729
|
+
"workspace_id": {
|
|
18730
|
+
"type": "string",
|
|
18731
|
+
"format": "uuid"
|
|
18732
|
+
},
|
|
18733
|
+
"channel_id": {
|
|
18734
|
+
"type": "string",
|
|
18735
|
+
"format": "uuid"
|
|
18736
|
+
},
|
|
18737
|
+
"account_id": {
|
|
18738
|
+
"type": "string",
|
|
18739
|
+
"format": "uuid"
|
|
18740
|
+
},
|
|
18741
|
+
"is_warming_up": {
|
|
18742
|
+
"type": "boolean"
|
|
18743
|
+
}
|
|
18744
|
+
}
|
|
18745
|
+
}
|
|
18746
|
+
},
|
|
18747
|
+
{
|
|
18748
|
+
"name": "besales_platform_telegram_personal_ramp",
|
|
18749
|
+
"description": "Прочитать, включена ли лесенка новых личных номеров Telegram в рабочей области. Требует read:channels. Возвращает только этот флаг. Лесенка 3, 4, 5, 6, 7 с первого дня рассылки; прогрев идёт параллельно 5 дней и включается сам при подключении номера, если его не выключить вручную.",
|
|
18750
|
+
"inputSchema": {
|
|
18751
|
+
"type": "object",
|
|
18752
|
+
"additionalProperties": false,
|
|
18753
|
+
"required": [],
|
|
18754
|
+
"properties": {
|
|
18755
|
+
"workspace_id": {
|
|
18756
|
+
"type": "string",
|
|
18757
|
+
"format": "uuid"
|
|
18758
|
+
}
|
|
18759
|
+
}
|
|
18760
|
+
}
|
|
18761
|
+
},
|
|
18762
|
+
{
|
|
18763
|
+
"name": "besales_platform_telegram_personal_profile_bulk",
|
|
18764
|
+
"description": "Изменить профили своих личных номеров Telegram пачкой. Меняются СВОИ номера канала, не клиенты: имя first_name, фамилия last_name, описание bio, дата рождения birthday (null снимает) и ники. Фото через этот инструмент не меняется — только в приложении. Требует manage:channels. Поля профиля одинаковы для всех выбранных номеров; пропуск поля сохраняет прежнее значение. Номера выбираются account_ids (1–100 уникальных UUID v4) либо all:true — ровно одно. Ники — один из двух режимов либо ни одного: usernames (по номерам: account_id и новый username; account_ids и all не передаются) или username_base (основа ника; номера выбираются account_ids или all). Оба режима ников сразу отвергаются до запроса. Ники необратимо освобождают прежние ники у Telegram: перед вызовом покажи человеку список номеров и новые значения и получи ответ «делать?»; явное explicit_confirmation не требуется. Операция идёт заданием фермы: ответ — принятие (job_id, state, total), а не итог; итог по каждому номеру смотри в besales_platform_telegram_personal_profile_job. Обязателен стабильный idempotency_key (1–200 видимых ASCII-символов без пробелов): повтор того же намерения — с тем же ключом и аргументами; при неизвестном исходе новый ключ автоматически не создавай.",
|
|
18765
|
+
"inputSchema": {
|
|
18766
|
+
"type": "object",
|
|
18767
|
+
"additionalProperties": false,
|
|
18768
|
+
"required": [
|
|
18769
|
+
"channel_id",
|
|
18770
|
+
"idempotency_key"
|
|
18771
|
+
],
|
|
18772
|
+
"properties": {
|
|
18773
|
+
"workspace_id": {
|
|
18774
|
+
"type": "string",
|
|
18775
|
+
"format": "uuid"
|
|
18776
|
+
},
|
|
18777
|
+
"channel_id": {
|
|
18778
|
+
"type": "string",
|
|
18779
|
+
"format": "uuid"
|
|
18780
|
+
},
|
|
18781
|
+
"account_ids": {
|
|
18782
|
+
"type": "array",
|
|
18783
|
+
"minItems": 1,
|
|
18784
|
+
"maxItems": 100,
|
|
18785
|
+
"uniqueItems": true,
|
|
18786
|
+
"items": {
|
|
18787
|
+
"type": "string",
|
|
18788
|
+
"format": "uuid",
|
|
18789
|
+
"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}$"
|
|
18790
|
+
},
|
|
18791
|
+
"description": "Номера канала (UUID из таблицы номеров), 1–100 уникальных. Вместо all; с usernames не передаётся."
|
|
18792
|
+
},
|
|
18793
|
+
"all": {
|
|
18794
|
+
"type": "boolean",
|
|
18795
|
+
"const": true,
|
|
18796
|
+
"description": "Все номера канала. Вместо account_ids; с usernames не передаётся."
|
|
18797
|
+
},
|
|
18798
|
+
"first_name": {
|
|
18799
|
+
"type": "string",
|
|
18800
|
+
"maxLength": 64,
|
|
18801
|
+
"description": "Имя, до 64 знаков. Ограничения Telegram проверяет ферма."
|
|
18802
|
+
},
|
|
18803
|
+
"last_name": {
|
|
18804
|
+
"type": "string",
|
|
18805
|
+
"maxLength": 64,
|
|
18806
|
+
"description": "Фамилия, до 64 знаков."
|
|
18807
|
+
},
|
|
18808
|
+
"bio": {
|
|
18809
|
+
"type": "string",
|
|
18810
|
+
"maxLength": 140,
|
|
18811
|
+
"description": "Описание профиля, до 140 знаков; лимит Telegram — до 70 без Premium, до 140 с Premium, его проверяет ферма по каждому номеру."
|
|
18812
|
+
},
|
|
18813
|
+
"birthday": {
|
|
18814
|
+
"anyOf": [
|
|
18815
|
+
{
|
|
18816
|
+
"type": "object",
|
|
18817
|
+
"additionalProperties": false,
|
|
18818
|
+
"required": [
|
|
18819
|
+
"day",
|
|
18820
|
+
"month"
|
|
18821
|
+
],
|
|
18822
|
+
"properties": {
|
|
18823
|
+
"day": {
|
|
18824
|
+
"type": "integer",
|
|
18825
|
+
"minimum": 1,
|
|
18826
|
+
"maximum": 31
|
|
18827
|
+
},
|
|
18828
|
+
"month": {
|
|
18829
|
+
"type": "integer",
|
|
18830
|
+
"minimum": 1,
|
|
18831
|
+
"maximum": 12
|
|
18832
|
+
},
|
|
18833
|
+
"year": {
|
|
18834
|
+
"type": "integer",
|
|
18835
|
+
"minimum": 1,
|
|
18836
|
+
"maximum": 9999
|
|
18837
|
+
}
|
|
18838
|
+
}
|
|
18839
|
+
},
|
|
18840
|
+
{
|
|
18841
|
+
"type": "null"
|
|
18842
|
+
}
|
|
18843
|
+
],
|
|
18844
|
+
"description": "Дата рождения: день, месяц, год необязателен. null снимает дату."
|
|
18845
|
+
},
|
|
18846
|
+
"usernames": {
|
|
18847
|
+
"type": "array",
|
|
18848
|
+
"minItems": 1,
|
|
18849
|
+
"maxItems": 100,
|
|
18850
|
+
"items": {
|
|
18851
|
+
"type": "object",
|
|
18852
|
+
"additionalProperties": false,
|
|
18853
|
+
"required": [
|
|
18854
|
+
"account_id",
|
|
18855
|
+
"username"
|
|
18856
|
+
],
|
|
18857
|
+
"properties": {
|
|
18858
|
+
"account_id": {
|
|
18859
|
+
"type": "string",
|
|
18860
|
+
"format": "uuid",
|
|
18861
|
+
"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}$"
|
|
18862
|
+
},
|
|
18863
|
+
"username": {
|
|
18864
|
+
"type": "string",
|
|
18865
|
+
"minLength": 5,
|
|
18866
|
+
"maxLength": 32,
|
|
18867
|
+
"pattern": "^(?!.*__)[A-Za-z][A-Za-z0-9_]{3,30}[A-Za-z0-9]$"
|
|
18868
|
+
}
|
|
18869
|
+
}
|
|
18870
|
+
},
|
|
18871
|
+
"description": "Режим ников по номерам: пары account_id и новый username (5–32 знака: латиница, цифры, _, без двойного _, с буквы). Номера и ники не повторяются. С account_ids, all и username_base не передаётся."
|
|
18872
|
+
},
|
|
18873
|
+
"username_base": {
|
|
18874
|
+
"type": "string",
|
|
18875
|
+
"minLength": 5,
|
|
18876
|
+
"maxLength": 32,
|
|
18877
|
+
"pattern": "^(?!.*__)[A-Za-z][A-Za-z0-9_]{3,30}[A-Za-z0-9]$",
|
|
18878
|
+
"description": "Режим основы ника: общая основа для выбранных account_ids или all. С usernames не передаётся."
|
|
18879
|
+
},
|
|
18880
|
+
"idempotency_key": {
|
|
18881
|
+
"type": "string",
|
|
18882
|
+
"minLength": 1,
|
|
18883
|
+
"maxLength": 200,
|
|
18884
|
+
"pattern": "^[!-~]+$"
|
|
18885
|
+
}
|
|
18886
|
+
},
|
|
18887
|
+
"allOf": [
|
|
18888
|
+
{
|
|
18889
|
+
"not": {
|
|
18890
|
+
"required": [
|
|
18891
|
+
"usernames",
|
|
18892
|
+
"username_base"
|
|
18893
|
+
]
|
|
18894
|
+
}
|
|
18895
|
+
},
|
|
18896
|
+
{
|
|
18897
|
+
"if": {
|
|
18898
|
+
"required": [
|
|
18899
|
+
"usernames"
|
|
18900
|
+
]
|
|
18901
|
+
},
|
|
18902
|
+
"then": {
|
|
18903
|
+
"not": {
|
|
18904
|
+
"anyOf": [
|
|
18905
|
+
{
|
|
18906
|
+
"required": [
|
|
18907
|
+
"account_ids"
|
|
18908
|
+
]
|
|
18909
|
+
},
|
|
18910
|
+
{
|
|
18911
|
+
"required": [
|
|
18912
|
+
"all"
|
|
18913
|
+
]
|
|
18914
|
+
}
|
|
18915
|
+
]
|
|
18916
|
+
}
|
|
18917
|
+
},
|
|
18918
|
+
"else": {
|
|
18919
|
+
"oneOf": [
|
|
18920
|
+
{
|
|
18921
|
+
"required": [
|
|
18922
|
+
"account_ids"
|
|
18923
|
+
],
|
|
18924
|
+
"not": {
|
|
18925
|
+
"required": [
|
|
18926
|
+
"all"
|
|
18927
|
+
]
|
|
18928
|
+
}
|
|
18929
|
+
},
|
|
18930
|
+
{
|
|
18931
|
+
"required": [
|
|
18932
|
+
"all"
|
|
18933
|
+
],
|
|
18934
|
+
"not": {
|
|
18935
|
+
"required": [
|
|
18936
|
+
"account_ids"
|
|
18937
|
+
]
|
|
18938
|
+
}
|
|
18939
|
+
}
|
|
18940
|
+
]
|
|
18941
|
+
}
|
|
18942
|
+
},
|
|
18943
|
+
{
|
|
18944
|
+
"anyOf": [
|
|
18945
|
+
{
|
|
18946
|
+
"required": [
|
|
18947
|
+
"first_name"
|
|
18948
|
+
]
|
|
18949
|
+
},
|
|
18950
|
+
{
|
|
18951
|
+
"required": [
|
|
18952
|
+
"last_name"
|
|
18953
|
+
]
|
|
18954
|
+
},
|
|
18955
|
+
{
|
|
18956
|
+
"required": [
|
|
18957
|
+
"bio"
|
|
18958
|
+
]
|
|
18959
|
+
},
|
|
18960
|
+
{
|
|
18961
|
+
"required": [
|
|
18962
|
+
"birthday"
|
|
18963
|
+
]
|
|
18964
|
+
},
|
|
18965
|
+
{
|
|
18966
|
+
"required": [
|
|
18967
|
+
"usernames"
|
|
18968
|
+
]
|
|
18969
|
+
},
|
|
18970
|
+
{
|
|
18971
|
+
"required": [
|
|
18972
|
+
"username_base"
|
|
18973
|
+
]
|
|
18974
|
+
}
|
|
18975
|
+
]
|
|
18976
|
+
}
|
|
18977
|
+
]
|
|
18978
|
+
}
|
|
18979
|
+
},
|
|
18980
|
+
{
|
|
18981
|
+
"name": "besales_platform_telegram_personal_profile_job",
|
|
18982
|
+
"description": "Прочитать итог задания фермы по изменению профилей номеров Telegram. Требует read:channels. Принимает channel_id и job_id из ответа besales_platform_telegram_personal_profile_bulk. Возвращает job_id, kind, state (PENDING, RUNNING, COMPLETED), counters (total, pending, running, succeeded, failed) и items по номерам: account_id, state (PENDING, RUNNING, SUCCEEDED, FAILED), failure_code и outcome.fields по каждому полю. Элемент с частичным успехом остаётся SUCCEEDED, поэтому читай поля: отдельное поле может быть FAILED. TELEGRAM_BIO_TOO_LONG — описание длиннее лимита Telegram (до 70 без Premium, до 140 с Premium); PROFILE_PROVIDER_OUTCOME_UNKNOWN — исход у Telegram неизвестен, не повторяй вслепую, сначала сверь профиль номера. Принятие задания итогом не является: пока state не COMPLETED, повтори чтение позже. Ничего не меняет.",
|
|
18983
|
+
"inputSchema": {
|
|
18984
|
+
"type": "object",
|
|
18985
|
+
"additionalProperties": false,
|
|
18986
|
+
"required": [
|
|
18987
|
+
"channel_id",
|
|
18988
|
+
"job_id"
|
|
18989
|
+
],
|
|
18990
|
+
"properties": {
|
|
18991
|
+
"workspace_id": {
|
|
18992
|
+
"type": "string",
|
|
18993
|
+
"format": "uuid"
|
|
18994
|
+
},
|
|
18995
|
+
"channel_id": {
|
|
18996
|
+
"type": "string",
|
|
18997
|
+
"format": "uuid"
|
|
18998
|
+
},
|
|
18999
|
+
"job_id": {
|
|
19000
|
+
"type": "string",
|
|
19001
|
+
"minLength": 1,
|
|
19002
|
+
"maxLength": 128
|
|
19003
|
+
}
|
|
19004
|
+
}
|
|
19005
|
+
}
|
|
18154
19006
|
}
|
|
18155
19007
|
],
|
|
18156
19008
|
"resources": [
|
|
@@ -18390,16 +19242,16 @@
|
|
|
18390
19242
|
}
|
|
18391
19243
|
],
|
|
18392
19244
|
"summary": {
|
|
18393
|
-
"total_tools":
|
|
19245
|
+
"total_tools": 306,
|
|
18394
19246
|
"tools_by_category": {
|
|
18395
19247
|
"workspace_and_help": 18,
|
|
18396
19248
|
"agent_configuration": 15,
|
|
18397
19249
|
"prompt_and_testing": 40,
|
|
18398
19250
|
"icp": 11,
|
|
18399
19251
|
"knowledge_and_content": 52,
|
|
18400
|
-
"crm_and_data_sources":
|
|
18401
|
-
"channels_and_credentials":
|
|
18402
|
-
"dialogues_and_contacts":
|
|
19252
|
+
"crm_and_data_sources": 32,
|
|
19253
|
+
"channels_and_credentials": 26,
|
|
19254
|
+
"dialogues_and_contacts": 35,
|
|
18403
19255
|
"automation": 5,
|
|
18404
19256
|
"outbound_and_analytics": 72
|
|
18405
19257
|
},
|