25.03.2026 15:10

Add

[POST] .../v1/chatmessage/add

Добавляет сообщение в чат.

Входные параметры

Название Тип данных Обязательность Описание
chat_id String Обязательный UUID чата
reply_id String Необязательный UUID сообщения, на которое отправляем ответ
replay_text String Необязательный Текст сообщения, на которое отправляем ответ
author_entity_type Enum Необязательный Тип автора сообщения
author_entity_id Int64 Необязательный ID автора сообщения
message_type Enum Необязательный Тип сообщения (Regular, Private, System)
text String Необязательный Текст сообщения. Должен быть указан text или file_ids
file_ids Array of Int64 Необязательный Массив ID файлов. Должен быть указан text или file_ids
external_message_id String Необязательный Внешний ID сообщения

Ограничения и проверки

  • chat_id обязателен и должен быть корректным UUID существующего чата.
  • Метод доступен только пользователю, у которого есть доступ к чату.
  • Для обычных чатов проверяется право chat_message_add (685).
  • Для чатов, связанных с Lead/Deal/Ticket/Task, право записи наследуется от сущности: требуется Edit у связанной сущности (заменяет права chat_message_*).
  • author_entity_type и author_entity_id передаются только парой.
  • Если передан reply_id, API пытается найти исходное сообщение в этом же чате:
    • если сообщение найдено, сохраняется reply-связь;
    • если replay_text не передан, он автоматически заполняется из text исходного сообщения;
    • если сообщение не найдено (или reply_id невалиден), сообщение все равно добавляется, но без reply_id и replay_text.
  • Если автор не задан, используется текущий пользователь (User, current_user_id).
  • Значения автора, отличные от User/current_user_id, можно передавать только при праве chat_manage_all, кроме ChatBot.
  • Для custom-автора ChatBot не требуется chat_manage_all, но бот должен быть участником чата с ролью Bot.
  • Если message_type не передан, используется значение Regular.
  • Для message_type = Private отправитель должен иметь роль Staff в чате; для автора ChatBot приватная отправка разрешена при его участии в чате.
  • Для message_type = System требуется право chat_manage_all (688).
  • Если чат закрыт (closed = true), отправка Regular и Private отклоняется с ошибкой 1220.
  • Для закрытого чата разрешена отправка только message_type = System.
  • Для чатов, связанных с Lead/Deal/Ticket/Task, при закрытой связанной сущности отправка Regular и Private отклоняется с ошибкой 1220.
  • Для чатов, связанных с Lead/Deal/Ticket/Task, при закрытой связанной сущности разрешена отправка только message_type = System.
  • Для message_type = System поля author_entity_type и author_entity_id в самой записи сообщения не заполняются (null).
  • Для message_type = System сервер принудительно формирует action_code = StaffNoticeAdded и action_payload в формате { "author_entity_type": "...", "author_entity_id": long, "author_name": string, "author_photo_url": string?, "text": "..." }.
  • Для message_type = System поле text обязательно, file_ids не допускается.
  • Нужно передать как минимум одно из полей: text или file_ids.
  • При повторной отправке с тем же external_message_id в рамках того же чата API возвращает уже существующее сообщение (идемпотентность).
  • Поле event_id для обратной совместимости игнорируется.
  • Текст сообщения проходит серверную нормализацию markdown: поддерживаются только bold, italic, underline, strike, link, pre.
  • Все HTML-теги и неподдерживаемое форматирование удаляются из текста.
  • Каждый входной file_id проверяется на существование и доступность вызывающему пользователю.
  • Если входной файл уже лежит в системной папке текущего чата и имеет access_level = system, он используется как есть.
  • Если входной файл находится в другой папке или имеет другой access_level, сервер создает его копию в папке текущего чата с access_level = system.
  • В сообщении сохраняются итоговые file_id чатовых system-файлов, а не исходные file_id, если для них была создана копия.

Пример запроса

{
  "chat_id": "6f6fdb2f-7d0b-4c34-b6fd-1fbcf40d37ef",
  "message_type": "Regular",
  "text": "Добрый день",
  "file_ids": [
    101,
    102
  ],
  "external_message_id": "msg-15001"
}

Выходные параметры

Название Тип данных Описание
result.new_uuid String UUID созданного сообщения

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

{
  "ok": true,
  "result": {
    "new_uuid": "9beec41f-6ef5-4e87-b4ea-05895cff2c54"
  }
}