Введение

Труконф02.10.2026Около 13 мин

Введение

В составе TrueConf Server поставляется служба TrueConf Bridge. Она обеспечивает работу API с чатами по протоколам HTTP и WebSocket и использует TCP-порт 4309.

Для работы с API чатов необходимо предварительно:

  1. Получить идентификационный токен с помощью HTTP-запроса.

  2. Подключиться к TrueConf Server по протоколу WebSocket.

  3. Авторизовать подключение с помощью идентификационного токена и запроса auth.

Перед отправкой сообщений по WebSocket необходимо выполнить команду auth. В противном случае сервер будет возвращать ошибку с кодом 200.

Рекомендуется запускать ботов на отдельном TrueConf Server и связывать его с основным сервером посредством механизма федерации:

/docs/chatbot-connector/media/bots-deployed-scheme/ru.svg

Такая схема позволяет:

  • изолировать учётные данные ботов — учётные записи ботов, OAuth 2.0-приложения и связанные с ними секреты размещаются на второстепенном сервере. На основном сервере при этом можно сохранить авторизацию только по NTLM, Kerberos или MFA;

  • разместить ботов в защищённом контуре (КСПД) — боты и вызываемые ими локальные скрипты могут работать внутри защищённого контура, даже если основной сервер с пользователями находится во внешней сети (DMZ). Взаимодействие между серверами обеспечивается посредством федерации;

  • использовать поддерживаемую ботами парольную авторизацию — если на основном сервере используется NTLM, учётные записи ботов можно создать на выделенном сервере, где они будут авторизоваться по логину и паролю. С пользователями основного сервера боты взаимодействуют через федерацию, поэтому создавать для них OAuth 2.0-приложения на основном сервере не требуется;

  • масштабировать инфраструктуру ботов — WebSocket-соединения ботов устанавливаются с выделенным сервером и учитываются в его собственном лимите, составляющем до 128 одновременных соединений;

  • управлять инфраструктурой ботов независимо — выделенный сервер можно отдельно обслуживать, обновлять и перезапускать. При необходимости его или федеративное соединение можно отключить, не прерывая основную работу сервера с учётными записями пользователей.

Защищённое подключение: HTTPS и WSS

При работе бота передаются чувствительные данные: пароли, сообщения и файлы. Поэтому для удалённого подключения используйте HTTPS и WSS. Незашифрованные HTTP- и WebSocket-соединения допустимы только при локальном подключении к TrueConf Bridge, например во время разработки.

HTTP API используется для:

  • получения идентификационного токена;

  • загрузки файла в специальное хранилище на сервере.

Служба TrueConf Bridge принимает незашифрованные HTTP- и WebSocket-соединения на порту 4309. Для защищённого подключения направляйте запросы через веб-сервер TrueConf, реализуемый службой TrueConf Web Manager. Предварительно убедитесь, что эта служба запущена.

Выберите адрес в зависимости от способа подключения:

НазначениеЛокальное подключение к TrueConf BridgeЗащищённое подключение через TrueConf Web Manager
HTTP APIhttp://localhost:4309/bridge/api/https://bot.example.net/bridge/api/
WebSocketws://localhost:4309/websocket/chat_bot/wss://bot.example.net/websocket/chat_bot/

Служба TrueConf Web Manager проксирует HTTPS-запросы к /bridge/api/ в службу TrueConf Bridge. По умолчанию для HTTPS и WSS используется порт 443. Если в панели управления TrueConf Server настроен другой веб-порт, укажите его в адресе подключения.

О том, как настроить HTTPS на TrueConf Server, читайте в его документации. Получить бесплатный TLS-сертификат можно с помощью центра сертификации Let's Encrypt — см. инструкции для Linux и Windows.

Учётная запись бота

Для авторизации поддерживаются только учётные записи пользователей текущего TrueConf Server. Учётные записи пользователей других серверов, подключённых по федерации, а также гостевые учётные записи не поддерживаются. Можно использовать учётные записи как в режиме Registry, так и в режиме LDAP.

Поддерживаемые форматы логина:

  • простой логин — логин пользователя текущего сервера, например: user или john;

  • с указанием сервера TrueConf — например: user@video.example.com;

  • с указанием LDAP-домена — например: department.mycompany\\john;

  • с указанием сервера и LDAP-домена — например: department.mycompany\\john@server.loc;

Идентификационный токен

Идентификационный токен необходим для авторизации WebSocket-соединения. Токен получают с помощью HTTP-запроса к /bridge/api/client/v1/oauth/token по стандарту OAuth 2.0. Адрес сервера зависит от способа подключения.

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

Для получения идентификационного токена используйте поддерживаемую учётную запись и выполните POST-запрос:

POST /bridge/api/client/v1/oauth/token HTTP/1.1
Host: localhost:4309
Content-Type: application/json
Content-Length: 114

{
    "client_id": "chat_bot",
    "grant_type": "password",
    "username": "user",
    "password": "qwerty"
}
ПараметрОписание
client_idКонстантная строка "chat_bot"
grant_typeКонстантная строка "password"
usernameЛогин пользователя (бота)
passwordПароль пользователя (бота)

Успех (201 Created)

В случае успешной авторизации HTTP-сервер ответит кодом 201 Created:

HTTP/1.1 201 Created
Content-Type:application/json
Access-Control-Allow-Origin:*
Date:Mon, 09 Sep 2024 22:42:50 GMT

{
    "access_token": "eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ",
    "token_type": "JWT",
    "expires_at": 1761121632
}
ПараметрОписание
access_tokenИдентификационный токен, используемый для авторизации WebSocket-соединения.
token_typeКонстантная строка "JWT".
expires_atВремя жизни токена составляет один месяц с момента формирования. По истечении этого времени потребуется повторная авторизация.

Подробнее о структуре тела ответа (payload) см. в разделе OAuthTokenSuccessResponse.

Ошибка (400 Bad Request)

В случае ошибки авторизации, HTTP-сервер ответит кодом 400 Bad Request:

HTTP/1.1 400 Bad Request
Content-Type:application/json
Access-Control-Allow-Origin:*
Date: Mon, 09 Sep 2024 22:42:50 GMT

{
"error": "invalid_grant",
"error_description": "Invalid username or password"
}
ПараметрОписание
errorЗначение из перечисления OAUTH_ERROR.
error_descriptionЧеловекочитаемый текст ошибки авторизации.

Авторизация бота с помощью OAuth-приложения 5.5.3+

Данный способ необходимо использовать, если авторизация по логину и паролю отключена на всём сервере или для зоны, из которой подключается бот. Например, если доступна только авторизация по NTLM, Kerberos или с использованием MFA (AD FS, Keycloak, Blitz и т.д.). При такой конфигурации получить идентификационный токен стандартным способом невозможно, поэтому для подключения бота необходимо использовать OAuth 2.0.

Для авторизации используйте поддерживаемую учётную запись.

Чтобы настроить подключение бота:

  1. Администратор создаёт OAuth 2.0-приложение в разделе API → OAuth2 панели управления TrueConf Server.
  2. Бот получает токен доступа к TrueConf Server API API по стандарту OAuth 2.0, используя метод Resource Owner Password Credentials.
  3. Бот обменивает токен доступа на идентификационный токен (JWT), необходимый для авторизации WebSocket-соединения.

Для получения токена доступа OAuth 2.0-приложению необходимо предоставить право version:read. Без него сервер отклонит запрос с ошибкой invalidScope.

Этап 1. Получение токена TrueConf Server API

Выполните POST-запрос на адрес /api/v4/oauth2/token:

POST /api/v4/oauth2/token HTTP/1.1
Host: video.example.net
Content-Type: application/json

{
    "client_id": "QuWJ9XWvT9otdy9RSAduGA",
    "grant_type": "password",
    "username": "bot",
    "password": "123tr"
}
ПараметрОписание
client_idИдентификатор OAuth 2.0-приложения, созданного в разделе API → OAuth2 панели управления
grant_typeКонстантная строка "password"
usernameЛогин пользователя (бота)
passwordПароль пользователя (бота)

В случае успешной авторизации сервер вернёт JSON с токеном доступа:

{
    "access_token": "NTLIYTQWODUTNMFJMC0ZNTQ1LWFIZDCTN2UXZJIWZWIYNTY5",
    "expires_in": 3600,
    "refresh_token": "ZTBHYTKYODITNJC3YI01OTM3LTG3NJUTYZG1N2IYNDQ0MDC0",
    "scope": "version:read",
    "token_type": "bearer",
    "user_id": "bot"
}
ПараметрОписание
access_tokenТокен TrueConf Server API, используемый на этапе 2
expires_inВремя жизни токена в секундах (1 час)
refresh_tokenТокен продления доступа
scopeОбласть видимости токена, задаваемая правами OAuth 2.0-приложения (version:read)
token_typeКонстантная строка "bearer"
user_idЛогин пользователя (бота), от имени которого выдан токен

Этап 2. Получение authorization_code

Выполните POST-запрос на адрес /bridge/api/client/v1/auth/web_rest_api_token, передав токен, полученный на этапе 1 :

POST /bridge/api/client/v1/auth/web_rest_api_token HTTP/1.1
Host: video.example.net
Content-Type: application/json

{
    "client_id": "bot",
    "token": "NTLIYTQWODUTNMFJMC0ZNTQ1LWFIZDCTN2UXZJIWZWIYNTY5"
}
ПараметрОписание
client_idЛогин пользователя (бота)
tokenТокен TrueConf Server API, полученный на этапе 1

В случае успешного запроса сервер вернёт JSON с кодом авторизации:

{
    "authorization_code": "04934068530254b43fd12b932e713f518e6776dc",
    "expires_in": 1790696252969
}
ПараметрОписание
authorization_codeКод авторизации, используемый на этапе 3
expires_inМомент истечения кода — Unix-время в миллисекундах

Этап 3. Получение идентификационного токена

Выполните POST-запрос на адрес /bridge/api/client/v1/auth/token:

POST /bridge/api/client/v1/auth/token HTTP/1.1
Host: video.example.net
Content-Type: application/json

{
    "client_id": "bot",
    "grant_type": "authorization_code",
    "code": "04934068530254b43fd12b932e713f518e6776dc"
}
ПараметрОписание
client_idЛогин пользователя (бота)
grant_typeКонстантная строка "authorization_code"
codeКод авторизации, полученный на этапе 2

В случае успешного запроса сервер вернёт JSON с идентификационным токеном:

{
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "JWT",
    "expires_in": 1793284714098
}
ПараметрОписание
access_tokenИдентификационный токен (JWT), используемый для авторизации WebSocket-соединения.
token_typeКонстантная строка "JWT".
expires_inМомент истечения токена — Unix-время в миллисекундах. Время жизни токена составляет один месяц с момента формирования.

Полученный идентификационный токен используется для авторизации WebSocket-соединения так же, как токен, полученный посредством запроса выше.

В случае ошибки авторизации сервер может вернуть ответ с кодом 401 (неверные учётные данные или идентификатор приложения) либо 400 с ошибкой invalidScope — проверьте, что у OAuth 2.0-приложения отмечено право version:read.

WebSocket-соединение

После получения идентификационного токена необходимо установить соединение с WebSocket-сервером и выполнить команду авторизации auth.

Начиная с версии TrueConf Server 5.5.3 количество одновременных WebSocket-соединений ограничено до 128. Это значит, что на одном сервере можно запустить до 128 ботов, использующих протокол WebSocket.

Начиная с версии TrueConf Server 5.5.4 один JWT-токен можно использовать в нескольких WebSocket-соединениях.

Подключение к серверу

Для подключения к серверу установите WebSocket-соединение по пути /websocket/chat_bot/. Полный адрес зависит от выбранного способа подключения.

Сервер поддерживает подпротокол json.v1, который передаётся в заголовке Sec-WebSocket-Protocol. Если заголовок не указан, json.v1 используется по умолчанию.

Авторизация подключения

Запрос:

{
  "type": 1,
  "id": 1,
  "method": "auth",
  "payload": {
    "token": "someToken",
    "tokenType" : "JWT",
    "receiveUnread": false,
    "receiveSystemMessageEnvelopes": true
  }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 1). Соответствует MESSAGE_TYPE.REQUEST
iduint32ДаУникальный идентификатор запроса. Инкрементируемое значение, назначаемое отправляющей стороной, обязательное в каждом запросе для последующего связывания с ответом. Подробнее читайте тут
methodstringДаТип отправляемой команды, по умолчанию auth
tokenstringДаАвторизационный токен, полученный посредством HTTP-запроса
tokenTypestringДаПо умолчанию JWT
receiveUnreadbooleanНетПараметр, отвечающий за получение непрочитанных сообщений, когда бот не был подключён к серверу. Сообщения возвращаются по одному — от старых к новым. Максимальное количество получаемых сообщений — 1000. По умолчанию — false.
receiveSystemMessageEnvelopesbooleanНет5.5.3+ Параметр, отвечающий за получение системных сообщений. По умолчанию — true.

Ответ:

{
  "type": 2,
  "id": 1,
  "payload": {
    "userId": "someTrueConfUserId@someTrueConfServerName/someHash"
  }
}
ПараметрТипОбяз.Описание
typeuint32ДаТип сообщения (по умолчанию 2). Соответствует MESSAGE_TYPE.RESPONSE
iduint32ДаИдентификатор, совпадающий с числом, отправленным в исходном запросе, используемый для связывания запроса и ответа
userIdstringДаTrueConf ID авторизованного бота (пользователя сервера)

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

Последнее обновление: