DataFirefly Push: kompletny przewodnik
Instalacja, konfiguracja i obsługa natywnych powiadomień Web Push dla WooCommerce: automatycznie generowane klucze VAPID, opt-in w wielu stylach z pre-promptem i testem A/B, dziesięć automatycznych triggerów, kampanie z wizualnym builderem i segmentacją behawioralną, pełna analityka i strona Moje konto klienta.
Prezentacja i wymagania
DataFirefly Push zamienia Twój sklep WooCommerce w natywną platformę powiadomień Web Push. Bez SDK, bez śledzenia przez podmioty trzecie: cała kryptografia (VAPID i szyfrowanie RFC 8291) działa na Twoim serwerze w czystym PHP przez OpenSSL. Wtyczka obejmuje inteligentny opt-in w wielu stylach, dziesięć automatycznych triggerów, kampanie ręczne z wizualnym builderem i segmentacją, kompletny dashboard analityczny, dedykowaną stronę Moje konto dla klientów oraz natywną zgodność z RODO.
- WordPress 6.2 i nowszy.
- WooCommerce 7.0 i nowszy, testowane do 9.6, zgodne z HPOS oraz blokami Koszyka/Zamówienia.
- PHP 8.1 i nowszy.
- Wielojęzyczność (FR/EN/ES/DE/IT), zgodność z Polylang i WPML.
- Zgodność z LiteSpeed Cache, WP Rocket i innymi wtyczkami cache: Service Worker jest serwowany jako samodzielny plik PHP.
Żadnej usługi zewnętrznej do podłączenia, żadnej biblioteki Composera do utrzymania. Klucze VAPID są generowane automatycznie przy aktywacji, a subskrypcje i zdarzenia pozostają w Twojej bazie danych.
Instalacja
- Pobierz archiwum
df-push.zipze swojego konta klienta. - W panelu WordPressa przejdź do Wtyczki > Dodaj nową > Wyślij wtyczkę na serwer i prześlij archiwum.
- Kliknij Włącz.
- W pasku bocznym administracji pojawi się menu DF Push z siedmioma pozycjami: Dashboard, Kampanie, Subskrybenci, Triggery, Opt-in, Ustawienia, Webhooks i API.
Przy aktywacji wtyczka tworzy osiem dedykowanych tabel z prefiksem dfpush_, generuje klucze VAPID, planuje dzienny cron df_push_daily_lifecycle i rejestruje endpoint Mojego konta. Żadna ręczna interwencja nie jest potrzebna.
Pierwsza konfiguracja: klucze VAPID i opt-in
Po aktywacji wtyczka działa od razu z ustawieniami domyślnymi: pływający dzwonek pojawia się w prawym dolnym rogu po pięciu sekundach, pre-prompt jest włączony, triggery automatyczne są gotowe. Przed komunikowaniem usługi sprawdź tylko dwie rzeczy w DF Push > Ustawienia:
- Klucz publiczny VAPID: blok pokazuje Twój automatycznie wygenerowany klucz publiczny (application server key używany przez przeglądarkę). Możesz go zregenerować, ale unieważni to wszystkie istniejące subskrypcje.
- Manifest PWA i ikona domyślna: dodaj swoją ikonę (minimum 192×192), jeśli
site_iconnie jest ustawione na witrynie.
Żadnej usługi zewnętrznej do rejestracji, żadnego konta deweloperskiego Firebase / OneSignal. Generowane przez wtyczkę klucze VAPID wystarczają: uwierzytelniają Twój serwer aplikacji wobec push services FCM, Mozilla Push i WNS.
Zakładka Opt-in: prompt, style i wyzwalacze
Ta zakładka steruje prośbą o subskrypcję. Dostępnych jest pięć stylów, każdy z konfigurowalną pozycją i motywem:
- Pływający dzwonek (domyślny): dyskretna pastylka w prawym lub lewym dolnym rogu.
- Baner u góry lub u dołu strony.
- Modal wyśrodkowany z overlayem.
- Slide-in boczny.
- Sticky bar przypięty u góry.
Pre-prompt soft ask (zalecany) wyświetla Twój własny komunikat przed natywną prośbą przeglądarki. Ten mechanizm chroni Twój limit opt-in: w Chrome odrzucenie pre-promptu nie zużywa limitu próśb natywnych (×3 zamiast 1 bez pre-promptu).
Pięć konfigurowalnych, łączonych wyzwalaczy:
- Opóźnienie (w sekundach) po załadowaniu strony.
- Scroll jako procent strony (0 = wyłączone).
- Exit-intent przy ruchu myszy w stronę wyjścia (tylko desktop).
- X obejrzanych stron w sesji.
- Dodanie do koszyka (przechwytuje zdarzenie WooCommerce
added_to_cart).
Włącz test A/B promptu z tytułem i komunikatem wariantu B oraz konfigurowalnym podziałem. Przydział jest utrwalany w localStorage, aby zapewnić spójność między sesjami dla danego odwiedzającego.
Raz odrzucona zgoda przeglądarki nie może zostać ponownie zażądana skryptem. Zadbaj o pre-prompt i nie wywołuj prośby przy pierwszym scrollu: obserwuje się wtedy 70 % odmów, wobec 20-30 % przy pre-prompcie wyzwolonym we właściwym momencie.
Zakładka Triggery: automatyzacje
Dziesięć automatycznych triggerów, każdy włączany indywidualnie w zakładce Triggery. Każdy korzysta z Action Schedulera do wysyłek odroczonych, z synchronicznym fallbackiem, gdy Action Scheduler jest niedostępny.
Porzucony koszyk
Trzy konfigurowalne przypomnienia, domyślnie 1 godzinę, 24 godziny i 72 godziny po porzuceniu. Detekcja przechwytuje zdarzenie added_to_cart dla subskrybentów Push i planuje trzy akcje df_push_abandoned_cart w malejących odstępach. Przypomnienia są anulowane automatycznie, jeśli zamówienie zostało w międzyczasie złożone.
Powrót do magazynu (back-in-stock)
Na stronie produktu subskrybenci mogą dołączyć do listy oczekujących per produkt. Gdy WooCommerce wyzwala woocommerce_product_set_stock_status z powrotem do instock, wtyczka wysyła powiadomienie do listy oczekujących produktu, a następnie ją opróżnia.
Obniżka ceny
Wtyczka utrzymuje metadaną _df_push_last_price per produkt. Przy każdej aktualizacji produktu porównuje starą i nową cenę. Jeśli obniżka przekracza skonfigurowany minimalny próg procentowy, powiadomienie trafia do tematu Promocje.
Potwierdzenie, wysyłka, opinia
- Potwierdzenie zamówienia: natychmiastowa wysyłka przy
woocommerce_thankyoudo subskrybenta, jeśli identyfikator użytkownika się zgadza. - Wysyłka: wykrywa numer śledzenia zamówienia, czytając kolejno metadane
_tracking_number,_wc_shipment_tracking_items(WooCommerce Shipment Tracking) i_aftership_tracking_number(AfterShip). Znaleziony numer trafia do treści powiadomienia. - Prośba o opinię: planowana X dni po przejściu zamówienia w status completed (opóźnienie konfigurowalne).
Urodziny, reaktywacja, nowy produkt
- Urodziny: dzienny cron
df_push_daily_lifecycleodczytuje polebilling_birthdayz WooCommerce i wysyła powiadomienie do subskrybentów obchodzących urodziny. - Reaktywacja: wysyłka do subskrybentów nieaktywnych od 30, 60 i 90 dni (okna konfigurowalne w CSV:
30,60,90). - Nowy produkt: przy publikacji produktu powiadomienie trafia do tematu Nowości.
Każdy trigger przyjmuje szablonowy payload: {firstname}, {product_name}, {product_price}, {old_price}, {order_number}, {tracking_number}, {category}, {discount_code}. Zmienne są rozwiązywane w chwili wysyłki, nie przy planowaniu.
Zakładka Kampanie: wizualny builder, segmentacja, test A/B
Zbuduj kampanię ręczną w DF Push > Kampanie > Nowa kampania. Builder oferuje podgląd na żywo powiadomienia w takiej postaci, w jakiej pojawi się na urządzeniu subskrybenta.
- Treść: tytuł, komunikat, adres docelowy, obraz hero, do dwóch przycisków akcji z własną etykietą i adresem.
- Powiadomienie trwałe (opcja requireInteraction): powiadomienie pozostaje widoczne do interakcji.
- Segmentacja według języka, kraju, urządzenia, tematu oraz zachowań RFM: minimalna liczba zamówień, minimalny średni koszyk, dni nieaktywności, kupiona kategoria. Segmenty behawioralne są liczone przez
wc_get_ordersprzy starcie. - Test A/B: włącz wariant B (tytuł i komunikat), podział jest konfigurowalny w procentach. Przydział jest losowy per subskrybent, deterministyczny po identyfikatorze dla spójności analityki.
- Planowanie: wybierz datę i godzinę albo uruchom natychmiast.
- Tryb testowy: wyślij kampanię wyłącznie do administratorów, z buildera, przed startem produkcyjnym.
Silnik wysyłki automatycznie dzieli segment na fragmenty, respektuje quiet hours według strefy czasowej subskrybenta, stosuje skonfigurowany frequency capping i na bieżąco czyści endpointy zwracające 404 lub 410 (wypisanie po stronie przeglądarki).
Dashboard i analityka
Panel DF Push > Dashboard agreguje KPI z 30 dni. Chart.js jest dołączony lokalnie (żadnych zależności od zewnętrznego CDN).
- KPI: aktywni subskrybenci, wskaźnik opt-in, wysyłki, wskaźnik kliknięć (CTR), konwersje, przypisany przychód.
- Seria czasowa 30 dni: wysyłki kontra kliknięcia, linia per dzień.
- Heatmapa 7 × 24: najlepsze okna wysyłki według kliknięć, w układzie dzień tygodnia i godzina.
- Lejek per kampania: wysłane > dostarczone > kliknięte > skonwertowane.
- Przypisany przychód: konfigurowalne okno atrybucji (domyślnie 72 godziny) wiąże każde kliknięcie z pierwszym zakupem złożonym w tym oknie przez subskrybenta.
- Eksport CSV wszystkich zdarzeń do audytu RODO albo integracji BI.
Strona klienta: Moje konto → Powiadomienia
Do panelu WooCommerce automatycznie dodawana jest dedykowana strona Moje konto → Powiadomienia. Klient ma tam cztery bloki:
- To urządzenie: bieżący status (włączone, wyłączone, zablokowane przez przeglądarkę, nieobsługiwane), z przyciskiem Włącz lub Wyłącz na tym urządzeniu.
- Wszystkie urządzenia: lista subskrybowanych urządzeń (typ, przeglądarka, język, ostatnia aktywność), z indywidualnym wypisaniem lub wypisaniem wszystkich jednym kliknięciem.
- Moje preferencje: pola wyboru dla tematów natywnych (Nowości, Promocje, Powrót do magazynu). Zapis przez REST z potwierdzeniem.
- Historia powiadomień: 30 ostatnich otrzymanych powiadomień, z tytułem, treścią, ikoną, linkiem i datą.
Adres to /moje-konto/df-push-notifications/ (zależnie od bazy Mojego konta). Rewrite endpoint jest rejestrowany z maską EP_ROOT | EP_PAGES, z autonaprawą na init:999, która wykrywa brakującą regułę (przypadek równoległego flusha permalinków) i automatycznie wykonuje ponowny flush.
Akcje klienta (wypisanie, preferencje) przechodzą przez trasy REST pod df-push/v1/account/*, uwierzytelnione ciasteczkiem + nonce wp_rest. Żadna akcja nie może zostać wykonana na cudzym koncie, nawet przy manipulacji identyfikatorem urządzenia w żądaniu.
RODO i rejestr zgód
Zgodność z RODO jest obsługiwana natywnie, nie jako kosmetyczny dodatek. Każdy opt-in i każde wypisanie trafia do tabeli dfpush_consent_log z:
- identyfikatorem subskrybenta,
- akcją: subscribe lub unsubscribe,
- adresem IP hashowanym SHA-256 (jawne IP nigdy nie jest utrwalane),
- user-agentem,
- znacznikiem czasu UTC.
Natywne WordPress Privacy Exporters i Erasers są podłączone: klient może zażądać eksportu lub usunięcia swoich danych osobowych z Narzędzia → Eksportuj dane osobowe lub Narzędzia → Usuń dane osobowe. Wtyczka dołącza wtedy jego subskrypcje, tematy, inbox i rejestr zgód do odpowiedzi, albo usuwa je zgodnie z żądaniem.
Zakładka Ustawienia: antyspam i atrybucja
Ta zakładka centralizuje parametry poszanowania subskrybentów i okno atrybucji:
- Godziny ciszy (quiet hours): przedział, w którym żadne powiadomienie nie jest wysyłane. Uwzględnia strefę czasową subskrybenta (odczytaną z urządzenia przy opt-in przez
Intl.DateTimeFormat().resolvedOptions().timeZone). Domyślnie 22:00-8:00 czasu lokalnego. - Frequency cap: maksymalna liczba powiadomień dziennie per subskrybent. 0 = bez limitu.
- Smart send time: optymalizuje godzinę wysyłki per subskrybent na podstawie jego historycznych okien kliknięć.
- Okno atrybucji: czas w godzinach między kliknięciem a zamówieniem, aby zamówienie zostało przypisane powiadomieniu. Domyślnie 72 godziny.
- Inbox in-site: włącza lub wyłącza pływający dzwonek z historią powiadomień na froncie.
- Manifest PWA: włącza generowanie manifestu, dzięki czemu witryna jest instalowalna na urządzeniach mobilnych.
Zakładka Webhooks i API REST
Zakładka Webhooks i API obejmuje dwa mechanizmy integracji.
Webhooks wychodzące
Skonfiguruj jeden lub więcej endpointów HTTP per zdarzenie. Dostępne są trzy formaty:
- Slack: payload
{ text }zgodny ze slackowymi Incoming Webhooks. - Discord: payload
{ content }zgodny z webhookami Discorda. - Generic: pełny payload JSON z event, timestamp, data, zgodny z Zapierem, n8n i Make.
Dostępne zdarzenia: subscriber.created, campaign.launched, notification.clicked, order.attributed. Żądania są nieblokujące (wp_remote_post z blocking=false), aby nigdy nie spowalniać wysyłki głównej.
API REST
W przestrzeni nazw df-push/v1 wtyczka udostępnia publiczną trasę wysyłki zabezpieczoną tokenem: POST /wp-json/df-push/v1/send z nagłówkiem X-DF-Push-Token. Token można zregenerować jednym kliknięciem z panelu.
curl -X POST https://twoja-witryna.com/wp-json/df-push/v1/send
-H "Content-Type: application/json"
-H "X-DF-Push-Token: TWOJ_TOKEN"
-d '{
"title": "Flash sale",
"body": "20 % na caly katalog do polnocy",
"url": "https://twoja-witryna.com/promocje",
"segment": { "lang": "pl", "topic": "promos" }
}'
Traktuj ten token jak hasło. Każdy, kto go posiada, może wysyłać powiadomienia do Twoich subskrybentów. Zregeneruj go natychmiast przy podejrzeniu kompromitacji.
Inbox in-site, PWA i wielojęzyczność
Trzy funkcje uzupełniające obejmują przypadki, gdy użytkownik nie zezwolił na Push.
- Inbox in-site: pływający dzwonek (konfigurowalny na froncie) otwiera listę ostatnich powiadomień użytkownika, przeczytanych lub nie, nawet jeśli nigdy nie zezwolił na Push. Szczególnie przydatne dla iOS Safari sprzed 16.4 i użytkowników PWA.
- Manifest PWA: generowany dynamicznie pod
/df-push-manifest.jsonna podstawiesite_iconalbo własnej ikony. Dostępny filtrdf_push_manifestdo dostrojenia theme color, display, scope, start_url. - Wielojęzyczność: zgodność z Polylang i WPML. Powiadomienia są wysyłane w języku subskrybenta (wykrytym przy opt-in), z fallbackiem na język domyślny witryny. Pliki
.poi.mow FR, EN, ES, DE, IT w komplecie.
Service Worker i architektura techniczna
Service Worker jest serwowany przez samodzielny plik PHP pod adresem /wp-content/plugins/df-push/sw.php. To podejście całkowicie omija routing WordPressa: zero ryzyka interferencji z wtyczką cache, canonical redirectem czy innym handlerem template_redirect.
W odpowiedzi wysyłany jest nagłówek Service-Worker-Allowed: /, pozwalający na rejestrację z zakresem głównym (scope: '/'), mimo że skrypt żyje pod /wp-content/.
Po stronie bazy danych osiem tabel z prefiksem dfpush_:
dfpush_subscribers: subskrybenci i ich endpoint Push.dfpush_topic_subs: przypisania temat ↔ subskrybent.dfpush_campaigns: kampanie ręczne z payloadem, segmentem i harmonogramem.dfpush_notifications: dziennik pojedynczych wysłanych powiadomień.dfpush_events: surowe zdarzenia (opt-in, sent, delivered, clicked, converted) na potrzeby analityki.dfpush_inbox: trwała kopia powiadomień dla inboxa in-site.dfpush_stock_waitlist: listy oczekujących na powrót do magazynu.dfpush_consent_log: rejestr RODO.
Deinstalacja (pełne usunięcie z ekranu Wtyczki) usuwa te osiem tabel i czyści wszystkie opcje. Sama dezaktywacja zachowuje dane na wypadek ponownej aktywacji.
Hooki dla deweloperów
Wtyczka udostępnia akcje i filtry w kluczowych punktach, aby rozszerzać jej działanie bez modyfikowania rdzenia.
df_push_booted(akcja): wyzwalana po starcie wtyczki, przydatna do rejestrowania własnych rozszerzeń.df_push_payload_build(filtr): modyfikacja payloadu JSON wysyłanego do push service przed szyfrowaniem.df_push_should_send(filtr): pomijanie wysyłki według własnych warunków (zwróć false, aby pominąć).df_push_segment_query(filtr): wzbogacanie kryteriów segmentacji behawioralnej.df_push_webhook_payload(filtr): dostrajanie payloadów webhooków wychodzących.df_push_manifest(filtr): modyfikacja generowanego manifestu PWA.- Zarejestrowane akcje Action Schedulera:
df_push_send_one,df_push_fan_out,df_push_abandoned_cart,df_push_review_request,df_push_dispatch_campaign.
FAQ i rozwiązywanie problemów
Prompt opt-in się nie pojawia
Trzy możliwe przyczyny: zgoda przeglądarki jest już odrzucona (sprawdź ustawienia przeglądarki), zgoda jest już udzielona (prompt nie ma już racji bytu), albo wyzwalacz nie został osiągnięty (nie upłynęło opóźnienie, za mały scroll). W konsoli JavaScript wykonaj window.DFPush.isSubscribed(), aby sprawdzić bieżący stan.
Lista Subskrybenci jest pusta, mimo że opt-in się udał
Sprawdź w konsoli sieciowej, czy żądanie POST /wp-json/df-push/v1/subscribe zwraca kod 200. Od wersji 1.0.1 wtyczka przy każdym ładowaniu strony automatycznie resynchronizuje z serwerem każdą istniejącą PushSubscription i loguje błędy zapisu do bazy w error_log.
Service Worker zwraca błąd rejestracji
Jeśli przeglądarka zgłasza „The script resource is behind a redirect” albo „Unexpected token ‘<‘”, przetestuj bezpośrednio adres https://twoja-witryna.com/wp-content/plugins/df-push/sw.php. Powinieneś zobaczyć kod JavaScript Service Workera z Content-Type: application/javascript i nagłówkiem Service-Worker-Allowed: /. Jeśli widzisz HTML 403, sprawdź reguły htaccess, które mogą blokować bezpośrednie wykonywanie plików PHP pod wp-content/plugins/.
Powiadomienia nie docierają na iOS
Safari na iOS obsługuje powiadomienia Push dopiero od wersji 16.4 i wyłącznie dla witryn zainstalowanych jako PWA przez przycisk Dodaj do ekranu początkowego. Generowany przez wtyczkę manifest PWA ułatwia tę instalację. Jeśli nie celujesz specjalnie w iOS, to nie problem: pozostałe przeglądarki otrzymują powiadomienia normalnie.
Jak zmigrować z OneSignal lub Pushera
Subskrybenci istniejący w tych usługach zewnętrznych nie są przenośni: kryptografia Push wiąże każdą subskrypcję z unikalną parą (klucz VAPID serwera, endpoint przeglądarki). Twoi odwiedzający będą musieli zasubskrybować się ponownie po przejściu na DataFirefly Push. Możesz przygotować przejście, wyłączając stare SDK kilka dni wcześniej i komunikując nową usługę banerem zapowiadającym.
Co się dzieje przy deinstalacji?
Sama dezaktywacja zachowuje wszystkie tabele i opcje: możesz ponownie włączyć wtyczkę i kontynuować od miejsca, w którym skończyłeś. Pełne usunięcie z ekranu Wtyczki wykonuje uninstall.php, który usuwa osiem tabel dfpush_, czyści wszystkie opcje wtyczki (łącznie z kluczami VAPID i tokenem API) i wyrejestrowuje crony. Permalinki są automatycznie flushowane przy następnym żądaniu.