# DataFirefly Push — Vollständiger Leitfaden

> Übersicht und Voraussetzungen DataFirefly Push verwandelt Ihren WooCommerce-Shop in eine native Web-Push-Benachrichtigungsplattform. Ohne SDK, ohne Tracking durch Dritte: die gesamte Kryptografie (VAPID und RFC 8291-Verschlüsselung) läuft auf Ihrem eigenen Server…

- Seite: <https://www.datafirefly.com/de/documentation/datafirefly-push/>
- Sprache: de
- Aktualisiert am: 2026-06-27
- Weitere Sprachen: [fr](https://www.datafirefly.com/documentation/datafirefly-push/index.md), [en](https://www.datafirefly.com/en/documentation/datafirefly-push/index.md), [es](https://www.datafirefly.com/es/documentation/datafirefly-push/index.md), [it](https://www.datafirefly.com/it/documentation/datafirefly-push/index.md), [pl](https://www.datafirefly.com/pl/documentation/datafirefly-push/index.md), [nl](https://www.datafirefly.com/nl/documentation/datafirefly-push/index.md), [pt](https://www.datafirefly.com/pt/documentation/datafirefly-push/index.md)
- Index: <https://www.datafirefly.com/de/documentation/llms.txt>

## Übersicht und Voraussetzungen

DataFirefly Push verwandelt Ihren WooCommerce-Shop in eine native Web-Push-Benachrichtigungsplattform. Ohne SDK, ohne Tracking durch Dritte: die gesamte Kryptografie (VAPID und RFC 8291-Verschlüsselung) läuft auf Ihrem eigenen Server in reinem PHP über OpenSSL. Das Plugin deckt ein intelligentes Multi-Stil-Opt-in, zehn automatische Trigger, manuelle Kampagnen mit visuellem Builder und Segmentierung, ein vollständiges Analytics-Dashboard, eine dedizierte Mein-Konto-Seite für Ihre Kunden und native DSGVO-Konformität ab.

- WordPress 6.2 und höher.
- WooCommerce 7.0 und höher, getestet bis 9.6, kompatibel mit HPOS und Cart/Checkout Blocks.
- PHP 8.1 und höher.
- Mehrsprachig (FR/EN/ES/DE/IT), kompatibel mit Polylang und WPML.
- Kompatibel mit LiteSpeed Cache, WP Rocket und anderen Cache-Plugins: der Service Worker wird als eigenständiges PHP ausgeliefert.

Kein Drittanbieter-Dienst, der angeschlossen werden muss, keine Composer-Bibliothek, die gepflegt werden muss. VAPID-Schlüssel werden bei der Aktivierung automatisch generiert, Abonnements und Ereignisse bleiben in Ihrer eigenen Datenbank.

## Installation

1. Laden Sie das Archiv `df-push.zip` aus Ihrem Kundenkonto herunter.
2. Gehen Sie in der WordPress-Administration zu **Plugins > Installieren > Plugin hochladen** und legen Sie das Archiv ab.
3. Klicken Sie auf **Aktivieren**.
4. Das Menü **DF Push** erscheint in der Admin-Seitenleiste mit sieben Untermenüs: Dashboard, Kampagnen, Abonnenten, Trigger, Opt-in, Einstellungen, Webhooks & API.

Bei der Aktivierung erstellt das Plugin acht dedizierte Tabellen mit dem Präfix `dfpush_`, generiert Ihre VAPID-Schlüssel, plant den täglichen Cron `df_push_daily_lifecycle` und registriert den Mein-Konto-Endpunkt. Es ist kein manueller Eingriff erforderlich.

## Erste Konfiguration: VAPID-Schlüssel und Opt-in

Nach der Aktivierung ist das Plugin mit seinen Standardeinstellungen sofort funktionsfähig: die schwebende Glocke erscheint nach fünf Sekunden unten rechts, das Pre-Prompt ist aktiviert, die automatischen Trigger sind bereit. Prüfen Sie einfach zwei Dinge in **DF Push > Einstellungen**, bevor Sie den Dienst kommunizieren:

- **VAPID öffentlicher Schlüssel**: Der Block zeigt Ihren automatisch generierten öffentlichen Schlüssel (den Application Server Key, den der Browser verwendet). Sie können ihn neu generieren, dies macht aber alle bestehenden Abonnements ungültig.
- **PWA-Manifest** und **Standardsymbol**: Fügen Sie Ihr Symbol (mindestens 192×192) hinzu, falls `site_icon` auf der Website nicht gesetzt ist.

Kein externer Dienst, der registriert werden muss, kein Firebase- / OneSignal-Entwicklerkonto zum Anlegen. Die VAPID-Schlüssel, die das Plugin generiert, reichen aus: sie authentifizieren Ihren Application Server gegenüber den Push-Diensten FCM, Mozilla Push und WNS.

## Reiter Opt-in — Prompt, Stile und Auslöser

Dieser Reiter steuert die Abonnement-Anfrage. Fünf verfügbare Stile, jeder positionierbar und thematisierbar:

- **Schwebende Glocke** (Standard): diskrete Pille unten rechts oder unten links.
- **Banner** oben oder unten auf der Seite.
- **Modal** zentriert mit Overlay.
- **Slide-in** seitlich.
- **Sticky-Bar** oben fixiert.

Das **Soft-Ask-Pre-Prompt** (empfohlen) zeigt Ihre angepasste Nachricht vor der nativen Browser-Anfrage an. Dieser Mechanismus schont Ihr Opt-in-Kontingent: in Chrome verbraucht eine Ablehnung des Pre-Prompts das Budget der nativen Anfragen nicht (×3 gegenüber 1 ohne Pre-Prompt).

Fünf konfigurierbare, kombinierbare Auslöser:

- **Verzögerung** (in Sekunden) nach dem Seitenladen.
- **Scroll** in Prozent der Seite (0 = deaktiviert).
- **Exit-Intent** bei Mauszeiger-Verlass-Bewegung (nur Desktop).
- **X aufgerufene Seiten** in der Sitzung.
- **In den Warenkorb** (erfasst das WooCommerce-Ereignis `added_to_cart`).

Aktivieren Sie den **A/B-Test des Prompts** mit einem Variante-B-Titel und einer Variante-B-Nachricht und einer konfigurierbaren Aufteilung. Die Zuweisung wird in localStorage gespeichert, um sitzungsübergreifende Konsistenz pro Besucher zu gewährleisten.

Sobald die Browser-Berechtigung verweigert wurde, kann sie nicht per Skript erneut angefordert werden. Pflegen Sie Ihr Pre-Prompt und verketten Sie keine Anfrage beim ersten Scroll: dieses Muster zeigt 70 % Ablehnung gegenüber 20-30 % mit einem zum richtigen Zeitpunkt ausgelösten Pre-Prompt.

## Reiter Trigger — die Automatismen

Zehn automatische Trigger, alle einzeln aktivierbar aus dem Reiter **Trigger**. Jeder stützt sich auf Action Scheduler für die verzögerten Sendungen, mit einem synchronen Fallback, falls Action Scheduler nicht verfügbar ist.

### Abgebrochener Warenkorb

Drei konfigurierbare Erinnerungen, standardmäßig nach 1 Stunde, 24 Stunden und 72 Stunden nach dem Abbruch. Die Erkennung erfasst das Ereignis `added_to_cart` für Push-abonnierte Nutzer und plant drei `df_push_abandoned_cart`-Aktionen in abnehmenden Intervallen. Die Erinnerungen werden automatisch abgebrochen, wenn die Bestellung in der Zwischenzeit getätigt wird.

### Wieder verfügbar (back-in-stock)

Auf der Produktseite können Ihre abonnierten Besucher einer produktspezifischen Warteliste beitreten. Wenn WooCommerce `woocommerce_product_set_stock_status` mit einer Rückkehr zu _instock_ auslöst, sendet das Plugin eine Benachrichtigung an die Warteliste des Produkts und leert sie dann.

### Preissenkung

Das Plugin pflegt ein Meta `_df_push_last_price` pro Produkt. Bei jeder Produkt-Aktualisierung vergleicht es den alten und neuen Preis. Übersteigt die Senkung den konfigurierten **Mindestprozent-Schwellenwert**, wird eine Benachrichtigung an das Thema _Aktionen_ gesendet.

### Bestätigung, Versand, Bewertung

- **Bestellbestätigung**: sofortiger Versand bei `woocommerce_thankyou` an den Abonnenten, wenn die Benutzer-ID übereinstimmt.
- **Versand**: erkennt die Sendungsnummer auf der Bestellung, indem nacheinander die Metas `_tracking_number`, `_wc_shipment_tracking_items` (WooCommerce Shipment Tracking) und `_aftership_tracking_number` (AfterShip) gelesen werden. Wird eine Nummer gefunden, enthält die Benachrichtigung sie in ihrer Nachricht.
- **Bewertungsanfrage**: geplant X Tage nach dem Wechsel der Bestellung in den Status _completed_ (konfigurierbare Verzögerung).

### Geburtstag, Reaktivierung, neues Produkt

- **Geburtstag**: der tägliche Cron `df_push_daily_lifecycle` liest das WooCommerce-Feld `billing_birthday` und sendet eine Benachrichtigung an Abonnenten, deren Geburtstag heute ist.
- **Reaktivierung**: Versand an Abonnenten, die seit 30, 60 und 90 Tagen inaktiv sind (Fenster konfigurierbar als CSV: `30,60,90`).
- **Neues Produkt**: bei Produktveröffentlichung wird eine Benachrichtigung an das Thema _Neuheiten_ gesendet.

Jeder Trigger akzeptiert ein Template-Payload: `{firstname}`, `{product_name}`, `{product_price}`, `{old_price}`, `{order_number}`, `{tracking_number}`, `{category}`, `{discount_code}`. Variablen werden zum Sendezeitpunkt aufgelöst, nicht bei der Planung.

## Reiter Kampagnen — visueller Builder, Segmentierung, A/B-Test

Bauen Sie eine manuelle Kampagne in **DF Push > Kampagnen > Neue Kampagne**. Der Builder bietet eine Live-Vorschau der Benachrichtigung so, wie sie auf dem Gerät des Abonnenten erscheinen wird.

- **Inhalt**: Titel, Nachricht, Ziel-URL, Hero-Bild, bis zu zwei Aktions-Buttons mit eigener Beschriftung und URL.
- **Dauerhafte Benachrichtigung** (Option _requireInteraction_): die Benachrichtigung bleibt bis zur Interaktion sichtbar.
- **Segmentierung** nach Sprache, Land, Gerät, Thema und nach RFM-Verhalten: Mindestbestellungen, Mindestbestellwert, Tage inaktiv, gekaufte Kategorie. Verhaltenssegmente werden über `wc_get_orders` beim Start berechnet.
- **A/B-Test**: aktivieren Sie eine Variante B (Titel und Nachricht), die Aufteilung ist in Prozent konfigurierbar. Die Zuweisung ist pro Abonnent zufällig, per ID deterministisch für die Analytics-Konsistenz.
- **Planung**: wählen Sie Datum und Uhrzeit oder senden Sie sofort.
- **Testmodus**: senden Sie die Kampagne nur an Administratoren, aus dem Builder, vor dem Produktionsstart.

Die Sende-Engine teilt das Segment automatisch in Blöcke, respektiert die Ruhezeiten pro Abonnenten-Zeitzone, wendet das konfigurierte Frequenzlimit an und entfernt im laufenden Betrieb Endpunkte, die 404 oder 410 (Abmeldung browserseitig) zurückgeben.

## Dashboard und Analytics

Das Dashboard **DF Push > Dashboard** aggregiert Ihre 30-Tage-KPIs. Chart.js ist lokal gebündelt (keine externe CDN-Abhängigkeit).

- **KPIs**: aktive Abonnenten, Opt-in-Rate, Sendungen, Klickrate (CTR), Conversions, zugeordneter Umsatz.
- **30-Tage-Zeitreihe**: Sendungen vs. Klicks, eine Linie pro Tag.
- **7 × 24-Heatmap**: beste Sendezeitfenster basierend auf Klicks, kreuzweise Wochentag und Tageszeit.
- **Funnel pro Kampagne**: gesendet > zugestellt > geklickt > konvertiert.
- **Zugeordneter Umsatz**: ein konfigurierbares Attributionsfenster (standardmäßig 72 Stunden) verknüpft jeden Klick mit dem ersten Kauf, der von diesem Abonnenten innerhalb des Fensters getätigt wurde.
- **CSV-Export** aller Ereignisse für DSGVO-Audit oder BI-Integration.

## Kundenseite: Mein Konto → Benachrichtigungen

Eine dedizierte Seite **Mein Konto → Benachrichtigungen** wird automatisch zum WooCommerce-Dashboard hinzugefügt. Der Kunde verfügt über vier Blöcke:

- **Dieses Gerät**: aktueller Status (aktiviert, deaktiviert, vom Browser blockiert, nicht unterstützt), mit Schaltfläche Auf diesem Gerät aktivieren oder deaktivieren.
- **Alle Ihre Geräte**: Liste der abonnierten Geräte (Typ, Browser, Sprache, letzte Aktivität), mit Einzel-Abmeldung oder vollständiger Abmeldung mit einem Klick.
- **Meine Einstellungen**: Kontrollkästchen für die nativen Themen (Neuheiten, Aktionen, Wieder verfügbar). Speicherung über REST mit Bestätigung.
- **Benachrichtigungsverlauf**: die letzten 30 erhaltenen Benachrichtigungen mit Titel, Text, Symbol, Link und Datum.

Die URL ist `/mein-konto/df-push-notifications/` in Deutsch. Der Rewrite-Endpunkt ist mit der Maske `EP_ROOT | EP_PAGES` registriert, mit einer Selbstheilung auf `init:999`, die eine fehlende Regel erkennt (Fall eines parallelen Permalink-Flushs) und automatisch neu flusht.

Kundenseitige Aktionen (Abmeldung, Einstellungen) gehen über REST-Routen unter `df-push/v1/account/*`, authentifiziert per Cookie + `wp_rest`-Nonce. Keine Aktion kann auf ein anderes Konto ausgeführt werden, selbst wenn die Geräte-ID in der Anfrage manipuliert wird.

## DSGVO und Einwilligungsregister

Die DSGVO-Konformität wird nativ behandelt, nicht als kosmetisches Add-on. Jedes Opt-in und jede Abmeldung wird in die Tabelle `dfpush_consent_log` eingetragen, mit:

- Abonnenten-ID.
- Aktion: _subscribe_ oder _unsubscribe_.
- In SHA-256 gehashte IP (die Klartext-IP wird niemals gespeichert).
- User-Agent.
- UTC-Zeitstempel.

Die nativen WordPress Privacy Exporters und Erasers sind integriert: Ein Kunde kann den Export oder die Löschung seiner personenbezogenen Daten über **Werkzeuge → Personenbezogene Daten exportieren** oder **Werkzeuge → Personenbezogene Daten löschen** anfordern. Das Plugin fügt dann seine Abonnements, Themen, Inbox und sein Einwilligungsregister in die Antwort ein — oder löscht sie auf Anfrage.

## Reiter Einstellungen — Anti-Spam und Attribution

Dieser Reiter zentralisiert die Parameter zum Abonnentenschutz und das Attributionsfenster:

- **Ruhezeiten** (quiet hours): Intervall, in dem keine Benachrichtigung gesendet wird. Zeitzonen-bewusst (am Opt-in-Zeitpunkt auf dem Gerät des Abonnenten über `Intl.DateTimeFormat().resolvedOptions().timeZone` gelesen). Standardmäßig 22h-8h lokal.
- **Frequenzlimit**: maximale Anzahl von Benachrichtigungen pro Tag pro Abonnent. 0 = unbegrenzt.
- **Smart Send Time**: optimiert die Sendezeit pro Abonnent basierend auf seinen historischen Klick-Zeitfenstern.
- **Attributionsfenster**: Dauer in Stunden zwischen einem Klick und einer Bestellung, damit die Bestellung der Benachrichtigung zugeordnet wird. Standardmäßig 72 Stunden.
- **In-Site-Inbox**: aktiviert oder deaktiviert die schwebende Glocke mit dem Benachrichtigungsverlauf im Frontend.
- **PWA-Manifest**: aktiviert die Generierung des Manifests, um die Website auf Mobilgeräten installierbar zu machen.

## Reiter Webhooks und REST-API

Der Reiter **Webhooks & API** deckt zwei Integrationsmechanismen ab.

### Ausgehende Webhooks

Konfigurieren Sie einen oder mehrere HTTP-Endpunkte pro Ereignis. Drei Formate sind verfügbar:

- **Slack**: Payload `{ text }`, kompatibel mit Slack Incoming Webhooks.
- **Discord**: Payload `{ content }`, kompatibel mit Discord Webhooks.
- **Generic**: vollständiges JSON-Payload mit event, timestamp, data — kompatibel mit Zapier, n8n, Make.

Verfügbare Ereignisse: `subscriber.created`, `campaign.launched`, `notification.clicked`, `order.attributed`. Anfragen sind nicht blockierend (`wp_remote_post` mit `blocking=false`), um den Hauptversand nie zu verlangsamen.

### REST-API

Unter dem Namespace `df-push/v1` stellt das Plugin eine token-geschützte öffentliche Sende-Route bereit: `POST /wp-json/df-push/v1/send` mit dem Header `X-DF-Push-Token`. Das Token ist mit einem Klick aus der Administration neu generierbar.

```
curl -X POST https://ihre-seite.com/wp-json/df-push/v1/send
  -H "Content-Type: application/json"
  -H "X-DF-Push-Token: IHR_TOKEN"
  -d '{
    "title": "Flash-Aktion",
    "body": "20 % auf den gesamten Katalog bis Mitternacht",
    "url": "https://ihre-seite.com/aktionen",
    "segment": { "lang": "de", "topic": "promos" }
  }'
```

Behandeln Sie dieses Token wie ein Passwort. Wer es besitzt, kann Benachrichtigungen an Ihre Abonnenten senden. Generieren Sie es sofort neu, falls Sie eine Kompromittierung vermuten.

## In-Site-Inbox, PWA und Mehrsprachigkeit

Drei ergänzende Funktionen decken die Fälle ab, in denen der Nutzer Push nicht autorisiert hat.

- **In-Site-Inbox**: eine schwebende Glocke (im Frontend konfigurierbar) öffnet eine Liste der letzten vom Nutzer erhaltenen Benachrichtigungen, gelesen oder ungelesen, auch wenn er Push nie autorisiert hat. Besonders nützlich für iOS Safari vor 16.4 und PWA-Nutzer.
- **PWA-Manifest**: dynamisch unter `/df-push-manifest.json` aus `site_icon` oder einem angepassten Symbol generiert. Filter `df_push_manifest` verfügbar, um Theme Color, Display, Scope, Start URL anzupassen.
- **Mehrsprachig**: kompatibel mit Polylang und WPML. Benachrichtigungen werden in der Sprache des Abonnenten gesendet (beim Opt-in erkannt), mit Fallback auf die Standardsprache der Website. `.po`- und `.mo`-Dateien in FR, EN, ES, DE, IT sind enthalten.

## Service Worker und technische Architektur

Der Service Worker wird von einer eigenständigen PHP-Datei unter der URL `/wp-content/plugins/df-push/sw.php` ausgeliefert. Dieser Ansatz umgeht das WordPress-Routing vollständig: keine Möglichkeit einer Interferenz mit einem Cache-Plugin, einem Canonical-Redirect oder einem anderen `template_redirect`-Handler.

Der Header `Service-Worker-Allowed: /` wird in der Antwort gesendet, um die Registrierung mit Root-Scope (`scope: '/'`) zu ermöglichen, auch wenn das Skript unter `/wp-content/` liegt.

Datenbankseitig acht Tabellen mit dem Präfix `dfpush_`:

- `dfpush_subscribers`: Abonnenten und ihr Push-Endpunkt.
- `dfpush_topic_subs`: Zuweisungen Thema ↔ Abonnent.
- `dfpush_campaigns`: manuelle Kampagnen mit Payload, Segment und Planung.
- `dfpush_notifications`: Protokoll der einzelnen gesendeten Benachrichtigungen.
- `dfpush_events`: rohe Ereignisse (Opt-in, sent, delivered, clicked, converted) für die Analytics.
- `dfpush_inbox`: dauerhafte Kopie der Benachrichtigungen für die In-Site-Inbox.
- `dfpush_stock_waitlist`: Wartelisten für Wieder-verfügbar.
- `dfpush_consent_log`: DSGVO-Register.

Die **Deinstallation** (vollständige Löschung über Plugins) löscht diese acht Tabellen und entfernt alle Optionen. Die einfache Deaktivierung hingegen behält die Daten für eine spätere Reaktivierung.

## Entwickler-Hooks

Das Plugin stellt Aktionen und Filter an Schlüsselpunkten bereit, um sein Verhalten zu erweitern, ohne den Kern zu verändern.

- `df_push_booted` (Aktion): wird nach dem Plugin-Boot ausgelöst, nützlich zum Registrieren angepasster Erweiterungen.
- `df_push_payload_build` (Filter): das JSON-Payload, das vor der Verschlüsselung an den Push-Dienst gesendet wird, ändern.
- `df_push_should_send` (Filter): den Versand auf benutzerdefinierte Bedingungen kurzschließen (_false_ zurückgeben zum Überspringen).
- `df_push_segment_query` (Filter): Kriterien der Verhaltenssegmentierung anreichern.
- `df_push_webhook_payload` (Filter): Payloads der ausgehenden Webhooks anpassen.
- `df_push_manifest` (Filter): das generierte PWA-Manifest ändern.
- Registrierte Action-Scheduler-Aktionen: `df_push_send_one`, `df_push_fan_out`, `df_push_abandoned_cart`, `df_push_review_request`, `df_push_dispatch_campaign`.

## FAQ und Fehlersuche

### Das Opt-in-Prompt erscheint nicht

Drei mögliche Ursachen: die Browser-Berechtigung ist bereits verweigert (prüfen Sie die Browser-Einstellungen), die Berechtigung ist bereits erteilt (das Prompt hat keinen Zweck mehr) oder ein Auslöser wurde nicht erreicht (Verzögerung nicht abgelaufen, unzureichendes Scrollen). Führen Sie in der JavaScript-Konsole `window.DFPush.isSubscribed()` aus, um den aktuellen Status zu prüfen.

### Die Abonnenten-Administration ist leer, obwohl ein Opt-in erfolgreich war

Prüfen Sie in der Netzwerk-Konsole, dass die Anfrage `POST /wp-json/df-push/v1/subscribe` einen 200-Code zurückgibt. Ab Version 1.0.1 re-synchronisiert das Plugin automatisch jedes vorhandene `PushSubscription` bei jedem Seitenladen mit dem Server und protokolliert jeden DB-Insertion-Fehler in `error_log`.

### Der Service Worker liefert einen Registrierungsfehler

Lautet der Browser-Fehler "The script resource is behind a redirect" oder "Unexpected token '<'", testen Sie direkt die URL `https://ihre-seite.com/wp-content/plugins/df-push/sw.php`. Sie sollten den JavaScript-Code des Service Workers mit einem `Content-Type: application/javascript` und dem Header `Service-Worker-Allowed: /` sehen. Wenn Sie ein HTML 403 sehen, prüfen Sie die htaccess-Regeln, die die direkte PHP-Ausführung unter `wp-content/plugins/` blockieren könnten.

### Benachrichtigungen werden auf iOS nicht empfangen

Safari auf iOS unterstützt Push-Benachrichtigungen erst ab Version 16.4 und nur für Sites, die als PWA über die Schaltfläche **Zum Home-Bildschirm hinzufügen** installiert sind. Das vom Plugin generierte PWA-Manifest erleichtert diese Installation. Wenn Sie nicht speziell auf iOS abzielen, ist dies kein Problem: die anderen Browser empfangen die Benachrichtigungen normal.

### Wie migriere ich von OneSignal oder Pusher

Bestehende Abonnenten dieser Drittanbieter-Dienste sind nicht portierbar: die Push-Kryptografie verknüpft jedes Abonnement mit einem eindeutigen Paar (VAPID-Schlüssel des Servers, Endpunkt des Browsers). Ihre Besucher müssen sich nach dem Wechsel zu DataFirefly Push neu abonnieren. Sie können den Übergang vorbereiten, indem Sie das alte SDK einige Tage vorher deaktivieren und über ein Pre-Announcement-Banner zur neuen Experience kommunizieren.

### Was passiert bei der Deinstallation?

Die einfache **Deaktivierung** behält alle Tabellen und Optionen: Sie können das Plugin wieder aktivieren und dort weitermachen, wo Sie aufgehört haben. Die **vollständige Löschung** aus Plugins führt `uninstall.php` aus, das die acht `dfpush_`-Tabellen löscht, alle Plugin-Optionen entfernt (einschließlich VAPID-Schlüssel und API-Token) und die Crons aushebt. Permalinks werden bei der nächsten Anfrage automatisch geflusht.
