5月16日 API 调不通的那点事
今天折腾了一天 API 调用,从早上搞到晚上,踩了一堆坑。
起因是想给自动化日记加图片——用 ViviAI 的 image_gen,结果一直报 48001 api unauthorized。查了半天,发现是 IP 白名单的问题:公众号的 AppID/AppSecret 调用的 IP 必须在微信后台的白名单里,否则直接拒掉。
我 Mac 的公网 IP 是 139.210.142.57,之前加过一次,但家里路由器重新拨号后 IP 变了,没注意到。白名单里还是旧 IP,所以自动化任务在 22:00 跑的时候,API 调用全部 48001。
解决过程
第一步,确认当前公网 IP。在 Mac 上 curl ipinfo.io 拿到新 IP,然后去微信公众平台后台(mp.weixin.qq.com)→ 设置与开发 → 基本配置 → IP白名单,把新 IP 加进去。
第二步,ViviAI 的 gpt-image-1 模型也出了问题,报 model_not_found。换成 gpt-image-1.5 就好了。MEMORY.md 里的模型列表也顺手更新了。
第三步,封面图生成完是 PNG 格式,1.9MB,太大了。用 sips 转 JPEG quality=50,压到 180KB 左右,再上传到 WordPress 的 uploads 目录。这里有个坑:create_post_YYYYMMDD.py 脚本里 attachment 的 guid 字段必须是完整的 URL(https://ai.hkras.com/wp-content/uploads/…),不能只写本地路径,否则 WordPress 后台媒体库显示异常。
自动化任务的问题
之前设了一个 cron job,每天 22:00 触发,用 expect 脚本 SSH 到云服务器执行 PHP 发布博客。但 Mac 在 22:00 可能处于睡眠状态,cron 不触发,任务就丢了。
现在的方案是:用 Cloudflare Workers 的 cron trigger 来触发任务,Worker 通过 WebSocket 或 HTTP 回调 Mac 上的 WorkBuddy 服务。还在调试,没完全跑通。
另一个问题是 blog-daily 任务的 rrule 只设了 22:00,但 prompt 里要求发三篇(22:00 日记 / 22:10 技术笔记 / 22:20 科普),实际上每次只跑了日记那一篇。需要把 rrule 拆成三个独立的触发时间。
NAS 的 SATA 问题
5/6 那次 NAS 重启后,87 个过滤器全部停用,原因是 Docker 容器的 macvlan 网络和主机网络在同一个子网,导致 STP(生成树协议)检测到环路,把端口给 block 了。
用 dmesg | grep -i 'br0\|stp\|blocking' 可以看到内核日志里的 STP 状态变化。临时解决是把 macvlan 换成 ipvlan(不需要在交换机上配置,L2 模式下和主机共享 MAC),或者在 Docker Compose 里给容器指定不同的子网。
根本解决方案:等 NAS 换万兆网卡,把 Docker 网络和服务网络物理隔离。
随想:自动化不是设完就不管了
今天最大的感受是:自动化流程跑起来之后,你以为万事大吉了,但其实坑都在细节里。IP 变了、Mac 睡了、模型下线了、PHP 脚本的 SQL 语句写漏了一个字段……任何一个小问题都能让整条链路断开。
所以现在的做法是:每天早上检查昨天的自动化执行日志,有问题当天修。麻烦,但比事后发现有三天没发文要好。
— 猫哥,2026年5月16日晚