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

> Build a Box 구매 후 오퍼: 구매자가 직접 선별한 상품으로 커스텀 박스를 구성하며, 박스가 채워질수록 볼륨 할인이 커져요.

**Build a Box**는 구매자가 여러분이 선별한 상품 세트에서 자신만의 박스를 구성하고, 전체 선택을 한 번의 거래로 구매하는 구매 후(post-purchase) 오퍼 유형이에요. 단일 상품을 수락하거나 거절하는 대신, 무엇을 얼마나 담을지 직접 선택하며, 박스가 채워질수록 볼륨 할인이 커질 수 있어요.

단일 상품 및 다중 상품 구매 후 오퍼와 나란히 제공되며, 제목과 타이머 같은 일반적인 오퍼 위젯과 함께 구성돼요.

<Note>
  Build a Box는 여러 가지 다른 상품을 제공해요. 한 상품을 단계별 가격으로 더 많이 판매하려면 대신 [Quantity upsells](/ko/aftersell/quantity-upsells)를 사용하세요.
</Note>

추가하려면 퍼널을 열고 **Add offer**를 선택한 다음 **Build a box**를 고르세요.

<div id="setting-up-the-box">
  ## 박스 설정하기
</div>

<div id="choosing-candidate-products">
  ### 후보 상품 선택하기
</div>

**Product selection** 섹션은 구매자가 선택할 수 있는 상품을 제어해요. 이를 \*후보(candidates)\*라고 불러요.

1. 구매 후 퍼널 에디터에서 박스 오퍼를 여세요.
2. **Product selection**을 펼치세요.
3. **Add product**를 선택하고 하나 이상의 상품을 고르세요. 이미 목록에 있는 상품은 선택기에서 제외돼요.
4. 저장하세요.

박스는 최대 **12개의 후보**를 지원해요. 행의 핸들을 드래그해 순서를 변경하세요 — 그것이 구매자가 보는 순서예요. 삭제 아이콘으로 하나를 제거할 수 있어요. 박스에는 최소 하나의 후보가 필요하므로 마지막으로 남은 후보는 제거할 수 없어요.

<div id="box-size">
  ### 박스 크기
</div>

**Box size**는 구매자가 선택해야 하는 아이템 수를 설정해요:

| 설정                           | 하는 일                                         |
| ---------------------------- | -------------------------------------------- |
| **Minimum items**            | 최소 기준이에요. 아이템 단위로 계산되므로, 같은 상품 3개도 3개로 계산돼요. |
| **Maximum items (optional)** | 제한이 없으면 비워 두세요. 최소값과 동일하게 설정하면 고정 크기 박스가 돼요. |

고정 크기 박스의 경우, 에디터는 구매자가 정확히 그 개수의 아이템을 선택해야 하며 "0 of N selected" 카운터가 표시된다고 안내해요.

<Warning>
  후보들이 모두 합쳐도 최소값에 도달할 수 없으면, 에디터에 \*\*"This box won't be shown to shoppers"\*\*라는 제목의 심각(critical) 배너가 표시되며, 상품이 허용하는 최대 아이템 수와 설정한 최소값을 알려줘요. 제공 시점에 오퍼가 완전히 건너뛰어져요.

  제안되는 해결책은 원인에 따라 달라요:

  * **어떤 상품의 수량 선택기가 꺼져 있어** 한 번만 추가할 수 있는 경우 — 하나를 다시 켜거나, 상품을 더 추가하거나, 최소값을 낮추세요.
  * **그 외의 경우** — 최소값을 낮추거나, 상품을 더 추가하거나, 상품의 최대 수량을 올리세요.
  * **박스 최대값이 어떤 아이템도 허용하지 않는 경우** — 배너가 대신 이를 알려주며, 최대값을 올리거나 비워 두도록 요청해요.
</Warning>

<div id="discounts">
  ## 할인
</div>

<div id="discount-tiers">
  ### 할인 티어
</div>

**Box discount** 섹션은 박스에 담긴 아이템 수에 따라 커지는 할인을 설정해요. **Add tier**로 티어를 추가한 다음, **Minimum items for tier N**과 **Discount for tier N**을 설정하세요.

할인율이 선택되는 방식:

* 구매자는 단순히 마지막으로 넘은 임계값이 아니라, 박스가 자격을 갖춘 **가장 깊은** 할인율을 받아요. 3개 이상에 30%, 6개 이상에 20%를 구성하면, 6개를 담은 구매자도 여전히 30%를 받아요.
* 할인율은 박스 최소값이 아니라 **실시간 아이템 수**로 평가돼요. 타일은 정가로 시작해 박스가 채워지면서 가격이 다시 매겨지므로, 구매자에게 제시되는 할인율은 항상 현재 선택이 실제로 획득한 할인율이에요.
* 빈 티어 표도 유효하며, 박스가 정가로 판매된다는 의미예요.

박스 전체 할인 상한은 없어요 — 티어 표만이 할인율을 결정해요.

에디터는 의도하지 않은 것으로 보이는 티어 형태에 대해 경고를 표시해요. 그중 두 개는 저장을 막고, 나머지 하나는 권고성이에요:

| 경고                                           | 표시 시점                                 | 저장을 막나요? |
| -------------------------------------------- | ------------------------------------- | -------- |
| 티어가 더 작은 티어보다 할인이 적어 절대 적용되지 않아요             | 최소값이 확실히 더 높은 티어의 할인율이 그 아래 티어보다 낮을 때 | 예        |
| 티어가 박스 최소값 아래에 있어 구매 가능한 모든 박스가 이미 그 할인을 받아요 | 티어의 최소값이 박스 하한 미만일 때                  | 아니오      |
| 두 티어가 같은 아이템 수에서 시작해요                        | 티어 최소값이 중복될 때                         | 아니오      |

박스 최대값 또한 최소값과 같거나 그보다 커야 해요. 최대값을 최소값보다 낮게 설정하면 저장이 막혀요.

<div id="per-product-discounts">
  ### 상품별 할인
</div>

후보는 박스 할인율을 따르는 대신 자체 할인을 가질 수 있어요. 후보를 열고 **Discount**로 이동해 **Give this product its own discount**를 체크하세요.

* 이 재정의는 티어 할인율 대신 해당 상품의 타일과 박스 총액에 적용돼요.
* `0`도 유효한 재정의예요 — 다른 상품이 할인되는 박스 안에서 특정 상품을 정가로 유지해요.
* 박스 할인을 따르려면 재정의를 꺼 두세요.

<div id="editing-several-products-at-once">
  ### 여러 상품 한 번에 편집하기
</div>

**Edit all products**는 일괄 편집 패널을 열어요. 편집에서 제외할 후보의 체크를 해제하세요.

선택된 상품 간에 값이 다르면 필드에 **Mixed**가 표시돼요 — 편집하면 모든 상품에 여러분의 값이 기록되고, 그대로 두면 각 상품의 기존 값이 유지돼요. 일부만 재정의가 있는 경우 재정의 토글은 중간(indeterminate) 상태로 표시돼요.

<div id="per-product-settings">
  ## 상품별 설정
</div>

각 후보에는 자체 패널이 있으며 **Badge**, **Product image badge**, **Image**, **Product details**(리뷰 평점 포함, 별 색상 기본값 `#fdcc0d`와 `#d1d5db`), **Variant options**, **Box limits**, **Discount**, **Already purchased**를 다뤄요.

타일 모양은 후보별로 설정하지 않아요. 오퍼 수준의 [**Layout**](#layout) 설정에서 정해지므로 박스 안의 모든 타일이 같은 모양이 돼요.

**Box limits** 아래의 두 설정은 짚고 넘어갈 가치가 있어요:

* **Show quantity selector** — 기본적으로 켜져 있어요. 끄면 추가할 때마다 정확히 한 개씩 담기며 타일별 수량 스테퍼가 없어요.
* **Maximum quantity in a box** — 제한이 없으면 비워 두거나, 다양한 구성의 박스를 유지하려면 1로 설정하세요.

**Already purchased** 섹션은 구매자가 이미 이 상품을 갖고 있을 때(현재 주문에서 구매했거나 퍼널의 이전 단계에서 수락한 경우) 어떻게 처리할지 제어해요. 상품 ID로 매칭되므로, 구매한 상품의 다른 옵션도 해당돼요. 세 가지 처리 방식 중 하나를 선택하세요:

| 옵션                             | 하는 일                                                            |
| ------------------------------ | --------------------------------------------------------------- |
| **Show normally**              | 상품이 특별한 처리 없이 박스에 표시돼요(기본값).                                    |
| **Show a "Your choice" badge** | 상품이 박스에 유지되고, 구매자가 이미 가진 상품임을 알리는 알약 배지가 표시돼요.                  |
| **Hide the product**           | 상품이 박스에서 완전히 제외돼요. 이 설정이 읽힌 후 주문에서 결정되는 최고가/최저가 후보에는 사용할 수 없어요. |

**Show a "Your choice" badge**를 선택하면 세 가지 추가 설정이 나타나요:

* **Badge text** — 배지의 문구예요. 비워 두면 스토어의 번역(**Settings > Translations**의 **Already purchased badge**에서 설정)을 사용해요. 기본값은 "Your choice"예요.
* **Badge color** — 배지 알약의 배경색(hex, 기본값 `#008060`)이에요.
* **Badge text color** — 배지 알약 내부의 텍스트 색상(hex, 기본값 `#ffffff`)이에요.

배지는 퍼널 에디터 미리보기에서 볼 수 있어서, 게시하기 전에 어떻게 보이는지 확인할 수 있어요.

<div id="layout">
  ## 레이아웃
</div>

박스의 레이아웃 설정에 있는 **Layout**은 타일 모양과 한 줄에 놓이는 타일 수를 설정해요:

| 레이아웃              | 표시 방식                                       |
| ----------------- | ------------------------------------------- |
| **Classic**       | 이미지가 텍스트 옆에 있고, 한 줄에 상품 2개.                 |
| **Compact grid**  | 이미지가 텍스트 위에 있고, 한 줄에 3개, 휴대폰에서는 한 줄에 1개.    |
| **Spotlight**     | 첫 번째 상품이 절반 너비로 앞에 나오고, 나머지는 컴팩트 그리드로 이어져요. |
| **Split columns** | 상품은 왼쪽에, 합계와 구매 버튼은 오른쪽의 별도 열에 표시돼요.        |

같은 섹션에서 박스 주변 여백도 설정해요.

<div id="progress">
  ## 진행률
</div>

**Box progress**는 채움 표시기를 제어해요:

| 설정                       | 옵션                   | 기본값       |
| ------------------------ | -------------------- | --------- |
| **Position**             | 상품 위 / 구매 버튼 위 / 둘 다 | 상품 위      |
| **Show progress bar**    | 켜기 / 끄기              | 켜기        |
| **Bar color**            | Hex                  | `#008060` |
| **Bar position**         | 텍스트 위 / 텍스트 아래       | 텍스트 위     |
| **Top / bottom padding** | 0–10, 2 단위           | 0         |

"숨김" 위치는 없어요. 진행률 라인을 완전히 없애려면 진행률 텍스트 필드를 지우세요.

<div id="progress-text-variables">
  ### 진행률 텍스트 변수
</div>

세 개의 [진행률 문구](#progress-wording) 에디터 중 어디에서든 `{`를 입력하면 변수를 삽입할 수 있어요.

| 변수                                                    | 표시 내용                                                                                                         |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `{box-progress}`                                      | 기본 진행률 문장 전체예요. 박스의 상태에 따라 구조가 바뀌므로, 하나의 수작업 문장으로는 불가능해요 — 각 상태의 문구를 바꾸려면 [진행률 문구](#progress-wording)를 참고하세요. |
| `{items-in-box}`                                      | 현재 박스에 담긴 아이템 수예요.                                                                                            |
| `{items-to-go}`                                       | 최소값까지 남은 순수 개수예요.                                                                                             |
| `{box-minimum}`                                       | 박스 최소값이에요.                                                                                                    |
| `{box-maximum}`                                       | 박스 최대값이에요.                                                                                                    |
| `{current-discount}`                                  | 현재 적용 중인 할인율이에요.                                                                                              |
| `{next-discount}`                                     | 아이템을 더 추가하면 잠금 해제되는 할인율이에요. 가장 깊은 티어에서는 공백이에요.                                                                |
| `{items-to-next-discount}`                            | 그 할인율까지 필요한 추가 아이템 수예요. 가장 깊은 티어에서는 공백이에요.                                                                    |
| `{subtotal}` / `{total}` / `{discount}` / `{savings}` | 전체 선택에 걸쳐 합산된 박스 가격이에요. 가격이 결정되기 전까지는 공백이에요.                                                                  |
| `{first-name}`                                        | 구매자의 이름이에요.                                                                                                   |
| `{timer}` / `{timer-end}`                             | 오퍼 카운트다운이에요.                                                                                                  |

다중 상품 오퍼에서 사용 가능한 단계 헤더 변수는 박스에 해당하는 것이 없으며 여기서 제공되지 않아요.

<div id="progress-wording">
  ### 진행률 문구
</div>

**Progress wording**은 박스를 채우는 각 단계마다 하나씩, 총 세 개의 리치 텍스트 에디터로 구성돼요. 어느 에디터에서든 `{`를 입력하면 [변수](#progress-text-variables)를 삽입할 수 있어요. 필드를 비우면 해당 상태에서 진행률 라인이 숨겨져요.

| 에디터                                  | 라인이 표시되는 시점                                                               |
| ------------------------------------ | ------------------------------------------------------------------------- |
| **Before the minimum items reached** | 박스가 최소값에 못 미치는 동안이에요. 구매자는 아직 결제할 수 없으므로, 버튼이 비활성화된 이유를 설명하는 것은 이 라인뿐이에요. |
| **Between minimum and maximum**      | 박스가 최소값을 넘은 후, 더 깊은 할인이나 최대값이 아직 남아 있는 동안이에요.                             |
| **Maximum items hit**                | 박스가 얻을 수 있는 모든 것을 얻은 후예요. 즉, 최대값에 도달했거나 최대값이 없는 박스에서 가장 깊은 할인에 도달한 경우예요.  |

에디터에는 박스가 실제로 도달할 수 있는 필드만 표시돼요:

* **Before the minimum items reached**는 박스의 최소값이 0보다 클 때만 표시돼요.
* **Between minimum and maximum**은 박스에 최대값이나 할인 티어가 하나 이상 있을 때만 표시돼요. 둘 다 없으면 최소값을 넘는 것이 곧 최종 상태예요.
* **Maximum items hit**는 항상 표시돼요. 모든 박스가 이 상태에 도달해요.

리치 텍스트 에디터이므로 단어만 바꾸는 것이 아니라 문구를 굵게 하거나, 색상을 입히거나, 크기를 조정할 수도 있어요.

박스 **Language**를 변경하면 편집하지 않은 문구는 다시 번역돼요. 필드를 한 번 편집하면 입력한 그대로 유지돼요.

<div id="tile-button-text">
  ## 타일 버튼 텍스트
</div>

Buttons 패널의 **Tile button text** 섹션에서 각 후보 타일에 표시되는 Add 및 Remove 버튼의 문구를 이 퍼널에 한해 커스터마이징할 수 있어요.

* **Add button text** — 구매자가 상품을 박스에 추가하기 전 타일에 표시되는 라벨이에요. 기본값은 "Add to box"예요.
* **Remove button text** — 구매자가 상품을 추가한 후 타일에 표시되는 라벨이에요. 기본값은 "Remove"예요.

어느 필드든 비워 두면 Translations 페이지의 스토어 번역을 사용해요. 스토어 번역도 비어 있으면 영어 기본값이 사용돼요.

사용 불가 상태 라벨("Unavailable")은 이 설정의 영향을 받지 않아요.

퍼널별 재정의 대신 이 라벨의 스토어 전체 기본값을 설정하려면, Aftersell 관리자에서 **Translations**로 이동해 **Add to box** 및 **Remove from box** 항목을 업데이트하세요.

<div id="shipping">
  ## 배송
</div>

**Shipping** 섹션은 박스의 배송비를 설정해요. 박스는 무료로 배송하거나 배송비를 추가해요. 배송비를 청구할 때는 금액을 설정하고, 박스에 담긴 상품 수만큼 곱할지 선택해요. 따라서 상품 6개가 담긴 박스는 개당 요금의 6배를 청구하거나 정액 요금 한 번만 청구할 수 있어요.

<div id="language-and-order-tagging">
  ## 언어와 주문 태그
</div>

* **Language**는 박스 문구와 버튼, 그리고 상품 상세 번역에 사용하는 언어를 설정해요.
* **Order tag**는 박스를 수락한 모든 주문에 Shopify 태그를 적용해요. 주문 처리를 분기하거나 리포트에서 박스 주문을 따로 구분할 때 사용하세요.

<div id="limitations">
  ## 제한 사항
</div>

* **하나의 공유 수락 버튼.** Shopify가 구매 후 페이지에서 가능한 수락 횟수를 제한하기 때문에, 박스에는 상품별 버튼이 아니라 하나의 클릭 유도 버튼이 있어요.
* **대체 오퍼 불가.** 박스는 대체 업셀로 사용할 수 없어요.
* **가격 상세 내역은 접히지 않아요.** **General settings**의 **Show price breakdown**으로 켜거나 끌 수 있어요. 켜져 있으면 항상 펼쳐져 있어요 — 다중 상품 오퍼는 상세 내역을 "Show price breakdown" 링크 뒤에 두는 것과 달라요.

<div id="subscription-only-products">
  ### 구독 전용 상품
</div>

구독으로만 판매되도록 구성된 상품(Shopify에서 `requiresSellingPlan: true` — 일회성 구매 옵션 없음)은 build-a-box 오퍼에 포함할 수 없어요. 박스의 모든 아이템은 주문에서 일회성 구매로 결제되므로, Shopify가 제공 시점에 구독 전용 상품을 거부해요. 퍼널 에디터 미리보기에는 계속 표시되더라도, 이 후보들은 모든 실제 주문에서 조용히 제외돼요.

이 상황이 감지되면 퍼널 에디터가 경고해요:

* **경고 배너** — 일부 후보가 구독 전용이지만, 박스 최소값에 도달하기에 충분한 비구독 후보가 남아 있어요. 배너에 영향을 받는 상품이 이름별로 나열돼요. 오퍼는 여전히 구매자에게 표시되지만, 구성된 것보다 적은 상품으로 표시돼요.
* **심각 배너** — 모든 후보가 구독 전용이거나, 남은 비구독 후보가 박스 최소값에 도달할 수 없어요. 모든 구매자에게 오퍼가 완전히 건너뛰어져요.

**경고 배너가 표시되면** 박스는 여전히 작동해요 — 다만 구성한 것보다 적은 상품이 제공될 뿐이에요. 일회성 구매도 가능한 후보를 더 추가해, 의도한 상품 구성을 유지하세요.

**심각 배너가 표시되면** 문제를 해결할 때까지 오퍼가 전혀 실행되지 않아요. 다음 중 하나로 해결할 수 있어요:

* 일회성 구매도 가능한 후보를 추가하세요.
* 남은 후보가 도달할 수 있도록 박스 최소값을 낮추세요.
* 해당 상품이 일회성 구매로도 판매되어야 한다면 Shopify에서 "구독 전용"을 끄세요.

구독 전용 후보를 박스에서 완전히 제거할 수도 있어요. 구매자에게는 아무 변화가 없어요 — 이미 모든 실제 주문에서 제외되고 있으니까요 — 하지만 배너가 사라지고 에디터 미리보기가 실제 제공되는 것과 일치하게 돼요.

구독이 **가능한** 상품(일회성 구매와 구독을 모두 제공하는 상품)은 박스에서 제외되지 않아요. 다른 모든 박스 아이템처럼 단순히 일회성 구매로 판매돼요 — 박스에는 판매 플랜이 절대 포함되지 않아요.
