---
title: "购物车挽回"
description: "通过智能多步骤邮件序列挽回流失销售，引导客户回来完成购买。"
url: https://tajo.io/zh-cn/docs/skills/email-marketing/abandoned-cart/
markdown: https://tajo.io/zh-cn/docs/skills/email-marketing/abandoned-cart.md
lang: zh-CN
robots: noindex
---

申请抢先体验

请输入您的名字和公司电子邮箱地址。我们会发送确认 Tajo 访问申请的链接。

# 购物车挽回

通过智能多步骤邮件序列挽回流失销售。此 Skill 监控购物车放弃行为，自动发送个性化挽回邮件，将客户带回完成购买。

## 概览

| 属性 | 值 |
| --- | --- |
| **分类** | 邮件营销 |
| **状态** | 稳定版 |
| **版本** | 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

    # 购物车放弃检测
    detection:
      inactivity_threshold: 30m  # 判定购物车放弃的无活动时间（分钟）
      min_cart_value: 25         # 触发所需的最低购物车金额
      exclude_logged_out: false  # 是否包含访客购物车

    # 邮件序列
    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_on:
      - cart_recovered
      - order_placed
      - unsubscribe
```

### 高级配置

```yaml
skills:
  abandoned-cart:
    # 按细分设置时间
    timing:
      vip_customers:
        first_email: 30m
        discount_threshold: 0  # 始终提供折扣
      new_customers:
        first_email: 2h
        discount_threshold: 50  # 仅当购物车 > $50 时提供折扣
      repeat_customers:
        first_email: 1h
        discount_threshold: 100

    # A/B 测试
    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

    # 排除规则
    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 | 购物车恢复链接 |
| `abandoned_at` required | datetime | 购物车被放弃的时间 |

示例 payload：

```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",  // 哪封邮件触发了挽回
    "time_to_recover": "2h15m"
  }
}
```

## 邮件模板

### 模板变量

在您的 Brevo 邮件模板中使用以下变量：

| 变量 | 描述 | 示例 |
| --- | --- | --- |
| `params.FIRSTNAME` | 客户名字 | Jane |
| `params.CART_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小时）**：增加紧迫感 + 优惠

- 主题：“您的购物车还在等您 + 九折优惠”
- 重点：限时折扣
- 附上折扣码

**邮件 3（48小时）**：最后推送

- 主题：“最后机会——85折即将过期”
- 重点：稀缺性 + 更大力度折扣
- 折扣24小时后到期

## 代码示例

### 启用购物车挽回 Skill

```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
// 检测到购物车活动时调用
await tajo.events.track('cart_updated', {
  cartId: 'cart_abc123',
  customerEmail: 'jane@example.com',
  items: cartItems,
  total: 280.77
});

// 客户未结账即离开时调用
// （通常在 beforeunload 事件或 session 超时时触发）
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
// 生成唯一折扣码
const discount = await tajo.discounts.create({
  type: 'percentage',
  value: 10,
  expiresIn: '7d',
  usageLimit: 1,
  prefix: 'SAVE10'
});

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

## 数据分析

追踪购物车挽回活动的效果：

| 指标 | 描述 |
| --- | --- |
| **放弃率** | 购物车被放弃的比例 |
| **挽回率** | 被放弃购物车成功挽回的比例 |
| **挽回收入** | 挽回购物车带来的总收入 |
| **邮件打开率** | 挽回邮件的打开比例 |
| **邮件点击率** | 挽回邮件的点击率 |
| **挽回时长** | 从放弃到购买的平均时间 |

```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. **尊重退订行为** - 收到退订后立即停止序列

## 相关 Skills

- Cart Events - 追踪购物车活动
- Browse Abandonment - 挽回浏览放弃
- Win-Back - 重新激活沉睡客户

## 后续步骤

1. 在您的平台上设置购物车追踪
2. 在 Brevo 中创建邮件模板
3. 配置折扣码集成
4. 在仪表板中监控活动效果
