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

# Build a Box

> Oferta post-purchase Build a Box: kupujący komponują własny box z wybranych przez ciebie produktów, z rabatami ilościowymi, które rosną w miarę zapełniania boxa.

**Build a Box** to typ oferty post-purchase, w którym kupujący komponuje własny box z zestawu wybranych przez ciebie produktów i kupuje cały wybór w jednej transakcji. Zamiast akceptować lub odrzucać pojedynczy produkt, wybiera, co trafi do boxa i w jakiej ilości, a rabat ilościowy może rosnąć w miarę zapełniania boxa.

Funkcja działa obok ofert post-purchase z jednym i wieloma produktami i łączy się ze zwykłymi widżetami oferty, takimi jak nagłówek i licznik.

<Note>
  Build a Box oferuje kilka różnych produktów. Aby sprzedawać więcej sztuk jednego produktu w cenach progowych, użyj zamiast tego [Quantity upsells](/pl/aftersell/quantity-upsells).
</Note>

Aby dodać taką ofertę, otwórz lejek, wybierz **Add offer** i wybierz **Build a box**.

<div id="setting-up-the-box">
  ## Konfiguracja boxa
</div>

<div id="choosing-candidate-products">
  ### Wybór produktów kandydujących
</div>

Sekcja **Product selection** określa, spośród których produktów kupujący może wybierać. Nazywamy je *kandydatami*.

1. Otwórz ofertę boxa w edytorze lejka post-purchase.
2. Rozwiń **Product selection**.
3. Wybierz **Add product** i wskaż jeden lub więcej produktów. Produkty już znajdujące się na liście są wykluczone z wyboru.
4. Zapisz.

Box obsługuje do **12 kandydatów**. Przeciągnij uchwyt w wierszu, aby zmienić kolejność — to kolejność, którą widzą kupujący. Użyj ikony usuwania, aby usunąć produkt; nie możesz usunąć ostatniego pozostałego kandydata, ponieważ box wymaga co najmniej jednego.

<div id="box-size">
  ### Rozmiar boxa
</div>

**Box size** określa, ile pozycji kupujący musi wybrać:

| Ustawienie                   | Co robi                                                                                           |
| ---------------------------- | ------------------------------------------------------------------------------------------------- |
| **Minimum items**            | Dolny limit. Liczony w sztukach, więc trzy sztuki jednego produktu liczą się jako trzy.           |
| **Maximum items (optional)** | Pozostaw puste, aby nie ustawiać limitu. Ustaw równe minimum, aby uzyskać box o stałym rozmiarze. |

W przypadku boxa o stałym rozmiarze edytor informuje, że kupujący muszą wybrać dokładnie tyle pozycji i zobaczą licznik „0 z N wybranych”.

<Warning>
  Jeśli twoi kandydaci łącznie nie mogą osiągnąć minimum, edytor pokazuje krytyczny baner zatytułowany **„This box won't be shown to shoppers”**, podający maksymalną liczbę pozycji, na jaką pozwalają twoje produkty, oraz ustawione przez ciebie minimum. Oferta jest całkowicie pomijana w momencie serwowania.

  Sugerowane rozwiązanie zależy od przyczyny:

  * **Produkt ma wyłączony selektor ilości**, więc można go dodać tylko raz — włącz go z powrotem, dodaj więcej produktów lub obniż minimum.
  * **W pozostałych przypadkach** — obniż minimum, dodaj więcej produktów lub zwiększ maksymalną ilość produktu.
  * **Maksimum boxa nie dopuszcza żadnych pozycji** — baner informuje o tym zamiast tego i prosi o jego zwiększenie lub pozostawienie pustego.
</Warning>

<div id="discounts">
  ## Rabaty
</div>

<div id="discount-tiers">
  ### Progi rabatowe
</div>

Sekcja **Box discount** ustawia rabat, który skaluje się z liczbą pozycji w boxie. Dodaj próg przyciskiem **Add tier**, a następnie ustaw **Minimum items for tier N** oraz **Discount for tier N**.

Jak wybierana jest stawka:

* Kupujący otrzymuje **najgłębszą** stawkę, do której kwalifikuje się jego box, a nie po prostu ostatni przekroczony próg. Jeśli skonfigurujesz 3+ pozycje z rabatem 30% i 6+ pozycji z rabatem 20%, kupujący z 6 pozycjami nadal otrzyma 30%.
* Stawka jest wyliczana na podstawie **bieżącej liczby pozycji**, a nie minimum boxa. Kafelek otwiera się z pełną ceną i przelicza się w miarę zapełniania boxa, więc stawka pokazywana kupującemu zawsze odpowiada temu, co jego bieżący wybór faktycznie zapewnia.
* Pusta tabela progów jest prawidłowa i oznacza, że box sprzedaje się w pełnej cenie.

Nie ma ogólnego limitu rabatu dla całego boxa — tylko tabela progów ustala stawkę.

Edytor pokazuje ostrzeżenia dla układów progów, które wyglądają na niezamierzone. Dwa z nich blokują zapis; trzecie jest wyłącznie informacyjne:

| Ostrzeżenie                                                                              | Kiedy się pojawia                                                            | Blokuje zapis? |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | -------------- |
| Próg daje mniejszy rabat niż niższy próg, więc nigdy nie ma zastosowania                 | Próg o ściśle wyższym minimum ma niższą stawkę rabatu niż próg poniżej niego | Tak            |
| Próg leży poniżej minimum boxa, więc każdy box, który kupujący może kupić, już go osiąga | Minimum progu jest poniżej dolnego limitu boxa                               | Nie            |
| Dwa progi zaczynają się od tej samej liczby pozycji                                      | Zduplikowane minima progów                                                   | Nie            |

Maksimum boxa musi być również takie samo jak minimum lub wyższe. Ustawienie maksimum poniżej minimum blokuje zapis.

<div id="per-product-discounts">
  ### Rabaty na poziomie produktu
</div>

Kandydat może mieć własny rabat zamiast podążać za stawką boxa. Otwórz kandydata, przejdź do **Discount** i zaznacz **Give this product its own discount**.

* Nadpisanie stosuje się na kafelku tego produktu i w sumie boxa, zamiast stawki progowej.
* `0` jest prawidłowym nadpisaniem — utrzymuje produkt w pełnej cenie wewnątrz boxa objętego rabatem.
* Pozostaw nadpisanie wyłączone, aby produkt podążał za rabatem boxa.

<div id="editing-several-products-at-once">
  ### Edytowanie kilku produktów naraz
</div>

**Edit all products** otwiera panel zbiorczej edycji. Odznacz każdego kandydata, którego chcesz pominąć w edycji.

Tam, gdzie wybrane produkty się różnią, pole pokazuje **Mixed** — jego edycja zapisuje twoją wartość dla wszystkich, a pozostawienie go bez zmian zachowuje wartość własną każdego produktu. Przełącznik nadpisania pokazuje stan nieokreślony, gdy tylko część produktów ma nadpisania.

<div id="per-product-settings">
  ## Ustawienia na poziomie produktu
</div>

Każdy kandydat ma własny panel obejmujący **Badge**, **Product image badge**, **Image**, **Product details** (w tym oceny w recenzjach, z kolorami gwiazdek domyślnie `#fdcc0d` i `#d1d5db`), **Variant options**, **Box limits**, **Discount** oraz **Already purchased**.

Wygląd kafelków nie jest ustawiany per kandydat. Wynika z ustawienia [**Layout**](#layout) na poziomie oferty, dzięki czemu każdy kafelek w boxie ma taki sam kształt.

Warto zwrócić uwagę na dwa ustawienia w sekcji **Box limits**:

* **Show quantity selector** — domyślnie włączone. Wyłącz je, aby każde dodanie wkładało dokładnie jedną sztukę, bez selektora ilości na kafelku.
* **Maximum quantity in a box** — pozostaw puste, aby nie ustawiać limitu, lub ustaw 1, aby box z różnorodnymi produktami pozostał różnorodny.

Sekcja **Already purchased** określa, co się dzieje, gdy kupujący już ma dany produkt — kupiony w bieżącym zamówieniu lub zaakceptowany na wcześniejszym kroku lejka. Dopasowanie odbywa się po ID produktu, więc inny wariant kupionego produktu nadal się liczy. Wybierz jedno z trzech zachowań:

| Opcja                          | Co robi                                                                                                                                                                             |
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Show normally**              | Produkt pojawia się w boxie bez specjalnego traktowania (domyślnie).                                                                                                                |
| **Show a "Your choice" badge** | Produkt pozostaje w boxie, a plakietka oznacza go jako taki, który kupujący już ma.                                                                                                 |
| **Hide the product**           | Produkt jest całkowicie usuwany z boxa. Niedostępne dla kandydatów typu naj-/najmniej droższy produkt, które są ustalane na podstawie zamówienia już po odczytaniu tego ustawienia. |

Gdy wybrane jest **Show a "Your choice" badge**, pojawiają się trzy dodatkowe ustawienia:

* **Badge text** — treść na plakietce. Pozostaw puste, aby użyć tłumaczenia sklepu (ustawianego w **Settings > Translations** w pozycji **Already purchased badge**). Domyślnie „Your choice”.
* **Badge color** — kolor wypełnienia plakietki (hex, domyślnie `#008060`).
* **Badge text color** — kolor tekstu wewnątrz plakietki (hex, domyślnie `#ffffff`).

Plakietka jest widoczna w podglądzie edytora lejka, więc możesz zobaczyć, jak wygląda, przed publikacją.

<div id="layout">
  ## Układ
</div>

**Layout**, w ustawieniach układu boxa, określa kształt kafelków i liczbę kafelków w jednym wierszu:

| Układ             | Jak wygląda                                                                                           |
| ----------------- | ----------------------------------------------------------------------------------------------------- |
| **Classic**       | Obraz obok tekstu, dwa produkty w wierszu.                                                            |
| **Compact grid**  | Obraz nad tekstem, trzy w wierszu, jeden w wierszu na telefonie.                                      |
| **Spotlight**     | Pierwszy produkt jest wyróżniony w połowie szerokości, pozostałe są wyświetlane w kompaktowej siatce. |
| **Split columns** | Produkty po lewej, a suma i przycisk zakupu we własnej kolumnie po prawej.                            |

W tej samej sekcji ustawisz odstęp wokół boxa.

<div id="progress">
  ## Postęp
</div>

**Box progress** steruje wskaźnikiem zapełnienia:

| Ustawienie               | Opcje                                         | Domyślnie      |
| ------------------------ | --------------------------------------------- | -------------- |
| **Position**             | Nad produktami / Nad przyciskiem zakupu / Oba | Nad produktami |
| **Show progress bar**    | Wł. / wył.                                    | Wł.            |
| **Bar color**            | Hex                                           | `#008060`      |
| **Bar position**         | Nad tekstem / pod tekstem                     | Nad tekstem    |
| **Top / bottom padding** | 0–10, co 2                                    | 0              |

Nie ma pozycji „ukryta”. Aby całkowicie usunąć linię postępu, wyczyść pole tekstu postępu.

<div id="progress-text-variables">
  ### Zmienne tekstu postępu
</div>

Wpisz `{` w dowolnym z trzech edytorów [treści komunikatów postępu](#progress-wording), aby wstawić zmienną.

| Zmienna                                               | Co pokazuje                                                                                                                                                                                                                       |
| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `{box-progress}`                                      | Całe domyślne zdanie postępu. Zmienia strukturę w zależności od stanu boxa, czego nie odda żadne pojedyncze ręcznie napisane zdanie — zobacz [Treść komunikatów postępu](#progress-wording), aby przeredagować każdy stan osobno. |
| `{items-in-box}`                                      | Ile pozycji jest obecnie w boxie.                                                                                                                                                                                                 |
| `{items-to-go}`                                       | Surowa liczba brakujących pozycji do minimum.                                                                                                                                                                                     |
| `{box-minimum}`                                       | Minimum boxa.                                                                                                                                                                                                                     |
| `{box-maximum}`                                       | Maksimum boxa.                                                                                                                                                                                                                    |
| `{current-discount}`                                  | Aktualnie obowiązująca stawka.                                                                                                                                                                                                    |
| `{next-discount}`                                     | Stawka odblokowywana przez dodanie kolejnych pozycji. Pusta na najgłębszym progu.                                                                                                                                                 |
| `{items-to-next-discount}`                            | Ile jeszcze pozycji potrzeba, aby ją osiągnąć. Pusta na najgłębszym progu.                                                                                                                                                        |
| `{subtotal}` / `{total}` / `{discount}` / `{savings}` | Ceny boxa zsumowane dla całego wyboru. Puste, dopóki cena się nie ustali.                                                                                                                                                         |
| `{first-name}`                                        | Imię kupującego.                                                                                                                                                                                                                  |
| `{timer}` / `{timer-end}`                             | Odliczanie oferty.                                                                                                                                                                                                                |

Zmienne nagłówka kroku dostępne w ofertach wieloproduktowych nie mają odpowiednika w boxie i nie są tu oferowane.

<div id="progress-wording">
  ### Treść komunikatów postępu
</div>

**Progress wording** to trzy edytory tekstu sformatowanego, po jednym dla każdego etapu zapełniania boxa. Wpisz `{` w dowolnym z nich, aby wstawić [zmienną](#progress-text-variables). Wyczyść pole, aby ukryć linię postępu w danym stanie.

| Edytor                               | Kiedy wyświetla się jego linia                                                                                                                         |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Before the minimum items reached** | Dopóki box nie osiągnął minimum. Kupujący nie może jeszcze sfinalizować zakupu, więc ta linia jako jedyna wyjaśnia, dlaczego przycisk jest nieaktywny. |
| **Between minimum and maximum**      | Gdy box przekroczył minimum, a głębszy rabat lub maksimum są wciąż przed kupującym.                                                                    |
| **Maximum items hit**                | Gdy box ma już wszystko, co może uzyskać: maksimum albo najgłębszy rabat w boxie bez maksimum.                                                         |

Edytor pokazuje tylko te pola, które Twój box faktycznie może osiągnąć:

* **Before the minimum items reached** pojawia się tylko wtedy, gdy box ma minimum większe od zera.
* **Between minimum and maximum** pojawia się tylko wtedy, gdy box ma maksimum lub co najmniej jeden próg rabatowy. Bez żadnego z nich przekroczenie minimum jest już stanem końcowym.
* **Maximum items hit** pojawia się zawsze. Każdy box go osiąga.

Ponieważ są to edytory tekstu sformatowanego, możesz nie tylko zmieniać słowa, ale też pogrubiać treść, zmieniać jej kolor i rozmiar.

Zmiana **Language** boxa ponownie tłumaczy każdą treść, której nie edytowano. Po edycji pola pozostaje ono dokładnie takie, jak je wpisano.

<div id="tile-button-text">
  ## Tekst przycisków kafelka
</div>

Sekcja **Tile button text** w panelu Buttons pozwala dostosować treść przycisków Add i Remove pojawiających się na każdym kafelku kandydata, tylko dla tego lejka.

* **Add button text** — etykieta pokazywana na kafelku, zanim kupujący doda produkt do boxa. Domyślnie „Add to box”.
* **Remove button text** — etykieta pokazywana na kafelku po dodaniu produktu przez kupującego. Domyślnie „Remove”.

Pozostaw dowolne z pól puste, aby użyć tłumaczenia sklepu ze strony Translations. Jeśli tłumaczenie sklepu też jest puste, używana jest angielska wartość domyślna.

Etykieta stanu niedostępności („Unavailable”) nie podlega tym ustawieniom.

Aby ustawić domyślne etykiety dla całego sklepu zamiast nadpisania per lejek, przejdź do **Translations** w panelu administracyjnym Aftersell i zaktualizuj wpisy **Add to box** oraz **Remove from box**.

<div id="shipping">
  ## Wysyłka
</div>

Sekcja **Shipping** określa, ile box pobiera za dostawę. Box jest wysyłany bezpłatnie albo dolicza opłatę za wysyłkę. Jeśli pobierasz opłatę, ustawiasz kwotę i wybierasz, czy ma być mnożona przez liczbę produktów w boxie. Dzięki temu box z sześcioma produktami może kosztować sześciokrotność stawki za sztukę albo jedną stałą opłatę.

<div id="language-and-order-tagging">
  ## Język i tagowanie zamówień
</div>

* **Language** ustawia język tekstów i przycisków boxa oraz tłumaczeń szczegółów produktów.
* **Order tag** dodaje tag Shopify do każdego zamówienia, w którym zaakceptowano box. Użyj go do kierowania realizacją zamówień lub do wyodrębnienia zamówień z boxem w raportach.

<div id="limitations">
  ## Ograniczenia
</div>

* **Jeden wspólny przycisk akceptacji.** Box ma jedno wezwanie do działania zamiast przycisków per produkt, ponieważ Shopify ogranicza liczbę akceptacji, jakie może wykonać strona post-purchase.
* **Brak ofert zamiany.** Boxa nie można użyć jako upsellu typu zamiana.
* **Rozbicie ceny nie zwija się.** **Show price breakdown** w sekcji **General settings** włącza je lub wyłącza. Gdy jest włączone, jest zawsze rozwinięte — oferta wieloproduktowa chowa swoje rozbicie za linkiem „Show price breakdown”.

<div id="subscription-only-products">
  ### Produkty wyłącznie subskrypcyjne
</div>

Produkty skonfigurowane do sprzedaży wyłącznie jako subskrypcja (`requiresSellingPlan: true` w Shopify — brak opcji zakupu jednorazowego) nie mogą być częścią oferty build-a-box. Każda pozycja w boxie jest rozliczana jako zakup jednorazowy w zamówieniu, więc Shopify odrzuca produkty wyłącznie subskrypcyjne w momencie serwowania. Tacy kandydaci są po cichu pomijani przy każdym rzeczywistym zamówieniu, mimo że podgląd edytora lejka nadal ich pokazuje.

Edytor lejka ostrzega cię, gdy wykryje taką sytuację:

* **Baner ostrzegawczy** — część kandydatów jest wyłącznie subskrypcyjna, ale wystarczająco wielu kandydatów niesubskrypcyjnych pozostaje, aby osiągnąć minimum boxa. Baner wymienia dotknięte produkty po nazwie. Oferta nadal jest pokazywana kupującym, ale z mniejszą liczbą produktów niż skonfigurowano.
* **Baner krytyczny** — wszyscy kandydaci są wyłącznie subskrypcyjni albo pozostali kandydaci niesubskrypcyjni nie mogą osiągnąć minimum boxa. Oferta jest całkowicie pomijana dla każdego kupującego.

**Jeśli widzisz baner ostrzegawczy**, box nadal działa — po prostu serwuje mniej produktów, niż skonfigurowano. Dodaj więcej kandydatów, których można też kupić jednorazowo, aby box zachował zamierzony asortyment.

**Jeśli widzisz baner krytyczny**, oferta w ogóle nie zadziała, dopóki tego nie naprawisz. Wystarczy dowolne z poniższych:

* Dodaj kandydatów, których można też kupić jednorazowo.
* Obniż minimum boxa, aby pozostali kandydaci wystarczyli do jego osiągnięcia.
* Wyłącz „subscription only” na dotkniętych produktach w Shopify, jeśli mają się też sprzedawać jednorazowo.

Możesz też całkowicie usunąć kandydatów wyłącznie subskrypcyjnych z boxa. Nic to nie zmienia dla kupujących — i tak są pomijani przy każdym rzeczywistym zamówieniu — ale wycisza baner i sprawia, że podgląd edytora odpowiada temu, co faktycznie jest serwowane.

Produkty z **włączoną** subskrypcją (oferujące zarówno zakup jednorazowy, jak i subskrypcję) nie są usuwane z boxa. Są po prostu sprzedawane jako zakup jednorazowy, jak każda inna pozycja boxa — box nigdy nie zawiera planu sprzedaży.
