Symfony. Introducción al componente Symfony Notifier
Envía mensajes a los usuarios empleando distintos canales de comunicación
El componente Symfony Notifier ha sido introducido de forma experimental en la última versión de Symfony añadiendo una capa de abstracción para el envío de mensajes a los usuarios por medio de distintos canales.
He creado este artículo para realizar una pequeña introducción a este componente, mostrar su uso y animaros a probarlo en vuestras aplicaciones ya que lo que ofrece es realmente util.
¡Vamos a verlo!
“Channels” y “Transports”
La idea que subyace detrás del componente Symfony Notifier es el concepto de “channel”, el cual representa un determinado tipo/canal de comunicación (por ejemplo el email, un chat o los SMS) con los usuarios de nuestra aplicación.
Por ejemplo, el canal “chat” representa cualquier servicio de tipo chat (Slack, Telegram…) Empleando el componente “Notifier” enviaremos mensajes a través de este canal y los transports que hayamos definido para ese canal (Slack, Twilio para SMS, …) los llevarán a su destino final.
Gracias a este componente obtenemos una implementación única para el envío de mensajes, recayendo sobre los servicios integradores (transports) la conexión con los servicios de terceros.
“Channel email”
Probablemente el primer canal de comunicación que se nos venga a la cabeza cuando necesitamos enviar emails transaccionales a los usuarios sea el email.
Symfony Notifier provee un canal específico para comunicaciones vía email que se integra completamente (¡cómo no!) con Symfony Mailer (componente que vino a sustituir definitivamente a Swift Mailer) y del cual ya os hablé hace unos meses en este artículo:
Por tanto, si queremos enviar notificaciones por medio del canal “email” lo recomendable es instalar y configurar este componente, algo que es bastante sencillo como podéis ver en la propia documentación de Symfony.
La integración además requiere tener instalados los siguientes paquetes:
- Twig y TwigExtraBundle.
- El paquete Twig Inky de cara a poder transformar nuestras plantillas Twig en plantillas Inky (un lenguaje basado en HTML para la generación de emails responsive “sin dolor”).
- El paquete Twig CSSInliner para poder añadir los estilos CSS de forma inline dentro de nuestras plantillas Twig.
Nota. Aquí podéis leer más sobre Inky por si queréis usar este sistema de plantillas en vuestro proyecto:
Enviando una notificación vía email
Una vez que tengamos configurado el componente Mailer, si queremos enviar una notificación al usuario bastará con realizar lo siguiente:

- Inyectaremos el servicio
Notifier
que implementa la interfazNotifierInterface
. - Crearemos un objeto de la clase
Notification
que recibe como argumentos el asunto de la notificación y los canales a los que queremos enviarla (en este caso sólo usaremos elemail
. - Creada la notificación, crearemos un objeto
Recipient
al que le pasaremos el email del usuario. - Y finalmente emplearemos el objeto
notifier
para enviar la notificación.
Enviando notificaciones a Slack
Como comentaba al comienzo del artículo el componente Notifier define varios canales. Entre ellos se encuentra el que permite enviar notificaciones por medio del transport chat para por ejemplo, conectarnos a Slack.
Para ello basta con añadir a nuestro archivo .env
el DSN de Slack (compuesto de nuestro Token privado y el Canal de Slack):
SLACK_DSN=slack://TOKEN@default?channel=CHANNEL
Y añadir a la configuración del componente notifier
este transport:
framework:
notifier:
chatter_transports:
slack: '%env(SLACK_DSN)%'
(https://symfony.com/doc/current/notifier.html)
La magia para que la configuración sea tan sencilla ocurre dentro de la clase Transport.php
la cual emplea las factorías de cada uno de los servicios para crear un objeto que implemente la interfaz TransportInterface
:

Estas factorías se encuentran dentro de la carpeta Bridge del propio componente:
Gracias a esto basta con añadir el channel chat/slack
al array que pasamos como segundo argumento cuando creamos el objeto Notification
para enviar esa notificación también a Slack:

Bonus track: Política de notificaciones
Una de las características más interesantes del componente Symfony Notifier es la posibilidad de establecer políticas para el envío de notificaciones. Dicho de otro modo, podemos asignar una importancia a las notificaciones y que en función de esa prioridad se envíen por un canal u otro.
Por ejemplo, podemos querer que las notificaciones urgentes se envíen por slack
y email
pero que las de prioridad media sólo se envíen por email
. Para ello basta con añadir la siguiente configuración al componente:
framework:
notifier:
# ...
channel_policy:
urgent: ['chat/slack', 'email']
medium: ['email']
Y asignar la importancia a la notificación en el momento de crearla:

La notificación, al ser establecida como urgente, irá por tanto por estos dos canales.
Conclusiones
Como veis, el nuevo componente Notifier de Symfony simplifica en gran medida la forma en que enviamos comunicaciones a los usuarios de nuestra aplicación, ya sea por email, SMS u otros canales.
Además, es uno de los componentes a los que más se está prestando atención desde el equipo de Symfony, y un tema habitual en las charlas de Fabien Potencier, cuyas diapositivas podéis ver en el siguiente enlace:
Apóyame en Patreon
Gracias a: Alex Fuentes.
¿Quieres recibir más artículos como este?
Si te ha gustado este artículo te animo a que te suscribas a la newsletter que envío cada domingo con publicaciones similares a esta y más contenido recomendado: 👇👇👇