飞书机器人在 OpenClaw 中的完整配置
在 OpenClaw 中,飞书(Feishu)机器人的 channel/accountId/peer/teamId 有明确的官方定义与配置规范,下面给你完整、可直接复制的配置与字段说明,同时补充同一个机器人加入不同群组的配置方法。
一、飞书场景下的字段官方定义
1. channel
1固定值:feishu(Lark 国际版为lark)
1作用:标识消息来自飞书渠道,路由第一维度
2. accountId
1类型:string(如 main、bot1、support)
1定义:OpenClaw 内的飞书机器人实例标识(多机器人场景)
1对应凭证:每个 accountId 绑定一组appId + appSecret
1示例:main(默认主机器人),同一个机器人(同一 accountId)可加入多个群组
3.peer(会话类型 + ID)
1结构:{ kind: "direct" | "group", id: string }
1kind 取值:
1direct:私聊(单聊)
1group:群聊(飞书群组),同一个机器人加入不同群组时,每个群组对应唯一peer.id
id 格式:
1私聊:用户 open_id → ou_xxxxxxxx
1群聊:群组chat_id → oc_xxxxxxxx(每个群组的 chat_id 唯一,是区分不同群组的核心标识)
4. teamId / guildId
1飞书对应:tenantId(企业/租户 ID)
1格式:tenant_xxxxxxxx
1作用:多企业/多租户隔离(企业自建应用专属),同一个机器人加入同一企业下的不同群组,tenantId 保持一致
二、完整配置示例(openclaw.json)
1. 飞书渠道基础配置(单机器人,加入多个群组)
核心说明:同一个机器人(同一 accountId: main)加入多个群组,只需在 groupAllowFrom 中添加所有目标群组的 chat_id(用逗号分隔),即可实现机器人在多个群组中生效。
JSON { "channels": { "feishu": { "enabled": true, "domain": "feishu", "connectionMode": "websocket", "dmPolicy": "pairing", "groupPolicy": "allowlist", "groupAllowFrom": ["oc_7725c177ac3fec7500c47047036a1b3e", "oc_8836d288bd4fed8600d58158147b2c4f", "oc_9947e399ce5fee9700e69269258c3d50"], "accounts": { "main": { "appId": "cli_your_feishu_app_id", "appSecret": "your_feishu_app_secret", "botName": "AI助手" } } } } } |
1dmPolicy: "pairing":私聊需配对(openclaw pairing approve feishu )
1groupPolicy: "allowlist":仅白名单群组可触发机器人,groupAllowFrom 中填写所有机器人加入的群组 chat_id
1groupAllowFrom 说明:多个群组 ID 用英文逗号分隔,只要机器人被邀请进入该群组,且 chat_id 在白名单内,即可响应群组消息
2. 多机器人配置(多 accountId)
JSON { "channels": { "feishu": { "enabled": true, "domain": "feishu", "connectionMode": "websocket", "accounts": { "main": { "appId": "cli_bot1_id", "appSecret": "bot1_secret", "botName": "主AI助手" }, "support": { "appId": "cli_bot2_id", "appSecret": "bot2_secret", "botName": "客服机器人" } } } } } |
补充说明:若多个机器人需分别加入不同群组,可给每个 accountId 单独配置 groupAllowFrom,实现机器人与群组的精准绑定。
三、Bindings 路由配置(核心匹配,同一机器人多群组适配)
核心逻辑:同一个机器人(accountId: main)加入不同群组后,可通过 peer.id(群组 chat_id)区分不同群组,实现“不同群组→不同 Agent”的路由匹配,也可配置所有群组共用一个 Agent。
1. 私聊路由(指定用户 → 指定 Agent)
JSON { "bindings": [ { "match": { "channel": "feishu", "accountId": "main", "peer": { "kind": "direct", "id": "ou_abc123" }, "tenantId": "tenant_xyz789" }, "agentId": "user-assistant" } ] } |
2. 群聊路由(同一机器人,不同群组→不同 Agent)
JSON { "bindings": [ // 群组1 → 客服Agent { "match": { "channel": "feishu", "accountId": "main", "peer": { "kind": "group", "id": "oc_def456" }, "tenantId": "tenant_xyz789" }, "agentId": "support-agent" }, // 群组2 → 技术支持Agent { "match": { "channel": "feishu", "accountId": "main", "peer": { "kind": "group", "id": "oc_ghi789" }, "tenantId": "tenant_xyz789" }, "agentId": "tech-support-agent" }, // 群组3 → 通知Agent { "match": { "channel": "feishu", "accountId": "main", "peer": { "kind": "group", "id": "oc_jkl012" }, "tenantId": "tenant_xyz789" }, "agentId": "notice-agent" } ] } |
3. 全局默认路由(同一机器人,所有群组共用一个 Agent)
JSON { "bindings": [ { "match": { "channel": "feishu", "accountId": "main", "peer": { "kind": "group" } // 不指定具体群组ID,匹配该机器人所有群组消息 }, "agentId": "main-group-agent" }, // 兜底路由:未匹配到的飞书消息(含私聊) { "match": { "channel": "feishu" }, "agentId": "main" } ] } |
四、SessionKey 生成规则(飞书)
Plain Text agent: |
示例(同一机器人不同群组)
1私聊:agent:user-assistant:feishu:direct:ou_abc123:tenant:tenant_xyz789
1群组1:agent:support-agent:feishu:group:oc_def456:tenant:tenant_xyz789
1群组2:agent:tech-support-agent:feishu:group:oc_ghi789:tenant:tenant_xyz789
1说明:同一机器人(accountId: main),不同群组的 SessionKey 因 peer.id(群组 ID)不同而唯一,实现会话隔离。
五、字段速查表(飞书专用)
字段 | 飞书取值/格式 | 说明(同一机器人多群组适配) |
channel | feishu | 固定渠道标识,同一机器人多群组不变 |
accountId | main /support | 机器人实例名,同一机器人多群组不变 |
peer.kind | direct / group | 群聊统一为 group,私聊为 direct |
peer.id | ou_xxx / oc_xxx | 不同群组对应不同 oc_xxx,是区分群组的核心 |
teamId/guildId | tenant_xxx | 同一企业下的群组,tenantId 保持一致 |
六、快速获取 ID 方法
1用户 open_id:向机器人发私聊 → 看日志 openclaw logs --follow → 提取 ou_xxx
1群组 chat_id:在群内@机器人 → 日志中提取oc_xxx(每个群组需单独提取,同一机器人加入多个群组,需依次获取各群组 chat_id)
1tenantId:飞书开放平台 → 应用详情 → 企业信息
七、同一机器人加入不同群组的注意事项
11.机器人需先被手动邀请进入目标群组,仅配置 groupAllowFrom无法自动加入群组。
12.各群组chat_id 必须唯一,不可重复填写,否则会导致路由匹配异常。
13.若需限制机器人在部分群组生效,仅需将对应群组 chat_id 加入 groupAllowFrom,未加入的群组无法触发机器人。
14.同一机器人在不同群组的消息会话相互隔离,通过 SessionKey 区分(核心差异为peer.id),不会出现消息混淆。
八、三种常见群组-机器人搭配用法详解
结合 OpenClaw 配置逻辑,以下三种搭配是最常用的场景,核心区别在于 accountId(机器人实例)与peer.id(群组 ID)的绑定关系,适配不同的业务需求,同时可借助 Agent 隔离实现不同场景的精准响应,Agent 之间数据完全隔离,还可配置不同大模型适配不同需求。
1. 同一个机器人 + 多个群组(最常用)
核心用法:使用同一个机器人实例(同一accountId),加入多个飞书群组,通过路由配置实现“所有群组共用一个 Agent”或“不同群组对应不同 Agent”,适用于机器人功能统一、需覆盖多个群组的场景。
适用场景:企业内部通用通知、全公司答疑机器人、跨部门共用的工具类机器人(如考勤查询、流程咨询),无需为每个群组单独创建机器人,降低配置和维护成本。
配置关键:
1仅配置 1 个 accountId(如 main),绑定一组 appId + appSecret。
1在 groupAllowFrom 中,填写所有目标群组的 chat_id(用英文逗号分隔),允许机器人在这些群组生效。
1路由配置:若所有群组功能一致,配置“全局群聊路由”(不指定 peer.id);若不同群组功能不同,按 peer.id(群组 ID)分别配置路由,绑定不同 Agent。
优势:配置简单、维护成本低,统一机器人形象,适合通用型需求;可通过 Agent 配置实现群聊级数据隔离,避免不同群组消息混淆。
2. 不同机器人 + 不同群组(精准隔离)
核心用法:创建多个机器人实例(不同 accountId),每个机器人对应一个独立群组(或一组同类群组),每个机器人绑定不同的 appId + appSecret 和 Agent,实现“机器人与群组一一对应”,适用于不同群组需求差异大、需严格隔离的场景。
适用场景:部门专属机器人(如技术部、人事部、销售部)、不同项目组专属机器人,每个机器人仅处理对应群组的消息,功能独立、数据隔离,避免跨部门消息干扰。例如技术部机器人负责代码咨询,人事部机器人负责人事政策解答,实现业务域的精准划分。
配置关键:
1配置多个 accountId(如 tech-bot、hr-bot),每个 accountId 单独绑定一组飞书应用凭证。
1为每个 accountId 单独配置 groupAllowFrom,仅填写其对应群组的 chat_id,实现机器人与群组的精准绑定。
1路由配置:每个 accountId 对应一个专属 Agent,确保不同机器人的消息处理逻辑独立,可通过独立工作区实现 Agent 之间的完全隔离。
优势:功能隔离性强,不同群组消息互不干扰,便于针对性配置功能;可根据各群组需求配置不同大模型,适配差异化场景。
3. 不同机器人 + 相同群组(多功能协同)
核心用法:创建多个机器人实例(不同accountId),将所有机器人加入同一个群组,每个机器人负责不同的功能,通过路由配置区分消息触发逻辑,适用于单个群组需要多种独立功能的场景,可实现多智能体协同工作。
适用场景:项目组核心群组(需同时实现“需求答疑、进度通知、文件校验、代码审查”等功能),每个功能由一个独立机器人承担,避免单个机器人功能过于复杂,也便于单独维护和升级。例如一个群组内,机器人A负责需求答疑,机器人B负责进度通知,机器人C负责代码审查,实现多功能协同支撑项目推进。
配置关键:
1配置多个 accountId(如 qa-bot、notice-bot),每个 accountId 绑定独立的飞书应用凭证。
1所有 accountId 的 groupAllowFrom 中,均填写同一个群组的 chat_id,确保所有机器人都能加入该群组。
1路由配置:通过消息关键词、@机器人昵称等方式,区分不同机器人的触发逻辑,绑定对应功能的 Agent;也可配置 Agent 间协同机制,实现复杂任务的分工处理。
优势:功能拆分清晰,单个机器人职责单一,便于维护和升级;多机器人协同,可覆盖复杂场景需求,提升群组工作效率,还可实现跨机器人的任务协作。
夜雨聆风