Appels et voix

Les appels et les canaux vocaux transmettent l'audio, la vidéo et le partage d'écran directement au serveur sur son propre port. Cette page aborde l'aspect réseau, les paramètres à vérifier après l'installation, ainsi que la transcription avec un modèle de reconnaissance vocale que vous exécutez vous-même.

Fonctionnement des appels

Les appels sont fournis par l'application Appels (id com.mattermost.calls), qui est installée et activée par défaut. Les canaux vocaux (l'application Canaux vocaux, image antimatter-next) sont des salles d'appel permanentes basées sur Appels : ils nécessitent que l'application Appels soit activée et utilisent les mêmes paramètres, ports et serveurs.

L'application Appels exécute un serveur média au sein d'Antimatter. L'application web, l'application de bureau et les applications mobiles s'y connectent via WebRTC :

  • la signalisation passe par la connexion web normale (votre proxy HTTPS) ;
  • le média (audio, vidéo, partage d'écran) ne passe pas par là : il va directement au serveur sur le port des appels, 8443 UDP et TCP par défaut.

Les paramètres se trouvent dans Console système › Plugins › Appels. Chacun d'eux peut également être défini avec une variable d'environnement AM_CALLS_ sur le service antimatter, ce qui prend alors le pas sur la Console système et verrouille le paramètre. Les noms hérités MM_CALLS_ fonctionnent également.

Vérifiez ces éléments après l'installation

  1. Ouvrez le port des appels. Autorisez 8443/udp et 8443/tcp dans le pare-feu du serveur et de votre fournisseur cloud.
  2. Vérifier le mode test. Le mode test (DefaultEnabled) est désactivé par défaut, ce qui permet à tout le monde de démarrer des appels. Activez-le (Activé) dans Console système › Plugins › Appels pour n'autoriser que les administrateurs système à démarrer des appels dans les canaux, le temps de vérifier que les appels fonctionnent, puis désactivez-le à nouveau. La variable est AM_CALLS_DEFAULT_ENABLED : true signifie que le mode test est désactivé. Un serveur migré depuis Mattermost conserve le choix enregistré dans sa configuration.
  3. Définir la vidéo. L'option Activer la vidéo (EnableVideo, AM_CALLS_ENABLE_VIDEO) est activée par défaut : les utilisateurs peuvent activer leur caméra partout où les appels sont autorisés, dans les messages personnels et de groupe ainsi que dans les canaux. Dans les canaux vocaux, c'est l'option Autoriser la vidéo dans les canaux vocaux de l'application Canaux vocaux qui décide. Si vous la désactivez, personne ne peut activer sa caméra, y compris dans les canaux vocaux.
  4. Derrière un NAT, définissez l'adresse publique (section suivante).

Où les appels sont activés

Chaque communauté est de type Entreprise ou Communauté (voir Type des nouvelles communautés). Un canal dont les administrateurs n'ont pas activé ou désactivé les appels suit le type de sa communauté :

  • dans une Entreprise, les canaux suivent la valeur par défaut du serveur : les appels sont activés pour tout le monde tant que le mode test est désactivé ;
  • dans une Communauté, les appels sont désactivés dans les canaux : les utilisateurs discutent plutôt dans les canaux vocaux. Les administrateurs du canal et de la communauté peuvent néanmoins activer les appels dans un canal.

Le réglage propre à un canal prévaut toujours. Les messages personnels et de groupe n'appartiennent à aucune communauté : les appels y sont activés pour tout le monde tant que le mode test est désactivé. Un changement de type de communauté s'applique aux appels dans un délai de 30 secondes.

Ports, NAT et STUN

ParamètreVariableValeur par défaut
Port du serveur RTC (UDP)AM_CALLS_UDP_SERVER_PORT8443
Port du serveur RTC (TCP)AM_CALLS_TCP_SERVER_PORT8443
Adresse du serveur RTC (UDP), (TCP)AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESSvide : toutes les adresses
Remplacement de l'hôte ICEAM_CALLS_ICE_HOST_OVERRIDEvide : trouvé via STUN
Substitution du port ICE hôteAM_CALLS_ICE_HOST_PORT_OVERRIDEvide : le port du serveur
Configurations des serveurs ICEAM_CALLS_ICE_SERVERS_CONFIGS[{"urls":["stun:stun.cloudflare.com:3478"]}]
(Expérimental) Activer la prise en charge d'IPv6(Console système)Désactivé

Les ports doivent être compris entre 80 et 49151. Avec le fichier compose du site, modifiez CALLS_PORT dans .env : cela définit les deux variables et publie le port, avec le même numéro sur l'hôte et dans le conteneur. Les clients essaient d'abord UDP, puis basculent sur TCP sur le même port.

L'adresse à laquelle les clients envoient les médias

Le serveur indique à chaque client l'adresse à laquelle envoyer les médias (son « candidat hôte »). Par défaut, il trouve son adresse publique en interrogeant un serveur STUN, un service public qui répond avec l'adresse et le port d'origine de la requête. La valeur par défaut est le serveur STUN public de Cloudflare, stun:stun.cloudflare.com:3478. Le serveur n'est pas le seul à l'utiliser : chaque client qui rejoint un appel l'interroge également pour obtenir sa propre adresse publique. Le serveur STUN ne voit que des adresses IP et des ports, jamais l'audio, la vidéo ou les messages des appels.

Un serveur qui a encore le serveur STUN de Mattermost (stun.global.calls.mattermost.com) enregistré dans Configurations des serveurs ICE, par exemple après une migration depuis Mattermost, utilise celui de Cloudflare à la place. Le paramètre enregistré n'est pas modifié.

Définissez l'adresse vous-même lorsque :

  • le serveur est derrière un NAT, ou possède plusieurs adresses publiques : définissez Substitution de l'hôte ICE sur l'adresse IP publique (ou un nom d'hôte qui y résout) ;
  • le NAT mappe un port public différent vers 8443 : définissez également Substitution du port ICE hôte sur ce port public ;
  • le serveur n'a pas d'accès à Internet, ou vous ne souhaitez pas que le serveur et les clients contactent un serveur STUN externe : définissez Substitution de l'hôte ICE, et videz la liste STUN avec AM_CALLS_ICE_SERVERS_CONFIGS=[]. Avec Substitution de l'hôte ICE défini, le serveur n'interroge plus de serveur STUN pour obtenir son adresse ; la liste vide empêche les clients de le faire.
services:
  antimatter:
    environment:
      AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
      AM_CALLS_ICE_SERVERS_CONFIGS: "[]"

Pour conserver STUN sans tiers, exécutez votre propre serveur STUN (un serveur TURN tel que coturn répond également aux requêtes STUN) et listez-le dans Configurations des serveurs ICE à la place, comme dans l'exemple TURN ci-dessous.

Sur un réseau local uniquement, utilisez l'adresse LAN du serveur. Redémarrez le serveur après avoir modifié les ports, les adresses ou les paramètres ICE, ou désactivez puis activez l'application Appels : le serveur de médias est configuré au démarrage de l'application.

TURN, pour les pare-feu stricts

Certains réseaux bloquent à la fois le UDP et les connexions sortantes vers des ports TCP inhabituels. Les personnes qui y sont connectées ont besoin d'un serveur TURN, qui relaie les médias via un port accessible (souvent le 443). Antimatter n'en inclut pas ; exécutez un serveur TURN tel que coturn et ajoutez-le à Configurations des serveurs ICE, une liste JSON :

[
  {"urls": ["stun:turn.example.com:3478"]},
  {"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
  • Avec un secret partagé (l'option use-auth-secret de coturn), saisissez le même secret dans Secret d'authentification statique TURN (AM_CALLS_TURN_STATIC_AUTH_SECRET) : le serveur fournit à chaque client des identifiants à durée limitée, valides pendant Durée de validité des identifiants TURN (minutes) (240 par défaut).
  • Avec des identifiants fixes, ajoutez "username" et "credential" à l'entrée TURN à la place.
  • TURN côté serveur (désactivé par défaut) utilise également les serveurs TURN pour les connexions initiées par le serveur.

Autres paramètres des appels

ParamètreVariableValeur par défautFonction
Nombre maximal de participants à un appelAM_CALLS_MAX_CALL_PARTICIPANTS0 (aucune limite)Nombre maximal de personnes dans un même appel.
Autoriser le partage d'écran(Console système)activéPermet aux participants de partager leur écran.
Activer la sonnerie des appelsAM_CALLS_ENABLE_RINGINGactivéFait sonner les autres personnes d'un message personnel ou de groupe lorsqu'un appel y est initié.
Activer le simulcast pour le partage d'écran (Expérimental)(Console système)DésactivéEnvoie les partages d'écran en plusieurs qualités.
Activer le codec AV1 pour le partage d'écran (Expérimental)(Console système)DésactivéIgnoré lorsque le simulcast est activé.

L'application Canaux vocaux comporte deux paramètres, dans Console système › Plugins › Canaux vocaux : Rejoindre lors de l'ouverture d'un canal vocal (activé par défaut) et Autoriser la vidéo dans les canaux vocaux (activé par défaut, mais voir la vidéo ci-dessus). Les administrateurs de la communauté transforment un canal en canal vocal dans ses paramètres.

Pour désactiver complètement les appels, désactivez l'application Appels dans Console système › Plugins › Gestion des plugins, ou définissez AM_CALLS_DISABLE=true. Les canaux vocaux cessent alors de fonctionner également.

Serveurs de grande taille : un rtcd externe

Par défaut, un serveur Antimatter gère tous les médias des appels. Pour de nombreux appels simultanés, ou pour ne pas charger le serveur de chat avec les médias, l'application Appels peut confier les médias à rtcd, un serveur de médias distinct (le rtcd open source de Mattermost, version 0.17 ou plus récente). Définissez URL du service RTCD (AM_CALLS_RTCD_SERVICE_URL), par exemple https://rtcd.example.com : tous les appels passent alors par ce service, et les clients envoient leurs médias au port propre de rtcd au lieu de celui d'Antimatter. Les identifiants peuvent être fournis avec AM_CALLS_RTCD_CLIENT_ID et AM_CALLS_RTCD_AUTH_KEY ; sans eux, l'application s'enregistre auprès de rtcd. Aucune licence n'est nécessaire. L'application Appels affiche un avertissement aux administrateurs recommandant rtcd lorsqu'un serveur a souvent plus de 50 personnes en appel simultanément.

Transcription et sous-titres en direct

Antimatter peut transcrire les appels avec un modèle de reconnaissance vocale que vous exécutez vous-même, et afficher des sous-titres en direct pendant que les participants parlent. Antimatter utilise n'importe quel serveur offrant un point de terminaison /v1/audio/transcriptions compatible OpenAI, tel qu'un serveur Whisper sur votre réseau. Aucun service supplémentaire d'Antimatter n'est nécessaire.

Fonctionnement

  • L’hôte d’un appel lance la transcription avec Transcrire l’appel dans les contrôles de l’appel. Un badge Transcription en cours informe tout le monde.
  • L'application de chaque participant écoute son propre microphone, découpe la parole en courts segments (jusqu'à 12 secondes, jamais pendant une mise en sourdine) et les envoie à Antimatter, qui les transmet à votre serveur de reconnaissance vocale.
  • Avec les sous-titres en direct activés, le texte de chaque segment est immédiatement affiché aux participants sous forme de sous-titre.
  • Lorsque la transcription s'arrête ou que l'appel se termine, le bot Appels publie la transcription en tant que fichier texte et fichier de sous-titres WebVTT, dans le fil de discussion de l'appel (dans les canaux vocaux, dans le canal).
  • Avec Résumer les transcriptions activé, l'agent par défaut de l'application Agents publie également un résumé dans le fil de discussion (voir 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.
Après l'appel, la transcription et son résumé dans le fil de discussion de l'appel.

Configuration

Définissez ces éléments sur le service 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
ParamètreVariableCe qu'il faut saisir
Activer les transcriptions d'appels (Bêta)AM_CALLS_ENABLE_TRANSCRIPTIONStrue
API du transcribeur d'appelsAM_CALLS_TRANSCRIBE_APIopenai (affiché comme « API compatible OpenAI (sans service de tâches) »)
URL de l'API de reconnaissance vocaleAM_CALLS_TRANSCRIBE_API_OPEN_AIURLL'URL de base de l'API, jusqu'à et y compris /v1.
Modèle de reconnaissance vocaleAM_CALLS_TRANSCRIBE_API_OPEN_AI_MODELLe nom du modèle tel que l'API le connaît, par exemple whisper-1. Obligatoire.
Clé API de reconnaissance vocaleAM_CALLS_TRANSCRIBE_API_OPEN_AI_KEYEnvoyée en tant que jeton bearer. Laissez vide si l'API n'en nécessite pas.
Activer les sous-titres en direct (Bêta)AM_CALLS_ENABLE_LIVE_CAPTIONStrue pour activer les sous-titres en direct pendant l'appel.
Langue des sous-titres en directAM_CALLS_LIVE_CAPTIONS_LANGUAGELa langue parlée, sous forme de code à deux lettres (en par défaut). Elle est également transmise à l'API de transcription vocale pour les transcriptions, il est donc recommandé de la définir même sans sous-titres.
Résumer les transcriptionsAM_CALLS_SUMMARIZE_TRANSCRIPTIONStrue pour générer un résumé par IA après l'appel.
Dans la Console système, les paramètres de transcription n'apparaissent que lorsque Activer les enregistrements d'appels est activé, alors que ce type de transcription ne nécessite pas d'enregistrement. Les définir avec les variables ci-dessus permet d'éviter ce problème. Ne pas activer les enregistrements en même temps que le transcribeur openai : le démarrage d'un enregistrement tenterait alors de lancer le transcribeur du service de tâches et échouerait.

L'audio de tous les participants qui parlent pendant que la transcription est active est envoyé au serveur de transcription vocale que vous avez configuré, et la transcription est publiée là où tous les membres du canal peuvent la lire. Informez vos utilisateurs et, si les appels sont confidentiels, maintenez ce serveur sur votre propre réseau.

Enregistrements

L'enregistrement des appels (et la transcription avec les transcribeurs intégrés whisper.cpp ou Azure) s'effectue dans des conteneurs distincts démarrés par un service de tâches, calls-offloader de Mattermost, que vous déployez vous-même à côté d'Antimatter. Les paramètres sont Enable call recordings (AM_CALLS_ENABLE_RECORDINGS, désactivé par défaut), Job service URL (AM_CALLS_JOB_SERVICE_URL), Maximum call recording duration (60 minutes par défaut, de 15 à 180) et Call recording quality (basse, moyenne ou haute ; moyenne par défaut). Aucune licence n'est requise. Une fois les enregistrements activés, l'hôte d'un appel démarre et arrête un enregistrement via Record the call dans les contrôles de l'appel ; tous les participants voient que l'appel est enregistré, et l'enregistrement est publié dans le fil de discussion de l'appel lorsqu'il s'arrête. Les appels dans les canaux vocaux n'ont pas de fil de discussion, ils ne peuvent donc pas être enregistrés. Pour la transcription et les sous-titres uniquement, la configuration de la reconnaissance vocale décrite ci-dessus est plus simple : elle ne nécessite pas de service de tâches.