Anrufe und Sprache
Anrufe und Sprachkanäle senden Audio, Video und Bildschirmfreigabe direkt an den Server über dessen eigenen Port. Diese Seite behandelt die Netzwerkkonfiguration, die Einstellungen, die nach der Installation zu prüfen sind, und die Transkription mit einem Speech-to-Text-Modell, das Sie selbst betreiben.
So funktionieren Anrufe
Anrufe werden von der App Calls (id com.mattermost.calls) bereitgestellt, die standardmäßig installiert und aktiviert ist. Sprachkanäle (die App Voice Channels, antimatter-next-Image) sind permanente Anrufräume auf Basis von Calls: Sie erfordern, dass Calls aktiviert ist, und verwenden dieselben Einstellungen, Ports und Server.
Die Calls-App betreibt einen Medienserver innerhalb von Antimatter. Die Web-App, die Desktop-App und die mobilen Apps verbinden sich mit diesem über WebRTC:
- das Signaling läuft über die normale Webverbindung (Ihr HTTPS-Proxy);
- die Medien (Audio, Video, Bildschirmfreigabe) nicht: Sie gehen direkt an den Server über den Anruf-Port, standardmäßig 8443 UDP und TCP.
Die Einstellungen befinden sich unter Systemkonsole › Plugins › Calls. Jede einzelne kann auch über eine AM_CALLS_-Umgebungsvariable im antimatter-Dienst gesetzt werden, die dann Vorrang vor der Systemkonsole hat und die Einstellung dort sperrt. Die veralteten MM_CALLS_-Namen funktionieren ebenfalls.
Prüfen Sie dies nach der Installation
- Öffnen Sie den Anruf-Port. Erlauben Sie 8443/udp und 8443/tcp in der Firewall des Servers und Ihres Cloud-Anbieters.
- Testmodus prüfen. Testmodus (
DefaultEnabled) ist standardmäßig deaktiviert, sodass alle Anrufe starten können. Schalten Sie ihn in Systemkonsole › Plugins › Calls auf Ein, damit nur Systemadministratoren Anrufe in Kanälen starten können, während Sie prüfen, ob die Anrufe funktionieren, und schalten Sie ihn anschließend wieder aus. Die Variable istAM_CALLS_DEFAULT_ENABLED:truebedeutet, dass der Testmodus deaktiviert ist. Ein von Mattermost migrierter Server behält die in seiner Konfiguration gespeicherte Auswahl bei. - Entscheidung zum Video. Video aktivieren (
EnableVideo,AM_CALLS_ENABLE_VIDEO) ist standardmäßig aktiviert: Personen können ihre Kamera überall dort einschalten, wo Anrufe aktiviert sind, in Direktnachrichten, Gruppennachrichten und Kanälen. In Sprachkanälen entscheidet die Einstellung Video in Sprachkanälen erlauben der App Sprachkanäle. Deaktivieren Sie diese, und niemand kann mehr eine Kamera einschalten, auch nicht in Sprachkanälen. - Hinter NAT die öffentliche Adresse festlegen (nächster Abschnitt).
Wo Anrufe aktiviert sind
Jede Community hat eine Art, entweder Arbeitsbereich oder Gilde (siehe Gilde oder Arbeitsbereich). Ein Kanal, dessen Administratoren Anrufe weder aktiviert noch deaktiviert haben, folgt der Art seiner Community:
- In einem Arbeitsbereich folgen Kanäle der Serverstandard-Einstellung: Anrufe sind für alle aktiviert, solange der Testmodus deaktiviert ist;
- In einer Gilde sind Anrufe in Kanälen deaktiviert: Stattdessen wird in Sprachkanälen kommuniziert. Kanal- und Community-Administratoren können Anrufe in einem Kanal weiterhin aktivieren.
Die eigene Einstellung eines Kanals hat immer Vorrang. Direktnachrichten und Gruppennachrichten gehören keiner Community an: Anrufe sind dort für alle aktiviert, solange der Testmodus deaktiviert ist. Eine Änderung des Community-Typs wirkt sich innerhalb von 30 Sekunden auf die Anrufe aus.
Ports, NAT und STUN
| Einstellung | Variable | Standard |
|---|---|---|
| RTC Server Port (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| RTC Server Port (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| RTC Server Address (UDP), (TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | leer: alle Adressen |
| ICE-Host-Override | AM_CALLS_ICE_HOST_OVERRIDE | leer: über STUN ermittelt |
| ICE-Host-Port-Override | AM_CALLS_ICE_HOST_PORT_OVERRIDE | leer: der Serverport |
| Konfiguration der ICE-Server | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (Experimentell) IPv6-Unterstützung aktivieren | (Systemkonsole) | aus |
Die Ports müssen zwischen 80 und 49151 liegen. Ändern Sie in der Compose-Datei der Site CALLS_PORT in .env: Damit werden beide Variablen gesetzt und der Port veröffentlicht, und zwar mit derselben Nummer auf dem Host und im Container. Die Clients versuchen zuerst UDP und wechseln bei Bedarf auf TCP auf demselben Port.
Die Adresse, an die die Clients die Medien senden
Der Server teilt jedem Client die Adresse mit, an die dieser die Medien senden soll (sein „Host-Kandidat“). Standardmäßig ermittelt er seine öffentliche Adresse, indem er einen STUN-Server abfragt, einen öffentlichen Dienst, der die Adresse und den Port zurückgibt, von denen eine Anfrage stammt. Standardmäßig wird der öffentliche STUN-Server von Cloudflare verwendet, stun:stun.cloudflare.com:3478. Der Server ist nicht der Einzige, der ihn nutzt: Jeder Client, der einem Anruf beitritt, fragt ihn ebenfalls nach seiner eigenen öffentlichen Adresse ab. Der STUN-Server sieht nur IP-Adressen und Ports, niemals Audio, Video oder Nachrichten aus Anrufen.
Ein Server, in dessen Konfiguration der ICE-Server noch der STUN-Server von Mattermost (stun.global.calls.mattermost.com) gespeichert ist, zum Beispiel nach einem Wechsel von Mattermost, verwendet stattdessen den von Cloudflare. Die gespeicherte Einstellung wird nicht geändert.
Setzen Sie die Adresse manuell, wenn:
- der Server hinter einer NAT liegt oder mehrere öffentliche Adressen hat: Setzen Sie ICE-Host-Override auf die öffentliche IP-Adresse (oder einen Hostnamen, der darauf aufgelöst wird);
- die NAT einen anderen öffentlichen Port auf 8443 abbildet: Setzen Sie auch ICE-Host-Port-Override auf diesen öffentlichen Port;
- der Server keinen Internetzugang hat oder Sie nicht möchten, dass der Server und die Clients einen externen STUN-Server kontaktieren: Setzen Sie ICE-Host-Override und leeren Sie die STUN-Liste mit
AM_CALLS_ICE_SERVERS_CONFIGS=[]. Wenn ICE-Host-Override gesetzt ist, fragt der Server keinen STUN-Server mehr nach seiner Adresse ab; die leere Liste verhindert, dass die Clients einen abfragen.
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
Um STUN ohne Drittanbieter zu nutzen, betreiben Sie einen eigenen STUN-Server (ein TURN-Server wie coturn beantwortet ebenfalls STUN-Anfragen) und listen Sie ihn in der Konfiguration der ICE-Server auf, wie im TURN-Beispiel unten.
Verwenden Sie in einem rein lokalen Netzwerk die LAN-Adresse des Servers. Starten Sie den Server neu, nachdem Sie Ports, Adressen oder ICE-Einstellungen geändert haben, oder deaktivieren und aktivieren Sie die Calls-App: Der Medien-Server wird beim Start der App eingerichtet.
TURN für strenge Firewalls
Manche Netzwerke blockieren sowohl UDP als auch ausgehende Verbindungen zu ungewöhnlichen TCP-Ports. Nutzer in solchen Netzen benötigen einen TURN-Server, der die Medien über einen erreichbaren Port (oft 443) weiterleitet. Antimatter enthält keinen; betreiben Sie einen TURN-Server wie coturn und fügen Sie ihn zu ICE Servers Configurations hinzu, einer JSON-Liste:
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- Bei Verwendung eines gemeinsamen Geheimnisses (coturns
use-auth-secret) geben Sie dasselbe Geheimnis in TURN Static Auth Secret (AM_CALLS_TURN_STATIC_AUTH_SECRET) ein: Der Server stellt jedem Client kurzlebige Zugangsdaten aus, die für die Dauer von TURN Credentials Expiration (minutes) (Standard: 240) gültig sind. - Bei festen Zugangsdaten fügen Sie stattdessen
"username"und"credential"zum TURN-Eintrag hinzu. - Server Side TURN (standardmäßig deaktiviert) verwendet die TURN-Server auch für Verbindungen, die vom Server initiiert werden.
Weitere Anruf-Einstellungen
| Einstellung | Variable | Standard | Funktion |
|---|---|---|---|
| Max call participants | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (keine Beschränkung) | Maximale Anzahl von Personen in einem Anruf. |
| Allow screen sharing | (Systemkonsole) | an | Erlaubt Teilnehmern, ihren Bildschirm zu teilen. |
| Enable call ringing | AM_CALLS_ENABLE_RINGING | an | Lässt die anderen Personen einer Direktnachricht oder Gruppennachricht klingeln, wenn dort ein Anruf gestartet wird. |
| Enable simulcast for screen sharing (Experimental) | (Systemkonsole) | aus | Sendet Bildschirmfreigaben in mehreren Qualitäten. |
| Enable AV1 codec for screen sharing (Experimental) | (Systemkonsole) | aus | Wird ignoriert, solange Simulcast aktiviert ist. |
Die Voice Channels-App verfügt über zwei Einstellungen in der Systemkonsole › Plugins › Voice Channels: Beim Öffnen eines Sprachkanals beitreten (standardmäßig aktiviert) und Video in Sprachkanälen erlauben (standardmäßig aktiviert, siehe oben unter Video). Stimme ist ein Kanaltyp, der bei der Erstellung des Kanals ausgewählt wird (siehe Kanal erstellen); es gibt keinen nachträglichen Schritt, um einen Kanal in einen Sprachkanal umzuwandeln. Diese beiden Einstellungen gelten weiterhin für jeden Sprachkanal. Für die Erstellung eines solchen Kanals muss die Voice Channels-App aktiv sein; andernfalls ist Stimme im Dialog zum Erstellen eines Kanals ausgegraut.

AM_CALLS_DISABLE=true. Sprachkanäle funktionieren dann ebenfalls nicht mehr.Größere Server: ein externes rtcd
Standardmäßig verarbeitet ein Antimatter-Server alle Anrufmedien. Bei vielen gleichzeitigen Anrufen oder um die Medien vom Chatserver fernzuhalten, kann die Calls-App die Medien an rtcd weitergeben, einen separaten Medienserver (Mattermosts Open-Source-rtcd, Version 0.17 oder neuer). Setzen Sie RTCD service URL (AM_CALLS_RTCD_SERVICE_URL), zum Beispiel https://rtcd.example.com: Alle Anrufe laufen dann darüber, und Clients senden ihre Medien an den eigenen Port von rtcd statt an den von Antimatter. Zugangsdaten können mit AM_CALLS_RTCD_CLIENT_ID und AM_CALLS_RTCD_AUTH_KEY angegeben werden; ohne diese registriert sich die App selbst bei rtcd. Eine Lizenz ist nicht erforderlich. Die Calls-App zeigt Administratoren eine Warnung an, die rtcd empfiehlt, wenn auf einem Server häufig mehr als 50 Personen gleichzeitig in Anrufen sind.
Transkription und Live-Untertitel
Antimatter kann Anrufe mit einem von Ihnen selbst betriebenen Speech-to-Text-Modell transkribieren und während des Sprechens Live-Untertitel anzeigen. Antimatter verwendet jeden Server, der einen OpenAI-kompatiblen /v1/audio/transcriptions-Endpunkt anbietet, wie zum Beispiel einen Whisper-Server in Ihrem Netzwerk. Ein zusätzlicher Dienst von Antimatter ist nicht erforderlich.
So funktioniert es
- Der Host eines Anrufs startet die Transkription mit Anruf transkribieren in den Anrufsteuerungen. Ein Wird transkribiert-Badge informiert alle Teilnehmer.
- Die App jedes Teilnehmers lauscht auf das eigene Mikrofon, schneidet die Sprache in kurze Abschnitte (maximal 12 Sekunden, nie während der Stummschaltung) und sendet sie an Antimatter, die sie an Ihren Speech-to-Text-Server weiterleitet.
- Wenn Live-Untertitel aktiviert sind, wird der Text jedes Abschnitts den Teilnehmern sofort als Untertitel angezeigt.
- Wenn die Transkription gestoppt oder der Anruf beendet wird, postet der Calls-Bot das Transkript als Textdatei und WebVTT-Untertiteldatei im Thread des Anrufs (in Sprachkanälen im Kanal).
- Wenn Transkriptionen zusammenfassen aktiviert ist, postet der Standard-Agent der KI-Chat-App ebenfalls eine Zusammenfassung im Thread (siehe KI).

Einrichtung
Richten Sie dies auf dem antimatter-Dienst ein:
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
| Einstellung | Variable | Was einzugeben ist |
|---|---|---|
| Anruftranskriptionen aktivieren (Beta) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| API für Anruftranskription | AM_CALLS_TRANSCRIBE_API | openai (angezeigt als "OpenAI-kompatible API (ohne Job-Dienst)") |
| URL der Speech-to-Text-API | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | Die Basis-URL der API, einschließlich /v1. |
| Speech-to-Text-Modell | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | Der Modellname, wie ihn die API kennt, zum Beispiel whisper-1. Erforderlich. |
| API-Schlüssel für Speech-to-Text | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | Wird als Bearer-Token gesendet. Lassen Sie es leer, wenn die API keinen Schlüssel benötigt. |
| Live-Untertitel aktivieren (Beta) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true für Untertitel während des Anrufs. |
| Sprache der Live-Untertitel | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | Die gesprochene Sprache als zweistelliger Code (Standardmäßig en). Sie wird auch für Transkriptionen an die Speech-to-Text-API gesendet, daher sollte sie auch ohne Untertitel festgelegt werden. |
| Transkriptionen zusammenfassen | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true für eine KI-Zusammenfassung nach dem Anruf. |
openai-Transkriber ein: Der Start einer Aufnahme würde dann versuchen, den Job-Service-Transkriber zu starten, was fehlschlagen würde.Das Audio aller Personen, die während der aktiven Transkription sprechen, wird an den von Ihnen konfigurierten Speech-to-Text-Server gesendet, und das Transkript wird dort veröffentlicht, wo es alle im Kanal lesen können. Informieren Sie Ihre Benutzer und halten Sie diesen Server in Ihrem eigenen Netzwerk, wenn die Anrufe vertraulich sind.
Aufnahmen
Die Aufnahme von Anrufen (und die Transkription mit dem integrierten whisper.cpp- oder Azure-Transkriptionsdienst) läuft in separaten Containern, die von einem Job-Dienst gestartet werden: dem quelloffenen calls-offloader von Mattermost, den Sie selbst neben Antimatter bereitstellen. Die Einstellungen sind Aufnahmen von Anrufen aktivieren (AM_CALLS_ENABLE_RECORDINGS, standardmäßig deaktiviert), URL des Job-Dienstes (AM_CALLS_JOB_SERVICE_URL), Maximale Dauer der Anrufaufnahmen (standardmäßig 60 Minuten, zulässig sind 15 bis 180) und Qualität der Anrufaufnahmen (niedrig, mittel oder hoch; standardmäßig mittel). Es ist keine Lizenz erforderlich. Sind Aufnahmen aktiviert, kann der Host eines Anrufs die Aufnahme über Anruf aufnehmen in den Anrufsteuerungen starten und beenden. Alle Teilnehmer sehen, dass aufgenommen wird, und die Aufnahme wird beim Beenden im Thread des Anrufs gepostet. Anrufe in Sprachkanälen haben keinen Thread und können daher nicht aufgenommen werden. Für reine Transkripte und Untertitel ist die oben beschriebene Speech-to-Text-Konfiguration einfacher: Sie erfordert keinen Job-Dienst.