关于 referral-program
referral-program 是一项指导电商团队规划、配置和衡量客户推荐计划的技能,涵盖现成工具选择与自建方案。内容包括奖励设计、欺诈防范、推广及效果分析。
主要功能
- 01按平台选择推荐工具
- 02配置推荐奖励与邮件
- 03防范自我推荐欺诈
- 04分析推荐转化与获客成本
- 05规划推荐入口与推广
适用场景
- 01为 Shopify 商店设置双向奖励
- 02通过分级奖励激励成功推荐
- 03将推荐追踪接入购买后邮件
- 04比较推荐与付费渠道获客成本
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill referral-program安装后在 Claude Code 中输入/referral-program确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
tile.jsonevals/cookie-based-referral-attribution/criteria.jsontask.mdevals/referral-fraud-signal-detection/criteria.jsontask.mdevals/tiered-rewards-and-first-purchase-logic/criteria.jsontask.md详细介绍
推荐计划
概述
推荐计划通过奖励现有客户介绍新客户,将他们转变为获客渠道。ReferralCandy 和 Referral Hero 等推荐应用无需自定义代码,即可处理专属链接生成、双向奖励(推荐人和被推荐人)、欺诈检测以及购买后邮件触发。只有当你的分级规则、CRM 集成或欺诈规则超出这些工具的支持范围时,才应构建自定义推荐系统。
何时使用此技能
- 构建“推荐好友,双方各得 10 美元”计划时
- 添加随成功推荐次数增加而提升的分级奖励时
- 自我推荐或多个账户导致欺诈,消耗推荐奖励预算时
- 衡量推荐计划的 CAC,并与其他获客渠道进行比较时
- 在 Klaviyo 中将推荐跟踪与购买后邮件流程集成时
核心说明
第 1 步:确定平台并选择合适的推荐工具
| 平台 | 推荐工具 | 原因 |
|---|---|---|
| Shopify | ReferralCandy | 专为电商打造;为每位客户自动生成推荐链接,处理双向奖励、购买后邮件触发和欺诈检测 |
| Shopify | Referral Hero | 奖励类型更灵活(现金、礼品卡、商店积分、自定义奖励);与 Klaviyo 深度集成,支持推荐邮件流程 |
| Shopify | Smile.io | 在一个应用中结合忠诚度积分和推荐机制——适合同时需要两者的情况 |
| WooCommerce | ReferralCandy 或 Referral Hero | 两者都提供 WooCommerce 插件;通过 REST API 连接以跟踪订单并发放奖励 |
| BigCommerce | ReferralCandy | 可在 BigCommerce App Marketplace 中获取 |
| 自定义 / Headless | 构建推荐跟踪 + 奖励逻辑 | 当平台集成或欺诈规则不符合需求时必须采用 |
第 2 步:针对平台进行设置
Shopify
选项 A:ReferralCandy(推荐——完整的推荐套件)
-
从 Shopify App Store 安装 ReferralCandy
-
连接你的 Shopify 商店——ReferralCandy 会自动导入现有客户
-
配置奖励结构:
- 前往 ReferralCandy → Rewards → Set Rewards
- 选择推荐人的奖励类型:通过 PayPal 发放现金、商店折扣或自定义礼品
- 选择被推荐人的奖励类型:结账时应用的折扣码
- 示例:推荐人获得 10 美元商店积分;被推荐人首次下单可减 10 美元
-
配置推荐邮件发送时间:
- 前往 Post-Purchase Email → Settings
- 将发送延迟设为购买后 1–3 天(客户正处于热情高涨期)
- 使用你的品牌元素和推荐链接自定义邮件模板
-
ReferralCandy 会自动:
- 为每位客户生成专属推荐链接
- 在 30 天 Cookie 窗口内跟踪点击和归因
- 检测自我推荐并阻止发放奖励
- 当被推荐人通过链接注册时,向其发送包含折扣码的欢迎邮件
-
在 ReferralCandy → Analytics 中查看效果:
- 发送的推荐、点击、注册和购买次数
- 归因于推荐的收入
- 排名前列的推荐人(用于 VIP 联络)
选项 B:Referral Hero(优先使用 Klaviyo)
- 从 App Store 安装 Referral Hero
- 在 Referral Hero → Campaigns → Create Campaign 中进行配置
- Referral Hero 与 Klaviyo 集成——推荐转化时,会触发 Klaviyo 工作流发送奖励通知邮件
- 奖励类型包括商店积分(通过 Shopify 折扣码发放)、现金(PayPal)或礼品卡
在购买后邮件中添加推荐入口(Klaviyo):
- 在 Klaviyo 中,前往 Post-Purchase flow
- 在第 3 天步骤添加一封包含推荐链接的邮件
- ReferralCandy 和 Referral Hero 都提供 Klaviyo 集成,可将
{{ customer.referral_link }}注入为合并标签
WooCommerce
适用于 WooCommerce 的 ReferralCandy:
- 从 WordPress.org 或 ReferralCandy 集成页面安装 ReferralCandy 插件
- 使用 ReferralCandy API 凭据连接你的 WooCommerce 商店
- ReferralCandy 会跟踪 WooCommerce 订单,并自动将购买归因于推荐人
- 在 ReferralCandy 控制面板中配置奖励和邮件发送时间(与上文 Shopify 的设置相同)
适用于 WooCommerce 的 Referral Hero:
- 安装 Referral Hero WooCommerce 插件
- 配置推广活动,并将奖励类型设为 WooCommerce 优惠券代码
- Referral Hero 会在被推荐人注册后向其发放唯一优惠券代码,并在被推荐人完成转化时通知推荐人
使用 AutomateWoo 手动设置推荐计划:
- 如果你希望完全掌控流程,可使用 AutomateWoo 触发推荐邮件并发放折扣代码
- AutomateWoo 在 AutomateWoo → Workflows → Referrals 下提供内置的 Referral 工作流模板
BigCommerce
适用于 BigCommerce 的 ReferralCandy:
- 前往 Apps → Search "ReferralCandy" 并安装
- 配置方式与 Shopify 版本相同
- ReferralCandy 会跟踪 BigCommerce 订单,并发放 BigCommerce 折扣代码作为奖励
自定义/无头架构
对于无头架构的店面,可构建包含分级奖励和欺诈检测功能的推荐跟踪系统:
// lib/referrals.ts
import { randomBytes } from 'crypto';
// Generate a unique, human-friendly referral code per customer
export async function getOrCreateReferralCode(customerId: string): Promise<string> {
const existing = await db.referralCodes.findFirst({ where: { customerId } });
if (existing) return existing.code;
const customer = await db.customers.findUnique({ where: { id: customerId } });
const prefix = (customer!.firstName ?? 'USER').slice(0, 4).toUpperCase();
const suffix = randomBytes(3).toString('hex').toUpperCase();
const code = `${prefix}${suffix}`; // e.g., JANE3A9F
await db.referralCodes.create({ data: { customerId, code } });
return code;
}
// Middleware: capture referral code from ?ref= URL param into a 30-day cookie
export function referralTrackingMiddleware(req: Request, res: Response, next: NextFunction) {
const code = req.query.ref as string;
if (code && !req.cookies.ref_code) {
res.cookie('ref_code', code, { maxAge: 30 * 86400000, httpOnly: true, secure: true, sameSite: 'lax' });
}
next();
}
// Tiered rewards: reward amount increases as referrer accumulates successful referrals
const REFERRAL_TIERS = [
{ minReferrals: 0, referrerRewardCents: 1000, refereeRewardCents: 1000 }, // $10/$10
{ minReferrals: 5, referrerRewardCents: 1500, refereeRewardCents: 1000 }, // $15/$10 after 5
{ minReferrals: 10, referrerRewardCents: 2500, refereeRewardCents: 1500 }, // $25/$15 after 10
];
function getReferralReward(successfulReferrals: number) {
return [...REFERRAL_TIERS].reverse().find(t => successfulReferrals >= t.minReferrals)!;
}
// On new account creation: attribute referral, run fraud checks
export async function onCustomerCreated(customerId: string, refCode: string | undefined) {
if (!refCode) return;
const referralCode = await db.referralCodes.findFirst({ where: { code: refCode } });
if (!referralCode || referralCode.customerId === customerId) return; // block self-referral
// Fraud check: same shipping address as referrer
const [referee, referrer] = await Promise.all([
db.customers.findUnique({ where: { id: customerId }, include: { addresses: true } }),
db.customers.findUnique({ where: { id: referralCode.customerId }, include: { addresses: true } }),
]);
const refereeAddr = referee?.addresses[0]?.addressHash;
const referrerAddr = referrer?.addresses[0]?.addressHash;
if (refereeAddr && refereeAddr === referrerAddr) return; // same address = block
await db.referrals.create({ data: { referrerId: referralCode.customerId, refereeId: customerId, code: refCode, status: 'pending' } });
}
// On referee's first purchase: issue rewards to both parties
export async function onRefereeFirstPurchase(refereeId: string, orderId: string) {
const referral = await db.referrals.findFirst({ where: { refereeId, status: 'pending' } });
if (!referral) return;
const order = await db.orders.findUnique({ where: { id: orderId } });
if (!order || order.subtotalCents < 2500) return; // require minimum $25 order
const referrerStats = await db.referralCodes.findFirst({ where: { customerId: referral.referrerId } });
const tier = getReferralReward(referrerStats?.totalReferrals ?? 0);
await Promise.all([
issueStoreCredit(referral.referrerId, tier.referrerRewardCents, `Referral reward`),
issueStoreCredit(refereeId, tier.refereeRewardCents, 'Welcome reward — referred by a friend'),
]);
await db.referrals.update({ where: { id: referral.id }, data: { status: 'rewarded', orderId } });
await db.referralCodes.update({ where: { customerId: referral.referrerId }, data: { totalReferrals: { increment: 1 } } });
}
推荐计划分析 SQL:
-- Monthly referral program performance
SELECT
DATE_TRUNC('month', r.created_at) AS month,
COUNT(*) AS total_referrals,
COUNT(CASE WHEN r.status = 'rewarded' THEN 1 END) AS successful_referrals,
ROUND(100.0 * COUNT(CASE WHEN r.status = 'rewarded' THEN 1 END) / NULLIF(COUNT(*), 0), 1) AS conversion_rate_pct,
SUM(CASE WHEN r.status = 'rewarded' THEN rc.total_rewards_cents END) / 100.0 AS rewards_paid_usd
FROM referrals r
JOIN referral_codes rc ON r.referrer_id = rc.customer_id
GROUP BY 1
ORDER BY 1 DESC;
第 3 步:推广推荐计划
推荐链接必须清晰可见——如果藏得太深,客户就不会找到它:
- 购买后确认页面 — 在订单确认页面添加推荐 CTA:“喜欢这次购物吗?分享给朋友,你们都能获得 10 美元”
- 购买后邮件 — 在购买后第 3 天发送的邮件中加入推荐链接(ReferralCandy 和 Klaviyo 均支持自动执行此操作)
- 客户账户页面 — 添加“推荐好友”版块,显示客户的推荐链接和推荐记录
- 交易邮件 — 在发货确认邮件中加入不显眼的推荐 CTA
第 4 步:衡量推荐计划的 ROI
| 指标 | 衡量方式 |
|---|---|
| 推荐转化率 | 成功推荐数 / 推荐链接总点击数 |
| 推荐 CAC | 已发放奖励总额 / 成功推荐数 |
| 推荐带来的收入 | 为被推荐订单添加标签,并比较总收入 |
| 被推荐客户与非被推荐客户的 CLV | 在 90 天和 12 个月时进行群组比较 |
将推荐 CAC 与付费获客渠道进行比较。优化后,推荐计划通常能比付费渠道降低 20–30% 的 CAC。
最佳实践
- 先使用 ReferralCandy,再考虑从头构建 — 它能在几分钟内处理链接生成、归因、欺诈检测和奖励发放
- 设置首笔订单的最低金额要求,以符合奖励领取条件 — 防止用户通过 1 美元的测试订单刷取奖励
- 使用商店积分,而非一次性折扣代码 — 商店积分会促使客户再次购买,并创造第二次购买机会
- 设置 30 天归因窗口 — 窗口过短会漏掉需要较长时间才完成转化的客户
- 被推荐人购买后立即发送奖励通知邮件 — 推荐人往往不知道奖励已发放;通知也能促使他们进一步推荐
- 阻止推荐至相同的收货地址 — 这是判断家庭成员自我推荐的最明显欺诈信号
常见问题
| 问题 | 解决方案 |
|---|---|
| 通过多个电子邮件账号进行自我推荐欺诈 | 阻止收货地址相同的推荐(最可靠的信号);ReferralCandy 会自动检测此类情况 |
| 推荐链接被分享到优惠券论坛 | 监测推荐客户群的 CLV;如果其 CLV 明显低于自然流量客户群,则设置更高的最低订单金额 |
| 在 30 天退货期结束前发放商店积分 | 在被推荐客户下单后延迟 30 天发放奖励,以便处理退货 |
| 后续广告点击覆盖了推荐 Cookie | 单独保存首次推荐点击;ReferralCandy 对推荐采用首次点击归因 |
| 推荐邮件打开率低 | 将推荐邀请从收据邮件移至专门的购后第 3 天邮件,此时客户满意度最高 |
相关技能
- @affiliate-program
- @customer-lifetime-value
- @customer-segmentation
- @email-marketing-automation