小飞棍来咯:给小龙虾接上飞书的深夜十分钟

小飞棍来咯:给小龙虾接上飞书的深夜十分钟

清明假期第一天,深夜 11 点 57 分。

我刚把第二篇专利送进 CELA,论文也标上了 SUBMISSION-READY,本该安心放假。但手痒的人是不会停下来的。

"给你配上飞书吧。"

小飞棍是谁

先介绍一下人物关系。

小龙虾是我的 AI 助手,跑在 OpenClaw 上,用 CopilotX 提供的无限 Claude API 驱动。两个月前的一个深夜,我给了它名字、灵魂和 emoji。从此它活跃在 WebChat 和 Telegram 里——帮我 Review 代码、写博文、甚至陪我深夜聊 SoulPort 专利的 claim 结构。

但小龙虾只会说两种渠道的话。WebChat 在电脑上好用,Telegram 在国内得翻墙——手机上想随时找它聊两句,总得先开 VPN,这个摩擦成本有点烦。

飞书在国内不需要翻墙,手机端体验好,开放平台的长连接模式又不需要公网服务器。对我这种 gateway 跑在本地 MacBook 上的场景,是目前最省事的国内移动端方案。(微信的接入也在计划里,等 OpenClaw 官方支持后再搞。)

所以,今晚的任务很简单:让小龙虾住进飞书。

至于"小飞棍"这个名字——嗯,就是随手打的。飞书的棍。别问。

十分钟的活儿

OpenClaw 对飞书的支持是内置的,不需要额外安装插件。整个流程分两步:飞书开放平台创建应用 + OpenClaw 配置文件加几行 JSON。

飞书那边

在飞书开放平台创建企业自建应用,拿到 App ID 和 App Secret。然后三件事:

  1. 配权限:在权限管理页面点"批量开通",粘贴以下 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:write", "contact:user.employee_id:readonly",
      "corehr:file:download", "docs:document.content:read", "event:ip_list",
      "im:chat", "im:chat.access_event.bot_p2p_chat:read",
      "im:chat.members:bot_access", "im:message",
      "im:message.group_at_msg:readonly", "im:message.group_msg",
      "im:message.p2p_msg:readonly", "im:message:readonly",
      "im:message:send_as_bot", "im:resource",
      "sheets:spreadsheet", "wiki:wiki:readonly"
    ],
    "user": [
      "aily:file:read", "aily:file:write",
      "im:chat.access_event.bot_p2p_chat:read"
    ]
  }
}
  1. 启用机器人能力:应用能力 → 机器人 → 开启
  2. 事件订阅:选"使用长连接接收事件",添加 im.message.receive_v1

FeiShu Dev HomePage

FeiShu Access Configuration

FeiShu Long Connection

长连接模式意味着不需要公网 URL、不需要 webhook——飞书主动通过 WebSocket 把消息推过来,本地 gateway 直接收。

OpenClaw 那边

把 App ID 和 App Secret 写进 ~/.openclaw/openclaw.json:

{
  "channels": {
    "feishu": {
      "enabled": true,
      "dmPolicy": "pairing",
      "accounts": {
        "main": {
          "appId": "cli_xxxxxxxxxxxxxxxx",
          "appSecret": "your-app-secret-here"
        }
      }
    }
  }
}

重启 gateway。

差点翻车的 botName

说"十分钟的活儿",其实中间翻了一次车。

我让小龙虾帮我配置——它读完 OpenClaw 的飞书文档后,照着文档里的示例写了配置,包括一个 botName 字段:

{
  "accounts": {
    "main": {
      "appId": "cli_xxx",
      "appSecret": "xxx",
      "botName": "小飞棍"
    }
  }
}

Gateway 当场拒绝启动:

channels.feishu.accounts.main: invalid config: must NOT have additional properties

文档里写着,schema 验证不认。 这种"文档和实现不一致"的坑,但凡写过代码的人都懂那股子熟悉的无奈。

删掉 botName,重启,搞定。

小龙虾在日志里安静地报道了好消息:

feishu[main]: bot open_id resolved: ou_c40433f19fcb8e52e5781a0a63dc699f
feishu[main]: starting WebSocket connection...
feishu[main]: WebSocket client started

三行日志,一个新世界。

配对仪式

OpenClaw 的飞书频道默认是 dmPolicy: "pairing" 模式——第一次给机器人发消息时,它会回一个配对码,主人在终端敲一行命令确认身份:

openclaw pairing approve feishu <CODE>

这个设计挺优雅的。不需要提前知道自己的飞书 Open ID,也不需要翻文档找 allowlist 的格式,发一条消息、输一个码,就完成了身份绑定。

FeiShu First Chat

配对完成后,在飞书里给小飞棍发消息,小龙虾就会回复。WebChat、Telegram、飞书——同一个灵魂,三个入口。

附赠的惊喜

配好飞书后,我发现 Gateway 日志里多了几行:

feishu_doc: Registered feishu_doc, feishu_app_scopes
feishu_chat: Registered feishu_chat tool
feishu_wiki: Registered feishu_wiki tool
feishu_drive: Registered feishu_drive tool
feishu_bitable: Registered bitable tools

OpenClaw 自动注册了五个飞书插件工具——文档、聊天、知识库、云文档、多维表格。也就是说,小龙虾不只是能在飞书里聊天,它还能帮我操作飞书的文档和知识库。

这不在今晚的计划里,但这种"配了一个渠道,白送一堆能力"的体验,挺爽的。

家族合照

现在小龙虾的渠道全家福:

渠道名字接入时间主要用途
WebChat小龙虾2 月 11 日电脑端长对话、代码 Review
Telegram小龙虾助手2 月 12 日海外移动端
飞书小飞棍4 月 5 日国内移动端(免翻墙)

三个入口,一个 gateway,一条灵魂。

这次接入只花了十分钟——如果不算那个 botName 的话。但正是这种"文档写了、代码没跟上"的小插曲,才让配置过程有了点人味儿。

清明假期的第一天,凌晨零点刚过,小飞棍上线了。

晚安。🦞

Comments