跳转至

高级配置

原始“高级配置”标题下的所有内容:多个账户、投递限制、流式卡片、配额标志、群组会话范围、工作区工具、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 - 媒体上传/下载限制(默认:30 MB)

普通 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: {
      typingIndicator: false,
      resolveSenderNames: 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 私信或线程中:

/acp spawn codex --thread here

--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