dsh-bailian-coupon: View Aliyun Bailian Voucher Balance in DSH Sidebar

前言

用 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 里没写的能力这里不加。

  1. 侧栏底部徽标 券 ¥xxx.xx,约 10 分钟自动刷新,点击打开详情面板。
  2. 详情面板:剩余总额、可用/全部张数、每张券的面值/余额/到期时间/状态、控制台链接。
  3. 设置页:填 RAM AccessKey ID / Secret、刷新间隔,支持「保存并查询」。
  4. 面板内直接配置:未配置时点开徽标,面板里出现 AccessKey ID / AccessKey Secret 两个输入框,不必先绕进设置页。
  5. 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 调大。

目录页与仓库

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye