Для 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"

Оформление сообщения

Примеры

curl — личный ключ

Terminal
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-приложение

Terminal
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 — личный ключ

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-приложение

javascript
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

Terminal
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 при успешном обновлении

Пример ответа

JSON
{
  "success": true,
  "data": true
}

Пример ответа при ошибке

422 — сообщение не найдено, время на изменение истекло или нет прав:

JSON
{
  "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 даже правка, которая ничего не меняет, может пометить сообщение отредактированным, если его уже видели другие участники.

Смотрите также