Работа c сообщениями
Работа c сообщениями
На каждый уведомление (запрос) сервера клиент должен ответить так:
{
"type": 2,
"id": 123456
}После отправки ответа сообщение от пользователя будет считаться прочитанным ботом и будет отмечено соответствующей галочкой в клиентском приложении TrueConf.
Запросы клиента
Отправить сообщение
Запрос:
{
"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 | Да | Идентификатор запрашиваемого сообщения |
Ответ:
{
"id": 2,
"type": 2,
"payload": {
"chat": {
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"chatTitle": "Коллеги",
"chatType": 2
},
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"messageId": "85c4005b-25d7-407a-8b1c-c6a74cc993ca",
"timestamp": 1790634261078,
"author": {
"id": "danilov@video.example.net",
"type": 1
},
"replyMessage": {
"chat": {
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"chatTitle": "Коллеги",
"chatType": 2
},
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"messageId": "eaa7a0ef-cbb7-46f1-ba80-b17e7eab80a7",
"timestamp": 1790343824882,
"author": {
"id": "danilov@video.example.net",
"type": 1
},
"replyMessageId": "e0938239-5638-42ef-aeed-31d36f04743d",
"box": {
"id": 9,
"position": "0"
},
"type": 200,
"content": {
"text": "<quote class=\"reply\">корпоратив</quote><br><br><b>Уважаемые </b><b><i>коллеги</i></b><b>!</b> Напоминаем <u>подробности</u> по ссылке: <a href=\"https://example.com\">сайт</a>. Все вопросы к <a href=\"https://ceo.example.com\">руководству</a>!",
"parseMode": "html"
},
"isEdited": false
},
"replyMessageId": "eaa7a0ef-cbb7-46f1-ba80-b17e7eab80a7",
"box": {
"id": 11,
"position": "0"
},
"type": 200,
"content": {
"text": "ответ коллегам",
"parseMode": "html"
},
"isEdited": true
}
}Ответ содержит объект Envelope в поле payload. Описание полей и примеры для различных типов сообщений вы найдёте в разделе «Справочник API».
В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode. Список возможных значений доступен в соответствующем разделе документации.
Уведомления сервера
Новое сообщение
Сообщение с типом 200 является текстовым. Поле content содержит текст сообщения, а параметр parseMode определяет способ его интерпретации – HTML.
Сообщение от сервера:
{
"method": "sendMessage",
"type": 1,
"id": 5,
"payload": {
"chat": {
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"chatTitle": "Коллеги",
"chatType": 2
},
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"messageId": "c0ed3cc2-eccf-4e4f-9b0a-a242794d3ff3",
"timestamp": 1790634293677,
"author": {
"id": "danilov@video.example.net",
"type": 1
},
"box": {
"id": 12,
"position": "0"
},
"type": 200,
"content": {
"text": "Привет!",
"parseMode": "html"
},
"isEdited": false
}
}Уведомление о новом сообщении содержит поля объекта Envelope. Описание полей и примеры для различных типов сообщений вы найдёте в разделе «Справочник API».
Ответ от клиента:
{
"type": 2,
"id": 123456
}| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
| type | uint32 | Да | Тип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE |
| id | uint32 | Да | Идентификатор сообщения, на которое дается ответ (см. подробнее) |
Ответ на сообщение
При ответе (reply) на сообщение вы получите payload c объектом replyMessage (начиная с 5.5.6+) и параметром replyMessageId.
Сообщение от сервера:
{
"method": "sendMessage",
"type": 1,
"id": 2,
"payload": {
"chat": {
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"chatTitle": "Коллеги",
"chatType": 2
},
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"messageId": "85c4005b-25d7-407a-8b1c-c6a74cc993ca",
"timestamp": 1790633677798,
"author": {
"id": "danilov@video.example.net",
"type": 1
},
"replyMessage": {
"chat": {
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"chatTitle": "Коллеги",
"chatType": 2
},
"chatId": "db445c1cf948976c98fd71633d968697fcab9d2f",
"messageId": "eaa7a0ef-cbb7-46f1-ba80-b17e7eab80a7",
"timestamp": 1790343824882,
"author": {
"id": "danilov@video.example.net",
"type": 1
},
"replyMessageId": "e0938239-5638-42ef-aeed-31d36f04743d",
"box": {
"id": 9,
"position": "0"
},
"type": 200,
"content": {
"text": "Оригинальное сообщение (на которое отвечают)",
"parseMode": "html"
},
"isEdited": false
},
"replyMessageId": "eaa7a0ef-cbb7-46f1-ba80-b17e7eab80a7",
"box": {
"id": 10,
"position": "0"
},
"type": 200,
"content": {
"text": "Ответ на сообщение",
"parseMode": "html"
},
"isEdited": false
}
}Уведомление о новом сообщении содержит поля объекта Envelope. Описание полей и примеры для различных типов сообщений вы найдёте в разделе «Справочник API».
Ответ от клиента:
{
"type": 2,
"id": 123456
}| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
| type | uint32 | Да | Тип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE |
| id | uint32 | Да | Идентификатор сообщения, на которое дается ответ (см. подробнее) |
Пересланное сообщение
Сообщение c типом 201 идентифицируется как пересланное. Особенностью контента пересылаемого сообщения является то, что он в качестве контента содержит объект пересылаемого сообщения (Envelope), за исключением данных в поле "box".
Теоретически, цепочка вложенности пересылаемых сообщений может быть бесконечной, но на текущий момент вложенность составляет одно сообщение (Envelope).
В поле content передается объект исходного сообщения.
Сообщение от сервера:
{
"method": "sendMessage",
"type": 1,
"id": 8,
"payload": {
"chatId": "d0b99ed24d6fb440a99fb12c4face5e5b28c3863",
"messageId": "b5feca9f-460b-43a4-8ae0-5f908544b16b",
"timestamp": 1776460454738,
"author": {
"id": "echo_bot@video.example.net",
"type": 1
},
"isEdited": false,
"box": {
"id": 14,
"position": "0"
},
"type": 201,
"content": {
"chat": {
"chatType": 2,
"chatTitle": "Групповой чат",
"chatId": "e2cf0a56f8f8e4d263fec8536ea7b63c946939d9"
},
"chatId": "e2cf0a56f8f8e4d263fec8536ea7b63c946939d9",
"messageId": "73cc1e8b-b38b-4d3d-b6f1-c55682466d84",
"author": {
"id": "echo_bot@video.example.net",
"type": 1
},
"type": 202,
"isEdited": false,
"timestamp": 1776460454738,
"content": {
"name": "bot.log",
"mimeType": "text/plain",
"fileId": "c324bb1313fcc50099fbd2bfbb7251f79d473ed6",
"size": 186543
},
"box": {
"id": 14,
"position": "0"
}
}
}
}Уведомление о новом сообщении содержит поля объекта Envelope. Описание полей и примеры для различных типов сообщений вы найдёте в разделе «Справочник API».
Ответ от клиента:
{
"type": 2,
"id": 123456
}| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
| type | uint32 | Да | Тип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE |
| id | uint32 | Да | Идентификатор сообщения, на которое дается ответ (см. подробнее) |
Сообщение было изменено
Сообщение от сервера:
{
"method": "editMessage",
"type": 1,
"id": 12,
"payload": {
"chatId": "d0b99ed24d6fb440a99fb12c4face5e5b28c3863",
"messageId": "d4d20b4f-e4a4-4abc-8e66-ff2e17f483b7",
"timestamp": 1746029430000,
"content": {
"text": "🤝",
"parseMode": "html"
}
}
}| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| method | string | Да | Команда editMessage |
| type | uint32 | Да | Тип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST |
| id | uint32 | Да | Уникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут |
| chatId | string | Да | Уникальный идентификатор чата, в котором находится сообщение |
| 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 | Да | Идентификатор сообщения, на которое дается ответ (см. подробнее) |