> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aftersell.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Budowanie strategii

> Twórz, konfiguruj i zarządzaj strategiami z poziomu panelu Aftersell — bez pisania kodu.

<div id="overview">
  ## Przegląd
</div>

Panel Aftersell udostępnia wizualny interfejs do budowania strategii i zarządzania nimi. Możesz tworzyć strategie, definiować reguły targetowania z wyzwalaczami, przypisywać produkty do rekomendacji i konfigurować zachowanie catch all — a wszystko to bez pisania jakiegokolwiek kodu.

Ten przewodnik prowadzi cię krok po kroku przez proces tworzenia strategii w interfejsie.

***

<div id="navigating-to-strategies">
  ## Przechodzenie do strategii
</div>

1. Zaloguj się do Aftersell.
2. Kliknij **Strategies** w nawigacji na lewym pasku bocznym.
3. Zobaczysz listę istniejących strategii lub pusty widok zachęcający do utworzenia pierwszej z nich.

***

<div id="creating-a-new-strategy">
  ## Tworzenie nowej strategii
</div>

1. Kliknij **Add Strategy**.
2. Trafisz do edytora strategii, w którym możesz dodawać reguły.

<Tip>
  Kliknij **ikonę ołówka** w lewym górnym rogu edytora strategii, aby nadać strategii opisową nazwę. Czytelna nazwa ułatwia później identyfikowanie strategii w panelu.
</Tip>

***

<div id="adding-rules">
  ## Dodawanie reguł
</div>

Każda strategia zawiera jedną lub więcej **reguł**. Reguła składa się z:

* **Wyzwalaczy** — części „kiedy” — kryteriów, które muszą zostać spełnione, aby reguła pasowała.
* **Akcji** — części „wtedy” — doświadczenia zwracanego, gdy reguła pasuje.

<div id="defining-triggers">
  ### Definiowanie wyzwalaczy
</div>

Wyzwalacze decydują o tym, kiedy reguła się uruchamia. W jednej regule możesz połączyć do pięciu wyzwalaczy. Jeden przełącznik **AND** / **OR** dotyczy całego zestawu warunków: przy **AND** każdy wyzwalacz musi pasować; przy **OR** wystarczy dopasowanie dowolnego jednego wyzwalacza. Dostępne typy wyzwalaczy obejmują:

<div id="product-triggers">
  #### Wyzwalacze produktowe
</div>

Targetuj na podstawie produktów w kontekście (koszyk kupującego, właśnie sfinalizowane zamówienie lub przeglądany produkt):

* **Specific product(s)** — dopasowuje konkretne produkty Shopify po ID
* **Collection** — dopasowuje produkty należące do konkretnych kolekcji
* **Tag(s)** — dopasowuje produkty z konkretnymi tagami (np. „sale”, „summer”)
* **Title** — dopasowuje tytuł produktu
* **Vendor** — dopasowuje nazwę dostawcy/marki
* **Type** — dopasowuje pole typu produktu (np. „Apparel”, „Electronics”)
* **Handle** — dopasowuje slug adresu URL produktu
* **Metafield** — dopasowuje niestandardowe pary namespace/klucz/wartość metapól
* **Selling plan** — dopasowuje produkty „subscription” lub „one-time”. Jest ewaluowany tylko wtedy, gdy kontekst żądania dostarcza plan sprzedaży produktu — powierzchnie upsell checkoutu i post-purchase w Aftersell tego nie wysyłają, więc wyzwalacz tam nie zadziała, chyba że niestandardowa integracja dostarczy go jawnie

<div id="customer-triggers">
  #### Wyzwalacze klienta
</div>

Targetuj na podstawie tego, kim jest kupujący:

* **Customer tag** — np. „VIP”, „loyalty-gold”
* **Country code** — kraj rozliczeniowy
* **Province code** — województwo/stan rozliczeniowy
* **Locale** — ustawienia regionalne klienta (np. „en-US”)
* **Accepts marketing** — status zgody marketingowej
* **Order count** — liczba wcześniejszych zamówień
* **Total spent** — łączne wydatki w całym okresie

<div id="cart-triggers">
  #### Wyzwalacze koszyka
</div>

Targetuj na podstawie ogólnego stanu koszyka:

* **Cart subtotal** — np. suma częściowa większa niż \$50
* **Item count** — łączna liczba sztuk w koszyku
* **Line count** — liczba odrębnych pozycji
* **Cart attribute** — niestandardowe atrybuty koszyka ustawiane przez API koszyka Shopify
* **Cart note** — pole notatki koszyka

<div id="location-triggers">
  #### Wyzwalacze lokalizacji
</div>

Targetuj na podstawie miejsca, do którego kupujący wysyła zamówienie, oraz waluty sklepu:

* **Shipping country** — kraj docelowy wysyłki
* **Shipping province** — województwo/stan docelowy wysyłki
* **Shipping method** — wybrana metoda wysyłki
* **Store currency** — aktywny kod waluty sklepu

<div id="marketing-triggers">
  #### Wyzwalacze marketingowe
</div>

Targetuj na podstawie adresu URL strony, na którą trafił kupujący:

* **URL** — dopasowuje podciąg adresu URL wejścia, dzięki czemu możesz targetować konkretną kampanię lub kanał, dopasowując parametr osadzony w adresie URL (np. `utm_source=newsletter`)

<div id="time-triggers">
  #### Wyzwalacze czasowe
</div>

Targetuj na podstawie momentu ewaluacji żądania, w czasie sklepu:

* **Day of week** — bieżący dzień
* **Hour of day** — bieżąca godzina

<div id="dynamic-triggers">
  #### Wyzwalacze dynamiczne
</div>

* **Always match** — wyzwalacz bez warunku, który zawsze się uruchamia. Użyj go, aby reguła działała przy każdym żądaniu (to coś innego niż [Catch all](#configuring-a-catch-all) na poziomie strategii, który uruchamia się tylko wtedy, gdy nie pasuje żadna inna reguła).

<Note>
  Nie każdy wyzwalacz jest zasilany danymi na każdej powierzchni. Na przykład checkout wysyła tylko kontekst produktów i koszyka — wyzwalacze klienta, lokalizacji i marketingowe tam nie zadziałają. Zobacz przewodniki [Wdrażanie strategii](/pl/aftersell/implementing_strategies_post_purchase_upsells), aby dowiedzieć się, co wysyła każda powierzchnia.
</Note>

<div id="operators">
  #### Operatory
</div>

Każdy wyzwalacz używa **operatora**, aby zdefiniować sposób dopasowania wartości. Dostępne operatory zależą od typu wyzwalacza.

| Operator                     | Opis                                                                                                                                  |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| **Equals**                   | Pasuje, gdy pole ma dokładnie podaną wartość — np. vendor równa się „Nike”.                                                           |
| **Does not equal**           | Pasuje, gdy pole ma dowolną wartość inną niż podana — przydatne do wykluczania konkretnego typu produktu lub dostawcy.                |
| **Contains any**             | Pasuje, gdy pole wielowartościowe zawiera co najmniej jedną wartość z twojej listy — np. produkt należy do dowolnej z kilku kolekcji. |
| **Does not contain any**     | Pasuje, gdy pole wielowartościowe nie zawiera żadnej wartości z twojej listy — np. wyklucz produkty z tagiem „final-sale”.            |
| **Contains all**             | Pasuje, gdy pole wielowartościowe zawiera każdą wartość z twojej listy — np. produkt musi mieć zarówno tag „sale”, jak i „summer”.    |
| **Does not contain all**     | Pasuje, gdy w polu wielowartościowym brakuje co najmniej jednej wartości z twojej listy.                                              |
| **Contains**                 | Pasuje, gdy pole tekstowe zawiera twoją wartość jako podciąg — np. tytuł zawiera „Gift”.                                              |
| **Does not contain**         | Pasuje, gdy pole tekstowe nie zawiera twojej wartości.                                                                                |
| **Greater than**             | Pasuje, gdy pole liczbowe przekracza twoją wartość — np. suma częściowa koszyka jest większa niż \$75.                                |
| **Less than**                | Pasuje, gdy pole liczbowe jest poniżej twojej wartości — np. liczba zamówień jest mniejsza niż 2 (kupujący po raz pierwszy).          |
| **Greater than or equal to** | Pasuje, gdy pole liczbowe osiąga lub przekracza twoją wartość — np. łączne wydatki wynoszą co najmniej \$500.                         |
| **Less than or equal to**    | Pasuje, gdy pole liczbowe jest równe twojej wartości lub od niej niższe — np. liczba pozycji w koszyku wynosi nie więcej niż 3.       |

Nie każdy operator jest dostępny dla każdego wyzwalacza:

* **Operatory list** (**Contains any / all** i ich negacje) dotyczą pól wielowartościowych, takich jak tagi, kolekcje, tagi klientów i konkretne produkty.
* **Operatory tekstowe** (**Equals**, **Contains** i ich negacje) dotyczą jednowartościowych pól tekstowych, takich jak tytuł, dostawca, handle, ustawienia regionalne, kraj i URL.
* **Operatory liczbowe** dotyczą pól takich jak suma częściowa koszyka, liczba pozycji, liczba wierszy, liczba zamówień, łączne wydatki i godzina dnia. Operatory liczbowe nie mają wariantów „does not”.
* Kilka pól obsługuje tylko **Equals** i **Does not equal** — selling plan, day of week i accepts marketing.

<div id="defining-actions">
  ### Definiowanie akcji
</div>

Akcje tworzą doświadczenie, które chcesz dostarczyć klientowi. To tutaj decydujesz, jakie produkty pokazać, jak je pokazać oraz jakie dodatkowe dane przekazać wraz z nimi. Reguła może mieć skonfigurowanych wiele akcji razem, aby zbudować pełne doświadczenie.

W ramach reguły wszystkie skonfigurowane akcje zasilają jedną wspólną pulę. Na przykład reguła z akcją konkretnych produktów, akcją kolekcji i akcją opartą na tagach zwróci produkty ze wszystkich trzech źródeł razem. Jeśli produkt pasuje do wielu źródeł, jest deduplikowany.

<div id="product-actions">
  #### Akcje produktowe
</div>

Te same atrybuty produktów dostępne po stronie wyzwalaczy są dostępne również przy definiowaniu akcji. Możesz zwracać produkty na podstawie:

* **Konkretnych produktów** — ręcznie wybierz pojedyncze produkty z katalogu Shopify.
* **Kolekcji** — zwróć wszystkie produkty należące do konkretnej kolekcji.
* **Atrybutów produktu** — zwróć produkty spełniające kryteria takie jak tagi, dostawca, typ produktu lub metapola — te same typy atrybutów, co w wyzwalaczach.

<div id="dynamic-actions">
  #### Akcje dynamiczne
</div>

Akcje dynamiczne zmieniają zwracane produkty na podstawie sygnałów w czasie rzeczywistym, a nie stałej listy produktów. Dostępne typy akcji dynamicznych obejmują:

* **Most popular** — najlepiej sprzedające się produkty twojego sklepu według wolumenu sprzedaży, w całym sklepie lub w ramach kolekcji.
* **Recently purchased** — produkty ostatnio kupione w sklepie.
* **Inherit from when** — ponownie wykorzystaj wyzwalacze reguły (część „kiedy”) jako selektor produktów, dzięki czemu zwracane produkty spełniają te same kryteria, na których uruchomiła się reguła.
* **AI Recommendations** — spersonalizowane sugestie generowane przez model rekomendacyjny Aftersell.

<div id="filtering-actions">
  #### Akcje filtrowania
</div>

Gdy pula produktów jest już złożona, możesz skonfigurować, ile produktów jest zwracanych i w jakiej kolejności:

* **Sort** — kontroluj, które produkty są wybierane:
  * **Random** — losowy wybór.
  * **Price: high → low** — najdroższe produkty są zwracane jako pierwsze.
  * **Price: low → high** — najtańsze produkty są zwracane jako pierwsze.
* **Amount/Limit** — ustaw maksymalną liczbę zwracanych produktów.

<Info>
  Najpierw stosowane jest sortowanie, a potem Amount/Limit. Na przykład jeśli sortowanie jest ustawione na **Random**, cała pula produktów jest losowana przed zastosowaniem limitu — zawsze otrzymujesz więc losowy wycinek, a nie te same produkty w losowej kolejności.
</Info>

<div id="key-value-actions">
  #### Akcje klucz-wartość
</div>

Opcjonalnie możesz dołączyć do reguły pary klucz-wartość. Gdy reguła pasuje, są one zwracane w `meta.data` w odpowiedzi API obok wyników produktowych. Typowe zastosowania obejmują:

* Tekst banera promocyjnego
* Etykiety kampanii na potrzeby analityki

<Note>
  Jeśli pasuje wiele reguł i emitują ten sam klucz, wygrywa wartość z pierwszej pasującej reguły — późniejsze reguły nie mogą jej nadpisać.
</Note>

***

<div id="rule-priority-and-evaluation-order">
  ## Priorytet reguł i kolejność ewaluacji
</div>

Reguły w ramach strategii są ewaluowane w hierarchicznych, sekwencyjnych krokach. Krok 1 jest ewaluowany jako pierwszy, i tak dalej. Możesz zmieniać kolejność reguł, przeciągając je i upuszczając w edytorze strategii. Silnik ewaluacji:

1. Ewaluuje wyzwalacze każdej reguły względem dostarczonego kontekstu.
2. Zbiera produkty ze wszystkich pasujących reguł.
3. Deduplikuje i ogranicza wynik do skonfigurowanego maksimum (domyślnie: 20 produktów).

***

<div id="configuring-a-catch-all">
  ## Konfigurowanie Catch all
</div>

Catch all to specjalna reguła, która działa jako ostatni krok w każdej ewaluacji strategii. Nie ma wyzwalacza — uruchamia się automatycznie, jeśli żadna inna reguła w strategii nie pasuje do bieżącego żądania.

Gdy jest włączony, Catch all gwarantuje, że twój slot rekomendacji nigdy nie będzie pusty. Jego akcję można skonfigurować przy użyciu tych samych typów akcji, które są dostępne dla zwykłych reguł — konkretne produkty, kolekcje, akcje dynamiczne itd.

* **Włącz/wyłącz** — włącz lub wyłącz regułę Catch all dla strategii. Gdy jest wyłączona, żądania, do których nie pasuje żadna reguła, zwrócą pusty wynik.
* **Konfiguruj akcje** — zdefiniuj, co ma być zwracane, używając dowolnej kombinacji dostępnych typów akcji, tak samo jak w każdej innej regule.

Gdy Catch all się uruchomi, odpowiedź API wskaże `resolution.fallbackUsed: true`.

***

<div id="global-filters">
  ## Filtry globalne
</div>

Filtry globalne wykluczają produkty z możliwości wyboru we wszystkich regułach strategii. Dostęp do nich uzyskasz przez **ikonę filtra** obok nazwy strategii w lewym górnym rogu edytora strategii.

Dostępne filtry globalne:

* **Exclude out of stock** — automatycznie wyklucz każdy produkt, który jest obecnie niedostępny do zakupu.
* **Exclude input products** — wyklucz produkt(y), które uruchomiły regułę (np. produkt, który kupujący aktualnie przegląda na stronie produktu), aby nigdy nie rekomendować tego samego produktu, który kupujący właśnie ogląda.
* **Exclude by product tag** — wyklucz produkty z konkretnymi tagami.
* **Exclude by metafield** — wyklucz produkty pasujące do konkretnego namespace/klucza/wartości metapola.
* **Exclude by product ID** — wyklucz konkretne produkty po ID.
* **Require stock at location** — pozostaw tylko produkty, które mają dostępne zapasy w wybranej lokalizacji (wymaga uprawnień do odczytu zapasów i lokalizacji).

***

<div id="validation-and-error-states">
  ## Walidacja i stany błędów
</div>

Strategii nie można zapisać, jeśli którakolwiek reguła jest niekompletna. Każda reguła potrzebuje co najmniej jednego warunku (lub wyzwalacza **Always match**) i co najmniej jednej akcji; jeśli któregoś brakuje, błędy pojawią się bezpośrednio na danej regule, wskazując, co należy poprawić.

Aby usunąć błąd i zapisać strategię, wykonaj jedną z czynności:

* **Uzupełnij regułę** — dodaj brakujący wyzwalacz i/lub akcję.
* **Usuń regułę** — usuń ją całkowicie, jeśli nie jest już potrzebna.

Edytor strategii nie pozwoli na zapis, dopóki wszystkie reguły nie będą poprawne.
