电脑不开机 WorkBuddy 自动签到
这个技能解决什么问题
市面上大多数「自动签到」方案都假设电脑开着、程序开着,帮你省掉一次点击。
但真实场景里更多的是:国庆放假八天没碰电脑、出差在外、公司电脑关机。
本技能把签到搬到云端(或任何能定时执行的服务器),电脑关机也能签。
核心原理
签到凭证(token)
├── 平时:存在你电脑的 WorkBuddy 客户端里
└── 配置时:加密后存到云端
↓
云端每天 07:00 自动调签到接口
↓
发邮件 / Webhook 通知你
密钥加密后存储,云端只存密文。签到逻辑本身只依赖 Node 18+ 原生 fetch,不含任何云厂商 SDK,所以同一份代码可以挂在任何平台。
何时使用本技能
- 用户说「放假没开电脑,签到断了」
- 用户出差/旅行期间希望继续签到
- 用户想用手机或远程电脑查看签到结果
- 用户抱怨「每天要记得手动点一下」
不适用:用户只在自己电脑上用、不在意关机期间(这种情况本机定时任务就够,不需要云)
执行流程
第 0 步 · 确认前提
确认以下三点,不满足就直接告诉用户:
- 用户已登录过 WorkBuddy 客户端(本技能需要从会话中取登录凭证)
- 用户有一个托管平台(GitHub 账号 / Cloudflare 账号 / 任意云资源 / 闲置机器,任选其一)
- 用户接受「凭证会以密文形式存到第三方平台」这一点
第 1 步 · 帮用户选平台
向用户介绍五个选项,让用户自己选。不要替用户做决定。
| 平台 | 适合谁 | 一句话介绍 |
|---|---|---|
| GitHub Actions | 大多数人的首选 | 免费、5 分钟配好、只需粘贴两次。适合不想折腾的人 |
| Cloudflare Workers | 在意国内访问稳定性 | 完全免费、国内节点稳、自带 KV 可存历史记录。注册需境外卡验证 |
| Vercel | 已有 Vercel 项目 | 免费额度每天 1 次触发,恰好够用。适合已有生态的用户 |
| 自己的云 | 已有云资源 / 需要多用户托管 | 配置最自由,可以加自定义逻辑。沉没成本已付,适合深度用户 |
| 本机 / NAS 常驻 | 有闲置硬件 | 完全不依赖云,只花几块钱电费。但需要一台设备保持开机 |
推荐话术:
> 你有 GitHub 账号吗?有的话 5 分钟就能配好,先从这个开始?
> 如果你已经在用腾讯云或阿里云,也可以直接绑自己的云,配置最自由。
选完平台后,读 references/platform-setup.md 里对应章节,照步骤引导用户操作。
第 2 步 · 生成凭证密文与密钥
在会话内执行生成器:
node generators/init.js --platform=<用户选择的平台>
生成器会:
1. 从当前 WorkBuddy 会话读取登录凭证(读不到会提示用户重新登录)
2. 用 crypto.randomBytes(32) 生成随机 AES 密钥
3. 用 AES-256-GCM 加密凭证
4. 输出该平台所需的配置文件内容 + 密钥/密文,供用户粘贴
> 安全约束:生成器只在内存中处理凭证,输出里只有密文,绝不打印明文。
第 3 步 · 引导用户完成平台配置
把生成器输出的内容交给用户,按平台文档里的步骤让用户操作。
关键提醒:
- 密钥不要贴到聊天工具、截图、公开仓库
- 建议单独建一个私有仓库放签到脚本
- 明确告知这是非官方功能,风险自负
第 4 步 · 验证
让用户在平台上手动触发一次,告诉他怎么看结果:
| 结果标识 | 含义 |
|---|---|
status: ok |
签到成功 |
status: already / code=10001 |
今日已签过(幂等成功,正常) |
status: auth / code=401 |
凭证失效,需重新生成密钥和密文 |
status: transient |
网络问题,核心层已内置 2 次重试,失败会等次日自动重跑 |
第 5 步 · 提醒令牌有效期
令牌有效期约 28-30 天,刷新令牌约 30 天。
告诉用户:如果连续 30 天不开机/不触发任何自动化,需要重新跑一次生成器更新凭证。
常见问题速查
| 用户问 | 回答 |
|---|---|
| 我没有云资源怎么办 | 任何一个都行,GitHub / Cloudflare / Vercel 都有免费额度,且都免费 |
| 这安全吗 | 凭证以 AES-256-GCM 密文存储,密钥在你手里,云端只存密文。但仍是第三方平台,风险自负 |
| 会不会违反服务条款 | 可能会,请自行评估账号风险 |
| 会不会被刷积分 | 单账号每天一次签到,无刷量逻辑 |
| 会不会影响账号安全 | 不会额外调用其他接口,只调签到 |
| 令牌失效了怎么办 | 重新跑 generators/init.js 重新生成,更新平台上的 Secret |
| 忘记密码/换电脑了 | 在新电脑上登录 WorkBuddy,重新跑一次生成器即可 |
参考资料
references/platform-setup.md— 五个平台的完整分步部署文档 + 排障表references/pitfall-token-not-in-file.md— 新版客户端 token 位置的排查记录core/— 通用核心层(零云依赖,任何 Node 18+ 环境可跑)core/selftest.js— 自检脚本,验证加解密与核心逻辑
目录结构
computer-off-workbuddy-auto-checkin/
├── SKILL.md ← 本文件
├── core/ ← 通用核心层(零云依赖)
│ ├── index.js
│ ├── crypto.js ← AES-256-GCM 加解密
│ ├── api.js ← 腾讯签到接口客户端 + 结果分类
│ ├── checkin.js ← 编排层(依赖注入接存储/通知)
│ └── selftest.js ← 自检脚本
├── generators/
│ ├── init.js ← 部署配置生成器(5 个平台)
│ └── validate.js ← 上架前自检(对照官方规范逐字段校验)
├── references/
│ ├── platform-setup.md ← 五个平台完整部署文档
│ └── pitfall-token-not-in-file.md ← token 位置排查
└── assets/ ← 预留(图标等)
设计约束(改动本技能时必须遵守)
- 核心层零云依赖 —
core/目录不引入任何云厂商 SDK、任何数据库驱动、任何第三方依赖。 - 存储与通知通过依赖注入 — 由调用方传入
storage和notify接口,同一份核心可挂任意后端。 - 密钥必须随机生成 — 用
crypto.randomBytes(32),绝不用固定值或时间戳。 - 凭证绝不落盘明文 — 所有处理只在内存中完成,输出只含密文。
- 结果分类语义固定 —
ok / already / auth / transient / business五类,不可增减。 - 幂等以
code=10001为准 — 不用checkin-status的today_checked_in字段(该字段不可靠)。