Обаждания и глас
Обажданията и гласовите канали изпращат аудио, видео и споделяне на екран директно към сървъра на собствения му порт. Тази страница обхваща мрежната страна, настройките, които трябва да проверите след инсталацията, и транскрипцията с речова модель, който изпълнявате сами.
Как работят обажданията
Обажданията се осигуряват от приложението Обаждания (id com.mattermost.calls), което е инсталирано и активирано по подразбиране. Гласовите канали (приложението Гласови канали, образ antimatter-next) са постоянни стаи за обаждания, изградени върху Обаждания: те изискват Обаждания да е активирано и използват същите настройки, портове и сървъри.
Приложението Обаждания изпълнява медиен сървър вътре в Antimatter. Уеб приложението, десктоп приложението и мобилните приложения се свързват с него чрез WebRTC:
- сигнализирането минава през обикновеното уеб свързване (вашия HTTPS прокси);
- медията (аудио, видео, споделяне на екран) не минава през него: тя отива директно към сървъра на порта за обаждания, по подразбиране 8443 UDP и TCP.
Настройките се намират в Системна конзола › Приставка › Обаждания. Всяка от тях може да се зададе и с променлива на средата AM_CALLS_ за услугата antimatter, която има предимство пред Системната конзола и блокира настройката там. Старите имена MM_CALLS_ също действат.
Проверете тези след инсталацията
- Отворете порта за обаждания. Разрешете 8443/udp и 8443/tcp във firewall-а на сървъра и на вашия облачен доставчик.
- Проверете режима за тестване. Режимът за тестване (
DefaultEnabled) е изключен по подразбиране, така че всеки може да стартира обаждания. Включете го (Вкл.) в Системна конзола › Приставки › Обаждания, за да разрешите стартирането на обаждания в канали само на системните администратори, докато проверите дали обажданията работят, след което го изключете отново. Променливата еAM_CALLS_DEFAULT_ENABLED:trueозначава, че режимът за тестване е изключен. Сървър, мигриран от Mattermost, запазва избора в конфигурацията си. - Решете въпроса с видеото. Опцията Разрешаване на видео (
EnableVideo,AM_CALLS_ENABLE_VIDEO) е включена по подразбиране: хората могат да включват камерите си навсякъде, където обажданията са разрешени – в директни и групови съобщения и в канали. В гласовите канали решението се взема от опцията Разрешаване на видео в гласови канали на приложението „Гласови канали“. Ако я изключите, никой няма да може да включи камера, дори в гласови канали. - Зад NAT, задайте публичния адрес (следващата секция).
Къде са активни обажданията
Всяка общност има тип – Работно пространство или Гилдия (вижте Гилдия или работно пространство). Канал, чиито администратори не са включили или изключили обажданията, следва типа на общността:
- в работно пространство каналите следват настройките по подразбиране на сървъра: обажданията са включени за всички, докато тестовият режим е изключен;
- в гилдия обажданията в каналите са изключени: хората разговарят в гласови канали. Администраторите на канала и общността все пак могат да включат обажданията в даден канал.
Собствената настройка на канала винаги има приоритет. Директните и груповите съобщения не принадлежат към общност: обажданията в тях са активни за всички, докато режимът за тестване е изключен. Промяната на типа на общността се прилага за обажданията в рамките на 30 секунди.
Портове, NAT и STUN
| Настройка | Променлива | По подразбиране |
|---|---|---|
| Порт на RTC сървъра (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| Порт на RTC сървъра (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| Адрес на 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 participants | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (без ограничение) | Най-голям брой участници в едно обаждане. |
| Allow screen sharing | (Системна конзола) | включено | Позволява на участниците да споделят екрана си. |
| Enable call ringing | AM_CALLS_ENABLE_RINGING | включено | Звъни на другите участници в директно или групово съобщение, когато в него започне обаждане. |
| Enable simulcast for screen sharing (Experimental) | (Системна конзола) | изключено | Изпраща споделянето на екран в няколко качествени нива. |
| Enable AV1 codec for screen sharing (Experimental) | (Системна конзола) | изключено | Игнорира се, докато simulcast е включено. |
Приложението „Гласови канали“ има две настройки в Системна конзола › Приставки › Гласови канали: Присъединяване при отваряне на гласов канал (включено по подразбиране) и Разрешаване на видео в гласови канали (включено по подразбиране, но вижте видеото по-горе). Гласът е тип канал, който се избира при създаването на канала (вижте Създаване на канал); няма по-късна стъпка за „превръщане в гласов канал“. Двете настройки се отнасят за всеки гласов канал. За създаването му е необходимо приложението „Гласови канали“ да е активно; без него опцията Глас е сива в диалога за създаване на канал.

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).

Настройка
Задайте следните на услугата 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_TRANSCRIPTIONS | true |
| Call transcriber API | AM_CALLS_TRANSCRIBE_API | openai (показано като "OpenAI-compatible API (no job service)") |
| Speech-to-text API URL | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | Базовият URL на API-то, включително /v1. |
| Speech-to-text model | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | Името на модела, както го познава API-то, например whisper-1. Задължително. |
| Speech-to-text API key | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | Изпраща се като bearer token. Оставете го празно, ако API-то не изисква такъв. |
| Включване на живи субтитри (Бета) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true за субтитри по време на обаждането. |
| Език на живите субтитри | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | Говореният език, като двузнаков код (по подразбиране en). Изпраща се и към API-то за преобразуване на реч в текст за транскриптите, така че задайте го дори без субтитри. |
| Резюмиране на транскриптите | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true за 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 в контролите на обаждането; всички участници виждат, че се записва, а записът се публикува в нишката на обаждането, когато спре. Обажданията в гласови канали нямат нишка, затова не могат да бъдат записвани. За транскрипции и субтитри отделно, конфигурацията за разпознаване на реч по-горе е по-проста: тя не изисква услуга за задачи.