@openclaw/feishu 外掛連接 Feishu/Lark(整合式協作平台):機器人私訊、群組聊天、串流卡片回覆,以及 Feishu 文件/wiki/雲端硬碟/Bitable 工具。
狀態: 機器人私訊與群組聊天已可用於生產環境。WebSocket 是預設事件傳輸方式(不需要公開 URL);網路鉤子模式為選用。
快速開始
需要 OpenClaw 2026.5.29 或以上版本。執行
openclaw --version 檢查。使用 openclaw update 升級。執行通道設定精靈
@openclaw/feishu 外掛,這會先安裝它,然後逐步完成設定:- 手動設定:貼上來自 Feishu Open Platform (
https://open.feishu.cn) 或 Lark Developer (https://open.larksuite.com) 的 App ID 和 App Secret。 - QR 設定:在 Feishu 應用程式中掃描 QR code,自動建立機器人。此流程會將私訊鎖定為你自己的帳號(
dmPolicy: "allowlist"搭配你的open_id)。
存取控制
私訊
設定channels.feishu.dmPolicy(預設:pairing)來控制誰可以向機器人傳送私訊:
| 值 | 行為 |
|---|---|
"pairing" | 未知使用者會收到配對碼;透過命令列介面核准 |
"allowlist" | 只有列在 allowFrom 中的使用者可以聊天 |
"open" | 公開私訊;設定驗證要求 allowFrom 包含 "*"。非萬用字元項目仍會縮小存取範圍 |
群組聊天
群組政策(channels.feishu.groupPolicy,預設:allowlist):
| 值 | 行為 |
|---|---|
"open" | 回應群組中的所有訊息 |
"allowlist" | 只回應 groupAllowFrom 中的群組,或明確設定於 groups.<chat_id> 下的群組 |
"disabled" | 停用所有群組訊息;明確的 groups.<chat_id> 項目不會覆寫此設定 |
channels.feishu.requireMention):
- 預設:需要 @mention,但有效群組政策為
"open"時除外;在該情況下預設為false,因此無法帶有提及的訊息(例如圖片)仍可送達代理程式。 - 明確設定
true或false可覆寫;逐群組覆寫:channels.feishu.groups.<chat_id>.requireMention。 - 僅廣播的
@all和@_all不會被視為機器人提及。若訊息同時提及@all並直接提及機器人,仍會算作機器人提及。
群組設定範例
允許所有群組,不需要 @mention
允許所有群組,仍需要 @mention
只允許特定群組
allowlist 模式中,你也可以加入明確的 groups.<chat_id> 項目來允許某個群組。明確項目不會覆寫 groupPolicy: "disabled"。groups.* 下的萬用字元預設值會設定相符群組,但它們本身不會允許群組。
限制群組內的傳送者
channels.feishu.groupSenderAllowFrom 會為所有群組設定相同的傳送者允許清單;逐群組的 allowFrom 優先。
取得群組/使用者 ID
群組 ID(chat_id,格式:oc_xxx)
在 Feishu/Lark 中開啟群組,點擊右上角的選單圖示,然後前往 設定。群組 ID(chat_id)會列在設定頁面上。

使用者 ID(open_id,格式:ou_xxx)
啟動閘道,向機器人傳送私訊,然後檢查日誌:
open_id。你也可以檢查待處理的配對請求:
常用命令
| 命令 | 說明 |
|---|---|
/status | 顯示機器人狀態 |
/reset | 重設目前工作階段 |
/model | 顯示或切換 AI 模型 |
Feishu/Lark 不支援原生斜線命令選單,因此請將這些命令以純文字訊息傳送。
疑難排解
機器人在群組聊天中沒有回應
- 確認機器人已加入群組
- 確認你有 @mention 機器人(預設需要)
- 確認
groupPolicy不是"disabled" - 檢查日誌:
openclaw logs --follow
機器人沒有收到訊息
- 確認機器人已在 Feishu Open Platform / Lark Developer 發布並核准
- 確認事件訂閱包含
im.message.receive_v1 - 確認已選取 持久連線(WebSocket)
- 確認已授予所有必要的權限範圍
- 確認閘道正在執行:
openclaw gateway status - 檢查日誌:
openclaw logs --follow
QR 設定在 Feishu 行動應用程式中沒有反應
- 重新執行設定:
openclaw channels login --channel feishu - 選擇手動設定
- 在 Feishu Open Platform 中建立自建應用程式,並複製其 App ID 和 App Secret
- 將這些認證貼到設定精靈中
App Secret 外洩
- 在 Feishu Open Platform / Lark Developer 中重設 App Secret
- 更新設定中的值
- 重新啟動閘道:
openclaw gateway restart
進階設定
多個帳號
defaultAccount 控制當外送 API 未指定 accountId 時要使用哪個帳號。帳號項目會繼承頂層設定;大多數頂層鍵都可以在每個帳號中覆寫。
accounts.<id>.tts 使用與 messages.tts 相同的形狀,並會深度合併到全域 TTS 設定之上,因此多機器人的 Feishu 設定可以在全域保留共用的提供者認證,同時只針對每個帳號覆寫語音、模型、角色設定或自動模式。
訊息限制
textChunkLimit- 外送文字區塊大小(預設:4000個字元)chunkMode-"length"(預設)會在限制處分割;"newline"優先使用換行邊界mediaMaxMb- 媒體上傳/下載限制(預設:30MB)
串流
Feishu/Lark 支援透過互動卡片進行串流回覆(Card Kit streaming API)。啟用後,機器人會在產生文字時即時更新卡片。streaming: false 會以單一訊息傳送完整回覆;renderMode: "raw"(純文字而非卡片)也會停用串流卡片。blockStreaming 預設為關閉;只有在你想於最終回覆前先送出已完成的助理區塊時才啟用。
配額最佳化
使用兩個選用旗標減少 Feishu/Lark API 呼叫次數:typingIndicator(預設true):設定為false以略過輸入中反應呼叫resolveSenderNames(預設true):設定為false以略過傳送者個人檔案查詢
群組工作階段範圍與主題執行緒
channels.feishu.groupSessionScope(頂層、每個帳號或每個群組)控制群組訊息如何對應到代理程式工作階段:
| 值 | 工作階段 |
|---|---|
"group"(預設) | 每個群組聊天一個工作階段 |
"group_sender" | 每個(群組 + 傳送者)一個工作階段 |
"group_topic" | 每個主題執行緒一個工作階段;退回使用群組工作階段 |
"group_topic_sender" | 每個(主題 + 傳送者)一個工作階段;退回使用(群組 + 傳送者) |
thread_id(omt_*)作為標準主題工作階段鍵。如果原生主題起始事件省略 thread_id,OpenClaw 會在路由該輪對話前從 Feishu 補齊它。OpenClaw 轉換成執行緒的一般群組回覆會繼續使用回覆根訊息 ID(om_*),因此第一輪與後續輪次會留在同一個工作階段中。
設定 replyInThread: "enabled"(頂層或每個群組)可讓機器人回覆建立或延續 Feishu 主題執行緒,而不是行內回覆。topicSessionMode 是 groupSessionScope 的已棄用前身;請優先使用 groupSessionScope。
Feishu 工作區工具
此外掛隨附用於 Feishu 文件、聊天、知識庫、雲端儲存、權限和 Bitable 的代理程式工具,以及相應的 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 下。
ACP 工作階段
Feishu/Lark 支援私訊和群組執行緒訊息的 ACP。Feishu/Lark ACP 由文字命令驅動 - 沒有原生斜線命令選單,因此請直接在對話中使用/acp ... 訊息。
持久 ACP 綁定
從聊天產生 ACP
在 Feishu/Lark 私訊或討論串中:--thread here 適用於私訊和 Feishu/Lark 討論串訊息。已綁定對話中的後續訊息會直接路由到該 ACP 工作階段。
多代理路由
使用bindings 將 Feishu/Lark 私訊或群組路由到不同代理。
match.channel:"feishu"match.peer.kind:"direct"(私訊)或"group"(群組聊天)match.peer.id: 使用者 Open ID(ou_xxx)或群組 ID(oc_xxx)
每位使用者的代理隔離(動態代理建立)
啟用dynamicAgentCreation,即可為每位私訊使用者自動建立隔離的代理執行個體。每位使用者都有自己的:
- 獨立工作區目錄
- 個別的
USER.md/SOUL.md/MEMORY.md - 私人對話歷史
- 隔離的 Skills 和狀態
動態綁定包含正規化後的 Feishu
accountId,因此預設帳號和具名帳號會將每位傳送者路由到正確的動態代理。如果具名帳號在較舊版本中建立了未限定範圍的動態代理,該舊版代理仍會計入 maxAgents。移除前,請確認預設帳號未使用它,或暫時提高 maxAgents;OpenClaw 無法安全推斷模糊的舊版狀態屬於哪個帳號。快速設定
運作方式
當新使用者傳送第一則私訊時:- 頻道會產生唯一的
agentId:預設帳號使用feishu-{user_open_id},具名帳號則使用有界的帳號前綴身分摘要 - 在
workspaceTemplate路徑建立新的工作區 - 註冊代理,並為此使用者建立綁定
- 工作區輔助程式會在第一次存取時確保啟動檔案(
AGENTS.md、SOUL.md、USER.md等)存在 - 將此使用者之後的所有訊息路由到其專屬代理
設定選項
| 設定 | 說明 | 預設值 |
|---|---|---|
channels.feishu.dynamicAgentCreation.enabled | 啟用自動為每位使用者建立代理 | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate | 動態代理工作區的路徑範本 | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate | 代理目錄名稱範本 | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents | 可建立的動態代理數量上限 | 無限制 |
{agentId}- 產生的代理 ID(例如feishu-ou_xxxxxx或feishu-support-<identity_digest>){userId}- 傳送者的 Feishu open_id(例如ou_xxxxxx)
工作階段範圍
session.dmScope 控制直接訊息如何對應到代理工作階段。這是會影響所有頻道的全域設定。
| 值 | 行為 | 最適合 |
|---|---|---|
"main" | 每位使用者的私訊對應到其代理的主要工作階段 | 你想自動載入 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",並手動管理啟動檔案。
當具名 Feishu 帳號應該為同一位傳送者保留不同工作階段時,請使用
"per-account-channel-peer"。動態綁定會保留帳號範圍。典型多使用者部署
驗證
檢查閘道記錄,確認動態建立正在運作:注意事項
- 工作區隔離:每位使用者都有自己的工作區目錄和代理執行個體。在正常訊息流程中,使用者無法看到彼此的對話歷史或檔案。
- 安全邊界:這是訊息內容脈絡隔離機制,不是敵意共同租戶的安全邊界。代理程序和主機環境是共用的。
- 設定寫入必須保持啟用:動態代理建立會將代理和綁定寫入設定;當
channels.feishu.configWrites為false時會略過(預設:啟用)。 bindings應為空:動態代理會自動註冊自己的綁定- 升級路徑:現有手動綁定會繼續與動態代理並行運作
session.dmScope是全域設定:這會影響所有頻道,不只是 Feishu
設定參考
完整設定:閘道設定| 設定 | 描述 | 預設值 |
|---|---|---|
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 | 網路鉤子模式必填 | - |
channels.feishu.encryptKey | 網路鉤子模式必填 | - |
channels.feishu.webhookPath | 網路鉤子路由路徑 | /feishu/events |
channels.feishu.webhookHost | 網路鉤子繫結主機 | 127.0.0.1 |
channels.feishu.webhookPort | 網路鉤子繫結連接埠 | 3000 |
channels.feishu.accounts.<id>.appId | App ID | - |
channels.feishu.accounts.<id>.appSecret | App Secret | - |
channels.feishu.accounts.<id>.domain | 個別帳號網域覆寫 | feishu |
channels.feishu.accounts.<id>.tts | 個別帳號 TTS 覆寫 | messages.tts |
channels.feishu.dmPolicy | DM 政策(pairing、allowlist、open) | pairing |
channels.feishu.allowFrom | DM 允許清單(open_id 清單) | - |
channels.feishu.groupPolicy | 群組政策(open、allowlist、disabled) | allowlist |
channels.feishu.groupAllowFrom | 群組允許清單 | - |
channels.feishu.groupSenderAllowFrom | 套用至所有群組的傳送者允許清單 | - |
channels.feishu.requireMention | 在群組中要求 @提及 | true(政策為 open 時為 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.dynamicAgentCreation.enabled | 啟用自動個別使用者代理建立 | false |
channels.feishu.dynamicAgentCreation.workspaceTemplate | 動態代理工作區的路徑範本 | ~/.openclaw/workspace-{agentId} |
channels.feishu.dynamicAgentCreation.agentDirTemplate | 代理目錄名稱範本 | ~/.openclaw/agents/{agentId}/agent |
channels.feishu.dynamicAgentCreation.maxAgents | 要建立的動態代理數量上限 | 無限制 |
channels.feishu.textChunkLimit | 訊息區塊大小 | 4000 |
channels.feishu.chunkMode | 區塊分割(length 或 newline) | length |
channels.feishu.mediaMaxMb | 媒體大小限制 | 30 |
channels.feishu.renderMode | 回覆算繪(auto、raw、card) | auto |
channels.feishu.streaming | 串流卡片輸出 | true |
channels.feishu.blockStreaming | 已完成區塊回覆串流 | 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 | 啟用 App 範圍診斷工具 | 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 的別名 | 繼承 |
支援的訊息類型
接收
- ✅ 文字
- ✅ 富文字(貼文)
- ✅ 圖片
- ✅ 檔案
- ✅ 音訊
- ✅ 影片/媒體
- ✅ 貼圖
file_key JSON。設定 tools.media.audio 時,OpenClaw 會下載語音記事資源,並在代理回合前執行共用音訊轉錄,讓代理收到語音逐字稿。如果 Feishu 直接在音訊酬載中包含逐字稿文字,則會使用該文字,不會再進行一次 ASR 呼叫。若沒有音訊轉錄提供者,代理仍會收到 <media:audio> 佔位符以及已儲存的附件,而不是原始 Feishu 資源酬載。
傳送
- ✅ 文字
- ✅ 圖片
- ✅ 檔案
- ✅ 音訊
- ✅ 影片/媒體
- ✅ 互動式卡片(包含串流更新)
- ⚠️ 富文字(貼文樣式格式;不支援完整 Feishu/Lark 編寫能力)
audio 訊息類型,並需要 Ogg/Opus 上傳媒體(file_type: "opus")。現有的 .opus 和 .ogg 媒體會直接以原生音訊傳送。只有在回覆要求語音傳遞(audioAsVoice / 訊息工具 asVoice,包含 TTS 語音記事回覆)時,MP3/WAV/M4A 及其他可能的音訊格式才會透過 ffmpeg 轉碼為 48kHz Ogg/Opus。一般 MP3 附件仍會維持一般檔案。如果缺少 ffmpeg 或轉換失敗,OpenClaw 會退回為檔案附件並記錄原因。
執行緒與回覆
- ✅ 內嵌回覆
- ✅ 執行緒回覆
- ✅ 回覆執行緒訊息時,媒體回覆會保持執行緒感知