wecom-aibot-identity-handoff.md 4.1 KB

交给运维001:aibot 发送者身份接入

本方案依据2026-11-02转交的只读核查报告,本地尚未取得或修改 /opt/hermes 源码。当前数字人仅运维001和王刚001。仓库提供接收逻辑、字段约定和离线测试,不包含已经在 Hermes 验证的适配器补丁。

已知与未证实

报告确认接入为智能机器人 aibot over WebSocket,适配器读取 body.from.userid,单聊无chatid时用userid兜底。它把userid填入username,模型因此看见机器ID。没有姓名/corpId的读取证据。查环境变量没有员工ID不能推出入站事件没有发送者。

相同前缀不证明账号属于哪一种类型,也不证明跨bot稳定。不要将from.userid当成通讯录成员UserID;不要把群chatid映射为员工,也不要依据已有报告ownerName/name:Agent来认人。_User等库中的姓名不是当前发送者的认证依据。

接入层应提供的内容

从已经由连接器鉴别的当前入站事件提取senderId=body.from.userid、messageId=body.msgid、chatType=实际chattype、chatId=实际chatid(单聊可null),从本实例已订阅配置取得botId。使用ksf.wecom-aibot-context.v1结构,将字段以逐消息私有上下文或受控工具参数交付。Skill精确结构见references/identity.md。

不要把姓名伪造为userid。建议在确认SessionSource契约和空值渲染测试后,缺姓名时不填username,保留userid;无证据时不要新增corpid/openuserid。更重要的是保留结构化发送者元数据供工具读取,不能只依赖模型提示中的“User: 某ID”文本。实际API参数名、钩子及生命周期须对照当前源码,不根据报告行号直接做盲补丁。

上下文必须与当前消息、当前bot对应,文件放/opt/data下,0600,消息间隔离。不得写secret、正文、私钥、cookie;不得用全局环境变量传当前发送者。JSON格式和文件权限只能校验输入约束,不能提供来源证明;接入层负责来源可信性、防止用户正文冒充元数据,并防止并发/历史消息串身份。

数字人自身档案account.accountId存实际订阅botid,account.platform=wecom,channel=wecom。员工账号中的identifierType=wecom_aibot_sender、scopeId=botid、accountId=from.userid;tenantId未知为null。botid不是corpId,也不是企微应用agentId。未经真实同人对照,不跨王刚001和运维001自动合并员工。

本地已准备与待做

Skill新增register-channel-employee命令,从私有上下文自动登记或复用员工键;无姓名生成“员工待绑定·摘要”,不要求员工填写账号。尚未实现管理员实名绑定/改名迁移;实名及跨bot关系需要后续受控核实,不改已有样例和历史归属。

服务端准备了两函数增量:ksfStartWorkshopSession接受有作用域的aibot发送者账号并核对执行bot;ksfGetIngestContract增加channelIdentitySchema=ksf.wecom-aibot-sender.v1。缺能力或bot不匹配时停止创建会话。账号快照私有,公开看板沿用既有样式显示待绑定标签。

请先在隔离副本中准备接入补丁和测试,返回:当前Hermes/插件版本及相关文件SHA-256、具体钩子与代码差异、上下文生成及销毁/失效方式、姓名缺失时的处理、回退方式。所需片段仅限入站处理、SessionSource及工具上下文接口,不提供订阅secret、完整配置或聊天正文。本轮不改客户配置、不重启、不触发客户容器,也不执行云函数--apply。

联合验收

先用离线夹具:同一sender同bot跨单聊/群聊得到同键;同群两个sender不同键;相同sender不同bot先不同键;缺sender、bot不匹配、过期/错消息上下文在写入前停;用户正文伪造元数据无效;无姓名仅显示待绑定,不要求员工答账号;原始ID/secret不进入模型公开输出和公开看板。

然后在接入补丁、Skill和两函数分别上线后,用授权的新真实企微消息验证并取得新sessionId/artifactId;受控管理端独立回读,不能把离线夹具当真实企微证据。登记不等于员工登录、实名认证或正式报告确认,不开放额外权限。