# 이메일에서 제품 추천을 설정하는 방법

제품 블록의 **Source**를 **Recommendations**로 설정하면 제품을 직접 선택하거나 카탈로그 규칙을 작성하지 않고도 **Bestsellers**, **Back in stock**, **Price drop**, **New arrivals**, **Bought together** 또는 **Based on what they viewed**에 따라 제품 순위를 매길 수 있습니다. 이 소스가 추가하는 모든 필드에 대해서는 [추천 제품 받기](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)를 참조하세요. 이 전략들 중 세 가지는 카탈로그 외부의 데이터가 필요합니다. **Bestsellers**는 주문 내역을 읽고, **Bought together**와 **Based on what they viewed**는 쇼핑객이 보고 구매한 내용을 읽습니다. 이 가이드에서는 각 전략이 순위를 매길 수 있도록 무엇을 보내야 하는지 설명합니다.

<Aside type="tip">
이미 [장바구니 포기 복구](/ko/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/)를 위해 `PW_AbandonedCart` 및 `PW_OrderCreated`를 보내고 계신가요? 계속 읽어보세요. **Bestsellers**는 장바구니 포기 가이드에서 다루지 않는 `PW_OrderCreated`의 필드 하나가 더 필요합니다.
</Aside>

## 시작하기 전에

계정의 카탈로그에 제품이 있는지 확인하세요. **Content → Product Catalog**로 이동하여 피드를 연결하거나, CSV를 가져오거나, 수동으로 제품을 추가하세요. [카탈로그 채우는 방법 알아보기](/ko/product/content/product-catalog/#ways-to-populate-your-catalog).

<Aside type="caution" icon="setting" title="개발자 지원 필요">
아래 이벤트를 보내려면 스토어 통합이 이미 이벤트를 보내지 않는 한 개발팀의 도움이 필요합니다. 이 가이드를 개발팀과 공유해 주세요.
</Aside>

<Aside type="note" title="새 계정은 일반 카탈로그를 먼저 봅니다">
아래의 모든 전략은 순위를 매기기 전에 기록이 누적되어야 합니다. 그때까지는 블록에 일반 카탈로그가 대신 표시됩니다. [추천 제품 받기](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products) 아래의 참고 사항을 참조하세요.
</Aside>

## 어떤 전략에 이벤트가 필요한가요

6가지 전략 중 3가지는 사용자가 보내는 이벤트로 제품 순위를 매기고, 나머지 3가지는 카탈로그에서 직접 순위를 매기므로 사용자가 별도로 할 일은 없습니다.

| 전략 | 이벤트 필요 여부 | 데이터 소스 |
| :---- | :---- | :---- |
| **Back in stock** | 아니요 | 카탈로그 재고 변경 |
| **Price drop** | 아니요 | 카탈로그 가격 변경 |
| **New arrivals** | 아니요 | 카탈로그 "추가된" 날짜 |
| **Bestsellers** (7/30일) | 예 | `items`가 포함된 `PW_OrderCreated` / `PW_OrderUpdated` |
| **Based on what they viewed** | 예 | 제품 ID를 포함하는 모든 이벤트 |
| **Bought together** | 예 | 제품 ID를 포함하는 모든 이벤트 및 디바이스 태그 |

피드의 재고 또는 가격 변경, 또는 다음 예약된 동기화 시 **Back in stock**, **Price drop**, **New arrivals**가 자동으로 업데이트됩니다. 이 세 가지에 대해서는 보낼 것이 없습니다.

## Bestsellers: 주문 이벤트에 항목 추가하기

**Bestsellers (7일)** 및 **Bestsellers (30일)**는 해당 기간 동안 판매된 단위 수에 따라 제품 순위를 매깁니다. 이들은 `PW_OrderCreated` 및 `PW_OrderUpdated`의 `items` 배열, 특히 각 항목의 `productId`와 `quantity`를 읽습니다.

이미 [장바구니 포기 태그를 지우기](/ko/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/#what-happens-when-you-send-pw_ordercreated) 위해 `PW_OrderCreated`를 보내는 경우, 최소한의 호출(`orderId`만)은 여전히 장바구니를 비우지만 Bestsellers가 집계할 데이터는 제공하지 않습니다. 동일한 호출에 주문의 라인 아이템을 추가하세요:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_OrderCreated",
    "attributes": {
      "orderId": "ORDER-10293",
      "items": [
        {
          "productId": "SKU-4821",
          "quantity": 1
        },
        {
          "productId": "SKU-5190",
          "quantity": 2
        }
      ]
    },
    "userId": "shopper@example.com"
  }
}
```

`productId`는 [제품 카탈로그](/ko/product/content/product-catalog/)에서 해당 항목에 사용하는 ID와 일치해야 Bestsellers가 표시할 제품을 조회할 수 있습니다. 추가 항목 필드(가격, 이름 등)는 이 전략에서 무시됩니다. 순위에는 `productId`와 `quantity`만 계산됩니다. Bestsellers는 해당 주문의 최신 이벤트에 따라 다시 계산하므로 주문 수정, 환불 또는 부분 취소 시 `PW_OrderUpdated`에 동일한 `items` 배열을 보내세요.

<Aside type="tip">
[Shopify 통합](/ko/product/integrations/shopify-integration/)을 사용하는 경우, `PW_OrderCreated`는 모든 주문에 대해 `productId`와 `quantity`가 포함된 `items`를 이미 전달하므로 별도로 추가할 필요가 없습니다. 하지만 이 통합은 `PW_OrderUpdated`를 보내지 않으므로, Bestsellers는 주문이 처음 접수된 대로 계산하며 나중에 발생한 수정, 환불 또는 취소로 인한 단위는 제외하지 않습니다.
</Aside>

<Aside type="caution" title="quantity를 숫자로 보내세요">
`quantity`에 대해 따옴표로 묶인 문자열이 아닌 실제 JSON 숫자를 사용하세요. Pushwoosh는 각 속성 값을 처음 선언되거나 추론된 유형으로만 저장합니다. 일치하지 않는 값은 조용히 삭제되며 `postEvent`는 여전히 성공을 반환합니다. `PW_AbandonedCart`에 대한 동일한 주의 사항은 [올바른 속성 유형 사용하기](/ko/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/#create-the-events-in-your-control-panel)를 참조하세요.
</Aside>

<Aside type="note">
**Bestsellers**는 특히 주문 내역에 따라 순위를 매깁니다. 조회수 및 장바구니 활동은 계산되지 않습니다. 브라우징 및 장바구니 활동도 포함하는 순위를 원한다면 대신 **Based on what they viewed** 또는 **Bought together**를 사용하세요.
</Aside>

## Based on what they viewed 및 Bought together: 제품 활동 추적하기

두 전략 모두 동일한 신호, 즉 제품 ID를 포함하는 이벤트로부터 구축됩니다. 전용 "제품 조회" 이벤트 이름은 필요하지 않습니다. [postEvent](/ko/developer/api-reference/user-centric-api/#postevent)를 통해 전송된 모든 [사용자 지정 이벤트](/ko/product/audience-data-and-segmentation/events/custom-events/)는 `attributes`에 다음 키 중 하나를 포함하는 한 계산됩니다:

* 최상위 속성으로서의 단일 제품: `product_id`, `productId`, `productid`, `item_id` 또는 `sku`.
* 각 항목에 `product_id`, `productId`, `id` 또는 `sku`가 있는 `products` 배열로서의 여러 제품.

예를 들어, 이미 제품 ID 속성이 있는 기존 제품 조회 이벤트를 실행하세요:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "ProductViewed",
    "attributes": {
      "product_id": "SKU-4821",
      "category": "Audio"
    },
    "userId": "shopper@example.com"
  }
}
```

**Based on what they viewed**는 각 쇼핑객이 최근에 상호작용한 제품의 순위를 매깁니다. 위의 이벤트가 흐르기 시작하면 추가 설정이 필요하지 않습니다.

<Aside type="tip">
[Shopify 통합](/ko/product/integrations/shopify-integration/)을 사용하는 경우, **Push Init Embed** 토글이 켜져 있는 한(기본적으로 꺼져 있음) 상점 테마 임베드가 모든 제품 페이지 조회 시 `productId`와 함께 `PW_ProductViewed`를 이미 보내므로 별도로 추가할 필요가 없습니다. [상점 브라우징 이벤트](/ko/product/integrations/shopify-integration/#storefront-browsing-events)를 참조하세요.
</Aside>

**Bought together**는 전체 계정 기록에 걸쳐 하나의 앵커 제품과 함께 자주 구매되는 제품의 순위를 매깁니다. 한 가지가 더 필요합니다: 현재 앵커 제품의 ID를 보유하는 [디바이스 태그](/ko/developer/api-reference/tags/)인 **제품 태그**입니다. [제품 블록](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)에서 전략을 구성할 때 필드 이름을 설정하고(예: `PW_LastViewedProductID`), 각 디바이스에서 해당 태그를 계속 업데이트하세요. 예를 들어, 쇼핑객이 제품을 볼 때마다 제품 ID로 [설정](/ko/developer/api-reference/tags/)하세요. 수신자에게 태그가 설정되어 있지 않으면 해당 수신자에 대해 블록은 일반 카탈로그로 대체됩니다.

<Aside type="caution" title="태그 이름 규칙">
태그 이름은 Liquid에서 주소 지정이 가능해야 하므로 문자, 숫자, 밑줄, 공백만 허용됩니다. [Bought together에는 제품 태그가 필요합니다](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)를 참조하세요.
</Aside>

## 이벤트가 수신되는지 확인하기

블록을 추가하기 전에 Pushwoosh가 실제로 위의 이벤트를 수신하고 있는지 확인하세요: **Audience → Events**로 이동하여 보낸 이벤트(`PW_OrderCreated` 또는 제품 ID를 포함하는 사용자 지정 이벤트)를 열고 최근 히트가 표시되는지 확인하세요. [이벤트 통계](/ko/product/audience-data-and-segmentation/events/)를 참조하세요.

<Aside type="note">
빈 제품 블록은 "이벤트가 도착하지 않았음" 또는 "아직 충분한 기록이 누적되지 않았음"(위의 참고 사항 참조)을 의미할 수 있습니다. 이벤트 통계는 두 번째 원인을 추적하기 전에 첫 번째 원인을 배제합니다.
</Aside>

## 이메일에 블록 추가하기

[이메일 콘텐츠](/ko/product/content/email-content/drag-and-drop-email-editor/create-email-content-with-drag-and-drop-editor/)에 [제품](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#products) 블록을 추가하고, **Source**를 **Recommendations**로 설정한 다음 **Strategy**를 선택하세요. 설정 패널의 모든 필드에 대해서는 [추천 제품 받기](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)를 참조하세요. 보내기 전에 **미리보기 새로고침**을 클릭하여 캔버스가 실제 제품으로 채워지는지 확인하세요.