Gesprekken en spraak
Gesprekken en spraakkanaal sturen audio, video en het delen van het scherm rechtstreeks naar de server op hun eigen port. Deze pagina behandelt de netwerkzijde, de instellingen die u na de installatie moet controleren, en transcriptie met een speech-to-text-model dat u zelf draait.
Hoe gesprekken werken
Gesprekken worden aangeboden door de Gesprekken-app (id com.mattermost.calls), die standaard is geïnstalleerd en ingeschakeld. Spraakkanaal (de Spraakkanaal-app, antimatter-next-image) zijn permanente gespreksruimten die zijn gebouwd op Gesprekken: ze vereisen dat Gesprekken is ingeschakeld en gebruiken dezelfde instellingen, poorten en servers.
De Gesprekken-app draait een mediaserver binnen Antimatter. De webapp, de desktopapp en de mobiele apps verbinden ermee via WebRTC:
- de signalering verloopt via de normale webverbinding (uw HTTPS-proxy);
- de media (audio, video, het delen van het scherm) niet: die gaat rechtstreeks naar de server op de gespreksport, standaard 8443 UDP en TCP.
De instellingen staan in Systeem console › Plugins › Calls. Elke instelling kan ook worden ingesteld met een AM_CALLS_omgevingsvariabele voor de antimatter-service. Deze variabele heeft voorrang op de Systeem console en vergrendelt de instelling daar. De verouderde MM_CALLS_-namen werken ook.
Controleer dit na de installatie
- Open de gespreksport. Sta 8443/udp en 8443/tcp toe in de firewall van de server en van uw cloudprovider.
- Controleer de testmodus. Testmodus (
DefaultEnabled) is standaard uit, zodat iedereen gesprekken kan starten. Zet deze Aan in Systeem console › Plugins › Calls om alleen systeembeheerders toe te staan om gesprekken in kanalen te starten, terwijl u controleert of gesprekken werken. Zet de modus daarna weer uit. De variabele isAM_CALLS_DEFAULT_ENABLED:truebetekent dat de testmodus uit is. Een server die is overgezet van Mattermost behoudt de keuze die in de configuratie is opgeslagen. - Bepaal de video-instelling. Video inschakelen (
EnableVideo,AM_CALLS_ENABLE_VIDEO) is standaard aan: mensen kunnen hun camera inschakelen overal waar gesprekken zijn ingeschakeld, in privé- en groepsberichten en in kanalen. In spraakkanaal wordt dit bepaald door de instelling Video toestaan in spraakkanaal van de Spraakkanaal-app. Zet deze uit en niemand kan een camera inschakelen, ook niet in spraakkanaal. - Stel het openbare adres in achter NAT (volgende sectie).
Waar gesprekken zijn ingeschakeld
Elke community heeft een type, Werkplek of Community (zie Type van nieuwe communities). Een kanaal waarvan de beheerders gesprekken niet hebben ingeschakeld of uitgeschakeld, volgt het type van de community:
- in een Werkplek volgen kanalen de serverstandaard: gesprekken zijn voor iedereen ingeschakeld, zolang de testmodus uit is;
- in een Community zijn gesprekken in kanalen uitgeschakeld: mensen praten in spraakkanaal. Kanaal- en communitybeheerders kunnen gesprekken in een kanaal nog steeds inschakelen.
De eigen instelling van een kanaal heeft altijd voorrang. Privé- en groepsberichten behoren niet tot een community: gesprekken zijn daar voor iedereen ingeschakeld, zolang de testmodus uit is. Een wijziging van het type van een community wordt binnen 30 seconden toegepast op gesprekken.
Poorten, NAT en STUN
| Instelling | Variabele | Standaardwaarde |
|---|---|---|
| RTC-serverport (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| RTC-serverport (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| RTC-serveradres (UDP), (TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | leeg: alle adressen |
| ICE Host Override | AM_CALLS_ICE_HOST_OVERRIDE | leeg: gevonden via STUN |
| ICE Host Port Override | AM_CALLS_ICE_HOST_PORT_OVERRIDE | leeg: de serverpoort |
| Configuratie van ICE-servers | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (Experimenteel) IPv6-ondersteuning inschakelen | (Systeemconsole) | Uit |
Poorten moeten tussen 80 en 49151 liggen. Wijzig in het compose-bestand van de site CALLS_PORT in .env: dit stelt beide variabelen in en publiceert de poort, met hetzelfde nummer op de host en in de container. Clients proberen eerst UDP en schakelen over op TCP op dezelfde poort.
Het adres waarnaar clients media sturen
De server geeft aan elke client het adres waarnaar media gestuurd moet worden (de "host candidate"). Standaard vindt de server zijn openbare adres door een STUN-server te raadplegen, een openbare dienst die antwoordt met het adres en de poort waarvandaan een verzoek kwam. De standaard is de openbare STUN-server van Cloudflare, stun:stun.cloudflare.com:3478. De server is niet de enige die deze gebruikt: elke client die een gesprek join, vraagt ook zijn eigen openbare adres op. De STUN-server ziet alleen IP-adressen en poorten, nooit audiogesprekken, video of berichten.
Een server die nog de STUN-server van Mattermost (stun.global.calls.mattermost.com) heeft opgeslagen in Configuratie van ICE-servers, bijvoorbeeld na een overgang van Mattermost, gebruikt in plaats daarvan die van Cloudflare. De opgeslagen instelling wordt niet gewijzigd.
Stel het adres zelf in wanneer:
- de server achter NAT staat, of meerdere openbare adressen heeft: stel ICE Host Override in op het openbare IP-adres (of een hostnaam die ernaar oplost);
- de NAT een ander openbare poort toewijst aan 8443: stel dan ook ICE Host Port Override in op die openbare poort;
- de server geen internettoegang heeft, of u niet wilt dat de server en de clients een externe STUN-server contacteren: stel ICE Host Override in en maak de STUN-lijst leeg met
AM_CALLS_ICE_SERVERS_CONFIGS=[]. Wanneer ICE Host Override is ingesteld, vraagt de server niet langer een STUN-server om zijn adres; de lege lijst voorkomt dat de clients er een raadplegen.
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
Om STUN zonder derden te behouden, draait u uw eigen STUN-server (een TURN-server zoals coturn beantwoordt ook STUN-verzoeken) en voegt u deze toe aan Configuratie van ICE-servers in plaats daarvan, zoals in het TURN-voorbeeld hieronder.
Op een lokaal netwerk alleen, gebruik het LAN-adres van de server. Herstart de server na wijziging van poorten, adressen of ICE-instellingen, of schakel de Calls-app uit en weer in: de mediaserver wordt ingesteld wanneer de app start.
TURN, voor strikte firewalls
Sommige netwerken blokkeren zowel UDP als uitgaande verbindingen naar ongewone TCP-poorten. Gebruikers op dergelijke netwerken hebben een TURN-server nodig, die de media via een poort relayt die ze wel kunnen bereiken (vaak 443). Antimatter bevat er geen; draai een TURN-server zoals coturn en voeg deze toe aan ICE Servers Configurations, een JSON-lijst:
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- Bij gebruik van een gedeeld geheim (de
use-auth-secretvan coturn), voer hetzelfde geheim in bij TURN Static Auth Secret (AM_CALLS_TURN_STATIC_AUTH_SECRET): de server geeft elke client tijdelijke inloggegevens, geldig voor TURN Credentials Expiration (minutes) (standaard 240). - Bij vaste inloggegevens, voeg in plaats daarvan
"username"en"credential"toe aan de TURN-invoer. - Server Side TURN (standaard uitgeschakeld) gebruikt de TURN-servers ook voor verbindingen die de server zelf start.
Overige gespreksinstellingen
| Instelling | Variabele | Standaardwaarde | Wat het doet |
|---|---|---|---|
| Max call participants | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (geen limiet) | Het maximale aantal personen in één gesprek. |
| Allow screen sharing | (Systeemconsole) | aan | Maakt het mogelijk dat deelnemers hun scherm delen. |
| Enable call ringing | AM_CALLS_ENABLE_RINGING | aan | Laat de andere personen in een privé- of groepsbericht rinkelen wanneer daar een gesprek start. |
| Enable simulcast for screen sharing (Experimental) | (Systeemconsole) | Uit | Verstuurt scherm delen in meerdere kwaliteiten. |
| Enable AV1 codec for screen sharing (Experimental) | (Systeemconsole) | Uit | Genegeerd wanneer simulcast is ingeschakeld. |
De Spraakkanaal-app heeft twee instellingen, in Systeem console › Plugins › Voice Channels: Deelnemen bij het openen van een spraakkanaal (standaard aan) en Video toestaan in spraakkanaal (standaard aan, maar zie video hierboven). Communitybeheerders maken een kanaal om tot een spraakkanaal in de instellingen ervan.
AM_CALLS_DISABLE=true in. Spraakkanaal stopt dan ook met werken.Grotere servers: een externe rtcd
Standaard verwerkt één Antimatter-server alle mediastromen van gesprekken. Voor veel gelijktijdige gesprekken, of om de media van de chatserver te houden, kan de app Gesprek de media doorgeven aan rtcd, een aparte mediaserver (het open-source rtcd van Mattermost, versie 0.17 of nieuwer). Stel RTCD-service-URL (AM_CALLS_RTCD_SERVICE_URL) in, bijvoorbeeld https://rtcd.example.com: alle gesprekken gaan dan via deze server en clients sturen hun media naar de eigen poort van rtcd in plaats van naar die van Antimatter. Aanmeldgegevens kunnen worden verstrekt met AM_CALLS_RTCD_CLIENT_ID en AM_CALLS_RTCD_AUTH_KEY; zonder deze meldt de app zich zelf aan bij rtcd. Er is geen licentie nodig. De app Gesprek toont beheerders een waarschuwing met een aanbeveling voor rtcd wanneer op een server vaak meer dan 50 personen tegelijk in gesprekken zitten.
Transcriptie en live ondertiteling
Antimatter kan gesprekken transcriberen met een spraak-naar-tekst-model dat u zelf draait, en live ondertiteling tonen terwijl mensen spreken. Antimatter gebruikt elke server die een OpenAI-compatibele /v1/audio/transcriptions-endpoint aanbiedt, zoals een Whisper-server in uw netwerk. Er is geen extra service van Antimatter nodig.
Hoe het werkt
- De gastheer van een gesprek start de transcriptie met Gesprek transcriberen in de gespreksbediening. Een badge met Transcriberen geeft dit aan aan iedereen.
- De app van elke deelnemer luistert naar de eigen microfoon, snijdt de spraak in korte fragmenten (maximaal 12 seconden, nooit wanneer gedempt) en stuurt ze naar Antimatter, die ze doorstuurt naar uw spraak-naar-tekstserver.
- Wanneer live ondertiteling is ingeschakeld, wordt de tekst van elk fragment onmiddellijk als ondertiteling aan de deelnemers getoond.
- Wanneer de transcriptie stopt of het gesprek eindigt, plaatst de bot van de app Gesprek het transcript als tekstbestand en WebVTT-ondertitelbestand in het draadje van het gesprek (in spraakkanaal, in het kanaal).
- Wanneer Summarize transcriptions is ingeschakeld, plaatst de standaardagent van de app Agents ook een samenvatting in het draadje (zie AI).

Inrichten
Stel de volgende instellingen in op de antimatter-service:
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
| Instelling | Variabele | Wat er in moet |
|---|---|---|
| Enable call transcriptions (Beta) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| Call transcriber API | AM_CALLS_TRANSCRIBE_API | openai (getoond als "OpenAI-compatible API (no job service)") |
| Speech-to-text API URL | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | De basis-URL van de API, tot en met /v1. |
| Speech-to-text model | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | De modelnaam zoals de API die kent, bijvoorbeeld whisper-1. Verplicht. |
| Speech-to-text API key | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | Wordt verzonden als bearer-token. Laat leeg als de API er geen nodig heeft. |
| Live ondertiteling inschakelen (Beta) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true voor ondertiteling tijdens het gesprek. |
| Taal voor live ondertiteling | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | De gesproken taal, als een code van twee letters (standaard en). Deze wordt ook naar de speech-to-text-API gestuurd voor transcripties, dus stel hem in, ook als u geen ondertiteling gebruikt. |
| Transcripties samenvatten | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true voor een AI-samenvatting na het gesprek. |
openai-transcriber: het starten van een opname zou dan proberen de job-service-transcriber te starten en mislukken.De audio van iedereen die spreekt terwijl transcriptie is ingeschakeld, wordt verstuurd naar de speech-to-text-server die u hebt geconfigureerd, en het transcript wordt gepost waar iedereen in het kanaal het kan lezen. Geef uw gebruikers hiervan kennis en houd die server op uw eigen netwerk als gesprekken vertrouwelijk zijn.
Opnames
Het opnemen van gesprekken (en het transcriberen met de ingebouwde whisper.cpp- of Azure-transcribers) wordt uitgevoerd in aparte containers die worden gestart door een jobservice, de open-source calls-offloader van Mattermost, die u zelf naast Antimatter installeert. De instellingen zijn Gespreksopnames inschakelen (AM_CALLS_ENABLE_RECORDINGS, standaard uit), URL van de jobservice (AM_CALLS_JOB_SERVICE_URL), Maximale duur van gespreksopnames (standaard 60 minuten, tussen 15 en 180) en Kwaliteit van gespreksopnames (laag, medium of hoog; standaard medium). Er is geen licentie voor nodig. Zodra opnames zijn ingeschakeld, start en stopt de gastheer van een gesprek een opname met Gesprek opnemen in de gespreksbesturing. Iedereen in het gesprek ziet dat er wordt opgenomen, en de opname wordt gepost in het draadje van het gesprek wanneer deze stopt. Gesprekken in spraakkanaal hebben geen draadje en kunnen daarom niet worden opgenomen. Voor alleen transcripties en ondertiteling is de hierboven beschreven speech-to-text-instelling eenvoudiger: daarvoor is geen jobservice nodig.