Eventy
Każda scena popupowa rejestruje cztery typy eventów, gdy odwiedzający z nią interaguje. Eventy są rejestrowane server-side jako append-only log; nic nie jest aktualizowane po wstawieniu. Per-scena opt-out i reguły retencji pozwalają kontrolować growth storage i respektować preferencje prywatności.
Cztery typy eventów
Dział zatytułowany „Cztery typy eventów”impression
Dział zatytułowany „impression”Scena zamontowała się na stronie i odwiedzający ją zobaczył. Rejestrowane raz na pokazanie — jeśli popup z frequency = always pokazuje się 5 razy w 5 ładowaniach strony, zobaczysz 5 wierszy impression.
cta_click
Dział zatytułowany „cta_click”Odwiedzający kliknął CTA wewnątrz sceny. “CTA” jest szerokie: każde kliknięcie warstwy button, albo warstwy z włączoną akcją Click (URL / Close / Scroll-to-selector). Kliknięcie close X nie jest kliknięciem CTA — zobacz close poniżej.
Odwiedzający zamknął popup przez button X albo kliknięcie overlay. Rejestrowane raz na odrzucenie.
permanent_dismiss
Dział zatytułowany „permanent_dismiss”Odwiedzający kliknął button Don’t show again. To najsilniejszy sygnał odrzucenia — mówi ci, że odwiedzający explicite wybrał, że nie chce widzieć tego popupu już nigdy, nie tylko w tej wizycie. Rozróżnij od close dla analizy lejka.
Co jest rejestrowane
Dział zatytułowany „Co jest rejestrowane”Każdy event niesie:
| Kolumna | Źródło | Uwagi |
|---|---|---|
id | uuid | Klucz główny. |
popup_id | stage id | FK do p2lab_stage. |
event_type | impression / cta_click / close / permanent_dismiss | |
sales_channel_id | kontekst serwera | FK do sales_channel. |
customer_id | kontekst serwera | Nullable. Ustawiane tylko dla zalogowanych odwiedzających. |
page_type | client payload | Np. product, category. |
request_url | client payload | Pełna ścieżka żądania. |
created_at | serwer | UTC, bez updated_at (append-only). |
Bez PII poza customer ID (gdy zalogowany). Bez adresu IP, bez user-agenta, bez session ID. Plugin ma swoje entry-pointy, więc możesz audytować dokładnie, co jest przechowywane.
Wysyłanie eventów
Dział zatytułowany „Wysyłanie eventów”Plugin JS storefrontu wysyła eventy przez POST /p2lab-stage/track:
{ "popupId": "<uuid>", "eventType": "impression", "pageType": "product", "requestUrl": "/product/spring-jacket"}Endpoint:
- Waliduje
popupId+eventType(zwraca 400 jeśli brak). - Sprawdza flagę
statsEnabledsceny — jeśli off, silently no-opuje (defensive backstop; klient już pomija większość wywołań dla wyłączonych scen). - Rejestruje event.
- Na
impressionaktualizuje też per-sesja shown-popup counter odwiedzającego (używany przez limitmaxPerSession).
Per-scena opt-out
Dział zatytułowany „Per-scena opt-out”Każda scena ma przełącznik Track statistics w zakładce Overview → karta Statistics. Help text: “Track impressions, CTA clicks, closes and dismissals for this stage.”
Gdy off:
- Plugin JS storefrontu nadal próbuje wywołać
/p2lab-stage/trackze względu na kompatybilność wsteczną, ale controller silently no-opuje przystatsEnabled = false. - Żadne eventy nie są rejestrowane dla tej sceny.
- Zakładka Stats strony szczegółów sceny pokazuje zera (albo cokolwiek było zarejestrowane przed przełączeniem flagi).
Używaj tego dla scen, w których nie obchodzą cię metryki (permanentna scena testowa, scena internal-only) albo gdzie reguły retencji utworzyłyby więcej wierszy, niż chcesz przechowywać.
Retencja
Dział zatytułowany „Retencja”Każda scena ma pole Retention (days) w zakładce Overview (domyślnie 90, 0 = na zawsze). Eventy starsze niż to są usuwane przez zaplanowane zadanie czyszczące.
Gdy ustawione na 0, eventy są przechowywane na zawsze — przydatne dla audytów compliance, ale tabela rośnie bezgranicznie. Ustaw explicite, jeśli potrzebujesz twardego sufitu.
Retencja jest per-scena, więc możesz trzymać długą historię dla kampanii, na których ci zależy, i agresywnie czyścić tych, na których ci nie zależy.
API agregacji
Dział zatytułowany „API agregacji”Zakładka Stats w adminie pobiera zagregowane liczby przez POST /api/_action/p2lab-stage/stats:
Payload:
{ "popupId": "<uuid>", "dateFrom": "2026-04-01", "dateTo": "2026-04-30"}Response: zagregowane liczby eventów per typ + time-bucketed seria dla wykresu.
Date range jest opcjonalny; pomiń oba dla “all time”.
Uwagi o prywatności
Dział zatytułowany „Uwagi o prywatności”- Customer ID jest rejestrowane tylko dla zalogowanych odwiedzających. Anonymous odwiedzający zostawiają wiersz z
customer_id = NULL. - Bez IP, bez UA, bez session ID — z założenia.
- Sesja PHP jest używana do suppression częstotliwości, nie do analityki — zobacz Storefront → GDPR i storage.
- Jeśli musisz przestrzegać prawa do usunięcia z GDPR, klucz obcy
customer_idcascade’uje na usuwanie: usunięcie klienta usuwa jego wiersze eventów (albo ustawia na NULL, zależnie od tego jak pipeline customer-delete Shopware jest skonfigurowany).
Gdzie dalej
Dział zatytułowany „Gdzie dalej”- Dashboard — UI zakładki Stats w adminie.
- Storefront → Jak renderują się sceny — endpoint
/p2lab-stage/trackw kontekście. - Referencja → Typy eventów — schematy payload i referencja kolumn.