Correo electrónico y notificaciones push

Antimatter envía correos electrónicos para invitaciones, restablecimientos de contraseña, verificación y mensajes perdidos, y notificaciones push a la aplicación móvil a través de un proxy de push. Ninguno funciona hasta que lo configures.

Correo saliente (SMTP)

Antimatter envía correos electrónicos a través de un servidor SMTP que tú proporciones: el servidor de correo de tu organización o un servicio de correo transaccional. Sin él, las personas no pueden restablecer una contraseña olvidada, las invitaciones y verificaciones por correo no llegan, y nadie recibe notificaciones por correo de los mensajes perdidos.

Configúralo en Consola de sistema › Entorno › SMTP, o con variables:

AjusteClave y variablePredeterminado
Servidor SMTPEmailSettings.SMTPServer, AM_EMAILSETTINGS_SMTPSERVERlocalhost
Puerto del Servidor SMTPEmailSettings.SMTPPort, AM_EMAILSETTINGS_SMTPPORT10025
Habilitar Autenticación SMTPEmailSettings.EnableSMTPAuth, AM_EMAILSETTINGS_ENABLESMTPAUTHdesactivado sin seguridad de conexión, activado con ella
Nombre de usuario del Servidor SMTPEmailSettings.SMTPUsername, AM_EMAILSETTINGS_SMTPUSERNAMEvacío
Contraseña del Servidor SMTPEmailSettings.SMTPPassword, AM_EMAILSETTINGS_SMTPPASSWORDvacío
Seguridad de ConexiónEmailSettings.ConnectionSecurity, AM_EMAILSETTINGS_CONNECTIONSECURITYNinguna (vacío); o TLS o STARTTLS
Omitir la Verificación del Certificado del ServidorEmailSettings.SkipServerCertificateVerificationdesactivado. Déjalo desactivado en producción.

Usa STARTTLS en el puerto 587 o TLS en el puerto 465, según indique tu proveedor. Luego haz clic en Probar conexión en la misma página: Antimatter enviará un correo de prueba a tu propia dirección.

Una configuración típica con Docker Compose, en compose.override.yaml junto a 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

Coloca SMTP_PASSWORD en .env. El archivo compose del sitio coloca el servidor en la red predeterminada, que tiene acceso a Internet, por lo que puede alcanzar un servidor SMTP externo.

Configuración de correo del remitente y de notificaciones

En Consola de sistema › Configuración del Sitio › Notificaciones:

AjusteClavePredeterminado
Habilitar Notificaciones por Correo ElectrónicoEmailSettings.SendEmailNotificationsactivado
Nombre a mostrar en las NotificacionesEmailSettings.FeedbackNamevacío
Dirección para Notificación de correo electrónicoEmailSettings.FeedbackEmailtest@example.com: cámbiala
Dirección de Responder-a para las NotificacionesEmailSettings.ReplyToAddresstest@example.com: cámbiala
Dirección de correo electrónico de asistenciaSupportSettings.SupportEmailvacío
Dirección del correo electrónico del pie de páginaEmailSettings.FeedbackOrganizationvacío
Contenido de las Notificaciones por correo electrónicoEmailSettings.EmailNotificationContentsTypeEnviar el contenido completo del mensaje (full), o una descripción genérica con solo el nombre del remitente (generic)
Habilitar procesamiento por lotes de correos electrónicosEmailSettings.EnableEmailBatchingdesactivado. Si se activa, las personas pueden elegir recibir los mensajes perdidos agrupados en un solo correo cada 15 minutos o cada hora, en lugar de un correo por cada uno.
Usar nombre del canal en las notificaciones por correo electrónicoEmailSettings.UseChannelInEmailNotificationsdesactivado
Habilitar Anuncio de Modo de PruebaEmailSettings.EnablePreviewModeBanneractivado: mientras las notificaciones por correo están desactivadas, un anuncio informa a los administradores de que el correo no está configurado

La dirección de remitente debe ser una que tu servidor SMTP tenga permiso para usar; configura SPF y DKIM para su dominio, o los correos electrónicos podrían terminar en las carpetas de correo no deseado.

Los ajustes de inicio de sesión relacionados con el correo electrónico (si las nuevas cuentas deben verificar su dirección, si se pueden enviar invitaciones por correo electrónico) se encuentran en Inicio de sesión y cuentas.

Notificaciones push a la app móvil

Cómo funciona el envío de notificaciones push

Antimatter nunca se comunica directamente con Apple o Google. Para cada notificación, llama a un proxy de push, que almacena las credenciales de la aplicación móvil y reenvía la notificación a Apple (APNs) para iPhones y a Google (Firebase Cloud Messaging) para teléfonos Android. Apple y Google solo entregan una notificación cuando se envía con las credenciales de la aplicación para la que está destinada. Por lo tanto, un proxy de push funciona con una sola compilación de la aplicación móvil: la que posee sus credenciales.

  • Antimatter no ejecuta un proxy de push público. Tú ejecutas el proxy de push de Antimatter, con las credenciales de la compilación de la aplicación móvil que instalan tus usuarios.
  • Antimatter nunca envía notificaciones a los servicios de push de Mattermost, ya sean de prueba o alojados: estos solo entregan a las propias aplicaciones móviles de Mattermost. Si el servidor se configura con una de sus direcciones (como https://push-test.mattermost.com, que usan las configuraciones antiguas de Mattermost), no envía nada y registra una advertencia al inicio.

Un servidor nuevo no tiene un servidor de notificaciones push, por lo que no envía notificaciones push hasta que configures la dirección de tu proxy de push. Hasta entonces, la aplicación móvil funciona, pero no recibe notificaciones.

Ejecutar el proxy de push

El proxy de push se encuentra en el repositorio push-proxy. Su README explica cómo obtener las dos credenciales, que provienen de las cuentas que publican tu compilación de la aplicación móvil:

  • Android: un archivo de cuenta de servicio del proyecto de Firebase que usa tu compilación de Android.
  • iOS: una clave de autenticación de APNs (AuthKey_<KEY ID>.p8) de la cuenta de desarrollador de Apple que publica tu compilación de iOS, junto con su ID de clave y ID de equipo.

Colócalos junto a compose.yaml, junto con el archivo de configuración del proxy:

push-proxy/
  config/antimatter-push-proxy.json
  certs/AuthKey_ABCDE12345.p8
  certs/firebase-service-account.json

push-proxy/config/antimatter-push-proxy.json, con tu identificador de paquete, ID de clave e ID de equipo:

{
    "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 es el identificador de paquete de iOS de tu compilación. ApplePushUseDevelopment es true solo para compilaciones instaladas desde Xcode. Las llamadas suenan en los iPhones a través de push VoIP, que usan la misma clave y no requieren nada más aquí.

El sitio incluye una adición lista para usar en el archivo de composición, compose.push.example.yaml. Ejecuta la imagen 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

Al iniciar, el registro del proxy indica cada destino de notificaciones push que configuró y registra un error para aquellos cuyas credenciales no puede cargar. El proxy no publica ningún puerto: solo Antimatter puede acceder a él, a través de la red de composición.

Sin Docker, instala en su lugar el paquete .deb o .rpm del proxy de notificaciones: consulta Los paquetes del servicio de GIF y del proxy de notificaciones.

El proxy de notificaciones push no verifica quién lo llama. No lo expongas a Internet. Si se ejecuta en otro host, colócalo detrás de HTTPS y restringe quién puede acceder a él: las notificaciones pueden contener el texto de los mensajes.

Configura Antimatter para que apunte al proxy

En Consola de sistema › Entorno › Servidor de Notificaciones Móviles, establece Habilitar las Notificaciones a Dispositivos Móviles en Enviar notificaciones push a través de tu propio proxy de push, y Servidor de Notificaciones Móviles en http://push-proxy:8066 (o la dirección HTTPS del proxy si se ejecuta en otro lugar). No se puede guardar la página con esta opción y sin dirección. Para dejar de enviar notificaciones push, selecciona No enviar notificaciones a dispositivos móviles. O mediante variables en el servicio antimatter:

AM_EMAILSETTINGS_SENDPUSHNOTIFICATIONS: "true"
AM_EMAILSETTINGS_PUSHNOTIFICATIONSERVER: http://push-proxy:8066

Para verificar: inicia sesión con la aplicación móvil, ponla en segundo plano y que otra cuenta te mencione. Si no llega nada, busca push en el registro de Antimatter y en el registro del proxy: indican si el tipo de dispositivo es desconocido, si se rechazó una clave o si el dispositivo pertenece a otra compilación de la aplicación.

Contenido de las notificaciones

Consola de sistema › Configuración del Sitio › Notificaciones › Contenido de las Notificaciones Móviles (EmailSettings.PushNotificationContents):

OpciónValor
Descripción genérica con solo el nombre del remitentegeneric_no_channel
Descripción genérica con los nombres del remitente y del canalgeneric
Contenido completo del mensaje enviado en la carga de la notificación (predeterminado)full
Contenido completo del mensaje recuperado del servidor al recibirloid_loaded

Con id_loaded, la notificación que pasa por el proxy, Apple y Google solo transportan un id, y la aplicación recupera el mensaje de tu servidor: el texto del mensaje nunca pasa por sus servicios. Es la mejor opción cuando los mensajes son confidenciales.

Cantidad Max de Notificaciones por Canal, en la página Servidor de Notificaciones Móviles, (TeamSettings.MaxNotificationsPerChannel, 1000 por defecto) es la cantidad máxima de miembros que puede tener un canal para que @here, @all y @channel funcionen. En canales más grandes, esas menciones y los indicadores de escritura se desactivan.