[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Ftask-comments\u002Fcomments-batch":3,"docs-tabs-entities\u002Ftask-comments\u002Fcomments-batch":6},{"content":4,"lastmod":5},"\n## Пакет операций над комментариями\n\n`POST \u002Fv1\u002Ftasks\u002F:taskId\u002Fcomments\u002Fbatch`\n\nМассовое создание, обновление или удаление комментариев одной задачи. До 50 элементов за вызов. Каждый элемент обрабатывается независимо — ошибка одного не отменяет остальные.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `taskId` (path) | number | да | ID задачи |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `action` | string | ★ | Тип операции: `create`, `update` или `delete` |\n| `items` | array | при `create` \u002F `update` | Список элементов (до 50). Для `create`: `[{ message: string }]`. Для `update`: `[{ id: number, message: string }]` |\n| `ids` | number[] | при `delete` | Идентификаторы комментариев для удаления (до 50) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Fcomments\u002Fbatch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"action\": \"create\",\n    \"items\": [\n      { \"message\": \"Шаг 1: подготовил черновик.\" },\n      { \"message\": \"Шаг 2: отправил на ревью.\" }\n    ]\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Fcomments\u002Fbatch\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"action\": \"create\",\n    \"items\": [\n      { \"message\": \"Шаг 1: подготовил черновик.\" },\n      { \"message\": \"Шаг 2: отправил на ревью.\" }\n    ]\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Fcomments\u002Fbatch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    action: 'create',\n    items: [\n      { message: 'Шаг 1: подготовил черновик.' },\n      { message: 'Шаг 2: отправил на ревью.' },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\ndata.forEach((item) => {\n  if (item.success) console.log(`#${item.index} → id=${item.id}`)\n  else console.log(`#${item.index} → ошибка: ${item.error}`)\n})\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftasks\u002F289\u002Fcomments\u002Fbatch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    action: 'create',\n    items: [\n      { message: 'Шаг 1: подготовил черновик.' },\n      { message: 'Шаг 2: отправил на ревью.' },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` — даже если все элементы упали, верхний уровень success. Смотрите статус каждого в `data[i]` |\n| `data` | array | Массив результатов в том же порядке, что и `items` \u002F `ids` запроса |\n| `data[].index` | number | Индекс элемента (0-based) |\n| `data[].success` | boolean | Результат конкретной операции |\n| `data[].id` | number \\| null | ID комментария при `create` \u002F `update`. Изредка `null` при `success: true` — комментарий создан, но id не восстановился (см. [`POST \u002Fv1\u002Ftasks\u002F:taskId\u002Fcomments`](.\u002Fcreate.md) «Известные особенности»). Если Битрикс24 вообще не создал комментарий (задача не существует\u002Fнедоступна) — это отдельный случай, `success: false` + `error: TASK_NOT_FOUND`, id не возвращается |\n| `data[].error` | string | Код ошибки для упавшего элемента (`GONE`, `BATCH_ITEM_VALIDATION`, `BITRIX_ERROR`, `INVALID_PARAMS`, `TASK_NOT_FOUND`) |\n| `data[].message` | string | Текст ошибки для упавшего элемента |\n\n## Пример ответа\n\n`action: create` на новой карточке — обе записи попали в чат задачи:\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"index\": 0, \"success\": true, \"id\": 36571 },\n    { \"index\": 1, \"success\": true, \"id\": 36573 }\n  ]\n}\n```\n\n`action: update` на новой карточке — каждая попытка обновления превращается в `GONE` (метод недоступен):\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"index\": 0,\n      \"success\": false,\n      \"error\": \"GONE\",\n      \"message\": \"Bitrix24 disabled update\u002Fdelete for task comments in the new task card. To remove a comment, delete the source task or ask a portal admin to remove the message via the chat UI.\"\n    }\n  ]\n}\n```\n\n## Пример ответа при ошибке\n\n400 — некорректное значение `action`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_BATCH_ACTION\",\n    \"message\": \"Action must be one of: create, update, delete\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `taskId` не положительное целое |\n| 400 | `INVALID_BATCH_ACTION` | `action` не равен `create`, `update` или `delete` |\n| 400 | `BATCH_ITEM_VALIDATION` | `items` (или `ids` при `delete`) пустой или не массив |\n| 400 | `BATCH_LIMIT_EXCEEDED` | В одном запросе передано более 50 элементов |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `task` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nОшибки отдельных элементов приходят внутри `data[i].error`:\n\n| Код | Описание |\n|-----|----------|\n| `GONE` | Только для `update` \u002F `delete` на новой карточке — операция недоступна на стороне Битрикс24 |\n| `BATCH_ITEM_VALIDATION` | Элемент не прошёл валидацию (например, нет `id` или `message`, неверный тип) |\n| `INVALID_PARAMS` | `message` отсутствует или превышает лимит длины |\n| `BITRIX_ERROR` | Битрикс24 вернул ошибку для конкретного элемента (текст в `message`) |\n| `TASK_NOT_FOUND` | Только для `create` — задача `taskId` не существует или недоступна ключу, комментарий не создан |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Верхний `success` всегда `true`, если запрос прошёл валидацию.** Несколько упавших элементов внутри не превращают весь ответ в ошибку — это сделано специально, чтобы клиент мог обработать частичный результат. Перед использованием результата всегда проверяйте `data[i].success` для каждого элемента.\n\n**`GONE` приходит для каждого элемента отдельно.** На новой карточке `update` \u002F `delete` каждого элемента возвращает `GONE`, но общий ответ остаётся `200 success` — весь пакет не отклоняется. В смешанных сценариях часть элементов на старой карточке проходит, часть на новой возвращает `GONE`.\n\n**`create` различает «не создано» и «создано, id неизвестен».** Если задача не существует\u002Fнедоступна — элемент падает с `TASK_NOT_FOUND` (`success: false`, `id` отсутствует). Если же комментарий реально создан (ушёл в чат задачи), но система не смогла подтвердить его id поиском по последним сообщениям — элемент остаётся `success: true` с `id: null`; повторный вызов создаст дубликат, а не восстановит прежний id.\n\n## Смотрите также\n\n- [Создать комментарий](.\u002Fcreate.md) — одиночный POST\n- [Обновить комментарий](.\u002Fupdate.md) — одиночный PATCH (тот же контракт по карточкам)\n- [Удалить комментарий](.\u002Fdelete.md) — одиночный DELETE\n- [Универсальный batch](\u002Fdocs\u002Fbatch) — объединение разных entity-операций в один HTTP-вызов\n- [Задачи](\u002Fdocs\u002Fentities\u002Ftasks) — родительская сущность\n","2026-07-14",{}]