Pasar al contenido principal
Main Image
Imagen
danse
03. Agosto 2020

La solución definitiva de suscripción y notificación para Drupal

by Jürgen Haas

Situación actual

Casi todos los sitios web tienen un requisito en común: ser notificados cuando sucede algo específico. Ya sea una nueva entrada en el blog, un nuevo comentario, una versión modificada de un nodo, una excepción en los registros o una cuenta de usuario eliminada, el administrador del sitio o los visitantes del mismo quieren ser notificados de algunas o de todas estas cosas.

Aunque este requisito es bastante común, los individuos tienen opiniones muy diferentes sobre cómo quieren ser notificados. Sin entrar en una discusión sobre la eficacia del correo electrónico, parece suficiente con pensar en todos los demás canales disponibles, como Slack, push móvil, sistemas de tickets o incluso SMS.

La construcción de sitios web con Drupal hace que uno se pregunte por qué la pila de soluciones para estas necesidades está tan fragmentada como lo ha estado durante más de una década. Sólo en Drupal 8 y 9 se pueden encontrar más de 100 módulos para el término de búsqueda "notify". Al menos 40 de ellas deberían considerarse soluciones serias, ya que cuentan con versiones estables y cobertura de avisos de seguridad. Pero cada uno de ellos aborda sólo un aspecto a la vez, es decir, sólo los nodos o sólo los comentarios o los estados del flujo de trabajo o las excepciones o lo que sea. Y luego la mayoría de ellos sólo proporcionan notificaciones por correo electrónico para cada uno de los tipos de eventos para los que fueron construidos.

Nuestra solución

Dado que esto no es propio de un marco de trabajo de aplicaciones web profesionales como Drupal, era hora de sentarse y abordar esta área de forma genérica, escalable, configurable y mantenible para que la comunidad pueda construir sobre ella y estar preparada para los requisitos actuales y futuros - porque los requisitos de suscripción y notificación están bajo constante presión para adaptarse y mejorar ya que el mundo que nos rodea también está en constante cambio.

El equipo de bitegra solutions en Alemania ha invertido casi 2 años en el análisis del problema, el diseño de la solución, la arquitectura del software y el desarrollo para proporcionar la solución definitiva para Drupal. Hemos decidido publicar todos los componentes disponibles en drupal.org y dejar que la comunidad participe en los beneficios, pero también en el futuro mantenimiento y desarrollo de las características existentes y adicionales y los canales de notificación de forma gratuita.

Hacemos la maleta y nos llevamos...

Esta es la parte 1 de una serie de publicaciones en el blog en la que se presenta la idea y la implementación y cómo puedes utilizarla tú mismo en proyectos de Drupal de cualquier tamaño:

  • Parte 1 (estás aquí): Introducción y arquitectura del sistema
  • Parte 2: Introducción a las suscripciones y notificaciones
  • Parte 3: Cómo añadir nuevos canales de notificación
  • Parte 4: cubrir más eventos para las notificaciones
  • Parte 5: Personalización de la salida de notificaciones

Arquitectura del sistema

Empecemos con una lista de requisitos:

  • Contenidos, es decir, entidades:
    • Crear, actualizar, eliminar y empujar/despublicar.
      • Cada tipo de entidad y paquete
      • Cada paquete con ajustes individuales y detallados
      • Configuración: seguimiento de todos los cambios en la configuración del sitio
    • Logger: rastrea todas las entradas de registro por encima de un umbral configurado
    • Eventos externos: permite que otros servicios de la red corporativa notifiquen al mismo público
    • Permitir a los desarrolladores desplegar nuevos plugins para crear notificaciones
  • Ser flexible con los destinatarios
    • Los usuarios autentificados deben poder suscribirse/suscribirse a cualquier evento disponible configurado en el sitio y puesto a disposición para suscribirse
    • La configuración del sitio debe permitir la preselección de destinatarios para cada tipo de evento disponible
    • Los editores de contenido con el permiso adecuado deben poder anular los valores predeterminados de las notificaciones por acción de la entidad (crear, actualizar, eliminar, publicar, despublicar)
    • Permitir a los desarrolladores aplicar reglas de selección de destinatarios personalizadas
    • Soporta múltiples canales de notificación
    • Permitir a los constructores de sitios habilitar cualquier número de canales de notificación diferentes a la vez
  • Permitir a los usuarios definir sus propias preferencias para la prioridad de los canales
    • Asegurar que cada usuario sea notificado sólo una vez por cada evento
    • Asegurar y seguir la entrega de las notificaciones
    • Proporcionar buenos valores por defecto para la presentación de notificaciones por canal
    • Permitir a los constructores de sitios modificar la salida de las notificaciones
    • Permitir a los desarrolladores añadir nuevos canales

Al recopilar y estructurar los requisitos, quedó claro que hay 3 fases aisladas que deben abordarse por separado:

  1. Captura de eventos
  2. Selección del destinatario y creación de la notificación
  3. Entrega de la notificación

Sí, la fase 2 implica dos pasos: Para cada evento, hay que identificar a todos los destinatarios relevantes, y se crea una entidad de notificación para cada uno de ellos con el fin de seguir procesando la notificación para cada destinatario de forma individual.

Imagen
danse

Esto llevó a otra decisión importante en el diseño de la solución: la captura de eventos y la selección de los destinatarios de las notificaciones es un bloque de construcción importante, y la entrega de estas notificaciones a los usuarios a través de una serie de canales es otro. Ambos bloques de construcción pueden trabajar independientemente el uno del otro y por lo tanto dividimos esto en 2 módulos separados:

DANSE: Marco de Notificación

El módulo DANSE (DANSE: Drupal - Audit - Notification - Subscription - Event) aborda las dos primeras fases: Captura de eventos y selección de destinatarios. Ambas fases se implementan con sus propios gestores de plugins y, por tanto, pueden ampliarse fácilmente para incluir requisitos adicionales.

DANSE soporta de forma nativa la captura de eventos para entidades de contenido, configuración, registro y webhooks (eventos externos). Cada uno de estos tipos de eventos se implementa en submódulos separados para que los constructores de sitios puedan activar sólo los que realmente se necesitan.

El gestor de plugins de selección de destinatarios permite implementar una lógica de negocio personalizada, pero ya viene con 2 plugins: "Todos los usuarios administradores" y "Todos los usuarios activos". Para el plugin de captura de eventos de entidad de contenido anterior, los constructores de sitios también pueden configurar en base a cada paquete qué roles de usuario están autorizados a suscribirse a los tipos de eventos soportados - las suscripciones disponibles pueden ser detectadas como un plugin de selección de destinatarios independiente.

DANSE dispone de 3 tipos de entidades para realizar sus tareas:

  • Eventos (danse_event): cada evento notable se almacena con su marca de tiempo de creación y otros detalles dependiendo del tipo de evento
  • Notificación (danse_notification): se almacena una única notificación para cada destinatario de un evento
  • Acción (danse_notification_action): para hacer un seguimiento de la actividad en torno a esta notificación, incluyendo una API para almacenar los intentos de entrega y la bandera de recepción

Como resultado, este módulo le permite revisar la actividad de su sitio web mediante la comprobación de todas estas entidades para los eventos, las notificaciones y las acciones, por lo que puede determinar fácilmente lo que sucedió cuando y por qué. Por supuesto, también almacena quién fue notificado, cómo y cuándo. De ahí viene el nombre del módulo, por si te lo estabas preguntando: Auditoría.

Una ventaja añadida es el widget de notificaciones que viene con DANSE. Incluso sin entregar las notificaciones a los destinatarios, es de gran valor hacer saber a los usuarios las novedades y cambios en el sitio web. Con las notificaciones guardadas, puedes hacerlo fácilmente. DANSE viene con una vista para las notificaciones no vistas y puedes colocar esta vista como un bloque en la página del usuario autenticado.

En este sentido, DANSE por sí solo puede ser utilizado para cualquier sitio existente de Drupal 8 y Drupal 9.

Marco de trabajo de Push

Para enviar también notificaciones a sus destinatarios, el módulo Push Framework resulta muy útil. Se engancha a la API proporcionada por DANSE, pero también puede utilizarse junto con cualquier otra fuente de información que se necesite entregar. Para hacer esto posible, el Push Framework tiene un gestor de plugins de origen y DANSE es sólo el primer módulo que implementa un plugin correspondiente. Pero, por supuesto, también se pueden proporcionar fácilmente otras fuentes, como un módulo de boletín informativo.

El módulo Push Framework se encarga de toda la lógica de recoger el contenido de origen que debe ser entregado, determinar el canal apropiado para la entrega en función de los canales disponibles y las preferencias del usuario, y luego entregar la notificación e informar a la fuente sobre el éxito de la entrega. Si la entrega falla, cada canal puede soportar cualquier número de reintentos y continuar con otro canal si todos los reintentos han fallado.

Los canales de salida están disponibles a través del Channel Plugin Manager, que hace muy fácil el desarrollo de canales adicionales. Los canales actualmente admitidos (o previstos) son:

  • Correo electrónico
  • OneSignal
  • Alerta
  • Slack (previsto)
  • Mattermost (previsto)
  • Twilio (previsto)

Diagrama de la solución global

Ambos módulos anteriores hacen un uso intensivo de las colas, lo que significa que todo el trabajo pesado se realiza de forma asíncrona. Esto ayuda a garantizar que tanto la captura de eventos como la selección de destinatarios, así como la entrega, sean fiables, sin afectar al rendimiento de las páginas web.

Imagen
danse

Tanto DANSE como Push Framework han sido cuidadosamente diseñados para proporcionar una solución sólida como una roca para todos los sitios de Drupal de cualquier tamaño. Viene con un conjunto de características comunes para (a) los tipos de eventos que generan notificaciones y (b) los canales de notificación. Pero somos conscientes de que muchos sitios tienen su propia lógica de negocio para la mayor parte de este espacio de solución -incluso nuestro propio primer proyecto de cliente utilizando esto tenía un requisito tan específico- que todavía se puede cumplir mediante el desarrollo de plugins personalizados o módulos públicos si la característica adicional sería de interés general.

En las siguientes partes de esta serie de entradas de blog, aprenderás todo lo necesario para utilizar estos módulos y cómo puedes ampliarlos para tus propias necesidades.

Actualización 11.08.2020: Debido a un problema con el antiguo nombre del módulo, hemos cambiado el nombre y actualizado esta entrada del blog en consecuencia.

Añadir nuevo comentario

Texto sin formato

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
  • Las direcciones de correos electrónicos y páginas web se convierten en enlaces automáticamente.
CAPTCHA
Esta pregunta es para comprobar si usted es un visitante humano y prevenir envíos de spam automatizado.