# DfCartRecovery: odzyskiwanie porzuconego koszyka dla Shopware 6

> Wprowadzenie DfCartRecovery dodaje do Shopware 6 (Community Edition) odzyskiwanie porzuconych koszyków, normalnie zarezerwowane dla planu Commercial: wykrywanie koszyków, do 3 zaplanowanych e-maili przypominających, unikalny kod rabatowy per klient, link przywracający…

- Strona: <https://www.datafirefly.com/pl/documentation/dfcartrecovery/>
- Język: pl
- Zaktualizowano: 2026-07-29
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfcartrecovery/index.md), [en](https://www.datafirefly.com/en/documentation/dfcartrecovery/index.md), [es](https://www.datafirefly.com/es/documentation/dfcartrecovery/index.md), [de](https://www.datafirefly.com/de/documentation/dfcartrecovery/index.md), [it](https://www.datafirefly.com/it/documentation/dfcartrecovery/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfcartrecovery/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfcartrecovery/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Wprowadzenie

DfCartRecovery dodaje do Shopware 6 (Community Edition) odzyskiwanie porzuconych koszyków, normalnie zarezerwowane dla planu Commercial: wykrywanie koszyków, do 3 zaplanowanych e-maili przypominających, unikalny kod rabatowy per klient, link przywracający koszyk jednym kliknięciem i tracking odzyskanych zamówień. Żadnych usług zewnętrznych, żadnego builda administracji: wszystko konfiguruje się w ustawieniach pluginu.

## Wymagania

- Shopware 6.5, 6.6 lub 6.7 (Community Edition self-hosted; Shopware Cloud SaaS nie jest obsługiwany)
- PHP 8.1 lub nowszy (zalecane 8.2+)
- Aktywny konsument wiadomości i wykonywanie zadań cyklicznych (standardowa rekomendacja Shopware w produkcji)
- Działająca wysyłka e-maili w sklepie (przypomnienia idą przez natywny serwis mail Shopware)

## Instalacja

1. Rozpakuj archiwum i umieść katalog `DfCartRecovery` w `custom/plugins/`.
2. Z katalogu głównego Shopware wykonaj:

```
bin/console plugin:refresh
bin/console plugin:install --activate DfCartRecovery
bin/console cache:clear
```

Zadanie cykliczne `df_cart_recovery.process` rejestruje się automatycznie i wykonuje co 15 minut. Sprawdź, czy Twoje workery działają:

```
bin/console scheduled-task:run
bin/console messenger:consume async low_priority
```

Instalacja tworzy tabelę śledzenia `df_cart_recovery` i szablon e-maila "Przypomnienie o porzuconym koszyku (DataFirefly)", wstępnie przetłumaczony na FR, EN, DE, ES i IT.

## Konfiguracja

Przejdź do **Rozszerzenia → Moje rozszerzenia → DfCartRecovery → Konfiguracja**. Trzy karty ustawień:

### Ogólne

- **Włącz odzyskiwanie koszyków**: globalny przełącznik pluginu.
- **Minimalna wartość koszyka**: koszyki poniżej tej kwoty są ignorowane (0 = brak minimum).
- **Retencja danych (dni)**: starsze rekordy śledzenia są usuwane automatycznie (domyślnie 30 dni, zobacz sekcję RODO).

### E-maile przypominające

- **Liczba przypomnień**: 1, 2 lub 3 (domyślnie 2).
- **Przypomnienie 1**: minuty po porzuceniu koszyka (domyślnie 60, czyli 1 godzina).
- **Przypomnienie 2**: minuty po przypomnieniu 1 (domyślnie 1440, czyli 24 godziny).
- **Przypomnienie 3**: minuty po przypomnieniu 2 (domyślnie 4320, czyli 72 godziny).

Sekwencja 1 h / +24 h / +72 h to sprawdzony standard e-mailowego retargetingu: zostaw ją jako punkt wyjścia, a potem dostrajaj według swoich statystyk odzyskiwania.

### Kod rabatowy

- **Dołącz unikalny kod rabatowy**: włącza generowanie kodów indywidualnych.
- **Promocja dla generowanych kodów**: wybierz promocję Shopware, która będzie nośnikiem kodów (patrz niżej).
- **Wyślij kod z przypomnieniem nr**: domyślnie 2: klienci wracający po pierwszym e-mailu zamawiają bez rabatu.
- **Prefiks kodu**: domyślnie CART; generowane kody wyglądają jak `CART-7F3A91B2`.

## Utworzenie promocji dla unikalnych kodów

1. W administracji Shopware otwórz **Marketing → Promocje** i utwórz promocję (albo użyj istniejącej).
2. W zakładce ogólnej włącz **Indywidualne kody promocyjne**.
3. Ustaw rabat (procent lub kwota), warunki i okres ważności jak zwykle.
4. Aktywuj promocję, a następnie wybierz ją w konfiguracji pluginu.

Promocja musi koniecznie mieć włączone kody indywidualne: plugin wstawia wygenerowane kody do tej listy. Bez tej opcji wysłane kody nie zostaną zaakceptowane w checkoucie.

## Personalizacja e-maila przypominającego

Treść edytujesz w **Ustawienia → Szablony e-mail**, typ "Przypomnienie o porzuconym koszyku (DataFirefly)", dla każdego języka sklepu. Dostępne zmienne Twig:

- `firstName` / `lastName`: imię i nazwisko klienta
- `items`: pozycje koszyka, każda z `label` i `quantity`
- `total` i `currency`: kwota koszyka i kod waluty
- `recoveryUrl`: link przywracający koszyk (umieść go na przycisku akcji)
- `voucherCode`: unikalny kod rabatowy (pusty, gdy opcja wyłączona lub przypomnienie bez kodu: otocz jego blok warunkiem Twig)
- `shopName`: nazwa sklepu kanału sprzedaży
- `reminderNumber`: numer bieżącego przypomnienia (1, 2 lub 3)

## Link przywracający

Każdy e-mail zawiera unikalny link postaci `/df-cart-recovery/token`, generowany na domenie kanału sprzedaży klienta, w jego języku. Po kliknięciu plugin odbudowuje koszyk pozycja po pozycji, sygnalizuje produkty, które stały się niedostępne, komunikatem w storefroncie, odnotowuje czas kliknięcia i przekierowuje na stronę koszyka. Linki nieprawidłowe lub wygasłe przekierowują na stronę główną z czytelnym komunikatem.

## Tracking odzyskiwania

Gdy tylko zamówienie zostaje złożone, plugin dopasowuje adres e-mail klienta do trwających porzuconych koszyków: rekord przechodzi w status "odzyskany" z identyfikatorem zamówienia, datą i liczbą wysłanych przypomnień. Przypomnienia dla tego koszyka natychmiast się kończą. Dane można przeglądać w tabeli `df_cart_recovery` (tokeny, statusy, kliknięcia, powiązane zamówienia) na potrzeby Twoich raportów SQL lub BI.

## RODO i dane

- Żadne dane nie opuszczają Twojego serwera; nie jest wywoływana żadna usługa firm trzecich.
- Rekordy śledzenia są automatycznie czyszczone po skonfigurowanym okresie retencji.
- Przy odinstalowaniu wybierz "Usuń wszystkie dane aplikacji", aby skasować tabelę, szablon e-maila i konfigurację, albo zachowaj je, żeby zatrzymać historię.

## Rozwiązywanie problemów

### Żaden e-mail nie jest wysyłany

- Sprawdź, czy zadanie cykliczne działa: `bin/console scheduled-task:list` powinno pokazywać `df_cart_recovery.process` w statusie scheduled, a Twoje workery messengera muszą być aktywne.
- Przetestuj globalną wysyłkę e-maili sklepu (Ustawienia → Agent pocztowy): plugin korzysta ze standardowego serwisu mail.
- Skontroluj minimalną wartość koszyka i opóźnienie przypomnienia 1: koszyk porzucony 20 minut temu przy opóźnieniu 60 minut nie jest jeszcze kwalifikowany.

### Goście nic nie otrzymują

To oczekiwane zachowanie: bez adresu e-mail żadne przypomnienie nie jest możliwe. Goście są śledzeni od momentu identyfikacji (logowanie lub założenie konta podczas checkoutu); scalenie koszyka aktualizuje rekord ich adresem.

### Kod rabatowy nie pojawia się w e-mailu

- Sprawdź, czy opcja "Dołącz unikalny kod rabatowy" jest aktywna i czy wybrano promocję.
- Promocja musi istnieć, być aktywna i mieć włączone kody indywidualne.
- Kod jest dołączany dopiero od skonfigurowanego przypomnienia (domyślnie drugiego): przypomnienie 1 w standardowej konfiguracji go nie zawiera.

### Link przywracający odsyła na stronę główną

Token jest nieprawidłowy albo rekord został wyczyszczony (przekroczona retencja); klient otrzymuje komunikat zachęcający do ponownego złożenia koszyka. Wydłuż okres retencji, jeśli Twoje opóźnienia przypomnień są długie.
