开发指南组织级基础能力
身份映射与权限
区分调用者、接收人、平台用户与外部渠道账号,正确使用 Runtime 授权和渠道用户绑定。
组织能力调用中,执行操作的人、接收消息的人和外部系统中的账号可能不同。参数中填入目标用户,不会授予调用者代表该用户执行的权限。
身份各自表示什么
| 身份 | 含义与来源 |
|---|---|
| 当前执行用户 | 由已认证调用入口建立,决定本次操作的访问权限。 |
工作区成员 userId | 来自成员目录,表示业务目标用户。 |
消息参数 internalUserId | 接收人的百积木用户 ID;按目标发送方法要求传递。 |
channelUserId | 渠道实例内的外部账号,由真实入站身份及已启用绑定确认。 |
channel | 渠道方法要求的真实渠道实例标识,从目录读取。 |
sessionKey | 渠道侧产生的外部会话键,作为不透明字符串使用。 |
sessionId | 内部 Agent 会话 ID,与外部会话键含义不同。 |
不同方法可能分别要求整数用户 ID 或字符串用户 ID。按照当前 methodDefinition 转换类型,不把姓名、手机号、企微用户 ID 当作百积木用户 ID。
调用权限与接收人绑定
发给同事的消息参数可以指向该同事,但执行身份仍来自本次调用。需要同时满足:
- 调用入口有权调用目标模块方法。
- 调用方满足目标工作区和方法的访问规则。
- 接收人的外部账号与平台用户绑定正确、已启用。
- 所选渠道和会话属于目标工作区,符合发送方法约束。
getInternalUserBinding 可按真实 channel 和 internalUserId 核对渠道绑定。多绑定或多会话时必须明确选择目标,不按“最近活跃”自行猜测业务意图。
sendExternalSessionMessage 使用接收人的用户 ID 与外部会话键核验投递目标,不需要调用者手动传入工作区或渠道用户 ID。
各入口的身份来源
平台应用通过应用授权和声明的方法调用能力;完整路径见平台应用调用模块方法。 工作流使用实例建立的执行主体。业务输入中的接收人 ID 不改变执行主体,也不能通过元数据伪造执行用户。
外部模块后端需要在 ServiceReference 调用中携带当前用户时,遵循Runtime 用户委托。 用户委托只在其允许的请求生命周期内使用;延迟任务不能保存本次请求凭据以后重放。
不要自行生成平台身份、复制其他用户凭据,或使用固定管理员处理权限不足。
验证与错误定位
区分“方法未授权”“执行用户权限不足”“接收人未绑定”“会话不匹配”四类问题。 先核对执行入口,再核对成员目录、渠道绑定和目标会话;不能用更换用户 ID 或切换到另一渠道掩盖错误。