70 — Notification-System

Aktualisiert am 1. Juni 2026

70 — Notification-System

PartnerDesk hat ein eigenes Notification-System für Multi-Channel-Benachrichtigungen an Partner (und teilweise Tenant-Admins). Notifications können automatisch durch System-Events ausgelöst oder manuell vom Admin verschickt werden.

Was kann das System?

  • In-App-Notifications (Bell-Icon im Partner-Portal mit Badge + Detail-Modal).
  • Email-Benachrichtigungen (mit Tenant-Whitelabel-From-Adresse).
  • Trigger durch System-Events (TX approved, Payout fertig, Partner aktiviert).
  • Manuelle Massen-Notifications (Tenant-Admin schickt eine Ankündigung an alle aktiven Partner).
  • Geplante Notifications (Sendezeitpunkt in der Zukunft).
  • Templates mit Platzhaltern ({partner.firstName}, {payout.amount}).
  • Live-Preview im Template-Editor.
  • Block-Editor für reiche Inhalte (Heading, Text, Bild, Button).

Auslöser-Events (automatisch)

Das System hört auf vier Domain-Events und triggert die entsprechende Notification, falls ein aktives Template dafür existiert:

Event Default-Template Empfänger
transaction.approved „Neue Provision freigegeben" Partner
payout.approved „Gutschrift erstellt" Partner
commission.earned „Provision verdient" Partner
partner.activated „Willkommen!" Partner (selbst), zusätzlich Sponsor

Plus Lifecycle-Events für Tenant-Owner (siehe 73 — Lifecycle-Mails).

Manuelle Notifications anlegen

Admin → „Benachrichtigungen"„Neue Notification".

Editor-Aufbau

Bereich Funktion
Titel Erscheint im Bell-Panel des Partners
Block-Editor Strukturierter Inhalt mit Heading/Text/Bild/Button-Blöcken
Sendezeitpunkt Sofort, geplant für später, oder als Entwurf
Zielgruppe Alle aktiven Partner / nach Status / nach CommissionGroup
Kanäle In-App, Email — pro Partner gemäß seinen Präferenzen
Live-Preview Rechts neben dem Editor zeigt die Mail- und In-App-Vorschau

Send-Modi

  • Sofort senden — Verarbeitung startet im Hintergrund (Messenger-Queue, Chunks von 50/Batch).
  • Geplant — Symfony-Scheduler triggert den Versand zum gewünschten Zeitpunkt.
  • Entwurf — speichern, später anpassen, später senden.

Templates

Sie können wiederverwendbare Vorlagen anlegen:

Admin → „Benachrichtigungen"„Templates".

Platzhalter

In Texten verwendbar (werden vor Versand ersetzt):

Platzhalter Inhalt
{partner.firstName} Vorname
{partner.lastName} Nachname
{partner.email} Email
{tenant.name} Tenant-Name
{tenant.companyName} Firmenname aus Legal-Settings
{transaction.commissionAmount} (bei TX-Event) Provisionsbetrag
{transaction.productName} Produkt
{payout.payoutNumber} Gutschriftnummer
{payout.grossAmount} Brutto-Auszahlung
{payout.period} Zeitraum

Bei Event-Triggern werden die Platzhalter automatisch aus den Event-Daten gefüllt.

Live-Preview im Editor

Das Editor-Modal lädt einen /preview-Endpoint mit Sample-Entities:

  • Bei transaction.approved → Fake-Partner + Fake-TX mit Beispielwerten.
  • Bei payout.approved → Fake-Payout (z. B. PA-2026-0042, 250 €).
  • Etc.

Der Preview rendert in Echtzeit (debounced 350 ms nach letzter Eingabe).

Test-Send

Vor dem Massen-Versand können Sie eine Test-Notification an eine Wunschadresse schicken — verifiziert Look & Feel ohne echte Empfänger zu spammen.

Webhook-Notifications

Externe Systeme können Notifications via HMAC-signiertem Webhook senden:

POST /api/webhooks/{slug}/notification

Sinnvoll für: CRM-Trigger („Lead-Status hat sich geändert"), externe Marketing-Tools.

Empfänger-Filter

Beim Erstellen einer Notification können Sie filtern:

  • Alle Partner des Tenants.
  • Nur aktive Partner.
  • Nach Status (pending für Aktivierungs-Erinnerungen, suspended für Reaktivierungs-Angebote).
  • Nach CommissionGroup (z. B. nur Premium-Partner).
  • Nach Sprache (language-Feld am Partner).

In-App-UX

Partner sieht:

  • Bell-Icon in der Top-Bar mit Unread-Badge (99+ bei mehr als 99).
  • Slide-In-Panel beim Klick mit Liste der letzten Notifications.
  • Detail-Modal beim Klick auf eine Notification — markiert als gelesen.
  • Tabs: „Aktiv", „Archiviert", „Geplant" (für Partner mit Self-Schedule-Rechten, derzeit nicht aktiv).

Asynchrone Verarbeitung

Notifications werden über die Symfony-Messenger-Queue verarbeitet (notifications-Transport):

  • Massen-Versendungen werden in Batches von 50 zerlegt.
  • Bei Fehlschlag pro Empfänger: andere Empfänger sind nicht betroffen.
  • Gescheiterte Messages landen im Failed-Transport (Superadmin kann retry’en — siehe 113).

Notification-Statistiken

Im Detail einer versendeten Notification sehen Sie:

  • Empfänger-Anzahl.
  • Wie viele wurden zugestellt.
  • Wie viele gelesen (für In-App-Channel).
  • Click-Rate (wenn CTA-Buttons enthalten).

Verwandte Kapitel


Technische Tiefen-Doku: ../007-partner-notifications.md, ../033-admin-dashboard-chart-preview.md (Live-Preview)