关于 flash-sale-engine
面向电商运营者的限时促销配置技能,介绍如何安排折扣、限制促销数量、添加倒计时,并为高需求发布设置等候室。
主要功能
- 01按平台配置限时促销
- 02安排折扣开始与结束
- 03设置促销数量上限
- 04添加倒计时器
- 05为热门发售排队访客
适用场景
- 01安排限时季节性促销
- 02限制促销价商品数量
- 03降低流量高峰时超卖风险
- 04管理限量商品发售队列
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill flash-sale-engine安装后在 Claude Code 中输入/flash-sale-engine确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
tile.jsonevals/atomic-stock-reservation-with-redis/criteria.jsontask.mdevals/real-time-countdown-timer-via-sse/criteria.jsontask.mdevals/sale-scheduling-and-virtual-queue-manage/criteria.jsontask.md详细介绍
限时抢购引擎
概述
限时抢购是有时间限制的折扣活动,通常持续 2–24 小时,旨在营造紧迫感并大幅提升转化率。要确保活动可靠运行,需要具备三项功能:向购物者显示倒计时、限制每场活动的商品数量以防止超卖,以及在活动结束时自动恢复价格。对于流量较大的新品发售(如新品限量发售、黑色星期五限时抢购),虚拟候场室也至关重要,可防止机器人囤货。大多数平台都有可处理这些需求的应用,无需编写自定义代码。
何时使用此技能
- 举办有明确时限的促销活动时(例如,24 小时优惠、黑色星期五限时抢购),且活动必须在精确时间结束
- 商品的限时抢购数量与主库存分开管理时
- 预计流量激增,使用简单的库存检查可能导致超卖时
- 需要候场室或排队机制,在需求旺盛的新品发售期间公平地让顾客进入时
- 构建 deals 平台,且多个商品同时开展限时抢购时
核心说明
步骤 1:确定商家的平台并选择合适的工具
| 平台 | 推荐工具 | 原因 |
|---|---|---|
| Shopify | Countdown Timer Bar、FOMO 或 Hextom Flash Sales 应用 | 这些应用无需自定义代码,即可处理倒计时、定时调价和库存显示 |
| Shopify Plus | Launchpad(Plus 用户免费) | Shopify 官方限时抢购应用,可安排价格变更、启用或停用折扣码,并自动恢复价格 |
| WooCommerce | YITH WooCommerce Flash Sales 或 WooCommerce Sales Countdown | 可直接在商品页面管理促销价格和倒计时 |
| BigCommerce | BigCommerce Promotions 搭配倒计时自定义脚本 | BigCommerce 的促销引擎负责处理折扣;使用店面脚本实现倒计时界面 |
| 高流量新品发售(任何平台) | Cloudflare Waiting Room | Cloudflare 托管的候场室可公平地为访客排队,防止黄牛机器人垄断有限库存 |
| 自定义 / 无头架构 | 使用 Redis 实现原子库存操作,并使用 SSE/WebSocket 实现计时器 | 对于不适用应用的自定义平台,可提供完全控制 |
步骤 2:在平台上配置限时抢购
Shopify
选项 A:Shopify Launchpad(仅限 Plus,免费)
Launchpad 是 Shopify 官方的促销活动安排工具:
- 在 Shopify 管理后台中,前往 Apps → Launchpad
- 点击 Create event
- 设置活动名称(例如,“Black Friday Flash Sale 2026”)、开始时间和结束时间
- 在 Price changes 下:选择商品并为每件商品设置促销价
- 在 Publish/unpublish collections 下:可选择在活动期间显示或隐藏促销商品系列
- 在 Discount codes 下:在活动期间启用或停用特定折扣码
- 点击 Schedule — Launchpad 会在开始时间启用这些更改,并在结束时间自动撤销
重要:将限时抢购数量与主库存分开设置。如果限时抢购价只售 100 件,请在活动开始前将商品可用库存减至 100 件,之后再补充库存。Launchpad 原生不管理限时抢购数量。
选项 B:Hextom Flash Sales 应用(非 Plus)
- 从 Shopify App Store 安装 Hextom Flash Sales(约 $10/月)
- 创建一场活动,指定商品列表、折扣百分比和持续时间
- 该应用会在商品页面添加倒计时小组件,并自动更新价格
- 在应用设置中配置倒计时的外观
每件商品的数量上限: 使用 Shopify 内置的 库存跟踪 来设置限时抢购数量:
- 编辑商品变体 → 将库存数量设为限时抢购上限
- 启用 Track quantity 和 Stop selling when out of stock
- 活动结束后,将库存补充至实际数量
WooCommerce
选项 A:YITH WooCommerce Flash Sales 插件
- 从插件目录或 YITH.com 安装 YITH WooCommerce Flash Sales
- 前往 YITH → Flash Sales → Add New Flash Sale
- 设置:
- 参与促销的商品
- 促销价或折扣百分比
- 开始日期/时间和结束日期/时间
- 限时促销价对应的最大可售数量(与主库存分开计算)
- 插件会自动在商品页面显示倒计时,并在结束时间到达后恢复价格
选项 B:使用 WooCommerce 原生促销价和倒计时扩展插件
WooCommerce 原生支持为每件商品设置 Sale price 和 Schedule:
- 编辑商品 → Pricing 标签页
- 输入 Sale price
- 点击 Schedule 设置开始和结束日期
- 促销价会自动生效和失效
使用 Countdown Timer for WooCommerce(免费插件)或 WooCommerce Sales Countdown Timer 添加倒计时。
单件商品的限时促销数量: 在促销开始前,将商品的库存数量调低至限时促销数量上限,然后在促销结束后手动恢复,或通过计划脚本恢复。
BigCommerce
- 前往 Marketing → Promotions → Create Promotion
- 设置:
- Promotion type:按百分比折扣或按金额折扣
- Applies to:指定商品或分类
- Active date range:开始和结束时间(BigCommerce 会自动恢复价格)
- 如需添加倒计时:
- 前往 Storefront → Script Manager → Create a Script
- 作用范围:指定页面 → 商品页面
- 添加一个倒计时至促销结束时间的 JavaScript 计时器
BigCommerce 上的数量限制: 在促销中设置 Maximum uses 上限,以限制可使用限时促销折扣的订单数量;也可以使用商品的库存跟踪功能限制库存。
高需求发售的排队等候室(任何平台)
对于预计会有大量流量的商品发售(限量运动鞋、演唱会门票、独家商品):
Cloudflare Waiting Room(推荐)
- 在 Cloudflare 控制面板中,前往 Traffic → Waiting Room
- 点击 Create Waiting Room
- 设置:
- Hostname 和 Path:商品页面 URL 模式(例如,
/products/limited-edition-*) - Total active users:允许同时访问该页面的用户数上限
- New users per minute:允许排队客户进入的速率
- Hostname 和 Path:商品页面 URL 模式(例如,
- Cloudflare 会向排队访客显示可自定义的等候室页面
- 客户按先进先出(FIFO)顺序进入;Cloudflare 的机器人管理功能会过滤机器人
此功能需要 Cloudflare Business 或 Enterprise 套餐。若要选择成本较低的替代方案,可考虑 Queue-it 或 Fastly's Waiting Room。
自定义 / 无头架构
对于自定义店面,使用 Redis 实现原子库存预留,以确保高并发场景下的安全性:
import { Redis } from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
// Atomically reserve one unit from the flash sale allocation
async function reserveFlashSaleUnit(saleId: string, customerId: string): Promise<boolean> {
const key = `flash_sale:${saleId}:sold`;
const maxKey = `flash_sale:${saleId}:max`;
const max = parseInt(await redis.get(maxKey) ?? '0');
if (max === 0) return false; // sale not configured
// Atomic increment — safe under high concurrency
const newCount = await redis.incr(key);
if (newCount > max) {
await redis.decr(key); // Undo the over-increment
return false; // Sold out
}
return true;
}
// Send countdown timer data to the client via Server-Sent Events
app.get('/api/sales/:saleId/timer', async (req, res) => {
const { endsAt, maxQuantity } = await db.flashSales.findById(req.params.saleId);
res.setHeader('Content-Type', 'text/event-stream');
res.setHeader('Cache-Control', 'no-cache');
const interval = setInterval(async () => {
const remaining = Math.max(0, new Date(endsAt).getTime() - Date.now());
const sold = parseInt(await redis.get(`flash_sale:${req.params.saleId}:sold`) ?? '0');
res.write(`data: ${JSON.stringify({ remaining, stockLeft: maxQuantity - sold })}\n\n`);
if (remaining === 0) { clearInterval(interval); res.end(); }
}, 1000);
req.on('close', () => clearInterval(interval));
});
最佳实践
- 使用以服务器为准的结束时间 — 绝不要让客户端计算促销何时结束;始终从服务器读取 UTC 结束时间戳,以防不同浏览器的计时器出现偏差
- 将促销数量与主库存分开设置 — 限时促销库存是单独分配的;在订单确认前,不要从总库存中扣减限时促销数量
- 在高流量发售前预先扩容基础设施 — 在大型促销开始前 48 小时,按预期峰值流量对结账流程进行负载测试;并据此扩展托管资源
- 库存较少时显示“售完即止” — 显示实时库存数量(例如,“剩余 8 件”)可以营造紧迫感,但大量库存时应避免显示精确数量,因为这会显得不真实
- 在预发布环境中测试完整促销周期 — 正式上线前,从计划开始时间到自动恢复价格,完整运行一次促销
- Launchpad/应用管理的促销进行期间,切勿手动修改价格 — 手动修改可能导致自动恢复功能无法正常运行
常见问题
| 问题 | 解决方案 |
|---|---|
| 促销结束后价格未恢复 | 使用 Launchpad 或带自动恢复功能的倒计时应用;如果手动安排,请设置日历提醒并确认价格已恢复;建立备用检查机制,根据“事实来源”表验证价格 |
| 流量激增时超卖 | 对于自定义构建,使用 Redis 原子递增;对于平台,在促销开始前将商品库存设置为限时促销上限 |
| 不同时区显示的倒计时不同 | 始终以促销的绝对 UTC 结束时间为基准;在客户端计算 remaining = endsAt - Date.now() |
| 机器人在真实客户购买前抢光所有库存 | 使用 Cloudflare Waiting Room 或类似的排队系统;在订单系统中强制执行每位客户的购买限额 |
| 应用管理的倒计时与手动价格更改冲突 | Launchpad 活动或倒计时应用运行期间,请勿通过 Shopify 管理后台修改价格 |
相关技能
- @coupon-management
- @dynamic-pricing
- @price-rules-engine
- @bot-protection
- @order-management-system