bitrix24-mcp-bridge 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,6 +27,8 @@
27
27
 
28
28
  "task.subtasks": { "action": "tasks.v2.Task.Relation.Child.list", "method": "POST", "bodyType": "json" },
29
29
  "task.related": { "action": "tasks.v2.Task.Relation.Related.list", "method": "POST", "bodyType": "json" },
30
+ "task.comments.page": { "endpoint": "/task/comments/{taskId}/", "method": "GET", "params": { "IFRAME": "Y", "IFRAME_TYPE": "SIDE_SLIDER" }, "responseType": "text" },
31
+ "task.comments.navigate": { "endpoint": "/bitrix/services/main/ajax.php?mode=class&c=bitrix%3Aforum.comments&action=navigateComment", "method": "POST", "params": { "AJAX_POST": "Y", "MODE": "LIST", "PAGEN_1": 1, "scope": "web", "IFRAME": "Y", "IFRAME_TYPE": "SIDE_SLIDER" } },
30
32
 
31
33
  "call.detail": { "endpoint": "/call/detail/{callId}", "method": "GET", "params": { "IFRAME": "Y", "IFRAME_TYPE": "SIDE_SLIDER" }, "responseType": "text" }
32
34
  }
package/dist/cli.js CHANGED
@@ -7234,26 +7234,26 @@ var require_permessage_deflate = __commonJS({
7234
7234
  value = value[0];
7235
7235
  if (key === "client_max_window_bits") {
7236
7236
  if (value !== true) {
7237
- const num2 = +value;
7238
- if (!Number.isInteger(num2) || num2 < 8 || num2 > 15) {
7237
+ const num3 = +value;
7238
+ if (!Number.isInteger(num3) || num3 < 8 || num3 > 15) {
7239
7239
  throw new TypeError(
7240
7240
  `Invalid value for parameter "${key}": ${value}`
7241
7241
  );
7242
7242
  }
7243
- value = num2;
7243
+ value = num3;
7244
7244
  } else if (!this._isServer) {
7245
7245
  throw new TypeError(
7246
7246
  `Invalid value for parameter "${key}": ${value}`
7247
7247
  );
7248
7248
  }
7249
7249
  } else if (key === "server_max_window_bits") {
7250
- const num2 = +value;
7251
- if (!Number.isInteger(num2) || num2 < 8 || num2 > 15) {
7250
+ const num3 = +value;
7251
+ if (!Number.isInteger(num3) || num3 < 8 || num3 > 15) {
7252
7252
  throw new TypeError(
7253
7253
  `Invalid value for parameter "${key}": ${value}`
7254
7254
  );
7255
7255
  }
7256
- value = num2;
7256
+ value = num3;
7257
7257
  } else if (key === "client_no_context_takeover" || key === "server_no_context_takeover") {
7258
7258
  if (value !== true) {
7259
7259
  throw new TypeError(
@@ -7967,8 +7967,8 @@ var require_receiver = __commonJS({
7967
7967
  return;
7968
7968
  }
7969
7969
  const buf = this.consume(8);
7970
- const num2 = buf.readUInt32BE(0);
7971
- if (num2 > Math.pow(2, 53 - 32) - 1) {
7970
+ const num3 = buf.readUInt32BE(0);
7971
+ if (num3 > Math.pow(2, 53 - 32) - 1) {
7972
7972
  const error2 = this.createError(
7973
7973
  RangeError,
7974
7974
  "Unsupported WebSocket frame: payload length > 2^53 - 1",
@@ -7979,7 +7979,7 @@ var require_receiver = __commonJS({
7979
7979
  cb(error2);
7980
7980
  return;
7981
7981
  }
7982
- this._payloadLength = num2 * Math.pow(2, 32) + buf.readUInt32BE(4);
7982
+ this._payloadLength = num3 * Math.pow(2, 32) + buf.readUInt32BE(4);
7983
7983
  this.haveLength(cb);
7984
7984
  }
7985
7985
  /**
@@ -25428,7 +25428,7 @@ import { join as join6 } from "node:path";
25428
25428
  // src/tools/help.ts
25429
25429
  import { fileURLToPath as fileURLToPath2 } from "node:url";
25430
25430
  var API_NOTES = fileURLToPath2(new URL("../../docs/api-notes.md", import.meta.url));
25431
- var HELP = '# Bitrix24 API notes (reverse-engineered)\n\n\u041A\u0430\u043A \u0430\u0433\u0435\u043D\u0442\u0443 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0441 Bitrix24 \u0447\u0435\u0440\u0435\u0437 \u044D\u0442\u043E\u0442 \u043C\u043E\u0441\u0442: \u0444\u043E\u0440\u043C\u0430\u0442 `params`, \u0438\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439, \u0433\u043E\u0442\u043E\u0432\u044B\u0435 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0432\u044B\u0437\u043E\u0432\u043E\u0432.\n\n\u0414\u0432\u0435 \u043F\u043E\u0432\u0435\u0440\u0445\u043D\u043E\u0441\u0442\u0438 API. **\u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0439 REST** (`tasks.task.*`, `im.recent.list`, `im.user.get`, `im.chat.get`,\n`socialnetwork.api.workgroup.*`) \u2014 \u0435\u0441\u0442\u044C \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u043E\u043A\u0438, \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043D\u0438\u0445 \u043F\u043E\u043C\u0435\u0447\u0435\u043D\u044B **\u{1F4D6}**\n([`apidocs.bitrix24.com`](https://apidocs.bitrix24.com); \u0430\u0433\u0435\u043D\u0442\u0443 \u0441 MCP context7 \u2014 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\n`/bitrix24/b24restdocs`). **\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0435 ajax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B** (`im.v2.*`, `tasks.v2.*`, `ui.entityselector.*`)\n\u043F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0445 \u0434\u043E\u043A\u043E\u0432 \u043D\u0435 \u0438\u043C\u0435\u044E\u0442 \u2014 \u0432\u0441\u0451 \u043D\u0438\u0436\u0435 \u0434\u043E\u0431\u044B\u0442\u043E \u0436\u0438\u0432\u044B\u043C \u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C; \u043A\u043E\u043D\u0432\u0435\u0440\u0442 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043F\u043E\u043B\u0435\u0439 \u0443 \u043D\u0438\u0445 \u043C\u043E\u0433\u0443\u0442\n\u043E\u0442\u043B\u0438\u0447\u0430\u0442\u044C\u0441\u044F \u043E\u0442 \u{1F4D6}-\u0430\u043D\u0430\u043B\u043E\u0433\u043E\u0432. \u0418\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B \u0434\u043B\u044F \u043E\u0431\u043B\u0430\u0447\u043D\u043E\u0433\u043E Bitrix24; \u043D\u0430 \u0434\u0440\u0443\u0433\u043E\u043C \u043F\u043E\u0440\u0442\u0430\u043B\u0435 \u0441\u0432\u0435\u0440\u044F\u0439\u0441\u044F\n\u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C (`docs/reconnaissance.md`).\n\n---\n\n## 1. \u041A\u0430\u043A \u0432\u044B\u0437\u044B\u0432\u0430\u0442\u044C\n\n- **\u0422\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B** (`bitrix_tasks_list`, `bitrix_task_get`, `bitrix_chat_load`, \u2026) \u2014\n \u043E\u0431\u0451\u0440\u0442\u043A\u0438 \u0441 \u0440\u0430\u0437\u0443\u043C\u043D\u044B\u043C\u0438 \u0434\u0435\u0444\u043E\u043B\u0442\u0430\u043C\u0438; \u0438\u0445 \u043F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0432\u0438\u0434\u043D\u044B \u0441\u0440\u0435\u0434\u0438 MCP-\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432. \u0422\u043E\u0447\u043D\u0430\u044F\n \u0432\u044B\u0431\u043E\u0440\u043A\u0430 \u2014 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u043C `params`: \u043E\u043D \u043C\u0435\u0440\u0436\u0438\u0442\u0441\u044F **\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u043C** \u0438 \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0434\u0435\u0444\u043E\u043B\u0442\u044B.\n- **`bitrix_call { name, params }`** \u2014 \u043B\u044E\u0431\u043E\u0435 \u0438\u043C\u044F \u0438\u0437 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 (`actions.json`), `params` \u0432 \u043D\u0430\u0442\u0438\u0432\u043D\u043E\u043C\n \u0444\u043E\u0440\u043C\u0430\u0442\u0435 Bitrix (\xA73). \u041F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438\u043C\u0451\u043D \u043E\u0442\u0434\u0430\u0451\u0442 \u0441\u0430\u043C `bitrix_call` \u0432 \u0441\u0432\u043E\u0451\u043C \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0438.\n- \u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u043C\u043E\u0436\u0435\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C **\u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0435** \u0432\u044B\u0437\u043E\u0432\u044B: \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u0437\u0430\u043F\u0438\u0441\u0438 = \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0432\u044B\u0437\u0432\u0430\u0442\u044C. \u042D\u0442\u043E \u043D\u0435 \u0440\u0435\u0436\u0438\u043C\n \xAB\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435\xBB.\n- \u0423 \u043E\u0431\u0451\u0440\u0442\u043E\u043A \u0435\u0441\u0442\u044C \u0434\u0435\u0444\u043E\u043B\u0442\u044B (\u043D\u0430\u043F\u0440. `bitrix_tasks_list` \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 `{"ID":"desc"}`), \u0443 `bitrix_call` \u0438\u0445 \u043D\u0435\u0442 \u2014\n \u043E\u0434\u0438\u043D \u0438 \u0442\u043E\u0442 \u0436\u0435 \u0444\u0438\u043B\u044C\u0442\u0440 \u0434\u0430\u0441\u0442 \u0440\u0430\u0437\u043D\u044B\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B. \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0448\u044C \u0432\u044B\u0434\u0430\u0447\u0438 \u2014 \u0437\u0430\u0434\u0430\u0432\u0430\u0439 `order` \u044F\u0432\u043D\u043E.\n- \u041E\u0442\u0432\u0435\u0442 `invalid_csrf` / `invalid_authentication` = \u0441\u0435\u0441\u0441\u0438\u044F \u043F\u043E\u0440\u0442\u0430\u043B\u0430 \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u2192 \u043F\u0435\u0440\u0435\u043B\u043E\u0433\u0438\u043D\u044C\u0441\u044F \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n \u043D\u0430 \u0432\u043A\u043B\u0430\u0434\u043A\u0435 \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n\n---\n\n## 2. \u0424\u043E\u0440\u043C\u0430\u0442 \u043E\u0442\u0432\u0435\u0442\u0430\n\nAjax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B (`/bitrix/services/main/ajax.php`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442 HTTP 200 \u0441 \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u043E\u043C:\n\n```jsonc\n{ "status": "success" | "error",\n "data": { ... },\n "errors": [] } // \u041F\u0423\u0421\u0422\u041E\u0419 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u0438 \u0443\u0441\u043F\u0435\u0445\u0435! (\u0432 JS [] \u2014 truthy)\n```\n\n\u0423\u0441\u043F\u0435\u0445 = `status:"success"` \u0438/\u0438\u043B\u0438 **\u043F\u0443\u0441\u0442\u043E\u0439** `errors`. \u041D\u0435\u043F\u0443\u0441\u0442\u043E\u0439 `errors` / `status:"error"` / top-level\n`error` \u2014 \u0440\u0435\u0430\u043B\u044C\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 (\u043C\u043E\u0441\u0442 \u043C\u0430\u043F\u043F\u0438\u0442 \u0435\u0451 \u0432 `ok:false`). REST-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u044B (`/rest/*.json`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442\n\u0438\u043D\u0430\u0447\u0435: `{ "result": \u2026, "next", "total", "time" }` \u2014 \u0431\u0435\u0437 `errors`.\n\n---\n\n## 3. \u041A\u0430\u0442\u0430\u043B\u043E\u0433: \u0438\u043C\u044F \u2192 action \u2192 params\n\n\u0424\u043E\u0440\u043C\u0430 `params` \u0440\u0430\u0437\u043B\u0438\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u043E \u043C\u0435\u0442\u043E\u0434\u0443: \u0433\u0434\u0435-\u0442\u043E \u043F\u043B\u043E\u0441\u043A\u043E, \u0433\u0434\u0435-\u0442\u043E \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E, \u0433\u0434\u0435-\u0442\u043E \u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E \u0432 `params[\u2026]` \u2014\n\u043A\u043E\u043B\u043E\u043D\u043A\u0430 \xABparams\xBB \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0442\u043E\u0447\u043D\u0443\u044E \u0444\u043E\u0440\u043C\u0443 (\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043B\u0430 \u043C\u043E\u0441\u0442 \u0431\u0435\u0440\u0451\u0442 \u043D\u0430 \u0441\u0435\u0431\u044F).\n\n| \u0418\u043C\u044F (`bitrix_call`) | action / endpoint | params | \u041F\u0430\u0433\u0438\u043D\u0430\u0446\u0438\u044F |\n|---|---|---|---|\n| `tasks.list` | `tasks.task.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `filter{RESPONSIBLE_ID,REAL_STATUS,GROUP_ID,\u2026}`, `select[]`, `order{}` | **`PAGEN_1`** \u2014 \u043D\u043E\u043C\u0435\u0440 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (1, 2, 3\u2026), \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 = 20 \u0437\u0430\u0434\u0430\u0447; `start` **\u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442** (\u0432\u0435\u0440\u043D\u0451\u0442 \u0442\u0443 \u0436\u0435 \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443) |\n| `task.get` | `tasks.task.get` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `taskId`, `select[]` | \u2014 |\n| `task.v2.get` | `tasks.v2.Task.get` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.scrum.info` | `tasks.v2.Scrum.getTaskInfo` | `{"taskId":N}` | \u2014 |\n| `task.files` | `tasks.v2.File.listObjects` | `{"ids":[N,\u2026]}` | \u2014 |\n| `task.views.count` | `tasks.v2.Task.View.User.count` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.subtasks` | `tasks.v2.Task.Relation.Child.list` | `{"taskId":N,"withIds":true,"navigation":{"size":N}}` | `navigation` |\n| `task.related` | `tasks.v2.Task.Relation.Related.list` | \u043A\u0430\u043A `task.subtasks` | `navigation` |\n| `projects.list` | `socialnetwork.api.workgroup.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `select[]`, `order{}`, `filter{}` | `start` (\u0448\u0430\u0433 50; `start=(N-1)*50`, `-1` \u2014 \u043E\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 `total`) \u{1F4D6} |\n| `projects.get` | `socialnetwork.api.workgroup.get` | **\u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E**: `params[groupId]`, `params[select][]` | \u2014 |\n| `chats.recent` | `/rest/im.recent.list.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `LIMIT`, `SKIP_OPENLINES`, `UNREAD_ONLY` | `LIMIT` |\n| `recent.load` | `im.v2.Recent.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[recentSection]` (`tasksTask`/`collab`/\u2026), `filter[unread]`, `filter[parentId]` | `recent.tail` |\n| `recent.tail` | `im.v2.Recent.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[lastMessageDate]` (\u043A\u0443\u0440\u0441\u043E\u0440), `filter[recentSection]` | `filter[lastMessageDate]` |\n| `chat.load` | `im.v2.Chat.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `dialogId`\\|`chatId`, `messageLimit` | \u2014 |\n| `chat.dialogId` | `im.v2.Chat.getDialogId` | \u043F\u043B\u043E\u0441\u043A\u043E: `externalId` (\u043D\u0430\u043F\u0440. `"sg"+groupId`) | \u2014 |\n| `chat.messages` | `im.v2.Chat.Message.list` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit` | \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u2014 \u043D\u0430\u0437\u0430\u0434 **\u043D\u0435 \u043B\u0438\u0441\u0442\u0430\u0435\u0442**, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 `chat.messages.tail` |\n| `chat.messages.tail` | `im.v2.Chat.Message.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit`, `filter[lastId]`, `order[id]` | `filter[lastId]` (\xA75.1) |\n| `chat.message.read` | `im.v2.Chat.Message.read` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `ids[]`, `actionUuid` | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `chat.read.all` | `im.v2.Chat.readAll` | \u0431\u0435\u0437 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `im.user.get` | `/rest/im.user.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ID` | \u2014 |\n| `im.chat.get` | `/rest/im.chat.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ENTITY_TYPE`, `ENTITY_ID` (\u043D\u0430\u043F\u0440. `TASKS_TASK`+taskId) | \u2014 |\n| `entityselector.load` | `ui.entityselector.load` | `{"dialog":{entities,preselectedItems,\u2026}}` | \u2014 |\n| `entityselector.search` | `ui.entityselector.doSearch` | `{"dialog":{\u2026},"searchQuery":{"query":"\u2026","queryWords":["\u2026"]}}` | \u2014 |\n| `call.detail` | `GET /call/detail/{callId}` | `callId` (\u043F\u043E\u0434\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0432 \u043F\u0443\u0442\u044C), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` \u2192 HTML | \u0441\u043C. \xA75.4 |\n\n---\n\n## 4. \u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A \u043F\u043E\u043B\u0435\u0439\n\n**\u0417\u0430\u0434\u0430\u0447\u0430** (`tasks.task.*`) \u2014 \u043F\u043E\u043B\u044F \u0434\u043B\u044F `select`/`filter` \u0432 UPPER_CASE: `ID`, `TITLE`, `DESCRIPTION`,\n`STATUS`, `REAL_STATUS`, `RESPONSIBLE_ID`, `CREATED_BY`, `CREATED_DATE`, `CHANGED_DATE`, `DEADLINE`,\n`CLOSED_DATE`, `PRIORITY`, `GROUP_ID`, `TAGS`, `TIME_ESTIMATE`, **`CHAT_ID`** (id \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F\n\u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u043F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432\u0435\u0440 `taskId \u2192 chatId`, \xA75.2), `UF_*`. \u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u0434\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442 \u043E\u0431\u044A\u0435\u043A\u0442\u044B `group`,\n`responsible`, `creator`, `action`.\n\u{1F4D6} (`tasks.task.get`/`list`) \u2014 \u0441\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E: `parentId`, `stageId`, `sprintId`, `backlogId`,\n`commentsCount`, `timeSpentInLogs`, `favorite`, `flowId`, `mark`, `accomplices[]`, `auditors[]`,\n`checklist{}`, `subStatus`; \u0432 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u043C REST-\u043E\u0442\u0432\u0435\u0442\u0435 \u043F\u043E\u043B\u044F \u043F\u0440\u0438\u0445\u043E\u0434\u044F\u0442 **camelCase**, \u0430 \u0432 `select`/`filter`\n\u043E\u043D\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **UPPER_CASE**. \u0414\u043E\u043F. \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u2014 \u0444\u043B\u0430\u0433\u0430\u043C\u0438 `params{WITH_TIMER_INFO, WITH_RESULT_INFO,\nWITH_PARSED_DESCRIPTION}`.\n\n**\u0421\u0442\u0430\u0442\u0443\u0441\u044B** (`REAL_STATUS` \u2014 \xAB\u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435\xBB \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435): `1` \u041D\u043E\u0432\u0430\u044F \xB7 `2` \u0416\u0434\u0451\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \xB7\n`3` \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \xB7 `4` \u0416\u0434\u0451\u0442 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044F \xB7 `5` \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430 \xB7 `6` \u041E\u0442\u043B\u043E\u0436\u0435\u043D\u0430 \xB7 `7` \u041E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0430. \u041F\u043E\u043B\u0435 `STATUS`\n\u043F\u043E\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E \u043D\u0435\u0441\u0451\u0442 **\u043C\u0435\u0442\u0430-\u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F** \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F (\u043F\u043E\u0447\u0442\u0438 \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430 / \u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u0430 / \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430),\n\u043F\u043E\u044D\u0442\u043E\u043C\u0443 \xAB\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043B\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0435\u0439\u0447\u0430\u0441\xBB \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E **`REAL_STATUS`** (\u043D\u0430\u043F\u0440. `{"REAL_STATUS":3}`) \u{1F4D6}.\n\u0410\u0441\u0438\u043C\u043C\u0435\u0442\u0440\u0438\u044F: \u0432 **`filter`** \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 `REAL_STATUS`, \u0430 \u0432 **`select`** \u0435\u0433\u043E \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0431\u0435\u0441\u043F\u043E\u043B\u0435\u0437\u043D\u043E \u2014 \u043F\u043E\u043B\u0435 \u043C\u043E\u043B\u0447\u0430\n\u043D\u0435 \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F; \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435, \u043F\u0440\u043E\u0441\u0438 `select:["STATUS"]` \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043A\u043B\u044E\u0447 `status` \u0441\u043E\n\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0442\u043E\u0439 \u0436\u0435 \u0448\u043A\u0430\u043B\u0435 1..7 (\u0443 \u043E\u0431\u0451\u0440\u0442\u043A\u0438 `bitrix_tasks_list` \u043E\u043D \u0443\u0436\u0435 \u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u043C `select`).\n\n**\u0424\u0438\u043B\u044C\u0442\u0440 `tasks.task.list`** \u2014 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0434 \u0438\u043C\u0435\u043D\u0435\u043C \u043F\u043E\u043B\u044F: `!` (\u043D\u0435 \u0440\u0430\u0432\u043D\u043E / \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u044C),\n`<`, `<=`, `>`, `>=`, `%` (LIKE-\u043F\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0430). \u041D\u0430\u043F\u0440. `{"!REAL_STATUS":5}` \u2014 \u0432\u0441\u0435 **\u043D\u0435\u0437\u0430\u043A\u0440\u044B\u0442\u044B\u0435**,\n`{">=DEADLINE":"2026-07-01"}`, `{"%TITLE":"\u043A\u0430\u0440\u0442\u0430"}`. \u0424\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u043E\u043B\u044F: `ID`, `PARENT_ID`, `GROUP_ID`,\n`CREATED_BY`, `RESPONSIBLE_ID`, `ACCOMPLICE`, `AUDITOR`, `REAL_STATUS`, `STATUS`, `PRIORITY`, `TAG`,\n`STAGE_ID`, `SPRINT_ID`, `BACKLOG_ID`, `DEADLINE`, `*_DATE`, `UF_CRM_TASK`.\n\n> **\xAB\u041C\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438\xBB \u2260 \u0442\u043E\u043B\u044C\u043A\u043E `RESPONSIBLE_ID`.** \u0420\u043E\u043B\u0438 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u044C\u043D\u044B: \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439\n> (`RESPONSIBLE_ID`), \u0441\u043E\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C (`ACCOMPLICE`), \u043D\u0430\u0431\u043B\u044E\u0434\u0430\u0442\u0435\u043B\u044C (`AUDITOR`), \u043F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\n> (`CREATED_BY`); \u0435\u0434\u0438\u043D\u043E\u0433\u043E \xAB\u043B\u044E\u0431\u0430\u044F \u0440\u043E\u043B\u044C\xBB \u043F\u043E\u043B\u044F \u0432 `list` \u043D\u0435\u0442 \u2014 \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0431\u0440\u0430\u0442\u044C **\u0432\u0441\u0435** \u0441\u0432\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\n> \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 (\u043C\u0438\u043D\u0438\u043C\u0443\u043C `RESPONSIBLE_ID` + `ACCOMPLICE`) \u0438 **\u0434\u0435\u0434\u0443\u043F\u043B\u0438\u0446\u0438\u0440\u0443\u0439 \u043F\u043E `id`** \u2014\n> \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0430\u0441\u0442\u043E \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u043E\u043B\u0435\u0439. \u0412 **`filter`** \u0440\u043E\u043B\u0438 \u0432 **\u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** \u0447\u0438\u0441\u043B\u0435\n> (`ACCOMPLICE`/`AUDITOR`), \u0432 **`select`** \u2014 \u0432\u043E **\u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** (`ACCOMPLICES`/`AUDITORS`).\n\n> **Scrum-\u0437\u0430\u0434\u0430\u0447\u0438 (\u0441\u043F\u0440\u0438\u043D\u0442\u044B).** \u041F\u043E\u043B\u0435 `SPRINT_ID` \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0436\u0451\u0441\u0442\u043A\u0438\u0439 `filter[SPRINT_ID]` \u043C\u043E\u0433\u0443\u0442 \u0440\u0430\u0441\u0445\u043E\u0434\u0438\u0442\u044C\u0441\u044F:\n> \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F \u0437\u0430 \u0441\u043F\u0440\u0438\u043D\u0442\u043E\u043C \u043F\u043E \u0441\u0432\u043E\u0435\u043C\u0443 \u043F\u043E\u043B\u044E, \u043D\u043E \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u0432\u044B\u0431\u043E\u0440\u043A\u0443 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 (\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u0430 \u0432 \u0431\u044D\u043A\u043B\u043E\u0433\n> \u0438\u043B\u0438 \u0432 \u0438\u043D\u043E\u0439 stage). \u0415\u0441\u043B\u0438 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 \xAB\u043C\u0430\u043B\u043E\u0432\u0430\u0442\u043E\xBB \u2014 \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0431\u0435\u0437 \u043D\u0435\u0433\u043E \u0438 \u043E\u0442\u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E\n> `SPRINT_ID`/`STAGE_ID` \u0443 \u0441\u0435\u0431\u044F. \u041C\u0435\u0442\u043E\u0434\u0430 \xAB\u043A\u043E\u043B\u043E\u043D\u043A\u0438 scrum-\u0434\u043E\u0441\u043A\u0438\xBB (`STAGE_ID` \u2192 \u0438\u043C\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0438) \u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0435 \u043D\u0435\u0442.\n\n**\u0413\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442 \u2014 \u0441\u043F\u0438\u0441\u043E\u043A** (`workgroup.list`): `ID`, `NAME`, `DESCRIPTION`, `NUMBER_OF_MEMBERS`,\n`OWNER_ID`, `DATE_CREATE`, `PROJECT` (Y=\u043F\u0440\u043E\u0435\u043A\u0442/N=\u0433\u0440\u0443\u043F\u043F\u0430), `TYPE`; **\u0431\u0435\u0437 `select` \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E `ID`**.\n\u{1F4D6} \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435: `ID`, `NAME`, `OWNER_ID`, `ACTIVE`, `VISIBLE`, `OPENED`, `CLOSED`, `PROJECT`,\n`SUBJECT_ID`, `SITE_ID`, `DATE_CREATE`, `DATE_UPDATE`, `DATE_ACTIVITY`; \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u044B \u0444\u0438\u043B\u044C\u0442\u0440\u0430\n`>= > <= < % =% %= !% != !`.\n**\u0413\u0440\u0443\u043F\u043F\u0430 \u2014 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430** (`workgroup.get`): \u043F\u043B\u044E\u0441 `OWNER_DATA`, `SUBJECT_DATA`, `MEMBERS[]`,\n`MODERATOR_MEMBERS[]`, **`CHAT_ID`**, `DIALOG_ID`, `IMAGE_ID`, UF-\u043F\u043E\u043B\u044F.\n\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0439 \u0447\u0430\u0442** (`im.recent.list`): `id` (\u044D\u0442\u043E dialogId: \u0447\u0438\u0441\u043B\u043E = \u044E\u0437\u0435\u0440, `"chat"+N` = \u0447\u0430\u0442), `chat_id`,\n`type` (`user`/`chat`), `title`, `message{id,text,file,author_id,date,status}`, `counter` (\u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445),\n`unread`, `last_id`, `pinned`, `date_update`, `date_last_activity`, `user{\u2026}`,\n`chat{\u2026 entity_type, entity_id, owner, \u2026}`; \u0435\u0441\u0442\u044C \u043B\u0438 \u0435\u0449\u0451 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u2014 `hasMore`/`hasMorePages` \u{1F4D6}.\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u043F\u043E \u0441\u0435\u043A\u0446\u0438\u0438** (`im.v2.Recent.load`): `filter[recentSection]` \u2014 `default` (\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0434\u0438\u0430\u043B\u043E\u0433\u0438),\n**`tasksTask` (\u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447)**, `collab`/`collabDefault`. \u0412\u0433\u043B\u0443\u0431\u044C \u2014 `im.v2.Recent.tail` \u0441 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u043C\n`filter[lastMessageDate]` (ISO-\u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B).\n\n**\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u044E\u0437\u0435\u0440\u0430** (`im.user.get`): `id`, `name`, `first_name`, `last_name`, `avatar`, `work_position`,\n`gender`, `status`, `online` \u2014 \u0440\u0435\u0437\u043E\u043B\u0432 \u0430\u0432\u0442\u043E\u0440\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F (`authorId`) \u0432 \u0438\u043C\u044F.\n\n**\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435** (`im.v2.Chat.Message.*`): `id`, `chatId`, `authorId`, `date`, `text`, `params`, `viewed`;\n\u043E\u0442\u0432\u0435\u0442 \u0442\u0430\u043A\u0436\u0435 \u043D\u0435\u0441\u0451\u0442 `users[]` (\u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438), `additionalMessages[]`, `hasPrevPage`/`hasNextPage`.\n\n---\n\n## 5. \u0421\u0446\u0435\u043D\u0430\u0440\u0438\u0438\n\n```jsonc\n// \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E 55, \u043F\u043E \u0434\u0435\u0434\u043B\u0430\u0439\u043D\u0443, \u0432\u0442\u043E\u0440\u0430\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430\nbitrix_tasks_list { "params": { "filter": {"RESPONSIBLE_ID":55,"REAL_STATUS":2},\n "order": {"DEADLINE":"asc"}, "start": 50 } }\n\n// \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u043C \u043D\u0430\u0431\u043E\u0440\u043E\u043C \u043F\u043E\u043B\u0435\u0439; v2-\u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0430; \u0444\u0430\u0439\u043B\u044B, \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u044B, \u0441\u0432\u044F\u0437\u0438\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","TITLE","DESCRIPTION","TAGS"] } }\nbitrix_task_get_v2 { "taskId": 4229 } // \u2192 { "task": { "id": 4229 } }\nbitrix_call { "name": "task.files", "params": { "ids": [4229] } }\nbitrix_task_subtasks { "taskId": 4229 }\nbitrix_task_related { "taskId": 4229 }\n\n// \u043F\u0440\u043E\u0435\u043A\u0442\u044B \u043F\u043E \u0434\u0430\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F; \u043F\u043E\u043B\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0433\u0440\u0443\u043F\u043F\u044B (\u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID)\nbitrix_projects_list { "params": { "order": {"DATE_CREATE":"desc"} } }\nbitrix_project_get { "groupId": 15 }\n```\n\n### 5.1. \u041C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440 (IM): \u043A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId`\n\n\u0412\u0441\u0451 \u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u2014 **\u0447\u0430\u0442\u044B**: \u043B\u0438\u0447\u043D\u044B\u0435 1-\u043D\u0430-1, \u0433\u0440\u0443\u043F\u043F\u043E\u0432\u044B\u0435 (\u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0432, \u043A\u0430\u043D\u0430\u043B\u043E\u0432) \u0438 **\u0447\u0430\u0442\u044B-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447**.\n\u0427\u0438\u0441\u043B\u043E\u0432\u043E\u0439 **`chatId`** \u2014 \u043A\u043B\u044E\u0447 \u043A\u043E \u0432\u0441\u0435\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F\u043C \u0441 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043C\u0438 (`bitrix_chat_messages`,\n`bitrix_chat_history`, `bitrix_chat_mark_read`); \u043F\u043E\u0447\u0442\u0438 \u043B\u044E\u0431\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0430\u0433\u0435\u043D\u0442\u0430 \u0437\u0434\u0435\u0441\u044C \u2014 \u043D\u0430 \u0448\u0430\u0433\u0435 \u0435\u0433\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F.\n\n**\u0422\u0440\u0438 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u043E\u0434\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430** (\u0433\u043E\u0434\u044F\u0442\u0441\u044F \u0434\u043B\u044F \u0440\u0430\u0437\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439):\n\n| \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 | \u0427\u0442\u043E \u044D\u0442\u043E | \u041F\u0440\u0438\u043C\u0435\u0440 | \u041A\u0443\u0434\u0430 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C |\n|---|---|---|---|\n| `chatId` | \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 id \u0447\u0430\u0442\u0430 | `485` | \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F / \u0438\u0441\u0442\u043E\u0440\u0438\u044F / \u043E\u0442\u043C\u0435\u0442\u043A\u0430 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u043C |\n| `dialogId` | \u0430\u0434\u0440\u0435\u0441 \u0434\u043B\u044F \u041E\u0422\u041A\u0420\u042B\u0422\u0418\u042F: `userId` (\u043B\u0438\u0447\u043D\u044B\u0439 1-\u043D\u0430-1) **\u0438\u043B\u0438** `"chat"+chatId` (\u0433\u0440\u0443\u043F\u043F\u043E\u0432\u043E\u0439) | `11`, `"chat485"` | `bitrix_chat_load` |\n| `externalId` | \u0432\u043D\u0435\u0448\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438 \u2192 \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u0432 `dialogId` | `"sg15"` (\u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u0430 15) | `bitrix_chat_get_dialog_id` |\n\n\u041A\u043B\u044E\u0447\u0435\u0432\u043E\u0435: **\u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u0441 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u043E\u043C = \u0435\u0433\u043E `userId` \u0432 \u0440\u043E\u043B\u0438 `dialogId`** (\u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \xABid \u0447\u0430\u0442\u0430\xBB \u0443 1-\u043D\u0430-1\n\u0437\u043D\u0430\u0442\u044C \u043D\u0435 \u043D\u0443\u0436\u043D\u043E). `bitrix_chat_load` \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 `dialogId` **\u0438\u043B\u0438** `chatId` \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\n\u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 `chatId`** \u2014 \u0434\u0430\u043B\u044C\u0448\u0435 \u043E\u043F\u0435\u0440\u0438\u0440\u0443\u0435\u0448\u044C \u0438\u043C.\n\n**\u041A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId` \u2014 \u043F\u043E \u0446\u0435\u043B\u0438:**\n\n| \u0425\u043E\u0447\u0443 \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442\u2026 | \u0428\u0430\u0433\u0438 |\n|---|---|\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C \u043F\u043E \u0418\u041C\u0415\u041D\u0418** | `bitrix_entity_search { query:"\u0434\u043C\u0438\u0442\u0440\u0438\u0439" }` \u2192 \u0434\u0438\u0430\u043B\u043E\u0433 \u0441 `dialogId` = \u0435\u0433\u043E userId \u2192 `bitrix_chat_load { dialogId }` |\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C, id \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043D** | `bitrix_chat_load { dialogId: <userId> }` (userId \u2014 \u0438\u0437 \u0437\u0430\u0434\u0430\u0447\u0438 `RESPONSIBLE_ID`/`CREATED_BY`, \u0438\u0437 `bitrix_chats_recent`, \u0438\u0437 `bitrix_user_get`) |\n| **\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0417\u0410\u0414\u0410\u0427\u0418** | `bitrix_task_get` \u2192 `CHAT_ID` (\xA75.2) |\n| **\u041F\u0420\u041E\u0415\u041A\u0422\u0410/\u0433\u0440\u0443\u043F\u043F\u044B** | `bitrix_task_get`\u2192`GROUP_ID`\u2192`bitrix_project_get`\u2192`CHAT_ID`; \u043B\u0438\u0431\u043E `bitrix_chat_get_dialog_id { externalId:"sg<groupId>" }` |\n| **\u043D\u0435 \u0437\u043D\u0430\u044E \u0442\u043E\u0447\u043D\u043E, \u043A\u0430\u043A\u043E\u0439** | `bitrix_chats_recent` (\u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435, \u0441\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u044C \u043F\u043E `title`/`user`) \u0438\u043B\u0438 `bitrix_entity_search { query }` |\n\n> \u041F\u043E\u0447\u0435\u043C\u0443 \u043D\u0435 \xAB\u043F\u0440\u043E\u0441\u0442\u043E \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432\xBB: `bitrix_chats_recent` (`im.recent.list`) \u043E\u0442\u0434\u0430\u0451\u0442 \u043B\u0438\u0448\u044C \u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u0438\n> **\u0431\u0435\u0437 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447**. \u0414\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430 \u2014 `bitrix_entity_search`; \u0434\u043B\u044F \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447 \u2014\n> `bitrix_recent_load { section:"tasksTask" }`.\n\n**\u0427\u0438\u0442\u0430\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E.** `bitrix_chat_messages` \u043E\u0442\u0434\u0430\u0451\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443; \u0432\u0433\u043B\u0443\u0431\u044C \u043B\u0438\u0441\u0442\u0430\u0435\u0442\n`bitrix_chat_history` \u043F\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u0443 `beforeId` = \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 id \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (\u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0439,\n\u0443\u043C\u0435\u043D\u044C\u0448\u0430\u044F `beforeId`, \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u0438).\n\n```jsonc\nbitrix_chat_load { "dialogId": 11 } // \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u044E\u0437\u0435\u0440\u0430 11 \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 chatId\nbitrix_chat_history { "chatId": 485, "beforeId": 1861279 }\nbitrix_chat_mark_read { "chatId": 40271, "ids": [1884131] } // \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439; actionUuid \u2014 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u043E\u043C\n```\n\n\u{1F4D6} \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438 \u0447\u0442\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439: `im.dialog.messages.get` (\u0434\u0435\u0444\u043E\u043B\u0442 20, \u043C\u0430\u043A\u0441 50; \u043B\u0438\u0441\u0442\u0430\u043D\u0438\u0435\n`LAST_ID` \u2014 \u0441\u0442\u0430\u0440\u0435\u0435, `FIRST_ID` \u2014 \u043D\u043E\u0432\u0435\u0435); `imbot.v2 chat.getMessageContext` \u2014 \u043E\u0442\u0432\u0435\u0442 `messages[]`\n(oldest\u2192newest) + `users[]` + `hasPrevPage`/`hasNextPage`, \u043F\u043E \u0444\u043E\u0440\u043C\u0435 **\u0441\u043E\u0432\u043F\u0430\u0434\u0430\u0435\u0442** \u0441 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C\u0438\n`im.v2.Chat.Message.*`.\n\n### 5.2. \u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 (\u0447\u0430\u0442) \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438\n\n**\u0410. \u041F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432 \u2014 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E.** `bitrix_task_get` \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `CHAT_ID` \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F (\u0432\u0445\u043E\u0434\u0438\u0442\n\u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u0439 `select` \u{1F4D6}) \u2014 \u044D\u0442\u043E `taskId \u2192 chatId` \u0431\u0435\u0437 \u043F\u043E\u0438\u0441\u043A\u0430 \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0438 \u0431\u0435\u0437 \u043F\u0440\u043E\u043C\u0430\u0445\u0430 \u043F\u043E \u0442\u0451\u0437\u043A\u0430\u043C:\n\n```jsonc\nbitrix_task_get { "taskId": 28373 } // \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 CHAT_ID\nbitrix_chat_load { "chatId": <CHAT_ID> }\nbitrix_chat_history { "chatId": <CHAT_ID>, "beforeId": <\u043C\u0438\u043D id \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B> }\n```\n\n\u041E\u0431\u0449\u0430\u044F \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u2014 **`bitrix_entity_chat`** (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 `im.chat.get`): chatId \u043B\u044E\u0431\u043E\u0433\u043E \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0433\u043E\n\u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u043E \u043F\u0430\u0440\u0435 `entityType`/`entityId`; \u043A\u0440\u043E\u043C\u0435 `TASKS_TASK` \u0442\u0430\u043A \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443\u044E\u0442\u0441\u044F `SONET_GROUP`\n(\u0433\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442), `CRM`, `CALENDAR`, `MAIL`, `VIDEOCONF`, `CALL`:\n\n```jsonc\nbitrix_entity_chat { "entityType": "TASKS_TASK", "entityId": 28373 } // \u2192 chatId\n```\n\n**\u0411. \u0427\u0435\u0440\u0435\u0437 \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447** (\u0441\u0435\u043A\u0446\u0438\u044F `tasksTask`; \u0432 `bitrix_chats_recent` \u0438\u0445 \u041D\u0415\u0422):\n\n```jsonc\nbitrix_recent_load { "section": "tasksTask" } // \u2192 \u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447 \u0441 chatId/dialogId\nbitrix_recent_tail { "section": "tasksTask", "lastMessageDate": "2026-06-29T17:25:38+03:00" }\nbitrix_chat_load { "dialogId": "chat38849" } // \u0438\u043B\u0438 { "chatId": 38849 }\n```\n\n**\u0412. \u041F\u043E\u0438\u0441\u043A\u043E\u043C \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0437\u0430\u0434\u0430\u0447\u0438** (\u0437\u0430\u043F\u0430\u0441\u043D\u043E\u0439, \u043C\u0430\u0442\u0447 \u043F\u043E \u0442\u0435\u043A\u0441\u0442\u0443):\n`bitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" }`\n\n**\u0427\u0430\u0442 \u041F\u0420\u041E\u0415\u041A\u0422\u0410 \u0437\u0430\u0434\u0430\u0447\u0438** (\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B, \u043D\u0435 \u0441\u0430\u043C\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u2014 \u0447\u0435\u0440\u0435\u0437 `GROUP_ID`:\n\n```jsonc\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","GROUP_ID"] } }\nbitrix_project_get { "groupId": 15 } // \u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID\nbitrix_chat_get_dialog_id { "externalId": "sg15" } // \u043B\u0438\u0431\u043E \u0440\u0435\u0437\u043E\u043B\u0432 dialogId \u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u044B \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E\n```\n\n### 5.3. \u041F\u043E\u0438\u0441\u043A \u0447\u0430\u0442\u0430 / \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\n\n`bitrix_entity_search` (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C `ui.entityselector.doSearch`) \u0441\u0430\u043C \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0438\u0430\u043B\u043E\u0433\n`IM_CHAT_SEARCH` \u0438 `searchQuery` \u0438\u0437 \u0441\u0442\u0440\u043E\u043A\u0438. \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438: \u043B\u044E\u0434\u0438 \u2014 `user.get`/`user.search`, \u0447\u0430\u0442\u044B \u2014\n`im.recent.list` + \u0444\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u044F \u0443 \u0441\u0435\u0431\u044F.\n\n```jsonc\nbitrix_entity_search { "query": "\u0434\u043C\u0438\u0442\u0440\u0438\u0439" } // \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0447\u0430\u0442\u043E\u0432/\u0434\u0438\u0430\u043B\u043E\u0433\u043E\u0432\nbitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" } // \u0441\u0440\u0435\u0434\u0438 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447\nbitrix_user_get { "userId": 11 } // \u0440\u0435\u0437\u043E\u043B\u0432 authorId \u2192 \u0438\u043C\u044F\n```\n\n### 5.4. \u0421\u043E\u0437\u0432\u043E\u043D: \u0440\u0435\u0437\u044E\u043C\u0435, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430, \u0437\u0430\u043F\u0438\u0441\u044C\n\nAI-\u0430\u043D\u0430\u043B\u0438\u0437 \u0437\u0432\u043E\u043D\u043A\u0430 (BitrixGPT Follow-Up) \u0436\u0438\u0432\u0451\u0442 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043D\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0435\u043D\u043D\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 `/call/detail/<callId>`\n\u2014 JSON-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u0430 \u043F\u043E\u0434 \u043D\u0435\u0439 \u043D\u0435\u0442, \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E REST \u0434\u043B\u044F \u0432\u0438\u0434\u0435\u043E\u0432\u0441\u0442\u0440\u0435\u0447 \u0442\u043E\u0436\u0435 (\u{1F4D6} \u0442\u043E\u043B\u044C\u043A\u043E \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0438\u044F `voximplant.*`\n\u0438 `crm.activity.call.getTranscript`). \u041C\u043E\u0441\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u044D\u0442\u0443 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u0451 \u0432 \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 JSON.\n\n**1) \u041D\u0430\u0439\u0442\u0438 \u0437\u0432\u043E\u043D\u043A\u0438.** \u0421\u0435\u0440\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u043F\u043E\u0438\u0441\u043A\u0430 \u0437\u0432\u043E\u043D\u043A\u043E\u0432 \u043F\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0443 \u043D\u0435\u0442 \u2014 \u0438\u0449\u0435\u043C \u0432 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u043C \u0447\u0430\u0442\u0435: \u0437\u0432\u043E\u043D\u043E\u043A\n\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0441 `params.COMPONENT_PARAMS = { messageType: "START", callId }`.\n\n```jsonc\nbitrix_chat_calls { "chatId": 9876 } // \u0447\u0430\u0442 \u043F\u0440\u043E\u0435\u043A\u0442\u0430: bitrix_project_get \u2192 CHAT_ID\nbitrix_chat_calls { "chatId": 9876, "maxPages": 20, "beforeId": 5001 } // \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0432\u0433\u043B\u0443\u0431\u044C\n```\n\n\u041E\u0442\u0432\u0435\u0442: `calls[] { callId, startedAt, startedBy, startMessageId, events[], summaryMessageId }` \u043F\u043B\u044E\u0441\n`scannedPages` / `oldestScannedMessageId` / **`reachedHistoryStart`** \u2014 \u0435\u0441\u043B\u0438 \u043E\u043D `false`, \u0438\u0441\u0442\u043E\u0440\u0438\u044F\n\u0434\u043E\u0447\u0438\u0442\u0430\u043D\u0430 \u041D\u0415 \u0434\u043E \u043A\u043E\u043D\u0446\u0430, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0441 `beforeId: <oldestScannedMessageId>`.\n\n**2) \u0412\u0437\u044F\u0442\u044C \u0432\u0441\u0451 \u043F\u043E \u0437\u0432\u043E\u043D\u043A\u0443.**\n\n```jsonc\nbitrix_call_detail { "callId": 4242 } // \u0432\u0441\u0451; \u0434\u043B\u0438\u043D\u043D\u0430\u044F \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0443\u0435\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043B\nbitrix_call_detail { "callId": 4242, "transcript": "inline" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043F\u0440\u044F\u043C\u043E \u0432 \u043E\u0442\u0432\u0435\u0442\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "none" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430 \u0432\u043E\u0432\u0441\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "file" } // \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043B, \u0434\u0430\u0436\u0435 \u043A\u043E\u0440\u043E\u0442\u043A\u0430\u044F\n```\n\n| \u041F\u043E\u043B\u0435 \u043E\u0442\u0432\u0435\u0442\u0430 | \u0427\u0442\u043E \u0432\u043D\u0443\u0442\u0440\u0438 |\n|---|---|\n| `title`, `agenda`, `meetingType` | \u0442\u0435\u043C\u0430, \u0432\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u0435, \u0442\u0438\u043F \u0432\u0441\u0442\u0440\u0435\u0447\u0438 (\xAB\u0421\u0442\u0430\u0442\u0443\u0441-\u0432\u0441\u0442\u0440\u0435\u0447\u0430\xBB) |\n| `date`, `interval`, `duration` | \xAB23 \u0438\u044E\u043B\u044F, 15:46\xBB, \xAB15:46 - 16:51\xBB, \xAB1 \u0447 4 \u043C\u0438\u043D\xBB |\n| `efficiency`, `qualityChecklist[]` | \u043E\u0446\u0435\u043D\u043A\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u0432 % \u0438 \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u0438 `{ ok, text }` |\n| `participants[]` | `{ id, name, talkTimePercent, talkTime, efficiency, metrics[], insight }` |\n| `overview`, `chapters[]` | \u043E\u0431\u0449\u0435\u0435 \u0440\u0435\u0437\u044E\u043C\u0435 \u0438 \u0433\u043B\u0430\u0432\u044B `{ from, to, title, text }` \u0441 \u0442\u0430\u0439\u043C\u043A\u043E\u0434\u0430\u043C\u0438 |\n| `decisions[]`, `tasks[]` | \xAB\u0447\u0442\u043E \u0440\u0435\u0448\u0438\u043B\u0438\xBB \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 `{ assigneeId, assignee, text }` |\n| `transcript[]`, `transcriptCount` | \u0440\u0435\u043F\u043B\u0438\u043A\u0438 `{ from, to, speakerId, speaker, text }` |\n| `recording` | `{ path, url, trackId }` \u2014 \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C, \u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F `bitrix_call_recording` (\xA75.5) |\n\n**\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0434\u043B\u0438\u043D\u043D\u043E\u0433\u043E \u0437\u0432\u043E\u043D\u043A\u0430 \u043D\u0435 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435.** \u0423 \u0447\u0430\u0441\u043E\u0432\u043E\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u043E\u043D\u0430 \u0434\u0430\u0451\u0442 ~70 \u041A\u0411 \u0438\u0437 80 \u041A\u0411, \u043F\u043E\u044D\u0442\u043E\u043C\u0443\n\u0441\u0432\u044B\u0448\u0435 ~20 \u041A\u0411 (\u0440\u0435\u0436\u0438\u043C `"auto"` = \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435) \u043F\u0438\u0448\u0435\u0442\u0441\u044F \u043D\u0430 \u0434\u0438\u0441\u043A, \u0430 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F `transcript: []`,\n`transcriptCount` \u0438 **`files`**: `files.transcript` \u2014 `call-<id>-transcript.txt`, \u0433\u0434\u0435 \u0441\u0442\u0440\u043E\u043A\u0430 = \u0440\u0435\u043F\u043B\u0438\u043A\u0430\n(`[11:10\u201411:24] \u0413\u0435\u043D\u0440\u0438\u0445 \u0411\u043E\u0433\u0430\u0446\u043A\u0438\u0439: \u2026`), \u0435\u0451 \u0443\u0434\u043E\u0431\u043D\u043E **\u0433\u0440\u0435\u043F\u0430\u0442\u044C** (\u043D\u0430\u0439\u0434\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0441\u0430\u043C\u0430 \u043D\u0435\u0441\u0451\u0442 \u0442\u0430\u0439\u043C\u043A\u043E\u0434 \u0438\n\u0441\u043F\u0438\u043A\u0435\u0440\u0430); `files.json` \u2014 \u043F\u043E\u043B\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u043E\u0439. \u041E\u0431\u0430 \u0444\u0430\u0439\u043B\u0430 \u2014 \u043A\u0435\u0448 \u0437\u0432\u043E\u043D\u043A\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u044E\u0442\u0441\u044F.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **`speakerId`** \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u043F\u043E \u0438\u043C\u0435\u043D\u0438 \u0438\u0437 \u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0430\u043D\u0430\u043B\u0438\u0437\u0430; \u043A\u0442\u043E \u0433\u043E\u0432\u043E\u0440\u0438\u043B \u043C\u0430\u043B\u043E \u0438 \u0432 \u043D\u0435\u0451 \u043D\u0435 \u043F\u043E\u043F\u0430\u043B \u2014 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\n `speakerId: null`, \u043D\u043E \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F \u0432 `participants` \u0441 `id: null`.\n- **`assigneeId` \u0437\u0430\u0434\u0430\u0447\u0438** \u2014 \u0443\u043F\u043E\u043C\u044F\u043D\u0443\u0442\u044B\u0439 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C, \u0430 \u041D\u0415 id \u0441\u043C\u043E\u0442\u0440\u044F\u0449\u0435\u0433\u043E.\n- \u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0437\u0432\u043E\u043D\u043A\u0443 / \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u0441\u0435\u0441\u0441\u0438\u044F \u2192 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0432\u0435\u0440\u043D\u0451\u0442 \u0432\u043D\u044F\u0442\u043D\u0443\u044E \u043E\u0448\u0438\u0431\u043A\u0443 (\u043F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u0434\u0430\u0451\u0442 HTML \u043B\u043E\u0433\u0438\u043D\u0430).\n\n### 5.5. \u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0444\u0430\u0439\u043B (\u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430, \u0444\u0430\u0439\u043B \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u043F\u0438\u0441\u044C \u0437\u0432\u043E\u043D\u043A\u0430)\n\n\u0421\u0441\u044B\u043B\u043A\u0438 \u043F\u043E\u0440\u0442\u0430\u043B \u043C\u0438\u043D\u0442\u0438\u0442 \u0438 \u043F\u043E\u0434\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442 \u0441\u0430\u043C, \u043D\u043E \u043F\u043E\u0434\u043F\u0438\u0441\u044C \u041D\u0415 \u0437\u0430\u043C\u0435\u043D\u044F\u0435\u0442 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u044E \u2014 \u043A\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u0432\n\u0441\u0435\u0441\u0441\u0438\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F.\n\n```jsonc\n// \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430: \u0441\u0441\u044B\u043B\u043A\u0443 \u0431\u0435\u0440\u0451\u043C \u0438\u0437 files[].urlDownload \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 bitrix_chat_load\nbitrix_file_download { "url": "https://<\u043F\u043E\u0440\u0442\u0430\u043B>/bitrix/services/main/ajax.php?action=disk.api.file.download&\u2026" }\nbitrix_call_recording { "callId": 4242 } // \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C \u0441\u043E\u0437\u0432\u043E\u043D\u0430 (\u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430\u0439\u0434\u0451\u0442 \u0441\u0430\u043C)\nbitrix_file_download { "url": "\u2026", "savePath": "/tmp/photo.png", "overwrite": true }\n```\n\n\u041E\u0442\u0432\u0435\u0442 \u2014 **\u043F\u0443\u0442\u044C, \u0430 \u043D\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435**: `{ path, bytes, contentType, fileName }` (\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044B \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u044E\u0442 \u0432\n\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442). \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0444\u0430\u0439\u043B \u043B\u043E\u0436\u0438\u0442\u0441\u044F \u0432 `~/.bitrix24-mcp-bridge/downloads/`; `savePath` \u0431\u0435\u0437 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043E `/`\n\u0442\u0440\u0430\u043A\u0442\u0443\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0438\u043C\u044F \u0432\u043D\u0443\u0442\u0440\u0438 \u044D\u0442\u043E\u0439 \u043F\u0430\u043F\u043A\u0438. \u041F\u043E\u0442\u043E\u043B\u043E\u043A \u2014 512 \u041C\u0411.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **\u0413\u0440\u0430\u043D\u0438\u0446\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u2014 origin**: \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0441 origin \u0441\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n- **\u0418\u043C\u044F \u0434\u0430\u0451\u0442 \u043F\u043E\u0440\u0442\u0430\u043B** (`Content-Disposition`), \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0431\u0435\u0437 `savePath` \u0443\u0433\u0430\u0434\u044B\u0432\u0430\u0442\u044C \u0435\u0433\u043E \u043D\u0435 \u043D\u0443\u0436\u043D\u043E.\n- **\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0435 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435** \u0442\u043E\u0433\u043E \u0436\u0435 \u0444\u0430\u0439\u043B\u0430 \u043F\u0430\u0434\u0430\u0435\u0442 \u0441 `already exists` \u2014 \u043F\u0435\u0440\u0435\u0434\u0430\u0439 `overwrite: true`.\n\n---\n\n\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 \u043D\u043E\u0432\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438, \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442 (`bodyType`, `responseType`, path-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B) \u0438\n\u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043F\u0440\u0430\u0432\u043E\u043A \u0432 \u0436\u0438\u0432\u043E\u0439 daemon \u2014 `docs/reconnaissance.md`.\n' ? '# Bitrix24 API notes (reverse-engineered)\n\n\u041A\u0430\u043A \u0430\u0433\u0435\u043D\u0442\u0443 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0441 Bitrix24 \u0447\u0435\u0440\u0435\u0437 \u044D\u0442\u043E\u0442 \u043C\u043E\u0441\u0442: \u0444\u043E\u0440\u043C\u0430\u0442 `params`, \u0438\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439, \u0433\u043E\u0442\u043E\u0432\u044B\u0435 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0432\u044B\u0437\u043E\u0432\u043E\u0432.\n\n\u0414\u0432\u0435 \u043F\u043E\u0432\u0435\u0440\u0445\u043D\u043E\u0441\u0442\u0438 API. **\u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0439 REST** (`tasks.task.*`, `im.recent.list`, `im.user.get`, `im.chat.get`,\n`socialnetwork.api.workgroup.*`) \u2014 \u0435\u0441\u0442\u044C \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u043E\u043A\u0438, \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043D\u0438\u0445 \u043F\u043E\u043C\u0435\u0447\u0435\u043D\u044B **\u{1F4D6}**\n([`apidocs.bitrix24.com`](https://apidocs.bitrix24.com); \u0430\u0433\u0435\u043D\u0442\u0443 \u0441 MCP context7 \u2014 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\n`/bitrix24/b24restdocs`). **\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0435 ajax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B** (`im.v2.*`, `tasks.v2.*`, `ui.entityselector.*`)\n\u043F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0445 \u0434\u043E\u043A\u043E\u0432 \u043D\u0435 \u0438\u043C\u0435\u044E\u0442 \u2014 \u0432\u0441\u0451 \u043D\u0438\u0436\u0435 \u0434\u043E\u0431\u044B\u0442\u043E \u0436\u0438\u0432\u044B\u043C \u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C; \u043A\u043E\u043D\u0432\u0435\u0440\u0442 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043F\u043E\u043B\u0435\u0439 \u0443 \u043D\u0438\u0445 \u043C\u043E\u0433\u0443\u0442\n\u043E\u0442\u043B\u0438\u0447\u0430\u0442\u044C\u0441\u044F \u043E\u0442 \u{1F4D6}-\u0430\u043D\u0430\u043B\u043E\u0433\u043E\u0432. \u0418\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B \u0434\u043B\u044F \u043E\u0431\u043B\u0430\u0447\u043D\u043E\u0433\u043E Bitrix24; \u043D\u0430 \u0434\u0440\u0443\u0433\u043E\u043C \u043F\u043E\u0440\u0442\u0430\u043B\u0435 \u0441\u0432\u0435\u0440\u044F\u0439\u0441\u044F\n\u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C (`docs/reconnaissance.md`).\n\n---\n\n## 1. \u041A\u0430\u043A \u0432\u044B\u0437\u044B\u0432\u0430\u0442\u044C\n\n- **\u0422\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B** (`bitrix_tasks_list`, `bitrix_task_get`, `bitrix_chat_load`, \u2026) \u2014\n \u043E\u0431\u0451\u0440\u0442\u043A\u0438 \u0441 \u0440\u0430\u0437\u0443\u043C\u043D\u044B\u043C\u0438 \u0434\u0435\u0444\u043E\u043B\u0442\u0430\u043C\u0438; \u0438\u0445 \u043F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0432\u0438\u0434\u043D\u044B \u0441\u0440\u0435\u0434\u0438 MCP-\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432. \u0422\u043E\u0447\u043D\u0430\u044F\n \u0432\u044B\u0431\u043E\u0440\u043A\u0430 \u2014 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u043C `params`: \u043E\u043D \u043C\u0435\u0440\u0436\u0438\u0442\u0441\u044F **\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u043C** \u0438 \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0434\u0435\u0444\u043E\u043B\u0442\u044B.\n- **`bitrix_call { name, params }`** \u2014 \u043B\u044E\u0431\u043E\u0435 \u0438\u043C\u044F \u0438\u0437 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 (`actions.json`), `params` \u0432 \u043D\u0430\u0442\u0438\u0432\u043D\u043E\u043C\n \u0444\u043E\u0440\u043C\u0430\u0442\u0435 Bitrix (\xA73). \u041F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438\u043C\u0451\u043D \u043E\u0442\u0434\u0430\u0451\u0442 \u0441\u0430\u043C `bitrix_call` \u0432 \u0441\u0432\u043E\u0451\u043C \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0438.\n- \u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u043C\u043E\u0436\u0435\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C **\u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0435** \u0432\u044B\u0437\u043E\u0432\u044B: \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u0437\u0430\u043F\u0438\u0441\u0438 = \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0432\u044B\u0437\u0432\u0430\u0442\u044C. \u042D\u0442\u043E \u043D\u0435 \u0440\u0435\u0436\u0438\u043C\n \xAB\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435\xBB.\n- \u0423 \u043E\u0431\u0451\u0440\u0442\u043E\u043A \u0435\u0441\u0442\u044C \u0434\u0435\u0444\u043E\u043B\u0442\u044B (\u043D\u0430\u043F\u0440. `bitrix_tasks_list` \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 `{"ID":"desc"}`), \u0443 `bitrix_call` \u0438\u0445 \u043D\u0435\u0442 \u2014\n \u043E\u0434\u0438\u043D \u0438 \u0442\u043E\u0442 \u0436\u0435 \u0444\u0438\u043B\u044C\u0442\u0440 \u0434\u0430\u0441\u0442 \u0440\u0430\u0437\u043D\u044B\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B. \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0448\u044C \u0432\u044B\u0434\u0430\u0447\u0438 \u2014 \u0437\u0430\u0434\u0430\u0432\u0430\u0439 `order` \u044F\u0432\u043D\u043E.\n- \u041E\u0442\u0432\u0435\u0442 `invalid_csrf` / `invalid_authentication` = \u0441\u0435\u0441\u0441\u0438\u044F \u043F\u043E\u0440\u0442\u0430\u043B\u0430 \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u2192 \u043F\u0435\u0440\u0435\u043B\u043E\u0433\u0438\u043D\u044C\u0441\u044F \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n \u043D\u0430 \u0432\u043A\u043B\u0430\u0434\u043A\u0435 \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n\n---\n\n## 2. \u0424\u043E\u0440\u043C\u0430\u0442 \u043E\u0442\u0432\u0435\u0442\u0430\n\nAjax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B (`/bitrix/services/main/ajax.php`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442 HTTP 200 \u0441 \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u043E\u043C:\n\n```jsonc\n{ "status": "success" | "error",\n "data": { ... },\n "errors": [] } // \u041F\u0423\u0421\u0422\u041E\u0419 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u0438 \u0443\u0441\u043F\u0435\u0445\u0435! (\u0432 JS [] \u2014 truthy)\n```\n\n\u0423\u0441\u043F\u0435\u0445 = `status:"success"` \u0438/\u0438\u043B\u0438 **\u043F\u0443\u0441\u0442\u043E\u0439** `errors`. \u041D\u0435\u043F\u0443\u0441\u0442\u043E\u0439 `errors` / `status:"error"` / top-level\n`error` \u2014 \u0440\u0435\u0430\u043B\u044C\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 (\u043C\u043E\u0441\u0442 \u043C\u0430\u043F\u043F\u0438\u0442 \u0435\u0451 \u0432 `ok:false`). REST-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u044B (`/rest/*.json`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442\n\u0438\u043D\u0430\u0447\u0435: `{ "result": \u2026, "next", "total", "time" }` \u2014 \u0431\u0435\u0437 `errors`.\n\n---\n\n## 3. \u041A\u0430\u0442\u0430\u043B\u043E\u0433: \u0438\u043C\u044F \u2192 action \u2192 params\n\n\u0424\u043E\u0440\u043C\u0430 `params` \u0440\u0430\u0437\u043B\u0438\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u043E \u043C\u0435\u0442\u043E\u0434\u0443: \u0433\u0434\u0435-\u0442\u043E \u043F\u043B\u043E\u0441\u043A\u043E, \u0433\u0434\u0435-\u0442\u043E \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E, \u0433\u0434\u0435-\u0442\u043E \u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E \u0432 `params[\u2026]` \u2014\n\u043A\u043E\u043B\u043E\u043D\u043A\u0430 \xABparams\xBB \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0442\u043E\u0447\u043D\u0443\u044E \u0444\u043E\u0440\u043C\u0443 (\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043B\u0430 \u043C\u043E\u0441\u0442 \u0431\u0435\u0440\u0451\u0442 \u043D\u0430 \u0441\u0435\u0431\u044F).\n\n| \u0418\u043C\u044F (`bitrix_call`) | action / endpoint | params | \u041F\u0430\u0433\u0438\u043D\u0430\u0446\u0438\u044F |\n|---|---|---|---|\n| `tasks.list` | `tasks.task.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `filter{RESPONSIBLE_ID,REAL_STATUS,GROUP_ID,\u2026}`, `select[]`, `order{}` | **`PAGEN_1`** \u2014 \u043D\u043E\u043C\u0435\u0440 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (1, 2, 3\u2026), \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 = 20 \u0437\u0430\u0434\u0430\u0447; `start` **\u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442** (\u0432\u0435\u0440\u043D\u0451\u0442 \u0442\u0443 \u0436\u0435 \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443) |\n| `task.get` | `tasks.task.get` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `taskId`, `select[]` | \u2014 |\n| `task.v2.get` | `tasks.v2.Task.get` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.scrum.info` | `tasks.v2.Scrum.getTaskInfo` | `{"taskId":N}` | \u2014 |\n| `task.files` | `tasks.v2.File.listObjects` | `{"ids":[N,\u2026]}` | \u2014 |\n| `task.views.count` | `tasks.v2.Task.View.User.count` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.subtasks` | `tasks.v2.Task.Relation.Child.list` | `{"taskId":N,"withIds":true,"navigation":{"size":N}}` | `navigation` |\n| `task.related` | `tasks.v2.Task.Relation.Related.list` | \u043A\u0430\u043A `task.subtasks` | `navigation` |\n| `projects.list` | `socialnetwork.api.workgroup.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `select[]`, `order{}`, `filter{}` | `start` (\u0448\u0430\u0433 50; `start=(N-1)*50`, `-1` \u2014 \u043E\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 `total`) \u{1F4D6} |\n| `projects.get` | `socialnetwork.api.workgroup.get` | **\u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E**: `params[groupId]`, `params[select][]` | \u2014 |\n| `chats.recent` | `/rest/im.recent.list.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `LIMIT`, `SKIP_OPENLINES`, `UNREAD_ONLY` | `LIMIT` |\n| `recent.load` | `im.v2.Recent.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[recentSection]` (`tasksTask`/`collab`/\u2026), `filter[unread]`, `filter[parentId]` | `recent.tail` |\n| `recent.tail` | `im.v2.Recent.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[lastMessageDate]` (\u043A\u0443\u0440\u0441\u043E\u0440), `filter[recentSection]` | `filter[lastMessageDate]` |\n| `chat.load` | `im.v2.Chat.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `dialogId`\\|`chatId`, `messageLimit` | \u2014 |\n| `chat.dialogId` | `im.v2.Chat.getDialogId` | \u043F\u043B\u043E\u0441\u043A\u043E: `externalId` (\u043D\u0430\u043F\u0440. `"sg"+groupId`) | \u2014 |\n| `chat.messages` | `im.v2.Chat.Message.list` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit` | \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u2014 \u043D\u0430\u0437\u0430\u0434 **\u043D\u0435 \u043B\u0438\u0441\u0442\u0430\u0435\u0442**, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 `chat.messages.tail` |\n| `chat.messages.tail` | `im.v2.Chat.Message.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit`, `filter[lastId]`, `order[id]` | `filter[lastId]` (\xA75.1) |\n| `chat.message.read` | `im.v2.Chat.Message.read` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `ids[]`, `actionUuid` | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `chat.read.all` | `im.v2.Chat.readAll` | \u0431\u0435\u0437 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `im.user.get` | `/rest/im.user.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ID` | \u2014 |\n| `im.chat.get` | `/rest/im.chat.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ENTITY_TYPE`, `ENTITY_ID` (\u043D\u0430\u043F\u0440. `TASKS_TASK`+taskId) | \u2014 |\n| `entityselector.load` | `ui.entityselector.load` | `{"dialog":{entities,preselectedItems,\u2026}}` | \u2014 |\n| `entityselector.search` | `ui.entityselector.doSearch` | `{"dialog":{\u2026},"searchQuery":{"query":"\u2026","queryWords":["\u2026"]}}` | \u2014 |\n| `call.detail` | `GET /call/detail/{callId}` | `callId` (\u043F\u043E\u0434\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0432 \u043F\u0443\u0442\u044C), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` \u2192 HTML | \u0441\u043C. \xA75.4 |\n\n---\n\n## 4. \u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A \u043F\u043E\u043B\u0435\u0439\n\n**\u0417\u0430\u0434\u0430\u0447\u0430** (`tasks.task.*`) \u2014 \u043F\u043E\u043B\u044F \u0434\u043B\u044F `select`/`filter` \u0432 UPPER_CASE: `ID`, `TITLE`, `DESCRIPTION`,\n`STATUS`, `REAL_STATUS`, `RESPONSIBLE_ID`, `CREATED_BY`, `CREATED_DATE`, `CHANGED_DATE`, `DEADLINE`,\n`CLOSED_DATE`, `PRIORITY`, `GROUP_ID`, `TAGS`, `TIME_ESTIMATE`, **`CHAT_ID`** (id \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F\n\u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u043F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432\u0435\u0440 `taskId \u2192 chatId`, \xA75.2), `UF_*`. \u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u0434\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442 \u043E\u0431\u044A\u0435\u043A\u0442\u044B `group`,\n`responsible`, `creator`, `action`.\n\u{1F4D6} (`tasks.task.get`/`list`) \u2014 \u0441\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E: `parentId`, `stageId`, `sprintId`, `backlogId`,\n`commentsCount`, `timeSpentInLogs`, `favorite`, `flowId`, `mark`, `accomplices[]`, `auditors[]`,\n`checklist{}`, `subStatus`; \u0432 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u043C REST-\u043E\u0442\u0432\u0435\u0442\u0435 \u043F\u043E\u043B\u044F \u043F\u0440\u0438\u0445\u043E\u0434\u044F\u0442 **camelCase**, \u0430 \u0432 `select`/`filter`\n\u043E\u043D\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **UPPER_CASE**. \u0414\u043E\u043F. \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u2014 \u0444\u043B\u0430\u0433\u0430\u043C\u0438 `params{WITH_TIMER_INFO, WITH_RESULT_INFO,\nWITH_PARSED_DESCRIPTION}`.\n\n**\u0421\u0442\u0430\u0442\u0443\u0441\u044B** (`REAL_STATUS` \u2014 \xAB\u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435\xBB \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435): `1` \u041D\u043E\u0432\u0430\u044F \xB7 `2` \u0416\u0434\u0451\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \xB7\n`3` \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \xB7 `4` \u0416\u0434\u0451\u0442 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044F \xB7 `5` \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430 \xB7 `6` \u041E\u0442\u043B\u043E\u0436\u0435\u043D\u0430 \xB7 `7` \u041E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0430. \u041F\u043E\u043B\u0435 `STATUS`\n\u043F\u043E\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E \u043D\u0435\u0441\u0451\u0442 **\u043C\u0435\u0442\u0430-\u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F** \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F (\u043F\u043E\u0447\u0442\u0438 \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430 / \u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u0430 / \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430),\n\u043F\u043E\u044D\u0442\u043E\u043C\u0443 \xAB\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043B\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0435\u0439\u0447\u0430\u0441\xBB \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E **`REAL_STATUS`** (\u043D\u0430\u043F\u0440. `{"REAL_STATUS":3}`) \u{1F4D6}.\n\u0410\u0441\u0438\u043C\u043C\u0435\u0442\u0440\u0438\u044F: \u0432 **`filter`** \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 `REAL_STATUS`, \u0430 \u0432 **`select`** \u0435\u0433\u043E \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0431\u0435\u0441\u043F\u043E\u043B\u0435\u0437\u043D\u043E \u2014 \u043F\u043E\u043B\u0435 \u043C\u043E\u043B\u0447\u0430\n\u043D\u0435 \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F; \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435, \u043F\u0440\u043E\u0441\u0438 `select:["STATUS"]` \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043A\u043B\u044E\u0447 `status` \u0441\u043E\n\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0442\u043E\u0439 \u0436\u0435 \u0448\u043A\u0430\u043B\u0435 1..7 (\u0443 \u043E\u0431\u0451\u0440\u0442\u043A\u0438 `bitrix_tasks_list` \u043E\u043D \u0443\u0436\u0435 \u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u043C `select`).\n\n**\u0424\u0438\u043B\u044C\u0442\u0440 `tasks.task.list`** \u2014 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0434 \u0438\u043C\u0435\u043D\u0435\u043C \u043F\u043E\u043B\u044F: `!` (\u043D\u0435 \u0440\u0430\u0432\u043D\u043E / \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u044C),\n`<`, `<=`, `>`, `>=`, `%` (LIKE-\u043F\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0430). \u041D\u0430\u043F\u0440. `{"!REAL_STATUS":5}` \u2014 \u0432\u0441\u0435 **\u043D\u0435\u0437\u0430\u043A\u0440\u044B\u0442\u044B\u0435**,\n`{">=DEADLINE":"2026-07-01"}`, `{"%TITLE":"\u043A\u0430\u0440\u0442\u0430"}`. \u0424\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u043E\u043B\u044F: `ID`, `PARENT_ID`, `GROUP_ID`,\n`CREATED_BY`, `RESPONSIBLE_ID`, `ACCOMPLICE`, `AUDITOR`, `REAL_STATUS`, `STATUS`, `PRIORITY`, `TAG`,\n`STAGE_ID`, `SPRINT_ID`, `BACKLOG_ID`, `DEADLINE`, `*_DATE`, `UF_CRM_TASK`.\n\n> **\xAB\u041C\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438\xBB \u2260 \u0442\u043E\u043B\u044C\u043A\u043E `RESPONSIBLE_ID`.** \u0420\u043E\u043B\u0438 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u044C\u043D\u044B: \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439\n> (`RESPONSIBLE_ID`), \u0441\u043E\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C (`ACCOMPLICE`), \u043D\u0430\u0431\u043B\u044E\u0434\u0430\u0442\u0435\u043B\u044C (`AUDITOR`), \u043F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\n> (`CREATED_BY`); \u0435\u0434\u0438\u043D\u043E\u0433\u043E \xAB\u043B\u044E\u0431\u0430\u044F \u0440\u043E\u043B\u044C\xBB \u043F\u043E\u043B\u044F \u0432 `list` \u043D\u0435\u0442 \u2014 \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0431\u0440\u0430\u0442\u044C **\u0432\u0441\u0435** \u0441\u0432\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\n> \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 (\u043C\u0438\u043D\u0438\u043C\u0443\u043C `RESPONSIBLE_ID` + `ACCOMPLICE`) \u0438 **\u0434\u0435\u0434\u0443\u043F\u043B\u0438\u0446\u0438\u0440\u0443\u0439 \u043F\u043E `id`** \u2014\n> \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0430\u0441\u0442\u043E \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u043E\u043B\u0435\u0439. \u0412 **`filter`** \u0440\u043E\u043B\u0438 \u0432 **\u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** \u0447\u0438\u0441\u043B\u0435\n> (`ACCOMPLICE`/`AUDITOR`), \u0432 **`select`** \u2014 \u0432\u043E **\u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** (`ACCOMPLICES`/`AUDITORS`).\n\n> **Scrum-\u0437\u0430\u0434\u0430\u0447\u0438 (\u0441\u043F\u0440\u0438\u043D\u0442\u044B).** \u041F\u043E\u043B\u0435 `SPRINT_ID` \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0436\u0451\u0441\u0442\u043A\u0438\u0439 `filter[SPRINT_ID]` \u043C\u043E\u0433\u0443\u0442 \u0440\u0430\u0441\u0445\u043E\u0434\u0438\u0442\u044C\u0441\u044F:\n> \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F \u0437\u0430 \u0441\u043F\u0440\u0438\u043D\u0442\u043E\u043C \u043F\u043E \u0441\u0432\u043E\u0435\u043C\u0443 \u043F\u043E\u043B\u044E, \u043D\u043E \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u0432\u044B\u0431\u043E\u0440\u043A\u0443 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 (\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u0430 \u0432 \u0431\u044D\u043A\u043B\u043E\u0433\n> \u0438\u043B\u0438 \u0432 \u0438\u043D\u043E\u0439 stage). \u0415\u0441\u043B\u0438 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 \xAB\u043C\u0430\u043B\u043E\u0432\u0430\u0442\u043E\xBB \u2014 \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0431\u0435\u0437 \u043D\u0435\u0433\u043E \u0438 \u043E\u0442\u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E\n> `SPRINT_ID`/`STAGE_ID` \u0443 \u0441\u0435\u0431\u044F. \u041C\u0435\u0442\u043E\u0434\u0430 \xAB\u043A\u043E\u043B\u043E\u043D\u043A\u0438 scrum-\u0434\u043E\u0441\u043A\u0438\xBB (`STAGE_ID` \u2192 \u0438\u043C\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0438) \u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0435 \u043D\u0435\u0442.\n\n**\u0413\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442 \u2014 \u0441\u043F\u0438\u0441\u043E\u043A** (`workgroup.list`): `ID`, `NAME`, `DESCRIPTION`, `NUMBER_OF_MEMBERS`,\n`OWNER_ID`, `DATE_CREATE`, `PROJECT` (Y=\u043F\u0440\u043E\u0435\u043A\u0442/N=\u0433\u0440\u0443\u043F\u043F\u0430), `TYPE`; **\u0431\u0435\u0437 `select` \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E `ID`**.\n\u{1F4D6} \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435: `ID`, `NAME`, `OWNER_ID`, `ACTIVE`, `VISIBLE`, `OPENED`, `CLOSED`, `PROJECT`,\n`SUBJECT_ID`, `SITE_ID`, `DATE_CREATE`, `DATE_UPDATE`, `DATE_ACTIVITY`; \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u044B \u0444\u0438\u043B\u044C\u0442\u0440\u0430\n`>= > <= < % =% %= !% != !`.\n**\u0413\u0440\u0443\u043F\u043F\u0430 \u2014 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430** (`workgroup.get`): \u043F\u043B\u044E\u0441 `OWNER_DATA`, `SUBJECT_DATA`, `MEMBERS[]`,\n`MODERATOR_MEMBERS[]`, **`CHAT_ID`**, `DIALOG_ID`, `IMAGE_ID`, UF-\u043F\u043E\u043B\u044F.\n\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0439 \u0447\u0430\u0442** (`im.recent.list`): `id` (\u044D\u0442\u043E dialogId: \u0447\u0438\u0441\u043B\u043E = \u044E\u0437\u0435\u0440, `"chat"+N` = \u0447\u0430\u0442), `chat_id`,\n`type` (`user`/`chat`), `title`, `message{id,text,file,author_id,date,status}`, `counter` (\u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445),\n`unread`, `last_id`, `pinned`, `date_update`, `date_last_activity`, `user{\u2026}`,\n`chat{\u2026 entity_type, entity_id, owner, \u2026}`; \u0435\u0441\u0442\u044C \u043B\u0438 \u0435\u0449\u0451 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u2014 `hasMore`/`hasMorePages` \u{1F4D6}.\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u043F\u043E \u0441\u0435\u043A\u0446\u0438\u0438** (`im.v2.Recent.load`): `filter[recentSection]` \u2014 `default` (\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0434\u0438\u0430\u043B\u043E\u0433\u0438),\n**`tasksTask` (\u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447)**, `collab`/`collabDefault`. \u0412\u0433\u043B\u0443\u0431\u044C \u2014 `im.v2.Recent.tail` \u0441 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u043C\n`filter[lastMessageDate]` (ISO-\u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B).\n\n**\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u044E\u0437\u0435\u0440\u0430** (`im.user.get`): `id`, `name`, `first_name`, `last_name`, `avatar`, `work_position`,\n`gender`, `status`, `online` \u2014 \u0440\u0435\u0437\u043E\u043B\u0432 \u0430\u0432\u0442\u043E\u0440\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F (`authorId`) \u0432 \u0438\u043C\u044F.\n\n**\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435** (`im.v2.Chat.Message.*`): `id`, `chatId`, `authorId`, `date`, `text`, `params`, `viewed`;\n\u043E\u0442\u0432\u0435\u0442 \u0442\u0430\u043A\u0436\u0435 \u043D\u0435\u0441\u0451\u0442 `users[]` (\u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438), `additionalMessages[]`, `hasPrevPage`/`hasNextPage`.\n\n---\n\n## 5. \u0421\u0446\u0435\u043D\u0430\u0440\u0438\u0438\n\n```jsonc\n// \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E 55, \u043F\u043E \u0434\u0435\u0434\u043B\u0430\u0439\u043D\u0443, \u0432\u0442\u043E\u0440\u0430\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430\nbitrix_tasks_list { "params": { "filter": {"RESPONSIBLE_ID":55,"REAL_STATUS":2},\n "order": {"DEADLINE":"asc"}, "start": 50 } }\n\n// \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u043C \u043D\u0430\u0431\u043E\u0440\u043E\u043C \u043F\u043E\u043B\u0435\u0439; v2-\u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0430; \u0444\u0430\u0439\u043B\u044B, \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u044B, \u0441\u0432\u044F\u0437\u0438\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","TITLE","DESCRIPTION","TAGS"] } }\nbitrix_task_get_v2 { "taskId": 4229 } // \u2192 { "task": { "id": 4229 } }\nbitrix_call { "name": "task.files", "params": { "ids": [4229] } }\nbitrix_task_subtasks { "taskId": 4229 }\nbitrix_task_related { "taskId": 4229 }\n\n// \u043F\u0440\u043E\u0435\u043A\u0442\u044B \u043F\u043E \u0434\u0430\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F; \u043F\u043E\u043B\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0433\u0440\u0443\u043F\u043F\u044B (\u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID)\nbitrix_projects_list { "params": { "order": {"DATE_CREATE":"desc"} } }\nbitrix_project_get { "groupId": 15 }\n```\n\n### 5.1. \u041C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440 (IM): \u043A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId`\n\n\u0412\u0441\u0451 \u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u2014 **\u0447\u0430\u0442\u044B**: \u043B\u0438\u0447\u043D\u044B\u0435 1-\u043D\u0430-1, \u0433\u0440\u0443\u043F\u043F\u043E\u0432\u044B\u0435 (\u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0432, \u043A\u0430\u043D\u0430\u043B\u043E\u0432) \u0438 **\u0447\u0430\u0442\u044B-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447**.\n\u0427\u0438\u0441\u043B\u043E\u0432\u043E\u0439 **`chatId`** \u2014 \u043A\u043B\u044E\u0447 \u043A\u043E \u0432\u0441\u0435\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F\u043C \u0441 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043C\u0438 (`bitrix_chat_messages`,\n`bitrix_chat_history`, `bitrix_chat_mark_read`); \u043F\u043E\u0447\u0442\u0438 \u043B\u044E\u0431\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0430\u0433\u0435\u043D\u0442\u0430 \u0437\u0434\u0435\u0441\u044C \u2014 \u043D\u0430 \u0448\u0430\u0433\u0435 \u0435\u0433\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F.\n\n**\u0422\u0440\u0438 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u043E\u0434\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430** (\u0433\u043E\u0434\u044F\u0442\u0441\u044F \u0434\u043B\u044F \u0440\u0430\u0437\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439):\n\n| \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 | \u0427\u0442\u043E \u044D\u0442\u043E | \u041F\u0440\u0438\u043C\u0435\u0440 | \u041A\u0443\u0434\u0430 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C |\n|---|---|---|---|\n| `chatId` | \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 id \u0447\u0430\u0442\u0430 | `485` | \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F / \u0438\u0441\u0442\u043E\u0440\u0438\u044F / \u043E\u0442\u043C\u0435\u0442\u043A\u0430 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u043C |\n| `dialogId` | \u0430\u0434\u0440\u0435\u0441 \u0434\u043B\u044F \u041E\u0422\u041A\u0420\u042B\u0422\u0418\u042F: `userId` (\u043B\u0438\u0447\u043D\u044B\u0439 1-\u043D\u0430-1) **\u0438\u043B\u0438** `"chat"+chatId` (\u0433\u0440\u0443\u043F\u043F\u043E\u0432\u043E\u0439) | `11`, `"chat485"` | `bitrix_chat_load` |\n| `externalId` | \u0432\u043D\u0435\u0448\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438 \u2192 \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u0432 `dialogId` | `"sg15"` (\u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u0430 15) | `bitrix_chat_get_dialog_id` |\n\n\u041A\u043B\u044E\u0447\u0435\u0432\u043E\u0435: **\u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u0441 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u043E\u043C = \u0435\u0433\u043E `userId` \u0432 \u0440\u043E\u043B\u0438 `dialogId`** (\u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \xABid \u0447\u0430\u0442\u0430\xBB \u0443 1-\u043D\u0430-1\n\u0437\u043D\u0430\u0442\u044C \u043D\u0435 \u043D\u0443\u0436\u043D\u043E). `bitrix_chat_load` \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 `dialogId` **\u0438\u043B\u0438** `chatId` \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\n\u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 `chatId`** \u2014 \u0434\u0430\u043B\u044C\u0448\u0435 \u043E\u043F\u0435\u0440\u0438\u0440\u0443\u0435\u0448\u044C \u0438\u043C.\n\n**\u041A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId` \u2014 \u043F\u043E \u0446\u0435\u043B\u0438:**\n\n| \u0425\u043E\u0447\u0443 \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442\u2026 | \u0428\u0430\u0433\u0438 |\n|---|---|\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C \u043F\u043E \u0418\u041C\u0415\u041D\u0418** | `bitrix_entity_search { query:"\u0434\u043C\u0438\u0442\u0440\u0438\u0439" }` \u2192 \u0434\u0438\u0430\u043B\u043E\u0433 \u0441 `dialogId` = \u0435\u0433\u043E userId \u2192 `bitrix_chat_load { dialogId }` |\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C, id \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043D** | `bitrix_chat_load { dialogId: <userId> }` (userId \u2014 \u0438\u0437 \u0437\u0430\u0434\u0430\u0447\u0438 `RESPONSIBLE_ID`/`CREATED_BY`, \u0438\u0437 `bitrix_chats_recent`, \u0438\u0437 `bitrix_user_get`) |\n| **\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0417\u0410\u0414\u0410\u0427\u0418** | `bitrix_task_get` \u2192 `CHAT_ID` (\xA75.2) |\n| **\u041F\u0420\u041E\u0415\u041A\u0422\u0410/\u0433\u0440\u0443\u043F\u043F\u044B** | `bitrix_task_get`\u2192`GROUP_ID`\u2192`bitrix_project_get`\u2192`CHAT_ID`; \u043B\u0438\u0431\u043E `bitrix_chat_get_dialog_id { externalId:"sg<groupId>" }` |\n| **\u043D\u0435 \u0437\u043D\u0430\u044E \u0442\u043E\u0447\u043D\u043E, \u043A\u0430\u043A\u043E\u0439** | `bitrix_chats_recent` (\u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435, \u0441\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u044C \u043F\u043E `title`/`user`) \u0438\u043B\u0438 `bitrix_entity_search { query }` |\n\n> \u041F\u043E\u0447\u0435\u043C\u0443 \u043D\u0435 \xAB\u043F\u0440\u043E\u0441\u0442\u043E \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432\xBB: `bitrix_chats_recent` (`im.recent.list`) \u043E\u0442\u0434\u0430\u0451\u0442 \u043B\u0438\u0448\u044C \u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u0438\n> **\u0431\u0435\u0437 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447**. \u0414\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430 \u2014 `bitrix_entity_search`; \u0434\u043B\u044F \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447 \u2014\n> `bitrix_recent_load { section:"tasksTask" }`.\n\n**\u0427\u0438\u0442\u0430\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E.** `bitrix_chat_messages` \u043E\u0442\u0434\u0430\u0451\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443; \u0432\u0433\u043B\u0443\u0431\u044C \u043B\u0438\u0441\u0442\u0430\u0435\u0442\n`bitrix_chat_history` \u043F\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u0443 `beforeId` = \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 id \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (\u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0439,\n\u0443\u043C\u0435\u043D\u044C\u0448\u0430\u044F `beforeId`, \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u0438).\n\n```jsonc\nbitrix_chat_load { "dialogId": 11 } // \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u044E\u0437\u0435\u0440\u0430 11 \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 chatId\nbitrix_chat_history { "chatId": 485, "beforeId": 1861279 }\nbitrix_chat_mark_read { "chatId": 40271, "ids": [1884131] } // \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439; actionUuid \u2014 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u043E\u043C\n```\n\n\u{1F4D6} \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438 \u0447\u0442\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439: `im.dialog.messages.get` (\u0434\u0435\u0444\u043E\u043B\u0442 20, \u043C\u0430\u043A\u0441 50; \u043B\u0438\u0441\u0442\u0430\u043D\u0438\u0435\n`LAST_ID` \u2014 \u0441\u0442\u0430\u0440\u0435\u0435, `FIRST_ID` \u2014 \u043D\u043E\u0432\u0435\u0435); `imbot.v2 chat.getMessageContext` \u2014 \u043E\u0442\u0432\u0435\u0442 `messages[]`\n(oldest\u2192newest) + `users[]` + `hasPrevPage`/`hasNextPage`, \u043F\u043E \u0444\u043E\u0440\u043C\u0435 **\u0441\u043E\u0432\u043F\u0430\u0434\u0430\u0435\u0442** \u0441 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C\u0438\n`im.v2.Chat.Message.*`.\n\n### 5.2. \u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 (\u0447\u0430\u0442) \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438\n\n**\u0410. \u041F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432 \u2014 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E.** `bitrix_task_get` \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `CHAT_ID` \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F (\u0432\u0445\u043E\u0434\u0438\u0442\n\u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u0439 `select` \u{1F4D6}) \u2014 \u044D\u0442\u043E `taskId \u2192 chatId` \u0431\u0435\u0437 \u043F\u043E\u0438\u0441\u043A\u0430 \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0438 \u0431\u0435\u0437 \u043F\u0440\u043E\u043C\u0430\u0445\u0430 \u043F\u043E \u0442\u0451\u0437\u043A\u0430\u043C:\n\n```jsonc\nbitrix_task_get { "taskId": 28373 } // \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 CHAT_ID\nbitrix_chat_load { "chatId": <CHAT_ID> }\nbitrix_chat_history { "chatId": <CHAT_ID>, "beforeId": <\u043C\u0438\u043D id \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B> }\n```\n\n\u041E\u0431\u0449\u0430\u044F \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u2014 **`bitrix_entity_chat`** (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 `im.chat.get`): chatId \u043B\u044E\u0431\u043E\u0433\u043E \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0433\u043E\n\u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u043E \u043F\u0430\u0440\u0435 `entityType`/`entityId`; \u043A\u0440\u043E\u043C\u0435 `TASKS_TASK` \u0442\u0430\u043A \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443\u044E\u0442\u0441\u044F `SONET_GROUP`\n(\u0433\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442), `CRM`, `CALENDAR`, `MAIL`, `VIDEOCONF`, `CALL`:\n\n```jsonc\nbitrix_entity_chat { "entityType": "TASKS_TASK", "entityId": 28373 } // \u2192 chatId\n```\n\n**\u0411. \u0427\u0435\u0440\u0435\u0437 \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447** (\u0441\u0435\u043A\u0446\u0438\u044F `tasksTask`; \u0432 `bitrix_chats_recent` \u0438\u0445 \u041D\u0415\u0422):\n\n```jsonc\nbitrix_recent_load { "section": "tasksTask" } // \u2192 \u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447 \u0441 chatId/dialogId\nbitrix_recent_tail { "section": "tasksTask", "lastMessageDate": "2026-06-29T17:25:38+03:00" }\nbitrix_chat_load { "dialogId": "chat38849" } // \u0438\u043B\u0438 { "chatId": 38849 }\n```\n\n**\u0412. \u041F\u043E\u0438\u0441\u043A\u043E\u043C \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0437\u0430\u0434\u0430\u0447\u0438** (\u0437\u0430\u043F\u0430\u0441\u043D\u043E\u0439, \u043C\u0430\u0442\u0447 \u043F\u043E \u0442\u0435\u043A\u0441\u0442\u0443):\n`bitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" }`\n\n**\u0427\u0430\u0442 \u041F\u0420\u041E\u0415\u041A\u0422\u0410 \u0437\u0430\u0434\u0430\u0447\u0438** (\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B, \u043D\u0435 \u0441\u0430\u043C\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u2014 \u0447\u0435\u0440\u0435\u0437 `GROUP_ID`:\n\n```jsonc\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","GROUP_ID"] } }\nbitrix_project_get { "groupId": 15 } // \u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID\nbitrix_chat_get_dialog_id { "externalId": "sg15" } // \u043B\u0438\u0431\u043E \u0440\u0435\u0437\u043E\u043B\u0432 dialogId \u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u044B \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E\n```\n\n### 5.3. \u041F\u043E\u0438\u0441\u043A \u0447\u0430\u0442\u0430 / \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\n\n`bitrix_entity_search` (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C `ui.entityselector.doSearch`) \u0441\u0430\u043C \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0438\u0430\u043B\u043E\u0433\n`IM_CHAT_SEARCH` \u0438 `searchQuery` \u0438\u0437 \u0441\u0442\u0440\u043E\u043A\u0438. \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438: \u043B\u044E\u0434\u0438 \u2014 `user.get`/`user.search`, \u0447\u0430\u0442\u044B \u2014\n`im.recent.list` + \u0444\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u044F \u0443 \u0441\u0435\u0431\u044F.\n\n```jsonc\nbitrix_entity_search { "query": "\u0434\u043C\u0438\u0442\u0440\u0438\u0439" } // \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0447\u0430\u0442\u043E\u0432/\u0434\u0438\u0430\u043B\u043E\u0433\u043E\u0432\nbitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" } // \u0441\u0440\u0435\u0434\u0438 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447\nbitrix_user_get { "userId": 11 } // \u0440\u0435\u0437\u043E\u043B\u0432 authorId \u2192 \u0438\u043C\u044F\n```\n\n### 5.4. \u0421\u043E\u0437\u0432\u043E\u043D: \u0440\u0435\u0437\u044E\u043C\u0435, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430, \u0437\u0430\u043F\u0438\u0441\u044C\n\nAI-\u0430\u043D\u0430\u043B\u0438\u0437 \u0437\u0432\u043E\u043D\u043A\u0430 (BitrixGPT Follow-Up) \u0436\u0438\u0432\u0451\u0442 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043D\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0435\u043D\u043D\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 `/call/detail/<callId>`\n\u2014 JSON-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u0430 \u043F\u043E\u0434 \u043D\u0435\u0439 \u043D\u0435\u0442, \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E REST \u0434\u043B\u044F \u0432\u0438\u0434\u0435\u043E\u0432\u0441\u0442\u0440\u0435\u0447 \u0442\u043E\u0436\u0435 (\u{1F4D6} \u0442\u043E\u043B\u044C\u043A\u043E \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0438\u044F `voximplant.*`\n\u0438 `crm.activity.call.getTranscript`). \u041C\u043E\u0441\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u044D\u0442\u0443 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u0451 \u0432 \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 JSON.\n\n**1) \u041D\u0430\u0439\u0442\u0438 \u0437\u0432\u043E\u043D\u043A\u0438.** \u0421\u0435\u0440\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u043F\u043E\u0438\u0441\u043A\u0430 \u0437\u0432\u043E\u043D\u043A\u043E\u0432 \u043F\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0443 \u043D\u0435\u0442 \u2014 \u0438\u0449\u0435\u043C \u0432 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u043C \u0447\u0430\u0442\u0435: \u0437\u0432\u043E\u043D\u043E\u043A\n\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0441 `params.COMPONENT_PARAMS = { messageType: "START", callId }`.\n\n```jsonc\nbitrix_chat_calls { "chatId": 9876 } // \u0447\u0430\u0442 \u043F\u0440\u043E\u0435\u043A\u0442\u0430: bitrix_project_get \u2192 CHAT_ID\nbitrix_chat_calls { "chatId": 9876, "maxPages": 20, "beforeId": 5001 } // \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0432\u0433\u043B\u0443\u0431\u044C\n```\n\n\u041E\u0442\u0432\u0435\u0442: `calls[] { callId, startedAt, startedBy, startMessageId, events[], summaryMessageId }` \u043F\u043B\u044E\u0441\n`scannedPages` / `oldestScannedMessageId` / **`reachedHistoryStart`** \u2014 \u0435\u0441\u043B\u0438 \u043E\u043D `false`, \u0438\u0441\u0442\u043E\u0440\u0438\u044F\n\u0434\u043E\u0447\u0438\u0442\u0430\u043D\u0430 \u041D\u0415 \u0434\u043E \u043A\u043E\u043D\u0446\u0430, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0441 `beforeId: <oldestScannedMessageId>`.\n\n**2) \u0412\u0437\u044F\u0442\u044C \u0432\u0441\u0451 \u043F\u043E \u0437\u0432\u043E\u043D\u043A\u0443.**\n\n```jsonc\nbitrix_call_detail { "callId": 4242 } // \u0432\u0441\u0451; \u0434\u043B\u0438\u043D\u043D\u0430\u044F \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0443\u0435\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043B\nbitrix_call_detail { "callId": 4242, "transcript": "inline" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043F\u0440\u044F\u043C\u043E \u0432 \u043E\u0442\u0432\u0435\u0442\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "none" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430 \u0432\u043E\u0432\u0441\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "file" } // \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043B, \u0434\u0430\u0436\u0435 \u043A\u043E\u0440\u043E\u0442\u043A\u0430\u044F\n```\n\n| \u041F\u043E\u043B\u0435 \u043E\u0442\u0432\u0435\u0442\u0430 | \u0427\u0442\u043E \u0432\u043D\u0443\u0442\u0440\u0438 |\n|---|---|\n| `title`, `agenda`, `meetingType` | \u0442\u0435\u043C\u0430, \u0432\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u0435, \u0442\u0438\u043F \u0432\u0441\u0442\u0440\u0435\u0447\u0438 (\xAB\u0421\u0442\u0430\u0442\u0443\u0441-\u0432\u0441\u0442\u0440\u0435\u0447\u0430\xBB) |\n| `date`, `interval`, `duration` | \xAB23 \u0438\u044E\u043B\u044F, 15:46\xBB, \xAB15:46 - 16:51\xBB, \xAB1 \u0447 4 \u043C\u0438\u043D\xBB |\n| `efficiency`, `qualityChecklist[]` | \u043E\u0446\u0435\u043D\u043A\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u0432 % \u0438 \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u0438 `{ ok, text }` |\n| `participants[]` | `{ id, name, talkTimePercent, talkTime, efficiency, metrics[], insight }` |\n| `overview`, `chapters[]` | \u043E\u0431\u0449\u0435\u0435 \u0440\u0435\u0437\u044E\u043C\u0435 \u0438 \u0433\u043B\u0430\u0432\u044B `{ from, to, title, text }` \u0441 \u0442\u0430\u0439\u043C\u043A\u043E\u0434\u0430\u043C\u0438 |\n| `decisions[]`, `tasks[]` | \xAB\u0447\u0442\u043E \u0440\u0435\u0448\u0438\u043B\u0438\xBB \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 `{ assigneeId, assignee, text }` |\n| `transcript[]`, `transcriptCount` | \u0440\u0435\u043F\u043B\u0438\u043A\u0438 `{ from, to, speakerId, speaker, text }` |\n| `recording` | `{ path, url, trackId }` \u2014 \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C, \u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F `bitrix_call_recording` (\xA75.5) |\n\n**\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0434\u043B\u0438\u043D\u043D\u043E\u0433\u043E \u0437\u0432\u043E\u043D\u043A\u0430 \u043D\u0435 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435.** \u0423 \u0447\u0430\u0441\u043E\u0432\u043E\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u043E\u043D\u0430 \u0434\u0430\u0451\u0442 ~70 \u041A\u0411 \u0438\u0437 80 \u041A\u0411, \u043F\u043E\u044D\u0442\u043E\u043C\u0443\n\u0441\u0432\u044B\u0448\u0435 ~20 \u041A\u0411 (\u0440\u0435\u0436\u0438\u043C `"auto"` = \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435) \u043F\u0438\u0448\u0435\u0442\u0441\u044F \u043D\u0430 \u0434\u0438\u0441\u043A, \u0430 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F `transcript: []`,\n`transcriptCount` \u0438 **`files`**: `files.transcript` \u2014 `call-<id>-transcript.txt`, \u0433\u0434\u0435 \u0441\u0442\u0440\u043E\u043A\u0430 = \u0440\u0435\u043F\u043B\u0438\u043A\u0430\n(`[11:10\u201411:24] \u0413\u0435\u043D\u0440\u0438\u0445 \u0411\u043E\u0433\u0430\u0446\u043A\u0438\u0439: \u2026`), \u0435\u0451 \u0443\u0434\u043E\u0431\u043D\u043E **\u0433\u0440\u0435\u043F\u0430\u0442\u044C** (\u043D\u0430\u0439\u0434\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0441\u0430\u043C\u0430 \u043D\u0435\u0441\u0451\u0442 \u0442\u0430\u0439\u043C\u043A\u043E\u0434 \u0438\n\u0441\u043F\u0438\u043A\u0435\u0440\u0430); `files.json` \u2014 \u043F\u043E\u043B\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u043E\u0439. \u041E\u0431\u0430 \u0444\u0430\u0439\u043B\u0430 \u2014 \u043A\u0435\u0448 \u0437\u0432\u043E\u043D\u043A\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u044E\u0442\u0441\u044F.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **`speakerId`** \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u043F\u043E \u0438\u043C\u0435\u043D\u0438 \u0438\u0437 \u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0430\u043D\u0430\u043B\u0438\u0437\u0430; \u043A\u0442\u043E \u0433\u043E\u0432\u043E\u0440\u0438\u043B \u043C\u0430\u043B\u043E \u0438 \u0432 \u043D\u0435\u0451 \u043D\u0435 \u043F\u043E\u043F\u0430\u043B \u2014 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\n `speakerId: null`, \u043D\u043E \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F \u0432 `participants` \u0441 `id: null`.\n- **`assigneeId` \u0437\u0430\u0434\u0430\u0447\u0438** \u2014 \u0443\u043F\u043E\u043C\u044F\u043D\u0443\u0442\u044B\u0439 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C, \u0430 \u041D\u0415 id \u0441\u043C\u043E\u0442\u0440\u044F\u0449\u0435\u0433\u043E.\n- \u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0437\u0432\u043E\u043D\u043A\u0443 / \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u0441\u0435\u0441\u0441\u0438\u044F \u2192 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0432\u0435\u0440\u043D\u0451\u0442 \u0432\u043D\u044F\u0442\u043D\u0443\u044E \u043E\u0448\u0438\u0431\u043A\u0443 (\u043F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u0434\u0430\u0451\u0442 HTML \u043B\u043E\u0433\u0438\u043D\u0430).\n\n### 5.5. \u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0444\u0430\u0439\u043B (\u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430, \u0444\u0430\u0439\u043B \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u043F\u0438\u0441\u044C \u0437\u0432\u043E\u043D\u043A\u0430)\n\n\u0421\u0441\u044B\u043B\u043A\u0438 \u043F\u043E\u0440\u0442\u0430\u043B \u043C\u0438\u043D\u0442\u0438\u0442 \u0438 \u043F\u043E\u0434\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442 \u0441\u0430\u043C, \u043D\u043E \u043F\u043E\u0434\u043F\u0438\u0441\u044C \u041D\u0415 \u0437\u0430\u043C\u0435\u043D\u044F\u0435\u0442 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u044E \u2014 \u043A\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u0432\n\u0441\u0435\u0441\u0441\u0438\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F.\n\n```jsonc\n// \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430: \u0441\u0441\u044B\u043B\u043A\u0443 \u0431\u0435\u0440\u0451\u043C \u0438\u0437 files[].urlDownload \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 bitrix_chat_load\nbitrix_file_download { "url": "https://<\u043F\u043E\u0440\u0442\u0430\u043B>/bitrix/services/main/ajax.php?action=disk.api.file.download&\u2026" }\nbitrix_call_recording { "callId": 4242 } // \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C \u0441\u043E\u0437\u0432\u043E\u043D\u0430 (\u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430\u0439\u0434\u0451\u0442 \u0441\u0430\u043C)\nbitrix_file_download { "url": "\u2026", "savePath": "/tmp/photo.png", "overwrite": true }\n```\n\n\u041E\u0442\u0432\u0435\u0442 \u2014 **\u043F\u0443\u0442\u044C, \u0430 \u043D\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435**: `{ path, bytes, contentType, fileName }` (\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044B \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u044E\u0442 \u0432\n\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442). \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0444\u0430\u0439\u043B \u043B\u043E\u0436\u0438\u0442\u0441\u044F \u0432 `~/.bitrix24-mcp-bridge/downloads/`; `savePath` \u0431\u0435\u0437 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043E `/`\n\u0442\u0440\u0430\u043A\u0442\u0443\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0438\u043C\u044F \u0432\u043D\u0443\u0442\u0440\u0438 \u044D\u0442\u043E\u0439 \u043F\u0430\u043F\u043A\u0438. \u041F\u043E\u0442\u043E\u043B\u043E\u043A \u2014 512 \u041C\u0411.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **\u0413\u0440\u0430\u043D\u0438\u0446\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u2014 origin**: \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0441 origin \u0441\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n- **\u0418\u043C\u044F \u0434\u0430\u0451\u0442 \u043F\u043E\u0440\u0442\u0430\u043B** (`Content-Disposition`), \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0431\u0435\u0437 `savePath` \u0443\u0433\u0430\u0434\u044B\u0432\u0430\u0442\u044C \u0435\u0433\u043E \u043D\u0435 \u043D\u0443\u0436\u043D\u043E.\n- **\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0435 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435** \u0442\u043E\u0433\u043E \u0436\u0435 \u0444\u0430\u0439\u043B\u0430 \u043F\u0430\u0434\u0430\u0435\u0442 \u0441 `already exists` \u2014 \u043F\u0435\u0440\u0435\u0434\u0430\u0439 `overwrite: true`.\n\n---\n\n\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 \u043D\u043E\u0432\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438, \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442 (`bodyType`, `responseType`, path-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B) \u0438\n\u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043F\u0440\u0430\u0432\u043E\u043A \u0432 \u0436\u0438\u0432\u043E\u0439 daemon \u2014 `docs/reconnaissance.md`.\n' : load();
25431
+ var HELP = '# Bitrix24 API notes (reverse-engineered)\n\n\u041A\u0430\u043A \u0430\u0433\u0435\u043D\u0442\u0443 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0441 Bitrix24 \u0447\u0435\u0440\u0435\u0437 \u044D\u0442\u043E\u0442 \u043C\u043E\u0441\u0442: \u0444\u043E\u0440\u043C\u0430\u0442 `params`, \u0438\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439, \u0433\u043E\u0442\u043E\u0432\u044B\u0435 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0432\u044B\u0437\u043E\u0432\u043E\u0432.\n\n\u0414\u0432\u0435 \u043F\u043E\u0432\u0435\u0440\u0445\u043D\u043E\u0441\u0442\u0438 API. **\u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0439 REST** (`tasks.task.*`, `im.recent.list`, `im.user.get`, `im.chat.get`,\n`socialnetwork.api.workgroup.*`) \u2014 \u0435\u0441\u0442\u044C \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u043E\u043A\u0438, \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043D\u0438\u0445 \u043F\u043E\u043C\u0435\u0447\u0435\u043D\u044B **\u{1F4D6}**\n([`apidocs.bitrix24.com`](https://apidocs.bitrix24.com); \u0430\u0433\u0435\u043D\u0442\u0443 \u0441 MCP context7 \u2014 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\n`/bitrix24/b24restdocs`). **\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0435 ajax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B** (`im.v2.*`, `tasks.v2.*`, `ui.entityselector.*`)\n\u043F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0445 \u0434\u043E\u043A\u043E\u0432 \u043D\u0435 \u0438\u043C\u0435\u044E\u0442 \u2014 \u0432\u0441\u0451 \u043D\u0438\u0436\u0435 \u0434\u043E\u0431\u044B\u0442\u043E \u0436\u0438\u0432\u044B\u043C \u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C; \u043A\u043E\u043D\u0432\u0435\u0440\u0442 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043F\u043E\u043B\u0435\u0439 \u0443 \u043D\u0438\u0445 \u043C\u043E\u0433\u0443\u0442\n\u043E\u0442\u043B\u0438\u0447\u0430\u0442\u044C\u0441\u044F \u043E\u0442 \u{1F4D6}-\u0430\u043D\u0430\u043B\u043E\u0433\u043E\u0432. \u0418\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B \u0434\u043B\u044F \u043E\u0431\u043B\u0430\u0447\u043D\u043E\u0433\u043E Bitrix24; \u043D\u0430 \u0434\u0440\u0443\u0433\u043E\u043C \u043F\u043E\u0440\u0442\u0430\u043B\u0435 \u0441\u0432\u0435\u0440\u044F\u0439\u0441\u044F\n\u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C (`docs/reconnaissance.md`).\n\n---\n\n## 1. \u041A\u0430\u043A \u0432\u044B\u0437\u044B\u0432\u0430\u0442\u044C\n\n- **\u0422\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B** (`bitrix_tasks_list`, `bitrix_task_get`, `bitrix_chat_load`, \u2026) \u2014\n \u043E\u0431\u0451\u0440\u0442\u043A\u0438 \u0441 \u0440\u0430\u0437\u0443\u043C\u043D\u044B\u043C\u0438 \u0434\u0435\u0444\u043E\u043B\u0442\u0430\u043C\u0438; \u0438\u0445 \u043F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0432\u0438\u0434\u043D\u044B \u0441\u0440\u0435\u0434\u0438 MCP-\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432. \u0422\u043E\u0447\u043D\u0430\u044F\n \u0432\u044B\u0431\u043E\u0440\u043A\u0430 \u2014 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u043C `params`: \u043E\u043D \u043C\u0435\u0440\u0436\u0438\u0442\u0441\u044F **\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u043C** \u0438 \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0434\u0435\u0444\u043E\u043B\u0442\u044B.\n- **`bitrix_call { name, params }`** \u2014 \u043B\u044E\u0431\u043E\u0435 \u0438\u043C\u044F \u0438\u0437 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 (`actions.json`), `params` \u0432 \u043D\u0430\u0442\u0438\u0432\u043D\u043E\u043C\n \u0444\u043E\u0440\u043C\u0430\u0442\u0435 Bitrix (\xA73). \u041F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438\u043C\u0451\u043D \u043E\u0442\u0434\u0430\u0451\u0442 \u0441\u0430\u043C `bitrix_call` \u0432 \u0441\u0432\u043E\u0451\u043C \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0438.\n- \u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u043C\u043E\u0436\u0435\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C **\u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0435** \u0432\u044B\u0437\u043E\u0432\u044B: \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u0437\u0430\u043F\u0438\u0441\u0438 = \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0432\u044B\u0437\u0432\u0430\u0442\u044C. \u042D\u0442\u043E \u043D\u0435 \u0440\u0435\u0436\u0438\u043C\n \xAB\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435\xBB.\n- \u0423 \u043E\u0431\u0451\u0440\u0442\u043E\u043A \u0435\u0441\u0442\u044C \u0434\u0435\u0444\u043E\u043B\u0442\u044B (\u043D\u0430\u043F\u0440. `bitrix_tasks_list` \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 `{"ID":"desc"}`), \u0443 `bitrix_call` \u0438\u0445 \u043D\u0435\u0442 \u2014\n \u043E\u0434\u0438\u043D \u0438 \u0442\u043E\u0442 \u0436\u0435 \u0444\u0438\u043B\u044C\u0442\u0440 \u0434\u0430\u0441\u0442 \u0440\u0430\u0437\u043D\u044B\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B. \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0448\u044C \u0432\u044B\u0434\u0430\u0447\u0438 \u2014 \u0437\u0430\u0434\u0430\u0432\u0430\u0439 `order` \u044F\u0432\u043D\u043E.\n- \u041E\u0442\u0432\u0435\u0442 `invalid_csrf` / `invalid_authentication` = \u0441\u0435\u0441\u0441\u0438\u044F \u043F\u043E\u0440\u0442\u0430\u043B\u0430 \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u2192 \u043F\u0435\u0440\u0435\u043B\u043E\u0433\u0438\u043D\u044C\u0441\u044F \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n \u043D\u0430 \u0432\u043A\u043B\u0430\u0434\u043A\u0435 \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n\n---\n\n## 2. \u0424\u043E\u0440\u043C\u0430\u0442 \u043E\u0442\u0432\u0435\u0442\u0430\n\nAjax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B (`/bitrix/services/main/ajax.php`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442 HTTP 200 \u0441 \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u043E\u043C:\n\n```jsonc\n{ "status": "success" | "error",\n "data": { ... },\n "errors": [] } // \u041F\u0423\u0421\u0422\u041E\u0419 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u0438 \u0443\u0441\u043F\u0435\u0445\u0435! (\u0432 JS [] \u2014 truthy)\n```\n\n\u0423\u0441\u043F\u0435\u0445 = `status:"success"` \u0438/\u0438\u043B\u0438 **\u043F\u0443\u0441\u0442\u043E\u0439** `errors`. \u041D\u0435\u043F\u0443\u0441\u0442\u043E\u0439 `errors` / `status:"error"` / top-level\n`error` \u2014 \u0440\u0435\u0430\u043B\u044C\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 (\u043C\u043E\u0441\u0442 \u043C\u0430\u043F\u043F\u0438\u0442 \u0435\u0451 \u0432 `ok:false`). REST-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u044B (`/rest/*.json`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442\n\u0438\u043D\u0430\u0447\u0435: `{ "result": \u2026, "next", "total", "time" }` \u2014 \u0431\u0435\u0437 `errors`.\n\n---\n\n## 3. \u041A\u0430\u0442\u0430\u043B\u043E\u0433: \u0438\u043C\u044F \u2192 action \u2192 params\n\n\u0424\u043E\u0440\u043C\u0430 `params` \u0440\u0430\u0437\u043B\u0438\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u043E \u043C\u0435\u0442\u043E\u0434\u0443: \u0433\u0434\u0435-\u0442\u043E \u043F\u043B\u043E\u0441\u043A\u043E, \u0433\u0434\u0435-\u0442\u043E \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E, \u0433\u0434\u0435-\u0442\u043E \u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E \u0432 `params[\u2026]` \u2014\n\u043A\u043E\u043B\u043E\u043D\u043A\u0430 \xABparams\xBB \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0442\u043E\u0447\u043D\u0443\u044E \u0444\u043E\u0440\u043C\u0443 (\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043B\u0430 \u043C\u043E\u0441\u0442 \u0431\u0435\u0440\u0451\u0442 \u043D\u0430 \u0441\u0435\u0431\u044F).\n\n| \u0418\u043C\u044F (`bitrix_call`) | action / endpoint | params | \u041F\u0430\u0433\u0438\u043D\u0430\u0446\u0438\u044F |\n|---|---|---|---|\n| `tasks.list` | `tasks.task.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `filter{RESPONSIBLE_ID,REAL_STATUS,GROUP_ID,\u2026}`, `select[]`, `order{}` | **`PAGEN_1`** \u2014 \u043D\u043E\u043C\u0435\u0440 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (1, 2, 3\u2026), \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 = 20 \u0437\u0430\u0434\u0430\u0447; `start` **\u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442** (\u0432\u0435\u0440\u043D\u0451\u0442 \u0442\u0443 \u0436\u0435 \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443) |\n| `task.get` | `tasks.task.get` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `taskId`, `select[]` | \u2014 |\n| `task.v2.get` | `tasks.v2.Task.get` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.scrum.info` | `tasks.v2.Scrum.getTaskInfo` | `{"taskId":N}` | \u2014 |\n| `task.files` | `tasks.v2.File.listObjects` | `{"ids":[N,\u2026]}` | \u2014 |\n| `task.views.count` | `tasks.v2.Task.View.User.count` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.subtasks` | `tasks.v2.Task.Relation.Child.list` | `{"taskId":N,"withIds":true,"navigation":{"size":N}}` | `navigation` |\n| `task.related` | `tasks.v2.Task.Relation.Related.list` | \u043A\u0430\u043A `task.subtasks` | `navigation` |\n| `projects.list` | `socialnetwork.api.workgroup.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `select[]`, `order{}`, `filter{}` | `start` (\u0448\u0430\u0433 50; `start=(N-1)*50`, `-1` \u2014 \u043E\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 `total`) \u{1F4D6} |\n| `projects.get` | `socialnetwork.api.workgroup.get` | **\u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E**: `params[groupId]`, `params[select][]` | \u2014 |\n| `chats.recent` | `/rest/im.recent.list.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `LIMIT`, `SKIP_OPENLINES`, `UNREAD_ONLY` | `LIMIT` |\n| `recent.load` | `im.v2.Recent.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[recentSection]` (`tasksTask`/`collab`/\u2026), `filter[unread]`, `filter[parentId]` | `recent.tail` |\n| `recent.tail` | `im.v2.Recent.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[lastMessageDate]` (\u043A\u0443\u0440\u0441\u043E\u0440), `filter[recentSection]` | `filter[lastMessageDate]` |\n| `chat.load` | `im.v2.Chat.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `dialogId`\\|`chatId`, `messageLimit` | \u2014 |\n| `chat.dialogId` | `im.v2.Chat.getDialogId` | \u043F\u043B\u043E\u0441\u043A\u043E: `externalId` (\u043D\u0430\u043F\u0440. `"sg"+groupId`) | \u2014 |\n| `chat.messages` | `im.v2.Chat.Message.list` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit` | \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u2014 \u043D\u0430\u0437\u0430\u0434 **\u043D\u0435 \u043B\u0438\u0441\u0442\u0430\u0435\u0442**, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 `chat.messages.tail` |\n| `chat.messages.tail` | `im.v2.Chat.Message.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit`, `filter[lastId]`, `order[id]` | `filter[lastId]` (\xA75.1) |\n| `chat.message.read` | `im.v2.Chat.Message.read` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `ids[]`, `actionUuid` | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `chat.read.all` | `im.v2.Chat.readAll` | \u0431\u0435\u0437 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `im.user.get` | `/rest/im.user.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ID` | \u2014 |\n| `im.chat.get` | `/rest/im.chat.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ENTITY_TYPE`, `ENTITY_ID` (\u043D\u0430\u043F\u0440. `TASKS_TASK`+taskId) | \u2014 |\n| `entityselector.load` | `ui.entityselector.load` | `{"dialog":{entities,preselectedItems,\u2026}}` | \u2014 |\n| `entityselector.search` | `ui.entityselector.doSearch` | `{"dialog":{\u2026},"searchQuery":{"query":"\u2026","queryWords":["\u2026"]}}` | \u2014 |\n| `call.detail` | `GET /call/detail/{callId}` | `callId` (\u043F\u043E\u0434\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0432 \u043F\u0443\u0442\u044C), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` \u2192 HTML | \u0441\u043C. \xA75.4 |\n| `task.comments.page` | `GET /task/comments/{taskId}/` | `taskId` (\u0432 \u043F\u0443\u0442\u044C), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` \u2192 HTML \u0441\u0442\u0430\u0440\u044B\u0445 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432 | \u0441\u043C. \xA75.6 |\n| `task.comments.navigate` | `bitrix:forum.comments` \u2192 `navigateComment` | \u0444\u043E\u0440\u043C\u0430: `ENTITY_XML_ID=TASK_<id>`, `EXEMPLAR_ID`, `signedParameters` (\u043E\u0431\u0430 \u2014 \u0438\u0437 HTML \u043F\u0435\u0440\u0432\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B), `FILTER[<ID]` | `FILTER[<ID]` \u2014 \u043A\u0443\u0440\u0441\u043E\u0440; \u043F\u0440\u043E\u0449\u0435 `bitrix_task_comments` (\xA75.6) |\n\n---\n\n## 4. \u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A \u043F\u043E\u043B\u0435\u0439\n\n**\u0417\u0430\u0434\u0430\u0447\u0430** (`tasks.task.*`) \u2014 \u043F\u043E\u043B\u044F \u0434\u043B\u044F `select`/`filter` \u0432 UPPER_CASE: `ID`, `TITLE`, `DESCRIPTION`,\n`STATUS`, `REAL_STATUS`, `RESPONSIBLE_ID`, `CREATED_BY`, `CREATED_DATE`, `CHANGED_DATE`, `DEADLINE`,\n`CLOSED_DATE`, `PRIORITY`, `GROUP_ID`, `TAGS`, `TIME_ESTIMATE`, **`CHAT_ID`** (id \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F\n\u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u043F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432\u0435\u0440 `taskId \u2192 chatId`, \xA75.2), `UF_*`. \u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u0434\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442 \u043E\u0431\u044A\u0435\u043A\u0442\u044B `group`,\n`responsible`, `creator`, `action`.\n\u{1F4D6} (`tasks.task.get`/`list`) \u2014 \u0441\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E: `parentId`, `stageId`, `sprintId`, `backlogId`,\n`commentsCount`, `timeSpentInLogs`, `favorite`, `flowId`, `mark`, `accomplices[]`, `auditors[]`,\n`checklist{}`, `subStatus`; \u0432 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u043C REST-\u043E\u0442\u0432\u0435\u0442\u0435 \u043F\u043E\u043B\u044F \u043F\u0440\u0438\u0445\u043E\u0434\u044F\u0442 **camelCase**, \u0430 \u0432 `select`/`filter`\n\u043E\u043D\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **UPPER_CASE**. \u0414\u043E\u043F. \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u2014 \u0444\u043B\u0430\u0433\u0430\u043C\u0438 `params{WITH_TIMER_INFO, WITH_RESULT_INFO,\nWITH_PARSED_DESCRIPTION}`.\n\n**\u0421\u0442\u0430\u0442\u0443\u0441\u044B** (`REAL_STATUS` \u2014 \xAB\u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435\xBB \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435): `1` \u041D\u043E\u0432\u0430\u044F \xB7 `2` \u0416\u0434\u0451\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \xB7\n`3` \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \xB7 `4` \u0416\u0434\u0451\u0442 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044F \xB7 `5` \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430 \xB7 `6` \u041E\u0442\u043B\u043E\u0436\u0435\u043D\u0430 \xB7 `7` \u041E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0430. \u041F\u043E\u043B\u0435 `STATUS`\n\u043F\u043E\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E \u043D\u0435\u0441\u0451\u0442 **\u043C\u0435\u0442\u0430-\u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F** \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F (\u043F\u043E\u0447\u0442\u0438 \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430 / \u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u0430 / \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430),\n\u043F\u043E\u044D\u0442\u043E\u043C\u0443 \xAB\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043B\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0435\u0439\u0447\u0430\u0441\xBB \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E **`REAL_STATUS`** (\u043D\u0430\u043F\u0440. `{"REAL_STATUS":3}`) \u{1F4D6}.\n\u0410\u0441\u0438\u043C\u043C\u0435\u0442\u0440\u0438\u044F: \u0432 **`filter`** \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 `REAL_STATUS`, \u0430 \u0432 **`select`** \u0435\u0433\u043E \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0431\u0435\u0441\u043F\u043E\u043B\u0435\u0437\u043D\u043E \u2014 \u043F\u043E\u043B\u0435 \u043C\u043E\u043B\u0447\u0430\n\u043D\u0435 \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F; \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435, \u043F\u0440\u043E\u0441\u0438 `select:["STATUS"]` \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043A\u043B\u044E\u0447 `status` \u0441\u043E\n\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0442\u043E\u0439 \u0436\u0435 \u0448\u043A\u0430\u043B\u0435 1..7 (\u0443 \u043E\u0431\u0451\u0440\u0442\u043A\u0438 `bitrix_tasks_list` \u043E\u043D \u0443\u0436\u0435 \u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u043C `select`).\n\n**\u0424\u0438\u043B\u044C\u0442\u0440 `tasks.task.list`** \u2014 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0434 \u0438\u043C\u0435\u043D\u0435\u043C \u043F\u043E\u043B\u044F: `!` (\u043D\u0435 \u0440\u0430\u0432\u043D\u043E / \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u044C),\n`<`, `<=`, `>`, `>=`, `%` (LIKE-\u043F\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0430). \u041D\u0430\u043F\u0440. `{"!REAL_STATUS":5}` \u2014 \u0432\u0441\u0435 **\u043D\u0435\u0437\u0430\u043A\u0440\u044B\u0442\u044B\u0435**,\n`{">=DEADLINE":"2026-07-01"}`, `{"%TITLE":"\u043A\u0430\u0440\u0442\u0430"}`. \u0424\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u043E\u043B\u044F: `ID`, `PARENT_ID`, `GROUP_ID`,\n`CREATED_BY`, `RESPONSIBLE_ID`, `ACCOMPLICE`, `AUDITOR`, `REAL_STATUS`, `STATUS`, `PRIORITY`, `TAG`,\n`STAGE_ID`, `SPRINT_ID`, `BACKLOG_ID`, `DEADLINE`, `*_DATE`, `UF_CRM_TASK`.\n\n> **\xAB\u041C\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438\xBB \u2260 \u0442\u043E\u043B\u044C\u043A\u043E `RESPONSIBLE_ID`.** \u0420\u043E\u043B\u0438 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u044C\u043D\u044B: \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439\n> (`RESPONSIBLE_ID`), \u0441\u043E\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C (`ACCOMPLICE`), \u043D\u0430\u0431\u043B\u044E\u0434\u0430\u0442\u0435\u043B\u044C (`AUDITOR`), \u043F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\n> (`CREATED_BY`); \u0435\u0434\u0438\u043D\u043E\u0433\u043E \xAB\u043B\u044E\u0431\u0430\u044F \u0440\u043E\u043B\u044C\xBB \u043F\u043E\u043B\u044F \u0432 `list` \u043D\u0435\u0442 \u2014 \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0431\u0440\u0430\u0442\u044C **\u0432\u0441\u0435** \u0441\u0432\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\n> \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 (\u043C\u0438\u043D\u0438\u043C\u0443\u043C `RESPONSIBLE_ID` + `ACCOMPLICE`) \u0438 **\u0434\u0435\u0434\u0443\u043F\u043B\u0438\u0446\u0438\u0440\u0443\u0439 \u043F\u043E `id`** \u2014\n> \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0430\u0441\u0442\u043E \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u043E\u043B\u0435\u0439. \u0412 **`filter`** \u0440\u043E\u043B\u0438 \u0432 **\u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** \u0447\u0438\u0441\u043B\u0435\n> (`ACCOMPLICE`/`AUDITOR`), \u0432 **`select`** \u2014 \u0432\u043E **\u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** (`ACCOMPLICES`/`AUDITORS`).\n\n> **Scrum-\u0437\u0430\u0434\u0430\u0447\u0438 (\u0441\u043F\u0440\u0438\u043D\u0442\u044B).** \u041F\u043E\u043B\u0435 `SPRINT_ID` \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0436\u0451\u0441\u0442\u043A\u0438\u0439 `filter[SPRINT_ID]` \u043C\u043E\u0433\u0443\u0442 \u0440\u0430\u0441\u0445\u043E\u0434\u0438\u0442\u044C\u0441\u044F:\n> \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F \u0437\u0430 \u0441\u043F\u0440\u0438\u043D\u0442\u043E\u043C \u043F\u043E \u0441\u0432\u043E\u0435\u043C\u0443 \u043F\u043E\u043B\u044E, \u043D\u043E \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u0432\u044B\u0431\u043E\u0440\u043A\u0443 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 (\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u0430 \u0432 \u0431\u044D\u043A\u043B\u043E\u0433\n> \u0438\u043B\u0438 \u0432 \u0438\u043D\u043E\u0439 stage). \u0415\u0441\u043B\u0438 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 \xAB\u043C\u0430\u043B\u043E\u0432\u0430\u0442\u043E\xBB \u2014 \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0431\u0435\u0437 \u043D\u0435\u0433\u043E \u0438 \u043E\u0442\u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E\n> `SPRINT_ID`/`STAGE_ID` \u0443 \u0441\u0435\u0431\u044F. \u041C\u0435\u0442\u043E\u0434\u0430 \xAB\u043A\u043E\u043B\u043E\u043D\u043A\u0438 scrum-\u0434\u043E\u0441\u043A\u0438\xBB (`STAGE_ID` \u2192 \u0438\u043C\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0438) \u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0435 \u043D\u0435\u0442.\n\n**\u0413\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442 \u2014 \u0441\u043F\u0438\u0441\u043E\u043A** (`workgroup.list`): `ID`, `NAME`, `DESCRIPTION`, `NUMBER_OF_MEMBERS`,\n`OWNER_ID`, `DATE_CREATE`, `PROJECT` (Y=\u043F\u0440\u043E\u0435\u043A\u0442/N=\u0433\u0440\u0443\u043F\u043F\u0430), `TYPE`; **\u0431\u0435\u0437 `select` \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E `ID`**.\n\u{1F4D6} \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435: `ID`, `NAME`, `OWNER_ID`, `ACTIVE`, `VISIBLE`, `OPENED`, `CLOSED`, `PROJECT`,\n`SUBJECT_ID`, `SITE_ID`, `DATE_CREATE`, `DATE_UPDATE`, `DATE_ACTIVITY`; \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u044B \u0444\u0438\u043B\u044C\u0442\u0440\u0430\n`>= > <= < % =% %= !% != !`.\n**\u0413\u0440\u0443\u043F\u043F\u0430 \u2014 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430** (`workgroup.get`): \u043F\u043B\u044E\u0441 `OWNER_DATA`, `SUBJECT_DATA`, `MEMBERS[]`,\n`MODERATOR_MEMBERS[]`, **`CHAT_ID`**, `DIALOG_ID`, `IMAGE_ID`, UF-\u043F\u043E\u043B\u044F.\n\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0439 \u0447\u0430\u0442** (`im.recent.list`): `id` (\u044D\u0442\u043E dialogId: \u0447\u0438\u0441\u043B\u043E = \u044E\u0437\u0435\u0440, `"chat"+N` = \u0447\u0430\u0442), `chat_id`,\n`type` (`user`/`chat`), `title`, `message{id,text,file,author_id,date,status}`, `counter` (\u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445),\n`unread`, `last_id`, `pinned`, `date_update`, `date_last_activity`, `user{\u2026}`,\n`chat{\u2026 entity_type, entity_id, owner, \u2026}`; \u0435\u0441\u0442\u044C \u043B\u0438 \u0435\u0449\u0451 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u2014 `hasMore`/`hasMorePages` \u{1F4D6}.\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u043F\u043E \u0441\u0435\u043A\u0446\u0438\u0438** (`im.v2.Recent.load`): `filter[recentSection]` \u2014 `default` (\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0434\u0438\u0430\u043B\u043E\u0433\u0438),\n**`tasksTask` (\u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447)**, `collab`/`collabDefault`. \u0412\u0433\u043B\u0443\u0431\u044C \u2014 `im.v2.Recent.tail` \u0441 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u043C\n`filter[lastMessageDate]` (ISO-\u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B).\n\n**\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u044E\u0437\u0435\u0440\u0430** (`im.user.get`): `id`, `name`, `first_name`, `last_name`, `avatar`, `work_position`,\n`gender`, `status`, `online` \u2014 \u0440\u0435\u0437\u043E\u043B\u0432 \u0430\u0432\u0442\u043E\u0440\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F (`authorId`) \u0432 \u0438\u043C\u044F.\n\n**\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435** (`im.v2.Chat.Message.*`): `id`, `chatId`, `authorId`, `date`, `text`, `params`, `viewed`;\n\u043E\u0442\u0432\u0435\u0442 \u0442\u0430\u043A\u0436\u0435 \u043D\u0435\u0441\u0451\u0442 `users[]` (\u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438), `additionalMessages[]`, `hasPrevPage`/`hasNextPage`.\n\n---\n\n## 5. \u0421\u0446\u0435\u043D\u0430\u0440\u0438\u0438\n\n```jsonc\n// \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E 55, \u043F\u043E \u0434\u0435\u0434\u043B\u0430\u0439\u043D\u0443, \u0432\u0442\u043E\u0440\u0430\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430\nbitrix_tasks_list { "params": { "filter": {"RESPONSIBLE_ID":55,"REAL_STATUS":2},\n "order": {"DEADLINE":"asc"}, "start": 50 } }\n\n// \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u043C \u043D\u0430\u0431\u043E\u0440\u043E\u043C \u043F\u043E\u043B\u0435\u0439; v2-\u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0430; \u0444\u0430\u0439\u043B\u044B, \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u044B, \u0441\u0432\u044F\u0437\u0438\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","TITLE","DESCRIPTION","TAGS"] } }\nbitrix_task_get_v2 { "taskId": 4229 } // \u2192 { "task": { "id": 4229 } }\nbitrix_call { "name": "task.files", "params": { "ids": [4229] } }\nbitrix_task_subtasks { "taskId": 4229 }\nbitrix_task_related { "taskId": 4229 }\n\n// \u043F\u0440\u043E\u0435\u043A\u0442\u044B \u043F\u043E \u0434\u0430\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F; \u043F\u043E\u043B\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0433\u0440\u0443\u043F\u043F\u044B (\u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID)\nbitrix_projects_list { "params": { "order": {"DATE_CREATE":"desc"} } }\nbitrix_project_get { "groupId": 15 }\n```\n\n### 5.1. \u041C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440 (IM): \u043A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId`\n\n\u0412\u0441\u0451 \u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u2014 **\u0447\u0430\u0442\u044B**: \u043B\u0438\u0447\u043D\u044B\u0435 1-\u043D\u0430-1, \u0433\u0440\u0443\u043F\u043F\u043E\u0432\u044B\u0435 (\u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0432, \u043A\u0430\u043D\u0430\u043B\u043E\u0432) \u0438 **\u0447\u0430\u0442\u044B-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447**.\n\u0427\u0438\u0441\u043B\u043E\u0432\u043E\u0439 **`chatId`** \u2014 \u043A\u043B\u044E\u0447 \u043A\u043E \u0432\u0441\u0435\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F\u043C \u0441 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043C\u0438 (`bitrix_chat_messages`,\n`bitrix_chat_history`, `bitrix_chat_mark_read`); \u043F\u043E\u0447\u0442\u0438 \u043B\u044E\u0431\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0430\u0433\u0435\u043D\u0442\u0430 \u0437\u0434\u0435\u0441\u044C \u2014 \u043D\u0430 \u0448\u0430\u0433\u0435 \u0435\u0433\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F.\n\n**\u0422\u0440\u0438 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u043E\u0434\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430** (\u0433\u043E\u0434\u044F\u0442\u0441\u044F \u0434\u043B\u044F \u0440\u0430\u0437\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439):\n\n| \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 | \u0427\u0442\u043E \u044D\u0442\u043E | \u041F\u0440\u0438\u043C\u0435\u0440 | \u041A\u0443\u0434\u0430 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C |\n|---|---|---|---|\n| `chatId` | \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 id \u0447\u0430\u0442\u0430 | `485` | \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F / \u0438\u0441\u0442\u043E\u0440\u0438\u044F / \u043E\u0442\u043C\u0435\u0442\u043A\u0430 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u043C |\n| `dialogId` | \u0430\u0434\u0440\u0435\u0441 \u0434\u043B\u044F \u041E\u0422\u041A\u0420\u042B\u0422\u0418\u042F: `userId` (\u043B\u0438\u0447\u043D\u044B\u0439 1-\u043D\u0430-1) **\u0438\u043B\u0438** `"chat"+chatId` (\u0433\u0440\u0443\u043F\u043F\u043E\u0432\u043E\u0439) | `11`, `"chat485"` | `bitrix_chat_load` |\n| `externalId` | \u0432\u043D\u0435\u0448\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438 \u2192 \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u0432 `dialogId` | `"sg15"` (\u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u0430 15) | `bitrix_chat_get_dialog_id` |\n\n\u041A\u043B\u044E\u0447\u0435\u0432\u043E\u0435: **\u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u0441 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u043E\u043C = \u0435\u0433\u043E `userId` \u0432 \u0440\u043E\u043B\u0438 `dialogId`** (\u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \xABid \u0447\u0430\u0442\u0430\xBB \u0443 1-\u043D\u0430-1\n\u0437\u043D\u0430\u0442\u044C \u043D\u0435 \u043D\u0443\u0436\u043D\u043E). `bitrix_chat_load` \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 `dialogId` **\u0438\u043B\u0438** `chatId` \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\n\u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 `chatId`** \u2014 \u0434\u0430\u043B\u044C\u0448\u0435 \u043E\u043F\u0435\u0440\u0438\u0440\u0443\u0435\u0448\u044C \u0438\u043C.\n\n**\u041A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId` \u2014 \u043F\u043E \u0446\u0435\u043B\u0438:**\n\n| \u0425\u043E\u0447\u0443 \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442\u2026 | \u0428\u0430\u0433\u0438 |\n|---|---|\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C \u043F\u043E \u0418\u041C\u0415\u041D\u0418** | `bitrix_entity_search { query:"\u0434\u043C\u0438\u0442\u0440\u0438\u0439" }` \u2192 \u0434\u0438\u0430\u043B\u043E\u0433 \u0441 `dialogId` = \u0435\u0433\u043E userId \u2192 `bitrix_chat_load { dialogId }` |\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C, id \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043D** | `bitrix_chat_load { dialogId: <userId> }` (userId \u2014 \u0438\u0437 \u0437\u0430\u0434\u0430\u0447\u0438 `RESPONSIBLE_ID`/`CREATED_BY`, \u0438\u0437 `bitrix_chats_recent`, \u0438\u0437 `bitrix_user_get`) |\n| **\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0417\u0410\u0414\u0410\u0427\u0418** | `bitrix_task_get` \u2192 `CHAT_ID` (\xA75.2) |\n| **\u041F\u0420\u041E\u0415\u041A\u0422\u0410/\u0433\u0440\u0443\u043F\u043F\u044B** | `bitrix_task_get`\u2192`GROUP_ID`\u2192`bitrix_project_get`\u2192`CHAT_ID`; \u043B\u0438\u0431\u043E `bitrix_chat_get_dialog_id { externalId:"sg<groupId>" }` |\n| **\u043D\u0435 \u0437\u043D\u0430\u044E \u0442\u043E\u0447\u043D\u043E, \u043A\u0430\u043A\u043E\u0439** | `bitrix_chats_recent` (\u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435, \u0441\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u044C \u043F\u043E `title`/`user`) \u0438\u043B\u0438 `bitrix_entity_search { query }` |\n\n> \u041F\u043E\u0447\u0435\u043C\u0443 \u043D\u0435 \xAB\u043F\u0440\u043E\u0441\u0442\u043E \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432\xBB: `bitrix_chats_recent` (`im.recent.list`) \u043E\u0442\u0434\u0430\u0451\u0442 \u043B\u0438\u0448\u044C \u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u0438\n> **\u0431\u0435\u0437 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447**. \u0414\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430 \u2014 `bitrix_entity_search`; \u0434\u043B\u044F \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447 \u2014\n> `bitrix_recent_load { section:"tasksTask" }`.\n\n**\u0427\u0438\u0442\u0430\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E.** `bitrix_chat_messages` \u043E\u0442\u0434\u0430\u0451\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443; \u0432\u0433\u043B\u0443\u0431\u044C \u043B\u0438\u0441\u0442\u0430\u0435\u0442\n`bitrix_chat_history` \u043F\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u0443 `beforeId` = \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 id \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (\u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0439,\n\u0443\u043C\u0435\u043D\u044C\u0448\u0430\u044F `beforeId`, \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u0438).\n\n```jsonc\nbitrix_chat_load { "dialogId": 11 } // \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u044E\u0437\u0435\u0440\u0430 11 \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 chatId\nbitrix_chat_history { "chatId": 485, "beforeId": 1861279 }\nbitrix_chat_mark_read { "chatId": 40271, "ids": [1884131] } // \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439; actionUuid \u2014 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u043E\u043C\n```\n\n\u{1F4D6} \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438 \u0447\u0442\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439: `im.dialog.messages.get` (\u0434\u0435\u0444\u043E\u043B\u0442 20, \u043C\u0430\u043A\u0441 50; \u043B\u0438\u0441\u0442\u0430\u043D\u0438\u0435\n`LAST_ID` \u2014 \u0441\u0442\u0430\u0440\u0435\u0435, `FIRST_ID` \u2014 \u043D\u043E\u0432\u0435\u0435); `imbot.v2 chat.getMessageContext` \u2014 \u043E\u0442\u0432\u0435\u0442 `messages[]`\n(oldest\u2192newest) + `users[]` + `hasPrevPage`/`hasNextPage`, \u043F\u043E \u0444\u043E\u0440\u043C\u0435 **\u0441\u043E\u0432\u043F\u0430\u0434\u0430\u0435\u0442** \u0441 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C\u0438\n`im.v2.Chat.Message.*`.\n\n### 5.2. \u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 (\u0447\u0430\u0442) \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438\n\n**\u0410. \u041F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432 \u2014 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E.** `bitrix_task_get` \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `CHAT_ID` \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F (\u0432\u0445\u043E\u0434\u0438\u0442\n\u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u0439 `select` \u{1F4D6}) \u2014 \u044D\u0442\u043E `taskId \u2192 chatId` \u0431\u0435\u0437 \u043F\u043E\u0438\u0441\u043A\u0430 \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0438 \u0431\u0435\u0437 \u043F\u0440\u043E\u043C\u0430\u0445\u0430 \u043F\u043E \u0442\u0451\u0437\u043A\u0430\u043C:\n\n```jsonc\nbitrix_task_get { "taskId": 28373 } // \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 CHAT_ID\nbitrix_chat_load { "chatId": <CHAT_ID> }\nbitrix_chat_history { "chatId": <CHAT_ID>, "beforeId": <\u043C\u0438\u043D id \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B> }\n```\n\n\u041E\u0431\u0449\u0430\u044F \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u2014 **`bitrix_entity_chat`** (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 `im.chat.get`): chatId \u043B\u044E\u0431\u043E\u0433\u043E \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0433\u043E\n\u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u043E \u043F\u0430\u0440\u0435 `entityType`/`entityId`; \u043A\u0440\u043E\u043C\u0435 `TASKS_TASK` \u0442\u0430\u043A \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443\u044E\u0442\u0441\u044F `SONET_GROUP`\n(\u0433\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442), `CRM`, `CALENDAR`, `MAIL`, `VIDEOCONF`, `CALL`:\n\n```jsonc\nbitrix_entity_chat { "entityType": "TASKS_TASK", "entityId": 28373 } // \u2192 chatId\n```\n\n**\u0411. \u0427\u0435\u0440\u0435\u0437 \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447** (\u0441\u0435\u043A\u0446\u0438\u044F `tasksTask`; \u0432 `bitrix_chats_recent` \u0438\u0445 \u041D\u0415\u0422):\n\n```jsonc\nbitrix_recent_load { "section": "tasksTask" } // \u2192 \u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447 \u0441 chatId/dialogId\nbitrix_recent_tail { "section": "tasksTask", "lastMessageDate": "2026-06-29T17:25:38+03:00" }\nbitrix_chat_load { "dialogId": "chat38849" } // \u0438\u043B\u0438 { "chatId": 38849 }\n```\n\n**\u0427\u0430\u0442 \u043F\u0443\u0441\u0442, \u0430 `COMMENTS_COUNT > 0`** \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u0430\u0440\u0448\u0435 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447: \u0432 \u0447\u0430\u0442\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\n\xAB\u0427\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0440\u0430\u043D\u0435\u0435 \u043E\u0441\u0442\u0430\u0432\u0438\u043B\u0438 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438 \u0437\u0430\u0434\u0430\u0447\u0438\u2026\xBB, \u0430 \u0441\u0430\u043C\u043E \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043B\u0435\u0436\u0438\u0442 \u0432\n\u0444\u043E\u0440\u0443\u043C\u0435 \u2192 `bitrix_task_comments` (\xA75.6).\n\n**\u0412. \u041F\u043E\u0438\u0441\u043A\u043E\u043C \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0437\u0430\u0434\u0430\u0447\u0438** (\u0437\u0430\u043F\u0430\u0441\u043D\u043E\u0439, \u043C\u0430\u0442\u0447 \u043F\u043E \u0442\u0435\u043A\u0441\u0442\u0443):\n`bitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" }`\n\n**\u0427\u0430\u0442 \u041F\u0420\u041E\u0415\u041A\u0422\u0410 \u0437\u0430\u0434\u0430\u0447\u0438** (\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B, \u043D\u0435 \u0441\u0430\u043C\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u2014 \u0447\u0435\u0440\u0435\u0437 `GROUP_ID`:\n\n```jsonc\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","GROUP_ID"] } }\nbitrix_project_get { "groupId": 15 } // \u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID\nbitrix_chat_get_dialog_id { "externalId": "sg15" } // \u043B\u0438\u0431\u043E \u0440\u0435\u0437\u043E\u043B\u0432 dialogId \u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u044B \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E\n```\n\n### 5.3. \u041F\u043E\u0438\u0441\u043A \u0447\u0430\u0442\u0430 / \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\n\n`bitrix_entity_search` (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C `ui.entityselector.doSearch`) \u0441\u0430\u043C \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0438\u0430\u043B\u043E\u0433\n`IM_CHAT_SEARCH` \u0438 `searchQuery` \u0438\u0437 \u0441\u0442\u0440\u043E\u043A\u0438. \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438: \u043B\u044E\u0434\u0438 \u2014 `user.get`/`user.search`, \u0447\u0430\u0442\u044B \u2014\n`im.recent.list` + \u0444\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u044F \u0443 \u0441\u0435\u0431\u044F.\n\n```jsonc\nbitrix_entity_search { "query": "\u0434\u043C\u0438\u0442\u0440\u0438\u0439" } // \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0447\u0430\u0442\u043E\u0432/\u0434\u0438\u0430\u043B\u043E\u0433\u043E\u0432\nbitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" } // \u0441\u0440\u0435\u0434\u0438 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447\nbitrix_user_get { "userId": 11 } // \u0440\u0435\u0437\u043E\u043B\u0432 authorId \u2192 \u0438\u043C\u044F\n```\n\n### 5.4. \u0421\u043E\u0437\u0432\u043E\u043D: \u0440\u0435\u0437\u044E\u043C\u0435, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430, \u0437\u0430\u043F\u0438\u0441\u044C\n\nAI-\u0430\u043D\u0430\u043B\u0438\u0437 \u0437\u0432\u043E\u043D\u043A\u0430 (BitrixGPT Follow-Up) \u0436\u0438\u0432\u0451\u0442 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043D\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0435\u043D\u043D\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 `/call/detail/<callId>`\n\u2014 JSON-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u0430 \u043F\u043E\u0434 \u043D\u0435\u0439 \u043D\u0435\u0442, \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E REST \u0434\u043B\u044F \u0432\u0438\u0434\u0435\u043E\u0432\u0441\u0442\u0440\u0435\u0447 \u0442\u043E\u0436\u0435 (\u{1F4D6} \u0442\u043E\u043B\u044C\u043A\u043E \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0438\u044F `voximplant.*`\n\u0438 `crm.activity.call.getTranscript`). \u041C\u043E\u0441\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u044D\u0442\u0443 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u0451 \u0432 \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 JSON.\n\n**1) \u041D\u0430\u0439\u0442\u0438 \u0437\u0432\u043E\u043D\u043A\u0438.** \u0421\u0435\u0440\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u043F\u043E\u0438\u0441\u043A\u0430 \u0437\u0432\u043E\u043D\u043A\u043E\u0432 \u043F\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0443 \u043D\u0435\u0442 \u2014 \u0438\u0449\u0435\u043C \u0432 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u043C \u0447\u0430\u0442\u0435: \u0437\u0432\u043E\u043D\u043E\u043A\n\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0441 `params.COMPONENT_PARAMS = { messageType: "START", callId }`.\n\n```jsonc\nbitrix_chat_calls { "chatId": 9876 } // \u0447\u0430\u0442 \u043F\u0440\u043E\u0435\u043A\u0442\u0430: bitrix_project_get \u2192 CHAT_ID\nbitrix_chat_calls { "chatId": 9876, "maxPages": 20, "beforeId": 5001 } // \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0432\u0433\u043B\u0443\u0431\u044C\n```\n\n\u041E\u0442\u0432\u0435\u0442: `calls[] { callId, startedAt, startedBy, startMessageId, events[], summaryMessageId }` \u043F\u043B\u044E\u0441\n`scannedPages` / `oldestScannedMessageId` / **`reachedHistoryStart`** \u2014 \u0435\u0441\u043B\u0438 \u043E\u043D `false`, \u0438\u0441\u0442\u043E\u0440\u0438\u044F\n\u0434\u043E\u0447\u0438\u0442\u0430\u043D\u0430 \u041D\u0415 \u0434\u043E \u043A\u043E\u043D\u0446\u0430, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0441 `beforeId: <oldestScannedMessageId>`.\n\n**2) \u0412\u0437\u044F\u0442\u044C \u0432\u0441\u0451 \u043F\u043E \u0437\u0432\u043E\u043D\u043A\u0443.**\n\n```jsonc\nbitrix_call_detail { "callId": 4242 } // \u0432\u0441\u0451; \u0434\u043B\u0438\u043D\u043D\u0430\u044F \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0443\u0435\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043B\nbitrix_call_detail { "callId": 4242, "transcript": "inline" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043F\u0440\u044F\u043C\u043E \u0432 \u043E\u0442\u0432\u0435\u0442\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "none" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430 \u0432\u043E\u0432\u0441\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "file" } // \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043B, \u0434\u0430\u0436\u0435 \u043A\u043E\u0440\u043E\u0442\u043A\u0430\u044F\n```\n\n| \u041F\u043E\u043B\u0435 \u043E\u0442\u0432\u0435\u0442\u0430 | \u0427\u0442\u043E \u0432\u043D\u0443\u0442\u0440\u0438 |\n|---|---|\n| `title`, `agenda`, `meetingType` | \u0442\u0435\u043C\u0430, \u0432\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u0435, \u0442\u0438\u043F \u0432\u0441\u0442\u0440\u0435\u0447\u0438 (\xAB\u0421\u0442\u0430\u0442\u0443\u0441-\u0432\u0441\u0442\u0440\u0435\u0447\u0430\xBB) |\n| `date`, `interval`, `duration` | \xAB23 \u0438\u044E\u043B\u044F, 15:46\xBB, \xAB15:46 - 16:51\xBB, \xAB1 \u0447 4 \u043C\u0438\u043D\xBB |\n| `efficiency`, `qualityChecklist[]` | \u043E\u0446\u0435\u043D\u043A\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u0432 % \u0438 \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u0438 `{ ok, text }` |\n| `participants[]` | `{ id, name, talkTimePercent, talkTime, efficiency, metrics[], insight }` |\n| `overview`, `chapters[]` | \u043E\u0431\u0449\u0435\u0435 \u0440\u0435\u0437\u044E\u043C\u0435 \u0438 \u0433\u043B\u0430\u0432\u044B `{ from, to, title, text }` \u0441 \u0442\u0430\u0439\u043C\u043A\u043E\u0434\u0430\u043C\u0438 |\n| `decisions[]`, `tasks[]` | \xAB\u0447\u0442\u043E \u0440\u0435\u0448\u0438\u043B\u0438\xBB \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 `{ assigneeId, assignee, text }` |\n| `transcript[]`, `transcriptCount` | \u0440\u0435\u043F\u043B\u0438\u043A\u0438 `{ from, to, speakerId, speaker, text }` |\n| `recording` | `{ path, url, trackId }` \u2014 \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C, \u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F `bitrix_call_recording` (\xA75.5) |\n\n**\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0434\u043B\u0438\u043D\u043D\u043E\u0433\u043E \u0437\u0432\u043E\u043D\u043A\u0430 \u043D\u0435 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435.** \u0423 \u0447\u0430\u0441\u043E\u0432\u043E\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u043E\u043D\u0430 \u0434\u0430\u0451\u0442 ~70 \u041A\u0411 \u0438\u0437 80 \u041A\u0411, \u043F\u043E\u044D\u0442\u043E\u043C\u0443\n\u0441\u0432\u044B\u0448\u0435 ~20 \u041A\u0411 (\u0440\u0435\u0436\u0438\u043C `"auto"` = \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435) \u043F\u0438\u0448\u0435\u0442\u0441\u044F \u043D\u0430 \u0434\u0438\u0441\u043A, \u0430 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F `transcript: []`,\n`transcriptCount` \u0438 **`files`**: `files.transcript` \u2014 `call-<id>-transcript.txt`, \u0433\u0434\u0435 \u0441\u0442\u0440\u043E\u043A\u0430 = \u0440\u0435\u043F\u043B\u0438\u043A\u0430\n(`[11:10\u201411:24] \u0413\u0435\u043D\u0440\u0438\u0445 \u0411\u043E\u0433\u0430\u0446\u043A\u0438\u0439: \u2026`), \u0435\u0451 \u0443\u0434\u043E\u0431\u043D\u043E **\u0433\u0440\u0435\u043F\u0430\u0442\u044C** (\u043D\u0430\u0439\u0434\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0441\u0430\u043C\u0430 \u043D\u0435\u0441\u0451\u0442 \u0442\u0430\u0439\u043C\u043A\u043E\u0434 \u0438\n\u0441\u043F\u0438\u043A\u0435\u0440\u0430); `files.json` \u2014 \u043F\u043E\u043B\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u043E\u0439. \u041E\u0431\u0430 \u0444\u0430\u0439\u043B\u0430 \u2014 \u043A\u0435\u0448 \u0437\u0432\u043E\u043D\u043A\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u044E\u0442\u0441\u044F.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **`speakerId`** \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u043F\u043E \u0438\u043C\u0435\u043D\u0438 \u0438\u0437 \u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0430\u043D\u0430\u043B\u0438\u0437\u0430; \u043A\u0442\u043E \u0433\u043E\u0432\u043E\u0440\u0438\u043B \u043C\u0430\u043B\u043E \u0438 \u0432 \u043D\u0435\u0451 \u043D\u0435 \u043F\u043E\u043F\u0430\u043B \u2014 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\n `speakerId: null`, \u043D\u043E \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F \u0432 `participants` \u0441 `id: null`.\n- **`assigneeId` \u0437\u0430\u0434\u0430\u0447\u0438** \u2014 \u0443\u043F\u043E\u043C\u044F\u043D\u0443\u0442\u044B\u0439 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C, \u0430 \u041D\u0415 id \u0441\u043C\u043E\u0442\u0440\u044F\u0449\u0435\u0433\u043E.\n- \u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0437\u0432\u043E\u043D\u043A\u0443 / \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u0441\u0435\u0441\u0441\u0438\u044F \u2192 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0432\u0435\u0440\u043D\u0451\u0442 \u0432\u043D\u044F\u0442\u043D\u0443\u044E \u043E\u0448\u0438\u0431\u043A\u0443 (\u043F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u0434\u0430\u0451\u0442 HTML \u043B\u043E\u0433\u0438\u043D\u0430).\n\n### 5.5. \u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0444\u0430\u0439\u043B (\u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430, \u0444\u0430\u0439\u043B \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u043F\u0438\u0441\u044C \u0437\u0432\u043E\u043D\u043A\u0430)\n\n\u0421\u0441\u044B\u043B\u043A\u0438 \u043F\u043E\u0440\u0442\u0430\u043B \u043C\u0438\u043D\u0442\u0438\u0442 \u0438 \u043F\u043E\u0434\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442 \u0441\u0430\u043C, \u043D\u043E \u043F\u043E\u0434\u043F\u0438\u0441\u044C \u041D\u0415 \u0437\u0430\u043C\u0435\u043D\u044F\u0435\u0442 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u044E \u2014 \u043A\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u0432\n\u0441\u0435\u0441\u0441\u0438\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F.\n\n```jsonc\n// \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430: \u0441\u0441\u044B\u043B\u043A\u0443 \u0431\u0435\u0440\u0451\u043C \u0438\u0437 files[].urlDownload \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 bitrix_chat_load\nbitrix_file_download { "url": "https://<\u043F\u043E\u0440\u0442\u0430\u043B>/bitrix/services/main/ajax.php?action=disk.api.file.download&\u2026" }\nbitrix_call_recording { "callId": 4242 } // \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C \u0441\u043E\u0437\u0432\u043E\u043D\u0430 (\u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430\u0439\u0434\u0451\u0442 \u0441\u0430\u043C)\nbitrix_file_download { "url": "\u2026", "savePath": "/tmp/photo.png", "overwrite": true }\n```\n\n\u041E\u0442\u0432\u0435\u0442 \u2014 **\u043F\u0443\u0442\u044C, \u0430 \u043D\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435**: `{ path, bytes, contentType, fileName }` (\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044B \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u044E\u0442 \u0432\n\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442). \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0444\u0430\u0439\u043B \u043B\u043E\u0436\u0438\u0442\u0441\u044F \u0432 `~/.bitrix24-mcp-bridge/downloads/`; `savePath` \u0431\u0435\u0437 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043E `/`\n\u0442\u0440\u0430\u043A\u0442\u0443\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0438\u043C\u044F \u0432\u043D\u0443\u0442\u0440\u0438 \u044D\u0442\u043E\u0439 \u043F\u0430\u043F\u043A\u0438. \u041F\u043E\u0442\u043E\u043B\u043E\u043A \u2014 512 \u041C\u0411.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **\u0413\u0440\u0430\u043D\u0438\u0446\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u2014 origin**: \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0441 origin \u0441\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n- **\u0418\u043C\u044F \u0434\u0430\u0451\u0442 \u043F\u043E\u0440\u0442\u0430\u043B** (`Content-Disposition`), \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0431\u0435\u0437 `savePath` \u0443\u0433\u0430\u0434\u044B\u0432\u0430\u0442\u044C \u0435\u0433\u043E \u043D\u0435 \u043D\u0443\u0436\u043D\u043E.\n- **\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0435 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435** \u0442\u043E\u0433\u043E \u0436\u0435 \u0444\u0430\u0439\u043B\u0430 \u043F\u0430\u0434\u0430\u0435\u0442 \u0441 `already exists` \u2014 \u043F\u0435\u0440\u0435\u0434\u0430\u0439 `overwrite: true`.\n\n### 5.6. \u0421\u0442\u0430\u0440\u044B\u0435 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0444\u043E\u0440\u0443\u043C)\n\n\u0414\u043E \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430 \u043D\u0430 \u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0436\u0438\u043B\u043E \u0432 \u0444\u043E\u0440\u0443\u043C\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0438 \u0443 \u0441\u0442\u0430\u0440\u044B\u0445 \u0437\u0430\u0434\u0430\u0447 \u043E\u043D\u043E \u0442\u0430\u043C \u0438 \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C: \u0432\n\u0447\u0430\u0442\u0435 (`CHAT_ID`) \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F \u0437\u0430\u0433\u043B\u0443\u0448\u043A\u0430 \u0441\u043E \u0441\u0441\u044B\u043B\u043A\u043E\u0439 `/task/comments/<id>/`. \u041F\u0440\u0438\u0437\u043D\u0430\u043A \u2014 \u0432\n`bitrix_task_get` \u043F\u043E\u043B\u0435 `COMMENTS_COUNT > 0` (\u0447\u0435\u0440\u0435\u0437 `params.select`; `FORUM_TOPIC_ID` \u0442\u043E\u0436\u0435 \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D),\n\u0430 \u0447\u0430\u0442 \u043F\u0443\u0441\u0442. JSON-\u043C\u0435\u0442\u043E\u0434\u0430 \u0447\u0442\u0435\u043D\u0438\u044F \u043D\u0435\u0442 \u2014 \u043C\u043E\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 HTML-\u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432.\n\n```jsonc\nbitrix_task_comments { "taskId": 1234 } // \u0432\u0441\u0451 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435; \u0434\u043B\u0438\u043D\u043D\u043E\u0435 \u0443\u0435\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043B\nbitrix_task_comments { "taskId": 1234, "limit": 10 } // \u0442\u043E\u043B\u044C\u043A\u043E 10 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0445\nbitrix_task_comments { "taskId": 1234, "output": "inline" } // \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435\nbitrix_task_comments { "taskId": 1234, "beforeId": 5678 } // \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0432\u0433\u043B\u0443\u0431\u044C \u043E\u0442 id\n```\n\n\u041E\u0442\u0432\u0435\u0442: `comments[]` \u043F\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0443 (\u0441\u0442\u0430\u0440\u044B\u0435 \u2192 \u043D\u043E\u0432\u044B\u0435) \u2014 `{ id, authorId, author, date, dateIso, text, isNew,\nsystem, files[] }`, \u043F\u043B\u044E\u0441 `total`, `oldestId`, `scannedPages` \u0438 **`reachedHistoryStart`**: \u0435\u0441\u043B\u0438 \u043E\u043D\n`false` (\u0443\u043F\u0451\u0440\u043B\u0438\u0441\u044C \u0432 `maxPages`, \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435 10, \u0438\u043B\u0438 \u0432 `limit`), \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0441 `beforeId: <oldestId>`.\n\n- **`system: true`** \u2014 \u0441\u043B\u0443\u0436\u0435\u0431\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u0438 (\xAB\u0432\u044B \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u044B \u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u0435\u043C\xBB, \u0441\u043C\u0435\u043D\u0430 \u0441\u0440\u043E\u043A\u0430, \u043F\u0438\u043D\u0433\u0438), \u043D\u0435 \u0441\u043B\u043E\u0432\u0430 \u043B\u044E\u0434\u0435\u0439.\n- **`date`** \u2014 \u043A\u0430\u043A \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043B\u0435 (\xAB9 \u043C\u0430\u0440\u0442\u0430 2024 08:15\xBB), **`dateIso`** \u2014 \u0442\u043E \u0436\u0435 \u0432 `2024-03-09T08:15`\n (\u043C\u0435\u0441\u0442\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0440\u0442\u0430\u043B\u0430; \u0434\u043B\u044F \xAB\u0432\u0447\u0435\u0440\u0430, 12:00\xBB \u0438 \u0434\u0430\u0442 \u0431\u0435\u0437 \u0433\u043E\u0434\u0430 \u2014 `null`).\n- **`files[]`** \u2014 `{ attachedId, name, size, url }`; `url` \u0441\u043A\u0430\u0440\u043C\u043B\u0438\u0432\u0430\u0439 `bitrix_file_download` (\xA75.5).\n- **`text`** \u2014 \u0431\u0435\u0437 \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0438; \u0443 \u0441\u0441\u044B\u043B\u043A\u0438 \u0441 \u043F\u043E\u0434\u043F\u0438\u0441\u044C\u044E \u0430\u0434\u0440\u0435\u0441 \u0434\u043E\u043F\u0438\u0441\u0430\u043D \u0432 \u0441\u043A\u043E\u0431\u043A\u0430\u0445: \xAB\u043C\u0430\u043A\u0435\u0442 (https://\u2026)\xBB.\n- **\u0414\u043B\u0438\u043D\u043D\u043E\u0435 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043D\u0435 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435** (\u043A\u0430\u043A \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0437\u0432\u043E\u043D\u043A\u0430, \xA75.4): \u0441\u0432\u044B\u0448\u0435 ~20 \u041A\u0411 (`output:\n "auto"` = \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435) \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 `comments: []` \u0438 `files`: `files.text` \u2014 `task-<id>-comments.txt`,\n \u0441\u0442\u0440\u043E\u043A\u0430 = \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 (`#5678 [2024-03-09T08:15] \u0418\u043C\u044F (id 101): \u0442\u0435\u043A\u0441\u0442`, \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u044B \u2014 ` \u23CE `), \u0435\u0451 \u0443\u0434\u043E\u0431\u043D\u043E\n \u0433\u0440\u0435\u043F\u0430\u0442\u044C; `files.json` \u2014 \u043F\u043E\u043B\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442. `output: "file"` \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043B.\n- **\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u043C \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u043E\u043C\u0435\u0447\u0430\u0435\u0442\u0441\u044F.** \u041F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u043C\u0435\u0447\u0430\u0435\u0442 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u043C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043C\n `readComment`, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0448\u043B\u0451\u0442 JS \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0440\u0438 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0435; \u043C\u043E\u0441\u0442 JS \u043D\u0435 \u0438\u0441\u043F\u043E\u043B\u043D\u044F\u0435\u0442. \u041F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043E:\n `viewedDate` \u0437\u0430\u0434\u0430\u0447\u0438 \u043F\u043E\u0441\u043B\u0435 \u0447\u0442\u0435\u043D\u0438\u044F \u043D\u0435 \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F. `isNew: true` \u2014 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043D\u0435 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C.\n- \u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0437\u0430\u0434\u0430\u0447\u0435 / \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u0441\u0435\u0441\u0441\u0438\u044F \u2192 \u0432\u043D\u044F\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 (\u043F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u0434\u0430\u0451\u0442 HTML \u043B\u043E\u0433\u0438\u043D\u0430).\n\n---\n\n\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 \u043D\u043E\u0432\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438, \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442 (`bodyType`, `responseType`, path-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B) \u0438\n\u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043F\u0440\u0430\u0432\u043E\u043A \u0432 \u0436\u0438\u0432\u043E\u0439 daemon \u2014 `docs/reconnaissance.md`.\n' ? '# Bitrix24 API notes (reverse-engineered)\n\n\u041A\u0430\u043A \u0430\u0433\u0435\u043D\u0442\u0443 \u0440\u0430\u0431\u043E\u0442\u0430\u0442\u044C \u0441 Bitrix24 \u0447\u0435\u0440\u0435\u0437 \u044D\u0442\u043E\u0442 \u043C\u043E\u0441\u0442: \u0444\u043E\u0440\u043C\u0430\u0442 `params`, \u0438\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439, \u0433\u043E\u0442\u043E\u0432\u044B\u0435 \u0446\u0435\u043F\u043E\u0447\u043A\u0438 \u0432\u044B\u0437\u043E\u0432\u043E\u0432.\n\n\u0414\u0432\u0435 \u043F\u043E\u0432\u0435\u0440\u0445\u043D\u043E\u0441\u0442\u0438 API. **\u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0439 REST** (`tasks.task.*`, `im.recent.list`, `im.user.get`, `im.chat.get`,\n`socialnetwork.api.workgroup.*`) \u2014 \u0435\u0441\u0442\u044C \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u044B\u0435 \u0434\u043E\u043A\u0438, \u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430 \u043D\u0438\u0445 \u043F\u043E\u043C\u0435\u0447\u0435\u043D\u044B **\u{1F4D6}**\n([`apidocs.bitrix24.com`](https://apidocs.bitrix24.com); \u0430\u0433\u0435\u043D\u0442\u0443 \u0441 MCP context7 \u2014 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\n`/bitrix24/b24restdocs`). **\u0412\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u0435 ajax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B** (`im.v2.*`, `tasks.v2.*`, `ui.entityselector.*`)\n\u043F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0445 \u0434\u043E\u043A\u043E\u0432 \u043D\u0435 \u0438\u043C\u0435\u044E\u0442 \u2014 \u0432\u0441\u0451 \u043D\u0438\u0436\u0435 \u0434\u043E\u0431\u044B\u0442\u043E \u0436\u0438\u0432\u044B\u043C \u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C; \u043A\u043E\u043D\u0432\u0435\u0440\u0442 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043F\u043E\u043B\u0435\u0439 \u0443 \u043D\u0438\u0445 \u043C\u043E\u0433\u0443\u0442\n\u043E\u0442\u043B\u0438\u0447\u0430\u0442\u044C\u0441\u044F \u043E\u0442 \u{1F4D6}-\u0430\u043D\u0430\u043B\u043E\u0433\u043E\u0432. \u0418\u043C\u0435\u043D\u0430 \u043F\u043E\u043B\u0435\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B \u0434\u043B\u044F \u043E\u0431\u043B\u0430\u0447\u043D\u043E\u0433\u043E Bitrix24; \u043D\u0430 \u0434\u0440\u0443\u0433\u043E\u043C \u043F\u043E\u0440\u0442\u0430\u043B\u0435 \u0441\u0432\u0435\u0440\u044F\u0439\u0441\u044F\n\u0440\u0435\u0432\u0435\u0440\u0441\u043E\u043C (`docs/reconnaissance.md`).\n\n---\n\n## 1. \u041A\u0430\u043A \u0432\u044B\u0437\u044B\u0432\u0430\u0442\u044C\n\n- **\u0422\u0438\u043F\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B** (`bitrix_tasks_list`, `bitrix_task_get`, `bitrix_chat_load`, \u2026) \u2014\n \u043E\u0431\u0451\u0440\u0442\u043A\u0438 \u0441 \u0440\u0430\u0437\u0443\u043C\u043D\u044B\u043C\u0438 \u0434\u0435\u0444\u043E\u043B\u0442\u0430\u043C\u0438; \u0438\u0445 \u043F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u044F \u0432\u0438\u0434\u043D\u044B \u0441\u0440\u0435\u0434\u0438 MCP-\u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432. \u0422\u043E\u0447\u043D\u0430\u044F\n \u0432\u044B\u0431\u043E\u0440\u043A\u0430 \u2014 \u043E\u043F\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u043C `params`: \u043E\u043D \u043C\u0435\u0440\u0436\u0438\u0442\u0441\u044F **\u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u043C** \u0438 \u043F\u0435\u0440\u0435\u043A\u0440\u044B\u0432\u0430\u0435\u0442 \u0434\u0435\u0444\u043E\u043B\u0442\u044B.\n- **`bitrix_call { name, params }`** \u2014 \u043B\u044E\u0431\u043E\u0435 \u0438\u043C\u044F \u0438\u0437 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 (`actions.json`), `params` \u0432 \u043D\u0430\u0442\u0438\u0432\u043D\u043E\u043C\n \u0444\u043E\u0440\u043C\u0430\u0442\u0435 Bitrix (\xA73). \u041F\u043E\u043B\u043D\u044B\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0438\u043C\u0451\u043D \u043E\u0442\u0434\u0430\u0451\u0442 \u0441\u0430\u043C `bitrix_call` \u0432 \u0441\u0432\u043E\u0451\u043C \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0438.\n- \u041A\u0430\u0442\u0430\u043B\u043E\u0433 \u043C\u043E\u0436\u0435\u0442 \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C **\u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0435** \u0432\u044B\u0437\u043E\u0432\u044B: \u043D\u0430\u043B\u0438\u0447\u0438\u0435 \u0437\u0430\u043F\u0438\u0441\u0438 = \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435 \u0432\u044B\u0437\u0432\u0430\u0442\u044C. \u042D\u0442\u043E \u043D\u0435 \u0440\u0435\u0436\u0438\u043C\n \xAB\u0442\u043E\u043B\u044C\u043A\u043E \u0447\u0442\u0435\u043D\u0438\u0435\xBB.\n- \u0423 \u043E\u0431\u0451\u0440\u0442\u043E\u043A \u0435\u0441\u0442\u044C \u0434\u0435\u0444\u043E\u043B\u0442\u044B (\u043D\u0430\u043F\u0440. `bitrix_tasks_list` \u0441\u043E\u0440\u0442\u0438\u0440\u0443\u0435\u0442 `{"ID":"desc"}`), \u0443 `bitrix_call` \u0438\u0445 \u043D\u0435\u0442 \u2014\n \u043E\u0434\u0438\u043D \u0438 \u0442\u043E\u0442 \u0436\u0435 \u0444\u0438\u043B\u044C\u0442\u0440 \u0434\u0430\u0441\u0442 \u0440\u0430\u0437\u043D\u044B\u0435 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B. \u0421\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u0435\u0448\u044C \u0432\u044B\u0434\u0430\u0447\u0438 \u2014 \u0437\u0430\u0434\u0430\u0432\u0430\u0439 `order` \u044F\u0432\u043D\u043E.\n- \u041E\u0442\u0432\u0435\u0442 `invalid_csrf` / `invalid_authentication` = \u0441\u0435\u0441\u0441\u0438\u044F \u043F\u043E\u0440\u0442\u0430\u043B\u0430 \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u2192 \u043F\u0435\u0440\u0435\u043B\u043E\u0433\u0438\u043D\u044C\u0441\u044F \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435\n \u043D\u0430 \u0432\u043A\u043B\u0430\u0434\u043A\u0435 \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n\n---\n\n## 2. \u0424\u043E\u0440\u043C\u0430\u0442 \u043E\u0442\u0432\u0435\u0442\u0430\n\nAjax-\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u043B\u0435\u0440\u044B (`/bitrix/services/main/ajax.php`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442 HTTP 200 \u0441 \u043A\u043E\u043D\u0432\u0435\u0440\u0442\u043E\u043C:\n\n```jsonc\n{ "status": "success" | "error",\n "data": { ... },\n "errors": [] } // \u041F\u0423\u0421\u0422\u041E\u0419 \u043C\u0430\u0441\u0441\u0438\u0432 \u043F\u0440\u0438 \u0443\u0441\u043F\u0435\u0445\u0435! (\u0432 JS [] \u2014 truthy)\n```\n\n\u0423\u0441\u043F\u0435\u0445 = `status:"success"` \u0438/\u0438\u043B\u0438 **\u043F\u0443\u0441\u0442\u043E\u0439** `errors`. \u041D\u0435\u043F\u0443\u0441\u0442\u043E\u0439 `errors` / `status:"error"` / top-level\n`error` \u2014 \u0440\u0435\u0430\u043B\u044C\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 (\u043C\u043E\u0441\u0442 \u043C\u0430\u043F\u043F\u0438\u0442 \u0435\u0451 \u0432 `ok:false`). REST-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u044B (`/rest/*.json`) \u043E\u0442\u0432\u0435\u0447\u0430\u044E\u0442\n\u0438\u043D\u0430\u0447\u0435: `{ "result": \u2026, "next", "total", "time" }` \u2014 \u0431\u0435\u0437 `errors`.\n\n---\n\n## 3. \u041A\u0430\u0442\u0430\u043B\u043E\u0433: \u0438\u043C\u044F \u2192 action \u2192 params\n\n\u0424\u043E\u0440\u043C\u0430 `params` \u0440\u0430\u0437\u043B\u0438\u0447\u0430\u0435\u0442\u0441\u044F \u043F\u043E \u043C\u0435\u0442\u043E\u0434\u0443: \u0433\u0434\u0435-\u0442\u043E \u043F\u043B\u043E\u0441\u043A\u043E, \u0433\u0434\u0435-\u0442\u043E \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E, \u0433\u0434\u0435-\u0442\u043E \u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E \u0432 `params[\u2026]` \u2014\n\u043A\u043E\u043B\u043E\u043D\u043A\u0430 \xABparams\xBB \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0435\u0442 \u0442\u043E\u0447\u043D\u0443\u044E \u0444\u043E\u0440\u043C\u0443 (\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0442\u0435\u043B\u0430 \u043C\u043E\u0441\u0442 \u0431\u0435\u0440\u0451\u0442 \u043D\u0430 \u0441\u0435\u0431\u044F).\n\n| \u0418\u043C\u044F (`bitrix_call`) | action / endpoint | params | \u041F\u0430\u0433\u0438\u043D\u0430\u0446\u0438\u044F |\n|---|---|---|---|\n| `tasks.list` | `tasks.task.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `filter{RESPONSIBLE_ID,REAL_STATUS,GROUP_ID,\u2026}`, `select[]`, `order{}` | **`PAGEN_1`** \u2014 \u043D\u043E\u043C\u0435\u0440 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (1, 2, 3\u2026), \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 = 20 \u0437\u0430\u0434\u0430\u0447; `start` **\u043D\u0435 \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442** (\u0432\u0435\u0440\u043D\u0451\u0442 \u0442\u0443 \u0436\u0435 \u043F\u0435\u0440\u0432\u0443\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443) |\n| `task.get` | `tasks.task.get` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `taskId`, `select[]` | \u2014 |\n| `task.v2.get` | `tasks.v2.Task.get` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.scrum.info` | `tasks.v2.Scrum.getTaskInfo` | `{"taskId":N}` | \u2014 |\n| `task.files` | `tasks.v2.File.listObjects` | `{"ids":[N,\u2026]}` | \u2014 |\n| `task.views.count` | `tasks.v2.Task.View.User.count` | \u0432\u043B\u043E\u0436\u0435\u043D\u043D\u043E: `{"task":{"id":N}}` | \u2014 |\n| `task.subtasks` | `tasks.v2.Task.Relation.Child.list` | `{"taskId":N,"withIds":true,"navigation":{"size":N}}` | `navigation` |\n| `task.related` | `tasks.v2.Task.Relation.Related.list` | \u043A\u0430\u043A `task.subtasks` | `navigation` |\n| `projects.list` | `socialnetwork.api.workgroup.list` | \u0432\u0435\u0440\u0445\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C: `select[]`, `order{}`, `filter{}` | `start` (\u0448\u0430\u0433 50; `start=(N-1)*50`, `-1` \u2014 \u043E\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 `total`) \u{1F4D6} |\n| `projects.get` | `socialnetwork.api.workgroup.get` | **\u043E\u0431\u0451\u0440\u043D\u0443\u0442\u043E**: `params[groupId]`, `params[select][]` | \u2014 |\n| `chats.recent` | `/rest/im.recent.list.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `LIMIT`, `SKIP_OPENLINES`, `UNREAD_ONLY` | `LIMIT` |\n| `recent.load` | `im.v2.Recent.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[recentSection]` (`tasksTask`/`collab`/\u2026), `filter[unread]`, `filter[parentId]` | `recent.tail` |\n| `recent.tail` | `im.v2.Recent.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `limit`, `filter[lastMessageDate]` (\u043A\u0443\u0440\u0441\u043E\u0440), `filter[recentSection]` | `filter[lastMessageDate]` |\n| `chat.load` | `im.v2.Chat.load` | \u043F\u043B\u043E\u0441\u043A\u043E: `dialogId`\\|`chatId`, `messageLimit` | \u2014 |\n| `chat.dialogId` | `im.v2.Chat.getDialogId` | \u043F\u043B\u043E\u0441\u043A\u043E: `externalId` (\u043D\u0430\u043F\u0440. `"sg"+groupId`) | \u2014 |\n| `chat.messages` | `im.v2.Chat.Message.list` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit` | \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044F\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430 \u2014 \u043D\u0430\u0437\u0430\u0434 **\u043D\u0435 \u043B\u0438\u0441\u0442\u0430\u0435\u0442**, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439 `chat.messages.tail` |\n| `chat.messages.tail` | `im.v2.Chat.Message.tail` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `limit`, `filter[lastId]`, `order[id]` | `filter[lastId]` (\xA75.1) |\n| `chat.message.read` | `im.v2.Chat.Message.read` | \u043F\u043B\u043E\u0441\u043A\u043E: `chatId`, `ids[]`, `actionUuid` | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `chat.read.all` | `im.v2.Chat.readAll` | \u0431\u0435\u0437 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043E\u0432 | \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439 |\n| `im.user.get` | `/rest/im.user.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ID` | \u2014 |\n| `im.chat.get` | `/rest/im.chat.get.json` | \u043F\u043B\u043E\u0441\u043A\u043E: `ENTITY_TYPE`, `ENTITY_ID` (\u043D\u0430\u043F\u0440. `TASKS_TASK`+taskId) | \u2014 |\n| `entityselector.load` | `ui.entityselector.load` | `{"dialog":{entities,preselectedItems,\u2026}}` | \u2014 |\n| `entityselector.search` | `ui.entityselector.doSearch` | `{"dialog":{\u2026},"searchQuery":{"query":"\u2026","queryWords":["\u2026"]}}` | \u2014 |\n| `call.detail` | `GET /call/detail/{callId}` | `callId` (\u043F\u043E\u0434\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0432 \u043F\u0443\u0442\u044C), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` \u2192 HTML | \u0441\u043C. \xA75.4 |\n| `task.comments.page` | `GET /task/comments/{taskId}/` | `taskId` (\u0432 \u043F\u0443\u0442\u044C), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` \u2192 HTML \u0441\u0442\u0430\u0440\u044B\u0445 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432 | \u0441\u043C. \xA75.6 |\n| `task.comments.navigate` | `bitrix:forum.comments` \u2192 `navigateComment` | \u0444\u043E\u0440\u043C\u0430: `ENTITY_XML_ID=TASK_<id>`, `EXEMPLAR_ID`, `signedParameters` (\u043E\u0431\u0430 \u2014 \u0438\u0437 HTML \u043F\u0435\u0440\u0432\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B), `FILTER[<ID]` | `FILTER[<ID]` \u2014 \u043A\u0443\u0440\u0441\u043E\u0440; \u043F\u0440\u043E\u0449\u0435 `bitrix_task_comments` (\xA75.6) |\n\n---\n\n## 4. \u0421\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A \u043F\u043E\u043B\u0435\u0439\n\n**\u0417\u0430\u0434\u0430\u0447\u0430** (`tasks.task.*`) \u2014 \u043F\u043E\u043B\u044F \u0434\u043B\u044F `select`/`filter` \u0432 UPPER_CASE: `ID`, `TITLE`, `DESCRIPTION`,\n`STATUS`, `REAL_STATUS`, `RESPONSIBLE_ID`, `CREATED_BY`, `CREATED_DATE`, `CHANGED_DATE`, `DEADLINE`,\n`CLOSED_DATE`, `PRIORITY`, `GROUP_ID`, `TAGS`, `TIME_ESTIMATE`, **`CHAT_ID`** (id \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F\n\u0437\u0430\u0434\u0430\u0447\u0438 \u2014 \u043F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432\u0435\u0440 `taskId \u2192 chatId`, \xA75.2), `UF_*`. \u041E\u0442\u0432\u0435\u0442 \u043F\u043E\u0434\u043A\u043B\u0430\u0434\u044B\u0432\u0430\u0435\u0442 \u043E\u0431\u044A\u0435\u043A\u0442\u044B `group`,\n`responsible`, `creator`, `action`.\n\u{1F4D6} (`tasks.task.get`/`list`) \u2014 \u0441\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E: `parentId`, `stageId`, `sprintId`, `backlogId`,\n`commentsCount`, `timeSpentInLogs`, `favorite`, `flowId`, `mark`, `accomplices[]`, `auditors[]`,\n`checklist{}`, `subStatus`; \u0432 \u043E\u0444\u0438\u0446\u0438\u0430\u043B\u044C\u043D\u043E\u043C REST-\u043E\u0442\u0432\u0435\u0442\u0435 \u043F\u043E\u043B\u044F \u043F\u0440\u0438\u0445\u043E\u0434\u044F\u0442 **camelCase**, \u0430 \u0432 `select`/`filter`\n\u043E\u043D\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **UPPER_CASE**. \u0414\u043E\u043F. \u0432\u044B\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u2014 \u0444\u043B\u0430\u0433\u0430\u043C\u0438 `params{WITH_TIMER_INFO, WITH_RESULT_INFO,\nWITH_PARSED_DESCRIPTION}`.\n\n**\u0421\u0442\u0430\u0442\u0443\u0441\u044B** (`REAL_STATUS` \u2014 \xAB\u043D\u0430\u0441\u0442\u043E\u044F\u0449\u0435\u0435\xBB \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0435 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435): `1` \u041D\u043E\u0432\u0430\u044F \xB7 `2` \u0416\u0434\u0451\u0442 \u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \xB7\n`3` \u0412\u044B\u043F\u043E\u043B\u043D\u044F\u0435\u0442\u0441\u044F \xB7 `4` \u0416\u0434\u0451\u0442 \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044F \xB7 `5` \u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0430 \xB7 `6` \u041E\u0442\u043B\u043E\u0436\u0435\u043D\u0430 \xB7 `7` \u041E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0430. \u041F\u043E\u043B\u0435 `STATUS`\n\u043F\u043E\u0432\u0435\u0440\u0445 \u044D\u0442\u043E\u0433\u043E \u043D\u0435\u0441\u0451\u0442 **\u043C\u0435\u0442\u0430-\u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F** \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F (\u043F\u043E\u0447\u0442\u0438 \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430 / \u043D\u0435 \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u043D\u0430 / \u043F\u0440\u043E\u0441\u0440\u043E\u0447\u0435\u043D\u0430),\n\u043F\u043E\u044D\u0442\u043E\u043C\u0443 \xAB\u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 \u043B\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0435\u0439\u0447\u0430\u0441\xBB \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E **`REAL_STATUS`** (\u043D\u0430\u043F\u0440. `{"REAL_STATUS":3}`) \u{1F4D6}.\n\u0410\u0441\u0438\u043C\u043C\u0435\u0442\u0440\u0438\u044F: \u0432 **`filter`** \u0440\u0430\u0431\u043E\u0442\u0430\u0435\u0442 `REAL_STATUS`, \u0430 \u0432 **`select`** \u0435\u0433\u043E \u0443\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0431\u0435\u0441\u043F\u043E\u043B\u0435\u0437\u043D\u043E \u2014 \u043F\u043E\u043B\u0435 \u043C\u043E\u043B\u0447\u0430\n\u043D\u0435 \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F; \u0447\u0442\u043E\u0431\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435, \u043F\u0440\u043E\u0441\u0438 `select:["STATUS"]` \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043A\u043B\u044E\u0447 `status` \u0441\u043E\n\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u043C \u043F\u043E \u0442\u043E\u0439 \u0436\u0435 \u0448\u043A\u0430\u043B\u0435 1..7 (\u0443 \u043E\u0431\u0451\u0440\u0442\u043A\u0438 `bitrix_tasks_list` \u043E\u043D \u0443\u0436\u0435 \u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u043C `select`).\n\n**\u0424\u0438\u043B\u044C\u0442\u0440 `tasks.task.list`** \u2014 \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0434 \u0438\u043C\u0435\u043D\u0435\u043C \u043F\u043E\u043B\u044F: `!` (\u043D\u0435 \u0440\u0430\u0432\u043D\u043E / \u0438\u0441\u043A\u043B\u044E\u0447\u0438\u0442\u044C),\n`<`, `<=`, `>`, `>=`, `%` (LIKE-\u043F\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0430). \u041D\u0430\u043F\u0440. `{"!REAL_STATUS":5}` \u2014 \u0432\u0441\u0435 **\u043D\u0435\u0437\u0430\u043A\u0440\u044B\u0442\u044B\u0435**,\n`{">=DEADLINE":"2026-07-01"}`, `{"%TITLE":"\u043A\u0430\u0440\u0442\u0430"}`. \u0424\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435 \u043F\u043E\u043B\u044F: `ID`, `PARENT_ID`, `GROUP_ID`,\n`CREATED_BY`, `RESPONSIBLE_ID`, `ACCOMPLICE`, `AUDITOR`, `REAL_STATUS`, `STATUS`, `PRIORITY`, `TAG`,\n`STAGE_ID`, `SPRINT_ID`, `BACKLOG_ID`, `DEADLINE`, `*_DATE`, `UF_CRM_TASK`.\n\n> **\xAB\u041C\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438\xBB \u2260 \u0442\u043E\u043B\u044C\u043A\u043E `RESPONSIBLE_ID`.** \u0420\u043E\u043B\u0438 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u044C\u043D\u044B: \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439\n> (`RESPONSIBLE_ID`), \u0441\u043E\u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C (`ACCOMPLICE`), \u043D\u0430\u0431\u043B\u044E\u0434\u0430\u0442\u0435\u043B\u044C (`AUDITOR`), \u043F\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0449\u0438\u043A\n> (`CREATED_BY`); \u0435\u0434\u0438\u043D\u043E\u0433\u043E \xAB\u043B\u044E\u0431\u0430\u044F \u0440\u043E\u043B\u044C\xBB \u043F\u043E\u043B\u044F \u0432 `list` \u043D\u0435\u0442 \u2014 \u0447\u0442\u043E\u0431\u044B \u0441\u043E\u0431\u0440\u0430\u0442\u044C **\u0432\u0441\u0435** \u0441\u0432\u043E\u0438 \u0437\u0430\u0434\u0430\u0447\u0438, \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\n> \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u044B \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u0438\u0445 \u0432\u044B\u0437\u043E\u0432\u043E\u0432 (\u043C\u0438\u043D\u0438\u043C\u0443\u043C `RESPONSIBLE_ID` + `ACCOMPLICE`) \u0438 **\u0434\u0435\u0434\u0443\u043F\u043B\u0438\u0446\u0438\u0440\u0443\u0439 \u043F\u043E `id`** \u2014\n> \u043E\u0434\u043D\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0430\u0441\u0442\u043E \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043D\u0435\u0441\u043A\u043E\u043B\u044C\u043A\u043E \u0440\u043E\u043B\u0435\u0439. \u0412 **`filter`** \u0440\u043E\u043B\u0438 \u0432 **\u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** \u0447\u0438\u0441\u043B\u0435\n> (`ACCOMPLICE`/`AUDITOR`), \u0432 **`select`** \u2014 \u0432\u043E **\u043C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u043C** (`ACCOMPLICES`/`AUDITORS`).\n\n> **Scrum-\u0437\u0430\u0434\u0430\u0447\u0438 (\u0441\u043F\u0440\u0438\u043D\u0442\u044B).** \u041F\u043E\u043B\u0435 `SPRINT_ID` \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u0436\u0451\u0441\u0442\u043A\u0438\u0439 `filter[SPRINT_ID]` \u043C\u043E\u0433\u0443\u0442 \u0440\u0430\u0441\u0445\u043E\u0434\u0438\u0442\u044C\u0441\u044F:\n> \u0437\u0430\u0434\u0430\u0447\u0430 \u0447\u0438\u0441\u043B\u0438\u0442\u0441\u044F \u0437\u0430 \u0441\u043F\u0440\u0438\u043D\u0442\u043E\u043C \u043F\u043E \u0441\u0432\u043E\u0435\u043C\u0443 \u043F\u043E\u043B\u044E, \u043D\u043E \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u0435\u0442 \u0432 \u0432\u044B\u0431\u043E\u0440\u043A\u0443 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 (\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0435\u043D\u0430 \u0432 \u0431\u044D\u043A\u043B\u043E\u0433\n> \u0438\u043B\u0438 \u0432 \u0438\u043D\u043E\u0439 stage). \u0415\u0441\u043B\u0438 \u043F\u043E \u0444\u0438\u043B\u044C\u0442\u0440\u0443 \xAB\u043C\u0430\u043B\u043E\u0432\u0430\u0442\u043E\xBB \u2014 \u043F\u0435\u0440\u0435\u043F\u0440\u043E\u0432\u0435\u0440\u044C \u0431\u0435\u0437 \u043D\u0435\u0433\u043E \u0438 \u043E\u0442\u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0439 \u043F\u043E\n> `SPRINT_ID`/`STAGE_ID` \u0443 \u0441\u0435\u0431\u044F. \u041C\u0435\u0442\u043E\u0434\u0430 \xAB\u043A\u043E\u043B\u043E\u043D\u043A\u0438 scrum-\u0434\u043E\u0441\u043A\u0438\xBB (`STAGE_ID` \u2192 \u0438\u043C\u044F \u043A\u043E\u043B\u043E\u043D\u043A\u0438) \u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0435 \u043D\u0435\u0442.\n\n**\u0413\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442 \u2014 \u0441\u043F\u0438\u0441\u043E\u043A** (`workgroup.list`): `ID`, `NAME`, `DESCRIPTION`, `NUMBER_OF_MEMBERS`,\n`OWNER_ID`, `DATE_CREATE`, `PROJECT` (Y=\u043F\u0440\u043E\u0435\u043A\u0442/N=\u0433\u0440\u0443\u043F\u043F\u0430), `TYPE`; **\u0431\u0435\u0437 `select` \u0432\u0435\u0440\u043D\u0451\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E `ID`**.\n\u{1F4D6} \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0435\u043C\u044B\u0435: `ID`, `NAME`, `OWNER_ID`, `ACTIVE`, `VISIBLE`, `OPENED`, `CLOSED`, `PROJECT`,\n`SUBJECT_ID`, `SITE_ID`, `DATE_CREATE`, `DATE_UPDATE`, `DATE_ACTIVITY`; \u043E\u043F\u0435\u0440\u0430\u0442\u043E\u0440\u044B \u0444\u0438\u043B\u044C\u0442\u0440\u0430\n`>= > <= < % =% %= !% != !`.\n**\u0413\u0440\u0443\u043F\u043F\u0430 \u2014 \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430** (`workgroup.get`): \u043F\u043B\u044E\u0441 `OWNER_DATA`, `SUBJECT_DATA`, `MEMBERS[]`,\n`MODERATOR_MEMBERS[]`, **`CHAT_ID`**, `DIALOG_ID`, `IMAGE_ID`, UF-\u043F\u043E\u043B\u044F.\n\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0439 \u0447\u0430\u0442** (`im.recent.list`): `id` (\u044D\u0442\u043E dialogId: \u0447\u0438\u0441\u043B\u043E = \u044E\u0437\u0435\u0440, `"chat"+N` = \u0447\u0430\u0442), `chat_id`,\n`type` (`user`/`chat`), `title`, `message{id,text,file,author_id,date,status}`, `counter` (\u043D\u0435\u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u0445),\n`unread`, `last_id`, `pinned`, `date_update`, `date_last_activity`, `user{\u2026}`,\n`chat{\u2026 entity_type, entity_id, owner, \u2026}`; \u0435\u0441\u0442\u044C \u043B\u0438 \u0435\u0449\u0451 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u2014 `hasMore`/`hasMorePages` \u{1F4D6}.\n**\u041D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u043F\u043E \u0441\u0435\u043A\u0446\u0438\u0438** (`im.v2.Recent.load`): `filter[recentSection]` \u2014 `default` (\u043E\u0431\u044B\u0447\u043D\u044B\u0435 \u0434\u0438\u0430\u043B\u043E\u0433\u0438),\n**`tasksTask` (\u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447)**, `collab`/`collabDefault`. \u0412\u0433\u043B\u0443\u0431\u044C \u2014 `im.v2.Recent.tail` \u0441 \u043A\u0443\u0440\u0441\u043E\u0440\u043E\u043C\n`filter[lastMessageDate]` (ISO-\u0434\u0430\u0442\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0433\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B).\n\n**\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u044E\u0437\u0435\u0440\u0430** (`im.user.get`): `id`, `name`, `first_name`, `last_name`, `avatar`, `work_position`,\n`gender`, `status`, `online` \u2014 \u0440\u0435\u0437\u043E\u043B\u0432 \u0430\u0432\u0442\u043E\u0440\u0430 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F (`authorId`) \u0432 \u0438\u043C\u044F.\n\n**\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435** (`im.v2.Chat.Message.*`): `id`, `chatId`, `authorId`, `date`, `text`, `params`, `viewed`;\n\u043E\u0442\u0432\u0435\u0442 \u0442\u0430\u043A\u0436\u0435 \u043D\u0435\u0441\u0451\u0442 `users[]` (\u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438), `additionalMessages[]`, `hasPrevPage`/`hasNextPage`.\n\n---\n\n## 5. \u0421\u0446\u0435\u043D\u0430\u0440\u0438\u0438\n\n```jsonc\n// \u043E\u0442\u043A\u0440\u044B\u0442\u044B\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0433\u043E 55, \u043F\u043E \u0434\u0435\u0434\u043B\u0430\u0439\u043D\u0443, \u0432\u0442\u043E\u0440\u0430\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430\nbitrix_tasks_list { "params": { "filter": {"RESPONSIBLE_ID":55,"REAL_STATUS":2},\n "order": {"DEADLINE":"asc"}, "start": 50 } }\n\n// \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u044B\u043C \u043D\u0430\u0431\u043E\u0440\u043E\u043C \u043F\u043E\u043B\u0435\u0439; v2-\u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0430; \u0444\u0430\u0439\u043B\u044B, \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u044B, \u0441\u0432\u044F\u0437\u0438\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","TITLE","DESCRIPTION","TAGS"] } }\nbitrix_task_get_v2 { "taskId": 4229 } // \u2192 { "task": { "id": 4229 } }\nbitrix_call { "name": "task.files", "params": { "ids": [4229] } }\nbitrix_task_subtasks { "taskId": 4229 }\nbitrix_task_related { "taskId": 4229 }\n\n// \u043F\u0440\u043E\u0435\u043A\u0442\u044B \u043F\u043E \u0434\u0430\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F; \u043F\u043E\u043B\u043D\u0430\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0433\u0440\u0443\u043F\u043F\u044B (\u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID)\nbitrix_projects_list { "params": { "order": {"DATE_CREATE":"desc"} } }\nbitrix_project_get { "groupId": 15 }\n```\n\n### 5.1. \u041C\u0435\u0441\u0441\u0435\u043D\u0434\u0436\u0435\u0440 (IM): \u043A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId`\n\n\u0412\u0441\u0451 \u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u2014 **\u0447\u0430\u0442\u044B**: \u043B\u0438\u0447\u043D\u044B\u0435 1-\u043D\u0430-1, \u0433\u0440\u0443\u043F\u043F\u043E\u0432\u044B\u0435 (\u043F\u0440\u043E\u0435\u043A\u0442\u043E\u0432, \u043A\u0430\u043D\u0430\u043B\u043E\u0432) \u0438 **\u0447\u0430\u0442\u044B-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F \u0437\u0430\u0434\u0430\u0447**.\n\u0427\u0438\u0441\u043B\u043E\u0432\u043E\u0439 **`chatId`** \u2014 \u043A\u043B\u044E\u0447 \u043A\u043E \u0432\u0441\u0435\u043C \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F\u043C \u0441 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043C\u0438 (`bitrix_chat_messages`,\n`bitrix_chat_history`, `bitrix_chat_mark_read`); \u043F\u043E\u0447\u0442\u0438 \u043B\u044E\u0431\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 \u0430\u0433\u0435\u043D\u0442\u0430 \u0437\u0434\u0435\u0441\u044C \u2014 \u043D\u0430 \u0448\u0430\u0433\u0435 \u0435\u0433\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F.\n\n**\u0422\u0440\u0438 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u043E\u0434\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430** (\u0433\u043E\u0434\u044F\u0442\u0441\u044F \u0434\u043B\u044F \u0440\u0430\u0437\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u0439):\n\n| \u0418\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 | \u0427\u0442\u043E \u044D\u0442\u043E | \u041F\u0440\u0438\u043C\u0435\u0440 | \u041A\u0443\u0434\u0430 \u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044C |\n|---|---|---|---|\n| `chatId` | \u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 id \u0447\u0430\u0442\u0430 | `485` | \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F / \u0438\u0441\u0442\u043E\u0440\u0438\u044F / \u043E\u0442\u043C\u0435\u0442\u043A\u0430 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u043C |\n| `dialogId` | \u0430\u0434\u0440\u0435\u0441 \u0434\u043B\u044F \u041E\u0422\u041A\u0420\u042B\u0422\u0418\u042F: `userId` (\u043B\u0438\u0447\u043D\u044B\u0439 1-\u043D\u0430-1) **\u0438\u043B\u0438** `"chat"+chatId` (\u0433\u0440\u0443\u043F\u043F\u043E\u0432\u043E\u0439) | `11`, `"chat485"` | `bitrix_chat_load` |\n| `externalId` | \u0432\u043D\u0435\u0448\u043D\u0438\u0439 \u043A\u043B\u044E\u0447 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438 \u2192 \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u0432 `dialogId` | `"sg15"` (\u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u0430 15) | `bitrix_chat_get_dialog_id` |\n\n\u041A\u043B\u044E\u0447\u0435\u0432\u043E\u0435: **\u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u0441 \u0447\u0435\u043B\u043E\u0432\u0435\u043A\u043E\u043C = \u0435\u0433\u043E `userId` \u0432 \u0440\u043E\u043B\u0438 `dialogId`** (\u043E\u0442\u0434\u0435\u043B\u044C\u043D\u043E\u0433\u043E \xABid \u0447\u0430\u0442\u0430\xBB \u0443 1-\u043D\u0430-1\n\u0437\u043D\u0430\u0442\u044C \u043D\u0435 \u043D\u0443\u0436\u043D\u043E). `bitrix_chat_load` \u043F\u0440\u0438\u043D\u0438\u043C\u0430\u0435\u0442 `dialogId` **\u0438\u043B\u0438** `chatId` \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 **\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\n\u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0439 `chatId`** \u2014 \u0434\u0430\u043B\u044C\u0448\u0435 \u043E\u043F\u0435\u0440\u0438\u0440\u0443\u0435\u0448\u044C \u0438\u043C.\n\n**\u041A\u0430\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C `chatId` \u2014 \u043F\u043E \u0446\u0435\u043B\u0438:**\n\n| \u0425\u043E\u0447\u0443 \u043E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442\u2026 | \u0428\u0430\u0433\u0438 |\n|---|---|\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C \u043F\u043E \u0418\u041C\u0415\u041D\u0418** | `bitrix_entity_search { query:"\u0434\u043C\u0438\u0442\u0440\u0438\u0439" }` \u2192 \u0434\u0438\u0430\u043B\u043E\u0433 \u0441 `dialogId` = \u0435\u0433\u043E userId \u2192 `bitrix_chat_load { dialogId }` |\n| **\u0441 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C, id \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043D** | `bitrix_chat_load { dialogId: <userId> }` (userId \u2014 \u0438\u0437 \u0437\u0430\u0434\u0430\u0447\u0438 `RESPONSIBLE_ID`/`CREATED_BY`, \u0438\u0437 `bitrix_chats_recent`, \u0438\u0437 `bitrix_user_get`) |\n| **\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0417\u0410\u0414\u0410\u0427\u0418** | `bitrix_task_get` \u2192 `CHAT_ID` (\xA75.2) |\n| **\u041F\u0420\u041E\u0415\u041A\u0422\u0410/\u0433\u0440\u0443\u043F\u043F\u044B** | `bitrix_task_get`\u2192`GROUP_ID`\u2192`bitrix_project_get`\u2192`CHAT_ID`; \u043B\u0438\u0431\u043E `bitrix_chat_get_dialog_id { externalId:"sg<groupId>" }` |\n| **\u043D\u0435 \u0437\u043D\u0430\u044E \u0442\u043E\u0447\u043D\u043E, \u043A\u0430\u043A\u043E\u0439** | `bitrix_chats_recent` (\u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435, \u0441\u043E\u043F\u043E\u0441\u0442\u0430\u0432\u044C \u043F\u043E `title`/`user`) \u0438\u043B\u0438 `bitrix_entity_search { query }` |\n\n> \u041F\u043E\u0447\u0435\u043C\u0443 \u043D\u0435 \xAB\u043F\u0440\u043E\u0441\u0442\u043E \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432\xBB: `bitrix_chats_recent` (`im.recent.list`) \u043E\u0442\u0434\u0430\u0451\u0442 \u043B\u0438\u0448\u044C \u043D\u0435\u0434\u0430\u0432\u043D\u0438\u0435 \u0438\n> **\u0431\u0435\u0437 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447**. \u0414\u043B\u044F \u043F\u043E\u0438\u0441\u043A\u0430 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0433\u043E \u0447\u0430\u0442\u0430 \u2014 `bitrix_entity_search`; \u0434\u043B\u044F \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447 \u2014\n> `bitrix_recent_load { section:"tasksTask" }`.\n\n**\u0427\u0438\u0442\u0430\u0442\u044C \u0438\u0441\u0442\u043E\u0440\u0438\u044E.** `bitrix_chat_messages` \u043E\u0442\u0434\u0430\u0451\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u044E\u044E \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443; \u0432\u0433\u043B\u0443\u0431\u044C \u043B\u0438\u0441\u0442\u0430\u0435\u0442\n`bitrix_chat_history` \u043F\u043E \u043A\u0443\u0440\u0441\u043E\u0440\u0443 `beforeId` = \u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u044B\u0439 id \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B (\u043F\u043E\u0432\u0442\u043E\u0440\u044F\u0439,\n\u0443\u043C\u0435\u043D\u044C\u0448\u0430\u044F `beforeId`, \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u0438).\n\n```jsonc\nbitrix_chat_load { "dialogId": 11 } // \u043B\u0438\u0447\u043D\u044B\u0439 \u0447\u0430\u0442 \u044E\u0437\u0435\u0440\u0430 11 \u2192 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 chatId\nbitrix_chat_history { "chatId": 485, "beforeId": 1861279 }\nbitrix_chat_mark_read { "chatId": 40271, "ids": [1884131] } // \u26A0 \u043C\u0443\u0442\u0438\u0440\u0443\u044E\u0449\u0438\u0439; actionUuid \u2014 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u043E\u043C\n```\n\n\u{1F4D6} \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438 \u0447\u0442\u0435\u043D\u0438\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439: `im.dialog.messages.get` (\u0434\u0435\u0444\u043E\u043B\u0442 20, \u043C\u0430\u043A\u0441 50; \u043B\u0438\u0441\u0442\u0430\u043D\u0438\u0435\n`LAST_ID` \u2014 \u0441\u0442\u0430\u0440\u0435\u0435, `FIRST_ID` \u2014 \u043D\u043E\u0432\u0435\u0435); `imbot.v2 chat.getMessageContext` \u2014 \u043E\u0442\u0432\u0435\u0442 `messages[]`\n(oldest\u2192newest) + `users[]` + `hasPrevPage`/`hasNextPage`, \u043F\u043E \u0444\u043E\u0440\u043C\u0435 **\u0441\u043E\u0432\u043F\u0430\u0434\u0430\u0435\u0442** \u0441 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C\u0438\n`im.v2.Chat.Message.*`.\n\n### 5.2. \u041E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 (\u0447\u0430\u0442) \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438\n\n**\u0410. \u041F\u0440\u044F\u043C\u043E\u0439 \u0440\u0435\u0437\u043E\u043B\u0432 \u2014 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0438\u0442\u0435\u043B\u044C\u043D\u043E.** `bitrix_task_get` \u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 `CHAT_ID` \u0447\u0430\u0442\u0430-\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u044F (\u0432\u0445\u043E\u0434\u0438\u0442\n\u0432 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u0439 `select` \u{1F4D6}) \u2014 \u044D\u0442\u043E `taskId \u2192 chatId` \u0431\u0435\u0437 \u043F\u043E\u0438\u0441\u043A\u0430 \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0438 \u0431\u0435\u0437 \u043F\u0440\u043E\u043C\u0430\u0445\u0430 \u043F\u043E \u0442\u0451\u0437\u043A\u0430\u043C:\n\n```jsonc\nbitrix_task_get { "taskId": 28373 } // \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 CHAT_ID\nbitrix_chat_load { "chatId": <CHAT_ID> }\nbitrix_chat_history { "chatId": <CHAT_ID>, "beforeId": <\u043C\u0438\u043D id \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B> }\n```\n\n\u041E\u0431\u0449\u0430\u044F \u0430\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0430 \u2014 **`bitrix_entity_chat`** (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 `im.chat.get`): chatId \u043B\u044E\u0431\u043E\u0433\u043E \u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0433\u043E\n\u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u043E \u043F\u0430\u0440\u0435 `entityType`/`entityId`; \u043A\u0440\u043E\u043C\u0435 `TASKS_TASK` \u0442\u0430\u043A \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443\u044E\u0442\u0441\u044F `SONET_GROUP`\n(\u0433\u0440\u0443\u043F\u043F\u0430/\u043F\u0440\u043E\u0435\u043A\u0442), `CRM`, `CALENDAR`, `MAIL`, `VIDEOCONF`, `CALL`:\n\n```jsonc\nbitrix_entity_chat { "entityType": "TASKS_TASK", "entityId": 28373 } // \u2192 chatId\n```\n\n**\u0411. \u0427\u0435\u0440\u0435\u0437 \u0441\u043F\u0438\u0441\u043E\u043A \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447** (\u0441\u0435\u043A\u0446\u0438\u044F `tasksTask`; \u0432 `bitrix_chats_recent` \u0438\u0445 \u041D\u0415\u0422):\n\n```jsonc\nbitrix_recent_load { "section": "tasksTask" } // \u2192 \u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447 \u0441 chatId/dialogId\nbitrix_recent_tail { "section": "tasksTask", "lastMessageDate": "2026-06-29T17:25:38+03:00" }\nbitrix_chat_load { "dialogId": "chat38849" } // \u0438\u043B\u0438 { "chatId": 38849 }\n```\n\n**\u0427\u0430\u0442 \u043F\u0443\u0441\u0442, \u0430 `COMMENTS_COUNT > 0`** \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u0430\u0440\u0448\u0435 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447: \u0432 \u0447\u0430\u0442\u0435 \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\n\xAB\u0427\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0440\u0430\u043D\u0435\u0435 \u043E\u0441\u0442\u0430\u0432\u0438\u043B\u0438 \u0443\u0447\u0430\u0441\u0442\u043D\u0438\u043A\u0438 \u0437\u0430\u0434\u0430\u0447\u0438\u2026\xBB, \u0430 \u0441\u0430\u043C\u043E \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043B\u0435\u0436\u0438\u0442 \u0432\n\u0444\u043E\u0440\u0443\u043C\u0435 \u2192 `bitrix_task_comments` (\xA75.6).\n\n**\u0412. \u041F\u043E\u0438\u0441\u043A\u043E\u043C \u043F\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044E \u0437\u0430\u0434\u0430\u0447\u0438** (\u0437\u0430\u043F\u0430\u0441\u043D\u043E\u0439, \u043C\u0430\u0442\u0447 \u043F\u043E \u0442\u0435\u043A\u0441\u0442\u0443):\n`bitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" }`\n\n**\u0427\u0430\u0442 \u041F\u0420\u041E\u0415\u041A\u0422\u0410 \u0437\u0430\u0434\u0430\u0447\u0438** (\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0433\u0440\u0443\u043F\u043F\u044B, \u043D\u0435 \u0441\u0430\u043C\u043E\u0439 \u0437\u0430\u0434\u0430\u0447\u0438) \u2014 \u0447\u0435\u0440\u0435\u0437 `GROUP_ID`:\n\n```jsonc\nbitrix_task_get { "taskId": 4229, "params": { "select": ["ID","GROUP_ID"] } }\nbitrix_project_get { "groupId": 15 } // \u043E\u0442\u0434\u0430\u0451\u0442 CHAT_ID / DIALOG_ID\nbitrix_chat_get_dialog_id { "externalId": "sg15" } // \u043B\u0438\u0431\u043E \u0440\u0435\u0437\u043E\u043B\u0432 dialogId \u0441\u043E\u0446\u0433\u0440\u0443\u043F\u043F\u044B \u043D\u0430\u043F\u0440\u044F\u043C\u0443\u044E\n```\n\n### 5.3. \u041F\u043E\u0438\u0441\u043A \u0447\u0430\u0442\u0430 / \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F\n\n`bitrix_entity_search` (\u043E\u0431\u0451\u0440\u0442\u043A\u0430 \u043D\u0430\u0434 \u0432\u043D\u0443\u0442\u0440\u0435\u043D\u043D\u0438\u043C `ui.entityselector.doSearch`) \u0441\u0430\u043C \u0441\u043E\u0431\u0438\u0440\u0430\u0435\u0442 \u0434\u0438\u0430\u043B\u043E\u0433\n`IM_CHAT_SEARCH` \u0438 `searchQuery` \u0438\u0437 \u0441\u0442\u0440\u043E\u043A\u0438. \u041F\u0443\u0431\u043B\u0438\u0447\u043D\u044B\u0435 \u0430\u043D\u0430\u043B\u043E\u0433\u0438: \u043B\u044E\u0434\u0438 \u2014 `user.get`/`user.search`, \u0447\u0430\u0442\u044B \u2014\n`im.recent.list` + \u0444\u0438\u043B\u044C\u0442\u0440\u0430\u0446\u0438\u044F \u0443 \u0441\u0435\u0431\u044F.\n\n```jsonc\nbitrix_entity_search { "query": "\u0434\u043C\u0438\u0442\u0440\u0438\u0439" } // \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u0447\u0430\u0442\u043E\u0432/\u0434\u0438\u0430\u043B\u043E\u0433\u043E\u0432\nbitrix_entity_search { "query": "\u0442\u0440\u0435\u043A\u0435\u0440", "section": "tasksTask" } // \u0441\u0440\u0435\u0434\u0438 \u0447\u0430\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447\nbitrix_user_get { "userId": 11 } // \u0440\u0435\u0437\u043E\u043B\u0432 authorId \u2192 \u0438\u043C\u044F\n```\n\n### 5.4. \u0421\u043E\u0437\u0432\u043E\u043D: \u0440\u0435\u0437\u044E\u043C\u0435, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430, \u0437\u0430\u043F\u0438\u0441\u044C\n\nAI-\u0430\u043D\u0430\u043B\u0438\u0437 \u0437\u0432\u043E\u043D\u043A\u0430 (BitrixGPT Follow-Up) \u0436\u0438\u0432\u0451\u0442 \u043D\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043D\u043E \u043E\u0442\u0440\u0435\u043D\u0434\u0435\u0440\u0435\u043D\u043D\u043E\u0439 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 `/call/detail/<callId>`\n\u2014 JSON-\u044D\u043D\u0434\u043F\u043E\u0438\u043D\u0442\u0430 \u043F\u043E\u0434 \u043D\u0435\u0439 \u043D\u0435\u0442, \u043F\u0443\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E REST \u0434\u043B\u044F \u0432\u0438\u0434\u0435\u043E\u0432\u0441\u0442\u0440\u0435\u0447 \u0442\u043E\u0436\u0435 (\u{1F4D6} \u0442\u043E\u043B\u044C\u043A\u043E \u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0438\u044F `voximplant.*`\n\u0438 `crm.activity.call.getTranscript`). \u041C\u043E\u0441\u0442 \u0447\u0438\u0442\u0430\u0435\u0442 \u044D\u0442\u0443 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u0451 \u0432 \u043D\u043E\u0440\u043C\u0430\u043B\u0438\u0437\u043E\u0432\u0430\u043D\u043D\u044B\u0439 JSON.\n\n**1) \u041D\u0430\u0439\u0442\u0438 \u0437\u0432\u043E\u043D\u043A\u0438.** \u0421\u0435\u0440\u0432\u0435\u0440\u043D\u043E\u0433\u043E \u043F\u043E\u0438\u0441\u043A\u0430 \u0437\u0432\u043E\u043D\u043A\u043E\u0432 \u043F\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0443 \u043D\u0435\u0442 \u2014 \u0438\u0449\u0435\u043C \u0432 \u043A\u043E\u043D\u043A\u0440\u0435\u0442\u043D\u043E\u043C \u0447\u0430\u0442\u0435: \u0437\u0432\u043E\u043D\u043E\u043A\n\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0441 `params.COMPONENT_PARAMS = { messageType: "START", callId }`.\n\n```jsonc\nbitrix_chat_calls { "chatId": 9876 } // \u0447\u0430\u0442 \u043F\u0440\u043E\u0435\u043A\u0442\u0430: bitrix_project_get \u2192 CHAT_ID\nbitrix_chat_calls { "chatId": 9876, "maxPages": 20, "beforeId": 5001 } // \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0432\u0433\u043B\u0443\u0431\u044C\n```\n\n\u041E\u0442\u0432\u0435\u0442: `calls[] { callId, startedAt, startedBy, startMessageId, events[], summaryMessageId }` \u043F\u043B\u044E\u0441\n`scannedPages` / `oldestScannedMessageId` / **`reachedHistoryStart`** \u2014 \u0435\u0441\u043B\u0438 \u043E\u043D `false`, \u0438\u0441\u0442\u043E\u0440\u0438\u044F\n\u0434\u043E\u0447\u0438\u0442\u0430\u043D\u0430 \u041D\u0415 \u0434\u043E \u043A\u043E\u043D\u0446\u0430, \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0441 `beforeId: <oldestScannedMessageId>`.\n\n**2) \u0412\u0437\u044F\u0442\u044C \u0432\u0441\u0451 \u043F\u043E \u0437\u0432\u043E\u043D\u043A\u0443.**\n\n```jsonc\nbitrix_call_detail { "callId": 4242 } // \u0432\u0441\u0451; \u0434\u043B\u0438\u043D\u043D\u0430\u044F \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0443\u0435\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043B\nbitrix_call_detail { "callId": 4242, "transcript": "inline" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043F\u0440\u044F\u043C\u043E \u0432 \u043E\u0442\u0432\u0435\u0442\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "none" } // \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u043D\u0435 \u043D\u0443\u0436\u043D\u0430 \u0432\u043E\u0432\u0441\u0435\nbitrix_call_detail { "callId": 4242, "transcript": "file" } // \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043B, \u0434\u0430\u0436\u0435 \u043A\u043E\u0440\u043E\u0442\u043A\u0430\u044F\n```\n\n| \u041F\u043E\u043B\u0435 \u043E\u0442\u0432\u0435\u0442\u0430 | \u0427\u0442\u043E \u0432\u043D\u0443\u0442\u0440\u0438 |\n|---|---|\n| `title`, `agenda`, `meetingType` | \u0442\u0435\u043C\u0430, \u0432\u0441\u0442\u0443\u043F\u043B\u0435\u043D\u0438\u0435, \u0442\u0438\u043F \u0432\u0441\u0442\u0440\u0435\u0447\u0438 (\xAB\u0421\u0442\u0430\u0442\u0443\u0441-\u0432\u0441\u0442\u0440\u0435\u0447\u0430\xBB) |\n| `date`, `interval`, `duration` | \xAB23 \u0438\u044E\u043B\u044F, 15:46\xBB, \xAB15:46 - 16:51\xBB, \xAB1 \u0447 4 \u043C\u0438\u043D\xBB |\n| `efficiency`, `qualityChecklist[]` | \u043E\u0446\u0435\u043D\u043A\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u0432 % \u0438 \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u0438 `{ ok, text }` |\n| `participants[]` | `{ id, name, talkTimePercent, talkTime, efficiency, metrics[], insight }` |\n| `overview`, `chapters[]` | \u043E\u0431\u0449\u0435\u0435 \u0440\u0435\u0437\u044E\u043C\u0435 \u0438 \u0433\u043B\u0430\u0432\u044B `{ from, to, title, text }` \u0441 \u0442\u0430\u0439\u043C\u043A\u043E\u0434\u0430\u043C\u0438 |\n| `decisions[]`, `tasks[]` | \xAB\u0447\u0442\u043E \u0440\u0435\u0448\u0438\u043B\u0438\xBB \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 `{ assigneeId, assignee, text }` |\n| `transcript[]`, `transcriptCount` | \u0440\u0435\u043F\u043B\u0438\u043A\u0438 `{ from, to, speakerId, speaker, text }` |\n| `recording` | `{ path, url, trackId }` \u2014 \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C, \u043A\u0430\u0447\u0430\u0435\u0442\u0441\u044F `bitrix_call_recording` (\xA75.5) |\n\n**\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0434\u043B\u0438\u043D\u043D\u043E\u0433\u043E \u0437\u0432\u043E\u043D\u043A\u0430 \u043D\u0435 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435.** \u0423 \u0447\u0430\u0441\u043E\u0432\u043E\u0439 \u0432\u0441\u0442\u0440\u0435\u0447\u0438 \u043E\u043D\u0430 \u0434\u0430\u0451\u0442 ~70 \u041A\u0411 \u0438\u0437 80 \u041A\u0411, \u043F\u043E\u044D\u0442\u043E\u043C\u0443\n\u0441\u0432\u044B\u0448\u0435 ~20 \u041A\u0411 (\u0440\u0435\u0436\u0438\u043C `"auto"` = \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435) \u043F\u0438\u0448\u0435\u0442\u0441\u044F \u043D\u0430 \u0434\u0438\u0441\u043A, \u0430 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 \u043E\u0441\u0442\u0430\u044E\u0442\u0441\u044F `transcript: []`,\n`transcriptCount` \u0438 **`files`**: `files.transcript` \u2014 `call-<id>-transcript.txt`, \u0433\u0434\u0435 \u0441\u0442\u0440\u043E\u043A\u0430 = \u0440\u0435\u043F\u043B\u0438\u043A\u0430\n(`[11:10\u201411:24] \u0413\u0435\u043D\u0440\u0438\u0445 \u0411\u043E\u0433\u0430\u0446\u043A\u0438\u0439: \u2026`), \u0435\u0451 \u0443\u0434\u043E\u0431\u043D\u043E **\u0433\u0440\u0435\u043F\u0430\u0442\u044C** (\u043D\u0430\u0439\u0434\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u043E\u043A\u0430 \u0441\u0430\u043C\u0430 \u043D\u0435\u0441\u0451\u0442 \u0442\u0430\u0439\u043C\u043A\u043E\u0434 \u0438\n\u0441\u043F\u0438\u043A\u0435\u0440\u0430); `files.json` \u2014 \u043F\u043E\u043B\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442 \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u043E\u0439. \u041E\u0431\u0430 \u0444\u0430\u0439\u043B\u0430 \u2014 \u043A\u0435\u0448 \u0437\u0432\u043E\u043D\u043A\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u044B\u0432\u0430\u044E\u0442\u0441\u044F.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **`speakerId`** \u0440\u0435\u0437\u043E\u043B\u0432\u0438\u0442\u0441\u044F \u043F\u043E \u0438\u043C\u0435\u043D\u0438 \u0438\u0437 \u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0430\u043D\u0430\u043B\u0438\u0437\u0430; \u043A\u0442\u043E \u0433\u043E\u0432\u043E\u0440\u0438\u043B \u043C\u0430\u043B\u043E \u0438 \u0432 \u043D\u0435\u0451 \u043D\u0435 \u043F\u043E\u043F\u0430\u043B \u2014 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\n `speakerId: null`, \u043D\u043E \u043E\u0441\u0442\u0430\u043D\u0435\u0442\u0441\u044F \u0432 `participants` \u0441 `id: null`.\n- **`assigneeId` \u0437\u0430\u0434\u0430\u0447\u0438** \u2014 \u0443\u043F\u043E\u043C\u044F\u043D\u0443\u0442\u044B\u0439 \u0432 \u0442\u0435\u043A\u0441\u0442\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C, \u0430 \u041D\u0415 id \u0441\u043C\u043E\u0442\u0440\u044F\u0449\u0435\u0433\u043E.\n- \u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0437\u0432\u043E\u043D\u043A\u0443 / \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u0441\u0435\u0441\u0441\u0438\u044F \u2192 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0432\u0435\u0440\u043D\u0451\u0442 \u0432\u043D\u044F\u0442\u043D\u0443\u044E \u043E\u0448\u0438\u0431\u043A\u0443 (\u043F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u0434\u0430\u0451\u0442 HTML \u043B\u043E\u0433\u0438\u043D\u0430).\n\n### 5.5. \u0421\u043A\u0430\u0447\u0430\u0442\u044C \u0444\u0430\u0439\u043B (\u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430, \u0444\u0430\u0439\u043B \u0437\u0430\u0434\u0430\u0447\u0438, \u0437\u0430\u043F\u0438\u0441\u044C \u0437\u0432\u043E\u043D\u043A\u0430)\n\n\u0421\u0441\u044B\u043B\u043A\u0438 \u043F\u043E\u0440\u0442\u0430\u043B \u043C\u0438\u043D\u0442\u0438\u0442 \u0438 \u043F\u043E\u0434\u043F\u0438\u0441\u044B\u0432\u0430\u0435\u0442 \u0441\u0430\u043C, \u043D\u043E \u043F\u043E\u0434\u043F\u0438\u0441\u044C \u041D\u0415 \u0437\u0430\u043C\u0435\u043D\u044F\u0435\u0442 \u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u044E \u2014 \u043A\u0430\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u0432\n\u0441\u0435\u0441\u0441\u0438\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F.\n\n```jsonc\n// \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0447\u0430\u0442\u0430: \u0441\u0441\u044B\u043B\u043A\u0443 \u0431\u0435\u0440\u0451\u043C \u0438\u0437 files[].urlDownload \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 bitrix_chat_load\nbitrix_file_download { "url": "https://<\u043F\u043E\u0440\u0442\u0430\u043B>/bitrix/services/main/ajax.php?action=disk.api.file.download&\u2026" }\nbitrix_call_recording { "callId": 4242 } // \u0430\u0443\u0434\u0438\u043E\u0437\u0430\u043F\u0438\u0441\u044C \u0441\u043E\u0437\u0432\u043E\u043D\u0430 (\u0441\u0441\u044B\u043B\u043A\u0443 \u043D\u0430\u0439\u0434\u0451\u0442 \u0441\u0430\u043C)\nbitrix_file_download { "url": "\u2026", "savePath": "/tmp/photo.png", "overwrite": true }\n```\n\n\u041E\u0442\u0432\u0435\u0442 \u2014 **\u043F\u0443\u0442\u044C, \u0430 \u043D\u0435 \u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0435**: `{ path, bytes, contentType, fileName }` (\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u044B \u043D\u0435 \u043F\u043E\u043F\u0430\u0434\u0430\u044E\u0442 \u0432\n\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442). \u041F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0444\u0430\u0439\u043B \u043B\u043E\u0436\u0438\u0442\u0441\u044F \u0432 `~/.bitrix24-mcp-bridge/downloads/`; `savePath` \u0431\u0435\u0437 \u0432\u0435\u0434\u0443\u0449\u0435\u0433\u043E `/`\n\u0442\u0440\u0430\u043A\u0442\u0443\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u0438\u043C\u044F \u0432\u043D\u0443\u0442\u0440\u0438 \u044D\u0442\u043E\u0439 \u043F\u0430\u043F\u043A\u0438. \u041F\u043E\u0442\u043E\u043B\u043E\u043A \u2014 512 \u041C\u0411.\n\n\u0422\u043E\u043D\u043A\u043E\u0441\u0442\u0438:\n- **\u0413\u0440\u0430\u043D\u0438\u0446\u0430 \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0441\u0442\u0438 \u2014 origin**: \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0442\u043E\u043B\u044C\u043A\u043E \u0441 origin \u0441\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E \u043F\u043E\u0440\u0442\u0430\u043B\u0430.\n- **\u0418\u043C\u044F \u0434\u0430\u0451\u0442 \u043F\u043E\u0440\u0442\u0430\u043B** (`Content-Disposition`), \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0431\u0435\u0437 `savePath` \u0443\u0433\u0430\u0434\u044B\u0432\u0430\u0442\u044C \u0435\u0433\u043E \u043D\u0435 \u043D\u0443\u0436\u043D\u043E.\n- **\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0435 \u0441\u043A\u0430\u0447\u0438\u0432\u0430\u043D\u0438\u0435** \u0442\u043E\u0433\u043E \u0436\u0435 \u0444\u0430\u0439\u043B\u0430 \u043F\u0430\u0434\u0430\u0435\u0442 \u0441 `already exists` \u2014 \u043F\u0435\u0440\u0435\u0434\u0430\u0439 `overwrite: true`.\n\n### 5.6. \u0421\u0442\u0430\u0440\u044B\u0435 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0444\u043E\u0440\u0443\u043C)\n\n\u0414\u043E \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430 \u043D\u0430 \u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u0436\u0438\u043B\u043E \u0432 \u0444\u043E\u0440\u0443\u043C\u0435 \u0437\u0430\u0434\u0430\u0447\u0438, \u0438 \u0443 \u0441\u0442\u0430\u0440\u044B\u0445 \u0437\u0430\u0434\u0430\u0447 \u043E\u043D\u043E \u0442\u0430\u043C \u0438 \u043E\u0441\u0442\u0430\u043B\u043E\u0441\u044C: \u0432\n\u0447\u0430\u0442\u0435 (`CHAT_ID`) \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F \u0437\u0430\u0433\u043B\u0443\u0448\u043A\u0430 \u0441\u043E \u0441\u0441\u044B\u043B\u043A\u043E\u0439 `/task/comments/<id>/`. \u041F\u0440\u0438\u0437\u043D\u0430\u043A \u2014 \u0432\n`bitrix_task_get` \u043F\u043E\u043B\u0435 `COMMENTS_COUNT > 0` (\u0447\u0435\u0440\u0435\u0437 `params.select`; `FORUM_TOPIC_ID` \u0442\u043E\u0436\u0435 \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D),\n\u0430 \u0447\u0430\u0442 \u043F\u0443\u0441\u0442. JSON-\u043C\u0435\u0442\u043E\u0434\u0430 \u0447\u0442\u0435\u043D\u0438\u044F \u043D\u0435\u0442 \u2014 \u043C\u043E\u0441\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 HTML-\u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0443 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0435\u0432.\n\n```jsonc\nbitrix_task_comments { "taskId": 1234 } // \u0432\u0441\u0451 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435; \u0434\u043B\u0438\u043D\u043D\u043E\u0435 \u0443\u0435\u0434\u0435\u0442 \u0432 \u0444\u0430\u0439\u043B\nbitrix_task_comments { "taskId": 1234, "limit": 10 } // \u0442\u043E\u043B\u044C\u043A\u043E 10 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0445\nbitrix_task_comments { "taskId": 1234, "output": "inline" } // \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435\nbitrix_task_comments { "taskId": 1234, "beforeId": 5678 } // \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0432\u0433\u043B\u0443\u0431\u044C \u043E\u0442 id\n```\n\n\u041E\u0442\u0432\u0435\u0442: `comments[]` \u043F\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0443 (\u0441\u0442\u0430\u0440\u044B\u0435 \u2192 \u043D\u043E\u0432\u044B\u0435) \u2014 `{ id, authorId, author, date, dateIso, text, isNew,\nsystem, files[] }`, \u043F\u043B\u044E\u0441 `total`, `oldestId`, `scannedPages` \u0438 **`reachedHistoryStart`**: \u0435\u0441\u043B\u0438 \u043E\u043D\n`false` (\u0443\u043F\u0451\u0440\u043B\u0438\u0441\u044C \u0432 `maxPages`, \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435 10, \u0438\u043B\u0438 \u0432 `limit`), \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0430\u0439 \u0441 `beforeId: <oldestId>`.\n\n- **`system: true`** \u2014 \u0441\u043B\u0443\u0436\u0435\u0431\u043D\u044B\u0435 \u0437\u0430\u043F\u0438\u0441\u0438 (\xAB\u0432\u044B \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u044B \u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u0435\u043C\xBB, \u0441\u043C\u0435\u043D\u0430 \u0441\u0440\u043E\u043A\u0430, \u043F\u0438\u043D\u0433\u0438), \u043D\u0435 \u0441\u043B\u043E\u0432\u0430 \u043B\u044E\u0434\u0435\u0439.\n- **`date`** \u2014 \u043A\u0430\u043A \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043B\u0435 (\xAB9 \u043C\u0430\u0440\u0442\u0430 2024 08:15\xBB), **`dateIso`** \u2014 \u0442\u043E \u0436\u0435 \u0432 `2024-03-09T08:15`\n (\u043C\u0435\u0441\u0442\u043D\u043E\u0435 \u0432\u0440\u0435\u043C\u044F \u043F\u043E\u0440\u0442\u0430\u043B\u0430; \u0434\u043B\u044F \xAB\u0432\u0447\u0435\u0440\u0430, 12:00\xBB \u0438 \u0434\u0430\u0442 \u0431\u0435\u0437 \u0433\u043E\u0434\u0430 \u2014 `null`).\n- **`files[]`** \u2014 `{ attachedId, name, size, url }`; `url` \u0441\u043A\u0430\u0440\u043C\u043B\u0438\u0432\u0430\u0439 `bitrix_file_download` (\xA75.5).\n- **`text`** \u2014 \u0431\u0435\u0437 \u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0438; \u0443 \u0441\u0441\u044B\u043B\u043A\u0438 \u0441 \u043F\u043E\u0434\u043F\u0438\u0441\u044C\u044E \u0430\u0434\u0440\u0435\u0441 \u0434\u043E\u043F\u0438\u0441\u0430\u043D \u0432 \u0441\u043A\u043E\u0431\u043A\u0430\u0445: \xAB\u043C\u0430\u043A\u0435\u0442 (https://\u2026)\xBB.\n- **\u0414\u043B\u0438\u043D\u043D\u043E\u0435 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043D\u0435 \u043F\u0440\u0438\u0445\u043E\u0434\u0438\u0442 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435** (\u043A\u0430\u043A \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0430 \u0437\u0432\u043E\u043D\u043A\u0430, \xA75.4): \u0441\u0432\u044B\u0448\u0435 ~20 \u041A\u0411 (`output:\n "auto"` = \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435) \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 `comments: []` \u0438 `files`: `files.text` \u2014 `task-<id>-comments.txt`,\n \u0441\u0442\u0440\u043E\u043A\u0430 = \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 (`#5678 [2024-03-09T08:15] \u0418\u043C\u044F (id 101): \u0442\u0435\u043A\u0441\u0442`, \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u044B \u2014 ` \u23CE `), \u0435\u0451 \u0443\u0434\u043E\u0431\u043D\u043E\n \u0433\u0440\u0435\u043F\u0430\u0442\u044C; `files.json` \u2014 \u043F\u043E\u043B\u043D\u044B\u0439 \u043E\u0442\u0432\u0435\u0442. `output: "file"` \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043B.\n- **\u041F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u043C \u043D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043F\u043E\u043C\u0435\u0447\u0430\u0435\u0442\u0441\u044F.** \u041F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u043C\u0435\u0447\u0430\u0435\u0442 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043E\u0442\u0434\u0435\u043B\u044C\u043D\u044B\u043C \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043C\n `readComment`, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0448\u043B\u0451\u0442 JS \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u0440\u0438 \u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0435; \u043C\u043E\u0441\u0442 JS \u043D\u0435 \u0438\u0441\u043F\u043E\u043B\u043D\u044F\u0435\u0442. \u041F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043E:\n `viewedDate` \u0437\u0430\u0434\u0430\u0447\u0438 \u043F\u043E\u0441\u043B\u0435 \u0447\u0442\u0435\u043D\u0438\u044F \u043D\u0435 \u043C\u0435\u043D\u044F\u0435\u0442\u0441\u044F. `isNew: true` \u2014 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u043D\u0435 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u043C.\n- \u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043A \u0437\u0430\u0434\u0430\u0447\u0435 / \u043F\u0440\u043E\u0442\u0443\u0445\u043B\u0430 \u0441\u0435\u0441\u0441\u0438\u044F \u2192 \u0432\u043D\u044F\u0442\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430 (\u043F\u043E\u0440\u0442\u0430\u043B \u043E\u0442\u0434\u0430\u0451\u0442 HTML \u043B\u043E\u0433\u0438\u043D\u0430).\n\n---\n\n\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 \u043D\u043E\u0432\u044B\u043C\u0438 \u043C\u0435\u0442\u043E\u0434\u0430\u043C\u0438, \u0442\u0440\u0430\u043D\u0441\u043F\u043E\u0440\u0442 (`bodyType`, `responseType`, path-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B) \u0438\n\u0434\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043F\u0440\u0430\u0432\u043E\u043A \u0432 \u0436\u0438\u0432\u043E\u0439 daemon \u2014 `docs/reconnaissance.md`.\n' : load();
25432
25432
 
25433
25433
  // src/tools/register.ts
25434
25434
  import { randomUUID as randomUUID3 } from "node:crypto";
@@ -29731,6 +29731,133 @@ function sortCalls(acc) {
29731
29731
  return [...acc.values()].sort((a, b) => b.callId - a.callId);
29732
29732
  }
29733
29733
 
29734
+ // src/tools/taskComments.ts
29735
+ var MONTHS = {
29736
+ \u044F\u043D\u0432\u0430\u0440\u044F: 1,
29737
+ \u0444\u0435\u0432\u0440\u0430\u043B\u044F: 2,
29738
+ \u043C\u0430\u0440\u0442\u0430: 3,
29739
+ \u0430\u043F\u0440\u0435\u043B\u044F: 4,
29740
+ \u043C\u0430\u044F: 5,
29741
+ \u0438\u044E\u043D\u044F: 6,
29742
+ \u0438\u044E\u043B\u044F: 7,
29743
+ \u0430\u0432\u0433\u0443\u0441\u0442\u0430: 8,
29744
+ \u0441\u0435\u043D\u0442\u044F\u0431\u0440\u044F: 9,
29745
+ \u043E\u043A\u0442\u044F\u0431\u0440\u044F: 10,
29746
+ \u043D\u043E\u044F\u0431\u0440\u044F: 11,
29747
+ \u0434\u0435\u043A\u0430\u0431\u0440\u044F: 12
29748
+ };
29749
+ function toIsoDate(raw) {
29750
+ const m = new RegExp("^(\\d{1,2})\\s+(\\p{L}+)\\s+(\\d{4})(?:,)?\\s+(\\d{1,2}):(\\d{2})$", "u").exec(raw.trim());
29751
+ const month = m ? MONTHS[m[2].toLowerCase()] : void 0;
29752
+ if (!m || !month) return null;
29753
+ const pad = (n) => String(n).padStart(2, "0");
29754
+ return `${m[3]}-${pad(month)}-${pad(m[1])}T${pad(m[4])}:${m[5]}`;
29755
+ }
29756
+ function clean2(el) {
29757
+ if (!el) return "";
29758
+ return el.text.replace(/[^\S\n]+/g, " ").replace(/ *\n+ */g, "\n").trim();
29759
+ }
29760
+ function num2(value) {
29761
+ if (value === null || value === void 0 || value === "") return null;
29762
+ const n = Number(value);
29763
+ return Number.isFinite(n) ? n : null;
29764
+ }
29765
+ function escapeHtml(value) {
29766
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
29767
+ }
29768
+ function absolute(path, origin) {
29769
+ return origin && path.startsWith("/") ? `${origin}${path}` : path;
29770
+ }
29771
+ function parseText(body) {
29772
+ if (!body) return "";
29773
+ for (const a of body.querySelectorAll("a[href]")) {
29774
+ const href = a.getAttribute("href") ?? "";
29775
+ const label = clean2(a);
29776
+ if (/^https?:\/\//i.test(href) && label !== href) a.replaceWith(escapeHtml(`${label} (${href})`));
29777
+ }
29778
+ return clean2(body);
29779
+ }
29780
+ function parseFiles(cover, origin) {
29781
+ const files = /* @__PURE__ */ new Map();
29782
+ for (const el of cover.querySelectorAll("[data-attached-object-id]")) {
29783
+ const attachedId = num2(el.getAttribute("data-attached-object-id"));
29784
+ const src = el.getAttribute("data-src");
29785
+ if (attachedId === null || !src || files.has(attachedId)) continue;
29786
+ files.set(attachedId, {
29787
+ attachedId,
29788
+ name: el.getAttribute("data-title") ?? null,
29789
+ size: el.getAttribute("data-bx-size") ?? null,
29790
+ url: absolute(src, origin)
29791
+ });
29792
+ }
29793
+ for (const a of cover.querySelectorAll('a[href*="attachedId="]')) {
29794
+ const href = a.getAttribute("href") ?? "";
29795
+ const attachedId = num2(/attachedId=(\d+)/.exec(href)?.[1]);
29796
+ if (attachedId === null || files.has(attachedId) || !/action=download/.test(href)) continue;
29797
+ files.set(attachedId, {
29798
+ attachedId,
29799
+ name: a.getAttribute("data-title") ?? a.getAttribute("title") ?? (clean2(a) || null),
29800
+ size: a.getAttribute("data-bx-size") ?? null,
29801
+ url: absolute(href, origin)
29802
+ });
29803
+ }
29804
+ return [...files.values()];
29805
+ }
29806
+ function parseComment(cover, origin) {
29807
+ const id = num2(cover.getAttribute("bx-mpl-entity-id"));
29808
+ if (id === null) return null;
29809
+ const block = cover.querySelector(".feed-com-block");
29810
+ const authorLink = cover.querySelector(".feed-com-user-box [bx-tooltip-user-id]");
29811
+ const authorId = num2(authorLink?.getAttribute("bx-tooltip-user-id")) ?? num2(/blog-comment-user-(\d+)/.exec(block?.getAttribute("class") ?? "")?.[1]);
29812
+ const date3 = clean2(cover.querySelector(".feed-com-time")) || null;
29813
+ return {
29814
+ id,
29815
+ authorId,
29816
+ author: clean2(authorLink ?? cover.querySelector(".feed-com-name")) || null,
29817
+ date: date3,
29818
+ dateIso: date3 ? toIsoDate(date3) : null,
29819
+ text: parseText(cover.querySelector(".feed-com-text-inner-inner")),
29820
+ isNew: cover.getAttribute("bx-mpl-read-status") === "new",
29821
+ system: block?.classList.contains("mpl-comment-aux") ?? false,
29822
+ files: parseFiles(cover, origin)
29823
+ };
29824
+ }
29825
+ function parseComments(html, origin) {
29826
+ const root = parse3(html);
29827
+ const comments = root.querySelectorAll(".feed-com-block-cover[bx-mpl-entity-id]").map((cover) => parseComment(cover, origin)).filter((c) => c !== null);
29828
+ return comments.sort((a, b) => a.id - b.id);
29829
+ }
29830
+ function parseFirstPage(html, origin) {
29831
+ const exemplarId = /EXEMPLAR_ID\s*:\s*'([^']+)'/.exec(html)?.[1];
29832
+ const signedParameters = /"componentName":"bitrix:forum\.comments"[^}]*?"params":"([^"]+)"/.exec(html)?.[1];
29833
+ if (!exemplarId || !signedParameters) {
29834
+ throw new Error(
29835
+ "response is not a task comments page (no comment list) \u2014 the portal likely answered with a login page or the task is not accessible to this user"
29836
+ );
29837
+ }
29838
+ return {
29839
+ exemplarId,
29840
+ signedParameters,
29841
+ // The "Предыдущие комментарии (N)" link is rendered only when older comments exist.
29842
+ hasOlder: parse3(html).querySelector('[id$="_page_nav"]') !== null,
29843
+ comments: parseComments(html, origin)
29844
+ };
29845
+ }
29846
+ function formatComments(taskId, comments, reachedHistoryStart) {
29847
+ const header = [
29848
+ `# \u0417\u0430\u0434\u0430\u0447\u0430 ${taskId} \u2014 \u0441\u0442\u0430\u0440\u044B\u0435 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 (\u0444\u043E\u0440\u0443\u043C): ${comments.length}`,
29849
+ `# \u0414\u043E\u0447\u0438\u0442\u0430\u043D\u043E \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430: ${reachedHistoryStart ? "\u0434\u0430" : "\u043D\u0435\u0442"}`,
29850
+ ""
29851
+ ];
29852
+ const lines = comments.flatMap((c) => {
29853
+ const who = `${c.author ?? "?"}${c.authorId !== null ? ` (id ${c.authorId})` : ""}`;
29854
+ const tag = c.system ? " [\u0441\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0439]" : "";
29855
+ const head = `#${c.id} [${c.dateIso ?? c.date ?? "?"}] ${who}${tag}: ${c.text.replace(/\n+/g, " \u23CE ")}`;
29856
+ return [head, ...c.files.map((f) => ` \u0444\u0430\u0439\u043B: ${f.name ?? f.attachedId}${f.size ? ` (${f.size})` : ""} ${f.url}`)];
29857
+ });
29858
+ return [...header, ...lines].join("\n") + "\n";
29859
+ }
29860
+
29734
29861
  // src/tools/download.ts
29735
29862
  import { basename, isAbsolute as isAbsolute2, join as join2 } from "node:path";
29736
29863
  import { existsSync as existsSync3, renameSync, rmSync as rmSync2 } from "node:fs";
@@ -29789,7 +29916,7 @@ function resolveDestination(req) {
29789
29916
 
29790
29917
  // src/version.ts
29791
29918
  var DEV_VERSION = "0.0.0-dev";
29792
- var PACKAGE_VERSION = true ? "0.4.0" : DEV_VERSION;
29919
+ var PACKAGE_VERSION = true ? "0.5.0" : DEV_VERSION;
29793
29920
  var isReleaseBuild = PACKAGE_VERSION !== DEV_VERSION;
29794
29921
 
29795
29922
  // src/tools/register.ts
@@ -29802,6 +29929,10 @@ function shouldSpill(mode, call, canWrite) {
29802
29929
  if (mode === "file") return true;
29803
29930
  return JSON.stringify(call.transcript).length > TRANSCRIPT_INLINE_LIMIT;
29804
29931
  }
29932
+ var COMMENTS_INLINE_LIMIT = 2e4;
29933
+ var COMMENTS_OUTPUT_MODES = ["auto", "inline", "file"];
29934
+ var navigateResponse = external_exports.object({ messageList: external_exports.string(), navigation: external_exports.string().optional() });
29935
+ var positiveId = external_exports.union([external_exports.number().int().positive(), external_exports.string().regex(/^\d+$/)]).transform(Number);
29805
29936
  var downloadResult = external_exports.object({
29806
29937
  path: external_exports.string(),
29807
29938
  bytes: external_exports.number(),
@@ -29884,7 +30015,7 @@ function registerTools(server, deps) {
29884
30015
  {
29885
30016
  tool: "bitrix_task_get",
29886
30017
  catalogName: "task.get",
29887
- description: "\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u043F\u043E id (read-only). \u0412 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u043C select \u0435\u0441\u0442\u044C CHAT_ID \u2014 \u044D\u0442\u043E id \u0427\u0410\u0422\u0410-\u041E\u0411\u0421\u0423\u0416\u0414\u0415\u041D\u0418\u042F \u0437\u0430\u0434\u0430\u0447\u0438: \u043F\u0440\u044F\u043C\u043E\u0439 \u043F\u0443\u0442\u044C \u043A \u043D\u0435\u043C\u0443 = bitrix_chat_load { chatId: <CHAT_ID> } (\u043D\u0435 \u043F\u0443\u0442\u0430\u0442\u044C \u0441 \u0447\u0430\u0442\u043E\u043C \u043F\u0440\u043E\u0435\u043A\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 GROUP_ID). \u0414\u0440\u0443\u0433\u0438\u0435 \u043F\u043E\u043B\u044F \u2014 \u0447\u0435\u0440\u0435\u0437 params.select (\u043D\u0430\u043F\u0440. UF_*, TAGS, TIME_ESTIMATE).",
30018
+ description: "\u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u043F\u043E id (read-only). \u0412 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u043E\u043C select \u0435\u0441\u0442\u044C CHAT_ID \u2014 \u044D\u0442\u043E id \u0427\u0410\u0422\u0410-\u041E\u0411\u0421\u0423\u0416\u0414\u0415\u041D\u0418\u042F \u0437\u0430\u0434\u0430\u0447\u0438: \u043F\u0440\u044F\u043C\u043E\u0439 \u043F\u0443\u0442\u044C \u043A \u043D\u0435\u043C\u0443 = bitrix_chat_load { chatId: <CHAT_ID> } (\u043D\u0435 \u043F\u0443\u0442\u0430\u0442\u044C \u0441 \u0447\u0430\u0442\u043E\u043C \u043F\u0440\u043E\u0435\u043A\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 GROUP_ID). \u0414\u0440\u0443\u0433\u0438\u0435 \u043F\u043E\u043B\u044F \u2014 \u0447\u0435\u0440\u0435\u0437 params.select (\u043D\u0430\u043F\u0440. UF_*, TAGS, TIME_ESTIMATE). \u0423 \u0441\u0442\u0430\u0440\u044B\u0445 \u0437\u0430\u0434\u0430\u0447 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u041D\u0415 \u0432 \u0447\u0430\u0442\u0435, \u0430 \u0432 \u0444\u043E\u0440\u0443\u043C\u0435: COMMENTS_COUNT > 0 \u043F\u0440\u0438 \u043F\u0443\u0441\u0442\u043E\u043C \u0447\u0430\u0442\u0435 \u2192 bitrix_task_comments { taskId }.",
29888
30019
  inputSchema: { taskId: external_exports.union([external_exports.number(), external_exports.string()]), params: external_exports.record(external_exports.unknown()).optional(), portal: external_exports.string().optional() },
29889
30020
  toParams: (a) => ({ taskId: a.taskId, select: TASK_GET_SELECT })
29890
30021
  },
@@ -30175,6 +30306,93 @@ function registerTools(server, deps) {
30175
30306
  }
30176
30307
  );
30177
30308
  }
30309
+ if (available.has("task.comments.page") && available.has("task.comments.navigate")) {
30310
+ server.registerTool(
30311
+ "bitrix_task_comments",
30312
+ {
30313
+ description: '\u0421\u0422\u0410\u0420\u042B\u0415 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 (\u0444\u043E\u0440\u0443\u043C) \u2014 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435, \u043A\u043E\u0442\u043E\u0440\u043E\u0435 \u0431\u044B\u043B\u043E \u0443 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043E \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430 \u043D\u0430 \u0447\u0430\u0442\u044B \u0437\u0430\u0434\u0430\u0447. \u041F\u0440\u0438\u0437\u043D\u0430\u043A: \u0443 \u0437\u0430\u0434\u0430\u0447\u0438 COMMENTS_COUNT > 0 (bitrix_task_get \u0441 params.select), \u0430 \u0432 \u0447\u0430\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 (CHAT_ID \u2192 bitrix_chat_load) \u0442\u043E\u043B\u044C\u043A\u043E \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u043E\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \xAB\u0427\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0440\u0430\u043D\u0435\u0435 \u043E\u0441\u0442\u0430\u0432\u0438\u043B\u0438\u2026\xBB. \u041E\u0442\u0434\u0430\u0451\u0442 \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0438 \u043F\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0443 (\u0441\u0442\u0430\u0440\u044B\u0435 \u2192 \u043D\u043E\u0432\u044B\u0435): { id, authorId, author, date, dateIso, text, isNew, system, files[] }; system: true \u2014 \u0441\u043B\u0443\u0436\u0435\u0431\u043D\u044B\u0435 (\u0441\u043C\u0435\u043D\u0430 \u0441\u0440\u043E\u043A\u0430, \xAB\u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u044B \u0438\u0441\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u0435\u043C\xBB, \u043F\u0438\u043D\u0433\u0438); files[].url \u2014 \u0441\u0441\u044B\u043B\u043A\u0430 \u0434\u043B\u044F bitrix_file_download. \u041D\u0418\u0427\u0415\u0413\u041E \u043D\u0435 \u043F\u043E\u043C\u0435\u0447\u0430\u0435\u0442 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u043D\u043D\u044B\u043C. \u0421\u0430\u043C \u043B\u0438\u0441\u0442\u0430\u0435\u0442 \u0434\u043E \u043D\u0430\u0447\u0430\u043B\u0430 \u0438\u0441\u0442\u043E\u0440\u0438\u0438 (maxPages, \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E 10); \u0435\u0441\u043B\u0438 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435 reachedHistoryStart:false \u2014 \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438 \u0441 beforeId: <oldestId>. limit \u2014 \u0432\u0435\u0440\u043D\u0443\u0442\u044C \u0442\u043E\u043B\u044C\u043A\u043E N \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0445. \u0414\u041B\u0418\u041D\u041D\u041E\u0415 \u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0441\u043E\u0445\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F \u043D\u0430 \u0434\u0438\u0441\u043A: \u0442\u043E\u0433\u0434\u0430 comments \u043F\u0443\u0441\u0442, \u0430 \u043F\u0443\u0442\u0438 \u0432 files \u2014 files.text (\u0441\u0442\u0440\u043E\u043A\u0430 = \u043A\u043E\u043C\u043C\u0435\u043D\u0442\u0430\u0440\u0438\u0439 \u0441 id, \u0434\u0430\u0442\u043E\u0439 \u0438 \u0430\u0432\u0442\u043E\u0440\u043E\u043C \u2014 \u0443\u0434\u043E\u0431\u043D\u043E \u0433\u0440\u0435\u043F\u0430\u0442\u044C) \u0438 files.json. output: "inline" \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043E\u0442\u0432\u0435\u0442\u0435, "file" \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043B, "auto" (\u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u0435) \u2014 \u043F\u043E \u0440\u0430\u0437\u043C\u0435\u0440\u0443.',
30314
+ inputSchema: {
30315
+ taskId: external_exports.union([external_exports.number(), external_exports.string()]),
30316
+ limit: external_exports.number().int().positive().optional(),
30317
+ maxPages: external_exports.number().int().positive().optional(),
30318
+ beforeId: external_exports.union([external_exports.number(), external_exports.string()]).optional(),
30319
+ output: external_exports.enum(COMMENTS_OUTPUT_MODES).optional(),
30320
+ portal: external_exports.string().optional()
30321
+ }
30322
+ },
30323
+ async (args) => {
30324
+ const { limit, maxPages, output, portal } = args;
30325
+ const taskIdArg = positiveId.safeParse(args.taskId);
30326
+ const beforeIdArg = positiveId.optional().safeParse(args.beforeId);
30327
+ if (!taskIdArg.success) return fail(`taskId must be a positive integer, got ${JSON.stringify(args.taskId)}`);
30328
+ if (!beforeIdArg.success) return fail(`beforeId must be a positive integer, got ${JSON.stringify(args.beforeId)}`);
30329
+ const taskId = taskIdArg.data;
30330
+ const beforeId = beforeIdArg.data;
30331
+ try {
30332
+ const alias = portal ?? deps.defaultPortal;
30333
+ const origin = deps.origins?.[alias];
30334
+ const pageEntry = deps.catalog.resolve("task.comments.page");
30335
+ const raw = await deps.sink.call(alias, { ...pageEntry, params: { ...pageEntry.params, taskId } });
30336
+ const page = textResponse.safeParse(raw);
30337
+ if (!page.success) return fail('task.comments.page did not return text \u2014 is responseType "text" set in the catalog?');
30338
+ const first = parseFirstPage(page.data.text, origin);
30339
+ const byId = /* @__PURE__ */ new Map();
30340
+ const before = beforeId ?? null;
30341
+ if (before === null) for (const c of first.comments) byId.set(c.id, c);
30342
+ let cursor = before ?? (first.comments[0]?.id ?? null);
30343
+ let reachedHistoryStart = before === null && !first.hasOlder;
30344
+ let scannedPages = 0;
30345
+ const navEntry = deps.catalog.resolve("task.comments.navigate");
30346
+ while (!reachedHistoryStart && cursor !== null && scannedPages < (maxPages ?? 10)) {
30347
+ if (limit !== void 0 && byId.size >= limit) break;
30348
+ const rawNav = await deps.sink.call(alias, {
30349
+ ...navEntry,
30350
+ params: {
30351
+ ...navEntry.params,
30352
+ ENTITY_XML_ID: `TASK_${taskId}`,
30353
+ EXEMPLAR_ID: first.exemplarId,
30354
+ "FILTER[<ID]": cursor,
30355
+ taskId,
30356
+ signedParameters: first.signedParameters
30357
+ }
30358
+ });
30359
+ const nav = navigateResponse.safeParse(rawNav);
30360
+ if (!nav.success) return fail("task.comments.navigate returned an unexpected shape (no messageList)");
30361
+ scannedPages += 1;
30362
+ const older = parseComments(nav.data.messageList, origin).filter((c) => !byId.has(c.id));
30363
+ for (const c of older) byId.set(c.id, c);
30364
+ if (older.length > 0) cursor = older[0].id;
30365
+ if (older.length === 0 || !nav.data.navigation?.trim()) reachedHistoryStart = true;
30366
+ }
30367
+ const loaded = [...byId.values()].sort((a, b) => a.id - b.id);
30368
+ const comments = limit !== void 0 ? loaded.slice(-limit) : loaded;
30369
+ if (comments.length < loaded.length) reachedHistoryStart = false;
30370
+ const result = {
30371
+ taskId,
30372
+ total: comments.length,
30373
+ reachedHistoryStart,
30374
+ oldestId: comments[0]?.id ?? null,
30375
+ scannedPages,
30376
+ comments
30377
+ };
30378
+ const mode = output ?? "auto";
30379
+ const spill = deps.downloadsDir !== void 0 && (mode === "file" || mode === "auto" && JSON.stringify(comments).length > COMMENTS_INLINE_LIMIT);
30380
+ if (!spill) return ok(result);
30381
+ const dir = deps.downloadsDir;
30382
+ mkdirSync3(dir, { recursive: true });
30383
+ const files = {
30384
+ text: join3(dir, `task-${taskId}-comments.txt`),
30385
+ json: join3(dir, `task-${taskId}-comments.json`)
30386
+ };
30387
+ writeFileSync2(files.text, formatComments(taskId, comments, reachedHistoryStart), "utf8");
30388
+ writeFileSync2(files.json, JSON.stringify(result, null, 1), "utf8");
30389
+ return ok({ ...result, comments: [], files });
30390
+ } catch (e) {
30391
+ return fail(e instanceof Error ? e.message : String(e));
30392
+ }
30393
+ }
30394
+ );
30395
+ }
30178
30396
  if (deps.downloadsDir) {
30179
30397
  const downloadsDir = deps.downloadsDir;
30180
30398
  const fetchToDisk = async (args) => {
package/docs/api-notes.md CHANGED
@@ -75,6 +75,8 @@ Ajax-контроллеры (`/bitrix/services/main/ajax.php`) отвечают
75
75
  | `entityselector.load` | `ui.entityselector.load` | `{"dialog":{entities,preselectedItems,…}}` | — |
76
76
  | `entityselector.search` | `ui.entityselector.doSearch` | `{"dialog":{…},"searchQuery":{"query":"…","queryWords":["…"]}}` | — |
77
77
  | `call.detail` | `GET /call/detail/{callId}` | `callId` (подставляется в путь), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` → HTML | см. §5.4 |
78
+ | `task.comments.page` | `GET /task/comments/{taskId}/` | `taskId` (в путь), `IFRAME=Y`, `IFRAME_TYPE=SIDE_SLIDER` → HTML старых комментариев | см. §5.6 |
79
+ | `task.comments.navigate` | `bitrix:forum.comments` → `navigateComment` | форма: `ENTITY_XML_ID=TASK_<id>`, `EXEMPLAR_ID`, `signedParameters` (оба — из HTML первой страницы), `FILTER[<ID]` | `FILTER[<ID]` — курсор; проще `bitrix_task_comments` (§5.6) |
78
80
 
79
81
  ---
80
82
 
@@ -234,6 +236,10 @@ bitrix_recent_tail { "section": "tasksTask", "lastMessageDate": "2026-06-29T17:2
234
236
  bitrix_chat_load { "dialogId": "chat38849" } // или { "chatId": 38849 }
235
237
  ```
236
238
 
239
+ **Чат пуст, а `COMMENTS_COUNT > 0`** — задача старше чатов задач: в чате только системное сообщение
240
+ «Чтобы прочитать комментарии, которые ранее оставили участники задачи…», а само обсуждение лежит в
241
+ форуме → `bitrix_task_comments` (§5.6).
242
+
237
243
  **В. Поиском по названию задачи** (запасной, матч по тексту):
238
244
  `bitrix_entity_search { "query": "трекер", "section": "tasksTask" }`
239
245
 
@@ -328,6 +334,38 @@ bitrix_file_download { "url": "…", "savePath": "/tmp/photo.png", "overwrite":
328
334
  - **Имя даёт портал** (`Content-Disposition`), поэтому без `savePath` угадывать его не нужно.
329
335
  - **Повторное скачивание** того же файла падает с `already exists` — передай `overwrite: true`.
330
336
 
337
+ ### 5.6. Старые комментарии задачи (форум)
338
+
339
+ До перехода на чаты задач обсуждение жило в форуме задачи, и у старых задач оно там и осталось: в
340
+ чате (`CHAT_ID`) только системная заглушка со ссылкой `/task/comments/<id>/`. Признак — в
341
+ `bitrix_task_get` поле `COMMENTS_COUNT > 0` (через `params.select`; `FORUM_TOPIC_ID` тоже заполнен),
342
+ а чат пуст. JSON-метода чтения нет — мост разбирает HTML-страницу комментариев.
343
+
344
+ ```jsonc
345
+ bitrix_task_comments { "taskId": 1234 } // всё обсуждение; длинное уедет в файл
346
+ bitrix_task_comments { "taskId": 1234, "limit": 10 } // только 10 последних
347
+ bitrix_task_comments { "taskId": 1234, "output": "inline" } // всегда в ответе
348
+ bitrix_task_comments { "taskId": 1234, "beforeId": 5678 } // продолжить вглубь от id
349
+ ```
350
+
351
+ Ответ: `comments[]` по порядку (старые → новые) — `{ id, authorId, author, date, dateIso, text, isNew,
352
+ system, files[] }`, плюс `total`, `oldestId`, `scannedPages` и **`reachedHistoryStart`**: если он
353
+ `false` (упёрлись в `maxPages`, умолчание 10, или в `limit`), продолжай с `beforeId: <oldestId>`.
354
+
355
+ - **`system: true`** — служебные записи («вы назначены исполнителем», смена срока, пинги), не слова людей.
356
+ - **`date`** — как на портале («9 марта 2024 08:15»), **`dateIso`** — то же в `2024-03-09T08:15`
357
+ (местное время портала; для «вчера, 12:00» и дат без года — `null`).
358
+ - **`files[]`** — `{ attachedId, name, size, url }`; `url` скармливай `bitrix_file_download` (§5.5).
359
+ - **`text`** — без разметки; у ссылки с подписью адрес дописан в скобках: «макет (https://…)».
360
+ - **Длинное обсуждение не приходит в ответе** (как расшифровка звонка, §5.4): свыше ~20 КБ (`output:
361
+ "auto"` = умолчание) в ответе `comments: []` и `files`: `files.text` — `task-<id>-comments.txt`,
362
+ строка = комментарий (`#5678 [2024-03-09T08:15] Имя (id 101): текст`, переносы — ` ⏎ `), её удобно
363
+ грепать; `files.json` — полный ответ. `output: "file"` — всегда в файл.
364
+ - **Прочитанным ничего не помечается.** Портал отмечает комментарии отдельным действием
365
+ `readComment`, которое шлёт JS страницы при прокрутке; мост JS не исполняет. Проверено:
366
+ `viewedDate` задачи после чтения не меняется. `isNew: true` — комментарий не прочитан пользователем.
367
+ - Нет доступа к задаче / протухла сессия → внятная ошибка (портал отдаёт HTML логина).
368
+
331
369
  ---
332
370
 
333
371
  Расширение каталога новыми методами, транспорт (`bodyType`, `responseType`, path-параметры) и
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "bitrix24-mcp-bridge",
4
- "version": "0.4.0",
4
+ "version": "0.5.0",
5
5
  "description": "MCP bridge server for Bitrix24 — exposes REST API access, tasks, projects and chat to MCP clients like Claude Code.",
6
6
  "license": "MIT",
7
7
  "repository": {