高级配置
原始“高级配置”标题下的所有内容:多个账户、投递限制、流式卡片、配额标志、群组会话范围、工作区工具、ACP 会话和多智能体路由。
高级配置¶
多个账户¶
{
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,
},
},
},
},
}
defaultAccount 控制出站 API 未指定 accountId 时使用哪个账户。账户条目继承顶层设置;大多数顶层键可按账户覆盖。
accounts.<id>.tts 使用与 tts 相同的结构,并深度合并到全局 TTS 配置之上,因此多机器人 Feishu 配置可以在全局保留共享的提供商凭据,同时仅按账户覆盖语音、模型、角色或自动模式。
消息限制¶
textChunkLimit- 出站文本块大小(默认:4000字符)streaming.chunkMode-"length"(默认)在限制处拆分;"newline"优先使用换行边界mediaMaxMb- 媒体上传/下载限制(默认:30MB)
普通 Markdown 卡片和富文本帖子也会拆分,以符合 Feishu 的 30 KB
序列化消息限制。标题、备注、提及、JSON 转义和 UTF-8 文本
都计入该限制,因此块可能短于 textChunkLimit。较长的
媒体说明会在附件之前作为文本/卡片块发送。
流式传输¶
Feishu/Lark 支持通过交互式卡片(Card Kit 流式 API)进行流式回复。启用后,机器人在生成文本时会实时更新卡片。
{
channels: {
feishu: {
streaming: {
mode: "partial", // streaming card output (default: "partial")
block: { enabled: true }, // opt into completed-block streaming
},
},
},
}
设置 streaming.mode: "off" 以发送完整回复而不进行流式更新;长回复仍会按上述消息限制拆分。renderMode: "raw"(纯文本而非卡片)也会禁用流式卡片。streaming.block.enabled 默认关闭;仅当希望已完成的助手块在最终回复前发送时再启用它。旧版布尔值 streaming 以及扁平的 blockStreaming / blockStreamingCoalesce / chunkMode 键会通过 openclaw doctor --fix 迁移到这种嵌套结构。
包含控件的回复使用原生卡片承载命令按钮和 HTTP(S) 链接,即使流式传输关闭也是如此。卡片承载回复文本;附件仍为单独消息。不支持的控件以及超出 Feishu 大小限制的卡片会在可读的回退中保留完整标签。当后续回复进行流式传输时,该回退仍保持为单独消息。最终控件回复会替换活动的流式预览,而不会再次发送预览文本;已完成答案之后的错误控件仍保持单独。如果 Feishu 无法删除或清除被替换的预览,投递会报告失败并保留原始消息回执。
配额优化¶
使用两个可选标志减少 Feishu/Lark API 调用次数:
typingIndicator(默认true):设置为false以跳过正在输入反应调用resolveSenderNames(默认true):设置为false以跳过发送者资料查询
群组会话范围和话题线程¶
channels.feishu.groupSessionScope(顶层、按账户或按群组)控制群组消息如何映射到智能体会话:
| 值 | 会话 |
|---|---|
"group"(默认) |
每个群聊一个会话 |
"group_sender" |
每个(群组 + 发送者)一个会话 |
"group_topic" |
每个话题线程一个会话;回退到群组会话 |
"group_topic_sender" |
每个(话题 + 发送者)一个会话;回退到(群组 + 发送者) |
对于话题范围,原生 Feishu/Lark 话题群组使用事件 thread_id(omt_*)作为规范的话题会话键。如果原生话题启动事件省略了 thread_id,OpenClaw 会在路由该轮次之前从 Feishu 获取它。OpenClaw 将普通群组回复转换为线程时,继续使用回复根消息 ID(om_*),以便首轮和后续轮次保持在同一会话中。
设置 replyInThread: "enabled"(顶层或按群组)可让机器人回复创建或继续一个 Feishu 话题线程,而不是内联回复。topicSessionMode 是 groupSessionScope 的已弃用前身;请优先使用 groupSessionScope。
Feishu 工作区工具¶
该插件提供用于 Feishu 文档、聊天、知识库、云存储、权限和 Bitable 的智能体工具,以及相应的技能(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 |
按账号的工具门控位于 accounts.<id>.tools 下。
配置更新应用后,新的智能体轮次会使用更新后的工具门控和账号选择,而无需重启 Gateway。已为进行中的轮次创建的工具会保留其原始配置。
Bitable 操作使用来自 /base/ URL 或返回的 app_token 的应用 token,而不是 /wiki/ URL 中的节点 token。如果应用创建成功但未获取到表格元数据,请保留返回的 app_token 和 URL。检查该现有应用,而不是再创建另一个应用;缺少 table_id 并不意味着创建失败。
feishu_doc 创建仅包含标题的文档。要添加 Markdown,请将返回的 document_id 作为 doc_token 传入单独的 write 操作。包含 content 的 create 请求会失败,且不会创建空文档。
授予 drive:drive.metadata:readonly,以便在根目录之外直接执行 feishu_drive info 查询,除非应用已拥有完整的 drive:drive 权限范围。如果两者都没有,info 仍会通过 drive:drive:readonly 保留旧版根目录查询。
ACP 会话¶
Feishu/Lark 支持针对私信和群线程消息的 ACP。Feishu/Lark ACP 由文本命令驱动——没有原生的斜杠命令菜单,因此请直接在对话中使用 /acp ... 消息。
持久 ACP 绑定¶
{
agents: {
entries: {
codex: {
default: true,
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 私信或线程中:
--thread here 适用于私信和 Feishu/Lark 线程消息。绑定对话中的后续消息会直接路由到该 ACP 会话。
多智能体路由¶
使用 bindings 将 Feishu/Lark 私信或群组路由到不同的智能体。
{
agents: {
entries: {
main: { default: true },
"agent-a": { workspace: "/home/user/agent-a" },
"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。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw