前言¶
用 DSH 调阿里云百炼(Model Studio)的模型时,代金券还剩多少、哪张券最先到期,通常要切到浏览器打开控制台才能看到。更麻烦的是,百炼的模型 API Key(sk-... / sk-sp-...)没有查询余额的接口,想从命令侧拿数据没有直接通道。
下面介绍的这个插件把这件事塞进了 DSH 侧栏:底部常驻一枚徽标显示剩余金额,约 10 分钟自动刷新,点开是明细面板。它还顺手附带了 DeepSeek 峰谷时段的本地判定。
这是什么¶
插件 dsh-bailian-coupon,仓库 tagayamajin/dsh-bailian-coupon,维护者 tagayamajin。它做的事只有一件:用 RAM AccessKey 调阿里云 BSS 的 QueryCashCoupons,把代金券余额显示在 DSH 侧边栏。
打包形态是客户端 bundle(platform: web),插件市场分类为「集成与连接」。许可证 MIT,npm 版本 0.1.1,要求 Node >=20、宿主 @deepseek-ai/dsh >=0.2.1-rc.3。
核心功能¶
先列出已核实的能力,README 里没写的能力这里不加。
- 侧栏底部徽标
券 ¥xxx.xx,约 10 分钟自动刷新,点击打开详情面板。 - 详情面板:剩余总额、可用/全部张数、每张券的面值/余额/到期时间/状态、控制台链接。
- 设置页:填 RAM AccessKey ID / Secret、刷新间隔,支持「保存并查询」。
- 面板内直接配置:未配置时点开徽标,面板里出现
AccessKey ID/AccessKey Secret两个输入框,不必先绕进设置页。 - DeepSeek 峰谷时段:徽标右侧圆点 + 详情面板顶部显示当前处于峰时还是谷时,峰时红色、谷时绿色,并给出「下次切换」倒计时。
它是怎么取到数据的¶
模型 API Key 查不了余额,控制台之外唯一被 README 记录的官方途径是 BSS OpenAPI 的 QueryCashCoupons,Version 2017-12-14,RPC 风格,HMAC-SHA1 签名,请求形如:
GET https://business.aliyuncs.com/?Action=QueryCashCoupons&Version=2017-12-14&...
返回的 Data.CashCoupon[] 中,Balance 是该券剩余金额,NominalValue 是面值。插件只统计 Status === "Available" 的券为「剩余可用」,并按 nearestExpiry 找出最近到期时间。因为 BSS 需要 RAM AccessKey 而不是模型 Key,所以首次使用要填一把只读的 RAM 用户 AK/SK。
凭据也可以用环境变量提供,优先级高于设置页:
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "LTAI..."
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "..."
最小权限¶
给该 RAM 用户附加只读策略 AliyunBSSReadOnlyAccess,或用自定义策略:
{
"Version": "1",
"Statement": [
{ "Effect": "Allow", "Action": ["bss:DescribeCoupons"], "Resource": "*" }
]
}
设置页里的「包含现金余额」开关会额外调用 QueryAccountBalance,需要 bss:DescribeAcccount;不开也能正常看券余额。README 建议单独建一个只读 RAM 用户专供本插件使用。
安装¶
推荐从 npm / 插件市场安装,包名 dsh-bailian-coupon,版本 0.1.1:
dsh plugin --profile web add dsh-bailian-coupon
也可以直接从 GitHub 仓库安装,要求本机装有 Git:
dsh plugin --profile web add github:tagayamajin/dsh-bailian-coupon
github:规格由包管理器用git ls-remote解析,需要本机有git。没装 Git 或 github.com 直连不稳定时用下面的本地安装。
装好后要重启 DSH,宿主只在启动时扫描插件。重启后侧栏 Settings 上方出现 券 未配置 徽标,点开徽标,在面板里填 RAM AccessKey ID / Secret,点「保存并查询」;也可以在「设置 → 插件 → 百炼优惠券」里填。首次查询成功后徽标变成 券 ¥300.00(README 里的示例值)。
桌面版 profile 由桌面应用独占,命令行 dsh plugin --profile desktop add 会被拒绝,必须从 GUI 安装,路径是「设置 → 插件市场 → 本地安装 / 从路径安装」,选中本仓库目录。link 安装即可,改代码后重启生效。
没装 Git 时,下载源码包解压再本地安装:
$zip = "$env:TEMP\dsh-bailian-coupon.zip"
Invoke-WebRequest -Uri "https://github.com/tagayamajin/dsh-bailian-coupon/archive/refs/heads/main.zip" -OutFile $zip
Expand-Archive -Path $zip -DestinationPath "$env:USERPROFILE\dsh-plugins" -Force
# 解压目录:$env:USERPROFILE\dsh-plugins\dsh-bailian-coupon-main
接着是「设置 → 插件市场 → 从路径安装」选解压后的目录,然后重启 DSH Desktop。
配置项¶
| 键 | 默认 | 说明 |
|---|---|---|
accessKeyId |
— | RAM AccessKey ID,形如 LTAI... |
accessKeySecret |
— | RAM AccessKey Secret,保存后只显示掩码;留空保存表示不修改 |
refreshMinutes |
10 |
自动刷新间隔,1–1440 分钟 |
includeCashNote |
false |
是否附带查询现金余额 QueryAccountBalance,仅作附注 |
endpoint |
business.aliyuncs.com |
BSS 端点,一般不用改 |
holidays |
内置 2026 年表 | 追加节假日 ["YYYY-MM-DD", ...],用于 2027 年等未内置年份 |
replaceHolidays |
false |
为 true 时用 holidays 完全替换内置节假日表 |
凭据保存在插件目录的 .state/config.json,权限 0600,不提交、不打印。环境变量存在时以环境变量为准,设置页会显示 envLocked 提示。
DeepSeek 峰谷时段¶
DeepSeek API 计费分峰谷,高峰时段单价为谷时的 2 倍,谷时是峰价的一半。插件在徽标与详情面板显示当前时段,规则如下(北京时间):
| 时段 | 颜色 | 规则 |
|---|---|---|
| 峰时 | 红色 #dc2626 |
周一至周五 09:00–12:00、14:00–18:00,法定节假日除外 |
| 谷时 | 绿色 #15803d |
其余全部时间(夜间、午休、周末、法定节假日) |
规则在客户端本地计算,北京时间固定 UTC+8,不依赖系统时区,也不额外发请求;每 30 秒自动重算一次,跨过 09:00/12:00/14:00/18:00 时会自动变色。面板会给出「下次切换」的准确时间,例如「下一次切换 2026-11-05 09:00 周四 → 峰时(558 分钟后)」。内置 2026 年法定节假日表与调休安排;2027 年放假安排公布前可用 holidays 补充,未内置年份按「仅周末」计算并提示 holidayDataAvailable: false。
本机 HTTP 接口¶
插件在回环地址上提供几个接口,非回环请求返回 403,所有响应带 cache-control: no-store,不含 Secret。
| 方法 | 路径 | 作用 |
|---|---|---|
GET/HEAD |
/api/dsh-bailian-coupon/overview |
当前余额,TTL 缓存,正常 10 分钟内不重复请求 |
POST |
/api/dsh-bailian-coupon/refresh |
强制刷新 |
GET/HEAD |
/api/dsh-bailian-coupon/peak |
DeepSeek 峰谷时段状态,本地规则计算,不请求阿里云 |
GET/HEAD |
/api/dsh-bailian-coupon/config |
配置状态,AK 已掩码 |
POST |
/api/dsh-bailian-coupon/config |
保存配置,{accessKeyId, accessKeySecret, refreshMinutes, includeCashNote, endpoint},{clear:true} 清空凭据 |
适用场景与注意¶
适合已经在用 DSH 调百炼、且代金券消费较快、需要频繁确认余额的场景。想把它接到 CI 或脚本里做额度检查时,可以直接用上面的 /overview 接口。
要留意几件事:
- 插件以当前 DSH 进程的权限运行,会用你填的 RAM AccessKey 访问 BSS。安装前应读一遍源码,确认
cordis.patch.yml的插入点和lib/下的实现,并核对许可证(MIT)。 - 它只调用
QueryCashCoupons,可选附带QueryAccountBalance;不读取 DSH 里保存的模型 API Key,也不向第三方发数据。 - 余额显示
¥0.00且列表为空时,可能该券不是代金券(储值卡等不在此接口),需要去优惠券控制台筛选「代金券」确认。 - 常见报错的排查方向:
InvalidAccessKeyId多为 AK ID 填错或已删除;SignatureDoesNotMatch多为 Secret 填错或本机时间偏差过大(签名有效期 31 分钟);NotAuthorized/NoPermission说明 RAM 用户缺bss:DescribeCoupons;Throttling时把refreshMinutes调大。