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

  1. Apri la porta delle chiamate. Consenti 8443/udp e 8443/tcp nel firewall del server e del tuo provider cloud.
  2. 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: true significa che la modalità di test è disattivata. Un server migrato da Mattermost mantiene la scelta salvata nella sua configurazione.
  3. 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.
  4. 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

ImpostazioneVariabilePredefinito
Porta server RTC (UDP)AM_CALLS_UDP_SERVER_PORT8443
Porta server RTC (TCP)AM_CALLS_TCP_SERVER_PORT8443
Indirizzo server RTC (UDP), (TCP)AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESSvuoto: tutti gli indirizzi
Sovrascrivi host ICEAM_CALLS_ICE_HOST_OVERRIDEvuoto: trovato tramite STUN
Sovrascrivi porta host ICEAM_CALLS_ICE_HOST_PORT_OVERRIDEvuoto: la porta del server
Configurazioni server ICEAM_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-secret di 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

ImpostazioneVariabilePredefinitoFunzione
Numero massimo di partecipanti alla chiamataAM_CALLS_MAX_CALL_PARTICIPANTS0 (nessun limite)Numero massimo di persone in una singola chiamata.
Consenti la condivisione dello schermo(Console di Sistema)onPermette ai partecipanti di condividere il proprio schermo.
Abilita il trillo della chiamataAM_CALLS_ENABLE_RINGINGonFa 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)disattivatoInvia le condivisioni dello schermo in più qualità.
Abilita codec AV1 per la condivisione dello schermo (Sperimentale)(Console di Sistema)disattivatoIgnorato 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.

Per disabilitare completamente le chiamate, disabilita l'app Chiamate in Console di Sistema › Plugins › Gestione plugin, oppure imposta 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).
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.
Dopo la chiamata, la trascrizione e il suo riassunto nel thread della chiamata.

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
ImpostazioneVariabileCosa inserire
Abilita trascrizioni delle chiamate (Beta)AM_CALLS_ENABLE_TRANSCRIPTIONStrue
API trascrittore chiamateAM_CALLS_TRANSCRIBE_APIopenai (visualizzato come "API compatibile con OpenAI (senza servizio job)")
URL API speech-to-textAM_CALLS_TRANSCRIBE_API_OPEN_AIURLL'URL base dell'API, fino a e incluso /v1.
Modello speech-to-textAM_CALLS_TRANSCRIBE_API_OPEN_AI_MODELIl nome del modello come lo conosce l'API, ad esempio whisper-1. Obbligatorio.
Chiave API speech-to-textAM_CALLS_TRANSCRIBE_API_OPEN_AI_KEYInviata come token bearer. Lasciala vuota se l'API non ne richiede una.
Abilita sottotitoli in tempo reale (Beta)AM_CALLS_ENABLE_LIVE_CAPTIONStrue per i sottotitoli durante la chiamata.
Lingua dei sottotitoli in tempo realeAM_CALLS_LIVE_CAPTIONS_LANGUAGELa 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 trascrizioniAM_CALLS_SUMMARIZE_TRANSCRIPTIONStrue per un riassunto generato dall'IA dopo la chiamata.
Nella Console di Sistema, le impostazioni per le trascrizioni compaiono solo quando Abilita registrazioni delle chiamate è attivo, anche se questo tipo di trascrizione non richiede una registrazione. Impostandole con le variabili sopra si evita questo problema. Non abilitare le registrazioni insieme al transcriber 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.