Для AI-агентов: markdown этой страницы — /docs-content/bots/management/create.md индекс документации — /llms.txt
Зарегистрировать бота
POST /v1/bots
Регистрирует нового бота на портале Битрикс24. Операция идемпотентна по code — повторный вызов с тем же кодом вернёт 409 BOT_ALREADY_EXISTS с данными существующего бота.
Поля запроса (body)
| Параметр | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|
code |
string | да | — | Уникальный код бота (латиница, цифры, подчёркивание) |
name |
string | да | — | Отображаемое имя бота |
type |
string | нет | bot |
Тип бота: bot, personal, supervisor, openline. Нельзя изменить после регистрации. От типа зависит доступ к чтению сообщений |
eventMode |
string | нет | fetch |
Режим событий: fetch (опрос) или webhook (доставка на ваш адрес) |
webhookUrl |
string | нет | — | URL для доставки событий (только при eventMode: "webhook") |
lastName |
string | нет | — | Фамилия бота |
workPosition |
string | нет | — | Должность бота (отображается под именем) |
color |
string | нет | — | Цвет аватара: RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK, LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE |
gender |
string | нет | — | Пол: M или F |
avatar |
string | нет | — | Аватар бота: PNG или JPEG как base64-строка без префикса data:image/...;base64,, до ~50 КБ. См. «Формат аватара» в «Известных особенностях» |
isHidden |
boolean | нет | false |
Скрыть бота из списка контактов |
isReactionsEnabled |
boolean | нет | true |
Разрешить реакции на сообщения бота |
backgroundId |
string | нет | — | Фон чата: azure, mint, steel, slate, teal, cornflower, sky, peach, frost |
isSupportOpenline |
boolean | нет | false |
Поддержка открытых линий (только для type: "openline") |
Типы ботов
| Тип | Описание |
|---|---|
bot |
Стандартный бот — реагирует на @упоминание и личные сообщения |
personal |
AI-ассистент — получает все сообщения без @упоминания. Доступны GET /v1/bots/:botId/messages/:messageId и GET /v1/bots/:botId/messages/:messageId/context |
supervisor |
Системный наблюдатель — получает все сообщения в чатах, где состоит |
openline |
Бот для открытых линий. Требует isSupportOpenline: true |
⚠
personalиsupervisor— привилегированные типы: они получают все сообщения в чатах, где состоят, даже без @упоминания бота. Используйте их осознанно.
Регистрация бота выполняется от лица администратора портала Битрикс24 — независимо от типа. Владельцу ключа без этой роли Битрикс24 отвечает отказом в доступе, даже когда скоуп imbot у ключа есть.
Доступные цвета
Используются в параметре color при создании и обновлении бота:
RED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK,
LIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE
Примеры
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/bots \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"code": "support_bot",
"name": "Техподдержка",
"type": "bot",
"eventMode": "fetch",
"color": "AZURE",
"workPosition": "Помощник по техническим вопросам"
}'
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/bots \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"code": "support_bot",
"name": "Техподдержка",
"type": "bot",
"eventMode": "fetch",
"color": "AZURE",
"workPosition": "Помощник по техническим вопросам"
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/bots', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
code: 'support_bot',
name: 'Техподдержка',
type: 'bot',
eventMode: 'fetch',
color: 'AZURE',
workPosition: 'Помощник по техническим вопросам',
}),
})
const { success, data } = await res.json()
// `data.botId` зеркалит ответ 409 BOT_ALREADY_EXISTS — один и тот же путь для
// success и conflict. `data.bot.id` оставлен для обратной совместимости.
console.log('Bot ID:', data.botId)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/bots', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
code: 'support_bot',
name: 'Техподдержка',
type: 'bot',
eventMode: 'fetch',
color: 'AZURE',
workPosition: 'Помощник по техническим вопросам',
}),
})
const { success, data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
botId |
number | ID бота на портале Битрикс24. Зеркалит data.botId из 409-ответа — один и тот же путь при успехе и при конфликте |
bot.id |
number | Дубликат botId для обратной совместимости. ID бота на портале Битрикс24 |
bot.code |
string | Уникальный код бота |
bot.type |
string | Тип бота |
bot.eventMode |
string | Режим событий: fetch или webhook |
bot.isHidden |
boolean | Скрыт из списка контактов |
bot.isReactionsEnabled |
boolean | Разрешены реакции |
users |
array | Массив пользователей Битрикс24, созданных для бота |
users[].id |
number | Идентификатор пользователя-бота на портале. Совпадает с botId |
users[].name |
string | Отображаемое имя бота — то, что видят участники чата |
users[].workPosition |
string | Должность под именем бота |
users[].active |
boolean | Активен ли пользователь-бот |
users[].bot |
boolean | Признак бота, всегда true |
Пример ответа
{
"success": true,
"data": {
"botId": 42,
"bot": {
"id": 42,
"code": "support_bot",
"type": "bot",
"eventMode": "fetch",
"isHidden": false,
"isReactionsEnabled": true
},
"users": [
{
"id": 42,
"name": "Техподдержка",
"active": true,
"bot": true
}
]
}
}
Пример ответа при ошибке
409 — бот с таким кодом уже существует:
{
"success": false,
"error": {
"code": "BOT_ALREADY_EXISTS",
"message": "Bot with this code already exists"
},
"data": {
"botId": 42,
"code": "support_bot",
"name": "Техподдержка"
}
}
В поле data возвращаются botId, code и name уже зарегистрированного бота — это идемпотентный путь восстановления записи в базе Вайбкод после рассинхронизации. Если бота с этим botId нет в GET /v1/bots вашим ключом, он зарегистрирован другим ключом портала: порядок возврата управления — Восстановление доступа к боту.
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | CODE_REQUIRED |
Не передан параметр code |
| 400 | NAME_REQUIRED |
Не передан параметр name |
| 409 | BOT_ALREADY_EXISTS |
Бот с таким code уже зарегистрирован. Ответ содержит data с botId |
| 422 | BITRIX_ERROR |
Битрикс24 вернул ошибку при регистрации (текст ошибки в message) |
| 502 | REGISTRATION_FAILED |
Битрикс24 не вернул ID бота |
| 403 | SCOPE_DENIED |
API-ключ не имеет скоупа imbot |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ в режиме «только чтение» |
| 401 | TOKEN_MISSING |
API-ключ не имеет настроенных токенов |
Полный список общих ошибок API — Ошибки.
Известные особенности
Восстановление при рассинхронизации: если бот существует на портале Битрикс24, но отсутствует в базе Вайбкод (после сбоя), повторный POST с тем же code восстановит запись в базе.
Формат тела запроса отличается от PATCH: при создании поля передаются плоско (code, name, color). При обновлении — вложенная структура { fields: { properties: { name, color } } }.
Формат аватара. Поле avatar принимает изображение PNG или JPEG в виде base64-строки без префикса data:image/...;base64, — передавайте только сами base64-данные. URL изображения или строка с префиксом data: приводят к ответу 422 BITRIX_ERROR. Размер — до ~50 КБ: при превышении запрос завершается успешно, но аватар не сохраняется и остаётся пустым.
Идемпотентность по code: повторный запрос безопасен, когда бот с таким кодом уже есть и в базе Вайбкод, и на портале Битрикс24. Подходит для перезапуска скриптов и проверки факта регистрации без раздельной обработки успеха и конфликта.
Жизненный цикл бота. Бот существует ровно столько, сколько существует локальное приложение, через которое он зарегистрирован. Удаление приложения с портала удаляет и бота.
Операции с ботом — тем же ключом. Бот привязан к API-ключу, которым зарегистрирован. Получение событий, отправка сообщений и обновление выполняются тем же ключом — запрос с другого ключа вернёт 403 BOT_ACCESS_DENIED. Если рабочим остался другой ключ — Восстановление доступа к боту.
Режим webhook требует публичного webhookUrl. При eventMode: "webhook" Битрикс24 отправляет события напрямую на webhookUrl, поэтому адрес должен быть публично достижим. Если webhookUrl ведёт на сервер Black Hole с личным ключом vibe_api_…, событие принимает только политика доступа PUBLIC — при OWNER_ONLY (по умолчанию), NAMED_USERS, DEPARTMENT, PORTAL и AUTHENTICATED оно до приложения не доходит, и такому серверу подойдёт eventMode: "fetch". Сервер, ключ которого привязан к OAuth-приложению, принимает события при любой политике. Подробности и решения — в разделе Диагностика проблем.