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çãoChave e variávelPadrão
Servidor SMTPEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
Porta do servidor SMTPEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
Ativar autenticação SMTPEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHdesativado sem segurança de ligação, ativado com ela
Nome de utilizador do servidor SMTPEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEvazio
Palavra-passe do servidor SMTPEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDvazio
Segurança da ligaçãoEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYNenhuma (vazio); ou TLS ou STARTTLS
Ignorar verificação do certificado do servidorEmailSettings.SkipServerCertificateVerificationdesativado. 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çãoChavePadrão
Ativar notificações por e-mailEmailSettings.SendEmailNotificationsligado
Nome de apresentação das notificaçõesEmailSettings.FeedbackNamevazio
Endereço de origem das notificaçõesEmailSettings.FeedbackEmailtest@example.com: altere-o
Endereço de resposta das notificaçõesEmailSettings.ReplyToAddresstest@example.com: altere-o
Endereço de e-mail de suporteSupportSettings.SupportEmailvazio
Morada de envio no rodapé das notificaçõesEmailSettings.FeedbackOrganizationvazio
Conteúdo das notificações por e-mailEmailSettings.EmailNotificationContentsTypeEnviar o conteúdo completo da mensagem (full) ou uma descrição genérica com apenas o nome do remetente (generic)
Ativar agrupamento de e-mailsEmailSettings.EnableEmailBatchingdesativado. 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-mailEmailSettings.UseChannelInEmailNotificationsdesativado
Ativar banner do modo de pré-visualizaçãoEmailSettings.EnablePreviewModeBannerativado: 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.

O proxy de notificações push não verifica quem o chama. Não o exponha à Internet. Se for executado noutro anfitrião, coloque-o atrás de HTTPS e restrinja quem o pode alcançar: as notificações podem conter o texto das mensagens.

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çãoValor
Descrição genérica com apenas o nome do remetentegeneric_no_channel
Descrição genérica com os nomes do remetente e do canalgeneric
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çãoid_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.