marketing

活动与优惠管理

TanStack Ship 活动管理系统,支持创建折扣优惠、优惠码、基于 UTM 的自动匹配和促销定价活动。

活动创建,支持日期排期、UTM 参数和定向规则
灵活的优惠类型:百分比折扣、固定金额和积分赠送
优惠码生成,支持自定义码和自动生成码
基于 UTM 的自动优惠匹配,实现流量来源特定定价
优惠适用于特定订阅套餐范围
活动效果追踪,含兑换率分析
节假日特定促销活动,支持季节性排期
其他语言:English·Deutsch

概述

TanStack Ship 的活动与优惠管理系统支持复杂的营销促销活动,推动转化和客户参与。该系统提供了一个完整的工具包,用于创建限时活动、定义多种类型的折扣优惠、生成优惠码并跟踪兑换效果——全部通过管理面板管理。

作为 TanStack Ship 平台的一部分,活动系统与 UTM 追踪模块(基于流量来源的自动优惠匹配)、定价引擎(结账时动态折扣应用)和账单系统(Stripe 集成优惠码处理)紧密集成。

活动生命周期

每个活动遵循从创建到到期的结构化生命周期:

设计理念

活动与优惠系统基于三个设计原则构建:

  • 可组合折扣引擎 — 来自不同来源的折扣(百分比、固定金额、积分赠送)在定义的优先级链中评估。每个来源独立运作,实现复杂促销策略而无需修改核心定价逻辑。与 Voucherify 不同——它需要外部 API 调用和 Webhook 集成来进行折扣验证——我们内置的优惠引擎在您自己的数据库内服务端评估定价规则,消除了结账流程中的延迟和第三方依赖。
  • UTM 优先自动匹配 — 在结账开始前,基于 UTM 参数自动为用户匹配优惠。这创造了零摩擦的折扣体验——用户无需查找或输入优惠码。
  • 限时活动 — 每个活动都有明确的开始和结束日期。系统根据这些排期自动激活和停用优惠,确保促销定价永远不会意外持续运行。

核心能力

活动管理

活动是高级营销计划,将优惠、UTM 参数和定向规则组合在一起。每个活动包括:

  • 名称与描述 — 管理员参考的内部名称和面向客户的促销描述
  • 日期范围 — 用于自动激活和到期的开始和结束日期
  • UTM 参数 — 用于归因追踪的来源、媒介和活动名称
  • 启用状态 — 开关活动,无需删除配置
  • 节假日关联 — 将活动链接到节假日排期以实现季节性促销

活动可以在激活前预览,以验证配置的优惠和 UTM 链接。

优惠类型

支持三种优惠类型,各有不同的使用场景:

类型描述最佳使用场景
百分比折扣按基础价格的百分比折扣季节性促销、首购优惠
固定金额按计费货币的固定金额折扣忠诚度奖励、购物车放弃恢复
积分赠送向用户余额奖励额外积分推荐奖励、互动激励

优惠可以叠加或单独应用,由定价引擎的优先级逻辑控制。

优惠码系统

每个优惠可以有一个或多个优惠码,支持精细配置:

  • 自定义码 — 定义品牌相关的码(例如 LAUNCH2024、SUMMER20)
  • 自动生成码 — 系统生成唯一码用于单独分发
  • 公开与私有 — 公开码在定价页面列出;私有码需要直接分享
  • 指定套餐范围 — 将优惠限制到特定订阅套餐(月付、年付或两者)
  • 使用限制 — 设置每个码的最大兑换次数
  • 过期时间 — 独立于父级活动日期的码级别过期

客户端优惠码验证示例:

tsx
import { useMutation } from '@tanstack/react-query'
import { useState } from 'react'

export function CouponInput() {
  const [code, setCode] = useState('')

  const validate = useMutation({
    mutationFn: async (couponCode: string) => {
      const res = await fetch('/api/offers/validate', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ code: couponCode }),
      })
      if (!res.ok) throw new Error('优惠码无效或已过期')
      return res.json() as Promise<{
        valid: boolean
        discount: { type: string; value: number }
        description: string
      }>
    },
  })

  return (
    <div className="rounded-lg border p-4">
      <label className="mb-2 block text-sm font-medium">优惠码</label>
      <div className="flex gap-2">
        <input
          className="flex-1 rounded-md border px-3 py-2"
          value={code}
          onChange={(e) => setCode(e.target.value)}
          placeholder="输入优惠码"
        />
        <button
          className="rounded-md bg-primary px-4 py-2 text-white"
          onClick={() => validate.mutate(code)}
        >
          应用
        </button>
      </div>
      {validate.isPending && <p className="mt-2 text-sm">验证中...</p>}
      {validate.isError && (
        <p className="mt-2 text-sm text-red-600">{validate.error.message}</p>
      )}
      {validate.isSuccess && (
        <p className="mt-2 text-sm text-green-600">
          {validate.data.description} — 优惠 {validate.data.discount.value}{validate.data.discount.type === 'percentage' ? '%' : '元'}
        </p>
      )}
    </div>
  )
}

基于 UTM 的自动匹配

当用户通过带有 UTM 标签的 URL 访问时,系统自动匹配适用的优惠。这支持复杂的营销策略:

  • 广告活动定价 — 来自特定广告平台(Google Ads、Facebook、LinkedIn)用户的特殊定价
  • 合作伙伴推荐 — 为每个合作伙伴设置自定义 UTM 码以追踪推荐优惠
  • A/B 测试 — 为不同流量来源设置不同优惠以衡量转化效果
  • 内容营销 — 通过独特的 UTM 链接为博客读者或邮件订阅者提供专属优惠

匹配逻辑会评估 UTM 来源、媒介和活动字段,与已配置的活动规则进行匹配。

节假日特定活动

活动可以链接到节假日管理系统以实现自动季节性激活:

  • 创建在配置的节假日自动激活的活动
  • 为不同节假日设置不同优惠(例如圣诞节 vs 黑五)
  • 按市场区域本地化节假日活动(德国、中国、美国)

最佳实践

活动命名规范

使用一致的命名模式,例如 {类型}_{目标}_{年份}——WELCOME_NEWUSER_2024、SALE_SUMMER_2024。这使得管理面板中的筛选和报表更加便捷。

限时优惠

始终为活动设置明确的开始和结束日期。限时优惠营造紧迫感并提高转化率。系统会自动停用到期活动,无需手动清理。

测试 UTM 匹配

在启动活动之前,通过模拟使用已配置的 UTM 参数访问来测试 UTM 链接。验证结账时是否正确应用了优惠。

优惠叠加策略

确定优惠是否可以叠加(多个折扣同时应用)或互斥。定价引擎支持两种模式,但应限制叠加以防止利润率侵蚀。


常见问题

如何创建新活动? 导航到 /dashboard/admin/campaigns 并点击"新活动"。填写名称、描述、日期范围和可选的 UTM 参数,然后创建优惠并关联到活动。

一个活动中可以包含多个优惠吗? 可以。一个活动可以包含多个不同类型的优惠。例如,夏季促销活动可能同时包含百分比折扣和积分赠送。

结账时优惠如何应用? 定价引擎评估适用于用户和套餐的所有活跃优惠。如果检测到 UTM 匹配的活动,其优惠优先。否则,应用价值最高的通用优惠。

能否将优惠限制为仅限新用户? 可以。通过配置资格规则,优惠可以限定新用户范围。系统在评估优惠适用性时会检查用户的注册日期和订阅历史。

如何追踪活动效果? 管理面板提供活动分析视图,指标包括优惠兑换次数、转化率、收入影响和 UTM 归因数据。

活动到期后会怎样? 到期活动会自动停用。活动中的优惠在结账时不再应用。历史兑换数据保留不变。

同一个优惠码可以在多个活动中使用吗? 不可以。每个优惠码属于单个活动中的单个优惠,以避免归因追踪的歧义。


配置

活动和优惠完全从管理面板管理:

  • 活动管理:/dashboard/admin/campaigns
  • 优惠管理:/dashboard/admin/offers
  • 优惠码:在每个优惠内创建

活动系统不需要特定的环境变量,使用现有的账单和 UTM 配置。


集成点

活动系统与以下 TanStack Ship 平台模块集成:

  • 定价引擎 — 通过 src/lib/pricing-engine.ts 在结账时动态调整价格
  • UTM 追踪 — 活动关联 UTM 参数用于自动优惠匹配和归因
  • 账单系统 — 通过优惠码集成在 Stripe Checkout 应用折扣
  • 分析面板 — 追踪优惠兑换率、活动 ROI 和转化指标
  • 短链接 — 为社交媒体和邮件分发创建可追踪的短链接
  • 节假日系统 — 将活动链接到节假日排期实现自动季节性促销
  • 积分系统 — 积分赠送优惠在符合条件的购买时向用户余额奖励积分