Для AI-агентов: markdown этой страницы — /docs-content/chats/messages/update.md индекс документации — /llms.txt
Редактировать сообщение
PATCH /v1/chats/:dialogId/messages/:messageId
Обновляет текст ранее отправленного сообщения. Восстановить исходный текст после редактирования через API нельзя — создавайте новое сообщение при необходимости.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
dialogId (path) |
string | да | Идентификатор диалога: числовой ID пользователя или chatXXX для групповых. chatXXX — поле id строки последних диалогов, ID пользователя — из списка пользователей |
messageId (path) |
number | да | ID сообщения — из ответа отправки или поле id сообщения ленты чата |
format (query) |
string | нет | v2 включает режим v2 — см. «Режим v2» ниже. Любое другое значение игнорируется, ответ прежний. Повтор format не отклоняется: из format=v1&format=v2 берётся последнее значение, то есть режим v2, а format=v2&format=v1 даёт прежний ответ. Форма format[]=v2 включает режим v2, если все её значения — v2 |
Режим v2. format=v2 правит сообщение: кроме текста меняются блоки attach, keyboard, menu, block — вместе с текстом или без него, — а urlPreview включает и выключает превью ссылки. В data приходит { "result": true } вместо true. Без message текст остаётся прежним. Правка, которая могла бы стать удалением, отклоняется до обращения к порталу, как и в обычном режиме: текст, пустой по правилу Битрикс24, — 400 MESSAGE_REQUIRED. Снятие блока ([], {} или "") без нового текста в том же запросе — 400 INVALID_PARAMS, потому что сообщение без текста и блоков было бы удалено, а есть ли у сообщения текст, платформа не видит. Нужно хотя бы одно из полей message, attach, keyboard, menu, block. message в режиме v2 — только строка. Любое другое поле тела и параметры строки запроса кроме format отклоняются с 400 INVALID_PARAMS, botId — с адресом правки от бота. Сообщение должно принадлежать диалогу из пути: после проверки входа платформа читает этот диалог, не вступая в чат, и, если сообщения в нём нет, отвечает 404 ENTITY_NOT_FOUND, ничего не меняя. Алиас me определяется до этой проверки. Обычный режим dialogId не проверяет.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
message |
string | да | Новый текст сообщения (до 20 000 символов). В режиме v2 необязателен, если передан блок |
attach |
array|object|string | нет | Только режим v2: новые вложения — объект, массив или строка с JSON вложения. [], {} или "" снимают их — только вместе с message |
keyboard |
array|object|string | нет | Только режим v2: новая клавиатура — объект или массив. Пустое значение ([], {} или "" — строка принимается только пустая) снимает её — только вместе с message |
menu |
array|object|string | нет | Только режим v2: новое контекстное меню — объект или массив. Пустое значение ([], {} или "" — строка принимается только пустая) снимает его — только вместе с message |
block |
array|object|string | нет | Только режим v2: новые блоки сообщения в формате Битрикс24 — объект с elements (у каждого элемента свой type) и необязательным config. Пустое значение ([], {} или "" — строка принимается только пустая) снимает их — только вместе с message |
urlPreview |
boolean | нет | Только режим v2. По умолчанию включено: каждая правка строит превью ссылки заново по тексту — новому, а без него по текущему, — в том числе после удаления превью. false оставляет сообщение без превью. true/false или "Y"/"N" |
Оформление сообщения
- Форматирование текста — BB-коды в тексте сообщения
Примеры
curl — личный ключ
curl -X PATCH https://vibecode.bitrix24.tech/v1/chats/42/messages/36889 \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Счёт подтверждён. Спасибо."
}'
curl — OAuth-приложение
curl -X PATCH https://vibecode.bitrix24.tech/v1/chats/42/messages/36889 \
-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/36889', {
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'Счёт подтверждён. Спасибо.',
}),
})
const { success, data } = await res.json()
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/chats/42/messages/36889', {
method: 'PATCH',
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()
curl — режим v2
curl -X PATCH "https://vibecode.bitrix24.tech/v1/chats/42/messages/36889?format=v2" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"keyboard": [{ "TEXT": "Открыть счёт", "LINK": "https://example.com/invoice" }]
}'
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
boolean | true при успешном обновлении |
data.result |
boolean | Режим v2: true при успешном обновлении |
Пример ответа
{
"success": true,
"data": true
}
Пример ответа при ошибке
422 — сообщение не найдено, время на изменение истекло или нет прав:
{
"success": false,
"error": {
"code": "BITRIX_ERROR",
"message": "Time has expired for modification or you don't have access",
"b24Code": "CANT_EDIT_MESSAGE"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_PARAMS |
messageId не является положительным целым числом — проверяется до обращения в Битрикс24 |
| 400 | MESSAGE_REQUIRED |
Поле message отсутствует, не является текстом или пусто по правилу самого Битрикс24 — одни пробелы, теги переноса [BR]/[br] или нулевой символ (NUL) (в том числе текст прислан под другим именем поля — оно будет названо в message). В Битрикс24 ничего не отправлено |
| 422 | BITRIX_ERROR |
Битрикс24 вернул ошибку — сообщение не найдено или недоступно (подробности в message). Код портала — в error.b24Code |
| 400 | INVALID_PARAMS |
Только режим v2: нечего обновлять, снятие блока без message, поле тела вне списка, параметр строки запроса кроме format или некорректное значение |
| 404 | ENTITY_NOT_FOUND |
Только режим v2: сообщения нет в диалоге из пути (сообщение другого диалога или несуществующее) — ничего не изменено |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ только для чтения — см. права доступа |
| 403 | SCOPE_DENIED |
Ключ не имеет скоупа im |
| 401 | TOKEN_MISSING |
Ключ не имеет настроенных токенов |
| 502 | ME_ALIAS_RESOLUTION_FAILED |
Только режим v2: не удалось определить пользователя для алиаса me |
Полный список общих ошибок API — Ошибки.
Известные особенности
Пустой текст — не обновление. Текст, пустой по правилу Битрикс24, удалил бы сообщение, поэтому такой запрос отклоняется до обращения к порталу — см. MESSAGE_REQUIRED в таблице ошибок. Удалить сообщение — DELETE /v1/chats/:dialogId/messages/:messageId. Число в message принимается и записывается как текст.
В Битрикс24 уходит только message. В обычном режиме другие поля тела запроса не передаются на портал — в том числе собственные ключи Битрикс24 в верхнем регистре. В режиме v2 уходят поля из таблицы, остальные отклоняются. Портал сравнивает имена параметров без учёта регистра, и действует последний ключ: алиас вроде Message: "" рядом с MESSAGE удалял бы сообщение.
Системные сообщения нельзя редактировать. Сообщения, отправленные с system: true, имеют authorId = 0. Изменить их нельзя — в ответе вернётся ошибка.
Правка без изменений. В режиме v2 даже правка, которая ничего не меняет, может пометить сообщение отредактированным, если его уже видели другие участники.