[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-bots\u002Fcommands":3,"docs-tabs-bots\u002Fcommands":6},{"content":4,"lastmod":5},"# Команды\n\nРегистрируйте slash-команды бота, обновляйте и удаляйте их, отвечайте на вызовы. Пользователи вызывают команды через `\u002F` в чате. Команды также срабатывают через поле `COMMAND` в кнопках [клавиатуры](\u002Fdocs\u002Fbots\u002Fmessages\u002Fkeyboard) — оба способа генерируют одно событие `ONIMBOTV2COMMANDADD`.\n\n**Скоуп:** `imbot` | **Базовый URL:** `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1` | **Авторизация:** `X-Api-Key`\n\n## Операции\n\n- [Зарегистрировать команду](.\u002Fcommands\u002Fregister.md) — `POST \u002Fv1\u002Fbots\u002F:botId\u002Fcommands`\n- [Список команд](.\u002Fcommands\u002Flist.md) — `GET \u002Fv1\u002Fbots\u002F:botId\u002Fcommands`\n- [Обновить команду](.\u002Fcommands\u002Fupdate.md) — `PATCH \u002Fv1\u002Fbots\u002F:botId\u002Fcommands\u002F:commandId`\n- [Удалить команду](.\u002Fcommands\u002Fdelete.md) — `DELETE \u002Fv1\u002Fbots\u002F:botId\u002Fcommands\u002F:commandId`\n- [Ответить на команду](.\u002Fcommands\u002Fanswer.md) — `POST \u002Fv1\u002Fbots\u002F:botId\u002Fcommands\u002F:commandId\u002Fanswer`\n\n## Возможная задержка между записью и чтением\n\nЧтение списка команд (`GET \u002Fv1\u002Fbots\u002F:botId\u002Fcommands`) не кешируется на стороне Вайбкода. Однако сам Битрикс24 кеширует список: после регистрации, обновления или удаления команды `GET` может несколько секунд (иногда минут) возвращать прежние значения. Подробности — в [Список команд](.\u002Fcommands\u002Flist.md).\n","2026-06-24",{"commands\u002Fregister.md":7,"commands\u002Flist.md":8,"commands\u002Fupdate.md":9,"commands\u002Fdelete.md":10,"commands\u002Fanswer.md":11},"\n## Зарегистрировать команду\n\n`POST \u002Fv1\u002Fbots\u002F:botId\u002Fcommands`\n\nРегистрирует новую slash-команду бота. Вайбкод принимает плоский формат и автоматически оборачивает в `fields` для Битрикс24.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `command` | string | да | — | Текст команды без `\u002F` (например, `help`) |\n| `title` | string\u002Fobject | нет | — | Заголовок. Строка или мультиязычный объект `{ \"ru\": \"Помощь\", \"en\": \"Help\" }` |\n| `params` | string\u002Fobject | нет | — | Описание параметров. Строка или объект `{ \"ru\": \"тема\", \"en\": \"topic\" }` |\n| `common` | string | нет | `\"N\"` | `\"Y\"` — доступна во всех чатах, `\"N\"` — только в личном диалоге с ботом и чатах с ботом |\n| `hidden` | string | нет | `\"N\"` | `\"Y\"` — скрыть из списка команд |\n| `extranetSupport` | string | нет | `\"N\"` | `\"Y\"` — доступна для экстранет-пользователей |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"command\": \"help\",\n    \"title\": { \"ru\": \"Помощь\", \"en\": \"Help\" },\n    \"params\": { \"ru\": \"тема\", \"en\": \"topic\" },\n    \"common\": \"Y\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"command\": \"help\",\n    \"title\": { \"ru\": \"Помощь\", \"en\": \"Help\" },\n    \"params\": { \"ru\": \"тема\", \"en\": \"topic\" },\n    \"common\": \"Y\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    command: 'help',\n    title: { ru: 'Помощь', en: 'Help' },\n    params: { ru: 'тема', en: 'topic' },\n    common: 'Y',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Command ID:', data.commandId)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands', {\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    command: 'help',\n    title: { ru: 'Помощь', en: 'Help' },\n    params: { ru: 'тема', en: 'topic' },\n    common: 'Y',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `command.id` | number | ID зарегистрированной команды |\n| `command.botId` | number | ID бота |\n| `command.command` | string | Текст команды (с `\u002F`) |\n| `command.common` | boolean | Доступна во всех чатах |\n| `command.hidden` | boolean | Скрыта из списка |\n| `command.extranetSupport` | boolean | Доступна экстранет-пользователям |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"command\": {\n      \"id\": 117,\n      \"botId\": 1327,\n      \"command\": \"\u002Fhelp\",\n      \"common\": true,\n      \"hidden\": false,\n      \"extranetSupport\": false\n    }\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n502 — ошибка Битрикс24:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Command 'help' already registered\"\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**Идемпотентность:** повторный вызов с тем же `command` для того же бота возвращает существующую команду без изменений. Для обновления используйте `PATCH`.\n\n**Мультиязычность:** `title` и `params` принимают как строку, так и объект с языковыми ключами (`ru`, `en`, `de` и т.д.).\n\n**Событие:** при вызове команды пользователем срабатывает событие `ONIMBOTV2COMMANDADD`.\n\n## Смотрите также\n\n- [Список команд](\u002Fdocs\u002Fbots\u002Fcommands\u002Flist)\n- [Ответить на команду](\u002Fdocs\u002Fbots\u002Fcommands\u002Fanswer)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Список команд\n\n`GET \u002Fv1\u002Fbots\u002F:botId\u002Fcommands`\n\nВозвращает все зарегистрированные команды бота.\n\n## ⚠️ Возможная задержка после мутаций\n\nВайбкод не кеширует этот ответ. Однако сам Битрикс24 **держит свой кеш** списка команд и не всегда обновляет его сразу после регистрации, обновления или удаления команды. В течение нескольких секунд (иногда минут) после успешной мутации `GET` может возвращать:\n\n- удалённые команды (их id ещё видны в списке)\n- старые значения `title` \u002F `params` \u002F `common` \u002F `hidden` для только что обновлённой команды\n- отсутствие только что зарегистрированной команды.\n\nПри этом сама команда уже **действует** на стороне Битрикс24 (на неё реагирует событие `ONIMBOTV2COMMANDADD`, бот её обрабатывает) — расхождение видно только в этом `GET`.\n\n### Что делать\n\n- **Не использовать `GET \u002Fcommands` как единственный источник правды сразу после мутации.** Опирайтесь на ответ самой мутации: `POST` возвращает данные с новым id, `PATCH` — обновлённую команду, `DELETE` — признак успеха.\n- **Если нужна синхронизация со списком** (например для сверки интерфейса с реальным состоянием), запросите `GET` повторно через 10–30 секунд.\n- **Если расхождение сохраняется дольше минуты**, это уже не штатная задержка. Приложите к обращению в поддержку `botId`, время мутации и то, что именно ожидалось и что получено.\n\nПринудительно сбросить этот кеш на стороне Битрикс24 нельзя. Если список не обновился — повторите `GET` через несколько секунд.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` (path) | number | да | ID бота |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands \\\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\u002Fcommands \\\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\u002Fcommands', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Команды:', data)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands', {\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| `data` | array | Массив команд |\n| `data[].id` | number | ID команды |\n| `data[].command` | string | Текст команды |\n| `data[].title` | string | Заголовок (локализованный) |\n| `data[].params` | string | Описание параметров (локализованное) |\n| `data[].common` | boolean | Доступна во всех чатах |\n| `data[].hidden` | boolean | Скрыта из списка |\n| `data[].extranetSupport` | boolean | Доступна экстранет-пользователям |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 7,\n      \"command\": \"help\",\n      \"title\": \"Помощь\",\n      \"params\": \"тема\",\n      \"common\": true,\n      \"hidden\": false,\n      \"extranetSupport\": false\n    },\n    {\n      \"id\": 8,\n      \"command\": \"status\",\n      \"title\": \"Статус\",\n      \"params\": \"\",\n      \"common\": false,\n      \"hidden\": false,\n      \"extranetSupport\": false\n    }\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| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Зарегистрировать команду](\u002Fdocs\u002Fbots\u002Fcommands\u002Fregister)\n- [Обновить команду](\u002Fdocs\u002Fbots\u002Fcommands\u002Fupdate)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Обновить команду\n\n`PATCH \u002Fv1\u002Fbots\u002F:botId\u002Fcommands\u002F:commandId`\n\nОбновляет параметры существующей команды. Вайбкод принимает плоский формат и автоматически оборачивает в `fields` для Битрикс24.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `command` | string | Новый текст команды без `\u002F` |\n| `title` | string\u002Fobject | Новый заголовок. Строка или `{ \"ru\": \"...\", \"en\": \"...\" }`. Передача `null` для ключа удаляет перевод: `{ \"en\": null }` |\n| `params` | string\u002Fobject | Новое описание параметров. Строка или объект |\n| `common` | string | `\"Y\"` \u002F `\"N\"` |\n| `hidden` | string | `\"Y\"` \u002F `\"N\"` |\n| `extranetSupport` | string | `\"Y\"` \u002F `\"N\"` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7 \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"title\": { \"ru\": \"Обновлённая справка\", \"en\": \"Updated help\" },\n    \"common\": \"Y\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"title\": { \"ru\": \"Обновлённая справка\", \"en\": \"Updated help\" },\n    \"common\": \"Y\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    title: { ru: 'Обновлённая справка', en: 'Updated help' },\n    common: 'Y',\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\u002Fcommands\u002F7', {\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    title: { ru: 'Обновлённая справка', en: 'Updated help' },\n    common: 'Y',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.command.id` | number | ID команды |\n| `data.command.botId` | number | ID бота |\n| `data.command.command` | string | Имя команды с префиксом `\u002F` |\n| `data.command.common` | boolean | Доступна во всех чатах, а не только в диалоге с ботом |\n| `data.command.hidden` | boolean | Скрыта из подсказки автодополнения |\n| `data.command.extranetSupport` | boolean | Доступна экстранет-пользователям |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"command\": {\n      \"id\": 189,\n      \"botId\": 42,\n      \"command\": \"\u002Fhelp\",\n      \"common\": true,\n      \"hidden\": false,\n      \"extranetSupport\": false\n    }\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**Удаление перевода:** передайте `null` для языкового ключа: `{ \"title\": { \"en\": null } }` — удалит английский перевод, оставив остальные.\n\n**Строковые флаги:** `common`, `hidden`, `extranetSupport` принимают строки `\"Y\"` \u002F `\"N\"` (не boolean).\n\n## Смотрите также\n\n- [Зарегистрировать команду](\u002Fdocs\u002Fbots\u002Fcommands\u002Fregister)\n- [Удалить команду](\u002Fdocs\u002Fbots\u002Fcommands\u002Fdelete)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Удалить команду\n\n`DELETE \u002Fv1\u002Fbots\u002F:botId\u002Fcommands\u002F:commandId`\n\nУдаляет зарегистрированную команду бота.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` (path) | number | да | ID бота |\n| `commandId` (path) | number | да | ID команды |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7 \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7 \\\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\u002Fcommands\u002F7', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\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\u002Fcommands\u002F7', {\n  method: 'DELETE',\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| `data.result` | boolean | `true` при успешном удалении |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"result\": true\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 (команда не найдена) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Зарегистрировать команду](\u002Fdocs\u002Fbots\u002Fcommands\u002Fregister)\n- [Список команд](\u002Fdocs\u002Fbots\u002Fcommands\u002Flist)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Ответить на команду\n\n`POST \u002Fv1\u002Fbots\u002F:botId\u002Fcommands\u002F:commandId\u002Fanswer`\n\nОтправляет ответ на вызов slash-команды. Вызывайте из обработчика события `ONIMBOTV2COMMANDADD`.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `messageId` | number | да | ID сообщения с вызовом команды (из события) |\n| `dialogId` | string | да | ID диалога. Для группового чата — `chat{chatId}`, для личного — `{userId}`. Берите из события `ONIMBOTV2COMMANDADD` (`PARAMS.DIALOG_ID`) |\n| `fields` | object | нет | Поля ответного сообщения |\n| `fields.message` | string | нет | Текст ответа. Поддерживает [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.system` | boolean | нет | Системное сообщение. По умолчанию `false` |\n| `fields.urlPreview` | boolean | нет | Показывать превью ссылок. По умолчанию `true` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7\u002Fanswer \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"messageId\": 1510,\n    \"dialogId\": \"chat123\",\n    \"fields\": {\n      \"message\": \"[b]Справка по задачам[\u002Fb]\\n\\nДоступные действия:\\n[SEND=\u002Fstatus]Проверить статус[\u002FSEND]\\n[SEND=\u002Fcreate]Создать задачу[\u002FSEND]\"\n    }\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7\u002Fanswer \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"messageId\": 1510,\n    \"dialogId\": \"chat123\",\n    \"fields\": {\n      \"message\": \"[b]Справка по задачам[\u002Fb]\\n\\nДоступные действия:\\n[SEND=\u002Fstatus]Проверить статус[\u002FSEND]\\n[SEND=\u002Fcreate]Создать задачу[\u002FSEND]\"\n    }\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fcommands\u002F7\u002Fanswer', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    messageId: 1510,\n    dialogId: 'chat123',\n    fields: {\n      message: '[b]Справка по задачам[\u002Fb]\\n\\nДоступные действия:\\n[SEND=\u002Fstatus]Проверить статус[\u002FSEND]',\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\u002Fcommands\u002F7\u002Fanswer', {\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    messageId: 1510,\n    dialogId: 'chat123',\n    fields: {\n      message: '[b]Справка по задачам[\u002Fb]\\n\\nДоступные действия:\\n[SEND=\u002Fstatus]Проверить статус[\u002FSEND]',\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\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` + `commandId`. Если бот не участник — ответ отправляется как системное сообщение с именем бота.\n\n## Смотрите также\n\n- [Зарегистрировать команду](\u002Fdocs\u002Fbots\u002Fcommands\u002Fregister)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Форматирование текста](\u002Fdocs\u002Fbots\u002Fmessages\u002Fformatting)\n- [Клавиатура](\u002Fdocs\u002Fbots\u002Fmessages\u002Fkeyboard)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n"]