# 장바구니 포기 캠페인 설정 방법

장바구니에 상품을 담고 구매하지 않고 떠나는 쇼핑객은 가장 쉽게 복구할 수 있는 전환 중 하나입니다. 이들은 이미 구매 의사를 보였습니다.

이 가이드에서는 Pushwoosh에서 장바구니 포기 이메일을 보내는 방법을 보여줍니다: 스토어에서 `PW_AbandonedCart` 이벤트를 발생시키고, [Products](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#products) 블록을 사용하여 이메일에 남겨진 상품을 표시하고, Customer Journey에서 전송을 트리거합니다.

## PW_AbandonedCart란 무엇인가요

`PW_AbandonedCart`는 사용자가 장바구니에 상품을 남겨두고 구매하지 않았음을 표시합니다. 이는 내장된 [기본 이벤트](/ko/product/audience-data-and-segmentation/events/default-events/)가 아닙니다. Journey, Products 블록, 세그먼트가 모두 동일하게 작동하도록 Pushwoosh 전자상거래 통합 전반에 사용되는 공유 이벤트 이름입니다.

*   **[Magento 통합](/ko/product/integrations/magento-integration/):** `PW_AbandonedCart` 및 `PW_OrderCreated`를 자동으로 보냅니다.
*   **[Shopify 통합](/ko/product/integrations/shopify-integration/):** `PW_AbandonedCart`, `PW_OrderCreated`, `PW_AbandonedCartUpdate`(쇼핑객이 동일한 결제를 계속 편집할 때 다시 발생)를 제품 카탈로그에서 보강된 장바구니 상품과 함께 자동으로 보냅니다.
*   **기타 스토어 또는 사용자 지정 백엔드:** 팀에서 [장바구니 포기 알림을 보내는 방법](#how-to-send-abandoned-cart-reminders)의 이름과 속성을 사용하여 [postEvent](/ko/developer/api-reference/user-centric-api/#postevent)를 통해 두 이벤트를 모두 보냅니다.

### PW_AbandonedCart를 보내면 어떻게 되나요

`PW_AbandonedCart`를 보내면 Pushwoosh 측에서 두 가지 작업이 수행됩니다:

1.  다른 사용자 지정 이벤트와 마찬가지로 기록되므로 [이벤트 통계](/ko/product/audience-data-and-segmentation/events/)에서 확인하고 [세그먼트](/ko/product/audience-data-and-segmentation/segmentation/create-segments/by-events/)에서 사용할 수 있습니다.
2.  Pushwoosh는 장바구니 내용을 저장하고 사용자에게 다음 태그를 지정합니다:
    *   **PW_AbandonedCartID:** 현재 장바구니의 식별자로, 전송 시 해당 내용을 가져오는 데 사용됩니다.
    *   **PW_AbandonedCartDate:** 이벤트 페이로드의 `abandonedDate` 값입니다.

### PW_OrderCreated를 보내면 어떻게 되나요

쇼핑객이 주문을 하면 `PW_OrderCreated`(또는 `PW_OrderUpdated`)를 보냅니다. Pushwoosh는 해당 사용자의 `PW_AbandonedCartID`와 `PW_AbandonedCartDate`를 즉시 지웁니다. `orderId` 값을 일치시키지 않습니다: 사용자의 모든 주문은 구매가 다른 장바구니에 대한 것이더라도 두 태그를 모두 제거합니다.

**예시:** 쇼핑객이 장바구니 `ORDER-100`을 포기한 후 알림이 발송되기 전에 `ORDER-200`을 구매합니다. Pushwoosh는 태그를 지우므로 `ORDER-100`에 대한 알림을 받지 않습니다.

<Aside type="note" title="알림 이메일에 표시되는 내용">
Products 블록은 전송 시 사용자 프로필에 저장된 장바구니를 읽습니다. Journey를 시작한 `PW_AbandonedCart` 이벤트의 상품 목록을 사용하지 않습니다.

*   **동일한 `orderId`:** 각 새로운 `PW_AbandonedCart`는 저장된 장바구니를 덮어씁니다. 알림에는 최신 상품이 표시됩니다.
*   **다른 `orderId`:** Pushwoosh는 별도의 장바구니를 저장합니다. 상품은 병합되지 않습니다.
</Aside>

<span id="how-to-send-abandoned-cart-reminders" />

## 장바구니 포기 알림을 보내는 방법

다음 단계에 따라 이벤트를 생성하고, 스토어에서 이벤트를 보내고, 이메일을 작성하고, Customer Journey를 시작하세요.

### Control Panel에서 이벤트 생성하기

Pushwoosh는 인식하지 못하는 이름으로 첫 번째 `postEvent` 호출에서 이벤트와 해당 속성을 [자동으로 생성](/ko/product/audience-data-and-segmentation/events/#1-create-events-in-pushwoosh-control-panel)하며, 전송된 값에서 각 속성의 유형을 추론합니다. 이 추론은 `PW_AbandonedCart`의 금액 필드에 대해 신뢰할 수 없습니다. 유형이 올바르게 설정되도록 두 이벤트를 명시적으로 선언하세요:

1.  Pushwoosh Control Panel에서 **Audience → Events**로 이동하여 **Create Event**를 클릭합니다.
2.  다음 속성을 사용하여 `PW_AbandonedCart`라는 사용자 지정 이벤트를 생성합니다:

| 속성 | 유형 |
| :--- | :--- |
| `email` | string |
| `orderId` | string |
| `customerId` | string |
| `orderUrl` | string |
| `abandonedDate` | date |
| `createdDate` | date |
| `totalPrice` | decimal (price) |
| `shippingAmount` | decimal (price) |
| `taxAmount` | decimal (price) |
| `discountAmount` | decimal (price) |
| `currency` | string |

3.  단일 `orderId` 속성을 사용하여 `PW_OrderCreated`에 대해 반복합니다.

<Aside type="caution" title="올바른 속성 유형 사용">
Pushwoosh는 각 속성 값을 여기에 선언되었거나 자동 생성된 속성에 대해 추론된 유형으로만 저장합니다. 유형과 일치하지 않는 값은 자동으로 삭제되고 `postEvent`는 여전히 성공을 반환하므로 응답에서 데이터가 손실되었는지 확인할 수 없습니다. 나중에 Control Panel에서 이벤트를 편집하여 잘못된 유형을 수정할 수 있지만 수정 전에 전송된 모든 데이터는 이미 사라졌습니다.

장바구니 포기가 작동하려면 위 표의 유형과 일치시켜야 합니다:

*   **금액 필드** (`totalPrice`, `shippingAmount`, `taxAmount`, `discountAmount`): **decimal (price)**를 사용합니다. 선언되지 않은 경우 `129`와 같은 정수 값은 **integer**로 추론됩니다. **string**으로 선언되면 장바구니가 저장되지 않고 태그가 설정되지 않습니다. **integer**로 선언되면 `129.90`은 `129`가 됩니다.
*   **날짜** (`abandonedDate`, `createdDate`): **date**를 사용합니다.
*   **`items`:** 이벤트 정의에 추가하지 마세요. JSON 페이로드에서 객체 배열로 보내세요. `price`와 `quantity`에 대해 따옴표로 묶인 문자열이 아닌 실제 JSON 숫자를 사용하세요.
</Aside>

[사용자 지정 이벤트 생성에 대해 자세히 알아보기](/ko/product/audience-data-and-segmentation/events/custom-events/#creating-custom-events).

### 백엔드에서 이벤트 보내기

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

개발팀에 장바구니가 포기될 때마다 다음 속성 스키마를 사용하여 [postEvent](/ko/developer/api-reference/user-centric-api/#postevent)를 호출하도록 요청하세요:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_AbandonedCart",
    "attributes": {
      "email": "shopper@example.com",
      "orderId": "ORDER-10293",
      "customerId": "CUST-4471",
      "orderUrl": "https://yourstore.com/cart/restore/ORDER-10293",
      "abandonedDate": "2026-07-28T10:15:00Z",
      "createdDate": "2026-07-28T09:40:00Z",
      "totalPrice": 129.90,
      "shippingAmount": 9.90,
      "taxAmount": 0,
      "discountAmount": 0,
      "currency": "USD",
      "items": [
        {
          "productId": "SKU-4821",
          "name": "Wireless headphones",
          "quantity": 1,
          "price": 119.90,
          "sku": "SKU-4821",
          "description": "Over-ear, noise-cancelling",
          "imageUrl": "https://yourstore.com/media/sku-4821.jpg",
          "productUrl": "https://yourstore.com/products/sku-4821",
          "category": "Audio"
        }
      ]
    },
    "userId": "shopper@example.com"
  }
}
```

장바구니가 주문으로 전환되면 `orderId`만 사용하여 `PW_OrderCreated`를 보내 장바구니 태그를 지웁니다:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_OrderCreated",
    "attributes": {
      "orderId": "ORDER-10293"
    },
    "userId": "shopper@example.com"
  }
}
```

<Aside type="tip">
[Magento 통합](/ko/product/integrations/magento-integration/#abandoned-cart-sync-configuration) 또는 [Shopify 통합](/ko/product/integrations/shopify-integration/#part-5-track-orders-carts-and-checkout-steps)을 사용하는 경우 백엔드에서 이러한 이벤트를 보낼 필요가 없습니다. Magento는 일정에 따라 `PW_AbandonedCart` 및 `PW_OrderCreated`를 보내고, Shopify는 웹훅에서 실시간으로 이들(및 진행 중인 결제 편집을 위한 `PW_AbandonedCartUpdate`)을 보냅니다.
</Aside>

<span id="add-a-products-block-to-your-email" />

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

1.  [이메일 콘텐츠 편집기](/ko/product/content/email-content/drag-and-drop-email-editor/)를 열고 캔버스에 [Products](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#products) 블록을 추가합니다.
2.  설정 패널에서 **Source**를 [Cart](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#show-items-from-the-cart)로 설정합니다.

<Aside type="note">
Products 블록 **Cart** 소스를 사용하려면 플랜에 **Content Templates**가 있고 [API 액세스 토큰](/ko/developer/api-reference/api-access-token/)이 필요합니다. [Products 블록](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#products)을 참조하세요.
</Aside>

3.  **Max products shown**을 설정하여 이메일에 표시되는 장바구니 상품 수를 제한합니다.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-1.webp" alt="Source가 Cart로 설정되고 Max products shown이 설정된 Products 블록 설정"/>

4.  필요에 따라 그리드와 카드 템플릿의 스타일을 지정합니다. [그리드 스타일 지정](/ko/product/content/email-content/drag-and-drop-email-editor/blocks/#style-the-grid)을 참조하세요.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-2.webp" alt="카드 템플릿 및 그리드 스타일 설정이 있는 이메일 캔버스의 Products 블록" width="580"/>

이메일이 전송되면 Products 블록은 각 수신자의 `PW_AbandonedCartID` 태그를 사용하여 저장된 장바구니를 조회합니다. 그런 다음 현재 장바구니 상품(이미지, 제목, 가격, 장바구니로 돌아가는 링크)으로 블록을 채웁니다. 레이아웃은 편집기에서 설정한 카드 템플릿에서 가져옵니다. 해당 태그가 없는 수신자(포기한 것이 없거나 이미 주문한 경우)는 빈 콘텐츠를 표시하는 대신 블록을 건너뛰므로 더 넓은 캠페인에서도 안전하게 사용할 수 있습니다.

<Aside type="tip">
Cart 소스는 이메일 콘텐츠 편집기에서 사용할 수 있습니다. 대신 푸시로 쇼핑객에게 알리려면 이벤트의 장바구니 세부 정보를 참조하는 [개인화](/ko/product/personalization/dynamic-content/)가 포함된 [Push](/ko/product/customer-journey/journey-elements/channels/push/) 단계를 사용하세요.
</Aside>

### Customer Journey 구축하기

1.  `PW_AbandonedCart` 이벤트를 사용하여 [Trigger-based Entry](/ko/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/)를 추가합니다.
2.  [Wait for Trigger](/ko/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/) 단계를 추가합니다. 대기 기간을 한두 시간으로 설정합니다. 브랜치 이름을 **Order placed**로 지정하고 `PW_OrderCreated` 이벤트를 추가합니다.

<Aside type="caution">
**Wait for Trigger** 자체에서 대기 기간을 설정하세요. 그 앞에 별도의 **Time Delay** 단계를 추가하지 마세요.

**Wait for Trigger**는 쇼핑객이 해당 단계에 도달한 후에만 `PW_OrderCreated` 수신을 시작합니다. **Time Delay**가 먼저 오고 쇼핑객이 해당 지연 시간 동안 주문을 하면 주문 이벤트가 감지되지 않습니다. 쇼핑객은 **Not triggered** 브랜치로 이동하지만 `PW_OrderCreated`는 이미 `PW_AbandonedCartID`를 지웠습니다. Products 블록은 장바구니를 찾지 못하고 건너뜁니다. 쇼핑객은 이미 구매를 완료했음에도 불구하고 상품이 없는 장바구니 포기 이메일을 받게 됩니다.
</Aside>

3.  **Order placed** 브랜치를 [Exit](/ko/product/customer-journey/journey-elements/flow-controls/exit/)로 라우팅합니다. 사용자는 이미 구매했으므로 알림을 보내지 마세요.
4.  **Not triggered** 브랜치를 [Email](/ko/product/customer-journey/journey-elements/channels/email/) 단계로 라우팅합니다. [이메일에 Products 블록 추가하기](#add-a-products-block-to-your-email)에서 만든 이메일을 [이메일 콘텐츠](/ko/product/content/email-content/)로 저장한 다음 이 단계의 콘텐츠로 선택합니다.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-3.webp" alt="Trigger-based Entry, Order placed 및 Not triggered 브랜치가 있는 Wait for Trigger, Email 및 Exit 단계, Time Delay가 없는 Customer Journey 캔버스"/>

### 시작하기 전에 테스트하기

1.  테스트 기기에 대한 테스트 `PW_AbandonedCart` 이벤트를 보냅니다. `PW_AbandonedCartID` 태그를 수동으로 설정하지 마세요. Products 블록은 태그 값이 아닌 이벤트가 생성하는 저장된 장바구니에서 장바구니 콘텐츠를 로드합니다. 실제 이벤트가 없으면 블록이 비어 있게 렌더링됩니다.
2.  실제 쇼핑객에게 보내기 전에 이메일을 미리 보고 레이아웃과 제품 콘텐츠를 확인하세요.