Skip to content

飞书

飞书机器人

飞书(Lark)是企业常用的团队协作聊天平台。此插件使用飞书平台的 WebSocket 事件订阅将 OpenClaw 连接到飞书机器人,无需暴露公网 Webhook URL 即可接收消息。


内置插件

飞书插件已随当前 OpenClaw 版本内置,无需单独安装插件。

如果你使用的是旧版本或自定义安装,不包含内置飞书插件,可以手动安装:

bash
openclaw plugins install @openclaw/feishu

快速开始

有两种方式添加飞书通道:

方法 1:引导配置(推荐)

如果你刚安装完 OpenClaw,运行引导配置:

bash
openclaw onboard

向导会引导你完成:

  1. 创建飞书应用并获取凭证
  2. 在 OpenClaw 中配置应用凭证
  3. 启动网关

配置完成后,检查网关状态:

  • openclaw gateway status
  • openclaw logs --follow

方法 2:CLI 配置

如果你已经完成了初始安装,可以通过 CLI 添加通道:

bash
openclaw channels add

选择 飞书,然后输入 App ID 和 App Secret。

配置完成后,管理网关:

  • openclaw gateway status
  • openclaw gateway restart
  • openclaw logs --follow

步骤 1:创建飞书应用

1. 打开飞书开放平台

访问 飞书开放平台 并登录。

国际版 Lark 租户应使用 https://open.larksuite.com/app,并在飞书配置中设置 domain: "lark"

2. 创建应用

  1. 点击 创建企业自建应用
  2. 填写应用名称和描述
  3. 选择应用图标

3. 复制凭证

凭证与基础信息 中复制:

  • App ID(格式:cli_xxx
  • App Secret

重要: 请妥善保管 App Secret,不要泄露。

4. 配置权限

权限 页面,点击 批量导入 并粘贴:

json
{
  "scopes": {
    "tenant": [
      "aily:file:read",
      "aily:file:write",
      "application:application.app_message_stats.overview:readonly",
      "application:application:self_manage",
      "application:bot.menu:write",
      "cardkit:card:read",
      "cardkit:card:write",
      "contact:user.employee_id:readonly",
      "corehr:file:download",
      "event:ip_list",
      "im:chat.access_event.bot_p2p_chat:read",
      "im:chat.members:bot_access",
      "im:message",
      "im:message.group_at_msg:readonly",
      "im:message.p2p_msg:readonly",
      "im:message:readonly",
      "im:message:send_as_bot",
      "im:resource"
    ],
    "user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
  }
}

5. 启用机器人能力

应用功能 > 机器人

  1. 启用机器人能力
  2. 设置机器人名称

6. 配置事件订阅

⚠️ 重要: 在设置事件订阅之前,请确保:

  1. 你已经运行了 openclaw channels add 添加飞书通道
  2. 网关正在运行(openclaw gateway status 确认)

事件订阅

  1. 选择 使用长连接接收事件(WebSocket)
  2. 添加事件:im.message.receive_v1

⚠️ 如果网关没有运行,长连接设置可能保存失败。

7. 发布应用

  1. 版本管理与发布 中创建版本
  2. 提交审核并发布
  3. 等待管理员审批(企业自建应用通常自动批准)

步骤 2:配置 OpenClaw

使用向导配置(推荐)

bash
openclaw channels add

选择 飞书 并粘贴你的 App ID + App Secret。

通过配置文件配置

编辑 ~/.openclaw/openclaw.json

json5
{
  channels: {
    feishu: {
      enabled: true,
      dmPolicy: "pairing",
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
          botName: "我的 AI 助手",
        },
      },
    },
  },
}

如果你使用 connectionMode: "webhook",需要同时设置 verificationTokenencryptKey。飞书 Webhook 服务器默认绑定到 127.0.0.1;只有在你明确需要不同绑定地址时才设置 webhookHost

Verification Token 和 Encrypt Key(Webhook 模式)

使用 webhook 模式时,需要在配置中同时设置 channels.feishu.verificationTokenchannels.feishu.encryptKey。获取值的方法:

  1. 在飞书开放平台打开你的应用
  2. 进入 开发事件与回调
  3. 打开 加密策略 标签页
  4. 复制 Verification TokenEncrypt Key

通过环境变量配置

bash
export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"

国际版 Lark 域名

如果你的租户使用国际版 Lark,将域名设置为 lark(或完整域名字符串)。你可以在 channels.feishu.domain 设置,或按帐户单独配置(channels.feishu.accounts.<id>.domain)。

json5
{
  channels: {
    feishu: {
      domain: "lark",
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
        },
      },
    },
  },
}

配额优化选项

你可以通过两个可选标志减少飞书 API 使用量:

  • typingIndicator(默认 true):当为 false 时,跳过输入状态调用。
  • resolveSenderNames(默认 true):当为 false 时,跳过发送者资料查询调用。

可以在顶层或按帐户设置:

json5
{
  channels: {
    feishu: {
      typingIndicator: false,
      resolveSenderNames: false,
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
          typingIndicator: true,
          resolveSenderNames: false,
        },
      },
    },
  },
}

步骤 3:启动并测试

1. 启动网关

bash
openclaw gateway

2. 发送测试消息

在飞书中找到你的机器人并发送一条消息。

3. 批准配对

默认情况下,机器人会回复配对码。批准它:

bash
openclaw pairing approve feishu <CODE>

批准后,你就可以正常聊天了。


概述

  • 飞书机器人通道:由网关管理的飞书机器人
  • 确定性路由:回复始终返回飞书
  • 会话隔离:私信共享主会话;群组隔离
  • WebSocket 连接:通过飞书 SDK 长连接,无需公网 URL

访问控制

私聊

  • 默认dmPolicy: "pairing"(未知用户需要配对码)

  • 批准配对

    bash
    openclaw pairing list feishu
    openclaw pairing approve feishu <CODE>
  • 允许列表模式:设置 channels.feishu.allowFrom 包含允许的 Open ID

群组聊天

1. 群组策略channels.feishu.groupPolicy):

  • "open" = 允许群组中的所有人(默认)
  • "allowlist" = 仅允许 groupAllowFrom 中的群组
  • "disabled" = 禁用群组消息

2. 需要@提及channels.feishu.groups.<chat_id>.requireMention):

  • true = 需要 @ 提及机器人(默认)
  • false = 无需提及即可回复

群组配置示例

允许所有群组,需要 @ 提及(默认)

json5
{
  channels: {
    feishu: {
      groupPolicy: "open",
      // 默认 requireMention: true
    },
  },
}

允许所有群组,不需要 @ 提及

json5
{
  channels: {
    feishu: {
      groups: {
        oc_xxx: { requireMention: false },
      },
    },
  },
}

仅允许特定群组

json5
{
  channels: {
    feishu: {
      groupPolicy: "allowlist",
      // 飞书群组 ID(chat_id)格式:oc_xxx
      groupAllowFrom: ["oc_xxx", "oc_yyy"],
    },
  },
}

限制群组中哪些发送者可以发消息(发送者允许列表)

除了允许群组本身,该群组中的所有消息都会通过发送者 open_id 进行 gated:只有 groups.<chat_id>.allowFrom 中列出的用户的消息才会被处理,其他成员的消息会被忽略(这是完整的发送者级 gated,不仅针对 /reset 或 /new 等控制命令)。

json5
{
  channels: {
    feishu: {
      groupPolicy: "allowlist",
      groupAllowFrom: ["oc_xxx"],
      groups: {
        oc_xxx: {
          // 飞书用户 ID(open_id)格式:ou_xxx
          allowFrom: ["ou_user1", "ou_user2"],
        },
      },
    },
  },
}

获取群组/用户 ID

群组 ID(chat_id)

群组 ID 格式为 oc_xxx

方法 1(推荐)

  1. 启动网关并在群组中 @ 提及机器人
  2. 运行 openclaw logs --follow 并查找 chat_id

方法 2

使用飞书 API 调试器列出群组聊天。

用户 ID(open_id)

用户 ID 格式为 ou_xxx

方法 1(推荐)

  1. 启动网关并给机器人发私信
  2. 运行 openclaw logs --follow 并查找 open_id

方法 2

查看配对请求获取用户 Open ID:

bash
openclaw pairing list feishu

常用命令

命令说明
/status显示机器人状态
/reset重置会话
/model显示/切换模型

注意:飞书暂不支持原生命令菜单,因此必须以文本形式发送命令。

网关管理命令

命令说明
openclaw gateway status查看网关状态
openclaw gateway install安装/启动网关服务
openclaw gateway stop停止网关服务
openclaw gateway restart重启网关服务
openclaw logs --follow实时查看网关日志

故障排除

机器人在群组中不回复

  1. 确保机器人已被添加到群组
  2. 确保你 @ 提及了机器人(默认行为)
  3. 检查 groupPolicy 没有设置为 "disabled"
  4. 查看日志:openclaw logs --follow

机器人收不到消息

  1. 确保应用已发布并批准
  2. 确保事件订阅包含 im.message.receive_v1
  3. 确保已启用长连接
  4. 确保应用权限完整
  5. 确保网关正在运行:openclaw gateway status
  6. 查看日志:openclaw logs --follow

App Secret 泄露

  1. 在飞书开放平台重置 App Secret
  2. 更新配置中的 App Secret
  3. 重启网关

消息发送失败

  1. 确保应用拥有 im:message:send_as_bot 权限
  2. 确保应用已发布
  3. 查看日志获取详细错误信息

高级配置

多帐户

json5
{
  channels: {
    feishu: {
      defaultAccount: "main",
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
          botName: "主机器人",
        },
        backup: {
          appId: "cli_yyy",
          appSecret: "yyy",
          botName: "备用机器人",
          enabled: false,
        },
      },
    },
  },
}

defaultAccount 控制出站 API 未明确指定 accountId 时使用哪个飞书帐户。

消息限制

  • textChunkLimit:出站文本分块大小(默认:2000 字符)
  • mediaMaxMb:媒体上传/下载限制(默认:30MB)

流式输出

飞书支持通过交互式卡片进行流式回复。启用后,机器人会在生成文本时更新卡片。

json5
{
  channels: {
    feishu: {
      streaming: true, // 启用流式卡片输出(默认 true)
      blockStreaming: true, // 启用块级流式输出(默认 true)
    },
  },
}

设置 streaming: false 可在完整回复生成后再发送。

ACP 会话

飞书支持 ACP 用于:

  • 私信
  • 群组话题对话

飞书 ACP 是文本命令驱动的。没有原生斜杠命令菜单,因此直接在对话中使用 /acp ... 消息。

持久 ACP 绑定

使用顶层类型化 ACP 绑定将飞书私信或话题对话绑定到持久 ACP 会话。

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

在飞书私信或话题对话中,你可以直接生成并绑定 ACP 会话:

text
/acp spawn codex --thread here

说明:

  • --thread here 适用于私信和飞书话题。
  • 绑定的私信/话题中的后续消息会直接路由到该 ACP 会话。
  • v1 不支持针对普通非话题群组。

多代理路由

使用 bindings 将飞书私信或群组路由到不同代理。

json5
{
  agents: {
    list: [
      { id: "main" },
      {
        id: "clawd-fan",
        workspace: "/home/user/clawd-fan",
        agentDir: "/home/user/.openclaw/agents/clawd-fan/agent",
      },
      {
        id: "clawd-xi",
        workspace: "/home/user/clawd-xi",
        agentDir: "/home/user/.openclaw/agents/clawd-xi/agent",
      },
    ],
  },
  bindings: [
    {
      agentId: "main",
      match: {
        channel: "feishu",
        peer: { kind: "direct", id: "ou_xxx" },
      },
    },
    {
      agentId: "clawd-fan",
      match: {
        channel: "feishu",
        peer: { kind: "direct", id: "ou_yyy" },
      },
    },
    {
      agentId: "clawd-xi",
      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 获取查找提示。


配置参考

完整配置:网关配置

关键选项:

设置说明默认
channels.feishu.enabled启用/禁用通道true
channels.feishu.domainAPI 域名 (feishulark)feishu
channels.feishu.connectionMode事件传输模式websocket
channels.feishu.defaultAccount出站路由的默认帐户 IDdefault
channels.feishu.verificationTokenWebhook 模式必需-
channels.feishu.encryptKeyWebhook 模式必需-
channels.feishu.webhookPathWebhook 路由路径/feishu/events
channels.feishu.webhookHostWebhook 绑定地址127.0.0.1
channels.feishu.webhookPortWebhook 绑定端口3000
channels.feishu.accounts.<id>.appIdApp ID-
channels.feishu.accounts.<id>.appSecretApp Secret-
channels.feishu.accounts.<id>.domain每个帐户的 API 域名覆盖feishu
channels.feishu.dmPolicy私信策略pairing
channels.feishu.allowFrom允许的私信用户 Open ID 列表-
channels.feishu.groupPolicy群组策略open
channels.feishu.groupAllowFrom允许的群组 ID 列表-
channels.feishu.streaming启用流式回复true
channels.feishu.blockStreaming启用块级流式true
channels.feishu.typingIndicator发送输入状态指示器true
channels.feishu.resolveSenderNames解析发送者名称true
channels.feishu.textChunkLimit文本分块限制2000
channels.feishu.mediaMaxMb媒体大小限制 (MB)30

另请参阅