在计算你的 Amazon 报价与 Featured Offer 价格之间的差距之前,先确认两次观察描述的是同一个商品、同一个站点和同一个选定的顾客上下文。让卖家身份和价格组成部分始终附在各自的观察记录上。如果运费或所需报价未知,就暂缓比较。
这是一份面向已授权卖家工具开发者的诊断方法。可下载的模型会在计算促销前的商品价加已知运费小计之前,把这个决定显式化。所有示例记录都是合成数据。固定范围是 US/USD、Consumer、New、单件;没有数量字段,所以单件输入是你的适配器必须强制执行的一个假设。
更低的商品价可能产生更高的小计
在第一个合成案例中,你的卖家是 seller-A。两条记录使用相同的 ASIN、NON_PRIME 会员身份、代表性位置和配送服务标签,观察时间相差 30 秒:
| 观察 | 商品价 | 已知运费 | 小计 | 卖家 |
|---|---|---|---|---|
| 你的报价 | $19.00 | $4.00 | $23.00 | seller-A |
| 选定的 Featured Offer | $21.00 | $0.00 | $21.00 | seller-B |
模型计算 (19 + 4) - (21 + 0) = +2.00 USD。你的商品价更低,但你按定义得到的小计高出 2 美元。输出为正表示你的小计更高;为负表示更低。已知的零运费是证据;缺失的运费不能用零代替。
第二个案例中两位卖家的商品价都是 20 美元,已知运费都是 0 美元。差距为 0.00,而 featured_is_own_seller 为 false:选定的 Featured Offer 仍然属于 seller-B。第三个案例把该卖家改为 seller-A,返回 true。价格相等和卖家身份回答的是两个不同的问题。
这些结果解释的是所提供的记录。它们不解释 Amazon 为什么选中某条报价,也不能确定一个会胜出的价格。
选择能回答你问题的那份响应
字段名叫「price」并不足以说明来源。按记录所回答的问题来选择记录:
| 问题 | 合适的证据 | 在比较中的角色 |
|---|---|---|
| 我的卖家/SKU 报告的是哪条报价? | 从 getListingsItem 显式请求的 offers,限定到站点和报价类型 | 自有报价观察 |
| 所选细分中哪条报价是 featured? | 来自 getCompetitiveSummary 的 featuredBuyingOptions,限定到 ASIN/站点 | Featured Offer 观察 |
| 价格最低的报价有哪些? | 检索指南中单独的 lowestPricedOffers 数据 | 另一个问题;不能替代 featured 数据 |
| 报告了什么外部价格参考? | 日本以外为 CompetitivePrice;日本为 CompetitivePriceThreshold | 外部零售商参考;见迁移公告 |
| 什么价格可能让我的报价成为 featured? | Featured Offer Expected Price,即 FOEP | 计算出的指导值,与观察到的报价是两回事 |
FOEP 描述的是促销前计算出的商品标价。Amazon 明确不提供 Featured Offer 保证,因为竞争报价和针对具体顾客的配送能力都可能影响选择。
自有一侧要显式请求 offers:getListingsItem 默认只返回 summaries。在关联竞争数据之前,先校验卖家/SKU 请求上下文,并把所选站点的 SKU 映射到预期 ASIN。选择适用的 B2C 报价和受众。Listings Items 模型把这些报价字段与 summary 分开存放。
仅凭这份响应并不能提供本模型所需的全部运费、会员身份和位置上下文。你的适配器需要为这些字段提供单独取证的输入。在它们已知之前,保留自有价格,但让这次小计比较保持未定论。
把可比性变成显式契约
模型接受的是规范化记录,而不是原始 Amazon 响应。它的完整案例文件展示了确切的结构。每一对记录独立于两次观察声明一个 expected_own_seller_id,然后提供来源类型、卖家、ASIN、站点、币种、成色、顾客类型、会员身份、位置、配送服务、时间戳和价格组成部分。
在把真实观察数据放入该结构之前,先做以下检查:
- 校验单条响应。 批量信封成功并不代表每个成员都成功。检查每个成员的状态、正文、ASIN、站点和请求的数据集。保留失败、缺失和不完整的观察。Pricing 模型定义了逐成员状态和可选数据集。
- 选择预期的上下文。 Featured Offer 按会员身份和区域上下文分段。可选的
sampleLocation代表该分段内的一个位置,而不是对每位购物者的精确配送报价。只保留来源真正能证实的内容。 - 保留未知的组成部分。 Pricing 的
listingPrice不含运费、Points 和促销;配送选项是可选的估算值。因此同一个模型不能为「悄悄把缺失运费当作免运费」提供理由。 - 让计算保持窄范围。 Amazon 警告返回的促销可能遗漏正在进行的促销。这个小计不含税费、Amazon Points、优惠券资格、完整的促销覆盖和配送质量。它不是结账总额。促销覆盖范围。
可执行程序检查的是规范化后的会员身份、位置和服务字符串是否严格相等。这些是受信任的标签,不是 Amazon 上下文等价的证明。它同样信任适配器给出的来源、卖家和商品标签。上下文未知时使用 null;两个编造的 unknown 字符串会制造虚假的信心。US 和 STANDARD 是实验标签,不是原始站点 ID,也不是声称的 Amazon 配送选项值。
运行模型并检查暂缓项
解压完整比较 ZIP,在包含 compare.py 的目录中打开终端,然后运行:
python3 -B compare.py
python3 -B compare.py --csv
python3 -B -m unittest -v test_compare.py不需要任何软件包或账户凭据。README 记录了契约;compare.py 和测试套件可以分别查看。把 stdout 与记录的 JSON 和 CSV 矩阵进行比较。
在默认策略下,14 个合成案例产生 3 次比较和 11 次暂缓:
| 案例 | 结果 | 解释 |
|---|---|---|
| 商品价更低,小计更高 | 比较;+2.00 | 按定义的自有小计更高 |
| 小计相等,卖家不同 | 比较;0.00,卖家标志 false | 金额一致并不能识别出你的卖家 |
| 小计相等,卖家相同 | 比较;0.00,卖家标志 true | 选定的记录识别出你的卖家 |
| 运费缺失;会员身份/位置/币种不匹配;自有卖家错误 | 五次暂缓 | 补齐缺失的证据或修正错误的关联 |
| Featured Offer 失败或缺失 | 两次暂缓 | 保留不可用的观察 |
| 用外部参考、FOEP 或最低价替代 | 三次暂缓 | 改用 Featured Offer 证据 |
| 两次观察相隔 360 秒 | 一次暂缓 | 超出默认的时间偏差策略 |
暂缓项没有计算出的小计或差距:JSON 使用 null,CSV 使用空单元格。无效输入则会让命令以非零退出码停止。要做实验,编辑一份 cases.json 的副本并传入 --cases your-cases.json;CSV 只是输出,不是输入格式。
默认的最大偏差是300 秒(含),可用 --max-skew-seconds 配置。它检查的是两次观察时间之间的距离。它既不检查绝对时效,也不检查 Amazon 的新鲜度:两条同样陈旧的记录也可以比较。在把结果用于实际运营之前,请另行选择证据时效策略。
方法: ipvolt 在 AI 辅助下准备了本分析,核对了一手来源,并于 2026 年 9 月 16 日使用 CPython 3.14.7 运行了离线模型和 14 个通过的测试。源码目标为 Python 3.11+;该次记录的运行没有在 3.11 上执行。没有测试任何卖家账户、API 响应映射或零售价格采集。
对于已提交价格与你自己观察到的商品信息不一致的情况,请参阅 Amazon 商品信息更新:已接受不等于已生效。要在商品事件之后安排持久的刷新,请使用配套的 SP-API 通知指南。在做出定价决策之前,让这次比较的结果始终附带其两次观察和所声明的小计基准。
ipvolt 仍在开发中。加入早期访问名单,在访问开放时收到一封邮件。没有别的。