升级 openclaw-lark 插件后,所有发飞书消息的 cron 任务开始报错:
99992361 open_id cross app
任务本身逻辑没变,飞书账号没变,就是升了个插件,消息全挂了。
飞书的 open_id 是应用级别的用户 ID。同一个用户,在不同飞书应用(AppID)下对应不同的 open_id。
openclaw-lark 升级时换了新的 AppID,导致插件拿到的 open_id 从旧值(如 ou_629bf94d...)变成新值(如 ou_bcb32a45...)。而代码里硬编码的还是旧 ID,飞书 API 拒绝:「这个 open_id 不属于你的 App。」
错误码 99992361 就是这个意思——跨应用使用了别的 App 的 open_id。
# 找出所有硬编码了旧 open_id 的位置
grep -r "ou_629bf94d" ~/.openclaw/ --include="*.json" --include="*.env" --include="*.sh" -l
# 确认新 open_id 是什么
# 在 OpenClaw 对话里问:"我的飞书 open_id 是多少"
# 或调用飞书 API:GET /open-apis/contact/v3/users/me
我这次受影响的文件:
~/.openclaw/cron/jobs.json(14 处)~/.openclaw/.env(1 处)scripts/notify.sh(3 处)config/feishu.json(1 处)共 19 处,全部硬编码。
批量替换(sed):
OLD_ID="ou_629bf94d12345678"
NEW_ID="ou_bcb32a45abcdef12"
# 替换所有 json 文件
find ~/.openclaw -name "*.json" -exec sed -i "s/${OLD_ID}/${NEW_ID}/g" {} \;
# 替换 .env
sed -i "s/${OLD_ID}/${NEW_ID}/g" ~/.openclaw/.env
# 替换脚本
find ~/.openclaw -name "*.sh" -exec sed -i "s/${OLD_ID}/${NEW_ID}/g" {} \;
# 验证没有遗漏
grep -r "$OLD_ID" ~/.openclaw/ 2>/dev/null | wc -l
# 应该输出 0
把 open_id 抽成环境变量,永远不要硬编码:
# ~/.openclaw/.env
FEISHU_USER_OPEN_ID=ou_bcb32a45abcdef12
// jobs.json 里引用环境变量
{
"name": "daily-report",
"target": "${FEISHU_USER_OPEN_ID}"
}
下次升级插件,只需要改一处 .env,所有引用自动更新。
升级插件前的 checklist:
1. 确认新旧版本是否换了 AppID(看 CHANGELOG 或问作者)
2. 如果换了,先拿到新 open_id 再升级
3. 升级后立即跑冒烟测试,不要等 cron 触发才发现问题