03. August 2020

Die ultimative Abonnement- und Benachrichtigungslösung für Drupal

by Jürgen Haas

Fast alle Websites haben eine Anforderung gemeinsam: Sie wollen benachrichtigt werden, wenn etwas Bestimmtes passiert. Ob es sich um einen neuen Blogbeitrag, einen neuen Kommentar, eine geänderte Version eines Knotens, eine Ausnahme in den Protokollen oder ein gelöschtes Benutzerkonto handelt, entweder der Website-Administrator oder die Website-Besucher möchten über einige oder alle dieser Ereignisse informiert werden.

Auch wenn diese Anforderung ziemlich verbreitet ist, hat jeder Einzelne sehr unterschiedliche Ansichten darüber, wie er benachrichtigt werden möchte. Ohne in eine Diskussion über die Wirksamkeit von E-Mails einzusteigen, scheint es ausreichend zu sein, über all die anderen verfügbaren Kanäle wie Slack, Mobile Push, Ticketsysteme oder sogar SMS nachzudenken.

Wenn man Websites mit erstellt, fragt man sich, warum der Lösungsstapel für diese Anforderungen so fragmentiert ist, wie er es seit über einem Jahrzehnt ist. Allein für Drupal 8 und 9 findet man über 100 Module für den Suchbegriff "notify". Mindestens 40 davon sollten als ernstzunehmende Lösungen betrachtet werden, da sie über stabile Versionen und Sicherheitsempfehlungen verfügen. Aber jedes von ihnen befasst sich immer nur mit einem einzigen Aspekt, d.h. nur mit Knoten oder nur mit Kommentaren oder Workflow-Status oder Ausnahmen oder was auch immer. Und dann bieten die meisten von ihnen nur E-Mail-Benachrichtigungen für jeden der Ereignistypen, für die sie entwickelt wurden.

Da dies für ein Webapplikations-Framework wie Drupal nicht angemessen ist, war es an der Zeit, sich hinzusetzen und diesen Bereich in einer generischen, skalierbaren, konfigurierbaren und wartbaren Art und Weise anzugehen, so dass die Gemeinschaft darauf aufbauen kann und für aktuelle und zukünftige Anforderungen bereit ist - denn die Anforderungen an Abonnements und Benachrichtigungen stehen unter dem ständigen Druck, sich anzupassen und zu verbessern, da sich die Welt um uns herum ebenfalls ständig verändert.

Das Team von LakeDrops (Anm. d. Red.: hieß vorher "bitegra Solutions") in Deutschland hat fast 2 Jahre in Problemanalyse, Lösungsdesign, Softwarearchitektur und Entwicklung investiert, um die ultimative Lösung für Drupal zur Verfügung zu stellen. Wir haben uns entschlossen, alle verfügbaren Komponenten auf drupal.org zu veröffentlichen und die Community an den Vorteilen, aber auch an der zukünftigen Wartung und Entwicklung bestehender und zusätzlicher Features und Benachrichtigungskanäle kostenlos teilhaben zu lassen.

Dies ist Teil 1 einer Blogpost-Serie, die die Idee und die Umsetzung vorstellt und zeigt, wie man sie selbst in Drupal-Projekten jeder Größe einsetzen kann:

  • Teil 1 (Sie sind hier): Einführung und Systemarchitektur
  • Teil 2: Erste Schritte mit Abonnements und Benachrichtigungen
  • Teil 3: Wie man neue Benachrichtigungskanäle hinzufügt
  • Teil 4: Weitere Ereignisse für die Benachrichtigung abdecken
  • Teil 5: Anpassen der Benachrichtigungsausgabe

Systemarchitektur

Lassen Sie uns mit einer Liste von Anforderungen beginnen:

  • Unterstützen Sie alles Bemerkenswerte:
    • Inhalt, d.h. Entitäten:
      • Erstellen, aktualisieren, löschen und veröffentlichen/entöffentlichen
      • Jeder Entitätstyp und jedes Bundle
      • Jedes Bundle mit individuellen und detaillierten Einstellungen
    • Konfiguration: Verfolgt alle Änderungen an der Konfiguration der Website
    • Logger: alle Log-Einträge oberhalb eines konfigurierten Schwellenwerts aufzeichnen
    • Externe Ereignisse: Erlauben Sie anderen Diensten im Unternehmensnetzwerk, die gleiche Zielgruppe zu benachrichtigen
    • Entwicklern die Möglichkeit geben, neue Plugins zur Erstellung von Benachrichtigungen bereitzustellen
  • Flexibel bei den Empfängern sein
    • Authentifizierte Benutzer sollten in der Lage sein, jedes verfügbare Ereignis zu abonnieren/abzubestellen, das auf der Website konfiguriert und für das Abonnement verfügbar gemacht wurde
    • Die Konfiguration der Website sollte eine Vorauswahl von Empfängern für jeden verfügbaren Ereignistyp ermöglichen
    • Inhaltsredakteure mit entsprechender Berechtigung sollten in der Lage sein, Benachrichtigungsvorgaben pro Entitätsaktion (Erstellen, Aktualisieren, Löschen, Veröffentlichen, Entöffentlichen) zu überschreiben
    • Entwicklern die Möglichkeit geben, benutzerdefinierte Regeln für die Empfängerauswahl anzuwenden
  • Unterstützung mehrerer Benachrichtigungskanäle
    • Erlauben Sie Website-Erstellern, eine beliebige Anzahl verschiedener Benachrichtigungskanäle auf einmal zu aktivieren
    • Erlauben Sie den Benutzern, ihre eigenen Präferenzen für die Priorität der Kanäle festzulegen
    • Sicherstellen, dass jeder Benutzer nur einmal pro Ereignis benachrichtigt wird
    • Sichern und verfolgen Sie die Zustellung von Benachrichtigungen
    • Stellen Sie gute Standardwerte für die Darstellung von Benachrichtigungen pro Kanal bereit
    • Erlauben Sie Site-Buildern, die Benachrichtigungsausgabe zu ändern
    • Erlauben Sie Entwicklern, neue Kanäle hinzuzufügen

Bei der Erfassung und Strukturierung der Anforderungen wurde deutlich, dass es 3 isolierte Phasen gibt, die separat behandelt werden müssen:

  1. Erfassung von Ereignissen
  2. Empfängerauswahl und Erstellung von Benachrichtigungen
  3. Benachrichtigungszustellung

Ja, Phase 2 beinhaltet zwei Schritte: für jedes bemerkenswerte Ereignis müssen alle relevanten Empfänger ermittelt werden, und für jeden von ihnen wird eine Benachrichtigungsentität erstellt, um die Benachrichtigung für jeden Empfänger einzeln weiter zu bearbeiten.

Sa., 18.12.2021 - 13:56
DANSE 1

Dies führte zu einer weiteren wichtigen Entscheidung bei der Konzeption der Lösung: Die Erfassung von Ereignissen und die Auswahl von Empfängern für Benachrichtigungen ist ein wichtiger Baustein, die Übermittlung dieser Benachrichtigungen an die Benutzer über eine Reihe von Kanälen ein weiterer. Da beide Bausteine unabhängig voneinander funktionieren können, haben wir sie in 2 separate Module aufgeteilt:

DANSE: Drupal - Audit - Notification - Subscription - Event

Das DANSE-Modul adressiert die ersten beiden Phasen: die Erfassung von Ereignissen und die Auswahl der Empfänger. Beide Phasen sind mit eigenen Plugin-Managern implementiert und können daher leicht um zusätzliche Anforderungen erweitert werden.

Out of the box unterstützt DANSE die Erfassung von Ereignissen für Content Entities, Konfiguration, Logging und Webhooks (externe Ereignisse). Jeder dieser Ereignistypen ist in separaten Submodulen implementiert, so dass Site-Builder nur die tatsächlich benötigten aktivieren können.

Der Plugin-Manager für die Empfängerauswahl ermöglicht die Implementierung einer eigenen Geschäftslogik, bringt aber bereits 2 Plugins mit sich: "all admin users" und "all active users". Für das obige Plugin zur Erfassung von Content-Entity-Ereignissen können Site-Builder auch auf einer Pro-Bundle-Basis konfigurieren, welche Benutzerrollen unterstützte Ereignistypen abonnieren dürfen - verfügbare Abonnements können als eigenständiges Empfängerauswahl-Plugin erkannt werden.

DANSE kommt mit 3 Entitätstypen, um seine Aufgaben zu erfüllen:

  • Events (danse_event): jedes nennenswerte Ereignis wird mit seinem Erstellungszeitpunkt und weiteren Details je nach Ereignistyp gespeichert
  • Benachrichtigung (danse_notification): für jeden Empfänger eines jeden Ereignisses wird eine einzelne Benachrichtigung gespeichert
  • Action (danse_notification_action): zur Verfolgung der Aktivität im Zusammenhang mit dieser Benachrichtigung, einschließlich einer API zur Speicherung von Zustellversuchen und der Empfangsmarkierung

Dieses Modul ermöglicht es Ihnen, die Aktivitäten auf Ihrer Website zu überprüfen, indem Sie alle diese Entitäten auf Ereignisse, Benachrichtigungen und Aktionen hin untersuchen, so dass Sie leicht feststellen können, was wann und warum passiert ist. Natürlich speichert es auch, wer wie und wann benachrichtigt wurde. Daher der Name des Moduls, nur für den Fall, dass Sie sich fragen: Audit.

Ein zusätzlicher Vorteil ist das Benachrichtigungs-Widget, das mit DANSE geliefert wird. Auch ohne Benachrichtigungen an die Empfänger zu versenden, ist es von großem Wert, die Nutzer über Neuigkeiten und Änderungen auf der Website zu informieren. Mit den gespeicherten Benachrichtigungen können Sie das ganz einfach tun. DANSE wird mit einer Ansicht für ungesehene Benachrichtigungen geliefert, und Sie können diese Ansicht als Block auf der Website für authentifizierte Benutzer platzieren.

Damit kann DANSE allein für jede bestehende Drupal 8 und Drupal 9 Seite verwendet werden.

Push Framework

Um auch Benachrichtigungen an ihre Empfänger zu senden, bietet sich das Modul Push Framework an. Es klinkt sich in die von DANSE zur Verfügung gestellte API ein, kann aber auch zusammen mit jeder anderen Informationsquelle verwendet werden, die zugestellt werden soll. Um dies zu ermöglichen, verfügt das Push-Framework über einen Quellen-Plugin-Manager, und DANSE ist nur das erste Modul, für das ein Plugin implementiert wurde. Aber natürlich können auch andere Quellen, wie z.B. ein Newsletter-Modul, einfach bereitgestellt werden.

Das Push-Framework-Modul kümmert sich um die gesamte Logik des Sammelns von Quellinhalten, die zur Auslieferung anstehen, um die Bestimmung des geeigneten Kanals für die Auslieferung, die von den verfügbaren Kanälen und den Benutzerpräferenzen abhängt, und um die Auslieferung der Benachrichtigung und die Rückmeldung an die Quelle über die erfolgreiche Auslieferung. Schlägt die Zustellung fehl, kann jeder Kanal eine beliebige Anzahl von Wiederholungsversuchen unterstützen und mit einem anderen Kanal fortfahren, wenn alle Wiederholungsversuche fehlgeschlagen sind.

Die Ausgabekanäle werden über den Kanal-Plugin-Manager zur Verfügung gestellt, der die Entwicklung zusätzlicher Kanäle sehr einfach ermöglicht. Derzeit unterstützte (oder geplante) Kanäle sind:

  • E-Mail
  • EinSignal
  • Alerta
  • Slack (geplant)
  • Mattermost (geplant)
  • Twilio (geplant)

Diagramm der Gesamtlösung

Beide der oben genannten Module nutzen intensiv Warteschlangen, d.h. alle schweren Aufgaben werden asynchron ausgeführt. Das trägt dazu bei, dass sowohl die Erfassung von Ereignissen und die Auswahl von Empfängern als auch die Zustellung zuverlässig erfolgen - ohne Auswirkungen auf die Performance der Website.

Sa., 18.12.2021 - 13:56
DANSE 2

Beide, DANSE und Push Framework, wurden sorgfältig entwickelt, um eine solide Lösung für alle Drupal-Websites jeglicher Größe zu bieten. Es kommt mit einem gemeinsamen Feature-Set für (a) Ereignistypen, die Benachrichtigungen erzeugen und (b) Benachrichtigungskanäle. Aber wir sind uns bewusst, dass viele Websites ihre eigene Geschäftslogik für den größten Teil dieses Lösungsbereichs haben - sogar unser eigenes erstes Kundenprojekt, bei dem wir dies einsetzten, hatte eine solche spezifische Anforderung - die immer noch durch die Entwicklung von benutzerdefinierten Plugins oder öffentlichen Modulen erfüllt werden kann, wenn die zusätzliche Funktion von allgemeinem Interesse wäre.

Die folgenden Teile dieser Blogpost-Serie werden Ihnen einen Einblick geben, was erforderlich ist, um diese Module zu nutzen und wie Sie sie für Ihre eigenen Anforderungen erweitern können.

Update 11.8.2020: Aufgrund eines Problems mit dem alten Modulnamen haben wir den Namen geändert und diesen Blogpost entsprechend aktualisiert.

Tags

Tools

Neuen Kommentar hinzufügen