消息平台
Feishu
OpenClaw 通过官方 @openclaw/feishu 插件连接到 Feishu/Lark(一体化协作平台):支持 Bot 私信、群聊、流式卡片回复,以及 Feishu 文档/wiki/云盘/多维表格工具。
**状态:**Bot 私信和群聊功能已可用于生产环境。WebSocket 是默认事件传输方式(无需公共 URL);也可选择 webhook 模式。
快速开始
运行渠道设置向导
openclaw channels login --channel feishu如果尚未安装 @openclaw/feishu 插件,此命令会先安装该插件,然后引导完成设置:
- 手动设置:粘贴来自 Feishu Open Platform(
https://open.feishu.cn)或 Lark Developer(https://open.larksuite.com)的 App ID 和 App Secret。 - 二维码设置:在 Feishu 应用中扫描二维码以自动创建 Bot。此流程会将私信限定为仅你自己的账号可用(将
dmPolicy: "allowlist"与你的open_id配合使用)。
向导还会询问 API 域(Feishu 或 Lark)和群组策略。如果中国大陆版 Feishu 移动应用扫描二维码后没有反应,请重新运行设置并选择手动设置。
设置完成后,重启 Gateway 网关以应用更改
openclaw gateway restart入站持久性
OpenClaw 会先将经过身份验证的 im.message.receive_v1 和 drive.notice.comment_add_v1 信封持久排队,然后再分派给智能体。待处理或可重试的事件可在 Gateway 网关重启后保留,并按聊天或文档保持串行处理;只要活动或保留的完成记录仍然存在,就会使用 Feishu 的事件 ID 阻止重复的队列条目。
如果 WebSocket 事件在有限次数的重试后仍无法持久化,OpenClaw 会关闭该套接字并强制建立新的已验证连接,而不会越过尚未提交的轮次继续处理。其他 Feishu 事件类型(包括表情回应和 VC 会议邀请)使用其常规事件路径,不享有此持久队列保证。
访问控制
私信
配置 channels.feishu.dmPolicy(默认值:pairing)以控制谁可以向 Bot 发送私信:
| 值 | 行为 |
|---|---|
"pairing" |
未知用户会收到配对码;通过 CLI 批准 |
"allowlist" |
仅 allowFrom 中列出的用户可以聊天 |
"open" |
公开私信;配置验证要求 allowFrom 包含 "*"。非通配符条目仍会缩小访问范围 |
批准配对请求:
openclaw pairing list feishuopenclaw pairing approve feishu <CODE>群聊
群组策略(channels.feishu.groupPolicy,默认值:allowlist):
| 值 | 行为 |
|---|---|
"open" |
回复群组中的所有消息 |
"allowlist" |
仅回复 groupAllowFrom 中的群组,或在 groups.<chat_id> 下明确配置的群组 |
"disabled" |
禁用所有群组消息;明确的 groups.<chat_id> 条目不会覆盖此设置 |
提及要求(channels.feishu.requireMention):
- 默认:需要 @提及,但有效群组策略为
"open"时除外;此时默认值为false,以便无法携带提及的消息(例如图片)仍能到达智能体。 - 明确设置
true或false可覆盖默认值;按群组覆盖:channels.feishu.groups.<chat_id>.requireMention。 - 仅广播的
@all和@_all不视为提及 Bot。同时直接提及@all和 Bot 的消息仍视为提及 Bot。
群组配置示例
允许所有群组,无需 @提及
{ channels: { feishu: { groupPolicy: "open", // 在 "open" 下,requireMention 默认为 false }, },}允许所有群组,但仍要求 @提及
{ channels: { feishu: { groupPolicy: "open", requireMention: true, }, },}仅允许特定群组
{ channels: { feishu: { groupPolicy: "allowlist", // 群组 ID 的格式类似:oc_xxx groupAllowFrom: ["oc_xxx", "oc_yyy"], }, },}在 allowlist 模式下,还可以通过添加明确的 groups.<chat_id> 条目来准入群组。明确条目不会覆盖 groupPolicy: "disabled"。groups.* 下的通配符默认设置会配置匹配的群组,但其本身不会准入群组。
{ channels: { feishu: { groupPolicy: "allowlist", groups: { oc_xxx: { requireMention: false, }, }, }, },}限制群组内的发送者
{ channels: { feishu: { groupPolicy: "allowlist", groupAllowFrom: ["oc_xxx"], groups: { oc_xxx: { // 用户 open_id 的格式类似:ou_xxx allowFrom: ["ou_user1", "ou_user2"], }, }, }, },}channels.feishu.groupSenderAllowFrom 为所有群组设置相同的发送者允许列表;按群组设置的 allowFrom 优先级更高。
Bot 发送的消息
默认情况下,Feishu 会忽略其他 Bot 发送的消息。要允许 Bot 之间进行群组对话,请向应用授予 im:message.group_at_msg.include_bot:readonly 和 im:message:readonly 权限范围,然后设置 allowBots:
{ channels: { feishu: { allowBots: true, }, },}仅当另一个 Bot 提及当前 Bot 时,Feishu 才会传递由 Bot 发送的群组事件。现有的群组策略、发送者允许列表和提及要求仍然适用。OpenClaw 会丢弃自己发送的消息,在每个文本或卡片回复中提及对端 Bot,并应用共享的 channels.defaults.botLoopProtection 防护机制。
获取群组/用户 ID
群组 ID(chat_id,格式:oc_xxx)
在 Feishu/Lark 中打开群组,单击右上角的菜单图标,然后转到 Settings。群组 ID(chat_id)列在设置页面中。

用户 ID(open_id,格式:ou_xxx)
启动 Gateway 网关,向 Bot 发送私信,然后检查日志:
openclaw logs --follow在日志输出中查找 open_id。也可以检查待处理的配对请求:
openclaw pairing list feishu常用命令
| 命令 | 描述 |
|---|---|
/status |
显示 Bot 状态 |
/reset |
重置当前会话 |
/model |
显示或切换 AI 模型 |
故障排查
Bot 在群聊中没有响应
- 确保已将 Bot 添加到群组
- 确保 @提及 Bot(默认要求)
- 确认
groupPolicy不是"disabled" - 检查日志:
openclaw logs --follow
Bot 未收到消息
- 确保 Bot 已在 Feishu Open Platform / Lark Developer 中发布并获得批准
- 确保事件订阅包含
im.message.receive_v1 - 如需自动加入会议邀请,还要订阅
vc.bot.meeting_invited_v1 - 确保已选择 persistent connection(WebSocket)
- 确保已授予所有必需的权限范围
- 确保 Gateway 网关正在运行:
openclaw gateway status - 检查日志:
openclaw logs --follow
订阅 vc.bot.meeting_invited_v1 只会传递事件。自动加入功能
默认关闭。要全局启用:
{ channels: { feishu: { vcAutoJoin: true, }, },}如果只为一个账号启用,请省略顶层开关并设置账号覆盖项:
{ channels: { feishu: { accounts: { meetings: { vcAutoJoin: true }, }, }, },}在智能体收到加入轮次之前,邀请者仍需经过正常的 Feishu 私信策略、允许列表/配对、会话和回复
路由。加入会议还要求配置一个可用的 Feishu VC 加入
工具,该工具须使用应用身份并具有
vc:meeting.bot.join:write 权限范围。例如,官方
lark-cli VC 智能体技能
提供 vc +meeting-join。
Feishu 移动应用扫描二维码后没有反应
- 重新运行设置:
openclaw channels login --channel feishu - 选择手动设置
- 在 Feishu Open Platform 中创建自建应用,并复制其 App ID 和 App Secret
- 将这些凭据粘贴到设置向导中
App Secret 泄露
- 在 Feishu Open Platform / Lark Developer 中重置 App Secret
- 更新配置中的值
- 重启 Gateway 网关:
openclaw gateway restart
高级配置
多账号
{ channels: { feishu: { defaultAccount: "main", accounts: { main: { appId: "cli_xxx", appSecret: "xxx", name: "Primary bot", tts: { providers: { openai: { voice: "shimmer" }, }, }, }, backup: { appId: "cli_yyy", appSecret: "yyy", name: "Backup bot", enabled: false, }, }, }, },}当出站 API 未指定 accountId 时,defaultAccount 控制使用哪个账号。账号条目会继承顶层设置;大多数顶层键都可以按账号覆盖。
accounts.<id>.tts 与 tts 使用相同的结构,并在全局 TTS 配置上进行深度合并,因此多 Bot Feishu 设置可以将共享的提供商凭据保留在全局配置中,而仅按账号覆盖语音、模型、角色设定或自动模式。
消息限制
textChunkLimit- 出站文本分块大小(默认:4000个字符)streaming.chunkMode-"length"(默认)在达到限制时拆分;"newline"优先在换行边界处拆分mediaMaxMb- 媒体上传/下载限制(默认:30MB)
流式传输
Feishu/Lark 支持通过交互式卡片进行流式回复(Card Kit 流式 API)。启用后,Bot 会在生成文本时实时更新卡片。
{ channels: { feishu: { streaming: { mode: "partial", // 流式卡片输出(默认:"partial") block: { enabled: true }, // 选择启用已完成块的流式传输 }, }, },}将 streaming.mode: "off" 设置为在一条消息中发送完整回复;renderMode: "raw"(使用纯文本而非卡片)也会禁用流式卡片。streaming.block.enabled 默认关闭;仅当你希望在最终回复之前发送已完成的助手内容块时才启用它。旧版布尔值 streaming 以及扁平的 blockStreaming / blockStreamingCoalesce / chunkMode 键会通过 openclaw doctor --fix 迁移到这一嵌套结构。
配额优化
使用两个可选标志减少 Feishu/Lark API 调用次数:
typingIndicator(默认值为true):设置为false可跳过输入状态表情回应调用resolveSenderNames(默认值为true):设置为false可跳过发送者资料查询
{ channels: { feishu: { typingIndicator: false, resolveSenderNames: false, }, },}群组会话范围和话题线程
channels.feishu.groupSessionScope(顶层、每个账户或每个群组)控制群组消息如何映射到 Agent 会话:
| 值 | 会话 |
|---|---|
"group"(默认) |
每个群聊一个会话 |
"group_sender" |
每个(群组 + 发送者)一个会话 |
"group_topic" |
每个话题线程一个会话;回退到群组会话 |
"group_topic_sender" |
每个(话题 + 发送者)一个会话;回退到(群组 + 发送者) |
对于话题范围,Feishu/Lark 原生话题群组使用事件 thread_id(omt_*)作为规范的话题会话键。如果原生话题发起事件省略了 thread_id,OpenClaw 会先从 Feishu 补充该值,再路由该轮次。由 OpenClaw 转换为线程的普通群组回复继续使用回复根消息 ID(om_*),以便首轮和后续轮次保持在同一会话中。
设置 replyInThread: "enabled"(顶层或每个群组),可让 Bot 回复创建或继续 Feishu 话题线程,而不是进行内联回复。topicSessionMode 是 groupSessionScope 的已弃用前身;请优先使用 groupSessionScope。
Feishu 工作区工具
该插件提供用于 Feishu 文档、聊天、知识库、云存储、权限和 Bitable 的 Agent 工具,以及对应的 Skills(feishu-doc、feishu-drive、feishu-perm、feishu-wiki)。工具族由 channels.feishu.tools 控制:
| 键 | 工具 | 默认值 |
|---|---|---|
tools.doc |
feishu_doc 文档操作 |
true |
tools.chat |
feishu_chat 聊天信息 + 成员查询 |
true |
tools.wiki |
feishu_wiki 知识库(需要 doc) |
true |
tools.drive |
feishu_drive 云存储 |
true |
tools.perm |
feishu_perm 权限管理 |
false(敏感) |
tools.scopes |
feishu_app_scopes 应用权限范围诊断 |
true |
tools.bitable |
feishu_bitable_* Bitable/Base 操作 |
true |
tools.base 是 tools.bitable 的别名;同时设置两者时,以显式的 bitable 值为准。每账户控制项位于 accounts.<id>.tools 下。
对于根目录之外的直接 feishu_drive info 查询,请授予 drive:drive.metadata:readonly,除非应用已具有完整的 drive:drive 权限范围。如果这两个权限范围均未授予,info
仍可通过 drive:drive:readonly 使用旧版根目录查询。
ACP 会话
Feishu/Lark 支持在私信和群组线程消息中使用 ACP。Feishu/Lark ACP 由文本命令驱动——没有原生斜杠命令菜单,因此请直接在对话中使用 /acp ... 消息。
持久 ACP 绑定
{ agents: { list: [ { id: "codex", runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", cwd: "/workspace/openclaw", }, }, }, ], }, bindings: [ { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "direct", id: "ou_1234567890" }, }, }, { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "group", id: "oc_group_chat:topic:om_topic_root" }, }, acp: { label: "codex-feishu-topic" }, }, ],}从聊天中生成 ACP
在 Feishu/Lark 私信或线程中:
/acp spawn codex --thread here--thread here 适用于私信和 Feishu/Lark 线程消息。绑定对话中的后续消息会直接路由到该 ACP 会话。
多 Agent 路由
使用 bindings 将 Feishu/Lark 私信或群组路由到不同的 Agent。
{ agents: { list: [ { id: "main" }, { id: "agent-a", workspace: "/home/user/agent-a" }, { id: "agent-b", workspace: "/home/user/agent-b" }, ], }, bindings: [ { agentId: "agent-a", match: { channel: "feishu", peer: { kind: "direct", id: "ou_xxx" }, }, }, { agentId: "agent-b", match: { channel: "feishu", peer: { kind: "group", id: "oc_zzz" }, }, }, ],}路由字段:
match.channel:"feishu"match.peer.kind:"direct"(私信)或"group"(群聊)match.peer.id:用户 Open ID(ou_xxx)或群组 ID(oc_xxx)
有关查询提示,请参阅获取群组/用户 ID。
每用户 Agent 隔离(动态 Agent 创建)
启用 dynamicAgentCreation,可为每个私信用户自动创建隔离的 Agent 实例。每个用户都有自己的:
- 独立工作区目录
- 单独的
USER.md/SOUL.md/MEMORY.md - 私有对话历史记录
- 隔离的 Skills 和状态
对于希望为每个用户提供专属私有 AI 助手体验的公共 Bot,此功能至关重要。
快速设置
{ channels: { feishu: { dmPolicy: "open", allowFrom: ["*"], dynamicAgentCreation: { enabled: true, workspaceTemplate: "~/.openclaw/workspace-{agentId}", agentDirTemplate: "~/.openclaw/agents/{agentId}/agent", }, }, }, session: { // 关键:将每个用户的私信设为其“主会话” // 自动加载 USER.md / SOUL.md / MEMORY.md // 如需更强的隔离,请改用 "per-channel-peer" dmScope: "main", },}工作原理
当新用户发送第一条私信时:
- 渠道生成唯一的
agentId:默认账户使用feishu-{user_open_id},命名账户则使用长度受限且带账户前缀的身份摘要 - 在
workspaceTemplate路径创建新工作区 - 注册 Agent,并为该用户创建绑定
- 工作区辅助程序会在首次访问时确保引导文件(
AGENTS.md、SOUL.md、USER.md等)存在 - 将该用户今后的所有消息路由到其专用 Agent
配置选项
| 设置 | 描述 | 默认值 |
|---|---|---|
channels.feishu.dynamicAgentCreation.enabled |
启用自动创建每用户 Agent | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate |
动态 Agent 工作区的路径模板 | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate |
Agent 目录名称模板 | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents |
可创建的动态 Agent 最大数量 | 无限制 |
模板变量:
{agentId}- 生成的 Agent ID(例如feishu-ou_xxxxxx或feishu-support-<identity_digest>){userId}- 发送者的 Feishu open_id(例如ou_xxxxxx)
会话范围
session.dmScope 控制私信如何映射到 Agent 会话。这是一项影响所有渠道的全局设置。
| 值 | 行为 | 最适合 |
|---|---|---|
"main" |
每个用户的私信映射到其 Agent 的主会话 | 希望自动加载 USER.md / SOUL.md 的单用户 Bot |
"per-peer" |
每个对端都有单独的会话(无论渠道如何) | 仅按发送者身份进行隔离 |
"per-channel-peer" |
每个(渠道 + 用户)组合都有单独的会话 | 需要更强隔离的公共多用户 Bot |
"per-account-channel-peer" |
每个(账户 + 渠道 + 用户)组合都有单独的会话 | 需要账户级会话隔离的多账户 Bot |
权衡:使用 "main" 可以自动加载引导文件(USER.md、SOUL.md、MEMORY.md),但这意味着所有渠道中的全部私信都共享相同的会话键模式。对于隔离比自动加载引导文件更重要的公共多用户 Bot,请考虑使用 "per-channel-peer",并手动管理引导文件。
典型的多用户部署
{ channels: { feishu: { appId: "cli_xxx", appSecret: "xxx", dmPolicy: "open", allowFrom: ["*"], groupPolicy: "open", requireMention: true, dynamicAgentCreation: { enabled: true, workspaceTemplate: "~/.openclaw/workspace-{agentId}", agentDirTemplate: "~/.openclaw/agents/{agentId}/agent", }, }, }, session: { // 根据你的隔离需求选择 dmScope: // 使用 "main" 自动加载引导文件,使用 "per-channel-peer" 实现更强隔离 dmScope: "main", }, bindings: [], // 留空——动态 Agent 会自动绑定}验证
检查 Gateway 网关日志,确认动态创建功能正常工作:
feishu:正在为用户 ou_xxxxxx 创建动态 Agent "feishu-ou_xxxxxx" 工作区:/home/user/.openclaw/workspace-feishu-ou_xxxxxx Agent 目录:/home/user/.openclaw/agents/feishu-ou_xxxxxx/agent列出所有已创建的工作区:
ls -la ~/.openclaw/workspace-*注意事项
- 工作区隔离:每个用户都有自己的工作区目录和智能体实例。在正常消息流程中,用户无法查看彼此的对话历史记录或文件。
- 安全边界:这是一种消息上下文隔离机制,而不是针对不受信任的共租户的安全边界。智能体进程和主机环境是共享的。
- 必须保持启用配置写入:动态 Agent 创建会将智能体和绑定写入配置;当
channels.feishu.configWrites为false时会跳过此操作(默认:启用)。 bindings应为空:动态智能体会自动注册自己的绑定- 升级路径:现有手动绑定可继续与动态智能体配合使用
session.dmScope是全局设置:这会影响所有渠道,而不仅仅是 Feishu
配置参考
完整配置:Gateway 配置
| 设置 | 描述 | 默认值 |
|---|---|---|
channels.feishu.enabled |
启用/禁用渠道 | true |
channels.feishu.domain |
API 域(feishu、lark 或 https:// 基础 URL) |
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 |
应用 ID | - |
channels.feishu.accounts.<id>.appSecret |
应用 Secret | - |
channels.feishu.accounts.<id>.domain |
每账户域覆盖 | feishu |
channels.feishu.accounts.<id>.tts |
每账户 TTS 覆盖 | tts |
channels.feishu.dmPolicy |
私信策略(pairing、allowlist、open) |
pairing |
channels.feishu.allowFrom |
私信允许列表(open_id 列表) | - |
channels.feishu.groupPolicy |
群组策略(open、allowlist、disabled) |
allowlist |
channels.feishu.groupAllowFrom |
群组允许列表 | - |
channels.feishu.groupSenderAllowFrom |
应用于所有群组的发送者允许列表 | - |
channels.feishu.requireMention |
要求在群组中 @提及 | true(策略为 open 时为 false) |
channels.feishu.allowBots |
接受提及此机器人的其他机器人,并提供机器人循环保护 | false |
channels.feishu.groups.<chat_id>.requireMention |
每群组 @提及覆盖;在允许列表模式下,显式 ID 也会准许该群组 | 继承 |
channels.feishu.groups.<chat_id>.enabled |
启用/禁用特定群组 | true |
channels.feishu.groups.<chat_id>.allowFrom |
每群组发送者允许列表(覆盖 groupSenderAllowFrom) |
- |
channels.feishu.groupSessionScope |
群组会话映射(group、group_sender、group_topic、group_topic_sender) |
group |
channels.feishu.replyInThread |
Bot 回复创建/继续话题线程(disabled、enabled) |
disabled |
channels.feishu.reactionNotifications |
入站表情回应事件(off、own、all) |
own |
channels.feishu.vcAutoJoin |
通过正常私信授权后加入受邀的 VC 会议 | false |
channels.feishu.dynamicAgentCreation.enabled |
启用自动创建每用户智能体 | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate |
动态 Agent 工作区的路径模板 | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate |
Agent 目录名称模板 | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents |
可创建的动态智能体最大数量 | 无限制 |
channels.feishu.textChunkLimit |
消息分块大小 | 4000 |
channels.feishu.streaming.chunkMode |
分块拆分(length 或 newline) |
length |
channels.feishu.mediaMaxMb |
媒体大小限制 | 30 |
channels.feishu.renderMode |
回复渲染(auto、raw、card) |
auto |
channels.feishu.streaming.mode |
流式卡片输出(partial 或 off) |
partial |
channels.feishu.streaming.block.enabled |
已完成块的回复流式传输 | false |
channels.feishu.typingIndicator |
发送输入状态表情回应 | true |
channels.feishu.resolveSenderNames |
解析发送者显示名称 | true |
channels.feishu.configWrites |
允许渠道发起配置写入(动态智能体需要) | true |
channels.feishu.tools.doc |
启用文档工具 | true |
channels.feishu.tools.chat |
启用聊天信息工具 | true |
channels.feishu.tools.wiki |
启用知识库工具(需要 doc) |
true |
channels.feishu.tools.drive |
启用云存储工具 | true |
channels.feishu.tools.perm |
启用权限管理工具 | false |
channels.feishu.tools.scopes |
启用应用权限范围诊断工具 | 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 工具开关 | 继承 |
channels.feishu.accounts.<id>.tools.base |
tools.bitable 的每账户别名 |
继承 |
支持的消息类型
接收
- ✅ 文本
- ✅ 富文本(帖子)
- ✅ 图片
- ✅ 文件
- ✅ 音频
- ✅ 视频/媒体
- ✅ 贴纸
入站 Feishu/Lark 音频消息会被规范化为媒体占位符,而不是原始
file_key JSON。配置 tools.media.audio 后,OpenClaw
会下载语音留言资源,并在智能体轮次开始前运行共享音频转录,使智能体
收到语音转录文本。如果 Feishu 在音频载荷中直接包含转录文本,则会使用
该文本,而不会再次调用 ASR。若没有音频转录提供商,智能体仍会收到
<media:audio> 占位符和已保存的附件,而不是原始 Feishu
资源载荷。
发送
- ✅ 文本
- ✅ 图片
- ✅ 文件
- ✅ 音频
- ✅ 视频/媒体
- ✅ 交互式卡片(包括流式更新)
- ⚠️ 富文本(帖子式格式;不支持 Feishu/Lark 的全部创作功能)
Feishu/Lark 原生音频气泡使用 Feishu audio 消息类型,并要求上传
Ogg/Opus 媒体(file_type: "opus")。现有的 .opus 和 .ogg 媒体
会直接作为原生音频发送。仅当回复请求以语音形式
发送时(audioAsVoice / 消息工具 asVoice,包括 TTS 语音消息
回复),才会使用 ffmpeg 将 MP3/WAV/M4A 和其他可能的音频格式
转码为 48kHz Ogg/Opus。普通 MP3 附件仍作为常规文件发送。如果缺少 ffmpeg 或
转换失败,OpenClaw 会回退为文件附件并记录原因。
话题串和回复
- ✅ 行内回复
- ✅ 话题串回复
- ✅ 回复话题串消息时,媒体回复仍会保留话题串上下文
主题群组会话路由详见 群组会话范围和主题话题串。