[Bug] 飞书定时任务通知窜台:通知始终从苹果发出而非Agent对应的机器人 #37
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题描述
用户在飞书通过灵犀(或其他机器人)设置的定时任务,到时间后执行结果通知始终从「苹果」发出,而非从创建任务的机器人发出("窜台"现象)。
现象链路
code=99992361 msg=open_id cross app→ 失败feishu_open_id是苹果的)根因分析
飞书 open_id 机制
飞书的
open_id是按应用隔离的。同一个用户在不同飞书应用中拥有完全不同的 open_id。但飞书的union_id在同一租户下跨所有应用相同,可用于跨应用识别用户。代码根因(两层)
第一层:存储结构缺陷
users表只有一个feishu_open_id字段,存储的是苹果应用下的 open_id第二层:跨应用关联缺失
union_id,导致苹果记录中union_id=NULLuser_id=NULL(未关联),通知时查找不到影响范围
所有非苹果的飞书机器人(灵犀/橙子/苏瑶/甜甜)的定时任务通知都会窜台到苹果。
修复方案
1. 新建多应用 open_id 映射表
2. WS Handler 自动捕获与关联
所有 5 个飞书 WS handler 收到用户消息时自动捕获 open_id + union_id,通过
resolve_user_and_save()自动识别用户并保存关联。3. 通知路由改用 per-app open_id
notify_schedule_result改为先查该用户在此应用下的专属 open_id,找到则用对应应用发送;未找到则回退苹果。4. 绑定流程增强
绑定苹果时同步调用飞书 Contact API 获取并存储
union_id,使跨应用自动关联成为可能。涉及文件(10个)
严重程度
中等 — 功能可用但通知来源错误,影响多机器人场景下的用户体验。
测试验证