关于 cart-abandonment-recovery
面向电商团队的弃购挽回技能,指导在不同商店平台配置和优化挽回流程。内容涵盖定时邮件、推送和短信,并说明购买状态检查、优惠策略与客户细分。
主要功能
- 01设计定时挽回流程
- 02使用邮件、推送和短信
- 03购买后停止后续消息
- 04按购物车和客户细分优惠
- 05衡量挽回效果
适用场景
- 01创建弃购挽回流程
- 02在邮件提醒中加入短信或推送
- 03限制对回头客的折扣
- 04测试优惠发放时机
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill cart-abandonment-recovery安装后在 Claude Code 中输入/cart-abandonment-recovery确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
tile.jsonevals/multi-channel-sequence-with-incentive-es/criteria.jsontask.mdevals/recovery-link-endpoint-cart-snapshot-and/criteria.jsontask.mdevals/server-side-abandonment-detection-and-jo/criteria.jsontask.md详细介绍
购物车弃购挽回
概述
电商行业的购物车弃购率平均为 70%,因此挽回流程是投资回报率最高的自动化方案之一。优秀的挽回序列会通过电子邮件、短信和推送发送 2–4 条消息——先发送简单提醒,再添加社会认同或紧迫感,最后才考虑提供折扣。客户完成结账后,序列会立即取消。
本技能将指导你在特定平台上设置购物车弃购挽回,选择合适的工具,并配置序列,以最大限度挽回收入,同时避免让客户养成故意弃购的习惯。
何时使用此技能
- 当已开始结账但未完成的比例超过 60% 时
- 当开设新店并优先考虑快速挽回收入时
- 当为现有仅使用电子邮件的弃购挽回流程添加短信或推送渠道时
- 当当前统一折扣的弃购邮件让客户养成故意弃购的习惯时
- 当需要根据购物车金额或客户细分群体制定不同的挽回策略时
- 当对优惠时机进行 A/B 测试时(立即、24 小时后或 48 小时后揭晓折扣)
核心说明
步骤 1:确定商家的平台并推荐合适的工具
询问商店使用哪个平台。根据平台不同,设置方式会有很大差异:
| 平台 | 推荐工具 | 原因 |
|---|---|---|
| Shopify | Klaviyo(最多 250 个联系人免费)或 Shopify 内置的弃单结账邮件 | Klaviyo 与 Shopify 深度集成,可自动追踪购物车事件,并在同一工具中支持电子邮件和短信 |
| WooCommerce | AutomateWoo(每年 $99)或 CartFlows + FluentCRM | AutomateWoo 可直接接入 WooCommerce 购物车事件;CartFlows 可添加漏斗挽回功能 |
| BigCommerce | Klaviyo 或 Omnisend | 两者都可与 BigCommerce 购物车事件原生集成 |
| Magento | Dotdigital(与 Adobe Commerce 捆绑)或 Klaviyo | Dotdigital 是 Magento 的默认营销自动化工具;Klaviyo 适用于开源 Magento |
| 自定义 / Headless | Klaviyo(通过 API)或使用 BullMQ + SendGrid 构建自定义序列 | 使用 Klaviyo 的 Track API 发送购物车事件,然后在其可视化编辑器中构建流程 |
步骤 2:设置挽回序列
最佳序列遵循以下模式——先不提供折扣,仅在必要时逐步加码:
消息 1 — 提醒(弃购后 1 小时)
- 渠道:电子邮件
- 内容:展示购物车商品的图片和价格,并附上“完成购买”按钮
- 不提供折扣——大多数挽回无需优惠便会在此阶段完成
消息 2 — 社会认同或紧迫感(4–6 小时后)
- 渠道:推送通知或电子邮件
- 内容:“有 X 人正在查看此商品”或“库存紧张——仅剩 Y 件”
- 仍不提供折扣
消息 3 — 小额优惠(24 小时后)
- 渠道:电子邮件
- 内容:免运费(购物车金额 > $75 时)或 10% 折扣
- 附上唯一的一次性折扣码,该码将在 48 小时后失效
消息 4 — 最后提醒(48 小时后)
- 渠道:短信(仅限已选择接收短信的客户)
- 内容:“最后机会——您的购物车明天就会过期” + 折扣提醒
- 这是最后一条消息。之后停止发送。
发送的消息绝不能超过 4 条。 超出此数量对品牌形象造成的损害会超过挽回的收入。
步骤 3:平台专属设置
Shopify
方案 A:内置的弃购邮件(免费,基础功能)
- 前往 Settings → Checkout → Abandoned checkouts
- 勾选“Automatically send abandoned checkout emails”
- 设置延迟时间(建议:第一封邮件延迟 1 小时,第二封延迟 10 小时)
- 在 Notifications → Abandoned checkout 下自定义邮件模板
限制:Shopify 内置的弃购恢复功能仅支持发送一封邮件(Shopify Plus 支持两封),不支持短信,也不支持有条件的优惠。需要完整的邮件序列时,请改用 Klaviyo。
方案 B:Klaviyo(推荐用于多步骤流程)
- 从 Shopify 应用商店安装 Klaviyo
- Klaviyo 会自动与 Shopify 同步,并跟踪
Checkout Started事件 - 在 Klaviyo 中前往 Flows → Create Flow → Abandoned Cart(使用其预建模板)
- 配置序列:
Trigger: "Checkout Started" event
↓
Wait 1 hour → Check: "Has Placed Order since starting flow?" → If no:
↓
Email 1: Cart reminder (no discount)
↓
Wait 4 hours → Check: "Has Placed Order?" → If no:
↓
Email 2: Urgency/social proof
↓
Wait 20 hours → Check: "Has Placed Order?" → If no:
↓
Email 3: Include discount code (use Klaviyo's coupon block — creates unique single-use Shopify discount codes)
↓
Wait 24 hours → Check: "Has Placed Order?" → If no:
↓
SMS 4 (only to SMS-consented contacts): Final reminder with discount
- 按购物车金额细分:为结账事件的
$value添加 Conditional Split:- 购物车金额 ≥ $100:提供免运费
- 购物车金额 < $100:提供 10% 折扣
- 避免向 VIP 客户提供折扣:按 Customer Lifetime Value 或 Total Orders 添加 Split——对回头客跳过折扣步骤
Shopify Flow(仅限 Plus)——自动添加标签以支持高级路由:
Trigger: Checkout abandoned
Condition: Cart total > 200
Action: Add customer tag "high-value-abandoner"
然后在 Klaviyo 中使用此标签,将高价值弃购客户导向 VIP 弃购恢复序列。
WooCommerce
方案 A:AutomateWoo(推荐)
- 安装并启用 AutomateWoo 插件
- 前往 AutomateWoo → Workflows → Add Workflow
- 将触发条件设为 “Cart Abandoned”
- 配置时间安排和操作:
Workflow 1: Cart Reminder
Trigger: Cart Abandoned
Timing Rule: Wait 1 hour
Action: Send Email (template: cart contents with images)
Workflow 2: Urgency Email
Trigger: Cart Abandoned
Timing Rule: Wait 6 hours
Action: Send Email (template: "Items selling fast")
Workflow 3: Discount Email
Trigger: Cart Abandoned
Timing Rule: Wait 24 hours
Action: Generate Coupon (10% off, single-use, expires in 48 hours)
Action: Send Email (template: include generated coupon code)
Workflow 4: SMS Last Chance (requires Twilio add-on)
Trigger: Cart Abandoned
Timing Rule: Wait 48 hours
Opt-in Rule: Customer has SMS marketing consent
Action: Send SMS via Twilio
- 为每个工作流设置一条 Rule:“客户自工作流启动后尚未购买”——客户完成购买后,系统会自动取消此序列
- 要细分 VIP 客户:添加一条 Rule,检查
Customer → Total Spent > $500,以跳过折扣工作流
方案 B:CartFlows + FluentCRM(免费替代方案)
- 安装 CartFlows(弃购跟踪)和 FluentCRM(邮件自动化)
- CartFlows 会捕获弃购结账信息,并将其作为联系人同步到 FluentCRM
- 在 FluentCRM 的自动化构建器中创建邮件序列
BigCommerce
- 从 BigCommerce 应用市场安装 Klaviyo 或 Omnisend
- 这两个平台都会自动跟踪 BigCommerce 弃购事件
- 使用上文所述的相同 4 步序列创建流程
- BigCommerce 还内置了弃购挽回功能(Marketing → Abandoned Cart Emails),但最多只能发送 3 封邮件,不支持短信或条件逻辑
自定义/无头架构
对于无头店面,有两种方案:
方案 A:使用 Klaviyo 的 API(推荐)
将购物车事件发送到 Klaviyo,然后在 Klaviyo 的可视化编辑器中创建流程:
// When a cart is updated, send the event to Klaviyo
async function trackCartUpdate(cart: Cart) {
await fetch('https://a.]klaviyo.com/api/events/', {
method: 'POST',
headers: {
'Authorization': `Klaviyo-API-Key ${process.env.KLAVIYO_PRIVATE_KEY}`,
'Content-Type': 'application/json',
'revision': '2024-10-15',
},
body: JSON.stringify({
data: {
type: 'event',
attributes: {
metric: { data: { type: 'metric', attributes: { name: 'Checkout Started' } } },
profile: { data: { type: 'profile', attributes: { email: cart.customerEmail } } },
properties: {
value: cart.totalValue,
items: cart.items.map(i => ({
ProductName: i.name,
ProductURL: i.url,
ImageURL: i.imageUrl,
Price: i.price,
Quantity: i.quantity,
})),
checkout_url: `${process.env.STORE_URL}/checkout?cart=${cart.id}`,
},
},
},
}),
});
}
然后在 Klaviyo 界面中创建弃购流程——使用相同的 4 步序列,无需自行管理计时器或队列。
方案 B:自行构建(仅在需要完全控制时使用)
如果你需要 Klaviyo 无法处理的自定义逻辑(自定义折扣规则、专有渠道等),请使用作业队列构建序列:
// Detect abandoned carts — run every 5 minutes via cron
async function findAbandonedCarts() {
const cutoff = new Date(Date.now() - 60 * 60000); // 1 hour inactive
const carts = await db.carts.findWhere({
lastActiveAt: { lt: cutoff },
status: 'active',
recoveryTriggered: false,
customerEmail: { not: null },
});
for (const cart of carts) {
await db.carts.update(cart.id, { recoveryTriggered: true });
await recoveryQueue.add('send-step-1', { cartId: cart.id }, { delay: 0 });
await recoveryQueue.add('send-step-2', { cartId: cart.id }, { delay: 4 * 3600000 });
await recoveryQueue.add('send-step-3', { cartId: cart.id }, { delay: 24 * 3600000 });
await recoveryQueue.add('send-step-4', { cartId: cart.id }, { delay: 48 * 3600000 });
}
}
// Cancel on conversion
async function onOrderCompleted(orderId: string) {
const order = await db.orders.findById(orderId);
if (!order.cartId) return;
const jobs = await recoveryQueue.getJobs(['delayed']);
for (const job of jobs) {
if (job.data.cartId === order.cartId) await job.remove();
}
}
第 4 步:配置优惠策略
无论使用哪个平台,折扣都应遵循以下规则:
- 第一条消息绝不提供折扣——大多数购物车无需折扣就能挽回
- 使用一次性优惠码——防止分享和重复使用
- 为所有优惠码设置 48 小时有效期——紧迫感能促成转化
- 按客户价值细分:
- 新客户(0 笔订单):24 小时后提供 10% 折扣
- 回头客(1–5 笔订单):仅提供免运费
- VIP 客户(6 笔以上订单或终身消费 $500 以上):不提供折扣,只发送提醒——他们会回来
- 跟踪折扣滥用情况——如果客户弃购后使用折扣挽回订单达到 3 次以上,请将其从折扣流程中移除
第 5 步:衡量和优化
每周跟踪以下指标:
| 指标 | 良好基准 | 查找方式 |
|---|---|---|
| 挽回率 | 弃购购物车的 5–15% | Klaviyo:流程分析。AutomateWoo:Reports → Workflows |
| 挽回收入 | 使用 UTM 参数跟踪(?utm_source=recovery&utm_medium=email) | Google Analytics → Campaigns |
| 挽回邮件退订率 | 每次发送 < 0.5% | 你的邮件服务商的分析数据 |
| 折扣使用率 | 使用折扣的挽回订单应低于 30% | 对比使用折扣和未使用折扣的挽回订单 |
如果超过 30% 的挽回订单使用了折扣,说明你过早透露了折扣。将折扣推迟到第 3 或第 4 步,或延长等待时间。
最佳实践
- 在付款前收集邮箱 — 将邮箱字段设为结账流程的第一步,这样即使客户未完成结账,你也能识别弃购客户
- 在每条消息中加入购物车商品图片 — 视觉提醒比“你忘了点什么”这样的文字更有效
- 遵守 SMS 订阅同意规则 — 只向明确同意接收短信的客户发送弃购挽回短信;违反 TCPA/GDPR 会面临高额罚款
- 在上一次序列结束后暂停 7 天 — 如果客户刚完成挽回序列就再次弃购,给他们一些空间
- 对第一封邮件的发送延迟进行 A/B 测试 — 尝试 30 分钟、1 小时和 2 小时,并分别衡量挽回率
- 不要在主题行中加入折扣码 — 这会让客户养成寻找折扣码的习惯,并损害品牌形象
常见问题
| 问题 | 解决方案 |
|---|---|
| 订单完成后才发送挽回邮件 | 确保流程在每一步之前都检查“是否已下单”(Klaviyo 使用流程筛选器实现此检查;AutomateWoo 使用规则) |
| 未捕获匿名购物车弃购 | 要求客户在结账第一步、填写付款信息之前提供邮箱 |
| 客户学会为了折扣而弃购 | 第一条消息绝不提供折扣;对回头客跳过折扣;跟踪并排除反复弃购的客户 |
| 向未同意接收短信的客户发送 SMS | 仅在明确同意后发送 SMS;使用平台的同意记录功能(Klaviyo 会将 SMS 同意与邮件同意分开跟踪) |
| 挽回邮件退订率高 | 将邮件数量从 4 封减至 2–3 封;确保一键退订链接醒目易见 |
| 挽回邮件进入垃圾邮件 | 使用平台经过身份验证的发送域(DKIM/SPF);避免在邮件中使用大写的“免费”等垃圾邮件触发词 |
相关技能
- @email-marketing-automation
- @push-notifications
- @sms-marketing
- @conversion-rate-optimization
- @exit-intent-popups