berecont / contao-notification-scheduler-bundle
Schedule and send Notification Center notifications in Contao.
Package info
github.com/berecont/contao-notification-scheduler-bundle
Type:contao-bundle
pkg:composer/berecont/contao-notification-scheduler-bundle
Requires
- php: ^8.3 || ^8.4
- contao/core-bundle: ^5.3 || ^5.7
- terminal42/notification_center: ^2.0
Requires (Dev)
- contao/manager-plugin: ^2.0
Conflicts
- contao/manager-plugin: <2.0 || >=3.0
README
Zeitgesteuerter und automatischer Versand von Notification-Center-Benachrichtigungen in Contao.
Das Bundle erweitert Contao um einen Notification Scheduler, mit dem Benachrichtigungen aus dem Notification Center einmalig zu einem bestimmten Zeitpunkt oder automatisch nach einem wöchentlichen Zeitplan versendet werden können.
Das Bundle basiert auf der freien Version von terminal42/notification_center.
Notification Center Pro wird nicht benötigt.
Funktionen
- Zeitgesteuerter Versand von Notification-Center-Benachrichtigungen
- Einmalige Zeitpläne mit Datum und Uhrzeit
- Wöchentlich wiederkehrende Zeitpläne
- Individueller Empfängername und individuelle E-Mail-Adresse
- Automatische Berechnung der nächsten Ausführung
- Automatische Deaktivierung abgeschlossener einmaliger Zeitpläne
- Verarbeitung über den Contao-Cron
- Schutz vor paralleler bzw. doppelter Verarbeitung
- Statusanzeige im Contao-Backend
- Anzeige der letzten und nächsten Ausführung
- CLI-Befehle für Tests, Diagnose und manuellen Versand
- Deutsche und englische Backend-Übersetzungen
- Kompatibel mit Contao 5.3 und 5.7
Voraussetzungen
- PHP 8.3 oder 8.4
- Contao 5.3 oder 5.7
- Notification Center 2.x
Das Bundle verwendet die freie Version von:
terminal42/notification_center
Funktionen von Notification Center Pro werden nicht benötigt.
Installation
Installation über Composer:
composer require berecont/contao-notification-scheduler-bundle
Anschliessend die Contao-Migration ausführen:
php vendor/bin/contao-console contao:migrate
Falls erforderlich, den Contao-Cache leeren:
php vendor/bin/contao-console cache:clear
Notification Center konfigurieren
Das Bundle registriert im Notification Center einen neuen Benachrichtigungstyp:
Notification Scheduler
Im Notification Center wird zunächst eine neue Benachrichtigung dieses Typs angelegt.
Folgende Tokens stehen zur Verfügung:
Token Beschreibung
##scheduler_id## ID des Scheduler-Datensatzes
##scheduler_title## Bezeichnung des Scheduler-Datensatzes
##recipient_name## Name des Empfängers
##recipient_email## E-Mail-Adresse des Empfängers
##schedule_type## Art des Zeitplans
##schedule_date## Datum der geplanten Ausführung
##schedule_time## Uhrzeit der geplanten Ausführung
Beispielsweise kann im Notification Center als Empfängeradresse verwendet werden:
##recipient_email##
Dadurch können mehrere Scheduler-Datensätze mit unterschiedlichen Empfängern dieselbe Notification-Center-Benachrichtigung verwenden.
Zeitplan anlegen
Die Verwaltung erfolgt im Contao-Backend unter:
System → Notification Scheduler
Für einen Zeitplan können unter anderem folgende Angaben festgelegt werden:
- Bezeichnung
- Empfängername
- Empfänger-E-Mail-Adresse
- Notification-Center-Benachrichtigung
- Art des Zeitplans
- Datum und Uhrzeit bzw. Wochentag und Uhrzeit
- Aktiv-Status
Einmaliger Zeitplan
Bei einem einmaligen Zeitplan werden Datum und Uhrzeit festgelegt.
Beispiel:
02.09.2026 13:00
Nach einem erfolgreichen Versand wird automatisch:
- der Zeitpunkt der letzten Ausführung gespeichert,
- die nächste Ausführung entfernt,
- der Zeitplan deaktiviert.
Wöchentlicher Zeitplan
Bei einem wöchentlichen Zeitplan werden Wochentag und Uhrzeit festgelegt.
Beispiel:
Montag 08:00
Nach einem erfolgreichen Versand wird automatisch der nächste passende Wochentag mit der festgelegten Uhrzeit als nächste Ausführung berechnet.
Cron-Konfiguration
Das Bundle registriert einen minütlichen Contao-Cronjob.
Für den automatischen Betrieb muss der Contao-Cron regelmässig serverseitig aufgerufen werden:
php vendor/bin/contao-console contao:cron
Empfohlen wird ein minütlicher Aufruf. Contao entscheidet selbst, welche registrierten Cronjobs zum jeweiligen Zeitpunkt ausgeführt werden müssen.
Beispiel für einen System-Cronjob:
* * * * * cd /pfad/zur/contao-installation && php vendor/bin/contao-console contao:cron
Der Pfad zur Contao-Installation und gegebenenfalls der Pfad zur verwendeten PHP-Version müssen an die jeweilige Serverumgebung angepasst werden.
CLI-Befehle
Das Bundle stellt mehrere Befehle für Tests und Diagnose zur Verfügung.
Einzelnen Zeitplan prüfen
php vendor/bin/contao-console notification-scheduler:test <ID>
Beispiel:
php vendor/bin/contao-console notification-scheduler:test 3
Der Befehl zeigt unter anderem:
- Scheduler-ID
- Bezeichnung
- Aktiv-Status
- Zeitplan
- nächste Ausführung
- Fälligkeit
- Notification-ID
- Empfänger
- erzeugte Tokens
Bei diesem Befehl wird keine Benachrichtigung versendet.
Fällige Zeitpläne anzeigen
php vendor/bin/contao-console notification-scheduler:due
Der Befehl listet alle aktiven Scheduler-Datensätze auf, deren nächste Ausführung bereits erreicht wurde.
Bei diesem Befehl wird keine Benachrichtigung versendet.
Einzelnen Zeitplan ausführen
php vendor/bin/contao-console notification-scheduler:run <ID>
Die Benachrichtigung wird nur versendet, wenn der ausgewählte Scheduler zum aktuellen Zeitpunkt tatsächlich fällig ist.
Versand erzwingen
Für einen gezielten Test kann der Versand unabhängig vom geplanten Zeitpunkt ausgelöst werden:
php vendor/bin/contao-console notification-scheduler:run <ID> --force
Dabei wird eine echte Notification-Center-Benachrichtigung versendet.
Ist der Zeitplan zum Zeitpunkt des Tests noch nicht regulär fällig, bleibt die geplante nächste Ausführung (nextRun) unverändert.
Der Zeitpunkt des erfolgreichen Testversands wird als letzte Ausführung (lastRun) gespeichert.
Hinweis:
--forcelöst einen echten Versand aus und sollte auf Produktivsystemen entsprechend vorsichtig verwendet werden.
Verarbeitung und Sperrmechanismus
Vor dem Versand wird der betreffende Scheduler-Datensatz vorübergehend gesperrt.
Dadurch wird verhindert, dass zwei nahezu gleichzeitig laufende Cron-Prozesse denselben Zeitplan mehrfach verarbeiten.
Die Sperre läuft nach fünf Minuten automatisch ab, falls die Verarbeitung unerwartet unterbrochen wird.
Nach einem erfolgreichen Versand wird der Scheduler abhängig von der Art des Zeitplans aktualisiert.
Einmaliger Zeitplan
lastRun → Zeitpunkt des erfolgreichen Versands
nextRun → wird geleert
enabled → wird deaktiviert
Wöchentlicher Zeitplan
lastRun → Zeitpunkt des erfolgreichen Versands
nextRun → nächster Wochentag zur festgelegten Uhrzeit
enabled → bleibt aktiviert
Schlägt der Versand fehl, wird der Zeitplan nicht weitergeschaltet. Er bleibt fällig und kann bei einem späteren Cron-Durchlauf erneut verarbeitet werden.
Status im Backend
Die Listenansicht des Notification Schedulers zeigt den aktuellen Zustand der Zeitpläne.
Mögliche Status sind:
- Aktiv -- der Zeitplan ist aktiv und wartet auf die nächste Ausführung
- Fällig -- der geplante Ausführungszeitpunkt wurde erreicht
- Gesperrt -- der Datensatz wird aktuell verarbeitet
- Deaktiviert -- der Zeitplan ist deaktiviert
- Kein Termin -- der Zeitplan ist aktiv, besitzt aber keine nächste Ausführung
Zusätzlich werden der konfigurierte Zeitplan und die berechnete nächste Ausführung direkt in der Backend-Übersicht angezeigt.
Protokollierung
Fehler bei der Verarbeitung oder beim Versand werden im Contao-System-Log protokolliert und können im Backend eingesehen werden.
Ein fehlgeschlagener Versand führt nicht dazu, dass der Zeitplan auf den nächsten Termin weitergeschaltet wird.
Lizenz
Dieses Bundle steht unter der MIT-Lizenz.
Autor
Bernhard Renner
berecont