Rozmowy i głos
Rozmowy i kanały głosowe przesyłają audio, wideo i udostępnianie ekranu bezpośrednio do serwera na jego własnym porcie. Ta strona omawia stronę sieciową, ustawienia do sprawdzenia po instalacji oraz transkrypcję z modelem rozpoznawania mowy, który uruchamiasz samodzielnie.
Jak działają rozmowy
Rozmowy są dostarczane przez aplikację Połączenia (id com.mattermost.calls), która jest zainstalowana i włączona domyślnie. Kanały głosowe (aplikacja Voice Channels, obraz antimatter-next) to stałe pokoje do rozmów oparte na Połączeniach: wymagają włączonej aplikacji Połączenia i korzystają z tych samych ustawień, portów i serwerów.
Aplikacja Rozmowy uruchamia serwer mediów wewnątrz Antimatter. Aplikacja webowa, aplikacja desktopowa i aplikacje mobilne łączą się z nim za pomocą WebRTC:
- sygnalizacja przechodzi przez zwykłe połączenie webowe (Twój proxy HTTPS);
- media (audio, wideo, udostępnianie ekranu) nie przechodzą przez niego: są przesyłane bezpośrednio do serwera na porcie rozmów, domyślnie 8443 UDP i TCP.
Ustawienia znajdują się w Konsola systemu › Wtyczki › Połączenia. Każde z nich można również ustawić za pomocą zmiennej środowiskowej AM_CALLS_ na usłudze antimatter, która ma wtedy pierwszeństwo przed Konsolą systemu i blokuje zmianę tego ustawienia. Działają również starsze nazwy MM_CALLS_.
Sprawdź to po instalacji
- Otwórz port rozmów. Zezwól na 8443/udp i 8443/tcp w zaporze firewall serwera oraz dostawcy chmury.
- Sprawdź tryb testowy. Tryb testowy (
DefaultEnabled) jest domyślnie wyłączony, dzięki czemu wszyscy mogą rozpoczynać rozmowy. Włącz go (Wł) w Konsola systemu › Wtyczki › Połączenia, aby podczas sprawdzania działania rozmów tylko administratorzy systemu mogli je rozpoczynać w kanałach, a następnie wyłącz go ponownie. Zmienną jestAM_CALLS_DEFAULT_ENABLED: wartośćtrueoznacza, że tryb testowy jest wyłączony. Serwer przeniesiony z Mattermosta zachowuje wybór zapisany w jego konfiguracji. - Decyzja dotycząca wideo. Włącz wideo (
EnableVideo,AM_CALLS_ENABLE_VIDEO) jest domyślnie włączone: użytkownicy mogą włączyć kamerę wszędzie tam, gdzie rozmowy są dostępne, w wiadomościach bezpośrednich i grupowych oraz w kanałach. W kanałach głosowych decyduje opcja Dozwól wideo w kanałach głosowych w aplikacji Kanały głosowe. Wyłącz ją, a nikt nie będzie mógł włączyć kamery, nawet w kanałach głosowych. - W przypadku NAT ustaw publiczny adres (następna sekcja).
Gdzie rozmowy są włączone
Każda społeczność ma typ: Miejsce pracy lub Społeczność (patrz Typ nowych społeczności). Kanał, w którym administratorzy nie włączyli ani nie wyłączyli rozmów, podąża za typem swojej społeczności:
- w miejscu pracy kanały podążają za domyślnym ustawieniem serwera: rozmowy są włączone dla wszystkich, gdy tryb testowy jest wyłączony;
- w społeczności rozmowy są wyłączone w kanałach: osoby rozmawiają zamiast tego w kanałach głosowych. Administratorzy kanału i społeczności mogą nadal włączyć rozmowy w danym kanale.
Własne ustawienie kanału zawsze ma pierwszeństwo. Wiadomości bezpośrednie i grupowe nie należą do społeczności: rozmowy są tam włączone dla wszystkich, gdy tryb testowy jest wyłączony. Zmiana typu społeczności ma wpływ na rozmowy w ciągu 30 sekund.
Porty, NAT i STUN
| Ustawienie | Zmienna | Domyślnie |
|---|---|---|
| Port serwera RTC (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| Port serwera RTC (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| Adres serwera RTC (UDP), (TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | puste: wszystkie adresy |
| Nadpisanie hosta ICE | AM_CALLS_ICE_HOST_OVERRIDE | puste: wykrywane przez STUN |
| Nadpisanie portu hosta ICE | AM_CALLS_ICE_HOST_PORT_OVERRIDE | puste: port serwera |
| Konfiguracja serwerów ICE | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (Eksperymentalne) Włącz wsparcie dla IPv6 | (Konsola systemu) | Wyłączone |
Porty muszą mieścić się w zakresie od 80 do 49151. W pliku compose witryny zmień CALLS_PORT w .env: ustawia on obie zmienne i publikuje port, ten sam numer na hoście i w kontenerze. Klienci najpierw próbują UDP, a w razie niepowodzenia przechodzą na TCP na tym samym porcie.
Adres, pod który klienci wysyłają dane mediów
Serwer informuje każdego klienta o adresie, pod który ma wysyłać dane mediów (jego „kandydat hosta”). Domyślnie znajduje swój publiczny adres, pytając serwer STUN, czyli publiczny serwis, który odpowiada adresem i portem, z których pochodzi żądanie. Domyślnym serwerem jest publiczny serwer STUN firmy Cloudflare, stun:stun.cloudflare.com:3478. To nie tylko serwer z niego korzysta: każdy klient dołączający do rozmowy również pyta go o swój publiczny adres. Serwer STUN widzi tylko adresy IP i porty, nigdy dźwięk, wideo ani wiadomości z rozmów.
Serwer, który nadal ma w Konfiguracji serwerów ICE zapisany serwer STUN Mattermost (stun.global.calls.mattermost.com), np. po przejściu z Mattermost, używa zamiast niego serwera Cloudflare. Zapisane ustawienie nie jest zmieniane.
Ustaw adres samodzielnie, gdy:
- serwer znajduje się za NAT lub ma kilka publicznych adresów: ustaw Nadpisanie hosta ICE na publiczny adres IP (lub nazwę hosta, która na niego wskazuje);
- NAT mapuje inny publiczny port na 8443: ustaw również Nadpisanie portu hosta ICE na ten publiczny port;
- serwer nie ma dostępu do Internetu lub nie chcesz, aby serwer i klienci kontaktowali się z zewnętrznym serwerem STUN: ustaw Nadpisanie hosta ICE i wyczyść listę STUN za pomocą
AM_CALLS_ICE_SERVERS_CONFIGS=[]. Gdy ustawisz Nadpisanie hosta ICE, serwer nie pyta już serwera STUN o swój adres; pusta lista uniemożliwia klientom zadawanie takich pytań.
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
Aby korzystać ze STUN bez udziału strony trzeciej, uruchom własny serwer STUN (serwer TURN, np. coturn, również odpowiada na żądania STUN) i podaj go w Konfiguracji serwerów ICE zamiast domyślnego, jak w przykładzie TURN poniżej.
W sieci lokalnej użyj adresu LAN serwera. Po zmianie portów, adresów lub ustawień ICE uruchom serwer ponownie albo wyłącz i włącz aplikację Calls: serwer mediów jest konfigurowany przy starcie aplikacji.
TURN, dla restrykcyjnych zapór sieciowych
Niektóre sieci blokują zarówno UDP, jak i połączenia wychodzące na nietypowe porty TCP. Osoby korzystające z takich sieci potrzebują serwera TURN, który przesyła dane multimedialne przez port, do którego mają dostęp (często 443). Antimatter nie zawiera wbudowanego serwera TURN; uruchom serwer TURN, np. coturn, i dodaj go do Konfiguracji serwerów ICE, czyli listy JSON:
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- Przy użyciu wspólnego hasła (parametr
use-auth-secretw coturn) wpisz to samo hasło w polu Statyczny klucz uwierzytelniający TURN (AM_CALLS_TURN_STATIC_AUTH_SECRET): serwer wydaje każdemu klientowi krótkoterminowe dane uwierzytelniające, ważne przez czas określony w polu Ważność danych uwierzytelniających TURN (minuty) (domyślnie 240). - W przypadku stałych danych uwierzytelniających dodaj do wpisu TURN pola
"username"i"credential". - Opcja TURN po stronie serwera (wyłączona domyślnie) również używa serwerów TURN dla połączeń inicjowanych przez serwer.
Inne ustawienia rozmów
| Ustawienie | Zmienna | Domyślnie | Opis |
|---|---|---|---|
| Maksymalna liczba uczestników rozmowy | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (brak limitu) | Największa liczba osób, które mogą brać udział w jednej rozmowie. |
| Zezwalaj na udostępnianie ekranu | (Konsola systemu) | włączone | Umożliwia uczestnikom udostępnianie ekranu. |
| Włącz dzwonienie przy rozmowach | AM_CALLS_ENABLE_RINGING | włączone | Dzwoni do pozostałych osób w wiadomości bezpośredniej lub grupowej, gdy w niej rozpocznie się rozmowa. |
| Włącz simulcast dla udostępniania ekranu (eksperymentalne) | (Konsola systemu) | Wyłączone | Przesyła udostępniany ekran w kilku jakościach. |
| Włącz kodek AV1 dla udostępniania ekranu (eksperymentalne) | (Konsola systemu) | Wyłączone | Ignorowane, gdy simulcast jest włączony. |
Aplikacja Kanały głosowe ma dwa ustawienia, dostępne w Konsola systemu › Wtyczki › Kanały głosowe: Dołączaj przy otwieraniu kanału głosowego (włączone domyślnie) oraz Zezwalaj na wideo w kanałach głosowych (włączone domyślnie, ale patrz wideo powyżej). Administratorzy społeczności zmieniają kanał w kanał głosowy w jego ustawieniach.
AM_CALLS_DISABLE=true. Wtedy przestaną też działać kanały głosowe.Większe serwery: zewnętrzny rtcd
Domyślnie jeden serwer Antimatter obsługuje wszystkie dane mediów z rozmów. W przypadku wielu równoległych rozmów lub aby odciążyć serwer czatu od przetwarzania mediów, aplikacja Rozmowy może przekazać media do rtcd, osobnego serwera mediów (otwartoźródłowy rtcd od Mattermost, wersja 0.17 lub nowszy). Ustaw Adres URL usługi RTCD (AM_CALLS_RTCD_SERVICE_URL), na przykład https://rtcd.example.com: wtedy wszystkie rozmowy przechodzą przez ten serwer, a klienci wysyłają swoje media do własnego portu rtcd, a nie do portu Antimatter. Dane uwierzytelniające można podać za pomocą AM_CALLS_RTCD_CLIENT_ID i AM_CALLS_RTCD_AUTH_KEY; bez nich aplikacja rejestruje się samodzielnie w rtcd. Licencja nie jest wymagana. Aplikacja Rozmowy wyświetla administratorom ostrzeżenie zalecające użycie rtcd, gdy na serwerze często odbywa się więcej niż 50 rozmów jednocześnie.
Transkrypcja i napisy na żywo
Antimatter może transkrybować rozmowy za pomocą modelu rozpoznawania mownego, który uruchamiasz samodzielnie, oraz wyświetlać napisy na żywo podczas mówienia. Antimatter obsługuje dowolny serwer oferujący endpoint zgodny z OpenAI /v1/audio/transcriptions, na przykład serwer Whisper w Twojej sieci. Nie jest wymagana żadna dodatkowa usługa od Antimatter.
Jak to działa
- Gospodarz rozmowy rozpoczyna transkrypcję za pomocą opcji Transkrybuj rozmowę w sterowaniu rozmową. Odznaka Transkrypcja informuje o tym wszystkich.
- Aplikacja każdego uczestnika nasłuchuje jego własnego mikrofonu, dzieli mowę na krótkie fragmenty (do 12 sekund, nigdy podczas wyciszenia) i wysyła je do Antimatter, który przekazuje je do Twojego serwera rozpoznawania mownego.
- Po włączeniu napisów na żywo tekst każdego fragmentu jest natychmiast wyświetlany uczestnikom jako napis.
- Gdy transkrypcja się zatrzyma lub rozmowa się zakończy, bot Rozmów publikuje transkrypcję jako plik tekstowy i plik napisów WebVTT w wątku rozmowy (w kanałach głosowych – w kanale).
- Po włączeniu opcji Podsumowuj transkrypcje, domyślny agent aplikacji Agentów publikuje również podsumowanie w wątku (patrz AI).

Konfiguracja
Ustaw te parametry w usłudze 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
| Ustawienie | Zmienna | Co wpisać |
|---|---|---|
| Włącz transkrypcję rozmów (Beta) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| API transkrybera rozmów | AM_CALLS_TRANSCRIBE_API | openai (wyświetlane jako „API zgodne z OpenAI (bez usługi zadań)”) |
| Adres URL API rozpoznawania mownego | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | Podstawowy adres URL API, łącznie z /v1. |
| Model rozpoznawania mownego | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | Nazwa modelu, tak jak ją zna API, na przykład whisper-1. Pole wymagane. |
| Klucz API rozpoznawania mownego | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | Wysyłany jako token bearer. Pozostaw puste, jeśli API nie wymaga klucza. |
| Włącz napisy na żywo (Beta) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true, aby wyświetlać napisy podczas rozmowy. |
| Język napisów na żywo | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | Mówiony język, jako dwuliterowy kod (domyślnie en). Jest on również przekazywany do API rozpoznawania mowy w celu tworzenia transkrypcji, więc ustaw go nawet wtedy, gdy nie używasz napisów. |
| Podsumowuj transkrypcje | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true, aby generować podsumowanie AI po zakończeniu rozmowy. |
openai: rozpoczęcie nagrywania spowodowałoby wtedy próbę uruchomienia transkrybera usługi job-service, co zakończyłoby się błędem.Audio wszystkich osób, które mówią, gdy transkrypcja jest włączona, jest przesyłane do serwera rozpoznawania mowy, który skonfigurowałeś, a transkrypcja jest publikowana w miejscu, w którym może ją przeczytać każdy w kanale. Poinformuj o tym użytkowników i, jeśli rozmowy są poufne, utrzymuj ten serwer w swojej własnej sieci.
Nagrania
Nagrywanie rozmów (oraz transkrypcja za pomocą wbudowanego whisper.cpp lub transkrybera Azure) odbywa się w osobnych kontenerach uruchamianych przez usługę zadań, open-source'owy calls-offloader od Mattermost, który samodzielnie wdrażasz obok Antimatter. Ustawienia to Włącz nagrywanie rozmów (AM_CALLS_ENABLE_RECORDINGS, domyślnie wyłączony), Adres URL usługi zadań (AM_CALLS_JOB_SERVICE_URL), Maksymalny czas nagrywania rozmowy (domyślnie 60 minut, od 15 do 180) oraz Jakość nagrywania rozmów (niska, średnia lub wysoka; domyślnie średnia). Nie jest wymagana licencja. Po włączeniu nagrywania, gospodarz rozmowy rozpoczyna i zatrzymuje nagranie za pomocą opcji Nagraj rozmowę w sterowaniu rozmową; wszyscy uczestnicy rozmowy widzą, że jest ona nagrywana, a nagranie jest publikowane w wątku rozmowy po jej zakończeniu. Rozmowy w kanałach głosowych nie mają wątków, więc nie można ich nagrywać. W przypadku wyłącznie transkrypcji i napisów, konfiguracja rozpoznawania mowy opisana powyżej jest prostsza: nie wymaga usługi zadań.