← 听不懂

openclaw-lark 插件升级后 open_id 变更导致所有 cron 消息发送失败

2026-03-16 运维 openclaw-larkopen_id飞书插件升级

问题描述

升级 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

我这次受影响的文件:

共 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 触发才发现问题