1. Wstęp i wymagania

Czym jest Sell.AI Returns?

Sell.AI Returns to wtyczka WordPress/WooCommerce do obsługi zwrotów i reklamacji zgodna z polskim prawem konsumenckim (ustawa o prawach konsumenta, rękojmia art. 556–576 KC) oraz dyrektywą UE 2023/2673.

Wtyczka zapewnia klientowi sklepu samoobsługowy formularz składania zgłoszeń, a sprzedawcy — panel zarządzania w obszarze WordPress admin. Zgłoszenia są numerowane, śledzące status, powiązane z zamówieniami WooCommerce i automatycznie powiadamiają obie strony e-mailem.

Ważne: Wtyczka jest przeznaczona dla polskich sklepów. Logika prawna, komunikaty i terminy są dostosowane do polskiego prawa konsumenckiego.

Free vs Pro

FunkcjaFreePro
Formularz zwrotów/reklamacji dla klienta
Weryfikacja e-mail kodem OTP
Panel zarządzania w adminie
E-maile do klienta i sprzedawcy
Przycisk "Zwrot / Reklamacja" w Moim koncie
Sekcja "Zwroty i reklamacje" w Moim koncie
Integracja z Base.
Zgodność z HPOS WooCommerce
Wyjątki z art. 38 UPC (produkty wirtualne)
Liczba zgłoszeńBez limituBez limitu
Analiza AI każdego zgłoszenia
Zaawansowane statystyki
Aktualizacje dożywotnie
Wsparcie e-mail priorytetowe

Pro to jednorazowa opłata 199 zł brutto — bez subskrypcji, licencja na 1 sklep.

Wymagania systemowe

SkładnikMinimalna wersja
PHP8.1
WordPress6.4
WooCommerce8.0
MySQL / MariaDB5.7 / 10.3

Wtyczka jest zgodna z HPOS (High-Performance Order Storage) i Cart & Checkout Blocks WooCommerce.

2. Instalacja

Przez panel WordPress (zalecana)

  1. Pobierz plik sell-ai-returns.zip z trysellai.com.
  2. W panelu WordPress przejdź do Wtyczki → Dodaj nową → Wyślij wtyczkę.
  3. Wybierz pobrany plik ZIP i kliknij Zainstaluj teraz.
  4. Kliknij Aktywuj wtyczkę.
  5. W menu WordPress pojawi się pozycja Zwroty.

Przez FTP

  1. Rozpakuj sell-ai-returns.zip lokalnie.
  2. Wgraj folder sell-ai-returns/ do /wp-content/plugins/.
  3. W panelu WordPress przejdź do Wtyczki → Zainstalowane wtyczki i aktywuj Sell.AI Returns.

Po aktywacji

Podczas aktywacji wtyczka automatycznie:

Wskazówka: WooCommerce musi być zainstalowane i aktywne przed instalacją Sell.AI Returns. Wtyczka wyświetli błąd, jeśli WooCommerce nie jest dostępne.

3. Formularz dla klienta

Shortcode i osadzanie

Formularz zwrotów osadzasz na dowolnej stronie WordPress za pomocą shortcode:

[sellai_returns_form]

Utwórz nową stronę (np. o tytule Zwroty i reklamacje), wklej shortcode i opublikuj. Zalecamy dodać link do tej strony w stopce sklepu i regulaminie. Klienci nie muszą być zalogowani — formularz weryfikuje tożsamość kodem OTP na e-mail.

Po opublikowaniu strony wybierz ją w ustawieniach wtyczki (Zwroty → Ustawienia → Wygląd formularza → Strona formularza zwrotu) — to aktywuje przycisk "Zwrot / Reklamacja" oraz sekcję "Zwroty i reklamacje" w panelu Moje konto WooCommerce.

Bez limitu: Wersja darmowa nie ogranicza liczby zgłoszeń — klienci mogą składać zwroty i reklamacje bez miesięcznego limitu.

Krok 1 — Weryfikacja e-mail (OTP)

Klient wpisuje adres e-mail, na który składał zamówienie. Wtyczka wysyła 6-cyfrowy kod jednorazowy (OTP) ważny przez 15 minut na ten adres. Zabezpieczenie: maksymalnie 5 kodów na godzinę z jednego adresu e-mail.

Po poprawnym wpisaniu kodu, klient widzi listę swoich zamówień (do 20 ostatnich z 2 lat, o statusie Zrealizowane lub Przetwarzanie). Zweryfikowana sesja jest aktywna przez 30 minut.

Pominięcie OTP dla zalogowanych klientów: Gdy klient jest zalogowany i kliknie przycisk "Zwrot / Reklamacja" przy konkretnym zamówieniu w sekcji Moje konto, formularz automatycznie pomija krok weryfikacji e-mail i przechodzi bezpośrednio do kroku 2. Tożsamość weryfikowana jest przez sesję WordPress — nie ma potrzeby wysyłania kodu OTP.

Krok 2 — Wybór produktów i typ zgłoszenia

Klient wybiera zamówienie, a następnie zaznacza produkty, których dotyczy zgłoszenie (z miniaturami i ilościami). Na tym samym kroku wybiera typ zgłoszenia — szczegóły poniżej.

Jeśli zamówienie zawiera produkt wirtualny, cyfrowy lub należący do kategorii/tagu wyłączonego z prawa odstąpienia (art. 38 UPC), opcja Odstąpienie od umowy zostaje automatycznie zablokowana z komunikatem prawnym.

Krok 3 — Opis i zdjęcia

Klient opisuje problem w polu tekstowym (do 10 000 znaków). Opcjonalnie może dołączyć do 3 plików (JPG, PNG, WebP, PDF, maks. 5 MB każdy). Zdjęcia są szczególnie przydatne przy reklamacji uszkodzeń w transporcie.

Krok 4 — Podsumowanie

Klient widzi podsumowanie zgłoszenia i potwierdza wysłanie. Po wysłaniu:

Typy zgłoszeń (podstawy prawne)

TypPodstawa prawnaKiedy stosować
Odstąpienie od umowyArt. 27 UPC — prawo odstąpienia w 14 dniach od odbioruKlient rezygnuje z zakupu bez podawania przyczyny; termin 14 dni od otrzymania towaru
Reklamacja jakościowa (rękojmia)Art. 556–576 KC — odpowiedzialność sprzedawcy za wady fizyczne i prawneProdukt ma wadę, jest niezgodny z opisem lub nie działa poprawnie
Uszkodzenie w transporcieRoszczenie wobec przewoźnika / art. 65 Prawa pocztowegoProdukt dotarł uszkodzony — wymagana dokumentacja zdjęciowa
InnePomyłka w wysyłce, brak produktu, inny problem

Przycisk w Moim koncie WooCommerce

Po wybraniu strony formularza w ustawieniach wtyczki, Sell.AI Returns automatycznie dodaje przycisk "Zwrot / Reklamacja" w dwóch miejscach sekcji Moje konto WooCommerce:

Przycisk jest widoczny wyłącznie dla zamówień o statusie Zrealizowane. Kliknięcie przenosi na stronę formularza z parametrem ?order_id=123 — ponieważ klient jest zalogowany, formularz pomija weryfikację OTP, automatycznie rozpoznaje jego konto i przechodzi bezpośrednio do kroku 2 (wyboru produktów z tego zamówienia).

Konfiguracja: Przejdź do Zwroty → Ustawienia → Wygląd formularza → Strona formularza zwrotu i wybierz stronę z shortcode [sellai_returns_form]. Bez tej konfiguracji przyciski nie są wyświetlane.

Sekcja "Zwroty i reklamacje" w Moim koncie

Sell.AI Returns dodaje do nawigacji Moje konto WooCommerce dedykowaną zakładkę "Zwroty i reklamacje" — umieszczoną bezpośrednio po zakładce "Zamówienia". Dostępna pod adresem /moje-konto/zwroty-reklamacje/.

Klient widzi tam tabelę wszystkich swoich zgłoszeń:

KolumnaOpis
NumerUnikalny numer zgłoszenia, np. ZWR-2025-000001
ZamówienieNumer zamówienia WooCommerce z linkiem do jego szczegółów
TypKolorowy badge: odstąpienie / reklamacja jakościowa / uszkodzenie w transporcie / inne
StatusAktualny status zgłoszenia: oczekuje / w trakcie / zaakceptowane / odrzucone / zamknięte
Data złożeniaData złożenia zgłoszenia w formacie zgodnym z ustawieniami WordPress

Jeśli strona formularza jest skonfigurowana w ustawieniach, nad tabelą wyświetla się przycisk "+ Nowe zgłoszenie". Lista obsługuje paginację (10 rekordów na stronę). Tabela wyświetla zarówno zgłoszenia złożone przez zalogowane konto, jak i zgłoszenia złożone wcześniej przez weryfikację e-mailem bez logowania (powiązane po adresie e-mail).

Nowe w v1.1.0: Zakładka pojawia się automatycznie po aktualizacji — nie wymaga dodatkowej konfiguracji. Jeśli nie pojawia się w menu, przejdź do Ustawienia → Bezpośrednie odnośniki w panelu WordPress i kliknij Zapisz zmiany, aby odświeżyć reguły przepisywania adresów.

Szczegóły zgłoszenia w Moim koncie

Kliknięcie numeru zgłoszenia lub przycisku Szczegóły → w tabeli przenosi klienta na stronę szczegółów pod adresem /moje-konto/zwroty-reklamacje/{id}/. Tytuł strony zmienia się na numer zgłoszenia. Dostęp wymaga zalogowania — próba wejścia na URL cudzego zgłoszenia jest blokowana.

Widok szczegółów zawiera:

Na górze strony wyświetlany jest link ← Wróć do listy zgłoszeń powracający do /moje-konto/zwroty-reklamacje/.

Bezpieczeństwo: Strona weryfikuje właściciela zgłoszenia przed wyświetleniem danych — klient widzi tylko swoje własne zgłoszenia (powiązane po ID konta WordPress lub adresie e-mail dla zgłoszeń złożonych bez logowania).

4. Panel admina — Lista zgłoszeń

Tabela zgłoszeń

Przejdź do WordPress Admin → Zwroty. Widok listy pokazuje 4 karty statystyk (łącznie, ten miesiąc, oczekujące, w toku). Tabela pokazuje wszystkie zgłoszenia z kolumnami:

Statusy zgłoszeń

StatusOpis
pending — OczekujeNowe zgłoszenie, jeszcze nierozpatrzone
in_review — W trakcie rozpatrywaniaSprzedawca rozpoczął obsługę zgłoszenia
accepted — ZaakceptowaneZgłoszenie rozpatrzone pozytywnie
rejected — OdrzuconeZgłoszenie odrzucone (z uzasadnieniem)
closed — ZamknięteSprawa zakończona (niezależnie od wyniku)

Filtry i wyszukiwanie

W górnej części tabeli dostępne są filtry według statusu i typu zgłoszenia. Pole wyszukiwania pozwala szukać po nazwisku klienta, e-mailu lub numerze zgłoszenia.

Kosz

Usunięte zgłoszenia nie są kasowane natychmiastowo — trafiają do Kosza. Zakładka „Kosz" pojawia się nad tabelą obok zakładki „Wszystkie" i pokazuje liczbę zgłoszeń w koszu.

5. Szczegóły zgłoszenia

Kliknij na numer lub nazwę klienta, aby otworzyć widok szczegółowy zgłoszenia.

Zamówienie i klient

Górna karta zawiera: dane klienta (imię, e-mail), numer zamówienia WooCommerce, status i wartość zamówienia, datę zakupu. Jeśli włączona jest integracja Base., wyświetlany jest też numer zwrotu w Base. z bezpośrednim linkiem do panelu BL.

Produkty

Sekcja z listą produktów objętych zgłoszeniem: miniatura, nazwa, SKU, cena, liczba zamówiona i liczba objęta zgłoszeniem. Wyświetlana jest też podstawa prawna dla każdego produktu.

Analiza AI Pro

Gdy zainstalowane jest Sell.AI Returns Pro, w prawym panelu widoku szczegółów pojawia się sekcja Wyniki Analizy AI. Analiza jest uruchamiana automatycznie po złożeniu zgłoszenia i zawiera:

Historia statusów i notatki

Każda zmiana statusu jest zapisywana z datą i godziną. Sprzedawca zmienia status przez menu wyboru w prawym panelu, następnie klika Zapisz zmiany. Przy zmianie statusu można dodać notatkę wewnętrzną (niewidoczną dla klienta). Zmiana statusu automatycznie aktualizuje status zwrotu w Base. (jeśli integracja jest aktywna).

6. Ustawienia

Przejdź do WordPress Admin → Zwroty → Ustawienia. Ustawienia podzielone są na pięć zakładek:

Szablony e-mail

OpcjaOpisDomyślnie
email_accent_colorKolor tła nagłówka e-maila (HEX)#D4855E
email_header_titleNazwa sklepu w nagłówku e-maila (puste = nazwa witryny WordPress)(puste)
email_footer_textTekst stopki e-maila(puste)
merchant_emailAdres e-mail sprzedawcy do powiadomień (puste = adres admina WordPress)(puste)

Zakładka zawiera też podgląd e-maila — oddzielnie dla klienta i sprzedawcy — aktualizowany na żywo podczas edycji ustawień.

Wygląd formularza

OpcjaOpisDomyślnie
form_accent_colorKolor akcentu formularza (przyciski, pasek postępu kroków)#D4855E
returns_page_idStrona z formularzem zwrotu (dropdown stron WordPress). Wybranie strony aktywuje przycisk "Zwrot / Reklamacja" oraz zakładkę "Zwroty i reklamacje" w Moim koncie WooCommerce.(brak)
delete_data_on_uninstallUsuń wszystkie dane (tabele bazy danych, opcje, załączniki) przy odinstalowaniu wtyczki. Domyślnie wyłączone — dane są zachowywane.wyłączone

Numeracja zgłoszeń

OpcjaOpisDomyślnie
number_prefixPrefiks numeru zgłoszenia (tylko litery, cyfry, myślnik, podkreślnik)ZWR
number_include_yearCzy uwzględnić rok w numerzeTak
number_separatorSeparator między częściami numeru (maks. 3 znaki)-
number_paddingLiczba cyfr w ID (1–10, z zerami wiodącymi)6

Przykład z ustawieniami domyślnymi: ZWR-2025-000001

Prawo konsumenckie

Zakładka pozwala skonfigurować automatyczne wykrywanie produktów wyłączonych z prawa odstąpienia (art. 38 UPC):

OpcjaOpis
withdrawal_detect_virtualAutomatycznie blokuj opcję odstąpienia dla produktów wirtualnych i cyfrowych WooCommerce
withdrawal_exempt_categoriesKategorie produktów wykluczone z prawa odstąpienia (np. produkty higieniczne, personalizowane)
withdrawal_exempt_tagsTagi produktów wykluczone z prawa odstąpienia
Uwaga prawna: Jeśli zamówienie zawiera chociaż jeden produkt z wyłączonej kategorii/tagu, opcja "Odstąpienie od umowy" zostaje automatycznie zablokowana w formularzu dla całego zamówienia.

Integracje — Base.

Zakładka Integracje zawiera pełną konfigurację połączenia z Base.:

OpcjaOpis
Włącz integracjęAktywuje automatyczne tworzenie zwrotów i synchronizację statusów z Base.
Token API Base.Klucz API z panelu Base. → Moje konto → API. Użyj uprawnień pełnych lub „Zwroty" (odczyt + zapis)
ID statusu zwrotuStatus przypisywany nowemu zwrotowi w chwili jego utworzenia. Kliknij Pobierz statusy zwrotów z Base., aby zobaczyć dostępne ID
ID powodu zwrotu (domyślny)Powód używany, gdy powód wybrany przez klienta nie ma przypisanego mapowania (0 = brak powodu)
Mapowanie statusówDla każdego statusu pluginu wpisz odpowiadający ID statusu zwrotu w Base. (szczegóły w sekcji 7)
Mapowanie powodów zwrotuDla każdego powodu wybieranego przez klienta w formularzu wpisz odpowiadający ID powodu zwrotu w Base. — wtedy każda pozycja zwrotu otrzyma właściwy powód

Zakładka zawiera też:

7. Integracja Base. PRO

Funkcja Pro: Integracja z BaseLinker jest dostępna w Sell.AI Returns Pro. Wymaga aktywnej licencji — po jej wpisaniu w panelu pojawia się zakładka „Integracje".

Jak działa synchronizacja?

Integracja działa dwukierunkowo: zmiany statusu w pluginie są wysyłane do Base. natychmiastowo, a zmiany statusu w Base. trafiają do pluginu co godzinę przez WP Cron.

Każde zgłoszenie ma zapisane powiązanie z numerem zwrotu w Base. (przechowywane w wp_options). Dzięki temu operacje synchronizacji są szybkie — nie wymagają przeszukiwania wszystkich rekordów.

Zabezpieczenie przed pętlą: Gdy synchronizacja BL→Plugin aktualizuje status zgłoszenia, wtyczka automatycznie blokuje ponowne wysłanie zmiany do Base. Nie ma ryzyka nieskończonej pętli aktualizacji.
Kompatybilność z zamówieniami Marketplace: Integracja działa niezależnie od źródła zamówienia. Wtyczka odnajduje zamówienie w Base. przez API (getOrders, pole shop_order_id = ID zamówienia WooCommerce), więc działa zarówno z zamówieniami z WooCommerce, jak i z zamówieniami zaimportowanymi z Marketplace (Allegro, Amazon itp.) do Base.

Plugin → Base.

Przy nowym zgłoszeniu: Natychmiast po złożeniu formularza przez klienta, wtyczka:

  1. Odnajduje zamówienie w Base. przez API (getOrders) — dopasowuje po e-mailu klienta i numerze zamówienia WooCommerce (shop_order_id). Nie wymaga żadnych dodatkowych wtyczek ani konfiguracji meta.
  2. Pobiera produkty zamówienia z Base. i dopasowuje je po SKU do zwracanych produktów — dzięki temu zwrot w Base. ma prawidłowo przypisane produkty z katalogu BL (order_product_id, product_id).
  3. Tworzy zwrot przez API (addOrderReturn) powiązany z zamówieniem i zapisuje powiązanie numer-zgłoszenia ↔ numer-zwrotu-BL.
  4. Dodaje datowany wpis do historii statusów zgłoszenia (widoczny w panelu admina) z numerem zwrotu BL.

Numer zwrotu BL jest widoczny w widoku szczegółów zgłoszenia w adminie jako klikalne łącze bezpośrednio do Base.: panel-g.baselinker.com/orders_returns.php#return:{id}.

Przy zmianie statusu przez admina: Gdy sprzedawca zmienia status zgłoszenia w panelu WordPress, wtyczka natychmiast aktualizuje status zwrotu w Base. przez API (setOrderReturnStatus), używając mapowania statusów z ustawień.

Powód zwrotu per produkt → Base.

Klient w formularzu wybiera powód osobno dla każdego zwracanego produktu (wada, uszkodzenie w transporcie, zły produkt, brak elementów, niezgodność z opisem, zmiana decyzji, inny). Aby ten powód trafił do utworzonego zwrotu w Base., uzupełnij mapowanie powodów w zakładce Integracje:

  1. Kliknij „Pobierz powody zwrotów z Base." — wtyczka pobierze listę powodów z Twojego konta (getOrderReturnReasonsList) wraz z ich ID.
  2. Dla każdego z powodów wtyczki wpisz odpowiadający ID powodu z Base. Pozostaw 0, aby dla danego powodu użyć powodu domyślnego z pola powyżej.

Przy tworzeniu zwrotu (addOrderReturn) każda pozycja otrzymuje return_reason_id wynikający z powodu wybranego przez klienta dla tego produktu. Jeśli klient zwraca kilka produktów z różnych powodów, każda pozycja w Base. dostanie własny, prawidłowy powód — a nie jeden wspólny.

Analiza AI w polu dodatkowym

Możesz przekazywać podsumowanie analizy AI (rekomendacja, pewność, ryzyko nadużycia i uzasadnienie) do wybranego pola dodatkowego zwrotu w Base. — dzięki temu cały zespół widzi ocenę zgłoszenia bezpośrednio w BaseLinker.

  1. W BaseLinker utwórz pole dodatkowe dla zwrotów (Zwroty → Pola dodatkowe).
  2. W ustawieniach wtyczki (Zwroty → Ustawienia → Integracje) kliknij „Pobierz pola dodatkowe z BaseLinker” i wybierz pole na podsumowanie AI, a następnie zapisz ustawienia.

Analiza AI powstaje w tle tuż po złożeniu zgłoszenia, więc podsumowanie zapisuje się w polu dodatkowym chwilę po utworzeniu zwrotu (poprzez setOrderReturnFields). Ponowne uruchomienie analizy w panelu aktualizuje wartość pola.

Base. → Plugin (synchronizacja cykliczna)

Co godzinę WP Cron uruchamia synchronizację, która pobiera dziennik zmian statusów zwrotów z Base. (getJournalList, typ logów: zmiany statusów zwrotów). Dla każdej zmiany:

  1. Wtyczka sprawdza, czy dany zwrot BL jest powiązany z jakimś zgłoszeniem w pluginie.
  2. Jeśli tak — mapuje status BL na status pluginu i aktualizuje zgłoszenie.
  3. Zdarzenie jest zapisywane w logu synchronizacji.

Synchronizacja pobiera tylko nowe zdarzenia (zapamiętuje ostatni przetworzony ID wpisu w dzienniku BL), więc nie przetwarza tych samych zmian dwukrotnie.

Mapowanie statusów

W zakładce Integracje konfiguruje się tabelę mapowania. Dla każdego statusu pluginu podajesz ID odpowiadającego statusu zwrotu w Base.:

Status w pluginiePole w ustawieniachOpis
Oczekuje (pending)ID statusu BLNowe zgłoszenie, nierozpatrzone
W trakcie rozpatrywania (in_review)ID statusu BLAdmin rozpoczął obsługę
Zaakceptowane (accepted)ID statusu BLRozpatrzone pozytywnie
Odrzucone (rejected)ID statusu BLRozpatrzone negatywnie
Zamknięte (closed)ID statusu BLSprawa zakończona

ID statusów zwrotów znajdziesz klikając Pobierz statusy zwrotów z Base. w zakładce Integracje — wtyczka pobierze je automatycznie przez API i wyświetli w tabeli z nazwami. Mapowanie działa w obie strony: zarówno Plugin→BL, jak i BL→Plugin korzystają z tej samej tabeli.

Wskazówka: Jeśli pozostawisz pole mapowania puste (0), zmiana na ten status nie będzie synchronizowana do Base. — przydatne jeśli nie chcesz odwzorowywać wszystkich statusów.

Log synchronizacji

Log wyświetlany jest w dolnej części zakładki Integracje. Zawiera do 100 ostatnich operacji (starsze są automatycznie usuwane). Każdy wpis zawiera:

KolumnaOpis
CzasData i godzina operacji
KierunekPlugin→BL lub BL→Plugin
ZgłoszenieNumer zgłoszenia w pluginie z linkiem do szczegółów
BL #Numer zwrotu w Base. (klikalny link do panelu BL)
Zmiana statusuPoprzedni → nowy status
Wynik✓ Sukces lub ✗ Błąd z treścią komunikatu

Powiadomienia o błędach

Gdy API Base. zwróci błąd (np. nieprawidłowy token, błąd sieci), wtyczka:

Powiadomienie znika automatycznie gdy kolejna operacja API zakończy się sukcesem.

8. Sell.AI Returns Pro

Funkcje Pro

Aktywacja licencji

  1. Przejdź do Zwroty → Ustawienia → Licencja Pro.
  2. Wklej klucz licencyjny otrzymany po zakupie.
  3. Kliknij Aktywuj.
  4. Plugin Pro (sell-ai-returns-pro.zip) należy zainstalować oddzielnie — jako drugą wtyczkę, obok darmowej wersji.
Architektura: Sell.AI Returns Pro to osobna wtyczka WordPress, która rozszerza darmową wersję. Obie muszą być zainstalowane i aktywne jednocześnie.

Analiza AI — jak działa

Po złożeniu zgłoszenia przez klienta, Pro automatycznie wysyła treść zgłoszenia do modelu AI (Claude od Anthropic lub GPT-4o od OpenAI — do wyboru w ustawieniach Pro). AI analizuje:

Wyniki trafiają do panelu admina w sekcji Wyniki Analizy AI w widoku szczegółów zgłoszenia. Klucze API konfiguruje się w zakładce Ustawienia Pro.

9. Dla deweloperów

Wszystkie publiczne hooki mają prefiks sellai_returns_. Poniżej pełna lista.

Filtry

FiltrTypOpis
sellai_returns_can_create_requestboolCzy formularz może przyjąć nowe zgłoszenie. Pro ustawia na true gdy licencja aktywna.
sellai_returns_eligible_order_statusesarrayStatusy zamówień WooCommerce wyświetlanych w formularzu (domyślnie: ['wc-completed', 'wc-processing']).
sellai_returns_withdrawal_daysintLiczba dni ustawowego terminu odstąpienia (domyślnie 14). Formularz wyświetla alert gdy zamówienie mieści się w tym terminie.
sellai_returns_request_list_columnsarrayKolumny tabeli zgłoszeń w adminie.
sellai_returns_request_row_actionsarrayAkcje wierszy w tabeli zgłoszeń.
sellai_returns_ai_analysis_resultarrayWyniki analizy AI (Pro) przed zapisem.
sellai_returns_admin_settings_tabsarrayDodatkowe zakładki w ustawieniach (Pro).
sellai_returns_feature_{slug}boolBrama per-funkcja. Pro włącza wybrane funkcje po weryfikacji licencji.

Akcje

AkcjaArgumentyKiedy
sellai_returns_before_request_createdarray $dataPrzed zapisem nowego zgłoszenia do bazy
sellai_returns_after_request_createdint $id, Request $requestPo zapisie nowego zgłoszenia — tu Base. tworzy zwrot
sellai_returns_request_status_changedint $id, string $old, string $new, Request $requestPo zmianie statusu przez admina — tu Base. aktualizuje status
sellai_returns_before_customer_emailRequest $requestPrzed wysłaniem e-maila do klienta
sellai_returns_before_merchant_emailRequest $requestPrzed wysłaniem e-maila do sprzedawcy
sellai_returns_ai_analysis_completeint $id, array $resultPo zakończeniu analizy AI (Pro)

Przykład użycia

Integracja z zewnętrznym CRM po złożeniu zgłoszenia:

add_action(
    'sellai_returns_after_request_created',
    function ( int $id, SellAI_Returns_Request $request ): void {
        wp_remote_post( 'https://moj-crm.pl/api/ticket', [
            'body' => wp_json_encode( [
                'id'       => $id,
                'customer' => $request->customer_email,
                'type'     => $request->legal_basis,
                'desc'     => $request->description,
            ] ),
            'headers' => [ 'Content-Type' => 'application/json' ],
        ] );
    },
    10,
    2
);

Dodanie statusów zamówień wyświetlanych w formularzu (np. także zamówień "Wstrzymanych"):

add_filter(
    'sellai_returns_eligible_order_statuses',
    function ( array $statuses ): array {
        $statuses[] = 'wc-on-hold';
        return $statuses;
    }
);

Powiadomienie na Slack przy zmianie statusu na "zaakceptowane":

add_action(
    'sellai_returns_request_status_changed',
    function ( int $id, string $old, string $new ): void {
        if ( $new !== 'accepted' ) return;
        wp_remote_post( 'https://hooks.slack.com/services/TWOJ_WEBHOOK', [
            'body' => wp_json_encode( [
                'text' => "Zgłoszenie #{$id} zaakceptowane.",
            ] ),
            'headers' => [ 'Content-Type' => 'application/json' ],
        ] );
    },
    10,
    3
);

10. FAQ

Co się stanie ze zgłoszeniami po deinstalacji?

Domyślnie — nic. Tabele bazy danych i dane są zachowywane po odinstalowaniu wtyczki. Jeśli chcesz usunąć wszystkie dane, włącz opcję Zwroty → Ustawienia → Wygląd formularza → Usuń dane przy odinstalowaniu przed deinstalacją. Wtedy wtyczka usunie tabele bazy danych, wszystkie opcje i pliki załączników.

Czy formularz działa bez zalogowania?

Tak. Klient weryfikuje swoją tożsamość kodem OTP na e-mail — nie potrzebuje konta WordPress ani WooCommerce. Zalogowani klienci korzystający z przycisku w Moim koncie pomijają ten krok całkowicie.

Jak skonfigurować przycisk "Zwrot / Reklamacja" i sekcję w Moim koncie?

Utwórz stronę WordPress ze shortcode [sellai_returns_form], opublikuj ją, a następnie przejdź do Zwroty → Ustawienia → Wygląd formularza → Strona formularza zwrotu i wybierz tę stronę z listy. Po zapisaniu:

Zakładka "Zwroty i reklamacje" nie pojawia się w menu Moje konto — co zrobić?

Po aktualizacji wtyczki do v1.1.0 z wcześniejszej wersji może być konieczne odświeżenie reguł przepisywania adresów. Przejdź do Ustawienia → Bezpośrednie odnośniki w panelu WordPress i kliknij Zapisz zmiany (bez zmiany ustawień). Wtyczka zazwyczaj robi to automatycznie przy pierwszym ładowaniu po aktualizacji.

Jak zmienić adres e-mail powiadomień dla sprzedawcy?

Przejdź do Zwroty → Ustawienia → Szablony e-mail → Adres e-mail sprzedawcy. Jeśli pole jest puste, powiadomienia trafiają na adres admina WordPress (Ustawienia → Ogólne → Adres e-mail).

Jak zablokować możliwość odstąpienia dla produktów spersonalizowanych?

Przejdź do Zwroty → Ustawienia → Prawo konsumenckie i dodaj kategorie lub tagi produktów spersonalizowanych do listy wykluczeń. Formularz automatycznie ukryje opcję "Odstąpienie od umowy" dla zamówień zawierających te produkty.

Jak skonfigurować integrację z Base.?

Przejdź do Zwroty → Ustawienia → Integracje. Włącz integrację, wklej token API z panelu Base., podaj ID statusów i powodów zwrotów, a następnie wypełnij tabelę mapowania statusów. Kliknij "Testuj połączenie" aby zweryfikować token przed zapisaniem. Szczegóły w sekcji 7 tej dokumentacji.

Synchronizacja z Base. nie działa — co sprawdzić?

Sprawdź zakładkę Integracje → Log synchronizacji — wpisy z ✗ zawierają treść błędu. Najczęstsze przyczyny: nieprawidłowy token API, nieprawidłowe ID statusu/powodu, wyłączony WP Cron na serwerze. Możesz też kliknąć "Uruchom synchronizację teraz" aby ręcznie wyzwolić synchronizację i zobaczyć jej wynik.


11. Changelog

v1.5.0 — 2026

v1.4.0 — 2026

v1.3.0 — 2026

v1.2.0 — 2025

v1.1.0 — 2025

v1.0.0 — 2025