Работа с сообщениями

Труконф04.07.2026Около 18 мин

Работа 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>

Упоминание пользователя (mention) 5.5.3+

Вы можете упомянуть любого пользователя сервера используя следующий формат:

markdown
[John Doe](trueconf:john_doe@video.example.com)

Если пользователь является участником группового чата или канала, то даже в заглушенном чате ему придет уведомление через упоминание (@).

Запросы клиента

Отправить сообщение

Запрос:

{
  "type": 1,
  "id": 1,
  "method": "sendMessage",
  "payload": {
    "chatId": "c8c3eee8-9ad0-4638-9692-ad16391a4256",
    "content": {
      "text": "Hello, world!",
      "parseMode": "text"
    }
  }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
methodstringДаКоманда sendMessage
chatIdstringДаИдентификатор чата
replyMessageIdstringНетВ случае если мы отвечаем на сообщение, поле должно содержать идентификатор этого сообщения (см. ниже пример)
textstringДаТекст сообщения
parseModestringДаРежим форматирования (см. выше)

Ответ:

{
  "type": 2,
  "id": 1,
  "payload": {
    "chatId": "c8c3eee8-9ad0-4638-9692-ad16391a4256",
    "messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
    "timestamp": 1735314170572
  }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа
chatIdstringДаИдентификатор чата, в который отправилось сообщение
messageIdstringДаИдентификатор сообщения. Можно использовать данный идентификатор в дальнейшем, для изменения, пересылки или удаления сообщения
timestampuint64ДаВременная метка отправки сообщения в формате 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"
    }
  }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
methodstringДаКоманда editMessage
messageIdstringДаИдентификатор текстового сообщения
textstringДаТекст сообщения
parseModestringДаРежим форматирования (см. выше)

Ответ:

{
    "type": 2,
    "id": 1,
    "payload": {
        "messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
        "timestamp": 1735314170572
    }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа
timestampuint64ДаВременная метка редактирования сообщения в формате UNIX timestamp с точностью до миллисекунд
messageIdstringДаИдентификатор отредактированного сообщения

В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode. Список возможных значений доступен в соответствующем разделе документации.

Переслать сообщение

Запрос:

{
    "type": 1,
    "id": 1,
    "method": "forwardMessage",
    "payload": {
        "chatId": "4a1f88f1070d2f43d385cde9ff61964bc6b74477",
        "messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06"
    }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
methodstringДаКоманда forwardMessage
chatIdstringДаИдентификатор чата, в который вы будете пересылать сообщение
messageIdstringДаИдентификатор пересылаемого сообщения

Ответ:

{
    "type": 2,
    "id": 1,
    "payload": {
        "chatId": "4a1f88f1070d2f43d385cde9ff61964bc6b74477",
        "messageId": "3e168850-d9ea-45ec-a0f7-21c43e8ba2a8",
        "timestamp": 1735314170572
    }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа
chatIdstringДаУникальный идентификатор чата, в который мы переслали сообщение
messageIdstringДаУникальный идентификатор нового сообщения, содержащего ваше пересланное сообщение
timestampuint64ДаВременная метка пересылки сообщения в формате UNIX timestamp с точностью до миллисекунд

В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode. Список возможных значений доступен в соответствующем разделе документации.

Удалить сообщение

Запрос:

{
    "type": 1,
    "id": 1,
    "method": "removeMessage",
    "payload": {
        "messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06",
        "forAll": true
    }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
methodstringДаКоманда removeMessage
messageIdstringДаИдентификатор удаляемого сообщения
forAllbooleanДаЕсли true — то сообщение будет удалено у всех

Ответ:

{
  "type": 2,
  "id": 1,
  "payload": {}
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа
payloadobjectДаВ случае успеха вы получите пустой объект

В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode. Список возможных значений доступен в соответствующем разделе документации.

Получить сообщение по ID

Запрос:

{
    "type": 1,
    "id": 1,
    "method": "getMessageById",
    "payload": {
        "messageId": "8fe61d87-6db0-4792-8f5e-e5960c7d5a06"
    }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
methodstringДаКоманда getMessageById
messageIdstringДаИдентификатор запрашиваемого сообщения

Ответ:

{
    "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"
        }
    }
}

ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа
chatIdstringДаУникальный идентификатор чата, в котором находится сообщение
messageIdstringДаУникальный идентификатор сообщения
timestampuint64ДаВременная метка отправки сообщения в формате UNIX timestamp с точностью до миллисекунд
replyMessageIdstringНетЕсли это ответ на сообщение — содержит идентификатор этого сообщения
isEditedbooleanДаБыло ли сообщение когда-либо отредактировано
payload.typeuint32ДаТип вложенного сообщения. Подробнее см. EnvelopeContentType
author.idstringДаУникальный идентификатор автора сообщения. Это либо TrueConf ID пользователя, либо имя сервера, с которого пришло сообщение. Тип идентификатора зависит от поля type
author.typeuint32ДаТип автора сообщения. Подробнее см. EnvelopeAuthorTypeEnum
box.idnumberДаПорядковый номер "коробки", в которой находится сообщение. Подробнее — в соответствующем разделе
box.positionstringДаПорядковый номер сообщения в "коробке". Подробнее — в соответствующем разделе

В зависимости от значения payload.type, объект payload.content может содержать данные одного из следующих форматов:

Текстовое сообщение

Используется, если сообщение содержит только текстовую информацию.

ПараметрТипОбяз.Описание
textstringДаТекст сообщения
parseModestringДаРежим форматирования (см. выше)

Вложение (файл)

Используется, если сообщение содержит файл (документ, изображение и т.д.).

ПараметрТипОбяз.Описание
namestringДаИмя файла
sizenumberДаРазмер файла
mimeTypestringДаMIME-тип файла
fileIdstringДаИдентификатор файла на сервере

Геолокация 5.5.3+

ПараметрТипОбяз.Описание
latitudenumberДаШирота
longitudenumberДаДолгота
titlestringДаТекстовое описание местоположение. Как правило, адрес

Пересланное сообщение

Представляет собой вложенное сообщение, содержащее одну из описанных выше структур (text, attachment и т.д.) и дополнительные поля с метаинформацией. По структуре аналогично обычному сообщению: включает author, timestamp, content и другие поля.

В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode. Список возможных значений доступен в соответствующем разделе документации.

Получить историю чата

Запрос:

{
    "type": 1,
    "id": 1,
    "method": "getChatHistory",
    "payload": {
        "chatId": "4a1f88f1070d2f43d385cde9ff61964bc6b74477",
        "count": 9999,
        "fromMessageId": "e37cfc52-592f-453f-a3dd-275170b2018d"
    }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
methodstringДаКоманда getChatHistory
chatIdstringДаИдентификатор чата, для которого запрашивается история сообщений
countuint32ДаКоличество возвращаемых в ответе сообщений
fromMessageIdstringНетИдентификатор сообщения чата, с которого будет возвращена история

Ответ:

{
    "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"
                }
            }
        ]
    }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа
chatIdstringДаИдентификатор чата, для которого запрашивалась история сообщений
countuint32ДаКоличество полученных сообщений
messagesArray<Envelope>НетМассив объектов Envelope, каждый из которых представляет одно сообщение. Описание параметров смотрите выше

В случае возникновения ошибки возвращается сообщение, содержащее параметр errorCode. Список возможных значений доступен в соответствующем разделе документации.

Уведомления сервера

Новое сообщение

Сообщение с типом 200 является текстовым. Поле content содержит текст сообщения, а параметр parseMode определяет способ его интерпретации (например, Markdown или HTML).

Сообщение от сервера:

{
  "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
}
ПолеТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор сообщения, на которое дается ответ (см. подробнее)

Ответ на сообщение

При ответе (reply) на сообщение вы получите payload с параметром replyMessageId.

Сообщение от сервера:

{
  "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
      },
      "replyMessageId": "0c4dc725-ee33-4b91-9543-e4149e5d3ad3",
      "isEdited": false,
      "box": {
          "id": 4,
          "position": "0"
      },
      "type": 200,
      "content": {
          "text": "Текст",
          "parseMode": "html"
      }
  }
}

Уведомление о новом сообщении содержит поля, соответствующие объекту Envelope. Подробное описание этих полей вы найдёте в разделе посвящённом работе с сообщениями.

Ответ от клиента:

{
    "type": 2,
    "id": 123456
}
ПолеТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор сообщения, на которое дается ответ (см. подробнее)

Пересланное сообщение

Сообщение c типом 201 идентифицируется как пересланное. В поле 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": {
          "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. Подробное описание этих полей вы найдёте в разделе посвящённом работе с сообщениями.

Ответ от клиента:

{
    "type": 2,
    "id": 123456
}
ПолеТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор сообщения, на которое дается ответ (см. подробнее)

Сообщение было изменено

Сообщение от сервера:

{
    "method": "editMessage",
    "type": 1,
    "id": 12,
    "payload": {
        "chatId": "d0b99ed24d6fb440a99fb12c4face5e5b28c3863",
        "messageId": "d4d20b4f-e4a4-4abc-8e66-ff2e17f483b7",
        "timestamp": 1746029430000,
        "content": {
            "text": "🤝",
            "parseMode": "html"
        }
    }
}
ПараметрТипОбяз.Описание
methodstringДаКоманда editMessage
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
chatIdstringДаУникальный идентификатор чата, в котором находится сообщение
messageIdstringДаИдентификатор измененного сообщения. Можно использовать данный идентификатор в дальнейшем для копирования, пересылки или удаления сообщения
timestampuint64ДаВременная метка изменения сообщения в формате UNIX timestamp с точностью до миллисекунд
textstringДаТекст измененного сообщения
parseModestringДаРежим форматирования (см. подробнее)

Ответ от клиента:

{
    "type": 2,
    "id": 123456
}
ПолеТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор сообщения, на которое дается ответ (см. подробнее)

Сообщение было удалено

Сообщение от сервера:

{
    "method": "removeMessage",
    "type": 1,
    "id": 12,
    "payload": {
        "chatId": "bd05af54347e04a1c44e70033d35834d4428bb5d",
        "messageId": "d4d20b4f-e4a4-4abc-8e66-ff2e17f483b7",
        "removedBy": {
            "id": "brown@video.example.com",
            "type": 1
        }
    }
}
ПараметрТипОбяз.Описание
methodstringДаКоманда removeMessage
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
chatIdstringДаИдентификатор чата, где было удалено сообщение
messageIdstringДаИдентификатор удаленного сообщения. Можно использовать данный идентификатор в дальнейшем для копирования, пересылки или удаления сообщения
removedBy.idstringДаУникальный идентификатор пользователя, удалившего сообщение. Это либо TrueConf ID, либо имя сервера, с которого пришло сообщение. Тип идентификатора зависит от поля removedBy.type
removedBy.typeuint32ДаТип пользователя, который удалил сообщение. Подробнее см. EnvelopeAuthorTypeEnum

Ответ от клиента:

{
    "type": 2,
    "id": 123456
}
ПолеТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор сообщения, на которое дается ответ (см. подробнее)
Последнее обновление: