富阳说:做 1000 个 AI 工具,让每个人享受 AI 便利。
上一篇文章里,我分享了如何用 AI + CI/CD 实现 HTTPS 证书自动续期。证书可以自动检查、自动续期、自动上传,看起来已经很完整了。
但自动化系统还有一个很关键的问题:如果它失败了,谁来告诉我?
证书续期失败、GitHub Actions 跑挂、数据库备份失败、磁盘快满、定时任务没执行、AI Agent 执行异常,这些问题本身并不可怕。真正可怕的是它失败了很久,你完全不知道。
所以我现在越来越觉得,个人自动化系统里最应该优先补齐的能力,不是更复杂的调度,也不是更漂亮的面板,而是一个免费的、稳定的、足够及时的消息推送通道。
我的选择是:微信公众号测试号。
自动化最怕的不是失败,而是失败没人知道
自动化任务失败很正常。
网络可能抖动,云服务 API 可能限流,DNS 解析可能延迟,AccessKey 可能过期,GitHub Actions 可能偶发失败,脚本也可能因为一次依赖升级突然跑不起来。
这些都不是问题。真正的问题是:失败没有被及时发现。
很多个人项目的自动化链路其实是这样的:
写一个脚本
|
v
放进 crontab 或 GitHub Actions
|
v
开始自动运行
|
v
失败后静默躺在日志里
|
v
直到线上出问题才发现
自动化不应该只是“任务能自己跑”,还应该包括“任务出问题能主动找到你”。
对我来说,一个合格的自动化任务至少要满足三件事:
前两件事很容易做到。第三件事,很多个人开发者反而没有认真处理。
为什么需要免费的消息推送通道
通知这件事看起来简单,但实际选择并不多。
短信可以用,但它要钱,而且国内短信签名、模板审核、额度管理都比较麻烦。邮件也可以用,但邮件太容易被折叠或忽略,尤其是 GitHub、服务器、各种平台每天都发一堆邮件时,真正重要的失败通知很容易被淹没。
企业微信、钉钉、飞书适合团队,但对个人项目来说有点重。第三方推送服务也能用,比如一些 Server 酱、PushPlus 类工具,但你会多依赖一个中间服务,有额度、稳定性和长期可用性的问题。
我想要的是一个更简单的东西:
微信公众号测试号刚好满足这些条件。
它是微信官方提供的测试环境,不需要公众号认证,也不需要企业主体。你可以拿到 appId、appSecret,让自己的微信扫码关注测试号,然后通过模板消息接口给自己推送消息。
它不是为大规模商业通知准备的,但对个人自动化告警来说,已经足够好用。
微信公众号测试号适合做什么

测试号最适合低频、明确、面向自己的通知。
比如:
它不适合做这些事:
换句话说,微信公众号测试号不是企业级告警系统,但它是个人开发者最容易拿到的免费微信推送通道。
基本原理:四个关键参数
微信公众号测试号推送消息,本质上只需要理解四个东西:
完整流程是这样的:
进入微信公众号测试号
|
v
拿到 appId / appSecret
|
v
微信扫码关注测试号
|
v
后台获得自己的 openid
|
v
创建模板消息,获得 templateId
|
v
程序用 appId/appSecret 换 access_token
|
v
调用模板消息接口发送到 openid
这套机制的好处是足够通用。只要你能写代码调用微信接口,或者把它封装成 CLI 命令,就可以把任何自动化任务的结果推送到微信。
模板消息怎么设计
测试号需要先配置模板。一个适合自动化告警的模板可以这样设计:
{{first.DATA}}
通知类型:{{const01.DATA}}
通知内容:{{thing01.DATA}}
通知时间:{{time01.DATA}}
{{remark.DATA}}
这个模板不复杂,但已经足够覆盖大部分自动化场景。
如果消息里再带一个 URL,就可以直接从微信点到 GitHub Actions、监控面板、日志页面或管理后台。
AIC 只是一个例子:把推送封装成一条命令
我不想每个脚本里都重复写微信 API,所以把这套能力封装进了自己的云资源 CLI 工具 aic。
但这篇文章的重点不是 aic 本身。重点是这个思路:把消息推送能力封装成一条命令,然后让任何自动化任务都能调用它。
aic 的配置放在 ~/.config/aic/config.toml:
[wechat]
appId = "your_app_id"
appSecret = "your_app_secret"
templateId = "your_template_id"
配置好以后,发送一条微信通知只需要:
aic notify:send <openid> "系统通知" "这是一条来自自动化任务的测试消息"
也可以加上通知类型、备注和跳转链接:
aic notify:send <openid> \
"证书续期失败" \
"仓库: cert-auto,运行: 123" \
-t "证书告警" \
-r "请尽快处理并重试" \
-u "https://github.com/daifuyang/cert-auto/actions"
这样一来,微信推送就从“调用一堆 API”变成了“一条命令”。
命令化以后,它就可以被任何地方调用。
接入 CI/CD:失败时主动推送到微信

上一篇证书续期文章里提到的 cert-auto,现在就接入了这套通知能力。
当 GitHub Actions 执行证书续期失败时,workflow 会调用:
aic notify:send "${WECHAT_OPENID}" \
"证书续期失败" \
"仓库: ${GITHUB_REPOSITORY} 运行: ${GITHUB_RUN_ID}" \
-u "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}" \
-t "证书告警" \
-r "请尽快处理并重试"
这条消息会直接推到微信。收到以后,我可以点开消息里的链接,直接进入失败的 GitHub Actions 运行页面。
这个闭环比只看邮件舒服很多:
当然,微信推送不是替代所有告警系统。它解决的是个人项目和小型自动化任务最常见的问题:失败以后第一时间让我知道。
举一反三:任何地方都能接入
一旦通知能力被封装成一条命令,它就不再属于某一个项目。
你可以把它放进 crontab:
0 2 * * * /scripts/backup.sh || aic notify:send "$OPENID" "备份失败" "数据库备份任务执行失败"
也可以放进服务器巡检脚本:
df -h | awk '$5+0 > 85 { exit 1 }' || \
aic notify:send "$OPENID" "磁盘空间告警" "服务器磁盘使用率超过 85%"
也可以放进 AI Agent 长任务:
node run-agent-task.js && \
aic notify:send "$OPENID" "AI 任务完成" "文章分析任务已执行完成"
甚至可以把它作为统一的通知出口:
GitHub Actions
cron
PM2 检查脚本
数据库备份
服务器巡检
AI Agent
证书续期
|
v
统一通知命令
|
v
微信公众号测试号
|
v
我的微信
这就是我喜欢这个方案的原因。它不是为了某一个具体任务而设计,而是一个可以被所有自动化任务复用的基础能力。
为什么它特别适合个人开发者
团队可以上完整的告警平台,有值班表、告警分组、升级策略、静默规则。但个人开发者不一定需要这么重。
个人项目更需要的是:
尤其是现在很多人开始用 AI 做自动化任务。AI Agent 可以帮你写文章、跑脚本、整理数据、巡检服务,但如果任务结果只能躺在终端或日志里,价值会打折。
真正好用的 AI 自动化,应该是任务执行完能主动告诉你;任务失败了也能第一时间找到你。
一个小工具背后的通用模式
aic 在这里做的事情很简单:
这个模式可以替换成任何实现。
你可以不用 aic,自己写一个 Node.js 脚本、Python 脚本、Go 二进制,都可以。只要它最终能完成“接收一段文本,然后推送到微信”,它就具备同样的价值。
重点不是工具名字,而是能力抽象:通知能力应该成为自动化系统的基础设施。
总结
自动化系统最重要的不是“它能自己跑”,而是“它出问题时能主动找到你”。
微信公众号测试号提供了一个很适合个人开发者的免费推送通道。它不适合大规模商业通知,也不是完整的企业告警平台,但它足够免费、足够简单、足够及时。
aic 只是一个例子。它把微信公众号测试号的模板消息封装成 aic notify:send 这样一条命令,让证书续期、CI/CD、cron、服务器巡检、数据库备份、AI Agent 都能复用同一个微信推送能力。
当你把执行、日志、告警三件事串起来,自动化任务才真正形成闭环:
自动执行 -> 记录结果 -> 失败通知 -> 快速处理
这套能力不复杂,但非常实用。对个人开发者来说,它可能是搭建自动化系统时最值得优先补上的一块拼图。
相关项目
aic 是我用来管理云资源和消息通知的 CLI 工具,默认采用 MIT License 开源:
https://github.com/daifuyang/aic
上一篇提到的证书自动续期示例项目: