Обаждания и глас

Обажданията и гласовите канали изпращат аудио, видео и споделяне на екран директно към сървъра на собствения му порт. Тази страница обхваща мрежната страна, настройките, които трябва да проверите след инсталацията, и транскрипцията с речова модель, който изпълнявате сами.

Как работят обажданията

Обажданията се осигуряват от приложението Обаждания (id com.mattermost.calls), което е инсталирано и активирано по подразбиране. Гласовите канали (приложението Гласови канали, образ antimatter-next) са постоянни стаи за обаждания, изградени върху Обаждания: те изискват Обаждания да е активирано и използват същите настройки, портове и сървъри.

Приложението Обаждания изпълнява медиен сървър вътре в Antimatter. Уеб приложението, десктоп приложението и мобилните приложения се свързват с него чрез WebRTC:

  • сигнализирането минава през обикновеното уеб свързване (вашия HTTPS прокси);
  • медията (аудио, видео, споделяне на екран) не минава през него: тя отива директно към сървъра на порта за обаждания, по подразбиране 8443 UDP и TCP.

Настройките се намират в Системна конзола › Приставка › Обаждания. Всяка от тях може да се зададе и с променлива на средата AM_CALLS_ за услугата antimatter, която има предимство пред Системната конзола и блокира настройката там. Старите имена MM_CALLS_ също действат.

Проверете тези след инсталацията

  1. Отворете порта за обаждания. Разрешете 8443/udp и 8443/tcp във firewall-а на сървъра и на вашия облачен доставчик.
  2. Проверете режима за тестване. Режимът за тестване (DefaultEnabled) е изключен по подразбиране, така че всеки може да стартира обаждания. Включете го (Вкл.) в Системна конзола › Приставки › Обаждания, за да разрешите стартирането на обаждания в канали само на системните администратори, докато проверите дали обажданията работят, след което го изключете отново. Променливата е AM_CALLS_DEFAULT_ENABLED: true означава, че режимът за тестване е изключен. Сървър, мигриран от Mattermost, запазва избора в конфигурацията си.
  3. Решете въпроса с видеото. Опцията Разрешаване на видео (EnableVideo, AM_CALLS_ENABLE_VIDEO) е включена по подразбиране: хората могат да включват камерите си навсякъде, където обажданията са разрешени – в директни и групови съобщения и в канали. В гласовите канали решението се взема от опцията Разрешаване на видео в гласови канали на приложението „Гласови канали“. Ако я изключите, никой няма да може да включи камера, дори в гласови канали.
  4. Зад NAT, задайте публичния адрес (следващата секция).

Къде са активни обажданията

Всяка общност има тип – Работно пространство или Гилдия (вижте Гилдия или работно пространство). Канал, чиито администратори не са включили или изключили обажданията, следва типа на общността:

  • в работно пространство каналите следват настройките по подразбиране на сървъра: обажданията са включени за всички, докато тестовият режим е изключен;
  • в гилдия обажданията в каналите са изключени: хората разговарят в гласови канали. Администраторите на канала и общността все пак могат да включат обажданията в даден канал.

Собствената настройка на канала винаги има приоритет. Директните и груповите съобщения не принадлежат към общност: обажданията в тях са активни за всички, докато режимът за тестване е изключен. Промяната на типа на общността се прилага за обажданията в рамките на 30 секунди.

Портове, NAT и STUN

НастройкаПроменливаПо подразбиране
Порт на RTC сървъра (UDP)AM_CALLS_UDP_SERVER_PORT8443
Порт на RTC сървъра (TCP)AM_CALLS_TCP_SERVER_PORT8443
Адрес на RTC сървъра (UDP), (TCP)AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESSпразно: всички адреси
Замяна на ICE хостAM_CALLS_ICE_HOST_OVERRIDEпразно: откриване чрез STUN
Замяна на ICE хост портAM_CALLS_ICE_HOST_PORT_OVERRIDEпразно: портът на сървъра
Конфигурации на ICE сървъриAM_CALLS_ICE_SERVERS_CONFIGS[{"urls":["stun:stun.cloudflare.com:3478"]}]
(Експериментално) Активиране на IPv6 поддръжка(Системна конзола)изключено

Портовете трябва да са между 80 и 49151. С compose файла на сайта, променете CALLS_PORT в .env: той задава и двете променливи и публикува порта, със същия номер на хоста и в контейнера. Клиентите първо опитват UDP и преминават към TCP на същия порт.

Кой адрес клиентите изпращат медията към

Сървърът казва на всеки клиент адреса, към който да изпрати медията (неговият "хост кандидат"). По подразбиране той открива публичния си адрес, като пита STUN сървър, публична услуга, която отговаря с адреса и порта, от които е дошло заявката. По подразбиране е публичният STUN сървър на Cloudflare, stun:stun.cloudflare.com:3478. Сървърът не е единственият, който го използва: всеки клиент, който се присъедини към обаждане, също го пита за своя публичен адрес. STUN сървърът вижда само IP адреси и портове, никога аудио, видео или съобщения от обаждането.

Сървър, който все още има запазен STUN сървъра на Mattermost (stun.global.calls.mattermost.com) в Конфигурации на ICE сървъри, например след преместване от Mattermost, използва този на Cloudflare. Запазената настройка не се променя.

Задайте адреса ръчно, когато:

  • сървърът е зад NAT или има няколко публични адреса: задайте Замяна на ICE хост на публичния IP адрес (или хост име, което се разрешава към него);
  • NAT мапира различен публичен порт към 8443: задайте и Замяна на ICE хост порт на този публичен порт;
  • сървърът няма достъп до интернет или не искате сървърът и клиентите да контактуват с външен STUN сървър: задайте Замяна на ICE хост и изчистете списъка на STUN с AM_CALLS_ICE_SERVERS_CONFIGS=[]. Когато Замяна на ICE хост е зададен, сървърът вече не пита STUN сървър за адреса си; празният списък спира клиентите да го правят.
services:
  antimatter:
    environment:
      AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
      AM_CALLS_ICE_SERVERS_CONFIGS: "[]"

За да запазите STUN без трета страна, пуснете собствен STUN сървър (TURN сървър като coturn също отговаря на STUN заявки) и го посочете в Конфигурации на ICE сървъри вместо това, както в примера за TURN по-долу.

Само в локална мрежа, използвайте LAN адреса на сървъра. Рестартирайте сървъра след промяна на портове, адреси или ICE настройки, или деактивирайте и активирайте приложението Calls: медияният сървър се настройва при стартиране на приложението.

TURN, за строги файрвъли

Някои мрежи блокират както UDP, така и изходящи връзки към нестандартни TCP портове. Хората, които ги използват, имат нужда от TURN сървър, който пренася медията през порт, до който могат да стигнат (често 443). Antimatter не включва такъв; изпълнете TURN сървър като coturn и го добавете в ICE Servers Configurations, JSON списък:

[
  {"urls": ["stun:turn.example.com:3478"]},
  {"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
  • При използване на споделен секрет (coturn use-auth-secret), поставете същия секрет в TURN Static Auth Secret (AM_CALLS_TURN_STATIC_AUTH_SECRET): сървърът предоставя на всеки клиент краткосрочни данни за удостоверяване, валидни за TURN Credentials Expiration (minutes) (по подразбиране 240 минути).
  • При използване на фиксирани данни за достъп, добавете "username" и "credential" към записа на TURN вместо това.
  • Server Side TURN (изключено по подразбиране) също използва TURN сървърите за връзки, които сървърът инициира.

Други настройки за обаждания

НастройкаПроменливаПо подразбиранеКакво прави
Max call participantsAM_CALLS_MAX_CALL_PARTICIPANTS0 (без ограничение)Най-голям брой участници в едно обаждане.
Allow screen sharing(Системна конзола)включеноПозволява на участниците да споделят екрана си.
Enable call ringingAM_CALLS_ENABLE_RINGINGвключеноЗвъни на другите участници в директно или групово съобщение, когато в него започне обаждане.
Enable simulcast for screen sharing (Experimental)(Системна конзола)изключеноИзпраща споделянето на екран в няколко качествени нива.
Enable AV1 codec for screen sharing (Experimental)(Системна конзола)изключеноИгнорира се, докато simulcast е включено.

Приложението „Гласови канали“ има две настройки в Системна конзола › Приставки › Гласови канали: Присъединяване при отваряне на гласов канал (включено по подразбиране) и Разрешаване на видео в гласови канали (включено по подразбиране, но вижте видеото по-горе). Гласът е тип канал, който се избира при създаването на канала (вижте Създаване на канал); няма по-късна стъпка за „превръщане в гласов канал“. Двете настройки се отнасят за всеки гласов канал. За създаването му е необходимо приложението „Гласови канали“ да е активно; без него опцията Глас е сива в диалога за създаване на канал.

The create-channel dialog with Voice picked: the Talk and Stage preset cards, Voice Channels app active
Глас, след като приложението „Гласови канали“ е активно: картите „Разговор“ и „Сцена“.
За да изключите обажданията напълно, деактивирайте приставката Обаждания в Системна конзола › Приставка › Управление на приставките или задайте AM_CALLS_DISABLE=true. Тогава гласовите канали също спират да работят.

По-големи сървъри: външен rtcd

По подразбиране един сървър на Antimatter поема целия медиен трафик на обажданията. При множество едновременни обаждания или за да се държи медиен трафикът отделен от сървъра за чат, приложението Обаждания може да прехвърли медиите към rtcd, отделен медиен сървър (отворения код на Mattermost rtcd, версия 0.17 или по-нова). Задайте RTCD service URL (AM_CALLS_RTCD_SERVICE_URL), например https://rtcd.example.com: тогава всички обаждания минават през него, а клиентите изпращат медиите си към собствения порт на rtcd, а не на Antimatter. Удостоверителни данни могат да се зададат с AM_CALLS_RTCD_CLIENT_ID и AM_CALLS_RTCD_AUTH_KEY; без тях приложението се регистрира само в rtcd. Не се изисква лиценз. Приложението Обаждания показва предупреждение на администраторите, препоръчващо rtcd, когато на сървъра често има повече от 50 души едновременно в обаждания.

Транскрипция и живи субтитри

Antimatter може да транскрибира обаждания с модел за преобразуване на реч в текст, който изпълнявате сами, и да показва живи субтитри, докато хората говорят. Antimatter използва всеки сървър, който предлага OpenAI-съвместим /v1/audio/transcriptions endpoint, например Whisper сървър в мрежата ви. Не се изисква допълнителна услуга от Antimatter.

Как работи

  • Гостоприемникът на обаждането започва транскрипцията с Транскрибиране на обаждането в контролите на обаждането. Знак Транскрибиране уведомява всички.
  • Приложението на всеки участник слуша собствения си микрофон, разделя речта на къси фрагменти (до 12 секунди, никога докато е заглушен) и ги изпраща до Antimatter, който ги препраща към вашия сървър за преобразуване на реч в текст.
  • Когато живите субтитри са включени, текстът на всеки фрагмент се показва веднага на участниците като субтитър.
  • Когато транскрипцията спре или обаждането приключи, ботът Обаждания публикува транскрипта като текстов файл и WebVTT файл със субтитри в нишката на обаждането (в гласови канали — в канала).
  • Когато опцията Обобщаване на транскрипциите е включена, агента по подразбиране на приложението за чат с AI също публикува обобщение в нишката (вижте AI).
A call's thread: the Calls bot has posted the transcript as a text file, and an AI agent has posted a summary below it.
След обаждането: транскриптът и обобщението му в нишката на обаждането.

Настройка

Задайте следните на услугата antimatter:

services:
  antimatter:
    environment:
      AM_CALLS_ENABLE_TRANSCRIPTIONS: "true"
      AM_CALLS_TRANSCRIBE_API: openai
      AM_CALLS_TRANSCRIBE_API_OPEN_AIURL: http://stt.internal:8000/v1
      AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL: whisper-1
      AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY: ""
      AM_CALLS_ENABLE_LIVE_CAPTIONS: "true"
      AM_CALLS_LIVE_CAPTIONS_LANGUAGE: en
НастройкаПроменливаКакво да се въведе
Enable call transcriptions (Beta)AM_CALLS_ENABLE_TRANSCRIPTIONStrue
Call transcriber APIAM_CALLS_TRANSCRIBE_APIopenai (показано като "OpenAI-compatible API (no job service)")
Speech-to-text API URLAM_CALLS_TRANSCRIBE_API_OPEN_AIURLБазовият URL на API-то, включително /v1.
Speech-to-text modelAM_CALLS_TRANSCRIBE_API_OPEN_AI_MODELИмето на модела, както го познава API-то, например whisper-1. Задължително.
Speech-to-text API keyAM_CALLS_TRANSCRIBE_API_OPEN_AI_KEYИзпраща се като bearer token. Оставете го празно, ако API-то не изисква такъв.
Включване на живи субтитри (Бета)AM_CALLS_ENABLE_LIVE_CAPTIONStrue за субтитри по време на обаждането.
Език на живите субтитриAM_CALLS_LIVE_CAPTIONS_LANGUAGEГовореният език, като двузнаков код (по подразбиране en). Изпраща се и към API-то за преобразуване на реч в текст за транскриптите, така че задайте го дори без субтитри.
Резюмиране на транскриптитеAM_CALLS_SUMMARIZE_TRANSCRIPTIONStrue за AI резюме след обаждането.
В Системната конзола настройките за транскрипция се появяват само след като Включване на запис на обаждания е активирано, въпреки че този вид транскрипция не изисква запис. Задаването им с променливите по-горе избягва този проблем. Не включвайте записите заедно с транскриптора openai: започването на запис би опитало да стартира транскриптора на job-service и би се провалило.

Аудиото на всеки, който говори, докато транскрипцията е активна, се изпраща към сървъра за преобразуване на реч в текст, който сте конфигурирали, а транскриптът се публикува там, където всички в канала могат да го прочетат. Информирайте потребителите си и дръжте този сървър в собствената си мрежа, ако обажданията са поверителни.

Записи

Записът на обаждания (и транскрипцията с вградените whisper.cpp или Azure транскриптори) се извършва в отделни контейнери, стартирани от услугата за задачи – calls-offloader с отворен код на Mattermost, който трябва да внедрите сами до Antimatter. Настройките са Enable call recordings (AM_CALLS_ENABLE_RECORDINGS, изключено по подразбиране), Job service URL (AM_CALLS_JOB_SERVICE_URL), Maximum call recording duration (по подразбиране 60 минути, диапазон от 15 до 180) и Call recording quality (ниско, средно или високо; по подразбиране средно). Не е необходима лицензионна такса. След като записите са активирани, водещият на обаждането стартира и спира запис с Record the call в контролите на обаждането; всички участници виждат, че се записва, а записът се публикува в нишката на обаждането, когато спре. Обажданията в гласови канали нямат нишка, затова не могат да бъдат записвани. За транскрипции и субтитри отделно, конфигурацията за разпознаване на реч по-горе е по-проста: тя не изисква услуга за задачи.