Chiamate e voce
Le chiamate e i canali vocali inviano audio, video e condivisione dello schermo direttamente al server sulla sua porta dedicata. Questa pagina illustra la parte di rete, le impostazioni da verificare dopo l'installazione e la trascrizione con un modello speech-to-text gestito in autonomia.
Come funzionano le chiamate
Le chiamate sono fornite dall'app Chiamate (id com.mattermost.calls), installata e abilitata di default. I canali vocali (app Canali vocali, immagine antimatter-next) sono sale di chiamata permanenti basate su Chiamate: richiedono che Chiamate sia abilitata e utilizzano le stesse impostazioni, porte e server.
L'app Chiamate esegue un server media all'interno di Antimatter. L'app web, l'app desktop e le app mobili si connettono ad esso tramite WebRTC:
- la segnalazione passa attraverso la normale connessione web (il proxy HTTPS);
- il media (audio, video, condivisione dello schermo) no: va direttamente al server sulla porta delle chiamate, 8443 UDP e TCP di default.
Le impostazioni si trovano in Console di Sistema › Plugins › Chiamate. Ciascuna di esse può anche essere impostata con una variabile d'ambiente AM_CALLS_ sul servizio antimatter, che in tal caso ha la priorità rispetto alla Console di Sistema e blocca l'impostazione lì. I nomi legacy MM_CALLS_ funzionano anch'essi.
Verifica queste impostazioni dopo l'installazione
- Apri la porta delle chiamate. Consenti 8443/udp e 8443/tcp nel firewall del server e del tuo provider cloud.
- Verifica la modalità di test. La modalità di test (
DefaultEnabled) è disattivata di default, quindi tutti possono avviare chiamate. Attivala (Attivo) in Console di Sistema › Plugins › Chiamate per consentire solo agli amministratori di sistema di avviare chiamate nei canali mentre verifichi il funzionamento, poi disattivala di nuovo. La variabile èAM_CALLS_DEFAULT_ENABLED:truesignifica che la modalità di test è disattivata. Un server migrato da Mattermost mantiene la scelta salvata nella sua configurazione. - Decidi per il video. Abilita video (
EnableVideo,AM_CALLS_ENABLE_VIDEO) è attivo per impostazione predefinita: le persone possono accendere la fotocamera ovunque siano abilitate le chiamate, nei messaggi diretti e di gruppo e nei canali. Nei canali vocali, è l'app Canali vocali con l'opzione Consenti video nei canali vocali a decidere. Se la disattivi, nessuno può accendere la fotocamera, nemmeno nei canali vocali. - Dietro NAT, imposta l'indirizzo pubblico (sezione successiva).
Dove le chiamate sono attive
Ogni comunità ha un tipo, Ambiente di lavoro o Comunità (vedi Tipo delle nuove comunità). Un canale i cui amministratori non hanno attivato o disattivato le chiamate segue il tipo della sua comunità:
- in un Ambiente di lavoro, i canali seguono il valore predefinito del server: le chiamate sono attive per tutti mentre la modalità di test è disattivata;
- in una Comunità, le chiamate sono disattivate nei canali: le persone parlano nei canali vocali. Gli amministratori del canale e della comunità possono comunque attivare le chiamate in un canale.
L'impostazione specifica di un canale ha sempre la precedenza. I messaggi diretti e di gruppo non appartengono a una comunità: le chiamate lì sono attive per tutti mentre la modalità di test è disattivata. Un cambiamento del tipo di una comunità si applica alle chiamate entro 30 secondi.
Porte, NAT e STUN
| Impostazione | Variabile | Predefinito |
|---|---|---|
| Porta server RTC (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| Porta server RTC (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| Indirizzo server RTC (UDP), (TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | vuoto: tutti gli indirizzi |
| Sovrascrivi host ICE | AM_CALLS_ICE_HOST_OVERRIDE | vuoto: trovato tramite STUN |
| Sovrascrivi porta host ICE | AM_CALLS_ICE_HOST_PORT_OVERRIDE | vuoto: la porta del server |
| Configurazioni server ICE | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (Sperimentale) Abilita il supporto IPv6 | (Console di Sistema) | disattivato |
Le porte devono essere comprese tra 80 e 49151. Con il file compose del sito, modifica CALLS_PORT in .env: imposta entrambe le variabili e pubblica la porta, con lo stesso numero sull'host e nel contenitore. I client provano prima UDP e, in caso di errore, passano a TCP sulla stessa porta.
L'indirizzo a cui i client inviano i media
Il server indica a ciascun client l'indirizzo a cui inviare i media (il suo "candidato host"). Di default, trova il proprio indirizzo pubblico interrogando un server STUN, un servizio pubblico che risponde con l'indirizzo e la porta da cui proviene la richiesta. Il valore predefinito è il server STUN pubblico di Cloudflare, stun:stun.cloudflare.com:3478. Non è solo il server a usarlo: ogni client che partecipa a una chiamata lo interroga anche per il proprio indirizzo pubblico. Il server STUN vede solo indirizzi IP e porte, mai audio, video o messaggi delle chiamate.
Un server che ha ancora salvato il server STUN di Mattermost (stun.global.calls.mattermost.com) in Configurazioni server ICE, ad esempio dopo un passaggio da Mattermost, usa invece quello di Cloudflare. L'impostazione salvata non viene modificata.
Imposta l'indirizzo manualmente quando:
- il server è dietro un NAT o ha più indirizzi pubblici: imposta Sovrascrivi host ICE sull'indirizzo IP pubblico (o su un nome host che vi si risolva);
- il NAT mappa una porta pubblica diversa da 8443: imposta anche Sovrascrivi porta host ICE su quella porta pubblica;
- il server non ha accesso a Internet, o non si vuole che server e client contattino un server STUN esterno: imposta Sovrascrivi host ICE e svuota l'elenco STUN con
AM_CALLS_ICE_SERVERS_CONFIGS=[]. Con Sovrascrivi host ICE impostato, il server non interroga più un server STUN per il proprio indirizzo; l'elenco vuoto impedisce ai client di farlo.
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
Per mantenere STUN senza terze parti, esegui un tuo server STUN (un server TURN come coturn risponde anche alle richieste STUN) e elenca in Configurazioni server ICE al posto di quello predefinito, come nell'esempio TURN qui sotto.
Su una rete locale, usa l'indirizzo LAN del server. Riavvia il server dopo aver modificato porte, indirizzi o impostazioni ICE, oppure disattiva e riattiva l'app Chiamate: il server media viene configurato all'avvio dell'app.
TURN, per firewall restrittivi
Alcune reti bloccano sia UDP che le connessioni in uscita verso porte TCP non standard. Le persone che vi si trovano necessitano di un server TURN, che inoltra i media attraverso una porta raggiungibile (spesso la 443). Antimatter non ne include uno; esegui un server TURN come coturn e aggiungilo a Configurazioni server ICE, un elenco JSON:
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- Con un segreto condiviso (il
use-auth-secretdi coturn), inserisci lo stesso segreto in Segreto di autenticazione statica TURN (AM_CALLS_TURN_STATIC_AUTH_SECRET): il server fornisce a ciascun client credenziali a breve scadenza, valide per Scadenza credenziali TURN (minuti) (240 di default). - Con credenziali fisse, aggiungi invece
"username"e"credential"alla voce TURN. - TURN lato server (disabilitato di default) utilizza anche i server TURN per le connessioni avviate dal server.
Altre impostazioni delle chiamate
| Impostazione | Variabile | Predefinito | Funzione |
|---|---|---|---|
| Numero massimo di partecipanti alla chiamata | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (nessun limite) | Numero massimo di persone in una singola chiamata. |
| Consenti la condivisione dello schermo | (Console di Sistema) | on | Permette ai partecipanti di condividere il proprio schermo. |
| Abilita il trillo della chiamata | AM_CALLS_ENABLE_RINGING | on | Fa suonare gli altri partecipanti a un messaggio diretto o di gruppo quando una chiamata inizia in quel contesto. |
| Abilita simulcast per la condivisione dello schermo (Sperimentale) | (Console di Sistema) | disattivato | Invia le condivisioni dello schermo in più qualità. |
| Abilita codec AV1 per la condivisione dello schermo (Sperimentale) | (Console di Sistema) | disattivato | Ignorato quando il simulcast è attivo. |
L'app Canali vocali ha due impostazioni, in Console di Sistema › Plugins › Canali vocali: Unisciti quando si apre un canale vocale (attivo di default) e Consenti video nei canali vocali (attivo di default, ma vedi il video sopra). Gli amministratori della community trasformano un canale in un canale vocale nelle sue impostazioni.
AM_CALLS_DISABLE=true. Anche i canali vocali smetteranno di funzionare.Server più grandi: un rtcd esterno
Di default, un server Antimatter gestisce tutti i media delle chiamate. Per molte chiamate simultanee, o per tenere i media separati dal server di chat, l'app Chiamate può delegare i media a rtcd, un server media separato (il rtcd open source di Mattermost, versione 0.17 o successiva). Imposta URL del servizio RTCD (AM_CALLS_RTCD_SERVICE_URL), ad esempio https://rtcd.example.com: tutte le chiamate passeranno quindi attraverso di esso e i client invieranno i propri media alla porta di rtcd anziché a quella di Antimatter. Le credenziali possono essere fornite con AM_CALLS_RTCD_CLIENT_ID e AM_CALLS_RTCD_AUTH_KEY; in loro assenza, l'app si registra autonomamente con rtcd. Non è necessaria una licenza. L'app Chiamate mostra agli amministratori un avviso che raccomanda rtcd quando sul server sono spesso presenti più di 50 persone in chiamata contemporaneamente.
Trascrizione e sottotitoli in tempo reale
Antimatter può trascrivere le chiamate con un modello speech-to-text che esegui tu stesso e mostrare sottotitoli in tempo reale mentre le persone parlano. Antimatter utilizza qualsiasi server che offra un endpoint /v1/audio/transcriptions compatibile con OpenAI, come un server Whisper sulla tua rete. Non è necessario alcun servizio aggiuntivo da parte di Antimatter.
Come funziona
- L'ospite di una chiamata avvia la trascrizione con Trascrivi la chiamata nei controlli della chiamata. Un badge Trascrizione in corso avvisa tutti.
- L'app di ciascun partecipante ascolta il proprio microfono, divide il parlato in brevi frammenti (fino a 12 secondi, mai mentre è in silenzio) e li invia ad Antimatter, che li inoltra al tuo server speech-to-text.
- Con i sottotitoli in tempo reale attivi, il testo di ogni frammento viene mostrato immediatamente ai partecipanti come sottotitolo.
- Quando la trascrizione si arresta o la chiamata termina, il bot Chiamate pubblica la trascrizione come file di testo e file di sottotitoli WebVTT, nel thread della chiamata (nei canali vocali, nel canale).
- Con Riassumi trascrizioni attivo, l'agente predefinito dell'app Agenti pubblica anche un riassunto nel thread (vedi IA).

Configurazione
Imposta questi parametri sul servizio 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
| Impostazione | Variabile | Cosa inserire |
|---|---|---|
| Abilita trascrizioni delle chiamate (Beta) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| API trascrittore chiamate | AM_CALLS_TRANSCRIBE_API | openai (visualizzato come "API compatibile con OpenAI (senza servizio job)") |
| URL API speech-to-text | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | L'URL base dell'API, fino a e incluso /v1. |
| Modello speech-to-text | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | Il nome del modello come lo conosce l'API, ad esempio whisper-1. Obbligatorio. |
| Chiave API speech-to-text | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | Inviata come token bearer. Lasciala vuota se l'API non ne richiede una. |
| Abilita sottotitoli in tempo reale (Beta) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true per i sottotitoli durante la chiamata. |
| Lingua dei sottotitoli in tempo reale | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | La lingua parlata, indicata con un codice di due lettere (en di default). Viene inviata anche all'API di speech-to-text per le trascrizioni, quindi impostala anche se non usi i sottotitoli. |
| Riassumi le trascrizioni | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true per un riassunto generato dall'IA dopo la chiamata. |
openai: in tal caso, l'avvio di una registrazione provocherebbe il tentativo di avviare il transcriber del job-service, che fallirebbe.L'audio di tutti i partecipanti che parlano mentre la trascrizione è attiva viene inviato al server di speech-to-text configurato, e la trascrizione viene pubblicata in un punto leggibile da tutti i membri del canale. Informa gli utenti e, se le chiamate sono riservate, mantieni quel server all'interno della tua rete.
Registrazioni
La registrazione delle chiamate (e la trascrizione con i trascriber integrati whisper.cpp o Azure) viene eseguita in contenitori separati avviati da un servizio di job, calls-offloader di Mattermost, che è open source e che è necessario distribuire accanto ad Antimatter. Le impostazioni sono Abilita registrazioni delle chiamate (AM_CALLS_ENABLE_RECORDINGS, disabilitata di default), URL del servizio di job (AM_CALLS_JOB_SERVICE_URL), Durata massima della registrazione delle chiamate (60 minuti di default, da 15 a 180) e Qualità della registrazione delle chiamate (bassa, media o alta; media di default). Non è necessaria una licenza. Una volta attivate le registrazioni, l'host di una chiamata avvia e arresta la registrazione tramite Registra la chiamata nei controlli della chiamata; tutti i partecipanti alla chiamata vedono che è in corso una registrazione e, quando questa termina, la registrazione viene pubblicata nel thread della chiamata. Le chiamate nei canali vocali non hanno un thread, quindi non possono essere registrate. Per ottenere solo trascrizioni e sottotitoli, la configurazione del riconoscimento vocale descritta sopra è più semplice: non richiede un servizio di job.