Chamadas e voz
As chamadas e os canais de voz enviam áudio, vídeo e compartilhamento de tela diretamente para o servidor em sua própria porta. Esta página aborda a parte de rede, as configurações a serem verificadas após a instalação e a transcrição com um modelo de reconhecimento de fala que você executa por conta própria.
Como funcionam as chamadas
As chamadas são fornecidas pelo aplicativo Chamadas (id com.mattermost.calls), que é instalado e habilitado por padrão. Os canais de voz (o aplicativo Canais de Voz, imagem antimatter-next) são salas de chamada permanentes construídas sobre as Chamadas: eles exigem que as Chamadas estejam habilitadas e usam as mesmas configurações, portas e servidores.
O aplicativo Chamadas executa um servidor de mídia dentro do Antimatter. O aplicativo web, o aplicativo para desktop e os aplicativos para celular se conectam a ele com WebRTC:
- a sinalização passa pela conexão web normal (seu proxy HTTPS);
- a mídia (áudio, vídeo, compartilhamento de tela) não passa por ela: vai diretamente para o servidor na porta de chamadas, 8443 UDP e TCP por padrão.
As configurações estão em Console do Sistema › Plugins › Chamadas. Cada uma delas também pode ser configurada com uma variável de ambiente AM_CALLS_ no serviço antimatter, que então tem prioridade sobre o Console do Sistema e trava a configuração lá. Os nomes legados MM_CALLS_ também funcionam.
Verifique estes itens após a instalação
- Abra a porta de chamadas. Permita 8443/udp e 8443/tcp no firewall do servidor e do seu provedor de nuvem.
- Verifique o modo de teste. O Modo de teste (
DefaultEnabled) está desativado por padrão, permitindo que todos iniciem chamadas. Ative-o (Ligado) em Console do Sistema › Plugins › Chamadas para permitir que apenas administradores do sistema iniciem chamadas nos canais enquanto você verifica o funcionamento, e desative-o novamente depois. A variável éAM_CALLS_DEFAULT_ENABLED:truesignifica que o modo de teste está desativado. Um servidor migrado do Mattermost mantém a escolha salva em sua configuração. - Decida sobre o vídeo. O Ativar vídeo (
EnableVideo,AM_CALLS_ENABLE_VIDEO) está ativado por padrão: as pessoas podem ligar a câmera onde quer que as chamadas estejam habilitadas, em mensagens diretas, de grupo e nos canais. Nos canais de voz, a opção Permitir vídeo nos canais de voz do aplicativo Canais de Voz é que decide. Desative-a e ninguém poderá ligar a câmera, nem mesmo nos canais de voz. - Atrás de NAT, defina o endereço público (próxima seção).
Onde as chamadas estão ativadas
Cada comunidade tem um tipo, Ambiente de trabalho ou Comunidade (veja Tipo de novas comunidades). Um canal cujos administradores não ativaram nem desativaram as chamadas segue o tipo da sua comunidade:
- em um Ambiente de trabalho, os canais seguem o padrão do servidor: as chamadas estão ativadas para todos enquanto o modo de teste está desativado;
- em uma Comunidade, as chamadas estão desativadas nos canais: as pessoas conversam nos canais de voz. Os administradores do canal e da comunidade ainda podem ativar as chamadas em um canal.
A configuração própria de um canal sempre tem prioridade. Mensagens diretas e de grupo não pertencem a uma comunidade: as chamadas nelas estão ativadas para todos enquanto o modo de teste está desativado. Uma mudança no tipo de uma comunidade se aplica às chamadas em até 30 segundos.
Portas, NAT e STUN
| Configuração | Variável | Padrão |
|---|---|---|
| Porta do Servidor RTC (UDP) | AM_CALLS_UDP_SERVER_PORT | 8443 |
| Porta do Servidor RTC (TCP) | AM_CALLS_TCP_SERVER_PORT | 8443 |
| Endereço do Servidor RTC (UDP), (TCP) | AM_CALLS_UDP_SERVER_ADDRESS, AM_CALLS_TCP_SERVER_ADDRESS | vazio: todos os endereços |
| Substituição do Host ICE | AM_CALLS_ICE_HOST_OVERRIDE | vazio: encontrado por meio de STUN |
| Substituição da Porta do Host ICE | AM_CALLS_ICE_HOST_PORT_OVERRIDE | vazio: a porta do servidor |
| Configurações dos Servidores ICE | AM_CALLS_ICE_SERVERS_CONFIGS | [{"urls":["stun:stun.cloudflare.com:3478"]}] |
| (Experimental) Habilitar suporte a IPv6 | (Console do Sistema) | desativado |
As portas devem estar entre 80 e 49151. Com o arquivo compose do site, altere CALLS_PORT em .env: isso define ambas as variáveis e publica a porta, com o mesmo número no host e no contêiner. Os clientes primeiro tentam UDP e, em caso de falha, usam TCP na mesma porta.
O endereço para o qual os clientes enviam a mídia
O servidor informa a cada cliente o endereço para o qual enviar a mídia (seu "candidato de host"). Por padrão, ele descobre seu endereço público consultando um servidor STUN, um serviço público que responde com o endereço e a porta de origem de uma solicitação. O padrão é o servidor STUN público da Cloudflare, stun:stun.cloudflare.com:3478. O servidor não é o único a usá-lo: cada cliente que entra em uma chamada também consulta esse servidor para obter seu próprio endereço público. O servidor STUN vê apenas endereços IP e portas, nunca o áudio, o vídeo ou as mensagens da chamada.
Um servidor que ainda possui o servidor STUN do Mattermost (stun.global.calls.mattermost.com) salvo em Configurações dos Servidores ICE, por exemplo após uma migração do Mattermost, passa a usar o da Cloudflare. A configuração salva não é alterada.
Defina o endereço manualmente quando:
- o servidor estiver atrás de NAT ou tiver vários endereços públicos: defina Substituição do Host ICE com o endereço IP público (ou um nome de host que resolva para ele);
- o NAT mapeia uma porta pública diferente para a 8443: defina também Substituição da Porta do Host ICE com essa porta pública;
- o servidor não tiver acesso à Internet, ou você não quiser que o servidor e os clientes contatem um servidor STUN externo: defina Substituição do Host ICE e esvazie a lista de STUN com
AM_CALLS_ICE_SERVERS_CONFIGS=[]. Com Substituição do Host ICE definido, o servidor não consulta mais um servidor STUN para obter seu endereço; a lista vazia impede que os clientes façam o mesmo.
services:
antimatter:
environment:
AM_CALLS_ICE_HOST_OVERRIDE: 203.0.113.10
AM_CALLS_ICE_SERVERS_CONFIGS: "[]"
Para manter o STUN sem depender de terceiros, execute seu próprio servidor STUN (um servidor TURN, como o coturn, também responde a solicitações STUN) e liste-o em Configurações dos Servidores ICE, como no exemplo de TURN abaixo.
Em uma rede local, use o endereço LAN do servidor. Reinicie o servidor após alterar portas, endereços ou configurações ICE, ou desative e reative o aplicativo Calls: o servidor de mídia é configurado quando o aplicativo inicia.
TURN, para firewalls restritivos
Algumas redes bloqueiam tanto UDP quanto conexões de saída para portas TCP incomuns. Pessoas nessas redes precisam de um servidor TURN, que retransmite a mídia por uma porta acessível (frequentemente a 443). O Antimatter não inclui um; execute um servidor TURN, como o coturn, e adicione-o a Configurações dos Servidores ICE, uma lista JSON:
[
{"urls": ["stun:turn.example.com:3478"]},
{"urls": ["turn:turn.example.com:3478?transport=udp", "turns:turn.example.com:443?transport=tcp"]}
]
- Com um segredo compartilhado (o
use-auth-secretdo coturn), coloque o mesmo segredo em Segredo de Autenticação Estática do TURN (AM_CALLS_TURN_STATIC_AUTH_SECRET): o servidor fornece a cada cliente credenciais de curta duração, válidas por Expiração das Credenciais do TURN (minutos) (240 por padrão). - Com credenciais fixas, adicione
"username"e"credential"à entrada do TURN. - TURN no Lado do Servidor (desativado por padrão) também usa os servidores TURN para conexões iniciadas pelo servidor.
Outras configurações de chamadas
| Configuração | Variável | Padrão | O que faz |
|---|---|---|---|
| Máximo de participantes em uma chamada | AM_CALLS_MAX_CALL_PARTICIPANTS | 0 (sem limite) | Número máximo de pessoas em uma única chamada. |
| Permitir compartilhamento de tela | (Console do Sistema) | ligado | Permite que os participantes compartilhem sua tela. |
| Ativar toque de chamada | AM_CALLS_ENABLE_RINGING | ligado | Faz tocar as outras pessoas em uma mensagem direta ou de grupo quando uma chamada começa nela. |
| Ativar simulcast para compartilhamento de tela (Experimental) | (Console do Sistema) | desativado | Envia compartilhamentos de tela em várias qualidades. |
| Ativar codec AV1 para compartilhamento de tela (Experimental) | (Console do Sistema) | desativado | Ignorado enquanto o simulcast estiver ativado. |
O aplicativo Canais de Voz tem duas configurações, em Console do Sistema › Plugins › Canais de Voz: Entrar ao abrir um canal de voz (ativado por padrão) e Permitir vídeo em canais de voz (ativado por padrão, mas veja o vídeo acima). Administradores da comunidade transformam um canal em um canal de voz nas suas configurações.
AM_CALLS_DISABLE=true. Os canais de voz também deixarão de funcionar.Servidores maiores: um rtcd externo
Por padrão, um servidor Antimatter carrega toda a mídia das chamadas. Para muitas chamadas simultâneas, ou para manter a mídia fora do servidor de chat, o aplicativo de Chamadas pode transferir a mídia para o rtcd, um servidor de mídia separado (o rtcd de código aberto do Mattermost, versão 0.17 ou mais recente). Defina a URL do serviço RTCD (AM_CALLS_RTCD_SERVICE_URL), por exemplo https://rtcd.example.com: todas as chamadas passam por ele, e os clientes enviam sua mídia para a própria porta do rtcd, em vez da do Antimatter. As credenciais podem ser fornecidas com AM_CALLS_RTCD_CLIENT_ID e AM_CALLS_RTCD_AUTH_KEY; sem elas, o aplicativo se registra com o rtcd. Nenhuma licença é necessária. O aplicativo de Chamadas exibe um aviso para administradores recomendando o rtcd quando um servidor frequentemente tem mais de 50 pessoas em chamadas ao mesmo tempo.
Transcrição e legendas ao vivo
O Antimatter pode transcrever chamadas com um modelo de fala para texto que você executa por conta própria, e exibir legendas ao vivo enquanto as pessoas falam. O Antimatter usa qualquer servidor que ofereça um endpoint /v1/audio/transcriptions compatível com a OpenAI, como um servidor Whisper na sua rede. Nenhum serviço extra do Antimatter é necessário.
Como funciona
- O anfitrião de uma chamada inicia a transcrição com Transcrever a chamada nos controles da chamada. Um selo de Transcrevendo informa a todos.
- O aplicativo de cada participante escuta seu próprio microfone, corta a fala em pedaços curtos (até 12 segundos, nunca quando está em silêncio) e os envia para o Antimatter, que os encaminha para o seu servidor de fala para texto.
- Com as legendas ao vivo ativadas, o texto de cada pedaço é exibido para os participantes como uma legenda imediatamente.
- Quando a transcrição para ou a chamada termina, o Bot de Chamadas publica a transcrição como um arquivo de texto e um arquivo de legendas WebVTT, no tópico da chamada (em canais de voz, no canal).
- Com Resumir transcrições ativado, o agente padrão do aplicativo de Agentes também publica um resumo no tópico (veja IA).

Configuração
Defina os seguintes itens no serviço 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
| Configuração | Variável | O que inserir |
|---|---|---|
| Ativar transcrições de chamadas (Beta) | AM_CALLS_ENABLE_TRANSCRIPTIONS | true |
| API do transcritor de chamadas | AM_CALLS_TRANSCRIBE_API | openai (exibido como "API compatível com OpenAI (sem serviço de tarefas)") |
| URL da API de fala para texto | AM_CALLS_TRANSCRIBE_API_OPEN_AIURL | A URL base da API, incluindo /v1. |
| Modelo de fala para texto | AM_CALLS_TRANSCRIBE_API_OPEN_AI_MODEL | O nome do modelo como a API o conhece, por exemplo whisper-1. Obrigatório. |
| Chave de API de fala para texto | AM_CALLS_TRANSCRIBE_API_OPEN_AI_KEY | Enviada como um token bearer. Deixe em branco se a API não exigir uma. |
| Ativar legendas ao vivo (Beta) | AM_CALLS_ENABLE_LIVE_CAPTIONS | true para legendas durante a chamada. |
| Idioma das legendas ao vivo | AM_CALLS_LIVE_CAPTIONS_LANGUAGE | O idioma falado, como um código de duas letras (en por padrão). Ele é enviado à API de conversão de fala em texto também para transcrições, então defina-o mesmo sem legendas. |
| Resumir transcrições | AM_CALLS_SUMMARIZE_TRANSCRIPTIONS | true para um resumo por IA após a chamada. |
openai: iniciar uma gravação tentaria então iniciar o transcritor do job-service e falharia.O áudio de todos que falam enquanto a transcrição está ativada é enviado ao servidor de conversão de fala em texto que você configurou, e a transcrição é publicada onde todos no canal podem lê-la. Avise seus usuários e mantenha esse servidor na sua própria rede se as chamadas forem confidenciais.
Gravações
As gravações de chamadas (e a transcrição com os transcritores integrados whisper.cpp ou Azure) são executadas em contêineres separados iniciados por um serviço de jobs, o calls-offloader de código aberto do Mattermost, que você implanta por conta própria ao lado do Antimatter. As configurações são Enable call recordings (AM_CALLS_ENABLE_RECORDINGS, desativado por padrão), Job service URL (AM_CALLS_JOB_SERVICE_URL), Maximum call recording duration (60 minutos por padrão, de 15 a 180) e Call recording quality (baixa, média ou alta; média por padrão). Nenhuma licença é necessária. Quando as gravações estão ativadas, o anfitrião de uma chamada inicia e encerra uma gravação com Record the call nos controles da chamada; todos na chamada veem que ela está sendo gravada, e a gravação é publicada no tópico da chamada quando ela é encerrada. Chamadas em canais de voz não têm tópico, portanto, não podem ser gravadas. Para apenas transcrições e legendas, a configuração de reconhecimento de voz acima é mais simples: ela não requer um serviço de jobs.