Notificações por e-mail e push
O Antimatter envia e-mails para convites, redefinições de palavra-passe, verificação e mensagens perdidas, e notificações push para a aplicação móvel através de um proxy de push. Nenhum destes funciona até que o configure.
E-mail de saída (SMTP)
O Antimatter envia e-mails através de um servidor SMTP que fornece: o servidor de correio da sua organização ou um serviço de e-mail transacional. Sem ele, as pessoas não podem redefinir uma palavra-passe esquecida, os convites e verificações por e-mail não chegam e ninguém recebe notificações por e-mail de mensagens perdidas.
Configure-o em Consola do sistema › Ambiente › SMTP, ou com variáveis:
| Definição | Chave e variável | Padrão |
|---|---|---|
| Servidor SMTP | EmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVER | localhost |
| Porta do servidor SMTP | EmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT | 10025 |
| Ativar autenticação SMTP | EmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTH | desativado sem segurança de ligação, ativado com ela |
| Nome de utilizador do servidor SMTP | EmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAME | vazio |
| Palavra-passe do servidor SMTP | EmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORD | vazio |
| Segurança da ligação | EmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITY | Nenhuma (vazio); ou TLS ou STARTTLS |
| Ignorar verificação do certificado do servidor | EmailSettings.SkipServerCertificateVerification | desativado. Mantenha-o desativado em produção. |
Use STARTTLS na porta 587 ou TLS na porta 465, conforme indicado pelo seu prestador. Em seguida, clique em Testar ligação na mesma página: o Antimatter envia um e-mail de teste para o seu próprio endereço.
Uma configuração típica com Docker Compose, em compose.override.yaml ao lado de compose.yaml:
services:
antimatter:
environment:
AM_EMAILSETTINGS_SMTPSERVER: smtp.example.com
AM_EMAILSETTINGS_SMTPPORT: "587"
AM_EMAILSETTINGS_CONNECTIONSECURITY: STARTTLS
AM_EMAILSETTINGS_ENABLESMTPAUTH: "true"
AM_EMAILSETTINGS_SMTPUSERNAME: chat@example.com
AM_EMAILSETTINGS_SMTPPASSWORD: ${SMTP_PASSWORD}
AM_EMAILSETTINGS_FEEDBACKNAME: Antimatter
AM_EMAILSETTINGS_FEEDBACKEMAIL: chat@example.com
AM_EMAILSETTINGS_REPLYTOADDRESS: chat@example.com
Coloque SMTP_PASSWORD em .env. O ficheiro compose do site coloca o servidor na rede predefinida, que tem acesso à Internet, pelo que pode alcançar um servidor SMTP externo.
Definições de remetente e e-mail de notificação
Em Consola do sistema › Configuração do site › Notificações:
| Definição | Chave | Padrão |
|---|---|---|
| Ativar notificações por e-mail | EmailSettings.SendEmailNotifications | ligado |
| Nome de apresentação das notificações | EmailSettings.FeedbackName | vazio |
| Endereço de origem das notificações | EmailSettings.FeedbackEmail | test@example.com: altere-o |
| Endereço de resposta das notificações | EmailSettings.ReplyToAddress | test@example.com: altere-o |
| Endereço de e-mail de suporte | SupportSettings.SupportEmail | vazio |
| Morada de envio no rodapé das notificações | EmailSettings.FeedbackOrganization | vazio |
| Conteúdo das notificações por e-mail | EmailSettings.EmailNotificationContentsType | Enviar o conteúdo completo da mensagem (full) ou uma descrição genérica com apenas o nome do remetente (generic) |
| Ativar agrupamento de e-mails | EmailSettings.EnableEmailBatching | desativado. Ativado, as pessoas podem escolher receber as mensagens perdidas agrupadas num único e-mail a cada 15 minutos ou a cada hora, em vez de um e-mail para cada uma. |
| Utilizar nome do canal nas notificações por e-mail | EmailSettings.UseChannelInEmailNotifications | desativado |
| Ativar banner do modo de pré-visualização | EmailSettings.EnablePreviewModeBanner | ativado: enquanto as notificações por e-mail estiverem desativadas, um banner informa os administradores de que o e-mail não está configurado |
O endereço de remetente (From) deve ser um endereço a partir do qual o seu servidor SMTP tem permissão para enviar; configure o SPF e o DKIM para o respetivo domínio, ou os e-mails podem acabar nas pastas de spam.
As definições de início de sessão relacionadas com e-mail (se as novas contas devem verificar o seu endereço, se os convites podem ser enviados por e-mail) estão em Início de sessão e contas.
Notificações push para a aplicação móvel
Como funciona o push
O Antimatter nunca se comunica diretamente com a Apple ou com o Google. Para cada notificação, chama um proxy de push, que detém as credenciais da aplicação móvel e reencaminha a notificação para a Apple (APNs) no caso de iPhones e para o Google (Firebase Cloud Messaging) no caso de telemóveis Android. A Apple e o Google só entregam uma notificação quando esta é enviada com as credenciais da aplicação a que se destina. Assim, um proxy de push funciona com uma única compilação da aplicação móvel: aquela cujas credenciais detém.
- O Antimatter não disponibiliza um proxy de push público. É si que executa o proxy de push do Antimatter, com as credenciais da compilação da aplicação móvel que os seus utilizadores instalam.
- O Antimatter nunca envia notificações para os serviços de push do Mattermost, de teste ou alojados: estes só entregam notificações para as aplicações móveis próprias do Mattermost. Se o servidor estiver configurado com um dos seus endereços (como
https://push-test.mattermost.com, que as configurações antigas do Mattermost utilizam), não envia nada e regista um aviso no arranque.
Um servidor novo não tem um servidor de notificações push, pelo que não envia notificações push até definir o endereço do seu proxy de push. Até lá, a aplicação móvel funciona, mas não recebe notificações.
Executar o proxy de push
O proxy de push está no repositório push-proxy. O seu README explica como obter as duas credenciais, que provêm das contas que publicam a sua compilação da aplicação móvel:
- Android: um ficheiro de conta de serviço do projeto Firebase utilizado pela sua compilação para Android.
- iOS: uma chave de autenticação APNs (
AuthKey_<KEY ID>.p8) da conta de desenvolvedor da Apple que publica a sua compilação para iOS, com o respetivo ID de chave e ID de equipa.
Coloque-os junto de compose.yaml, com o ficheiro de configuração do proxy:
push-proxy/
config/antimatter-push-proxy.json
certs/AuthKey_ABCDE12345.p8
certs/firebase-service-account.json
push-proxy/config/antimatter-push-proxy.json, com o seu identificador de pacote (bundle identifier), ID de chave e ID de equipa:
{
"ListenAddress": ":8066",
"ThrottlePerSec": 300,
"ThrottleMemoryStoreSize": 50000,
"ThrottleVaryByHeader": "X-Forwarded-For",
"EnableMetrics": false,
"SendTimeoutSec": 30,
"RetryTimeoutSec": 8,
"ApplePushSettings": [
{
"Type": "apple_rn",
"ApplePushUseDevelopment": false,
"ApplePushTopic": "chat.antimatter.app",
"AppleAuthKeyFile": "./certs/AuthKey_ABCDE12345.p8",
"AppleAuthKeyID": "ABCDE12345",
"AppleTeamID": "FGHIJ67890"
}
],
"AndroidPushSettings": [
{
"Type": "android_rn",
"ServiceFileLocation": "./certs/firebase-service-account.json"
}
],
"EnableConsoleLog": true,
"EnableFileLog": false,
"LogFormat": "plain",
"LogLevel": "info"
}
ApplePushTopic é o identificador de pacote (bundle identifier) iOS da sua compilação. ApplePushUseDevelopment é true apenas para compilações instaladas a partir do Xcode. As chamadas tocam nos iPhones através de pushes VoIP, que utilizam a mesma chave e não requerem mais nada aqui.
O site tem uma adição pronta a usar para o ficheiro de composição, compose.push.example.yaml. Executa a imagem publicada, ghcr.io/antimatterchat/push-proxy:latest.
curl -fsSLO https://antimatter.chat/compose.push.example.yaml
docker compose -f compose.yaml -f compose.push.example.yaml --profile push up -d
docker compose -f compose.yaml -f compose.push.example.yaml logs push-proxy
Na arrancagem, o registo do proxy indica cada destino de notificação push configurado e regista um erro para qualquer credencial que não consiga carregar. O proxy não publica qualquer porta: apenas o Antimatter o alcança, através da rede de composição.
Sem Docker, instale o pacote .deb ou .rpm do proxy de push: consulte Os pacotes do serviço de GIF e do proxy de push.
Aponte o Antimatter para o proxy
Na Consola do sistema › Ambiente › Servidor de notificações push, defina Ativar notificações push como Enviar notificações push através do seu próprio proxy de push e Servidor de notificações push como http://push-proxy:8066 (ou o endereço HTTPS do proxy, se este estiver noutro local). A página não pode ser guardada com esta opção e sem endereço. Para parar de enviar notificações push, escolha Não enviar notificações push. Ou com variáveis no serviço antimatter:
AM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS: "true"
AM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER: http://push-proxy:8066
Para verificar: inicie sessão com a aplicação móvel, coloque-a em segundo plano e faça com que outra conta o mencione. Se nada chegar, procure por push no registo do Antimatter e no registo do proxy: estes indicam se o tipo de dispositivo é desconhecido, se uma chave foi rejeitada ou se o dispositivo pertence a outra compilação da aplicação.
Conteúdo das notificações
Consola do sistema › Configuração do site › Notificações › Conteúdo das notificações push (EmailSettings.PushNotificationContents):
| Opção | Valor |
|---|---|
| Descrição genérica com apenas o nome do remetente | generic_no_channel |
| Descrição genérica com os nomes do remetente e do canal | generic |
| Conteúdo completo da mensagem enviado no payload da notificação (predefinição) | full |
| Conteúdo completo da mensagem obtido do servidor no momento da receção | id_loaded |
Com id_loaded, a notificação que passa pelo proxy, Apple e Google transporta apenas um id, e a aplicação obtém a mensagem do seu servidor: o texto da mensagem nunca passa pelos seus serviços. É a melhor opção quando as mensagens são confidenciais.
Limite de notificações para canais grandes, na página do Servidor de notificações push (TeamSettings.MaxNotificationsPerChannel, 1000 por omissão), é o número máximo de membros que um canal pode ter para que as menções @here, @all e @channel funcionem. Em canais maiores, essas menções e os indicadores de digitação são desativados.