# Работа c сообщениями
На каждый уведомление (запрос) сервера клиент должен ответить так:
{
"type": 2,
"id": 123456
}
После отправки ответа сообщение от пользователя будет считаться прочитанным ботом и будет отмечено соответствующей галочкой в клиентском приложении TrueConf.
# Форматирование сообщений
API чат-ботов поддерживает три типа оформления сообщений:
text
– текст без форматирования. Будут сохранены и отображены все символы;markdown
- поддерживается базовая разметка Markdown. Специальные символы преобразуются в форматированный текст (жирный, курсив, ссылки и т.д.);html
- HTML-теги будут интерпретированы и отобразятся как форматированный текст.
# Markdown
Поддерживаемый синтаксис языка разметки Markdown:
Стиль | Синтаксис | Пример | Отображаемый текст |
---|---|---|---|
Жирный | ** или __ | **жирный текст** | жирный текст |
Курсив | * или _ | _курсивный текст_ | курсивный текст |
Зачеркнутый | ~~ | ~~зачеркнутый текст~~ | |
Ссылка | [Текст](https://url) | [Сайт](https://example.com) | Сайт |
# HTML
Поддерживаемый синтаксис языка разметки HTML:
Тег | Пример HTML | Отображаемый текст |
---|---|---|
<b> | <b>жирный текст</b> | жирный текст |
<i> | <i>курсивный текст</i> | курсивный текст |
<s> | <s>зачеркнутый текст</s> | |
<u> | <u>подчеркнутый текст</u> | подчеркнутый текст |
<a> | <a href="https://example.com">Сайт</a> | Сайт |
Все дополнительные атрибуты тегов будут удалены. Например, HTML-код:
<i style="position: fixed; top:0">Hacked!</i>
будет преобразован к:
<i>Hacked!</i>
# Запросы клиента
# Отправить сообщение
Запрос:
{
"type": 1,
"id": 1,
"method": "sendMessage",
"payload": {
"chatId": "c8c3eee8-9ad0-4638-9692-ad16391a4256",
"content": {
"text": "Hello, world!",
"parseMode": "text"
}
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 1 ). Соответствует MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
method | string | Да | Команда sendMessage |
chatId | string | Да | Идентификатор чата |
replyMessageId | string | Нет | В случае если мы отвечаем на сообщение, поле должно содержать идентификатор этого сообщения (см. ниже пример) |
text | string | Да | Текст сообщения |
parseMode | string | Да | Режим форматирования (см. выше) |
Ответ:
{
"type": 2,
"id": 1,
"payload": {
"chatId": "c8c3eee8-9ad0-4638-9692-ad16391a4256",
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
"timestamp": 1735314170572
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да |
Тип сообщения (по умолчанию 2 ). Соответствует
MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа |
chatId | string | Да | Идентификатор чата, в который отправилось сообщение |
messageId | string | Да | Идентификатор сообщения. Можно использовать данный идентификатор в дальнейшем, для изменения, пересылки или удаления сообщения |
timestamp | uint64 | Да | Временная метка отправки сообщения в формате UNIX timestamp с точностью до миллисекунд |
В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode
. Список возможных значений доступен в соответствующем разделе документации.
# Ответить на сообщение
Для ответа на существующее сообщение необходимо заполнить поле replyMessageId
идентификатором сообщения, на которое мы отвечаем:
{
"type": 1,
"id": 1,
"method": "sendMessage",
"payload": {
"chatId": "c8c3eee8-9ad0-4638-9692-ad16391a4256",
"replyMessageId": "3d968a21-543c-4fb2-9d8e-e31e3fbb35eb",
"content": {
"text": "Hello, world!",
"parseMode": "text"
}
}
}
# Изменить сообщение
Запрос:
{
"type": 1,
"id": 1,
"method": "editMessage",
"payload": {
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
"content": {
"text": "Hello, world (edited)!",
"parseMode": "text"
}
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 1 ). Соответствует MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
method | string | Да | Команда editMessage |
messageId | string | Да | Идентификатор текстового сообщения |
text | string | Да | Текст сообщения |
parseMode | string | Да | Режим форматирования (см. выше) |
Ответ:
{
"type": 2,
"id": 1,
"payload": {
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
"timestamp": 1735314170572
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 2 ). Соответствует MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа |
timestamp | uint64 | Да | Временная метка редактирования сообщения в формате UNIX timestamp с точностью до миллисекунд |
messageId | string | Да | Идентификатор отредактированного сообщения |
В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode
. Список возможных значений доступен в соответствующем разделе документации.
# Переслать сообщение
Запрос:
{
"type": 1,
"id": 1,
"method": "forwardMessage",
"payload": {
"chatId": "4a1f88f1070d2f43d385cde9ff61964bc6b74477",
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06"
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да |
Тип сообщения (по умолчанию 1 ). Соответствует
MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
method | string | Да | Команда forwardMessage |
chatId | string | Да | Идентификатор чата, в который вы будете пересылать сообщение |
messageId | string | Да | Идентификатор пересылаемого сообщения |
Ответ:
{
"type": 2,
"id": 1,
"payload": {
"chatId": "4a1f88f1070d2f43d385cde9ff61964bc6b74477",
"messageId": "3e168850-d9ea-45ec-a0f7-21c43e8ba2a8",
"timestamp": 1735314170572
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да |
Тип сообщения (по умолчанию 2 ). Соответствует
MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа |
chatId | string | Да | Уникальный идентификатор чата, в который мы переслали сообщение |
messageId | string | Да | Уникальный идентификатор нового сообщения, содержащего ваше пересланное сообщение |
timestamp | uint64 | Да | Временная метка пересылки сообщения в формате UNIX timestamp с точностью до миллисекунд |
В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode
. Список возможных значений доступен в соответствующем разделе документации.
# Удалить сообщение
Запрос:
{
"type": 1,
"id": 1,
"method": "removeMessage",
"payload": {
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
"forAll": true
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 1 ). Соответствует MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
method | string | Да | Команда removeMessage |
messageId | string | Да | Идентификатор удаляемого сообщения |
forAll | boolean | Да | Если true — то сообщение будет удалено у всех |
Ответ:
{
"type": 2,
"id": 1,
"payload": {}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 2 ). Соответствует MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа |
payload | object | Да | В случае успеха вы получите пустой объект |
В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode
. Список возможных значений доступен в соответствующем разделе документации.
# Получить сообщение по ID
Запрос:
{
"type": 1,
"id": 1,
"method": "getMessageById",
"payload": {
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06"
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да |
Тип сообщения (по умолчанию 1 ). Соответствует
MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
method | string | Да | Команда getMessageById |
messageId | string | Да | Идентификатор запрашиваемого сообщения |
Ответ:
{
"type": 2,
"id": 1,
"payload": {
"chatId": "2b896a6ef210d6b2dcaebc2186c9a7974d616054",
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
"timestamp": 1234567890,
"author": {
"id": "user@video.example.com",
"type": 1
},
"replyMessageId": null,
"isEdited": true,
"box": {
"id": 123456,
"position": "0"
},
"type": 0,
"content": {
"text": "Hello, chat bot!",
"parseMode": "html"
}
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 2 ). Соответствует MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа |
chatId | string | Да | Уникальный идентификатор чата, в котором находится сообщение |
messageId | string | Да | Уникальный идентификатор сообщения |
timestamp | uint64 | Да | Временная метка отправки сообщения в формате UNIX timestamp с точностью до миллисекунд |
replyMessageId | string | Нет | Если это ответ на сообщение — содержит идентификатор этого сообщения |
isEdited | boolean | Да | Было ли сообщение когда-либо отредактировано |
payload.type | uint32 | Да | Тип вложенного сообщения. Подробнее см. EnvelopeTypeEnum |
author.id | string | Да | Уникальный идентификатор автора сообщения. Это либо TrueConf ID пользователя, либо имя сервера, с которого пришло сообщение. Тип идентификатора зависит от поля type |
author.type | uint32 | Да | Тип автора сообщения. Подробнее см. EnvelopeAuthorTypeEnum |
box.id | number | Да | Порядковый номер "коробки", в которой находится сообщение. Подробнее — в соответствующем разделе |
box.position | string | Да | Порядковый номер сообщения в "коробке". Подробнее — в соответствующем разделе |
В зависимости от значения payload.type
, объект payload.content
может содержать данные одного из следующих форматов:
# Текстовое сообщение
Используется, если сообщение содержит только текстовую информацию.
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
text | string | Да | Текст сообщения |
parseMode | string | Да | Режим форматирования (см. выше) |
# Вложение (файл)
Используется, если сообщение содержит файл (документ, изображение и т.д.).
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
name | string | Да | Имя файла |
size | number | Да | Размер файла |
mimeType | string | Да | MIME-тип файла |
fileId | string | Да | Идентификатор файла на сервере |
# Пересланное сообщение
Представляет собой вложенное сообщение, содержащее одну из описанных выше структур (text
, attachment
и т.д.) и дополнительные поля с метаинформацией. По структуре аналогично обычному сообщению: включает author
, timestamp
, content
и другие поля.
В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode
. Список возможных значений доступен в соответствующем разделе документации.
# Получить историю чата
Запрос:
{
"type": 1,
"id": 1,
"method": "getChatHistory",
"payload": {
"chatId": "4a1f88f1070d2f43d385cde9ff61964bc6b74477",
"count": 9999,
"fromMessageId": "e37cfc52-592f-453f-a3dd-275170b2018d"
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 1 ). Соответствует MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
method | string | Да | Команда getChatHistory |
chatId | string | Да | Идентификатор чата, для которого запрашивается история сообщений |
count | uint32 | Да | Количество возвращаемых в ответе сообщений |
fromMessageId | string | Нет | Идентификатор сообщения чата, с которого будет возвращена история |
Ответ:
{
"type": 2,
"id": 1,
"payload": {
"chatId": "4a1f88f1070d2f43d385cde9ff61964bc6b74477",
"count": 1,
"messages": [
{
"messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
"timestamp": 1234567890,
"author": {
"id": "user@video.example.com",
"type": 1
},
"replyMessageId": null,
"isEdited": true,
"box": {
"id": 123456,
"position": ""
},
"type": 0,
"content": {
"text": "Hello, chat bot!",
"parseMode": "html"
}
}
]
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 2 ). Соответствует MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа |
chatId | string | Да | Идентификатор чата, для которого запрашивалась история сообщений |
count | uint32 | Да | Количество полученных сообщений |
messages | Array<Envelope> | Нет | Массив объектов Envelope , каждый из которых представляет одно сообщение. Описание параметров смотрите выше |
В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode
. Список возможных значений доступен в соответствующем разделе документации.
# Уведомления сервера
# Новое сообщение
Сообщение от сервера:
{
"method": "sendMessage",
"type": 1,
"id": 11,
"payload": {
"chatId": "bd05af54347e04a1c44e70033d35834d4428bb5d",
"messageId": "d66254de-9d89-4130-8027-c5378f042800",
"timestamp": 1746029007569,
"author": {
"id": "brown@video.example.com",
"type": 1
},
"isEdited": false,
"box": {
"id": 4,
"position": "0"
},
"type": 200,
"content": {
"text": "Текст",
"parseMode": "html"
}
}
}
Уведомление о новом сообщении содержит поля, соответствующие объекту Envelope. Подробное описание этих полей вы найдёте в разделе посвящённом работе с сообщениями.
Ответ от клиента:
{
"type": 2,
"id": 123456
}
Поле | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 2 ). Соответствует MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор сообщения, на которое дается ответ (см. подробнее) |
# Сообщение было изменено
Сообщение от сервера:
{
"method": "editMessage",
"type": 1,
"id": 12,
"payload": {
"messageId": "d4d20b4f-e4a4-4abc-8e66-ff2e17f483b7",
"timestamp": 1746029430000,
"content": {
"text": "🤝",
"parseMode": "text"
}
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
method | string | Да | Команда editMessage |
type | uint32 | Да |
Тип сообщения (по умолчанию 1 ). Соответствует
MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
messageId | string | Да | Идентификатор измененного сообщения. Можно использовать данный идентификатор в дальнейшем для копирования, пересылки или удаления сообщения |
timestamp | uint64 | Да | Временная метка изменения сообщения в формате UNIX timestamp с точностью до миллисекунд |
text | string | Да | Текст измененного сообщения |
parseMode | string | Да | Режим форматирования (см. подробнее) |
Ответ от клиента:
{
"type": 2,
"id": 123456
}
Поле | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 2 ). Соответствует MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор сообщения, на которое дается ответ (см. подробнее) |
# Сообщение было удалено
Сообщение от сервера:
{
"method": "removeMessage",
"type": 1,
"id": 12,
"payload": {
"chatId": "bd05af54347e04a1c44e70033d35834d4428bb5d",
"messageId": "d4d20b4f-e4a4-4abc-8e66-ff2e17f483b7",
"removedBy": {
"id": "brown@video.example.com",
"type": 1
}
}
}
Параметр | Тип | Обяз. | Описание |
---|---|---|---|
method | string | Да | Команда removeMessage |
type | uint32 | Да |
Тип сообщения (по умолчанию 1 ). Соответствует
MESSAGE_TYPE.REQUEST |
id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
chatId | string | Да | Идентификатор чата, где было удалено сообщение |
messageId | string | Да | Идентификатор удаленного сообщения. Можно использовать данный идентификатор в дальнейшем для копирования, пересылки или удаления сообщения |
removedBy.id | string | Да |
Уникальный идентификатор пользователя, удалившего сообщение. Это либо TrueConf ID, либо имя сервера, с которого пришло сообщение.
Тип идентификатора зависит от поля removedBy.type |
removedBy.type | uint32 | Да | Тип пользователя, который удалил сообщение. Подробнее см. EnvelopeAuthorTypeEnum |
Ответ от клиента:
{
"type": 2,
"id": 123456
}
Поле | Тип | Обяз. | Описание |
---|---|---|---|
type | uint32 | Да | Тип сообщения (по умолчанию 2 ). Соответствует MESSAGE_TYPE.RESPONSE |
id | uint32 | Да | Идентификатор сообщения, на которое дается ответ (см. подробнее) |