---
title: "장바구니 이탈 복구"
description: "고객을 다시 불러와 구매를 완료하도록 하는 지능형 다단계 이메일 시퀀스로 손실된 판매를 복구합니다."
url: https://tajo.io/kr/docs/skills/email-marketing/abandoned-cart/
markdown: https://tajo.io/kr/docs/skills/email-marketing/abandoned-cart.md
lang: ko-KR
robots: noindex
---

Tajo 사전 이용 신청

이름과 회사 이메일 주소를 입력하세요. Tajo 이용 신청을 확인할 수 있는 링크를 이메일로 보내드립니다.

# 장바구니 이탈 복구

지능형 다단계 이메일 시퀀스로 손실된 판매를 복구합니다. 이 스킬은 장바구니 이탈을 모니터링하고 개인화된 복구 이메일을 자동으로 발송하여 고객을 다시 불러옵니다.

## 개요

| 속성 | 값 |
| --- | --- |
| **카테고리** | Email Marketing |
| **상태** | Stable |
| **버전** | 3.0 |
| **트리거** | `cart_abandoned`, `cart_recovered` |
| **평균 복구율** | 10-15% |

## 작동 방식

```mermaid
graph TD
    A[Customer adds to cart] -->|Leaves site| B{Cart abandoned?}
    B -->|No checkout in 30min| C[Trigger: cart_abandoned]
    C --> D[Wait 1 hour]
    D --> E{Purchased?}
    E -->|No| F[Send Email #1]
    F --> G[Wait 24 hours]
    G --> H{Purchased?}
    H -->|No| I[Send Email #2 + Discount]
    I --> J[Wait 48 hours]
    J --> K{Purchased?}
    K -->|No| L[Send Email #3 - Final]
    E -->|Yes| M[Stop sequence]
    H -->|Yes| M
    K -->|Yes| M
    L --> N[Mark as lost]
```

## 구성

### 기본 설정

```yaml
skills:
  abandoned-cart:
    enabled: true

    # Cart abandonment detection
    detection:
      inactivity_threshold: 30m  # Minutes before cart is abandoned
      min_cart_value: 25         # Minimum cart value to trigger
      exclude_logged_out: false  # Include guest carts

    # Email sequence
    sequence:
      - delay: 1h
        template_id: 101
        subject: "Forgot something?"

      - delay: 24h
        template_id: 102
        subject: "Your cart is waiting"
        include_discount: true
        discount_percent: 10

      - delay: 48h
        template_id: 103
        subject: "Last chance - items selling fast"
        include_discount: true
        discount_percent: 15
        discount_expiry: 24h

    # Stop conditions
    stop_on:
      - cart_recovered
      - order_placed
      - unsubscribe
```

### 고급 구성

```yaml
skills:
  abandoned-cart:
    # Segment-specific timing
    timing:
      vip_customers:
        first_email: 30m
        discount_threshold: 0  # Always include discount
      new_customers:
        first_email: 2h
        discount_threshold: 50  # Discount only if cart > $50
      repeat_customers:
        first_email: 1h
        discount_threshold: 100

    # A/B testing
    ab_testing:
      enabled: true
      variants:
        - name: "urgency"
          subject: "Items in your cart are selling fast!"
          weight: 50
        - name: "friendly"
          subject: "Did you forget something?"
          weight: 50

    # Exclusions
    exclude:
      - email_domain: ["temp-mail.com", "disposable.com"]
      - customer_tag: ["wholesale", "staff"]
      - product_category: ["gift-cards"]
```

## 트리거

### cart\_abandoned

장바구니가 구성된 임계값 동안 비활성 상태일 때 발생합니다.

#### 이벤트 데이터

| Parameter | Type | Description |
| --- | --- | --- |
| `cart_id` required | string | 고유 장바구니 식별자 |
| `customer_email` required | string | 고객의 이메일 주소 |
| `items` required | array | name, price, quantity, image\_url을 포함한 장바구니 항목 배열 |
| `total` required | number | 장바구니 총액 |
| `currency` optional | string | 통화 코드(예: USD, EUR) Default: `USD` |
| `recovery_url` required | string | 장바구니를 복구할 URL |
| `abandoned_at` required | datetime | 장바구니가 이탈된 시점 |

페이로드 예시:

```json
{
  "event": "cart_abandoned",
  "timestamp": "2024-01-15T14:30:00Z",
  "data": {
    "cart_id": "cart_abc123",
    "customer_email": "jane@example.com",
    "items": [
      {
        "id": "prod_123",
        "name": "Premium Headphones",
        "price": 199.99,
        "quantity": 1,
        "image_url": "https://cdn.example.com/headphones.jpg",
        "variant": "Black"
      },
      {
        "id": "prod_456",
        "name": "Phone Case",
        "price": 29.99,
        "quantity": 2,
        "image_url": "https://cdn.example.com/case.jpg"
      }
    ],
    "subtotal": 259.97,
    "shipping": 0,
    "tax": 20.80,
    "total": 280.77,
    "currency": "USD",
    "recovery_url": "https://store.example.com/cart/recover/abc123",
    "abandoned_at": "2024-01-15T14:00:00Z"
  }
}
```

### cart\_recovered

고객이 돌아와 결제를 완료할 때 발생합니다.

```json
{
  "event": "cart_recovered",
  "timestamp": "2024-01-15T16:45:00Z",
  "data": {
    "cart_id": "cart_abc123",
    "customer_email": "jane@example.com",
    "order_id": "order_789",
    "recovered_via": "email_1",  // Which email triggered recovery
    "time_to_recover": "2h15m"
  }
}
```

## 이메일 템플릿

### 템플릿 변수

Brevo 이메일 템플릿에서 다음 변수를 사용하세요.

| 변수 | 설명 | 예시 |
| --- | --- | --- |
| `params.FIRSTNAME` | 고객의 이름 | Jane |
| `params.CART_URL` | 장바구니 복구 URL | https://… |
| `params.CART_TOTAL` | 포맷된 장바구니 총액 | $280.77 |
| `params.ITEM_COUNT` | 항목 수 | 3 |
| `params.ITEMS` | 항목의 JSON 배열 | \[…\] |
| `params.DISCOUNT_CODE` | 생성된 할인 코드 | SAVE10-ABC |
| `params.DISCOUNT_PERCENT` | 할인율 | 10 |
| `params.EXPIRY_DATE` | 할인 만료일 | Jan 17, 2024 |

### 권장 이메일 시퀀스

**이메일 1 (1시간)**: 부드러운 리마인더

- 제목: “뭔가 잊으셨나요, {{ params.FIRSTNAME }}?”
- 초점: 장바구니 내용 알림
- 아직 할인 없음

**이메일 2 (24시간)**: 긴급성 + 인센티브 추가

- 제목: “장바구니가 기다리고 있어요 + 10% 할인”
- 초점: 기간 한정 할인
- 할인 코드 포함

**이메일 3 (48시간)**: 마지막 푸시

- 제목: “마지막 기회 - 15% 할인 곧 만료”
- 초점: 희소성 + 더 강력한 할인
- 24시간 할인 만료

## 코드 예제

### 장바구니 이탈 스킬 활성화

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.skills.enable('abandoned-cart', {
  detection: {
    inactivityThreshold: '30m',
    minCartValue: 25
  },
  sequence: [
    { delay: '1h', templateId: 101 },
    { delay: '24h', templateId: 102, discountPercent: 10 },
    { delay: '48h', templateId: 103, discountPercent: 15 }
  ]
});
```

### 장바구니 이탈 추적

```javascript
// Call this when cart activity is detected
await tajo.events.track('cart_updated', {
  cartId: 'cart_abc123',
  customerEmail: 'jane@example.com',
  items: cartItems,
  total: 280.77
});

// Call this when customer leaves without checkout
// (typically from a beforeunload event or session timeout)
await tajo.events.track('cart_abandoned', {
  cartId: 'cart_abc123',
  customerEmail: 'jane@example.com',
  items: cartItems,
  total: 280.77,
  recoveryUrl: 'https://store.example.com/cart/recover/abc123'
});
```

### 할인 코드 생성

```javascript
// Generate a unique discount code
const discount = await tajo.discounts.create({
  type: 'percentage',
  value: 10,
  expiresIn: '7d',
  usageLimit: 1,
  prefix: 'SAVE10'
});

// discount.code => "SAVE10-ABC123"
```

## 애널리틱스

장바구니 이탈 복구 성과를 추적합니다.

| 지표 | 설명 |
| --- | --- |
| **이탈률** | 이탈된 장바구니의 % |
| **복구율** | 복구된 이탈 장바구니의 % |
| **복구된 매출** | 복구된 장바구니의 총 매출 |
| **이메일 오픈율** | 열린 복구 이메일의 % |
| **이메일 CTR** | 복구 이메일의 클릭률 |
| **복구 소요 시간** | 이탈부터 구매까지의 평균 시간 |

```javascript
const stats = await tajo.skills.getStats('abandoned-cart', {
  period: '30d'
});

console.log(stats);
// {
//   abandonmentRate: 68.5,
//   recoveryRate: 12.3,
//   revenueRecovered: 15420.50,
//   emailsSent: 2340,
//   emailOpenRate: 45.2,
//   emailCtr: 8.7,
//   avgTimeToRecovery: '4h32m'
// }
```

## 모범 사례

타이밍이 중요합니다

이탈 후 1-2시간 이내에 첫 이메일을 발송하세요. 24시간 후에는 복구율이 크게 떨어집니다.

1. **제목 줄 개인화** - 고객 이름과 장바구니 내용을 사용하세요
2. **장바구니 내용 표시** - 이메일에 제품 이미지를 포함하세요
3. **긴급성 조성** - 재고 부족 또는 기간 한정 할인을 언급하세요
4. **복구를 쉽게 만들기** - 원클릭 장바구니 복구 링크를 제공하세요
5. **시퀀스 테스트** - 타이밍, 제목 줄, 할인에 대해 A/B 테스트하세요
6. **수신 거부 존중** - 수신 거부 시 시퀀스를 즉시 중단하세요

## 관련 스킬

- 장바구니 이벤트 - 장바구니 활동 추적
- 브라우징 이탈 - 브라우징 세션 복구
- 윈백 - 비활성 고객 재참여

## 다음 단계

1. 플랫폼에 장바구니 추적 설정
2. Brevo에서 이메일 템플릿 생성
3. 할인 코드 통합 구성
4. 대시보드에서 성과 모니터링
