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

# 전략 만들기

> 코드 없이 Aftersell 대시보드에서 전략을 만들고, 구성하고, 관리하세요.

<div id="overview">
  ## 개요
</div>

Aftersell 대시보드는 전략을 만들고 관리할 수 있는 시각적 인터페이스를 제공해요. 코드를 전혀 작성하지 않고도 전략을 만들고, 트리거로 타기팅 규칙을 정의하고, 추천할 제품을 지정하고, catch all 동작을 구성할 수 있어요.

이 가이드는 UI에서 전략을 만드는 전체 과정을 안내해요.

***

<div id="navigating-to-strategies">
  ## 전략으로 이동하기
</div>

1. Aftersell에 로그인하세요.
2. 왼쪽 사이드바 내비게이션에서 **Strategies**를 클릭하세요.
3. 기존 전략 목록이 표시되거나, 첫 전략을 만들도록 안내하는 빈 화면이 나타나요.

***

<div id="creating-a-new-strategy">
  ## 새 전략 만들기
</div>

1. **Add Strategy**를 클릭하세요.
2. 규칙을 추가할 수 있는 전략 편집기로 이동해요.

<Tip>
  전략 편집기 왼쪽 상단의 **연필 아이콘**을 클릭해 전략에 설명이 담긴 이름을 지어주세요. 명확한 이름은 나중에 대시보드에서 전략을 식별하기 쉽게 해줘요.
</Tip>

***

<div id="adding-rules">
  ## 규칙 추가하기
</div>

각 전략에는 하나 이상의 **규칙**이 있어요. 규칙은 다음으로 구성돼요:

* **트리거** — "언제" — 규칙이 일치하기 위해 충족되어야 하는 기준.
* **액션** — "그러면" — 규칙이 일치할 때 반환되는 경험.

<div id="defining-triggers">
  ### 트리거 정의하기
</div>

트리거는 규칙이 언제 실행될지 결정해요. 하나의 규칙에 트리거를 최대 5개까지 조합할 수 있어요. 하나의 **AND** / **OR** 토글이 전체 조건 세트에 적용돼요: **AND**에서는 모든 트리거가 일치해야 하고, **OR**에서는 트리거 중 하나만 일치해도 충분해요. 사용 가능한 트리거 유형은 다음과 같아요:

<div id="product-triggers">
  #### 제품 트리거
</div>

컨텍스트에 있는 제품(쇼핑객의 장바구니, 방금 완료된 주문, 보고 있는 제품)을 기준으로 타기팅해요:

* **Specific product(s)** — ID로 특정 Shopify 제품과 일치
* **Collection** — 특정 컬렉션에 속한 제품과 일치
* **Tag(s)** — 특정 태그가 있는 제품과 일치(예: "sale", "summer")
* **Title** — 제품 제목과 일치
* **Vendor** — 공급업체/브랜드 이름과 일치
* **Type** — 제품 유형 필드와 일치(예: "Apparel", "Electronics")
* **Handle** — 제품 URL 슬러그와 일치
* **Metafield** — 커스텀 메타필드 네임스페이스/키/값 쌍과 일치
* **Selling plan** — "구독" 또는 "일회성" 제품과 일치해요. 요청 컨텍스트가 제품의 판매 플랜을 제공할 때만 평가돼요 — Aftersell의 체크아웃 및 구매 후 업셀 화면은 이를 보내지 않으므로, 커스텀 연동이 명시적으로 제공하지 않는 한 그곳에서는 이 트리거가 일치하지 않아요

<div id="customer-triggers">
  #### 고객 트리거
</div>

쇼핑객이 누구인지를 기준으로 타기팅해요:

* **Customer tag** — 예: "VIP", "loyalty-gold"
* **Country code** — 청구 국가
* **Province code** — 청구 지역/주
* **Locale** — 고객 로케일(예: "en-US")
* **Accepts marketing** — 마케팅 수신 동의 상태
* **Order count** — 이전 주문 수
* **Total spent** — 누적 지출

<div id="cart-triggers">
  #### 장바구니 트리거
</div>

전체 장바구니 상태를 기준으로 타기팅해요:

* **Cart subtotal** — 예: 소계가 \$50 초과
* **Item count** — 장바구니 내 총 상품 수량
* **Line count** — 서로 다른 라인 항목 수
* **Cart attribute** — Shopify 장바구니 API로 설정된 커스텀 장바구니 속성
* **Cart note** — 장바구니 메모 필드

<div id="location-triggers">
  #### 위치 트리거
</div>

쇼핑객의 배송지와 스토어 통화를 기준으로 타기팅해요:

* **Shipping country** — 배송지 국가
* **Shipping province** — 배송지 지역/주
* **Shipping method** — 선택한 배송 방법
* **Store currency** — 활성 스토어 통화 코드

<div id="marketing-triggers">
  #### 마케팅 트리거
</div>

쇼핑객이 도착한 페이지 URL을 기준으로 타기팅해요:

* **URL** — 랜딩 URL의 부분 문자열과 일치하므로, URL에 포함된 매개변수를 매칭해 특정 캠페인이나 채널을 타기팅할 수 있어요(예: `utm_source=newsletter`)

<div id="time-triggers">
  #### 시간 트리거
</div>

요청이 평가되는 시점(스토어 시간 기준)을 기준으로 타기팅해요:

* **Day of week** — 현재 요일
* **Hour of day** — 현재 시간

<div id="dynamic-triggers">
  #### 동적 트리거
</div>

* **Always match** — 조건이 없어 항상 실행되는 트리거예요. 모든 요청에서 규칙이 실행되도록 하려면 사용하세요(이는 다른 규칙이 일치하지 않을 때만 실행되는 전략 수준의 [Catch all](#configuring-a-catch-all)과는 달라요).

<Note>
  모든 화면에서 모든 트리거가 채워지는 것은 아니에요. 예를 들어 체크아웃은 제품과 장바구니 컨텍스트만 보내요 — 고객, 위치, 마케팅 트리거는 그곳에서 일치하지 않아요. 각 화면이 무엇을 보내는지는 [전략 구현하기](/ko/aftersell/implementing_strategies_post_purchase_upsells) 가이드를 참고하세요.
</Note>

<div id="operators">
  #### 연산자
</div>

각 트리거는 값이 어떻게 매칭될지 정의하는 **연산자**를 사용해요. 사용 가능한 연산자는 트리거 유형에 따라 달라요.

| 연산자                          | 설명                                                                    |
| ---------------------------- | --------------------------------------------------------------------- |
| **Equals**                   | 필드가 지정한 값과 정확히 일치할 때 매칭돼요 — 예: vendor가 "Nike"와 같음.                    |
| **Does not equal**           | 필드가 지정한 값이 아닐 때 매칭돼요 — 특정 제품 유형이나 공급업체를 제외할 때 유용해요.                   |
| **Contains any**             | 다중 값 필드에 목록의 값이 하나 이상 포함될 때 매칭돼요 — 예: 제품이 여러 컬렉션 중 하나에라도 속함.          |
| **Does not contain any**     | 다중 값 필드에 목록의 값이 하나도 없을 때 매칭돼요 — 예: "final-sale" 태그가 붙은 제품 제외.         |
| **Contains all**             | 다중 값 필드에 목록의 모든 값이 포함될 때 매칭돼요 — 예: 제품에 "sale"과 "summer" 태그가 모두 있어야 함. |
| **Does not contain all**     | 다중 값 필드에 목록의 값 중 하나 이상이 없을 때 매칭돼요.                                    |
| **Contains**                 | 텍스트 필드에 값이 부분 문자열로 포함될 때 매칭돼요 — 예: 제목에 "Gift"가 포함됨.                   |
| **Does not contain**         | 텍스트 필드에 값이 포함되지 않을 때 매칭돼요.                                            |
| **Greater than**             | 숫자 필드가 값을 초과할 때 매칭돼요 — 예: 장바구니 소계가 \$75 초과.                           |
| **Less than**                | 숫자 필드가 값 미만일 때 매칭돼요 — 예: 주문 수가 2 미만(첫 구매자).                           |
| **Greater than or equal to** | 숫자 필드가 값 이상일 때 매칭돼요 — 예: 총 지출이 \$500 이상.                              |
| **Less than or equal to**    | 숫자 필드가 값 이하일 때 매칭돼요 — 예: 장바구니 상품 수가 3개 이하.                            |

모든 트리거에서 모든 연산자를 사용할 수 있는 것은 아니에요:

* **목록 연산자**(**Contains any / all** 및 그 부정형)는 태그, 컬렉션, 고객 태그, 특정 제품 같은 다중 값 필드에 적용돼요.
* **텍스트 연산자**(**Equals**, **Contains** 및 그 부정형)는 제목, 공급업체, 핸들, 로케일, 국가, URL 같은 단일 값 텍스트 필드에 적용돼요.
* **숫자 연산자**는 장바구니 소계, 상품 수, 라인 수, 주문 수, 총 지출, 시간 같은 필드에 적용돼요. 숫자 연산자에는 "does not" 변형이 없어요.
* 일부 필드는 **Equals**와 **Does not equal**만 지원해요 — 판매 플랜, 요일, 마케팅 수신 동의예요.

<div id="defining-actions">
  ### 액션 정의하기
</div>

액션은 고객에게 전달하고 싶은 경험을 만들어요. 어떤 제품을 어떻게 보여줄지, 그리고 함께 전달할 추가 데이터를 결정하는 곳이에요. 하나의 규칙에 여러 액션을 함께 구성해 완전한 경험을 만들 수 있어요.

규칙별로 구성된 모든 액션이 하나의 결합된 풀에 기여해요. 예를 들어 특정 제품 액션, 컬렉션 액션, 태그 기반 액션이 있는 규칙은 세 소스 모두의 제품을 함께 반환해요. 제품이 여러 소스와 일치하면 중복이 제거돼요.

<div id="product-actions">
  #### 제품 액션
</div>

트리거 쪽에서 사용할 수 있는 제품 속성은 액션을 정의할 때도 사용할 수 있어요. 다음을 기준으로 제품을 반환할 수 있어요:

* **Specific products** — Shopify 카탈로그에서 개별 제품을 직접 선택해요.
* **Collection** — 특정 컬렉션에 속한 모든 제품을 반환해요.
* **Product attributes** — 태그, 공급업체, 제품 유형, 메타필드 같은 기준과 일치하는 제품을 반환해요 — 트리거에서 사용되는 것과 동일한 속성 유형이에요.

<div id="dynamic-actions">
  #### 동적 액션
</div>

동적 액션은 고정된 제품 목록이 아니라 실시간 신호에 따라 반환되는 내용이 달라져요. 사용 가능한 동적 액션 유형은 다음과 같아요:

* **Most popular** — 판매량 기준으로 스토어에서 가장 성과가 좋은 제품이에요. 스토어 전체 또는 컬렉션 범위로 지정할 수 있어요.
* **Recently purchased** — 스토어 전체에서 최근 구매된 제품이에요.
* **Inherit from when** — 규칙 자체의 트리거("when")를 제품 선택자로 재사용해, 반환되는 제품이 규칙이 실행된 것과 동일한 기준과 일치하도록 해요.
* **AI Recommendations** — Aftersell의 추천 모델이 생성하는 개인화된 추천이에요.

<div id="filtering-actions">
  #### 필터링 액션
</div>

제품 풀이 구성되면 반환할 제품 수와 순서를 구성할 수 있어요:

* **Sort** — 어떤 제품이 선택될지 제어해요:
  * **Random** — 무작위 선택.
  * **Price: high → low** — 가장 비싼 제품이 먼저 반환돼요.
  * **Price: low → high** — 가장 저렴한 제품이 먼저 반환돼요.
* **Amount/Limit** — 반환할 최대 제품 수를 설정해요.

<Info>
  Sort가 먼저 적용되고 그다음 Amount/Limit가 적용돼요. 예를 들어 정렬이 **Random**으로 설정되어 있으면 제한이 적용되기 전에 전체 제품 풀이 무작위로 섞여요 — 그래서 항상 무작위 조각을 얻게 되며, 동일한 제품이 무작위 순서로 나오는 것이 아니에요.
</Info>

<div id="key-value-actions">
  #### 키-값 액션
</div>

선택적으로 규칙에 키-값 쌍을 첨부할 수 있어요. 규칙이 일치하면 제품 결과와 함께 API 응답의 `meta.data`에 반환돼요. 일반적인 용도는 다음과 같아요:

* 프로모션 배너 텍스트
* 분석용 캠페인 레이블

<Note>
  여러 규칙이 일치하고 동일한 키를 내보내는 경우, 처음 일치한 규칙의 값이 우선해요 — 이후 규칙은 이를 재정의할 수 없어요.
</Note>

***

<div id="rule-priority-and-evaluation-order">
  ## 규칙 우선순위와 평가 순서
</div>

전략 내의 규칙은 계층적이고 순차적인 단계로 평가돼요. Step 1이 먼저 평가되는 식이에요. 전략 편집기에서 규칙을 드래그 앤 드롭해 순서를 바꿀 수 있어요. 평가 엔진은:

1. 제공된 컨텍스트를 기준으로 각 규칙의 트리거를 평가해요.
2. 일치하는 모든 규칙에서 제품을 수집해요.
3. 중복을 제거하고 결과를 구성된 최대치(기본값: 제품 20개)로 제한해요.

***

<div id="configuring-a-catch-all">
  ## Catch all 구성하기
</div>

Catch all은 모든 전략 평가의 마지막 단계 역할을 하는 특수 규칙이에요. 트리거가 없으며, 전략의 다른 규칙이 현재 요청과 일치하지 않으면 자동으로 실행돼요.

활성화하면 Catch all이 추천 슬롯이 절대 비지 않도록 보장해요. 액션은 일반 규칙에서 사용할 수 있는 것과 동일한 액션 유형 — 특정 제품, 컬렉션, 동적 액션 등 — 으로 구성할 수 있어요.

* **활성화/비활성화** — 전략의 Catch all 규칙을 켜거나 끄세요. 비활성화하면 어떤 규칙과도 일치하지 않는 요청은 빈 결과를 반환해요.
* **액션 구성** — 다른 규칙과 마찬가지로 사용 가능한 액션 유형의 조합으로 반환할 내용을 정의하세요.

Catch all이 실행되면 API 응답에 `resolution.fallbackUsed: true`가 표시돼요.

***

<div id="global-filters">
  ## 전역 필터
</div>

전역 필터는 전략의 모든 규칙에서 제품을 선택 대상에서 제거해요. 전략 편집기 왼쪽 상단의 전략 이름 옆 **필터 아이콘**으로 접근할 수 있어요.

사용 가능한 전역 필터:

* **Exclude out of stock** — 현재 구매할 수 없는 제품을 자동으로 제외해요.
* **Exclude input products** — 규칙을 트리거한 제품(예: 쇼핑객이 현재 PDP에서 보고 있는 제품)을 제외해, 쇼핑객이 이미 보고 있는 제품을 추천하지 않도록 해요.
* **Exclude by product tag** — 특정 태그가 붙은 제품을 제외해요.
* **Exclude by metafield** — 특정 메타필드 네임스페이스/키/값과 일치하는 제품을 제외해요.
* **Exclude by product ID** — ID로 특정 제품을 제외해요.
* **Require stock at location** — 선택한 위치에 가용 재고가 있는 제품만 유지해요(재고 및 위치 읽기 권한이 필요해요).

***

<div id="validation-and-error-states">
  ## 검증 및 오류 상태
</div>

불완전한 규칙이 있으면 전략을 저장할 수 없어요. 각 규칙에는 최소 하나의 조건(또는 **Always match** 트리거)과 최소 하나의 액션이 필요해요. 둘 중 하나라도 없으면 해당 규칙에 직접 오류가 표시되어 해결해야 할 부분을 알려줘요.

오류를 해결하고 전략을 저장하려면 다음 중 하나를 하세요:

* **규칙 완성하기** — 누락된 트리거 그리고/또는 액션을 추가하세요.
* **규칙 삭제하기** — 더 이상 필요 없다면 완전히 제거하세요.

모든 규칙이 유효해질 때까지 전략 편집기는 저장을 허용하지 않아요.
