Zum Hauptinhalt springen

Benachrichtigungs-Abonnements

Zweck

Subscriptions (NotificationSubscription) verbinden wen (Kontakt oder SpeamBox) mit welchem Event-Typ und welchem Kanal. Beispiel: „Kontakt Frau Mueller bekommt bei Stoerung der SpeamBox BX-001 eine SMS und eine E-Mail" → zwei Subscriptions.

Voraussetzungen

- Mindestens ein **NotificationChannel** ist konfiguriert. - Mindestens ein **NotificationEventType** ist eingerichtet. - Optional: SpeamBox oder Kontakt als Empfaenger. - Berechtigung `create:NotificationSubscription`.

Berechtigungen (CASL)

ActionSubjectKeycloak-Rolle
viewFE_NotificationSubscription, NotificationSubscription
create/update/deleteNotificationSubscriptionAPP_SPEAMCORE_CREATE/UPDATE/DELETE_NOTIFICATION_SUBSCRIPTION
viewContact, Speambox, NotificationEventType, NotificationChannelAPP_SPEAMCORE_VIEW_CONTACT, SPEAMBOX, NOTIFICATION_EVENT_TYPE, NOTIFICATION_CHANNEL

Schritt-für-Schritt-Anleitung

  1. Abonnements (/notification-subscriptions) → + Neu.
  2. Empfaenger wählen — entweder contactId oder speamboxId (oder beides, je nach Subscription-Logik).
  3. Event-Typ wählen.
  4. Optional Event-Typ-Option (z. B. „Status-Wechsel auf gesperrt").
  5. Kanal wählen.
  6. Status auf active — Subscription ist aktiv.

Listenansicht — notification-subscriptions

Toolbar (Detail-Seite)

Schlanke Toolbar oben rechts:

IconAktion (aria-label)CASLWirkung
ZurückgehenZurück zur Liste.
🏠Zur Startseite gehenSpringt auf das Dashboard / /.
⏮/◀/▶/⏭PaginationNavigation durch die gefilterte Liste — Massen-Bearbeitung ohne Liste-Sprung.

Wie auf jeder Detail-Seite verfuegbar — siehe Floating-Quickbar:

  • KAL. (Mini-Kalender)
  • ZEIT (Persoenliche Wochen-Arbeitszeit)
  • ARBEIT (Eigene bevorstehende Aufträge)

Felder und Eingaben

FeldnamePflichtDatentypWirkung beim AusfuellenVoraussetzung
contactIdneinUUIDEmpfaenger-Kontakt. Bei aktiver Subscription wird dieser Kontakt benachrichtigt.view:Contact.
speamboxIdneinUUIDQuell-Box. Wenn gesetzt, gilt die Subscription nur für Events dieser Box.view:Speambox.
notificationEventTypeIdneinUUIDEvent-Typ (z. B. „Störung", „Wartung faellig"). Aktualisiert die Auswahl der eventTypeOptions.view:NotificationEventType.
notificationEventTypeOptionIdneinUUIDPraezisierung des Events (z. B. nur „Störung Sirene").view:NotificationEventTypeOption.
notificationChannelIdneinUUIDKanal, über den die Nachricht geht.view:NotificationChannel.
statusneinactive/inactiveactive registriert den Listener im EventBus. inactive pausiert.
subscriberNameString (read-only)Snapshot des Empfaenger-Namens („Vorname Nachname") zum Anlege-Zeitpunkt. Erspart der Admin-Liste den Join auf den Kontakt — wird automatisch gesetzt.

CRUD-Pattern (Standard)

Diese Sub-Route folgt dem Standard-CRUD-Pattern:

  • + Neu öffnet ein Modal mit Eingabemaske oder erstellt direkt einen leeren Datensatz und navigiert auf den Detail.
  • Detail-Seite verwendet Auto-Save: jede Änderung schreibt sofort via PATCH in das BE.
  • Löschen ist Soft-Delete (paranoid) — Datensaetze sind in der Datenbank weiter vorhanden, aber gefiltert.

Spezielles Verhalten dieser Sub-Route ist im jeweiligen Notification-Cluster dokumentiert: siehe Notification-System Konzept.

Persönliche Benachrichtigungs-Einstellungen (seit Juni 2026)

Unabhängig von den Mandanten-Subscriptions kann jeder Mitarbeiter seine eigenen SpeamNotification-Präferenzen festlegen — über das Persönliche-Einstellungen-Modal (in der Oberfläche oben rechts, kein eigener Menüpunkt/Route). Gespeichert wird je Ereignis-Typ am Mitarbeiter (notificationPrefs):

KanalBedeutung
Intern (internal)Anzeige im SpeamCore-Benachrichtigungs-Center.
Browser (browser)Browser-Push-Benachrichtigung (Web-Notification).
App (nativeApp)Push in der nativen App.

Zusätzlich gibt es „Browser-Benachrichtigungen verwalten": Hat der Browser die Berechtigung blockiert, zeigt das Modal das an und bietet ein erneutes Anfragen/Prüfen (re-check). Live-Benachrichtigungen erscheinen u. a. bei neuer Mail und neuer Chat-Nachricht.

Wiederverwendbare Konzepte

Verknuepfungen zu anderen Modulen

  • KontaktecontactId.
  • SpeamBoxspeamboxId.
  • NotificationEventType — Event-Typ-Stammdaten.
  • NotificationChannel — gewaehlter Kanal.
  • NotificationLog — Logs werden bei jedem Subscription-Match erzeugt.

Häufige Fehler und Lösungen

FehlerLösung
Empfaenger bekommt keine NachrichtSubscription inactive, oder Kanal inactive, oder Event-Typ ueberhaupt nicht gefeuert.
Mehrfach-VersandMehrere Subscriptions matchen — prüfen und ggf. konsolidieren. Hinweis: Gegen doppelten Versand desselben Events über mehrere Server-Instanzen schützt seit Mai 2026 ein deterministischer dedupKey am Notification-Event (nur eine Instanz schreibt + versendet das Event).
Kanal-/Event-MismatchnotificationEventTypeOptionId muss zu notificationEventTypeId passen.

API/Schnittstellen

MethodeEndpointZweckCASL
GET/api/notification-subscriptionsListeview NotificationSubscription
POST/api/notification-subscriptionsAnlegencreate NotificationSubscription
PATCH/api/notification-subscriptions/:idÄndernupdate NotificationSubscription
DELETE/api/notification-subscriptions/:idSoft-Deletedelete NotificationSubscription

Versionshinweise

  • 2026-06-08: Abschnitt „Persönliche Benachrichtigungs-Einstellungen" ergänzt — per-Mitarbeiter notificationPrefs (intern/Browser/App je Event) über das Persönliche-Einstellungen-Modal, inkl. „Browser-Benachrichtigungen verwalten" + Live-Notifications (neue Mail/Chat). Verifiziert an PersonalSettingsModal.tsx, notificationPrefs.ts, employee.model.ts.
  • 2026-04-29: Initiale Veroeffentlichung.