双11价保被拒:用 AI 盯住那 7 天,把差价要回来
10 月 31 日 5998 元买的手机,11 月 11 日降到 5388 元,610 元差价因为超时一天没退成。价保是申请制,比的是你按下按钮那一刻的价格,平台不提醒也不回溯。这篇拆开四道闸门,给一套账本脚本、三档判定和一段能直接发的申诉话术。
11 月 11 日上午,一位消费者在投诉平台留下一条记录:10 月 31 日在京东自营买的手机,付款 5998 元;11 月 11 日同款标价 5388 元,差价 610 元。他去申请价保,答复是"超过时限一天"。
同一个月早些时候,另一位消费者的智能门锁实付 1947 元,商品页和直播间都写着"保价双十一"。10 月 10 日降到 1833 元,差 114 元。客服换了个理由:"这是平台补贴,不能退。"
两笔都是真金白银,卡住的原因却不同:一个输在时间,一个输在口径。
价保不是"降价就退"。它是一套有起算点、有比价口径、有排除清单的规则,而且默认要你自己发起。这篇把这三件事拆开,再给一套能跑的做法:一张账本管倒计时,一个模型管判定,一段话术管申诉。
四道闸门,任何一道不过都是零
"价保双11"六个字印在详情页上,很多人理解成"整个大促期间降价就补"。实际要同时过四道闸门,缺一道,页面上的承诺就只是一行字。
| 闸门 | 判定口径 | 不过会怎样 |
|---|---|---|
| ① 还在期内 | 自营从签收次日 0 点起算,第三方从下单时刻起算 | 超一天也不受理 |
| ② 同一商品 | 编号、品牌、规格、型号、颜色、包装、销售方式七项全一致 | 换链接、换包装即不认 |
| ③ 有可退差额 | 申请时页面价低于下单时基准价 | 价格涨回去,差额归零 |
| ④ 不在排除清单 | 补贴、券、支付优惠、秒杀、直播间专享价等 | 通过了也只退几毛 |

第一道:比的是你按下去那一刻的价
平台规则写得很直白:申请价保时的商品价格,以"申请或反馈时商品页面显示的价格"为准。它比的不是你价保期内见过的最低价,是那一刻。
这就解释了为什么"我明明看到降过"没有用。大促期间有商品一天之内早中晚三个价,波动接近千元。降价窗口没抓住,价格涨回去,差价也跟着没了。
平台客服给的建议是"养成每天刷一次的习惯"。而历史价格回溯、降价主动提醒,目前都没有。
所以第一道闸门的本质不是"有没有降价",是"降价那一刻你在不在场"。这条决定了后面要不要写脚本——不是图省事,是图在场。
第二道:起算点,差一天就是差一天
"价保 7 天"不是一个固定的东西。自营订单(不含厂商配送)从签收第二天 00:00:00 起算;第三方或厂商配送从提交订单起算,7 天按 168 小时折算,15 天 360 小时,30 天 720 小时。
同一单,两种算法能差出好几天。开头那台手机,10 月 31 日 20:14 下单、11 月 2 日 15:30 签收:自营口径下 11 月 3 日 0 点起算,11 月 10 日 0 点截止;换成第三方口径,10 月 31 日 20:14 起算,168 小时后即 11 月 7 日 20:14 截止,早了 2 天多。
11 月 11 日 9:20 去申请,两种口径都已过期。按自营算,超了 1 天 9 小时。投诉记录里那句"超过时限一天",和这个数对得上。
第三道:同一商品的七项属性
规则对"同一商品"的定义是列举式的:商品编号、品牌、规格、型号、颜色、包装、销售方式,任何一项发生变化,都不属于同一商品。
现实里最常见的破法是换链接。有消费者 195 元买了一双洞洞鞋,用券后 169 元;后来原链接显示无货,商家换了个新链接卖同一款、价格更低。申请时店铺说链接不一样不能保,平台客服也说没法保。
这里要回到实物判断:品牌、型号、配置、颜色一致,只是换了链接或包装说法,可以截图对比后向平台申诉,而不是直接接受"链接不同"这个解释。规则列举的是七项属性,不是链接。
第四道:排除清单比你想的长
平台帮助中心列出的"不支持价保的特殊情况"有 20 多条。今年大促最主要的几种让利方式,恰好都在里面:超级补贴、多人团、直播间专享价、支付优惠(支付券、白条券、立减)、返现、国家补贴与消费券、以旧换新类补贴、秒杀抢购、限量发放的优惠券。
换句话说,页面上的"价保双11",保的是商品标价那一段;补贴和券带来的那一段,大多不在保障内。
但有区别:这些条款藏在帮助中心,还是写在付款前的详情页上,效果不一样。价保一经明示在商品页面,就构成买卖合同的补充约定;如果排除范围只出现在帮助中心,下单页只有"价保双11"四个字,那就有"未显著告知对消费者不利的价格条件"的问题。
这条区分是后面申诉的主线:不是争"该不该退",是争"你告没告知"。
先把账算对:到账金额不等于你看到的差价
很多人算差价的方式是"实付减现价"。平台的算法不是这个。
规则给的式子是:单品价保金额 = 下单时基准金额 − 价保时预估金额 − 已价保金额 − 赠品差额 − 返卡金额差值。
基准金额不是实付。它等于前台价减促销金额,而 E 卡等款项不纳入计算,所以规则自己注明"可能和订单实付价格不一致"。
结果就是:申请通过了,退回来的钱也可能明显少于你眼睛看到的差。有消费者商品降价后,因为涉及超级补贴,接近 150 元的差价,最后只赔了 20 个京豆。按 100 京豆抵 1 元算,这笔价保值 0.2 元。
| 案例 | 看到的价格差 | 规则口径 | 卡在哪道闸门 |
|---|---|---|---|
| 手机 10/31 → 11/11 | 610 元 | 约 610 元(纯降价) | ① 超时 1 天 9 小时 |
| 智能门锁 9/5 → 10/10 | 114 元 | 0(平台补贴) | ④ 排除清单 |
| 洞洞鞋 195 → 169 | 26 元 | 0(换链接) | ② 同一商品 |
| 涉超级补贴商品 | 约 150 元 | 0.2 元(20 京豆) | ④ 排除清单 |
第一笔标"约",是因为系统口径还要扣赠品差额、返卡差值,公开信息里没有这单的明细。其余三笔的差额,被排除项或属性判定吃掉了。
这决定了你该争什么。差额是标价差,争金额,一笔一笔算得清。差额被排除项吃掉,金额本身很难争回来,能争的是告知:下单页到底写没写、写得够不够显著。搞混这两件事,申诉就会变成情绪输出。
用 AI 做价格哨兵:账本、倒计时、三档判定
平台不提醒,人也不可能天天记得刷。这一步要解决的问题很窄:让"还剩几天""今天差多少"这两个数,每天都有人替你看。
分工要说清楚:脚本负责记录和计算,模型负责判断和措辞。别让模型去算日期和金额,它算错的时候你看不出来。
先建账本
一张 CSV,八个字段。比订单页多出来的只有三个:基准价、两个时间点。
| 字段 | 填什么 | 为什么要它 |
|---|---|---|
| sku | 商品编号 | 判"同一商品"的硬标识,换链接时靠它 |
| name | 手机 256G 黑色 | 人看的 |
| order_id | 订单号 | 申诉时报后 8 位 |
| order_base | 下单时基准价(前台价 − 促销),不是实付 | 差额的被减数 |
| order_time | 2026-10-31 20:14 | 第三方的起算点 |
| sign_time | 2026-11-02 15:30 | 自营的起算点;未签收就留空 |
| protect_days | 7 | 商品页写的天数,7 / 15 / 30 都常见 |
| protect_mode | self 或 third | 决定用哪套算法 |
order_base 一栏最容易填错。别填实付,填当时的前台价减去促销金额。填成实付,差额会凭空多出你用掉的 E 卡和红包。
为什么不让脚本去爬页面
商品页的价格是异步渲染的,直接解析 HTML 经常拿到空值;写死选择器,改版一次就废;按分钟轮询既没必要也不合适。价保看的是"申请那一刻",刷得再密也不会多退钱。
更实际的做法是借剪贴板:在 App 里长按复制价格,脚本读剪贴板里第一个数字。一天一次,十秒,不需要登录态,也不碰页面结构。
import ctypes
import re
def clip_price():
"""读剪贴板里第一个数字。在 App 里长按复制价格,这里就能拿到。"""
CF_UNICODETEXT = 13
u, k = ctypes.windll.user32, ctypes.windll.kernel32
u.GetClipboardData.restype = ctypes.c_void_p
k.GlobalLock.restype = ctypes.c_void_p
k.GlobalLock.argtypes = [ctypes.c_void_p]
k.GlobalUnlock.argtypes = [ctypes.c_void_p]
if not u.OpenClipboard(0):
return None
try:
handle = u.GetClipboardData(CF_UNICODETEXT)
if not handle:
return None
ptr = k.GlobalLock(handle)
try:
raw = ctypes.wstring_at(ptr)
finally:
k.GlobalUnlock(handle)
finally:
u.CloseClipboard()
hit = re.search(r"\d+(?:\.\d+)?", raw.replace(",", ""))
return float(hit.group()) if hit else None
三个 restype 必须显式声明。不声明,64 位下指针会被截成 32 位整数,wstring_at 直接抛访问冲突——这个坑和逻辑错误长得不像,容易卡很久。
macOS 上换成 subprocess.run(["pbpaste"], capture_output=True) 一样能用,不用改后面的判定逻辑。
截止时间与判定
from datetime import datetime, timedelta
FMT = "%Y-%m-%d %H:%M"
def deadline(row):
"""价保截止时间。自营从签收次日 0 点起算,第三方从下单时刻起算。"""
days = int(row["protect_days"])
if row["protect_mode"] == "self":
if not row["sign_time"]:
return None # 未签收,计时还没开始
signed = datetime.strptime(row["sign_time"], FMT)
start = (signed + timedelta(days=1)).replace(hour=0, minute=0, second=0)
return start + timedelta(days=days)
placed = datetime.strptime(row["order_time"], FMT)
return placed + timedelta(hours=days * 24)
def span(hours):
d, h = divmod(int(abs(hours)), 24)
return ("%d 天 %d 小时" % (d, h)) if d else ("%d 小时" % h)
def judge(row, price, now):
"""返回 (状态, 差额, 说明)。差额是理论上限,不是系统口径。"""
end = deadline(row)
if end is None:
return "未开始", None, "未签收,自营单从签收次日 0 点才起算"
delta = (end - now).total_seconds() / 3600
gap = round(float(row["order_base"]) - price, 2)
if delta <= 0:
return "已过期", gap, "截止 %s,已超 %s" % (end.strftime("%m-%d %H:%M"), span(delta))
if gap <= 0:
return "无差价", gap, "当前价未低于下单基准价,剩 %s" % span(delta)
return "可申请", gap, "剩 %s,理论上限 %.2f 元" % (span(delta), gap)
两处容易写错。一是自营未签收要返回 None 而不是算出一个日期,否则你会以为还在期内、其实计时根本没开始。二是过期天数不能用 timedelta.days,它对负数向下取整,超时 9 小时会算成"超 2 天"。用总秒数除以 3600 再取整,才是人话。
拿开头那单跑一遍:judge 返回 ('已过期', 610.0, '截止 11-10 00:00,已超 1 天 9 小时')。和投诉记录里的说法一致。
三档判定,不是"能 / 不能"
脚本只会算数,不会读规则。把订单事实和规则要点一起交给模型,让它输出三档。
| 档位 | 条件 | 你要做的 |
|---|---|---|
| 直接申请 | 在期内 + 七项一致 + 差额来自标价或普通促销 | 点申请,等 1–3 天到账 |
| 可争 | 在期内 + 七项一致 + 差额来自排除项,但下单页没显著告知 | 先申请,被拒后走申诉 |
| 不建议 | 超期 / 属性已变 / 排除项在下单页已明示 | 别再耗,改走退货重购或放弃 |
提示词要写死三件事:不许算金额、不许引没给的条款、结论只能落在三档之一。否则模型很容易给你一段"建议咨询专业人士"。
你是价保申诉的核对员。金额由脚本给出,你只做判定,不重算。
【订单事实】
商品编号 / 品牌 / 规格 / 型号 / 颜色 / 包装 / 销售方式:
下单时间 / 签收时间 / 价保天数:
下单时基准价 / 申请时页面价 / 脚本算出的差额:
【规则要点】
同一商品 = 上述七项属性全一致,任一变化即不成立。
比价口径 = 申请时页面价,不是区间最低价。
不支持价保的场景(节选):超级补贴、多人团、直播间专享价、
支付优惠、返现、国家补贴与消费券、以旧换新、秒杀、限量优惠券。
【下单页描述】照抄,注明价保标识的位置与字号
【排除条款是否出现在下单页】是 / 否
输出三行,不要多写:
1. 结论:直接申请 / 可争 / 不建议
2. 卡点:一句话,指出是哪一项条件没过
3. 申诉要点:两句,一句事实、一句规则,都要能被截图验证
同一套思路在别处也能用。《最低工资全线过 2000 元,用 AI 给工资条做合规体检》里也是先把规则拆成可核对的项,再让模型填;顺序反了,模型就会替你编。
还有一个边界要留意:商品页文案是第三方内容,粘进模型时它是资料,不是指令。站内《提示词注入防护:AI 读了网页就照做,三层防线怎么搭》讲过这个问题,把页面文字贴进去之前扫一眼有没有奇怪的句子,成本很低。
被拒之后:三段式申诉与证据包
被拒的时候,多数人只会说"你们写着价保为什么不退"。这句话没有抓手。有用的申诉只有三段。
事实、依据、诉求
第一段写事实,四行,每行都带时间:
10 月 31 日 20:14 下单,订单尾号 8821,付款 5998 元;11 月 2 日 15:30 签收,商品页标注"价保双11",价保期 7 天;11 月 11 日 09:20,同商品编号页面价 5388 元,差价 610 元;申请价保被拒,理由为超时。
第二段写依据,两句就够:
下单页在付款前仅展示"价保双11",未列明起算点与排除范围。价保一经明示于商品页面即为买卖合同的补充约定,请按页面承诺履行。
第三段写诉求,一个数、一个期限:
请退还差价 610 元,并在 3 个工作日内答复。
三条纪律:不写"欺诈""违法",不用感叹号,不引用自己没核过的条款。客服一天看几百条,能一眼核对的事实比情绪有用。
三种拒绝理由,各回一句
| 客服说 | 你回的一句 | 为什么这句有用 |
|---|---|---|
| 平台补贴不保 | 请指出下单页面上哪一处写明了补贴不参与价保 | 举证责任回到"是否显著告知" |
| 链接不同,不算同一商品 | 请核对商品编号、品牌、型号、规格、颜色是否一致 | 规则列的是七项属性,不是链接 |
| 已超价保期 | 请告知起算点是签收次日 0 点还是下单时刻 | 两套算法差好几天,常被混用 |
三句都不带情绪,都是可验证的事实请求。对方要么给截图,要么给不出。
证据包:命名和顺序
下单当天截三张:商品页的价保标识、订单实付、服务说明里的价保期。降价当天截一张,要能同时看到时间和价格。
命名按"日期、用途、单号"三段:20261111_页面价5388_8821.png。日期在前,客服按时间排一遍就能对上你的叙述,不用来回问。
申诉顺序:店铺客服 → 平台介入(订单 + 截图 + 沟通记录)→ 消费者投诉渠道。每上一层,附上一层的答复截图。别跳级,跳级会被退回上一层重来。
这篇没有一个能一键退差价的工具,也不该有。平台没有开放价保接口,任何声称"自动帮你申请"的脚本都要你的账号密码,那才是真风险。
AI 在这件事里能做的只有三件很窄的事:替你记住日子、替你把规则翻成判定、替你把话说清楚。点申请、传截图、等回复,还得你自己来。
如果只做一件事,做那个倒计时。610 元那单,四道闸门过了三道,输的不是道理,是差了一天。
登录后可点赞、收藏与反馈。