Przejdź do głównej zawartości

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.

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.

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.

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.

Każdy event niesie:

KolumnaŹródłoUwagi
iduuidKlucz główny.
popup_idstage idFK do p2lab_stage.
event_typeimpression / cta_click / close / permanent_dismiss
sales_channel_idkontekst serweraFK do sales_channel.
customer_idkontekst serweraNullable. Ustawiane tylko dla zalogowanych odwiedzających.
page_typeclient payloadNp. product, category.
request_urlclient payloadPełna ścieżka żądania.
created_atserwerUTC, 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.

Plugin JS storefrontu wysyła eventy przez POST /p2lab-stage/track:

{
"popupId": "<uuid>",
"eventType": "impression",
"pageType": "product",
"requestUrl": "/product/spring-jacket"
}

Endpoint:

  1. Waliduje popupId + eventType (zwraca 400 jeśli brak).
  2. Sprawdza flagę statsEnabled sceny — jeśli off, silently no-opuje (defensive backstop; klient już pomija większość wywołań dla wyłączonych scen).
  3. Rejestruje event.
  4. Na impression aktualizuje też per-sesja shown-popup counter odwiedzającego (używany przez limit maxPerSession).

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/track ze względu na kompatybilność wsteczną, ale controller silently no-opuje przy statsEnabled = 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ć.

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.

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”.

  • 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_id cascade’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).