深色
比价(抢 Buy Box)

自动盯住别的卖家在 Takealot 上同款商品卖多少钱,再帮你算出「我们卖多少能抢到 Buy Box(商品页上那个默认『加入购物车』的黄金位)」。重点:现在整页是「影子模式」——只看、只算、只记录,绝对不会真的去改你 Takealot 上的售价(真改价功能还没做出来)。所以这页现在等于一台「监视器 + 试算器」,不是会自动改价的机器人。
谁会用到:Nate(业主)/ 比价运营人员。用来观察竞品价、给商品设比价规则(底价/上限/开关),以及导出导入 CSV 批量设规则。
🧠 这一页的原理(白话)
运作铁则是「听 → 算 → 最后才推」。① 听:一台跑在南非 VPS(远端服务器)上的采集器,每 20 分钟匿名逛 Takealot 公开商品页、抄下竞品价,回传给系统(走独立密钥,碰不到你的卖家钥匙、不碰库存订单主链路)。② 算:系统按你设的「底价~上限」算一个建议价(F17 规则引擎,纯算不改);铁律是绝不低于底价(防两个机器人互砍亏本卖),且只要已经赢了任一 Buy Box 位(最低价或最快)就守价不降。③ 推:把建议价真送去改 Takealot 价格这一步(代号 T6b)目前还没做,整页零真实改价。每个商品默认「关」,由人决定何时开。它比第三方比价工具强在「用真实可卖库存感知」——库存太低会自动暂停调价,防止把快卖光的货再降价超卖。
🖱️ 画面上的东西(分页 / 按钮 / 栏位)
| 类型 | 名称 | 是什么 | 点了 / 用了会怎样 | ⚠️ 注意 |
|---|---|---|---|---|
| badge | 标题「比价 · 抢 Buy Box」+ 副标 | 页面顶部固定标题,副标写「监控竞品价、在底价~上限内算建议价抢 Buy Box · 影子模式(当前只算不真实改价)」 | 纯显示,不可点 | |
| button | ⟳ 自动采集中(灰色禁用) | 告诉你抓价的采集器已经在另一台服务器上每 20 分钟自动跑了 | 永远是灰的、点不动。鼠标移上去提示「采集器已部署 VPS(阶段 B),每 20 分自动采集——无需手动触发」。点了什么都不会发生。 | 无 |
| button | ⬆ 导入规则 CSV | 把填好的 Excel 模板批量传回来设规则 | 弹出选档窗 → 选一个 .csv → 程式只挑出有填「底价」或「启用」的行,其余跳过 → 批量送后端建/改规则(单次最多 250 行,超过前端自动分批)。完成后顶部出现「✓ 导入完成:成功 N 行」,失败的列出前 3 个原因(简体中文)。POST /api/repricer/rules/bulk | 写入资料库(批量建/改规则),但绝不改线上价。每行单独检查底价合法性,某行错不影响其他行,且每行都写 audit 日志。 |
| button | ⬇ 导出 CSV | 下载一个 Excel 模板,里面是「有竞争」的商品 + 现价 + 竞品价 + 两个 Buy Box 位 + 现有规则栏 | 点了从后端下载 CSV(档名类似 repricer-takealot-NN.csv)。下载后顶部提示你在 Excel 填好 min_price/max_price/enabled 再用「导入规则 CSV」传回。若采集器还没抓到任何竞争,导出可能是空的(代表现在没有需要比价的对象)。GET /api/repricer/export.csv | 纯读取下载,无写入。 |
| button | ⚙ 设置(蓝色主按钮) | 打开「比价设置」弹窗 | 点了打开弹窗(见下方『设置弹窗』),但弹窗里的开关目前都不保存。 | 无 |
| badge | CSV 操作结果横幅(蓝色)+「知道了」 | 按导入/导出后出现,显示处理中或成功/失败讯息 | 处理中显示「处理中…」,完成显示结果。右侧「知道了」点了关掉横幅。 | |
| button | 比价总开关(勾选框)+「已启用/已暂停」 | 看起来像全站比价的总闸 | ⚠️ 纯前端摆设:勾或不勾只改这行画面上的字(已启用/已暂停),不送后端、不影响任何 SKU 是否真比价,刷新页面会跳回原样。真正决定某商品比不比价的,是每个商品自己『规则设定』里的「启用此规则」开关。 | 无(点了不会有任何真实后果) |
| field | 下拉「模式」:影子(只看不改)/ 真改(实际改价) | 看似切换『只算』和『真的改价』 | ⚠️ 纯前端摆设:默认「影子」。选「真改」只是让画面上的影子横幅消失、设置弹窗里高亮变化——后端没有任何真改价逻辑被触发(真改价功能未建),此刻选「真改」也不会真的改任何线上价格。 | 名字看着危险,但当前点了不改价。真改价功能将来做好后,第一次开务必只挑 3-5 个商品 + 先影子对照两天,切勿一上来批量真改。 |
| field | 下拉「采集间隔」:6 分 / 10 分 / 20 分 | 看似设定采集器多久抓一次 | ⚠️ 纯前端摆设:默认「10 分」。改它只改画面数字,不会真的改变远端采集器的实际间隔(采集器实际固定 20 分,由 VPS 排程决定)。概念上要懂:从 20 分起步试探平台容忍度,确认没被当机器人挡再缩短;不是越快越好。 | 无 |
| badge | 徽章「上次采集 · X 分钟前 / 采集器未运行」+ 小圆点 | 采集器最后一次抓到竞品价是多久前——这是真实数据,不是装饰 | 圆点绿色=抓过价(亮绿);灰色=从未抓到。文字根据后端回传的真实最后信号时间算。从未抓到时显示「采集器未运行」。GET /api/repricer/skus(回传 last_signal_at) | |
| button | 平台切换段「全部 / Takealot / amazon」 | 切换看哪个平台的数据 | 默认「全部」高亮。「全部」和「Takealot」效果一样(都查 Takealot)。切「amazon」表格会变空并显示「Amazon 比价尚未开放——需另接官方竞品通知,目前仅 Takealot」。 | 无 |
| badge | 影子模式安全横幅(蓝色)+「切换为真改…」按钮 | 只在模式=影子时出现,提醒「系统按规则计算建议价、但不会真实改价,上线初期建议保持」 | 右侧「切换为真改…」点了把模式切成真改(同样只改前端,不会真改线上价)。 | 无(按了不改价) |
| button | 分区「全部 / 🟢 在比价 / ⚪ 未比价」+ 各自数字 | 一眼分开『系统正在管的(🟢 在比价=已开启用此规则的商品数)』和『还没管的(⚪ 未比价)』 | 点哪个就筛哪类。「全部」数字=纳入比价 SKU 总数;「在比价」=已启用规则的真实笔数;「未比价」=总数减已启用。GET /api/repricer/skus?zone=on/off | |
| badge | KPI 格「纳入比价 SKU」 | 在 Takealot 上架且有 PLID(商品页编号)可比价的总数(实测约 1.7 万) | 纯显示,不可点。脚注「在 Takealot 上架 · 有 PLID 可比价」。 | |
| badge | KPI 格「需要比价 · 有货有竞争」 | 有竞争对手且有库存的商品数(没货的不烦恼) | 纯显示。采集器没跑过时显示「—」,脚注「待采集器跑后才知道」;跑过后显示数字 + 「另 N 无货免烦恼」。这是设计,不是漏单。 | |
| badge | KPI 格「今日调价」 | 今天真的改了几次价 | 永远显示「—」,脚注「真改价未启用(影子)」。因为根本没有真改价功能,所以这格永远是空的。 | |
| badge | KPI 格「输 Buy Box」 | 我们挂牌价高于竞品最低价的商品数(真实价格比较,跟有没有开规则无关) | 纯显示。脚注带「位置两输 N」(两个 Buy Box 位都不是我们的数量)。注意:即使一个规则都没开,这数字照样会显示几百个,因为它说的是真实价格关系,不是『系统在管的数量』。GET /api/repricer/skus(priceLosing 计数) | |
| badge | KPI 格「缺货暂停」 | 因库存低于阈值被自动暂停调价的商品数 | 纯显示。脚注「库存低于阈值 · 自动暂停」。 | |
| tab | 筛选标签页(7 个):全部 / 需要比价 / 输 Buy Box / 已最低 / 已锁价 / 缺货暂停 / 未启用 | 按不同条件筛选主表,每个标签右边有后端真实计数 | 点哪个就筛哪种,并回到第 1 页。「输/已最低」用规则无关的真实价格比较(影子阶段也准)。GET /api/repricer/skus(status / priceLosingOnly / priceWinningOnly / competingOnly) | |
| field | 搜索框「搜索 SKU / 商品 / WMS Code…」 | 按商品名 / 平台 SKU / WMS 编号搜 | 输入后等 0.3 秒自动送后端搜索(不用按 Enter)。GET /api/repricer/skus?q= | |
| button | ⭐ 审核优先 | 一键把『该处理的』排到最前 | 点了排序切成「有货 + 有竞争 + 我们价高 + 价差大」排最上、没货沉底,方便逐个人工确认。选中时变蓝色。上线前逐个核对最省事。GET /api/repricer/skus?sort=priority | 无 |
| button | 分页:第 X–Y / 共 N + 上一页/下一页箭头 + 页码 | 主表翻页(每页 50 笔) | 点箭头翻页,到头/到尾对应箭头变灰。 | 无 |
| column | 表头排序(商品/我们价/竞品最低/Buy Box 价/库存/建议价) | 可点的表头,点了切升/降序、旁边出现 ▲▼ | 点一下排序、再点一下反向;没数据的「—」自动排到最后。 | |
| field | 最左勾选框(表头 + 每行) | 看似可勾选做批量操作 | ⚠️ 目前没接任何功能:勾了不会触发批量操作(程式里没有处理逻辑,纯摆设)。 | 无 |
| column | 「商品」栏 | 商品名称(粗体)+ 下方平台 SKU | 纯显示 | |
| column | 「平台」栏 | 平台小徽章(Takealot / amazon) | 纯显示 | |
| column | 「我们价」栏 | 我们目前在平台的售价;来自卖家 API 的挂牌价 | 没数据显示「—」(要先做过一次回填才有,不是 R0 也不是 bug)。状态是「已最低」时绿色,否则深色。 | |
| column | 「利润」栏 | 利润率 | 永远显示「—」(Nate 决定不显示利润,成本/平台费留空)。 | |
| column | 「竞品最低」栏 | 竞争对手里最低的价 | 采集器跑过、且有别家在卖才有值,否则「—」。 | |
| column | 「竞品最快」栏 | 竞品『最快到货』位的价(灰色字) | 没值显示「—」。 | |
| column | 「Buy Box 价」栏 | 当前 Buy Box(最低价位)的价 | 没值「—」。 | |
| column | 「库存」栏 | 真实物理可卖库存(来自防超卖公式算出的 broadcast_qty) | ≤0 显示红色「缺货」;<5 显示橙色警告图示+数字;正常显示数字;无数据「—」。 | |
| column | 「建议价」栏 | 系统算出『该改到多少』的建议(只显示,不会自动改) | 输 Buy Box 且有建议价→绿色向上箭头+数字;已最低→「—」;已锁价→锁图示+我们价;缺货暂停→「⏸ 暂停」。这只是建议。 | |
| badge | 「状态」栏(彩色 Pill 徽章) | 该商品现在的处境 | 红「输 Buy Box」(我们价>竞品最低) / 绿「已最低」(我们价≤竞品最低) / 蓝灰「已锁价」(有手动锁价) / 橙「缺货暂停」(库存低于阈值) / 蓝灰「未启用」(没开比价规则——影子阶段绝大多数落这里) / 蓝灰「待数据」(还没抓到竞品价或没有我们价)。 | |
| column | 「Buy Box 位」栏 | 我们赢了哪个赢家位 | 绿色「最低价 ✓」/「最快 ✓」(赢最快是靠送货速度、不用降价);两个都没赢显示「两输」;没竞品价「—」。看到「两输」的才是真正需要你降价出手的。 | |
| button | 「操作」栏:⚙ 齿轮 + 🔒/锁 图示 | 每行两个小按钮 | ⚙ 齿轮(规则设定)和 🔒 锁图示『点了都只是打开该商品的详情抽屉』——锁图示当下不会真的锁价,提示文字依状态显示「锁价」或「解锁」。整行任意处(除勾选框/操作栏)点击也会打开抽屉。 | 无 |
| badge | 空状态文字 | 没资料时表格中间的提示 | 依情况:「加载中…」/「加载失败」/「Amazon 比价尚未开放」/「暂无『有竞争』SKU——采集器跑过、抓到别家在卖同款后才会出现」/「暂无可比价 SKU——需先跑『补全 PLID』回填」/「无匹配的 SKU」。 | |
| modal | 设置弹窗:运行模式 / 比价间隔 / 库存感知暂停 / 事件告警 Email | 看似全局参数设定,副标「全局参数 · 影响所有纳入比价的 SKU」 | ⚠️ 整个弹窗目前纯前端摆设、不保存:运行模式(影子/真改)、比价间隔(6/10/20)、库存感知暂停开关、三个事件告警 Email 开关(失去 Buy Box/触及底价红线/缺货自动暂停)切了都不送后端,也不会真的发邮件。底部「取消」和「保存设置」两个按钮都只是关掉弹窗——『保存设置』不保存任何东西。 | 无(切了不生效,别误以为已设定) |
| modal | SKU 详情抽屉 - 面板「竞争格局 · Buy Box 位」(价格阶梯图) | 点商品行从右侧滑出。一条价格刻度轴,标出「我们」「竞品最低」两点、谁在 Buy Box 位插旗、距底价还有多少缓冲 | 有我们价+竞品价时画图并给一句话(赢了→『你的价已≤竞品最低·距底价还有 RN 缓冲』;输了→『竞品最低 RN 比你低·降至 R(N-1) 可抢回』)。缺数据时显示「暂无价格数据」。纯显示。 | |
| modal | SKU 详情抽屉 - 面板「竞品价历史」(折线图) | 竞品最低价 + 建议价随时间的两条曲线 | 有历史时画图(采集器跑越久越完整);没有时「暂无历史(采集器跑后逐步累积竞品价)」。GET /api/repricer/:wms/detail | |
| modal | SKU 详情抽屉 - 面板「全部对手 · N 个卖家」 | 采集器这一轮抄到的每个卖家:价格、卖家名(我们的标『我们』并高亮)、是否在 Buy Box 位、有货标记 | 有 offers 资料才出现,按价格由低到高排。纯显示。 | |
| field | SKU 详情抽屉 - 规则设定『最低价(底价)』输入框 | 红线,绝不低于此价 | ⚠️ 启用比价前必填正整数 Rand(如 250),否则保存被后端挡下,回简体中文错误「启用比价前必须设置正整数底价(最低价,单位 Rand)」。占位字「必填」。 | 这是防两个机器人互砍亏本卖的核心安全闸,不能不填。 |
| field | SKU 详情抽屉 - 规则设定『最高价(上限)』输入框 | 上调时的上限 | 可空(占位「可空」)。有填必须是正整数 Rand 且不得低于底价,否则回错误「上限价不得低于底价」。 | |
| field | SKU 详情抽屉 - 规则设定『抢哪个位』下拉 | 选抢 Best Price 最低价 还是 Fastest 最快到货 | 默认抢最低价(最快位靠物流,改价控制不了)。 | |
| field | SKU 详情抽屉 - 规则设定『赢过竞品』输入框 + 单位下拉 | 压过对手的幅度,可填 R 金额或 % | 必须是非负数。例如填 1 + 「R 金额」=比对手最低便宜 R1(固定金额,不是随机)。 | |
| field | SKU 详情抽屉 - 规则设定『启用此规则』开关 | 这个商品到底要不要参与比价(这才是真正生效的开关) | 默认关。关=此商品不比价。影子阶段建议保持关或只开少数测试。 | 开启前底价必填,否则保存被挡。 |
| badge | SKU 详情抽屉 - 底部预览横幅(三选一) | 当前会怎么处理这个商品 | 缺货暂停→橙色『库存仅 N 件—已自动暂停调价以防超卖,补货后自动恢复』;有竞品价+有建议价→蓝色『影子预览:竞品 RX → 建议改 RY · 影子模式·不会真改』;否则→蓝色『尚无竞品价—采集器跑后会算出建议价(始终影子、不真改)』。 | |
| button | SKU 详情抽屉 - 底部『取消』/『✓ 保存规则』 | 抽屉里唯一真的会写资料库的地方 | 『取消』关闭抽屉不存。『✓ 保存规则』把底价/上限/抢位/幅度/开关存进 repricer_rules 表,写 audit 日志,成功后抽屉关闭、列表刷新。填错(底价空着想启用/不是整数/上限低于底价)会跳简体中文提示。PUT /api/repricer/:wms/rule | 写入资料库(存规则),但这是『存规则』不是『改线上价』——存完不会有任何价格被推到 Takealot。是本页最实质的动作,但仍然安全(只动自己的规则表)。 |
⚠️ 注意事项 / 别踩的坑
- 最大认知地雷:页面顶部的『比价总开关 / 模式 / 采集间隔』和整个『设置』弹窗(含保存设置按钮、库存感知暂停、事件告警 Email),目前全是纯前端摆设——切了不保存、刷新跳回、不影响真实行为、也不会真的发邮件。真正生效的设定只在每个商品的『规则设定』抽屉里。
- 三个名字看着危险但当下不会改价:控制条『真改』模式、影子横幅『切换为真改』、操作栏『锁价』图示——此刻点了都不会真的改线上价格(真改价 T6b 未建)。
- 全页零真实改价:后端注释明确写『零改价路径』『真改价 T6b 未建』。这页不碰库存防超卖主链路,最坏也只是『比价暂停更新』,不会害店铺被封或拖累库存订单同步。
- 唯二真的写资料库的动作:① 详情抽屉『保存规则』、② 顶部『导入规则 CSV』(批量存规则)。两者都只存规则、不改价,且都写 audit。
- 大量『—』是正常的不是 bug:我们价要先做过『补全 PLID/回填』才有;竞品价/Buy Box 价要采集器真抓过且该商品真有别家在卖才有;建议价要有竞品价+有规则才算得出。
- 『输 Buy Box / 已最低』算的是真实价格比较,跟你有没有开规则无关——所以即使一个规则都没开,这两个数字照样显示几百个,别因此困惑。
- Buy Box 有两个赢家位(最低价、最快),赢了『最快』就不该降价(送货速度靠仓库物流、不是降价能控的);只有『两输』才需要在底价内降价抢最低价位。
- 采集间隔不是越快越好:要从 20 分起步试探平台容忍度,抓太密集可能让采集器那台服务器 IP 被暂时挡(但只影响竞品价更新,不影响卖货)。
- 底价必须填整数 Rand(R299 就填 299,不能填 299.50 或 29900);上限不得低于底价,否则保存被后端挡下。
- 你手动去 Takealot 后台改了价,这页不会自动跟,要等下一轮采集(每 20 分)才会更新显示。
- 页面顶部 Amazon 分页是空的并显示『Amazon 比价尚未开放』——目前只支援 Takealot。
- 代码里有一处过时注释(routes/repricer.ts 第 19 行写『未掛載到 index.ts=休眠』),但实际路由已挂载、页面确实在用——只是注释陈旧,不影响运行。
✅ 怎么操作(步骤)
- 教学一·给单一商品设比价规则(目前唯一会真正保存生效的操作):第1步——在主表用搜索框找到商品,或按『⭐ 审核优先』让该处理的排前面。
- 第2步——点那一行,右边滑出『详情抽屉』,先看上半部:竞争格局图(谁在 Buy Box、距底价多少)、竞品价历史曲线、全部对手清单。
- 第3步——拉到『规则设定』填:最低价(底价,必填正整数 Rand)、最高价(可空)、抢哪个位、赢过竞品幅度、启用此规则开关(默认关)。
- 第4步——点『✓ 保存规则』。成功则抽屉关闭、列表刷新,并留下一条 audit 操作记录;填错会跳简体中文提示告诉你哪里要改。验证成功=再点开同一商品,规则栏保留你填的值,状态变成对应状态。
- 教学二·批量设规则(用 CSV):第1步——点右上『导出 CSV』,下载一个已带好现价/竞品价/Buy Box 位的『需要比价商品』模板。
- 第2步——用 Excel 打开,逐行填 min_price(底价,整数 Rand,必填才能启用) / max_price(可空) / enabled(要启用填 1)。
- 第3步——回页面点『导入规则 CSV』选填好的档上传。系统只处理你填了底价或开关的行,每行单独检查底价护栏,某行错不影响其他行。完成后显示成功几行、失败几行(简体中文原因)。单次最多 250 行,前端自动分批。
- 重要提醒:以上两个教学都只是『定好策略 + 记录』,在真改价功能上线前,保存规则不会真的改你 Takealot 的店铺价。
与 6/21 上线测试有关
这页在 6/21 上线测试里『不会真改 Takealot 价格』——真改价(T6b)整段未建,全页是影子模式。6/21 这页能做的只有三件:① 显示采集器(VPS,已上线、每 20 分钟)听到的真实竞品价;② 按规则引擎算建议价(影子);③ 让你设规则(底价/上限/开关)、导入导出 CSV 模板。所谓『推送虚拟库存』是另一条线(连接器/库存页),不是这页。这页若将来要进入『真改价』,必须先单独建 T6b、且 Nate 明确开关,并严格分阶段灰度:先从约 1.7 万筛出需比价的→只测 3-5 个→平台后台 + CC WMS 双重验证约 2 天→才批量开。绝对不要一上来批量启用全部去真改价(两个机器人互砍会把价格砍穿成本亏本卖)。安全保证:抓竞品价的采集器跑在另一台服务器、匿名逛公开商品页(跟普通买家看到的一样)、不登入你的卖家账号、不碰那把改库存/抓订单的官方钥匙、走不同网络出口,所以最坏只是『比价暂停更新』,不会害店铺。