[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-bots\u002Fmessages":3,"docs-tabs-bots\u002Fmessages":6},{"content":4,"lastmod":5},"# Сообщения\n\nОтправляйте сообщения от имени бота, редактируйте и удаляйте их, читайте отдельные сообщения и отмечайте переписку прочитанной.\n\n**Скоуп:** `imbot` | **Базовый URL:** `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1` | **Авторизация:** `X-Api-Key`\n\n## Операции\n\n- [Отправить сообщение](.\u002Fmessages\u002Fsend.md) — `POST \u002Fv1\u002Fbots\u002F:botId\u002Fmessages`\n- [Обновить сообщение](.\u002Fmessages\u002Fupdate.md) — `PATCH \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId`\n- [Удалить сообщение](.\u002Fmessages\u002Fdelete.md) — `DELETE \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId`\n- [Прочитать сообщения](.\u002Fmessages\u002Fread.md) — `POST \u002Fv1\u002Fbots\u002F:botId\u002Fchats\u002F:dialogId\u002Fread`\n- [Получить сообщение](.\u002Fmessages\u002Fget.md) — `GET \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId`\n- [Контекст сообщения](.\u002Fmessages\u002Fcontext.md) — `GET \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId\u002Fcontext`\n","2026-06-16",{"messages\u002Fsend.md":7,"messages\u002Fupdate.md":8,"messages\u002Fdelete.md":9,"messages\u002Fread.md":10,"messages\u002Fget.md":11,"messages\u002Fcontext.md":12},"\n## Отправить сообщение\n\n`POST \u002Fv1\u002Fbots\u002F:botId\u002Fmessages`\n\nОтправляет сообщение от имени бота в указанный диалог. Текст поддерживает [BB-коды](\u002Fdocs\u002Fbots\u002Fmessages\u002Fformatting), к сообщению можно прикрепить [клавиатуру](\u002Fdocs\u002Fbots\u002Fmessages\u002Fkeyboard) и [ATTACH-блоки](\u002Fdocs\u002Fbots\u002Fmessages\u002Fattach).\n\n## Параметры\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `botId` (path) | number | да | — | ID бота |\n| `dialogId` | string | да | — | ID диалога: числовой ID пользователя для личных сообщений, `chatXXX` для групповых |\n| `fields.message` | string | да | — | Текст сообщения (до 20 000 символов). Поддерживает [BB-коды](\u002Fdocs\u002Fbots\u002Fmessages\u002Fformatting) |\n| `fields.keyboard` | array | нет | — | Интерактивная [клавиатура](\u002Fdocs\u002Fbots\u002Fmessages\u002Fkeyboard) |\n| `fields.attach` | array\u002Fobject | нет | — | [ATTACH-блоки](\u002Fdocs\u002Fbots\u002Fmessages\u002Fattach) с оформленным содержимым |\n| `fields.replyId` | number | нет | — | ID сообщения для цитирования |\n| `fields.forwardIds` | object | нет | — | Сообщения для пересылки: `{uuid: messageId}`, где uuid — произвольная строка-ключ, messageId — ID исходного сообщения. Максимум 100. В ответе `uuidMap` вернёт `{uuid: newMessageId}` |\n| `fields.system` | boolean | нет | `false` | Системное сообщение (другой стиль, без аватара бота) |\n| `fields.urlPreview` | boolean | нет | `true` | Показывать превью ссылок в тексте |\n| `fields.templateId` | string | нет | — | UUID шаблона сообщения |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"dialogId\": \"chat123\",\n    \"fields\": {\n      \"message\": \"[b]Задача #42[\u002Fb]\\nСтатус: выполнено\",\n      \"keyboard\": [\n        {\n          \"TEXT\": \"Открыть задачу\",\n          \"LINK\": \"https:\u002F\u002Fportal.bitrix24.ru\u002Ftasks\u002F42\u002F\",\n          \"BG_COLOR_TOKEN\": \"primary\"\n        }\n      ]\n    }\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"dialogId\": \"chat123\",\n    \"fields\": {\n      \"message\": \"[b]Задача #42[\u002Fb]\\nСтатус: выполнено\",\n      \"keyboard\": [\n        {\n          \"TEXT\": \"Открыть задачу\",\n          \"LINK\": \"https:\u002F\u002Fportal.bitrix24.ru\u002Ftasks\u002F42\u002F\",\n          \"BG_COLOR_TOKEN\": \"primary\"\n        }\n      ]\n    }\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    dialogId: 'chat123',\n    fields: {\n      message: '[b]Задача #42[\u002Fb]\\nСтатус: выполнено',\n      keyboard: [\n        {\n          TEXT: 'Открыть задачу',\n          LINK: 'https:\u002F\u002Fportal.bitrix24.ru\u002Ftasks\u002F42\u002F',\n          BG_COLOR_TOKEN: 'primary',\n        },\n      ],\n    },\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Message ID:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages', {\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    dialogId: 'chat123',\n    fields: {\n      message: '[b]Задача #42[\u002Fb]\\nСтатус: выполнено',\n      keyboard: [\n        {\n          TEXT: 'Открыть задачу',\n          LINK: 'https:\u002F\u002Fportal.bitrix24.ru\u002Ftasks\u002F42\u002F',\n          BG_COLOR_TOKEN: 'primary',\n        },\n      ],\n    },\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | number | ID созданного сообщения |\n| `uuidMap` | array | Маппинг UUID при пересылке (пустой массив если без `forwardIds`) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 36357,\n    \"uuidMap\": []\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — бот не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_NOT_FOUND\",\n    \"message\": \"Bot 999 not found. Register it first via POST \u002Fv1\u002Fbots.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот с таким ID не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 502 | `BITRIX_ERROR` | Ошибка Битрикс24 при отправке (текст ошибки в `message`) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Два формата тела:** канонический формат — содержимое сообщения внутри `fields` (как в примерах выше). Для удобства принимается и «плоский» формат, когда `message`, `keyboard`, `attach`, `system`, `urlPreview`, `replyId`, `forwardIds`, `templateId` передаются на верхнем уровне рядом с `dialogId` — они автоматически оборачиваются в `fields`. Это та же симметрия, что и у [обновления сообщения](\u002Fdocs\u002Fbots\u002Fmessages\u002Fupdate). Если передан `fields`, плоские ключи не применяются (приоритет у `fields`).\n\n**Системные сообщения:** при `system: true` сообщение отображается без аватара бота и имеет `authorId = 0`. Такие сообщения нельзя обновить или удалить через бота.\n\n**Текст обрезается:** если сообщение длиннее 20 000 символов, Битрикс24 обрежет текст и добавит ` (...)`.\n\n**Пересылка (forwardIds):** формат — объект `{uuid: messageId}`, где uuid — произвольная строка, а messageId — ID исходного сообщения. Бот может пересылать только сообщения из чатов, где он является участником.\n\n## Смотрите также\n\n- [Обновить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fupdate)\n- [Форматирование текста](\u002Fdocs\u002Fbots\u002Fmessages\u002Fformatting)\n- [Клавиатура](\u002Fdocs\u002Fbots\u002Fmessages\u002Fkeyboard)\n- [ATTACH-блоки](\u002Fdocs\u002Fbots\u002Fmessages\u002Fattach)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Обновить сообщение\n\n`PATCH \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId`\n\nОбновляет ранее отправленное ботом сообщение. Бот может обновлять только собственные сообщения.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `message` | string | Новый текст сообщения (до 20 000 символов). Поддерживает [BB-коды](\u002Fdocs\u002Fbots\u002Fmessages\u002Fformatting) |\n| `keyboard` | array | Новая [клавиатура](\u002Fdocs\u002Fbots\u002Fmessages\u002Fkeyboard). Для удаления передайте `\"N\"` |\n| `attach` | array\u002Fobject | Новые [ATTACH-блоки](\u002Fdocs\u002Fbots\u002Fmessages\u002Fattach) |\n| `urlPreview` | boolean | Показывать превью ссылок |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502 \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"message\": \"Обновлённый текст сообщения\",\n    \"keyboard\": [\n      {\n        \"TEXT\": \"Готово\",\n        \"BG_COLOR_TOKEN\": \"primary\",\n        \"DISABLED\": \"Y\"\n      }\n    ]\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"message\": \"Обновлённый текст сообщения\",\n    \"keyboard\": [\n      {\n        \"TEXT\": \"Готово\",\n        \"BG_COLOR_TOKEN\": \"primary\",\n        \"DISABLED\": \"Y\"\n      }\n    ]\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    message: 'Обновлённый текст сообщения',\n    keyboard: [\n      {\n        TEXT: 'Готово',\n        BG_COLOR_TOKEN: 'primary',\n        DISABLED: 'Y',\n      },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502', {\n  method: 'PATCH',\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    message: 'Обновлённый текст сообщения',\n    keyboard: [\n      {\n        TEXT: 'Готово',\n        BG_COLOR_TOKEN: 'primary',\n        DISABLED: 'Y',\n      },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.result` | boolean | `true` при успешном обновлении |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"result\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n502 — Битрикс24 вернул ошибку (например, сообщение не найдено):\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Message not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот с таким ID не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 502 | `BITRIX_ERROR` | Ошибка Битрикс24 (текст ошибки в `message`) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Системные сообщения нельзя обновить:** сообщения, отправленные с `system: true`, имеют `authorId = 0` и не принадлежат боту с точки зрения прав. Битрикс24 вернёт ошибку.\n\n**Удаление клавиатуры:** передайте `\"keyboard\": \"N\"` чтобы убрать клавиатуру с сообщения.\n\n## Смотрите также\n\n- [Отправить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fsend)\n- [Удалить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fdelete)\n- [Клавиатура](\u002Fdocs\u002Fbots\u002Fmessages\u002Fkeyboard)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Удалить сообщение\n\n`DELETE \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId`\n\nУдаляет сообщение. По умолчанию — мягкое скрытие. Для полного удаления из базы данных передайте `complete: true`.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `complete` | boolean | нет | `false` | `true` — полное удаление из БД, `false` — мягкое скрытие |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502 \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"complete\": true }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"complete\": true }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ complete: true }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1502', {\n  method: 'DELETE',\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({ complete: true }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.result` | boolean | `true` при успешном удалении |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"result\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — бот принадлежит другому ключу:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_ACCESS_DENIED\",\n    \"message\": \"This bot belongs to a different API key\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот с таким ID не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 502 | `BITRIX_ERROR` | Ошибка Битрикс24 (текст ошибки в `message`) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Мягкое vs полное удаление:** без `complete: true` сообщение помечается удалённым, но остаётся в базе. С `complete: true` удаляется полностью.\n\n**Системные сообщения:** сообщения с `authorId = 0` (отправленные с `system: true`) бот не может удалить, если не является администратором чата.\n\n**Пустое тело:** для мягкого удаления body можно не передавать.\n\n## Смотрите также\n\n- [Отправить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fsend)\n- [Обновить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fupdate)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Прочитать сообщения\n\n`POST \u002Fv1\u002Fbots\u002F:botId\u002Fchats\u002F:dialogId\u002Fread`\n\nОтмечает сообщения как прочитанные от имени бота. Без `messageId` прочитает все сообщения в чате.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `botId` (path) | number | да | — | ID бота |\n| `dialogId` (path) | string | да | — | ID диалога: числовой ID пользователя для личных сообщений, `chatXXX` для групповых |\n| `messageId` (body) | number | нет | — | Прочитать все сообщения до этого включительно. Без параметра — прочитать все |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fchats\u002Fchat456\u002Fread \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"messageId\": 1501 }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fchats\u002Fchat456\u002Fread \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"messageId\": 1501 }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fchats\u002Fchat456\u002Fread', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ messageId: 1501 }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Прочитано до:', data.lastId)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fchats\u002Fchat456\u002Fread', {\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({ messageId: 1501 }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `chatId` | number | ID чата |\n| `lastId` | number | ID последнего прочитанного сообщения |\n| `counter` | number | Оставшееся количество непрочитанных |\n| `viewedMessages` | number[] | ID прочитанных сообщений |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"chatId\": 456,\n    \"lastId\": 1501,\n    \"counter\": 0,\n    \"viewedMessages\": [1499, 1500, 1501]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — бот не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_NOT_FOUND\",\n    \"message\": \"Bot 999 not found. Register it first via POST \u002Fv1\u002Fbots.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот с таким ID не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 502 | `BITRIX_ERROR` | Ошибка Битрикс24 (текст ошибки в `message`) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Без messageId:** если не передать `messageId`, будут прочитаны все сообщения в чате.\n\n**Чтение до сообщения:** при указании `messageId` прочитываются все сообщения до указанного включительно, а не только это одно сообщение.\n\n## Смотрите также\n\n- [Отправить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fsend)\n- [Получить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fget)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Получить сообщение\n\n`GET \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId`\n\nВозвращает сообщение по его ID.\n\n> **Ограничение по типу бота.** Метод доступен только для ботов с `type` ∈ {`personal`, `supervisor`}. Для обычного `bot` Битрикс24 возвращает 422 `BITRIX_ERROR: Method is available only for supervisor and personal bots`. Тип задаётся при регистрации через [POST \u002Fv1\u002Fbots](\u002Fdocs\u002Fbots\u002Fmanagement\u002Fcreate) и не меняется без перерегистрации.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` (path) | number | да | ID бота |\n| `messageId` (path) | number | да | ID сообщения |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501 \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Сообщение:', data.text)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | number | ID сообщения |\n| `chatId` | number | ID чата |\n| `authorId` | number | ID автора |\n| `date` | string | Дата отправки (ISO 8601) |\n| `text` | string | Текст сообщения |\n| `isSystem` | boolean | Системное сообщение |\n| `params` | object | Дополнительные параметры сообщения |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 1501,\n    \"chatId\": 123,\n    \"authorId\": 1,\n    \"date\": \"2026-03-31T10:00:00+03:00\",\n    \"text\": \"Привет, бот!\",\n    \"isSystem\": false,\n    \"params\": {}\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n502 — бот не имеет доступа к сообщению:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Access denied\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот с таким ID не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 502 | `BITRIX_ERROR` | Ошибка Битрикс24 (бот не имеет доступа к сообщению) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Только personal и supervisor:** метод доступен только для ботов типа `personal` и `supervisor`. Для стандартных ботов (`bot`) Битрикс24 вернёт ошибку доступа.\n\n**Типичный сценарий:** бот получил событие с `replyId` и хочет прочитать исходное сообщение, на которое ответил пользователь.\n\n## Смотрите также\n\n- [Контекст сообщения](\u002Fdocs\u002Fbots\u002Fmessages\u002Fcontext)\n- [Отправить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fsend)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Контекст сообщения\n\n`GET \u002Fv1\u002Fbots\u002F:botId\u002Fmessages\u002F:messageId\u002Fcontext`\n\nВозвращает окно сообщений вокруг указанного. Используется для анализа истории диалога — например, чтобы понять контекст входящего сообщения.\n\n> **Ограничение по типу бота.** Метод доступен только для ботов с `type` ∈ {`personal`, `supervisor`}. Для обычного `bot` Битрикс24 возвращает 422 `BITRIX_ERROR: Method is available only for supervisor and personal bots`. Тип задаётся при регистрации через [POST \u002Fv1\u002Fbots](\u002Fdocs\u002Fbots\u002Fmanagement\u002Fcreate) и не меняется без перерегистрации.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` (path) | number | да | ID бота |\n| `messageId` (path) | number | да | ID центрального сообщения |\n| `range` (query) | number | нет | Количество сообщений в каждую сторону от центрального (1-50). По умолчанию `50` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501\u002Fcontext?range=20\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501\u002Fcontext?range=20\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501\u002Fcontext?range=20', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Сообщений:', data.messages.length)\nconsole.log('Есть ещё до:', data.hasPrevPage)\nconsole.log('Есть ещё после:', data.hasNextPage)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fmessages\u002F1501\u002Fcontext?range=20', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `messages` | array | Массив сообщений вокруг центрального |\n| `messages[].id` | number | ID сообщения |\n| `messages[].chatId` | number | ID чата |\n| `messages[].authorId` | number | ID автора |\n| `messages[].date` | string | Дата отправки (ISO 8601) |\n| `messages[].text` | string | Текст сообщения |\n| `hasPrevPage` | boolean | Есть ещё сообщения до окна |\n| `hasNextPage` | boolean | Есть ещё сообщения после окна |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"messages\": [\n      {\n        \"id\": 1499,\n        \"chatId\": 123,\n        \"authorId\": 3,\n        \"date\": \"2026-03-31T09:58:00+03:00\",\n        \"text\": \"Коллеги, есть вопрос по задаче\"\n      },\n      {\n        \"id\": 1500,\n        \"chatId\": 123,\n        \"authorId\": 1,\n        \"date\": \"2026-03-31T09:59:00+03:00\",\n        \"text\": \"Давай обсудим\"\n      },\n      {\n        \"id\": 1501,\n        \"chatId\": 123,\n        \"authorId\": 1,\n        \"date\": \"2026-03-31T10:00:00+03:00\",\n        \"text\": \"Привет, бот!\"\n      }\n    ],\n    \"hasPrevPage\": true,\n    \"hasNextPage\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n502 — бот не имеет доступа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Access denied\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот с таким ID не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 502 | `BITRIX_ERROR` | Ошибка Битрикс24 (текст ошибки в `message`) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Только personal и supervisor:** как и `GET \u002Fmessages\u002F:messageId`, метод доступен только для ботов типа `personal` и `supervisor`.\n\n**Пагинация:** `hasPrevPage` и `hasNextPage` указывают, есть ли сообщения за пределами окна. Для полного обхода можно использовать крайние `id` из `messages` как новый `messageId`.\n\n## Смотрите также\n\n- [Получить сообщение](\u002Fdocs\u002Fbots\u002Fmessages\u002Fget)\n- [Прочитать сообщения](\u002Fdocs\u002Fbots\u002Fmessages\u002Fread)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n"]