Message Notify
Proporciona un framework de notificaciones basado en plugins para enviar entidades Message a través de varios canales de entrega como correo electrónico y SMS.
message_notify
Instalar
composer require 'drupal/message_notify:8.x-1.1'
composer require 'drupal/message_notify:8.x-1.5'
composer require 'drupal/message_notify:8.x-1.2'
Overview
Message Notify es un módulo complementario esencial para el módulo Message, proporcionando un framework de notificaciones flexible y extensible. Permite enviar entidades Message a los usuarios a través de varios canales de entrega utilizando una arquitectura basada en plugins.
El módulo incluye soporte integrado para notificaciones por correo electrónico y proporciona la base para notificaciones SMS (requiere el módulo SMS Framework). Los desarrolladores pueden crear plugins notifier personalizados para soportar métodos de entrega adicionales como notificaciones push, mensajes de Slack o cualquier otro canal de comunicación.
Message Notify aprovecha los view modes de Drupal para controlar cómo se renderiza el contenido del mensaje para diferentes canales de notificación. Para notificaciones por correo electrónico, crea automáticamente los view modes 'Notify - Email subject' y 'Notify - Email body', permitiendo a los constructores de sitios configurar qué campos aparecen en los asuntos y cuerpos de los correos electrónicos por separado.
Features
- Sistema notifier basado en plugins que permite métodos de entrega extensibles para enviar mensajes
- Plugin Email notifier integrado que utiliza el sistema de correo de Drupal para entregar mensajes
- Base del plugin SMS notifier (requiere el módulo SMS Framework para la entrega real)
- Creación automática de view modes de correo electrónico (mail_subject, mail_body) cuando se crean nuevas plantillas de mensaje
- Soporte multilingüe con opción de usar el idioma preferido del propietario del mensaje o el idioma del mensaje
- Comportamiento configurable de guardado de mensajes en entregas exitosas o fallidas
- Capacidad de almacenar la salida renderizada en campos del mensaje para propósitos de archivo
- Soporte de Token para contenido dinámico en mensajes (heredado del módulo Message)
- Dirección 'from' personalizable para notificaciones por correo electrónico
- Control de acceso para plugins notifier para determinar si las notificaciones deben enviarse
Use Cases
Sistema de notificación de comentarios
Enviar notificaciones por correo electrónico a los autores de contenido cuando se publican comentarios en sus nodos. Crear una plantilla de mensaje con campos de asunto y cuerpo, configurar los view modes, luego usar hook_comment_insert() para crear y enviar un mensaje al autor del nodo usando el servicio message_notify.sender.
Notificaciones de registro de usuario
Notificar a los administradores cuando se registran nuevos usuarios. Crear una plantilla de mensaje para notificaciones de registro, luego implementar hook_user_insert() para crear un mensaje y enviarlo a los usuarios administradores por correo electrónico.
Actualizaciones de estado de pedido (comercio electrónico)
Enviar correos electrónicos transaccionales para cambios de estado de pedidos en sitios de comercio electrónico. Crear plantillas de mensaje para cada estado de pedido (realizado, enviado, entregado) con el contenido apropiado, luego activar notificaciones cuando cambian los estados de los pedidos.
Notificaciones de flujo de trabajo de moderación de contenido
Notificar a los editores cuando se envía contenido para revisión, o a los autores cuando el contenido es publicado/rechazado. Integrar con Content Moderation de Drupal para enviar notificaciones apropiadas en cada transición del flujo de trabajo.
Notificaciones multicanal personalizadas
Crear un plugin notifier personalizado para enviar notificaciones a través de canales adicionales como Slack, Telegram o notificaciones push. Extender MessageNotifierBase e implementar el método deliver() para integrar con servicios externos.
Sistema de correo electrónico de resumen
Combinar con Queue API para crear correos electrónicos de resumen. En lugar de entrega inmediata, encolar mensajes y enviar correos electrónicos de resumen periódicos que contengan múltiples notificaciones usando view modes y plantillas personalizados.
Tips
- Configurar el view mode 'Notify - Email subject' para mostrar solo el primer parcial del campo de texto de tu plantilla de mensaje para crear asuntos de correo electrónico concisos.
- Usar la opción 'language override' para enviar correos electrónicos en el idioma del mensaje en lugar del idioma preferido del destinatario - útil para notificaciones del sistema.
- Almacenar la salida renderizada en campos personalizados usando la opción 'rendered fields' para mantener un archivo de exactamente lo que se envió a los usuarios.
- Crear plugins notifier personalizados extendiendo MessageNotifierBase - solo necesitas implementar el método deliver().
- Usar hook_mail_alter() para agregar cabeceras personalizadas, adjuntos o modificar correos electrónicos antes de que se envíen.
- La entidad message está disponible en email $params['message_entity'] para usar en implementaciones de hook_mail_alter().
- Probar la entrega de correo electrónico con módulos como Maillog o Devel para capturar correos salientes durante el desarrollo.
- Habilitar el submódulo message_notify_example para ver una implementación funcional de notificaciones de comentarios.
Technical Details
Hooks 3
hook_message_notifier_info_alter
Permite a los módulos modificar las definiciones de plugins notifier descubiertos por el gestor de plugins.
hook_mail
Message Notify implementa hook_mail() para establecer el asunto y cuerpo del correo electrónico desde los view modes del mensaje renderizado.
hook_mail_alter
Hook estándar de Drupal que puede usarse para modificar correos electrónicos enviados por Message Notify antes de la entrega. La entidad message está disponible en $params['message_entity'].
Troubleshooting 6
Verificar que el sistema de correo de Drupal esté correctamente configurado. Revisar los ajustes del sistema de correo en /admin/config/system/mailsystem. Considerar usar un módulo como SMTP o Mailsystem para configurar la entrega de correo electrónico. Revisar los logs de Drupal para cualquier error relacionado con el correo.
Asegurar que los view modes 'Notify - Email subject' y 'Notify - Email body' estén correctamente configurados para tu plantilla de mensaje. Ir a Estructura > Plantillas de mensaje > [Tu plantilla] > Gestionar presentación y configurar qué campos aparecen en cada view mode.
Este error ocurre cuando el plugin notifier especificado no existe. Verificar el nombre del notifier pasado al método send(). El predeterminado es 'email'. Para SMS, asegurar que el módulo SMS Framework esté instalado y configurado.
Los mensajes deben tener un propietario (uid) establecido, o debes pasar una opción 'mail' con la dirección de correo electrónico del destinatario. Establecer el propietario del mensaje con $message->setOwnerId($uid) o pasar ['mail' => 'recipient@example.com'] en el array de opciones.
Por defecto, los mensajes se guardan solo en entrega exitosa. Revisar las opciones 'save on success' y 'save on fail'. Pasar ['save on success' => TRUE, 'save on fail' => TRUE] para guardar siempre los mensajes independientemente del resultado de la entrega.
Los view modes se crean automáticamente cuando se crean nuevos bundles de mensaje, pero solo si el módulo fue habilitado primero. Para plantillas existentes, crear manualmente las visualizaciones de entidad en Estructura > Plantillas de mensaje > [Plantilla] > Gestionar presentación.
Security Notes 4
- Siempre validar y sanear cualquier contenido proporcionado por el usuario en las plantillas de mensaje para prevenir ataques XSS en el contenido del correo electrónico.
- Ser cauteloso con la opción 'mail' - validar las direcciones de correo electrónico antes de enviar para prevenir ataques de inyección de correo electrónico.
- Los asuntos de correo electrónico tienen HTML eliminado automáticamente por seguridad, pero el contenido del cuerpo aún debe ser correctamente saneado.
- Implementar controles de acceso apropiados en el método access() de los plugins notifier personalizados para prevenir el envío no autorizado de notificaciones.