# [Bug] 飞书机器人桥多项缺陷:新话题默认 GLM-5.3 且消息处理报错 / 定时任务输出不回流飞书 / 切模型致会话绑定失效 / 会话与定时任务绑定限制无提示 **环境**:ZCode Desktop 3.14.4.7912(Windows 11 Pro 26200),飞书机器人(WebSocket 模式,中国区),GLM Coding Plan(individual),客户端全部会话默认模型已设 GLM-5.3-Flash **以下均为 2026-10-06 实测复现,含本机库表证据** --- ## A. 飞书 /new 新话题默认模型为 GLM-5.3(不遵循客户端默认),且该状态下消息处理失败 - 桌面全部会话默认模型=GLM-5.3-Flash,但飞书 `/new` 开的新话题右下角显示 **GLM-5.3**(provider=individual-coding-plan),不遵循客户端默认 - 新话题处于 GLM-5.3 时发送消息,机器人连续报:**「处理机器人回调失败:Bot 无法从目标 Host 解析 Submission 模型」**(复现 3+ 次) - 手动将该话题模型切为 GLM-5.3-Flash 后,消息处理立即恢复正常 - **期望**:新话题遵循客户端默认模型;或 5.3 下正常处理 ## B. 定时任务(cron)运行输出不回流飞书,且运行模型继承旧选择 - 通过飞书创建的每日简报 cron 任务触发后,整理结果**只输出在本地桌面会话窗口**,飞书对话侧收不到任何消息(飞书内创建,本应回流) - 定时任务运行会话使用 **GLM-5.3 大杯**(创建时所在会话已切 Flash,运行时仍用 5.3),无谓消耗大杯额度 - **期望**:定时任务输出推送回创建它的飞书对话;运行模型遵循创建时会话选择 ## C. 飞书会话内切换模型导致机器人会话绑定失效 - 在飞书会话内切换模型(多次操作)后,bot 会话绑定被清空——本机 `~/.zcode/v2/bot-state.v3.json` 实测:该 bot 的 `mode` 由 `task` 变为 `draft`、`activeTaskId` 由有效会话变为 `None` - 此后所有消息均报 A 中同样的「无法解析 Submission 模型」错误 - 重启 ZCode 客户端可恢复;但再次切模型又复发 - **期望**:切模型只更新模型选择,不破坏会话绑定 ## D. 会话与定时任务的绑定限制无前置提示 - 同一会话内创建第二个定时任务被拒;被定时任务拉起/激活过的会话也无法再创建定时任务(机制上疑似防递归,合理) - 但创建前**无任何提示**,用户只能从报错(或任务静默未建)反推——至少 3 次误踩 - **期望**:创建时明确提示「本会话已绑定定时任务/本会话由定时任务拉起,请新开会话」 --- 补充:本机库表证据(bot-state.v3.json 的 mode/task 字段变化、model_usage 表中各会话模型记录)可进一步提供。
Activity
github-actions commentedon Oct 6, 2026
👋 感谢你的反馈,我们已经收到。
status: 待评估,你可以随时补充信息。needs: 更多信息标签并 @ 你。👋 Thanks — we've received your issue.
status: 待评估(Triage); feel free to add context.needs: 更多信息and ping you.tarazum commentedon Oct 6, 2026
同一缺陷在 Telegram 桥同样复现 + 代码级根因定位(3.14.4.7912, Windows 26200)
我的环境:ZCode Desktop 3.14.4.7912(win32 10.0.26200),Telegram 机器人,GLM individual coding plan + offpeak idle plan 两个账号计划同时连接。与楼上 A/C 项完全同源:
/new之后第一条消息即报「Bot 无法从目标 Host 解析 Submission 模型」。复现时间线(本机日志)
account:zai-individual-coding-plan/GLM-5.3+thoughtLevel:"max",不带 $ 后缀,可解析)/new→ 231ms 后bot-state.v3.json的draftOptions.modelSelection被写为:{"providerId":"account:zai-individual-coding-plan","modelId":"GLM-5.3$max","options":{"reasoningLevel":"max"}}根因(反编译 app.asar 定位,附函数名)
缺陷 1:
/new把组合式模型 id 写进 draftOptions。消息处理器里
buildActiveTaskDraftOptions(注册名ct)在/new时从活动任务读取当前模型字符串provider/GLM-5.3$max,经parseBotModelOptionValue(hH)解析后$max后缀残留在 modelId 里,而模型注册表键是GLM-5.3(无后缀)。于是 draft 阶段:getView对该 selection 返回selectionIssue(模型注册表中不存在GLM-5.3$max)→ 必抛。这解释了楼上「切到 GLM-5.3-Flash 后恢复」——换模型后走的是可解析的 id。另注:buildInitializedDraftOptions(He)本身不写 modelSelection,所以只有带活动任务的/new会投毒。缺陷 2(多账号计划用户叠加触发):getView 的 account-plan 分支要求"恰好一个 current"。
getView实现(注册名Nk)开头:current缺省即视为 true(!== !1)。individual + offpeak idle 两个账号计划同时连接时l.length === 2→ 任何显式 modelSelection(哪怕 id 正确)都被拒。/model选择同样写入组合式 id,同样逃不过。缺陷 3(Telegram 特有):失败的 callback 不推进 telegramOffset,无 dead-letter。
抛错后 offset 停留在失败 update 上,getUpdates 每 ~5.3s 重新返回同一条消息,机器人每次都把错误文本回发到聊天——用户侧表现为每 5 秒一条错误刷屏,无限持续,只能进客户端手动停用机器人才能止血。远程无任何停止手段。
附带小缺陷: 手工把
bot-state.v3.json的modelSelection置为null会让整个 Bots 设置面板挂掉(Zodexpected object, received null)——schema 是modelSelection: <object>.optional(),不接受 null;本地止血只能整键删除。临时缓解
退出客户端 → 删除
bot-state.v3.json中draftOptions.modelSelection整个键 → 重启 → 重新启用机器人;在修复前不要从机器人发/new(每次都会重新投毒)。建议修复方向
parseBotModelOptionValue剥离$<level>后缀进options.reasoningLevel,modelId只留基础 id;Nk的 account-plan 分支改为"优先 selection.providerId 本身,无法匹配时才要求唯一 current",或允许 selection 显式指定计划;