快速开始
需要 OpenClaw 2026.5.29 或更高版本。运行
openclaw --version 检查。使用 openclaw update 升级。运行频道设置向导
访问控制
私信
配置dmPolicy 来控制谁可以给机器人发私信:
"pairing"- 未知用户会收到配对码;通过 CLI 批准"allowlist"- 只有allowFrom中列出的用户可以聊天(默认:仅机器人所有者)"open"- 仅当allowFrom包含"*"时允许公开私信;若条目限制较严格,则只有匹配的用户可以聊天"disabled"- 禁用所有私信
群聊
群组策略(channels.feishu.groupPolicy):
| 值 | 行为 |
|---|---|
"open" | 响应群组中的所有消息 |
"allowlist" | 仅响应 groupAllowFrom 中的群组,或在 groups.<chat_id> 下显式配置的群组 |
"disabled" | 禁用所有群消息;显式的 groups.<chat_id> 条目不会覆盖此设置 |
allowlist
提及要求(channels.feishu.requireMention):
true- 需要 @提及(默认)false- 无需 @提及即可响应- 按群组覆盖:
channels.feishu.groups.<chat_id>.requireMention - 仅广播的
@all和@_all不会被视为机器人提及。若一条消息同时提及了@all和机器人本身,仍会被视为机器人提及。
群组配置示例
允许所有群组,不需要 @提及
允许所有群组,但仍需要 @提及
仅允许特定群组
allowlist 模式下,你也可以通过添加显式的 groups.<chat_id> 条目来允许某个群组。显式条目不会覆盖 groupPolicy: "disabled"。groups.* 下的通配符默认配置会应用于匹配的群组,但它们本身不会允许群组加入。
限制群组内的发送者
获取群组/用户 ID
群组 ID(chat_id,格式:oc_xxx)
在飞书/Lark 中打开群组,点击右上角的菜单图标,然后进入 设置。群组 ID(chat_id)列在设置页面上。

用户 ID(open_id,格式:ou_xxx)
启动网关,向机器人发送一条私信,然后检查日志:
open_id。你也可以查看待处理的配对请求:
常用命令
| 命令 | 描述 |
|---|---|
/status | 显示机器人状态 |
/reset | 重置当前会话 |
/model | 显示或切换 AI 模型 |
飞书/Lark 不支持原生斜杠命令菜单,因此请将这些内容作为纯文本消息发送。
故障排查
机器人在群聊中没有响应
- 确保机器人已加入群组
- 确保你 @提及了机器人(默认要求)
- 验证
groupPolicy不是"disabled" - 检查日志:
openclaw logs --follow
机器人收不到消息
- 确保机器人已在飞书开放平台 / Lark 开发者平台发布并通过审批
- 确保事件订阅包含
im.message.receive_v1 - 确保选择了长连接(WebSocket)
- 确保已授予所有必需的权限范围
- 确保网关正在运行:
openclaw gateway status - 检查日志:
openclaw logs --follow
二维码设置在飞书移动应用中没有反应
- 重新运行设置:
openclaw channels login --channel feishu - 选择手动设置
- 在 Feishu Open Platform 中创建自建应用并复制其 App ID 和 App Secret
- 将这些凭据粘贴到设置向导中
App Secret 泄露
- 在飞书开放平台 / Lark 开发者平台重置 App Secret
- 更新配置中的值
- 重启网关:
openclaw gateway restart
高级配置
多账户
defaultAccount 控制当外发 API 未指定 accountId 时使用哪个账户。
accounts.<id>.tts 的结构与 messages.tts 相同,并会在全局 TTS 配置之上进行深度合并,因此多机器人飞书部署可以在全局共享供应商凭据,同时仅按账户覆盖语音、模型、角色设定或自动模式。
消息限制
textChunkLimit- 外发文本分块大小(默认:2000字符)mediaMaxMb- 媒体上传/下载限制(默认:30MB)
流式输出
飞书/Lark 支持通过交互式卡片进行流式回复。启用后,机器人在生成文本时会实时更新卡片。streaming: false 设为关闭,以单条消息发送完整回复。blockStreaming 默认关闭;仅在你希望在最终回复之前先刷新已完成的助手块时启用。
配额优化
通过两个可选标志减少飞书/Lark API 调用次数:typingIndicator(默认true):设为false可跳过输入中反应调用resolveSenderNames(默认true):设为false可跳过发送者资料查询
ACP 会话
Feishu/Lark 支持用于私信和群组线程消息的 ACP。Feishu/Lark ACP 采用文本命令驱动——没有原生斜杠菜单,因此请直接在对话中使用/acp ... 消息。
持久化 ACP 绑定
从聊天中启动 ACP
在飞书/Lark 私信或线程中:--thread here 适用于私信和飞书/Lark 线程消息。绑定会话中的后续消息会直接路由到该 ACP 会话。
多智能体路由
使用bindings 将飞书/Lark 私信或群组路由到不同的智能体。
match.channel:"feishu"match.peer.kind:"direct"(私信)或"group"(群聊)match.peer.id: 用户 Open ID(ou_xxx)或群组 ID(oc_xxx)
按用户隔离的智能体(动态智能体创建)
启用dynamicAgentCreation 可为每个私信用户自动创建隔离的智能体实例。每个用户都会拥有自己的:
- 独立工作区目录
- 单独的
USER.md/SOUL.md/MEMORY.md - 私有对话历史
- 隔离的技能和状态
账户限制:
dynamicAgentCreation 目前仅适用于默认飞书账户。尚不完全支持命名/多账户配置——动态绑定创建时不带 accountId,因此发往命名账户的消息仍可能路由到 agent:main。进展请见 Issue #42837。快速设置
工作原理
当新用户发送第一条私信时:- 频道生成一个唯一的
agentId=feishu-{user_open_id} - 在
workspaceTemplate路径下创建新的工作区 - 注册该智能体并为该用户创建绑定
- 工作区辅助程序在首次访问时确保引导文件(
AGENTS.md、SOUL.md、USER.md等)存在 - 将该用户未来的所有消息路由到其专属智能体
配置选项
| 设置 | 描述 | 默认值 |
|---|---|---|
channels.feishu.dynamicAgentCreation.enabled | 启用自动按用户创建智能体 | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate | 动态智能体工作区的路径模板 | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate | 智能体目录名称模板 | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents | 可创建的动态智能体最大数量 | 不限 |
{agentId}- 生成的智能体 ID(例如feishu-ou_xxxxxx){userId}- 发送者的飞书 open_id(例如ou_xxxxxx)
会话范围
session.dmScope 控制私信如何映射到智能体会话。这是一个全局设置,会影响所有频道。
| 值 | 行为 | 适用场景 |
|---|---|---|
"main" | 每个用户的私信映射到其智能体的主会话 | 单用户机器人,希望自动加载 USER.md / SOUL.md |
"per-channel-peer" | 每个(频道 + 用户)组合使用单独会话 | 需要更强隔离的公共多用户机器人 |
"main" 可以启用引导文件的自动加载(USER.md、SOUL.md、MEMORY.md),但这意味着所有频道的所有私信都会共享相同的会话键模式。对于更看重隔离而不是引导自动加载的公共多用户机器人,建议使用 "per-channel-peer" 并手动管理引导文件。
不建议在
dynamicAgentCreation 中使用 "per-account-channel-peer",因为动态绑定创建时不带 accountId。仅在手动绑定时使用它。典型多用户部署
验证
检查网关日志,确认动态创建是否正常工作:说明
- 工作区隔离:每个用户都会获得自己的工作区目录和智能体实例。用户无法在正常消息交互流程中看到彼此的对话历史或文件。
- 安全边界:这是一种消息上下文隔离机制,而不是恶意共租户安全边界。智能体进程和宿主环境是共享的。
bindings应为空:动态智能体会自动注册自己的绑定- 升级路径:现有的手动绑定可继续与动态智能体并行工作
session.dmScope是全局的:这会影响所有频道,而不仅仅是飞书
配置参考
完整配置:网关配置| 设置 | 描述 | 默认值 |
|---|---|---|
channels.feishu.enabled | 启用/禁用该通道 | true |
channels.feishu.domain | API 域名(feishu 或 lark) | feishu |
channels.feishu.connectionMode | 事件传输方式(websocket 或 webhook) | websocket |
channels.feishu.defaultAccount | 出站路由的默认账号 | default |
channels.feishu.verificationToken | webhook 模式必需 | - |
channels.feishu.encryptKey | webhook 模式必需 | - |
channels.feishu.webhookPath | Webhook 路由路径 | /feishu/events |
channels.feishu.webhookHost | Webhook 绑定主机 | 127.0.0.1 |
channels.feishu.webhookPort | Webhook 绑定端口 | 3000 |
channels.feishu.accounts.<id>.appId | App ID | - |
channels.feishu.accounts.<id>.appSecret | App Secret | - |
channels.feishu.accounts.<id>.domain | 每个账号的域名覆盖 | feishu |
channels.feishu.accounts.<id>.tts | 每个账号的 TTS 覆盖 | messages.tts |
channels.feishu.dmPolicy | 私信策略 | allowlist |
channels.feishu.allowFrom | 私信允许列表(open_id 列表) | [BotOwnerId] |
channels.feishu.groupPolicy | 群组策略 | allowlist |
channels.feishu.groupAllowFrom | 群组允许列表 | - |
channels.feishu.requireMention | 群组中需要 @提及 | true |
channels.feishu.groups.<chat_id>.requireMention | 单个群组的 @提及覆盖;显式 ID 在允许列表模式下也会将该群组纳入允许范围 | inherited |
channels.feishu.groups.<chat_id>.enabled | 启用/禁用特定群组 | true |
channels.feishu.dynamicAgentCreation.enabled | 启用自动按用户创建代理 | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate | 动态代理工作区的路径模板 | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate | 代理目录名称模板 | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents | 可创建的动态代理最大数量 | unlimited |
channels.feishu.textChunkLimit | 消息分片大小 | 2000 |
channels.feishu.mediaMaxMb | 媒体大小限制 | 30 |
channels.feishu.streaming | 流式卡片输出 | true |
channels.feishu.blockStreaming | 完成块回复流式输出 | false |
channels.feishu.typingIndicator | 发送输入中反应 | true |
channels.feishu.resolveSenderNames | 解析发送者显示名 | true |
channels.feishu.tools.bitable | 启用 Bitable/Base 工具 | true |
channels.feishu.tools.base | channels.feishu.tools.bitable 的别名;两者都设置时以 bitable 为准 | true |
channels.feishu.accounts.<id>.tools.bitable | 每个账号的 Bitable/Base 工具开关 | inherited |
channels.feishu.accounts.<id>.tools.base | tools.bitable 的每账号别名 | inherited |
支持的消息类型
接收
- ✅ 文本
- ✅ 富文本(帖子)
- ✅ 图片
- ✅ 文件
- ✅ 音频
- ✅ 视频/媒体
- ✅ 表情贴纸
file_key JSON。当配置了 tools.media.audio 时,OpenClaw 会下载语音笔记资源,并在代理轮次之前运行共享的音频转写,因此代理会收到口语转录文本。如果飞书在音频载荷中直接包含了转录文本,则会直接使用该文本,而不会再进行一次 ASR 调用。若没有音频转写提供方,代理仍会收到一个 <media:audio> 占位符以及已保存的附件,而不是原始的飞书资源载荷。
发送
- ✅ 文本
- ✅ 图片
- ✅ 文件
- ✅ 音频
- ✅ 视频/媒体
- ✅ 交互式卡片(包括流式更新)
- ⚠️ 富文本(帖子样式格式;不支持完整的飞书/Lark 创作能力)
audio 消息类型,并且需要 Ogg/Opus 上传媒体(file_type: "opus")。现有的 .opus 和 .ogg 媒体会直接作为原生音频发送。MP3/WAV/M4A 以及其他可能的音频格式只有在回复请求语音投递(audioAsVoice / 消息工具 asVoice,包括 TTS 语音笔记回复)时,才会借助 ffmpeg 转码为 48kHz Ogg/Opus。普通的 MP3 附件会保持为常规文件。如果缺少 ffmpeg 或转换失败,OpenClaw 会回退为文件附件,并记录原因。
线程和回复
- ✅ 行内回复
- ✅ 线程回复
- ✅ 回复媒体在回复线程消息时仍保持线程感知
groupSessionScope: "group_topic" 和 "group_topic_sender",原生飞书/Lark 主题群使用事件 thread_id(omt_*)作为规范的主题会话键。如果原生主题发起事件省略了 thread_id,OpenClaw 会在路由该轮之前从飞书补全它。OpenClaw 将普通群组回复转换为线程时,仍然使用回复根消息 ID(om_*),因此首轮和后续轮会保留在同一会话中。
相关内容
- Channels Overview - 所有支持的渠道
- Pairing - 私信认证和配对流程
- Groups - 群聊行为和提及门控
- Channel Routing - 消息的会话路由
- Security - 访问模型和加固