Для AI-агентов: markdown этой страницы — /docs-content/chats/messages/send.md индекс документации — /llms.txt
Отправить сообщение
POST /v1/chats/:dialogId/messages
Отправляет текстовое сообщение в указанный диалог. Текст поддерживает BB-коды для форматирования, к сообщению можно прикрепить клавиатуру и вложения.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
dialogId (path) |
string | да | Идентификатор диалога. Числовой ID пользователя для личных сообщений, список — GET /v1/users. chatXXX — для групповых чатов. Принимает значение me — см. ниже |
format (query) |
string | нет | v2 включает режим v2 — см. «Режим v2» ниже. Любое другое значение игнорируется, ответ прежний. Повтор format не отклоняется: из format=v1&format=v2 берётся последнее значение, то есть режим v2, а format=v2&format=v1 даёт прежний ответ. Форма format[]=v2 включает режим v2, если все её значения — v2 |
Алиас me. Вместо числового ID пользователя можно передать строку me: диалог откроется с текущим владельцем ключа. Подробнее — Чаты и сообщения.
Режим v2. format=v2 отправляет сообщение. Тело остаётся плоским — теми же полями, что ниже, — а в data вместо числа приходит объект { id, uuidMap, failureMap }. Режим принимает только поля из таблицы ниже, в том числе отмеченные «только режим v2». Любое другое поле тела, формы в верхнем регистре (MESSAGE, REPLY_ID) и параметры строки запроса кроме format отклоняются с 400 INVALID_PARAMS, поле называется по имени, значение не повторяется. message в режиме v2 — только строка. Сообщение должно что-то содержать: непустой текст. Текст из одних пробелов — только вместе с непустым attach. Без message — непустой attach, stickerParams или block. Иначе — 400 MESSAGE_REQUIRED до обращения к порталу. Пересылка идёт через POST /v1/chats/:dialogId/forward: поле forwardIds в режиме v2 отклоняется с этим адресом, botId — с адресом отправки от бота.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
message |
string | нет | Текст сообщения (до 20 000 символов). Поддерживает BB-коды. Можно не передавать, если передан непустой attach, keyboard или menu, в режиме v2 — непустой attach, stickerParams или block |
attach |
array | нет | Вложения: карточки, таблицы, изображения, файлы, разделители |
keyboard |
array | нет | Интерактивные кнопки под сообщением |
menu |
array | нет | Пункты контекстного меню сообщения |
replyId |
number | нет | ID цитируемого сообщения |
system |
boolean | нет | При true — системный стиль (без аватара, authorId = 0) |
urlPreview |
boolean | нет | При false отключает предпросмотр ссылок в тексте |
skipConnector |
boolean | нет | Только режим v2: не передавать сообщение в коннектор открытой линии. true/false или "Y"/"N" |
silentConnector |
boolean | нет | Только режим v2: передать в коннектор открытой линии без уведомления клиента. true/false или "Y"/"N" |
templateId |
string | нет | Только режим v2: ваш идентификатор сообщения, от 1 до 255 символов. Длиннее — 400, а не обрезка |
stickerParams |
object | нет | Только режим v2: стикер. Без любого из трёх полей ниже портал отклоняет отправку с 422 BITRIX_ERROR, b24Code — STICKER_SENDING_ERROR |
stickerParams.id |
number | да | ID стикера — поле data.stickers[].id списка наборов стикеров. Обязательно, если передан stickerParams |
stickerParams.packId |
number | да | ID набора стикера — поле data.stickers[].packId списка наборов стикеров. Обязательно, если передан stickerParams |
stickerParams.packType |
string | да | Вид набора: vendor — встроенный, custom — набор пользователя. Поле data.stickers[].packType списка наборов стикеров. Обязательно, если передан stickerParams |
block |
object|array | нет | Только режим v2: блоки сообщения в формате Битрикс24. Портал проверяет их и строит из них текст |
copilot |
object | нет | Только режим v2: параметры BitrixGPT для сообщения, передаются как есть |
aiAssistant |
object | нет | Только режим v2: параметры AI-ассистента для сообщения, передаются как есть |
Оформление сообщения
- Форматирование текста — BB-коды: жирный, курсив, ссылки, цвет
- Клавиатура — интерактивные кнопки под сообщением
- Вложения — карточки, таблицы, изображения, файлы
Примеры
В примерах dialogId равен 42 — числовой ID сотрудника-получателя.
curl — личный ключ
curl -X POST https://vibecode.bitrix24.tech/v1/chats/42/messages \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Счёт выставлен. Ожидайте подтверждения."
}'
curl — OAuth-приложение
curl -X POST https://vibecode.bitrix24.tech/v1/chats/42/messages \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"message": "Счёт выставлен. Ожидайте подтверждения."
}'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/42/messages', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'Счёт выставлен. Ожидайте подтверждения.',
}),
})
const { success, data } = await res.json()
console.log('ID сообщения:', data)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/42/messages', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'Счёт выставлен. Ожидайте подтверждения.',
}),
})
const { success, data } = await res.json()
console.log('ID сообщения:', data)
curl — режим v2
curl -X POST "https://vibecode.bitrix24.tech/v1/chats/42/messages?format=v2" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Счёт выставлен. Ожидайте подтверждения.",
"urlPreview": false
}'
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
number | ID созданного сообщения |
data.id |
number | Режим v2: ID созданного сообщения |
data.uuidMap |
array|object | Режим v2: соответствие идентификаторов пересылки и сообщений. При обычной отправке пустое |
data.failureMap |
array|object | Режим v2: неудачи пересылки. При обычной отправке пустое |
Пример ответа
Обычный режим:
{
"success": true,
"data": 36889
}
Режим v2 — format=v2:
{
"success": true,
"data": {
"id": 36889,
"uuidMap": [],
"failureMap": []
}
}
Пример ответа при ошибке
400 — не передан текст сообщения:
{
"success": false,
"error": {
"code": "MESSAGE_REQUIRED",
"message": "Message is empty. Put the message text in the \"message\" field (or send an \"attach\" block)."
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | MESSAGE_REQUIRED |
Поле message пустое и нет непустого attach, keyboard или menu. Одна из причин — текст передан под неизвестным именем поля, например text. message перечисляет нераспознанные поля. В режиме v2 — по правилу из абзаца «Режим v2» |
| 400 | INVALID_PARAMS |
Только режим v2: поле тела вне списка, параметр строки запроса кроме format или некорректное значение. Проверяется до обращения к Битрикс24 |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ только для чтения — см. права доступа |
| 404 | ENTITY_NOT_FOUND |
Битрикс24 вернул «не найдено». Код портала в error.b24Code — только в режиме v2 |
| 422 | BITRIX_ERROR |
Битрикс24 вернул ошибку — диалог не найден или недоступен (подробности в message). Код портала — в error.b24Code |
| 502 | ME_ALIAS_RESOLUTION_FAILED |
dialogId=me — не удалось определить ID текущего пользователя |
| 403 | BITRIX_ACCESS_DENIED |
Только режим v2: у пользователя нет доступа к чату — Битрикс24 отказал с кодом ACCESS_DENIED |
| 403 | SCOPE_DENIED |
Ключ не имеет скоупа im |
| 401 | TOKEN_MISSING |
Ключ не имеет настроенных токенов |
Полный список общих ошибок API — Ошибки.
Известные особенности
Обрезка длинного текста. Текст длиннее 20 000 символов обрезается до 20 000, в конец добавляется (...).
Код отказа портала. Код отказа Битрикс24 приходит в error.b24Code. В ответе 404 ENTITY_NOT_FOUND это поле есть только в режиме v2.