Comments 9
А можно сделать кастомный запрос для расширения функционала API? Как?
Что значит "кастомный запрос"?
Не до конца понял вопрос, если имеется в виду “как согласовать работу нескольких скриптов (клиентов, сущностей)”, то для этого есть команда fireMyEvent. Она позволяет разослать всем сущностям подключенным к VideoSDK по вебсокету любые текстовые данные.
Клиент, который управляет VideoSDK выполняет команду fireMyEvent с данными, например, "power off".
Все другие клиенты, которые тоже подключены к управлению VideoSDK, получат событие myEvent c этими данными.
Не знаю как с SDK, но АПИ от самого TrueConfServer вызывает только те самые страх и ненависть: почему токен нельзя в заголовках передавать (и к тому же в строке адреса эт\о не безопасно, т.к. она логируется часто)? Ужасные ИД у всего, которые надо экранировать, к тому же у некоторых объектов они передаются в разном формате в разные методы. Ответы (200 OK), хотя операция провалена, и т.д. и т.п. Такое чувство как смотришь на что-то года из 2005 - не удобный и не интуитивный набор методов лишь бы были...
Да ладно, это, наверное, совсем старый опыт работы с API TrueConf) Используется стандартное экранирование спецсимволов для json, насчёт 200 при ошибке - тоже не встречал: старые добрые 400-я, 501-я, 404-я - это пожалуйста, я даже проверил в том же Postman. API TrueConf не работает по http, только по https, в этом случае что урл, что хедеры одинаково шифруются при передаче. Да и сама API обновляется постоянно, так что, если какие проблемы раньше были, то я их не застал
Ниже "Минимальный рабочий код" для видеозвонка абоненту
# coding=utf8
import pyVideoSDK
from pyVideoSDK.methods import Methods
from pyVideoSDK.consts import EVENT, METHOD_RESPONSE
import pyVideoSDK.consts as C
import config
# Открываем сессию - подключаемся к приложения по API Web Sockets
sdk = pyVideoSDK.open_session(ip = "10.110.14.53", port = 4545, pin = "123")
methods = Methods(sdk)
## Обработчик нотификации
"""
Обработка текущего состояния приложения. "appState" может быть следующим:
0 - нет подключения к серверу;
1 - VideoSDK/Room пытается подключиться к серверу;
2 - требуется авторизация (пользователем);
3 - VideoSDK/Room подключен к серверу и залогинен. Доступен для вызова;
4 - VideoSDK/Room находится в ожидании: либо он звонит кому-то, либо звонят ему;
5 - VideoSDK/Room находится в конференции;
6 - VideoSDK/Room завершает конференцию.
"""
@sdk.handler(EVENT[C.EV_appStateChanged])
@sdk.handler(METHOD_RESPONSE[C.M_getAppState])
def on_state_change(response):
print(f' Application state is {response["appState"]}')
if response["appState"] == 5:
print("\nDone! We are in the conference!\n")
## Обработчик нотификации
"""
Нотификация о том, что пользователь отклонил входящий видеозвонок.
cause - причина отказа, может принимать следующие значения:
0 - отклонен пользователем конференции
1 - достигнуто максимальное количество участников конференции
2 - пользователь занят
3 - пользователь сейчас не доступен
4 - конференции не существует
5 - пользователя не существует
6 - отклонения вызова не произошло
7 - недостаточно средств (для платного тарифа)
8 - доступ запрещен
9 - произошел выход из аккаунта
10 - действие не может быть завершено
11 - недостаточно ресурсов
12 - требуется ввести пароль
13 - неверный пароль
14 - пользователь не в списке друзей
15 - низкий рейтинг (тех. характеристики) системы
16 - пользователь не отвечает
17 - конференция еще не началась
18 - конференция уже завершилась
19 - конференция не найдена
"""
@sdk.handler(EVENT[C.EV_rejectReceived])
def on_reject(response):
print('Reject received')
print(f' Cause: {response["cause"]}')
print(f' {C.CAUSE[response["cause"]]}')
if __name__ == '__main__':
print("Calling...")
# bot1@connect.trueconf.com - это доступный видеобот
# Вы можете здесь указать абонента (его TrueConf ID) или идентификатор конференции
methods.call("bot1@connect.trueconf.com")
sdk.run()
Приложение было запущено с ком. строкой:
"C:\Program Files\TrueConf\Room\TrueConfRoom.exe" --pin="123"
IP и порт показаны на главном окне приложения:
Результат в консоли:
Брать готовый open-source – меня не устраивает, всем известны случаи встраивания back door в проекты с открытым исходным кодом с целью нанести ущерб пользователям из России.
Ну то есть взять закрытый код, в который и не посмотреть (а вдруг там враги боНбу заложили) - это безопасный подход? Мы точно в 2023 году?
Страх и ненависть в переговорке: курим VideoSDK API, Vosk и Python