Четыре раздела — в том порядке, в каком они обычно нужны.
Установка приложения для Nextcloud
Приложение — это часть системы на стороне Nextcloud: список встреч, настройки, команды в чате и файлы. Само оно ничего не записывает — это работа коннектора. Друг друга они находят по одному ключу.
Что нужно заранее
Nextcloud 30 или новее с установленным Talk.
High Performance Backend для Talk. Без него никак: только HPB отдаёт звук каждого участника отдельно, а без этого в расшифровке не понять, кто говорил.
Аккаунт в нашем сервисе — ключ выдаётся там.
Доступ к командной строке, чтобы запускать occ, или администратор, у которого он есть.
1. Установите приложение
Распакуйте релиз в каталог apps/ вашего Nextcloud и включите приложение:
В верхней панели появится пункт «Встречи». Он будет пустым, пока не расшифруется первый звонок.
2. Укажите ключ
В разделе «Параметры администрирования → Voxonta» вставьте ключ сервиса из своего аккаунта. Приложение сразу его проверит и скажет, если сервис не отвечает.
Этот же ключ понадобится коннектору на шаге 3. Одного ключа хватает в обе стороны: коннектор спрашивает у приложения, какие звонки идут сейчас, а приложение спрашивает у сервиса, что получилось по завершённому звонку.
3. Подключите сервис захвата
Коннектор работает вне Nextcloud, на той же машине, что и High Performance Backend для Talk. Ему нужны три параметра:
NEXTCLOUD_URL
Адрес вашего Nextcloud, например https://cloud.example.com
APP_SERVICE_TOKEN
Тот же ключ, что вы вставили на шаге 2
GATEWAY_TOKEN
Ключ сервиса из вашего аккаунта
Как запустить его самостоятельно, описано в отдельном разделе. Если коннектор размещаем мы, этот шаг уже сделан.
4. Сделайте пробный звонок
Начните звонок в любой беседе, скажите пару фраз и завершите его. Через минуту-другую расшифровка появится во «Встречах». Сводка и анализ придут позже — обычно в течение часа, а после долгой встречи бывает и дольше.
Если ничего не появилось, проверьте по порядку:
Лог коннектора: есть ли там Call monitor started и видит ли он звонок?
«Параметры администрирования → Voxonta»: видно ли, что сервис недавно выходил на связь?
Говорил ли кто-нибудь на самом деле. Беззвучный звонок даёт пустую расшифровку, и это правильный результат, а не сбой.
Команды в чате
/no-record
Не расшифровывать этот звонок
/record
Снова расшифровывать
Команды в беседе включает администратор, и это не то же самое, что зайти в комнату. На практике они работают в групповых и публичных беседах, где их включили, и не работают в личных звонках, где их обычно нет. Если отправить /no-record не раньше чем за пять минут до звонка, расшифровка даже не начнётся.
Куда попадают файлы
Расшифровки и анализы записывает в свои папки служебный аккаунт, а потом открывает к ним доступ участникам звонка. В групповой беседе приложение ещё и публикует ссылки в чат; в личной так сделать нельзя, поэтому уведомлением служит сам доступ к файлу.
Как это устроено
Три части. Коннектор на вашей стороне, который слышит звонок; движок на нашей, который превращает речь в текст; и ваше собственное хранилище, куда попадает результат.
Во время звонка
Коннектор подключается к встрече так же, как браузер ещё одного участника, только не говорит и в комнате не виден. В Nextcloud Talk он подключается к вашему High Performance Backend как внутренний клиент и получает отдельный аудиопоток от каждого человека. Именно поэтому в расшифровке видно, кто что сказал: голоса никогда не смешиваются в одну дорожку.
Звук идёт на движок прямо во время звонка. Никто не нажимает «запись», и никакой записи потом не остаётся — см. Ваши данные.
Когда звонок закончился
Движок дораспознаёт всё, что осталось в буфере, и выдаёт расшифровку с разбивкой по говорящим и метками времени.
Шлюз сохраняет её и передаёт анализатору, который пишет сводку, решения, открытые вопросы и задачи. На это уходит от нескольких минут до пары часов — смотря сколько длилась встреча.
Приложение в вашем Nextcloud спрашивает у шлюза, что готово, забирает это, записывает файлы в ваше хранилище и открывает доступ участникам звонка.
Что пересекает границу
От вас к нам
Звук звонка, пока идёт встреча; имена участников, чтобы подписать реплики в расшифровке; название и идентификатор беседы.
От нас к вам
Файлы расшифровки, сводки и анализа; статистика по тому, кто сколько говорил в звонке.
Никогда
Ваши файлы, переписка вне звонка, список пользователей и вообще что-либо о беседах, которые не расшифровывались.
Кто говорит
Звук каждого участника приходит отдельным потоком, который платформа встреч уже подписала, так что авторство реплик — это факт, а не догадка. Если платформа даёт меньше — общую дорожку, гостя без имени, — реплика помечается как сказанная неопознанным участником, а не приписывается тому, кто кажется подходящим.
Части системы
Коннектор
Работает на вашей стороне. Слышит звонок, отправляет звук, спрашивает у приложения, какие звонки идут. Открытый код.
Приложение для Nextcloud
Работает в вашем Nextcloud. Настройки, список встреч, команды в чате; забирает готовые встречи и раскладывает файлы. Открытый код.
Движок
Наш. Речь в текст, отдельный буфер на каждого говорящего.
Шлюз
Наш. Хранит результаты, пока ваша сторона их не заберёт, разделяет клиентов, считает использование.
Коротко: результаты принадлежат вам и лежат в вашем хранилище. Наши копии — рабочие, и они удаляются по таймеру, который мы можем вам показать.
Сроки хранения
Звук звонка
Не храним. Он распознаётся по мере поступления и никогда не сохраняется как запись.
Расшифровка, сводка, анализ — наша копия
7 дней после окончания звонка, потом удаляется. Этого хватает, чтобы ваша сторона их забрала, даже если несколько дней была офлайн.
Рабочая копия анализатора
30 дней, потом удаляется вместе со всем, что из неё получено.
Профили говорящих
Хранятся, пока хранится хотя бы одна встреча с этим человеком. Когда истекает срок последней, профиль удаляется вместе с ней.
В вашем Nextcloud
Сколько захотите. Это ваши файлы: мы их не удаляем и не можем удалить.
Про звук
Распознавание не мгновенное, поэтому, пока речь обрабатывается, она короткими кусками лежит в памяти. Если памяти не хватает, кусок может ненадолго попасть на диск — и удаляется, как только распознан; остатки удаляются при перезапуске. Чего не бывает никогда, так это сохранённой записи: файла с вашей встречей у нас нет нигде, и задним числом сделать его мы не можем.
Кто что видит
Между клиентами — каждая встреча принадлежит одному рабочему пространству, и запрос с ключом одного пространства может добраться только до встреч этого пространства.
Внутри вашего Nextcloud — доступ к файлам получают участники звонка, а остальное решают права самого Nextcloud. Мы не знаем, кто ваши пользователи; это знает только ваш Nextcloud.
Портреты участников — файл с анализом конкретного человека, как и всё остальное, доступен участникам той встречи.
Удалить раньше срока
Встречу можно удалить с нашей стороны, не дожидаясь семи дней. Копию в вашем Nextcloud это не затронет: удалять там — ваше дело, а не наше. Напишите на hello@voxonta.com, укажите рабочее пространство и что именно удалить. Кнопки, чтобы сделать это самому, пока нет, и делать вид, что она есть, было бы хуже, чем честно об этом сказать.
Чего мы не делаем
Не обучаем модели на ваших встречах.
Не читаем ваши расшифровки — разве что вы сами попросите посмотреть что-то конкретное.
Ничего никому не продаём и не передаём. В продукте нет ни рекламных интеграций, ни аналитики.
Где это работает
Распознавание речи работает на наших собственных серверах, на модели, которую мы размещаем сами. Ваш звук не уходит в сторонний сервис распознавания речи.
Для анализа используется языковая модель, доступ к ней идёт через OpenRouter. На сводку отправляется текст встречи — никогда не звук. Кто может его увидеть, ограничено двумя правилами:
Подходят только провайдеры, чья политика — не хранить данные запросов и не обучаться на них; остальные исключаются на уровне самого запроса, а не в надежде на какую-то настройку.
Провайдеры, которых мы исключили сами — из-за качества или стабильности, — тоже никогда ничего не получают.
Какой из оставшихся провайдеров обработает конкретный запрос, решается каждый раз заново, так что заранее назвать одно имя мы не можем. Зато можем обещать правило, которому соответствуют они все. Если вашей службе безопасности нужен текущий список, а не правило, — напишите, и мы пришлём. Он меняется: провайдеры приходят и уходят.
Коннектор на своём сервере
Та часть, что слышит ваши звонки, — именно та, которую больше всего стоит держать на своём железе. У неё открытый код, она работает рядом с вашим High Performance Backend для Talk и устанавливает только исходящие соединения.
Что это такое
Небольшой сервис на Python. Он спрашивает у приложения в Nextcloud, какие звонки идут, подключается к ним через ваш High Performance Backend как внутренний клиент и передаёт звук каждого участника на движок. Видимым участником он не становится, не говорит и в комнате не появляется.
На той же машине, что и High Performance Backend для Talk. Так у звука самый короткий путь, и нигде не нужно открывать дополнительный порт.
Docker
Поставляется образом; в системный Python хоста ничего не устанавливается.
Исходящий доступ
К вашему Nextcloud и к нашему шлюзу на порт 443. Ничего входящего: ни проброса портов, ни новых правил.
Ресурсы
Скромные — он передаёт звук, а не распознаёт его. Распознавание идёт на нашей стороне.
Настройки
NEXTCLOUD_URL
Ваш Nextcloud, например https://cloud.example.com
APP_SERVICE_TOKEN
Ключ из настроек администратора в приложении
GATEWAY_TARGET
gw.voxonta.com:443
GATEWAY_TOKEN
Ключ рабочего пространства из вашего аккаунта
NC_APP_ID
Необязательно. Идентификатор приложения, по умолчанию voxonta; нужен, только если вы его переименовали
Всё остальное — какие беседы расшифровывать, как коннектор входит в Nextcloud, сколько хранить результаты — берётся из настроек администратора в приложении. Так всё настраивается в одном месте, а не в двух.
Как проверить, что работает
При запуске он должен по порядку сообщить, что загрузил настройки из вашего Nextcloud, что передаёт поток на шлюз и что запустил мониторинг звонков. Если вместо этого он раз за разом пишет could not read live calls, приложение не отвечает: неверный адрес, неверный ключ или приложение не включено.
Что остаётся у нас
Распознавание речи, шлюз с результатами и анализатор — не открытый код и работают на нашей инфраструктуре. Делать вид, что это не так, мы не будем: сегодня у себя можно разместить захват звука и всё, что на стороне Nextcloud, — то есть ту часть, которая касается ваших звонков и пользователей. Распознаванию нужны железо и модель, которую поддерживаем мы; если хотите запускать его сами, это тема для разговора с нами, а не файл для скачивания.
Чего здесь пока нет
Источников, кроме Nextcloud Talk, и API, чтобы читать встречи из своих инструментов. И то и другое в каком-то виде существует, но описано недостаточно хорошо, чтобы публиковать. Страница, которая описывает что-то почти правильно, хуже, чем никакой.