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.
Free vs Pro
| Funkcja | Free | Pro |
|---|---|---|
| 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 limitu | Bez 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ładnik | Minimalna wersja |
|---|---|
| PHP | 8.1 |
| WordPress | 6.4 |
| WooCommerce | 8.0 |
| MySQL / MariaDB | 5.7 / 10.3 |
Wtyczka jest zgodna z HPOS (High-Performance Order Storage) i Cart & Checkout Blocks WooCommerce.
2. Instalacja
Przez panel WordPress (zalecana)
- Pobierz plik
sell-ai-returns.zipz trysellai.com. - W panelu WordPress przejdź do Wtyczki → Dodaj nową → Wyślij wtyczkę.
- Wybierz pobrany plik ZIP i kliknij Zainstaluj teraz.
- Kliknij Aktywuj wtyczkę.
- W menu WordPress pojawi się pozycja Zwroty.
Przez FTP
- Rozpakuj
sell-ai-returns.ziplokalnie. - Wgraj folder
sell-ai-returns/do/wp-content/plugins/. - W panelu WordPress przejdź do Wtyczki → Zainstalowane wtyczki i aktywuj Sell.AI Returns.
Po aktywacji
Podczas aktywacji wtyczka automatycznie:
- Tworzy tabele bazy danych:
wp_sellai_returns_requests,wp_sellai_returns_attachments,wp_sellai_returns_notes,wp_sellai_returns_status_log. - Ustawia domyślne opcje (
sellai_returns_settings).
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.
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.
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:
- Zgłoszenie pojawia się w panelu admina z unikalnym numerem (np.
ZWR-2025-000001). - Klient otrzymuje e-mail potwierdzający z numerem zgłoszenia.
- Sprzedawca otrzymuje e-mail z powiadomieniem o nowym zgłoszeniu.
- Jeśli skonfigurowana jest integracja Base., zwrot zostaje automatycznie utworzony w Base.
Typy zgłoszeń (podstawy prawne)
| Typ | Podstawa prawna | Kiedy stosować |
|---|---|---|
| Odstąpienie od umowy | Art. 27 UPC — prawo odstąpienia w 14 dniach od odbioru | Klient 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 prawne | Produkt ma wadę, jest niezgodny z opisem lub nie działa poprawnie |
| Uszkodzenie w transporcie | Roszczenie wobec przewoźnika / art. 65 Prawa pocztowego | Produkt dotarł uszkodzony — wymagana dokumentacja zdjęciowa |
| Inne | — | Pomył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:
- Lista zamówień — obok przycisków "Podgląd" i "Kup ponownie" przy każdym zamówieniu.
- Strona szczegółów zamówienia — przycisk "Złóż zwrot lub reklamację" pod tabelą produktów.
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).
[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ń:
| Kolumna | Opis |
|---|---|
| Numer | Unikalny numer zgłoszenia, np. ZWR-2025-000001 |
| Zamówienie | Numer zamówienia WooCommerce z linkiem do jego szczegółów |
| Typ | Kolorowy badge: odstąpienie / reklamacja jakościowa / uszkodzenie w transporcie / inne |
| Status | Aktualny status zgłoszenia: oczekuje / w trakcie / zaakceptowane / odrzucone / zamknięte |
| Data złożenia | Data 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).
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:
- Nagłówek — numer zgłoszenia, badge typu i badge statusu. Gdy przekroczony jest ustawowy termin odpowiedzi (14 dni od złożenia), wyświetla się znacznik Przekroczony termin.
- Tabela informacji — data złożenia, link do zamówienia WooCommerce z datą zakupu oraz termin ustawowy (data złożenia + 14 dni).
- Opis zgłoszenia — treść wpisana przez klienta z zachowaniem formatowania (nowe linie).
- Produkty objęte zgłoszeniem — tabela z miniaturami, nazwą, SKU, ilością zamówioną, ilością objętą zgłoszeniem oraz podaną przez klienta przyczyną.
- Załączniki — zdjęcia wyświetlane jako miniatury (klikalne do pełnego rozmiaru) lub ikona PDF dla plików niebędących obrazkami.
- Historia statusów — chronologiczny dziennik zmian statusu z datą, badge statusu i ewentualną notatką sprzedawcy.
Na górze strony wyświetlany jest link ← Wróć do listy zgłoszeń powracający do /moje-konto/zwroty-reklamacje/.
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:
- Numer zgłoszenia — unikalny identyfikator (np.
ZWR-2025-000001) - Klient — imię i nazwisko + adres e-mail
- Zamówienie — numer zamówienia WooCommerce z linkiem
- Typ zgłoszenia — podstawa prawna (badge kolorowy)
- Status — aktualny status (badge kolorowy)
- Data — kiedy złożono zgłoszenie
Statusy zgłoszeń
| Status | Opis |
|---|---|
pending — Oczekuje | Nowe zgłoszenie, jeszcze nierozpatrzone |
in_review — W trakcie rozpatrywania | Sprzedawca rozpoczął obsługę zgłoszenia |
accepted — Zaakceptowane | Zgłoszenie rozpatrzone pozytywnie |
rejected — Odrzucone | Zgłoszenie odrzucone (z uzasadnieniem) |
closed — Zamknięte | Sprawa 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.
- Przenieś do kosza — akcja wiersza i bulk action w widoku normalnym. Zgłoszenie znika z głównej listy, ale pozostaje w bazie danych z datą usunięcia.
- Przywróć — przywraca zgłoszenie z kosza do normalnej listy.
- Usuń trwale — usuwa zgłoszenie i wszystkie powiązane dane (załączniki, historię statusów, notatki) bezpowrotnie. Dostępne tylko w widoku Kosza.
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:
- Ocena zasadności — czy roszczenie jest prawnie uzasadnione
- Weryfikacja terminów — czy zgłoszenie wpłynęło w ustawowym terminie
- Ryzyko nadużycia — wskaźnik procentowy (0–100%)
- Uzasadnienie — opis decyzji wygenerowany przez AI
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
| Opcja | Opis | Domyślnie |
|---|---|---|
email_accent_color | Kolor tła nagłówka e-maila (HEX) | #D4855E |
email_header_title | Nazwa sklepu w nagłówku e-maila (puste = nazwa witryny WordPress) | (puste) |
email_footer_text | Tekst stopki e-maila | (puste) |
merchant_email | Adres 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
| Opcja | Opis | Domyślnie |
|---|---|---|
form_accent_color | Kolor akcentu formularza (przyciski, pasek postępu kroków) | #D4855E |
returns_page_id | Strona 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_uninstall | Usuń wszystkie dane (tabele bazy danych, opcje, załączniki) przy odinstalowaniu wtyczki. Domyślnie wyłączone — dane są zachowywane. | wyłączone |
Numeracja zgłoszeń
| Opcja | Opis | Domyślnie |
|---|---|---|
number_prefix | Prefiks numeru zgłoszenia (tylko litery, cyfry, myślnik, podkreślnik) | ZWR |
number_include_year | Czy uwzględnić rok w numerze | Tak |
number_separator | Separator między częściami numeru (maks. 3 znaki) | - |
number_padding | Liczba 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):
| Opcja | Opis |
|---|---|
withdrawal_detect_virtual | Automatycznie blokuj opcję odstąpienia dla produktów wirtualnych i cyfrowych WooCommerce |
withdrawal_exempt_categories | Kategorie produktów wykluczone z prawa odstąpienia (np. produkty higieniczne, personalizowane) |
withdrawal_exempt_tags | Tagi produktów wykluczone z prawa odstąpienia |
Integracje — Base.
Zakładka Integracje zawiera pełną konfigurację połączenia z Base.:
| Opcja | Opis |
|---|---|
| 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 zwrotu | Status 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ów | Dla każdego statusu pluginu wpisz odpowiadający ID statusu zwrotu w Base. (szczegóły w sekcji 7) |
| Mapowanie powodów zwrotu | Dla 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ż:
- Testuj połączenie — sprawdza poprawność tokenu API bez zapisywania zmian.
- Pobierz statusy zwrotów z Base. — pobiera listę statusów z API i wyświetla ich ID do uzupełnienia mapowania. Nie trzeba szukać ID ręcznie w panelu Base.
- Pobierz powody zwrotów z Base. — pobiera listę powodów zwrotów z API i wyświetla ich ID do uzupełnienia mapowania powodów.
- Log synchronizacji — tabela 100 ostatnich operacji synchronizacji z Base.
- Uruchom synchronizację teraz — ręczne wyzwolenie synchronizacji BL→Plugin (normalnie odbywa się co godzinę przez WP Cron).
- Wyczyść log — usuwa historię synchronizacji.
7. Integracja Base. PRO
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.
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:
- 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. - 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). - Tworzy zwrot przez API (
addOrderReturn) powiązany z zamówieniem i zapisuje powiązanie numer-zgłoszenia ↔ numer-zwrotu-BL. - 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:
- Kliknij „Pobierz powody zwrotów z Base." — wtyczka pobierze listę powodów z Twojego konta (
getOrderReturnReasonsList) wraz z ich ID. - 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.
- W BaseLinker utwórz pole dodatkowe dla zwrotów (Zwroty → Pola dodatkowe).
- 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:
- Wtyczka sprawdza, czy dany zwrot BL jest powiązany z jakimś zgłoszeniem w pluginie.
- Jeśli tak — mapuje status BL na status pluginu i aktualizuje zgłoszenie.
- 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 pluginie | Pole w ustawieniach | Opis |
|---|---|---|
Oczekuje (pending) | ID statusu BL | Nowe zgłoszenie, nierozpatrzone |
W trakcie rozpatrywania (in_review) | ID statusu BL | Admin rozpoczął obsługę |
Zaakceptowane (accepted) | ID statusu BL | Rozpatrzone pozytywnie |
Odrzucone (rejected) | ID statusu BL | Rozpatrzone negatywnie |
Zamknięte (closed) | ID statusu BL | Sprawa 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.
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:
| Kolumna | Opis |
|---|---|
| Czas | Data i godzina operacji |
| Kierunek | Plugin→BL lub BL→Plugin |
| Zgłoszenie | Numer zgłoszenia w pluginie z linkiem do szczegółów |
| BL # | Numer zwrotu w Base. (klikalny link do panelu BL) |
| Zmiana statusu | Poprzedni → 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:
- Zapisuje błąd w logu synchronizacji z opisem.
- Wyświetla czerwone powiadomienie na wszystkich stronach panelu WordPress (widoczne dla administratorów z uprawnieniami
manage_woocommerce). - Powiadomienie zawiera treść błędu i link "Sprawdź ustawienia →" kierujący do zakładki Integracje.
Powiadomienie znika automatycznie gdy kolejna operacja API zakończy się sukcesem.
8. Sell.AI Returns Pro
Funkcje Pro
- Nieograniczone zgłoszenia — brak limitu 5/miesiąc
- Analiza AI — automatyczna ocena zasadności roszczenia, weryfikacja prawna, wskaźnik ryzyka
- Zaawansowane statystyki — raporty liczby zgłoszeń, typy, czasy obsługi
- Aktualizacje dożywotnie — wszystkie przyszłe wersje Pro wliczone w cenę
- Wsparcie e-mail priorytetowe — dedykowana kolejka wsparcia
Aktywacja licencji
- Przejdź do Zwroty → Ustawienia → Licencja Pro.
- Wklej klucz licencyjny otrzymany po zakupie.
- Kliknij Aktywuj.
- Plugin Pro (
sell-ai-returns-pro.zip) należy zainstalować oddzielnie — jako drugą wtyczkę, obok darmowej wersji.
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:
- Czy termin złożenia zgłoszenia mieści się w ustawowym terminie
- Jaka podstawa prawna ma zastosowanie
- Czy opis problemu jest spójny
- Ryzyko nadużycia (0–100%)
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
| Filtr | Typ | Opis |
|---|---|---|
sellai_returns_can_create_request | bool | Czy formularz może przyjąć nowe zgłoszenie. Pro ustawia na true gdy licencja aktywna. |
sellai_returns_eligible_order_statuses | array | Statusy zamówień WooCommerce wyświetlanych w formularzu (domyślnie: ['wc-completed', 'wc-processing']). |
sellai_returns_withdrawal_days | int | Liczba 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_columns | array | Kolumny tabeli zgłoszeń w adminie. |
sellai_returns_request_row_actions | array | Akcje wierszy w tabeli zgłoszeń. |
sellai_returns_ai_analysis_result | array | Wyniki analizy AI (Pro) przed zapisem. |
sellai_returns_admin_settings_tabs | array | Dodatkowe zakładki w ustawieniach (Pro). |
sellai_returns_feature_{slug} | bool | Brama per-funkcja. Pro włącza wybrane funkcje po weryfikacji licencji. |
Akcje
| Akcja | Argumenty | Kiedy |
|---|---|---|
sellai_returns_before_request_created | array $data | Przed zapisem nowego zgłoszenia do bazy |
sellai_returns_after_request_created | int $id, Request $request | Po zapisie nowego zgłoszenia — tu Base. tworzy zwrot |
sellai_returns_request_status_changed | int $id, string $old, string $new, Request $request | Po zmianie statusu przez admina — tu Base. aktualizuje status |
sellai_returns_before_customer_email | Request $request | Przed wysłaniem e-maila do klienta |
sellai_returns_before_merchant_email | Request $request | Przed wysłaniem e-maila do sprzedawcy |
sellai_returns_ai_analysis_complete | int $id, array $result | Po 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:
- Przyciski "Zwrot / Reklamacja" pojawią się przy zamówieniach o statusie Zrealizowane w sekcji Moje konto.
- W nawigacji Moje konto pojawi się zakładka "Zwroty i reklamacje" z listą wszystkich zgłoszeń klienta.
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
- Zniesiony limit zgłoszeń — wersja darmowa jest w pełni funkcjonalna, bez miesięcznego limitu zwrotów i reklamacji (zgodność z wytycznymi WordPress.org).
- Integracja Base. przeniesiona do Pro — integracja z BaseLinker (zakładka „Integracje", dwukierunkowa synchronizacja statusów, link do zwrotu w szczegółach) jest teraz funkcją Sell.AI Returns Pro. Wersja darmowa udostępnia generyczne punkty rozszerzeń, z których korzysta Pro.
- Pro: mapowanie powodów zwrotu — powód wybrany przez klienta osobno dla każdego produktu jest teraz przekazywany do utworzonego zwrotu w Base. Nowa tabela mapowania (z przyciskiem „Pobierz powody zwrotów z Base.") przypisuje każdemu powodowi z wtyczki właściwy ID powodu w Base.; brak mapowania = powód domyślny.
- Pro: analiza AI w polu dodatkowym Base. — podsumowanie analizy AI (rekomendacja, pewność, ryzyko nadużycia, uzasadnienie) może być automatycznie zapisywane we wskazanym polu dodatkowym zwrotu w Base.
v1.4.0 — 2026
- Kosz (soft-delete) — usunięte zgłoszenia trafiają do kosza zamiast natychmiastowego trwałego usunięcia. Nowa zakładka „Kosz" w liście zgłoszeń umożliwia przywrócenie lub trwałe usunięcie. Operacje dostępne jako akcje wiersza i bulk action.
v1.3.0 — 2026
- Pro: automatyczna analiza AI — gdy toggle „automatyczna analiza AI" jest włączony, analiza uruchamia się automatycznie w tle po złożeniu nowego zgłoszenia (wcześniej wymagała ręcznego kliknięcia w panelu admina).
v1.2.0 — 2025
- Integracja Base. — automatyczne tworzenie zwrotów w Base. po złożeniu zgłoszenia; synchronizacja statusów dwukierunkowa (Plugin→Base. natychmiastowo, Base.→Plugin przez WP Cron co godzinę); mapowanie statusów w ustawieniach; zabezpieczenie przed pętlą synchronizacji; log 100 ostatnich operacji.
- Powód zwrotu per produkt — klient wybiera powód osobno dla każdego produktu (wada, uszkodzenie, zły produkt, brak, niezgodność, zmiana decyzji, inny). Podstawa prawna (rękojmia / odstąpienie / uszkodzenie transportowe) jest wyznaczana automatycznie na podstawie wybranych powodów; przy różnych podstawach w jednym zgłoszeniu — tryb „mieszany".
- Formatowanie cen — cena produktu w zgłoszeniu prezentowana zgodnie z ustawieniami WooCommerce (separator dziesiętny, tysięczny, pozycja symbolu waluty).
- Poprawka synchronizacji Base. — wartość
last_log_iddla cronu ograniczona do minimum 1 (API Base. odrzucało wartość 0).
v1.1.0 — 2025
- Moje zwroty w panelu klienta — zakładka w WooCommerce Moje konto z paginowaną listą zgłoszeń klienta oraz widokiem szczegółów każdego zgłoszenia (tabela danych, opis, produkty, załączniki, historia statusów).
- Przycisk „Złóż zgłoszenie" w zamówieniu — przycisk na stronie szczegółów zamówienia WC, prowadzący bezpośrednio do formularza zgłoszeniowego z pre-wypełnionym numerem zamówienia.
- Responsywny układ kart klienta — widok „Moje zwroty" dostosowany do ekranów mobilnych (układ kart zamiast tabeli poniżej 600 px).
v1.0.0 — 2025
- Premiera wtyczki — formularz wieloetapowy dla klienta (weryfikacja OTP, wybór produktów, opis i załączniki, podsumowanie); panel administratora (lista zgłoszeń, widok szczegółów, zmiana statusu z notatką); powiadomienia e-mail dla klienta i sprzedawcy; numeracja zgłoszeń; ustawienia szablonów e-mail i wyglądu formularza; obsługa art. 38 Ustawy o prawach konsumenta (blokada odstąpienia dla produktów wyłączonych); limit 5 zgłoszeń miesięcznie w planie darmowym.