[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-chats\u002Fmessages\u002Fbulk":3,"docs-tabs-chats\u002Fmessages\u002Fbulk":6},{"content":4,"lastmod":5},"\n## Массовая загрузка сообщений\n\n`POST \u002Fv1\u002Fchats\u002Fmessages\u002Fbulk`\n\nЗагружает сообщения из нескольких диалогов одним запросом. Используется для синхронизации нескольких чатов без лишних вызовов API.\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| `dialogs` | array | да | Массив диалогов для загрузки. От 1 до 50 элементов |\n| `dialogs[].dialogId` | string | да | ID диалога: числовой ID пользователя или `chatXXX` |\n| `dialogs[].lastId` | number | нет | Курсор для загрузки более старых сообщений |\n| `dialogs[].firstId` | number | нет | Курсор для загрузки более новых сообщений |\n| `dialogs[].limit` | number | нет | Количество сообщений для этого диалога (не более 200) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fchats\u002Fmessages\u002Fbulk\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"dialogs\": [\n      { \"dialogId\": \"chat42\", \"limit\": 20 },\n      { \"dialogId\": \"chat99\", \"lastId\": 5000 }\n    ]\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fchats\u002Fmessages\u002Fbulk\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"dialogs\": [\n      { \"dialogId\": \"chat42\", \"limit\": 20 },\n      { \"dialogId\": \"chat99\", \"lastId\": 5000 }\n    ]\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fchats\u002Fmessages\u002Fbulk', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    dialogs: [\n      { dialogId: 'chat42', limit: 20 },\n      { dialogId: 'chat99', lastId: 5000 },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Итог:', data.summary)\nfor (const [key, result] of Object.entries(data.results)) {\n  console.log(`Диалог ${key}:`, result.messages.length, 'сообщений')\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fchats\u002Fmessages\u002Fbulk', {\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    dialogs: [\n      { dialogId: 'chat42', limit: 20 },\n      { dialogId: 'chat99', lastId: 5000 },\n    ],\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.results` | object | Словарь результатов: ключ — `dialogId` из запроса, значение — объект с сообщениями |\n| `data.results.\u003CdialogId>.chatId` | number | Числовой ID чата |\n| `data.results.\u003CdialogId>.messages` | array | Массив сообщений диалога (поля — как в [Чтении сообщений](\u002Fdocs\u002Fchats\u002Fmessages\u002Flist)) |\n| `data.results.\u003CdialogId>.users` | array | Участники диалога с профилями |\n| `data.errors` | object | Словарь ошибок: ключ — `dialogId`, значение — объект с полем `code` |\n| `data.summary.total` | number | Общее количество запрошенных диалогов |\n| `data.summary.succeeded` | number | Количество успешно загруженных диалогов |\n| `data.summary.failed` | number | Количество диалогов с ошибкой |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"results\": {\n      \"chat42\": {\n        \"chatId\": 42,\n        \"messages\": [\n          {\n            \"id\": 1001,\n            \"chatId\": 42,\n            \"authorId\": 5,\n            \"date\": \"2026-06-05T10:00:00+03:00\",\n            \"text\": \"Привет, команда!\",\n            \"unread\": false,\n            \"uuid\": null,\n            \"replaces\": [],\n            \"params\": [],\n            \"disappearingDate\": null\n          }\n        ],\n        \"users\": [\n          {\n            \"id\": 5,\n            \"active\": true,\n            \"name\": \"Иван Петров\",\n            \"firstName\": \"Иван\",\n            \"lastName\": \"Петров\",\n            \"bot\": false,\n            \"type\": \"user\"\n          }\n        ],\n        \"files\": []\n      }\n    },\n    \"errors\": {},\n    \"summary\": {\n      \"total\": 1,\n      \"succeeded\": 1,\n      \"failed\": 0\n    }\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — массив `dialogs` отсутствует или пустой:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_REQUEST\",\n    \"message\": \"Body must contain \\\"dialogs\\\" array with at least 1 item. Each item: { dialogId, lastId?, firstId?, limit? }\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_REQUEST` | Поле `dialogs` отсутствует, пустое, или элемент не содержит `dialogId` |\n| 400 | `BATCH_LIMIT_EXCEEDED` | Превышено ограничение: более 50 диалогов в одном запросе |\n| 422 | `BITRIX_ERROR` | Битрикс24 вернул ошибку при обработке всего пакетного запроса |\n| 502 | `BITRIX_UNAVAILABLE` | Битрикс24 недоступен или вернул ошибку сервера |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `im` |\n| 401 | `TOKEN_MISSING` | Не передан `X-Api-Key` или не настроены токены |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Частичный успех.** Ошибка для отдельного диалога не прерывает обработку остальных. Проверяйте `data.errors` и `data.summary.failed` для обнаружения частичных сбоев.\n\n**Ограничение 50 диалогов.** Определяется лимитом пакетных запросов Битрикс24. При необходимости обработать больше диалогов разбейте запрос на несколько частей.\n\n**Ключи результата.** Ключи в `data.results` и `data.errors` соответствуют полю `dialogId` из запроса. Если вы передали несколько записей с одинаковым `dialogId`, результат будет только для последнего совпадения.\n\n## Смотрите также\n\n- [Сообщения](\u002Fdocs\u002Fchats\u002Fmessages)\n- [Чтение сообщений](\u002Fdocs\u002Fchats\u002Fmessages\u002Flist)\n- [Поиск чатов](\u002Fdocs\u002Fchats\u002Fdiscovery\u002Fget)\n","2026-06-19",{}]