E-mails e notificações push

O Antimatter envia e-mails para convites, redefinições de senha, verificação e mensagens não lidas, e notificações push para o aplicativo móvel por meio de um proxy de push. Nenhum deles funciona até que você o configure.

E-mail de saída (SMTP)

O Antimatter envia e-mails por meio de um servidor SMTP fornecido por você: o servidor de e-mail da sua organização ou um serviço de e-mail transacional. Sem ele, as pessoas não podem redefinir uma senha esquecida, os convites e verificações por e-mail não chegam e ninguém recebe notificações por e-mail de mensagens não lidas.

Configure em Console do Sistema › Ambiente › SMTP ou com variáveis:

ConfiguraçãoChave e variávelPadrão
Servidor SMTPEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
Porta do Servidor de SMTPEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
Ativar Autenticação SMTPEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHdesativado sem segurança de conexão, ativado com ela
Usuário do Servidor de SMTPEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEvazio
Senha do Servidor de SMTPEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDvazio
Segurança da ConexãoEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYNenhum (vazio); ou TLS ou STARTTLS
Pular a Verificação do Certificado de ServidorEmailSettings.SkipServerCertificateVerificationdesativado. Mantenha-o desativado em produção.

Use STARTTLS na porta 587 ou TLS na porta 465, conforme indicado pelo seu provedor. Em seguida, clique em Testar Conexã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 arquivo compose do site coloca o servidor na rede padrão, que tem acesso à Internet, permitindo que ele alcance um servidor SMTP externo.

Configurações de e-mail do remetente e de notificações

Em Console do Sistema › Configuração do Site › Notificações:

ConfiguraçãoChavePadrão
Ativar Notificações por E-mailEmailSettings.SendEmailNotificationsligado
Notificação Nome de ExibiçãoEmailSettings.FeedbackNamevazio
Notificação a Partir do EndereçoEmailSettings.FeedbackEmailtest@example.com: altere-o
Notificação Endereço Reply-ToEmailSettings.ReplyToAddresstest@example.com: altere-o
Endereço de e-mail de suporteSupportSettings.SupportEmailvazio
Endereço de E-mail no Rodapé da NotificaçãoEmailSettings.FeedbackOrganizationvazio
Conteúdo da notificação 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 E-mail em LoteEmailSettings.EnableEmailBatchingdesativado. Quando ativado, as pessoas podem escolher receber as mensagens não lidas agrupadas em um único e-mail a cada 15 minutos ou a cada hora, em vez de um e-mail para cada mensagem.
Usar nome do canal nas notificações por e-mailEmailSettings.UseChannelInEmailNotificationsdesativado
Ativar o Aviso de Modo de Pré-visualizaçãoEmailSettings.EnablePreviewModeBannerativado: enquanto as notificações por e-mail estiverem desativadas, um aviso informa aos administradores que o e-mail não está configurado

O endereço de remetente deve ser um endereço como o qual seu servidor SMTP tem permissão para enviar; configure SPF e DKIM para o domínio, ou os e-mails podem acabar em pastas de spam.

As configurações de login relacionadas a e-mails (se novas contas devem verificar seu endereço, se convites podem ser enviados por e-mail) estão em Login e contas.

Notificações push para o aplicativo móvel

Como o push funciona

O Antimatter nunca se comunica diretamente com a Apple ou o Google. Para cada notificação, ele chama um proxy de push, que mantém as credenciais do aplicativo móvel e encaminha a notificação para a Apple (APNs) para iPhones e para o Google (Firebase Cloud Messaging) para celulares Android. A Apple e o Google só entregam uma notificação quando ela é enviada com as credenciais do aplicativo para o qual ela é destinada. Portanto, um proxy de push funciona com uma única versão do aplicativo móvel: aquela cujas credenciais ele mantém.

  • O Antimatter não executa um proxy de push público. Você executa o proxy de push do Antimatter por conta própria, com as credenciais da versão do aplicativo móvel que seus usuários instalam.
  • O Antimatter nunca envia notificações para os serviços de push do Mattermost, seja de teste ou hospedado: eles só entregam para os aplicativos móveis próprios do Mattermost. Se o servidor estiver configurado para um de seus endereços (como https://push-test.mattermost.com, usado por configurações antigas do Mattermost), ele não envia nada e registra um aviso na inicialização.

Um novo servidor não tem um servidor de notificações push, portanto não envia notificações push até que você configure o endereço do seu proxy de push. Até lá, o aplicativo móvel funciona, mas não recebe notificações.

Executar o proxy de push

O proxy de push está no repositório push-proxy. Seu README explica como obter as duas credenciais, que vêm das contas que publicam sua versão do aplicativo móvel:

  • Android: um arquivo de conta de serviço do projeto Firebase usado pela sua versão Android.
  • iOS: uma chave de autenticação APNs (AuthKey_<KEY ID>.p8) da conta de desenvolvedor da Apple que publica sua versão iOS, com seu ID de chave e ID de equipe.

Coloque-os ao lado do compose.yaml, com o arquivo 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 seu identificador de pacote, ID de chave e ID de equipe:

{
    "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 iOS da sua versão. ApplePushUseDevelopment é true apenas para versões instaladas a partir do Xcode. As chamadas tocam nos iPhones por meio de pushes VoIP, que usam a mesma chave e não exigem mais nada aqui.

O site possui uma adição pronta para o arquivo de composição, compose.push.example.yaml. Ele 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 inicialização, o log do proxy lista cada destino de push configurado e registra um erro para aqueles cujas credenciais não puderam ser carregadas. O proxy não publica nenhuma porta: apenas o Antimatter o alcança, na rede de composição.

Sem Docker, instale o pacote .deb ou .rpm do proxy de push: veja Os pacotes do serviço de GIF e do proxy de push.

O proxy de push não verifica quem o chama. Não o exponha à Internet. Se ele for executado em outro host, coloque-o atrás de HTTPS e restrinja quem pode acessá-lo: as notificações podem conter o texto da mensagem.

Aponte o Antimatter para o proxy

Em Console do Sistema › Ambiente › Servidor de Notificação Push, defina Ativar Notificações por Push como Enviar notificações push por meio do seu próprio proxy de push, e Servidor de Notificação Push como http://push-proxy:8066 (ou o endereço HTTPS do proxy, se ele for executado em outro local). A página não pode ser salva com esta opção e sem um 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: faça login com o aplicativo móvel, coloque-o em segundo plano e tenha outra conta mencionando você. Se nada chegar, procure por push no log do Antimatter e no log do proxy: eles indicam se o tipo de dispositivo é desconhecido, se uma chave foi rejeitada ou se o dispositivo pertence a outra compilação do aplicativo.

O que as notificações contêm

Console do Sistema › Configuração do Site › Notificações › Conteúdo Notificação 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 (padrão)full
Conteúdo completo da mensagem obtido do servidor no recebimentoid_loaded

Com id_loaded, a notificação que passa pelo proxy, Apple e Google carrega apenas um id, e o aplicativo busca a mensagem do seu servidor: o texto da mensagem nunca passa pelos serviços deles. É a melhor escolha quando as mensagens são confidenciais.

Máximo de Notificações por Canal, na página do Servidor de Notificações Push, (TeamSettings.MaxNotificationsPerChannel, 1000 por padrão) é o número máximo de membros que um canal pode ter para que @here, @all e @channel funcionem. Em canais maiores, essas menções e os indicadores de digitação são desativados.