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

  1. Otwórz port rozmów. Zezwól na 8443/udp i 8443/tcp w zaporze firewall serwera oraz dostawcy chmury.
  2. 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ą jest AM_CALLS_DEFAULT_ENABLED: wartość true oznacza, że tryb testowy jest wyłączony. Serwer przeniesiony z Mattermosta zachowuje wybór zapisany w jego konfiguracji.
  3. 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.
  4. 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

UstawienieZmiennaDomyślnie
Port serwera RTC (UDP)AM_CALLS_UDP_SERVER_PORT8443
Port serwera RTC (TCP)AM_CALLS_TCP_SERVER_PORT8443
Adres serwera RTC (UDP), (TCP)AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESSpuste: wszystkie adresy
Nadpisanie hosta ICEAM_CALLS_ICE_HOST_OVERRIDEpuste: wykrywane przez STUN
Nadpisanie portu hosta ICEAM_CALLS_ICE_HOST_PORT_OVERRIDEpuste: port serwera
Konfiguracja serwerów ICEAM_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-secret w 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

UstawienieZmiennaDomyślnieOpis
Maksymalna liczba uczestników rozmowyAM_CALLS_MAX_CALL_PARTICIPANTS0 (brak limitu)Największa liczba osób, które mogą brać udział w jednej rozmowie.
Zezwalaj na udostępnianie ekranu(Konsola systemu)włączoneUmożliwia uczestnikom udostępnianie ekranu.
Włącz dzwonienie przy rozmowachAM_CALLS_ENABLE_RINGINGwłączoneDzwoni 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łączonePrzesyła udostępniany ekran w kilku jakościach.
Włącz kodek AV1 dla udostępniania ekranu (eksperymentalne)(Konsola systemu)WyłączoneIgnorowane, 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.

Aby całkowicie wyłączyć rozmowy, wyłącz aplikację Rozmowy w Konsola systemu › Wtyczki › Zarządzanie wtyczkami lub ustaw 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).
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.
Po zakończeniu rozmowy: transkrypcja i jej podsumowanie w wątku rozmowy.

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
UstawienieZmiennaCo wpisać
Włącz transkrypcję rozmów (Beta)AM_CALLS_ENABLE_TRANSCRIPTIONStrue
API transkrybera rozmówAM_CALLS_TRANSCRIBE_APIopenai (wyświetlane jako „API zgodne z OpenAI (bez usługi zadań)”)
Adres URL API rozpoznawania mownegoAM_CALLS_TRANSCRIBE_API_OPEN_AIURLPodstawowy adres URL API, łącznie z /v1.
Model rozpoznawania mownegoAM_CALLS_TRANSCRIBE_API_OPEN_AI_MODELNazwa modelu, tak jak ją zna API, na przykład whisper-1. Pole wymagane.
Klucz API rozpoznawania mownegoAM_CALLS_TRANSCRIBE_API_OPEN_AI_KEYWysyłany jako token bearer. Pozostaw puste, jeśli API nie wymaga klucza.
Włącz napisy na żywo (Beta)AM_CALLS_ENABLE_LIVE_CAPTIONStrue, aby wyświetlać napisy podczas rozmowy.
Język napisów na żywoAM_CALLS_LIVE_CAPTIONS_LANGUAGEMó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 transkrypcjeAM_CALLS_SUMMARIZE_TRANSCRIPTIONStrue, aby generować podsumowanie AI po zakończeniu rozmowy.
W Konsoli systemu ustawienia transkrypcji pojawiają się dopiero po włączeniu opcji Włącz nagrywanie rozmów, choć ten rodzaj transkrypcji nie wymaga nagrywania. Ustawienie ich za pomocą zmiennych opisanych powyżej pozwala tego uniknąć. Nie włączaj nagrywania jednocześnie z transkryberem 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ń.