Feishu Integration: Official Plugin, Group Chats, and Document Tools
💡 One-sentence summary: use OpenClaw to create an AI colleague living inside Feishu — onboarded via the official plugin wizard, replying with streaming cards in group chats, and directly reading and writing Feishu docs and Bitable tables.
Lesson two on the office track. You picked this path in Scenario Hands-On. The previous lesson's WeCom relied on an external plugin from the Tencent WeCom team; this one is even easier — OpenClaw Feishu integration relies on theofficial @openclaw/feishu plugin (built into the official channel directory). Bot DMs + group chats are already production-ready, replies arrive as streaming cards, and it comes with Feishu doc / wiki / drive / Bitable tools. All examples are based on OpenClaw v2026.10.9.
What You'll Be Able to Do After This Lesson
- Run the
openclaw channels login --channel feishuwizard, and in 15 minutes get the bot live on Feishu (auto-created by QR scan, or manually paste the App ID / App Secret) - @mention it in Feishu one-on-one chats and groups, and receive streaming card replies that refresh as they generate
- Have it create new Feishu docs to write meeting minutes and register to-dos into Bitable tables
- Use a group allowlist + in-group sender allowlist + @mention threshold to control who can use it and which groups it can join
Why OpenClaw Instead of a Web-Based AI?
| Capability | Web-Based AI | OpenClaw + Official Feishu Plugin |
|---|---|---|
| Where it appears | ❌ A separate webpage, unusable in groups | ✅ Right in Feishu DMs/group chats, just @mention it |
| Reply experience | ❌ Nothing shows until the whole response is generated | ✅ Cards update in a streaming fashion — watch as it generates |
| Feishu business operations | ❌ Can't touch docs/Bitable tables/wiki | ✅ Built-in doc / wiki / drive / Bitable tool family |
| Integration cost | ❌ No integration to speak of | ✅ Official plugin + wizard, WebSocket needs no public internet by default |
| Data and models | ❌ All conversations sit with the service provider | ✅ The Gateway runs on your own machine, and you can swap models freely (including domestic ones) |
Your Current Pain Points
- Requirements and conclusions are scattered across dozens of groups and hundreds of Feishu docs; when a newcomer asks about "last time's wording," no one can give a complete answer
- After meetings, no one wants to write up the minutes; to-dos spread by word of mouth and are forgotten within a week
- You want to set up an AI assistant for the whole team, but you don't dare paste internal data into a public web app
When to Use This Approach
When you need:
- An AI assistant that lives right inside Feishu — colleagues just @mention it in the chat window, no new tools to install
- It can readily create docs, write minutes, register entries in Bitable tables, and search the wiki
- Integration without exposing your server to the public internet (the WebSocket long connection is the default mode)
And you don't want to:
- Switch to a browser every time and copy-paste inside a web app
- Write a Feishu event callback service from scratch yourself
- Entrust internal conversations to a third-party hosted service
🎒 Before You Start
- You've completed Scenario Hands-On: Choose Your Track: the Gateway is running and connected to at least one model
openclaw --versionshows 2026.5.29 or later (the minimum version requirement for the Feishu channel; this tutorial's baseline v2026.10.9 satisfies it)- An account that can log in to Feishu Open Platform and create a custom app (for the international Lark, the equivalent is Lark Developer)
- A cup of water ☕ — in 15 minutes you'll have one more AI colleague in your Feishu
Follow Along
Step 1: Run the OpenClaw Feishu channel wizard and install the official plugin (@openclaw/feishu)
Why: The Feishu channel is provided by the official @openclaw/feishu plugin — no need to handcraft it in raw config; the wizard installs the plugin and configures credentials in one go.
openclaw channels login --channel feishuThe wizard gives you two paths:
- Option A: create the bot by scanning a QR code—scan the QR code in the Feishu App and the bot is created automatically; this path locks the private chat so only you can use it (
dmPolicy: "allowlist"+ your open_id), the least hassle - Option B: paste credentials manually—first go toFeishu Open Platform to create a custom app, then paste the App ID and App Secret into the wizard
The wizard also asks about two things: the API domain (domestic Feishu feishu / international Lark) and the group policy.
You should see: the wizard completes, the configuration is written, no errors.
💡 Scanning the QR code in the domestic Feishu App often gets no response
The official troubleshooting page lists this as a known situation: the domestic Feishu mobile client does not always respond to QR-code bot creation. If you hit this, rerun openclaw channels login --channel feishu and choose manual mode—pasting the App ID / App Secret works just as well.
- The wizard completes without errors
Step 2: verify the Feishu channel is online
Why: configuration changes are hot-reloaded, but you should confirm the channel is truly ready before going to talk to the bot.
openclaw channels status --probeYou should see: the feishu channel shows as ready. If the Gateway is offline, start it first, then probe again.
openclaw channels status --probeshows feishu as ready
Step 3: send the first private message and approve the pairing code
Why: the default is dmPolicy: "pairing"—an unknown user's first private message only receives a pairing code, and access is granted after you approve it in the CLI. This is the first gate preventing people outside your company from freeloading on the bot.
How: find the bot in Feishu and send “hello” in a private message.
If you created the bot by pasting credentials manually, the first conversation will receive a pairing code—go back to the terminal to approve it:
openclaw pairing list feishu
openclaw pairing approve feishu <配对码>You should see: the bot starts replying, and the reply is updated streaming inside a card—refreshing as it generates, which is the Feishu Card Kit streaming card (streaming.mode defaults to partial). A bot created via QR code has its private chat already locked to only you, so pairing won't be triggered.
💡 Feishu has no slash-command menu
/status (view status), /reset (reset session), /model (check/switch model), /followup <消息> (queue an additional message) must all be sent as plain text. Control commands do not go into the normal message queue—you can use /status to check progress even while it's busy working.
Step 4: add it to a group, configure the group allowlist and @mentions
Why: the default is groupPolicy: "allowlist" (any group not listed is ignored) and in groups the bot must be @mentioned to reply—get the IDs first, then add your groups to the allowlist.
First get two IDs:
- Group ID (
chat_id, starts withoc_): open the group → menu in the top-right corner → Settings, it's written right on the settings page - User open_id (starts with
ou_): send the bot a private message, look foropen_idinopenclaw logs --follow; or checkopenclaw pairing list feishu
Allow your groups in openclaw.json (example: allow two groups, one of which is exempt from @mention):
{
"channels": {
"feishu": {
"groupPolicy": "allowlist",
"groupAllowFrom": ["oc_xxx", "oc_yyy"],
"groups": {
"oc_xxx": { "requireMention": false }
}
}
}
}After editing, wait for the hot reload to take effect (no need to restart the Gateway), then add the bot to the group and say something.
You should see: messages in allowlisted groups get replies; groups with requireMention: false reply without @mention; messages in unlisted groups sink like a stone.
Three layers of control each govern one segment:
| Layer | Field | What it governs |
|---|---|---|
| Group | groupAllowFrom / groups.<群ID> | Which groups can join |
| Mention | requireMention | Whether @mention is required in groups (required by default; exempt by default when groupPolicy: "open") |
| Person | groups.<群ID>.allowFrom | Which members in a group have a say (can be set globally via groupSenderAllowFrom) |
⚠️ @everyone doesn't count as @bot
Broadcast mentions like @all / @_all are not treated as a mention of the bot; to trigger a reply, you must @mention the bot itself directly.
Step 5: have it operate Feishu Docs and Bitable
Why: this is the most valuable part of the Feishu channel—the plugin ships with a full set of Feishu work tools, enabled by default; you just have to ask.
How: say to it “create a Feishu doc titled 'Weekly Meeting Notes for Month 11'”.
You should see: it creates the doc and sends the link back into the conversation.
Know what to expect from two tool behaviors:
feishu_docCreating a doctakes only a title—for the body, it has to write again using the returneddocument_id. So say “create a doc and write the following content into it” and let it split this into two steps itself; don't just say “create a doc”- Bitable recognizes the application token in
/base/links (or theapp_tokenit returns), and does not recognize the node token in/wiki/links—when handing it a Bitable, pasting a/base/link is the most reliable
Tool-family toggles (all under channels.feishu.tools.*):
| Tool family | What it does | Default |
|---|---|---|
tools.doc | Feishu Docs read/write | ✅ on |
tools.wiki | Knowledge base (depends on doc) | ✅ on |
tools.drive | Cloud drive | ✅ on |
tools.bitable | Bitable | ✅ on |
tools.chat | Group/member info lookup | ✅ on |
tools.scopes | App permission scope diagnostics | ✅ on |
tools.perm | Permission management | ⚠️ off (sensitive, enable as needed) |
💡 This is the unique value of OpenClaw
A web-based AI can't even get into your Feishu; this Claw natively carries doc, knowledge base, cloud drive, and Bitable tools—tasks like “write the to-dos we just discussed into the Bitable” are a single sentence, no exporting or importing needed on your part.
Step 6: before going live, tighten private chats too
Why: manually created apps default to dmPolicy: "pairing" (pairing codes approved one by one); for use within a team, switching to an allowlist is easier; a bot created via QR code is already locked to only you, so you can skip this step.
{
"channels": {
"feishu": {
"dmPolicy": "allowlist",
"allowFrom": ["ou_user1", "ou_user2"]
}
}
}You should see: DMs from users outside the whitelist no longer get a response. For the complete system of access control and security hardening, see Security Hardening (I): Access Control and Identity.
📋 Magic Prompts
Paste the following Prompts directly into a Feishu chat window and send them to the bot. They all use the Feishu tool family unlocked in step 5.
📝 Meeting Minutes Straight into a Doc in One Click
Expected result: the bot calls the feishu_doc tool, first creates a titled doc, then writes the body, and sends the doc link back to the group.
## Role
You are a meeting secretary, skilled at turning lengthy discussions into actionable minutes.
## Task
Organize the record of the meeting below into minutes: first create a new doc in Feishu titled 【Document Title】, then write the minutes body into that doc, and finally send the doc link to this group.
## Input Information
### Required Fields
- Document title: 【Meeting name + date】
- Meeting record: 【Paste the transcript or your rough notes】
### Optional Fields
- Key topics: 【Topics that need to be expanded on?】
## Output Specification
Structure the minutes in three sections: "Conclusions / Action Items / Open Issues"; use a table for action items: Item | Owner | Deadline. In the group, reply only with the doc link and a one-sentence summary.
## Constraints
- ✅ Every action item is assigned to a specific person
- ✅ Action items without an assigned owner are listed separately as unclaimed
- ❌ Do not flood the group with the full minutes text📋 Registering Action Items Discussed in the Group into Bitable
Expected result: the bot calls the feishu_bitable_* tool and writes each action item from the group chat into the Bitable one by one.
## Role
You are a project assistant, responsible for turning group chat conclusions into trackable records.
## Task
Write every action item that appeared in today's discussion in this group, one by one, into the Bitable 【paste the table link starting with /base/】.
## Input Information
### Required Fields
- Target table: 【Bitable link starting with /base/】
### Optional Fields
- Default deadline: 【What date to fill in uniformly for action items with no explicit deadline?】
## Output Specification
One row per action item: Item | Owner | Deadline. After writing everything, reply in the group with a one-line summary: how many items in total and who they were assigned to.
## Constraints
- ✅ Only register action items that actually appeared in the group
- ❌ Do not invent action items
- ❌ If the table link does not start with /base/, ask me first instead of writing anyway📚 Knowledge Base Q&A with Sources
Expected result: the bot answers after querying the knowledge base with the feishu_wiki tool, attaching links to the referenced nodes.
## Role
You are the team knowledge steward; you must provide sources when answering questions.
## Task
Search the Feishu knowledge base for material related to 【Question Topic】, answer my question, and attach links to the knowledge base nodes you referenced.
## Input Information
### Required Fields
- Question: 【Your question】
### Optional Fields
- Scope restriction: 【Only search within a certain space or node?】
## Output Specification
Give a one-sentence answer first, then no more than 3 pieces of supporting evidence, each with a knowledge base link.
## Constraints
- ✅ If you can't find it, say so plainly and list the locations you searched
- ❌ Do not fabricate answersCheckpoint ✅
openclaw channels status --probeshows the feishu channel is ready- Send a message via DM; the reply streams into a card with live updates
- In a group, @mentioning the bot gets a reply; groups with
requireMention: falseget replies even without an @mention - Have it create a Feishu doc; the link opens and the title is correct
dmPolicy/groupPolicyare both tightened to your needs (or you explicitly decided to keep the defaults)
Pitfall Reminders
❌ The bot joined the group but ignores what people say
Cause: by default groups require @mentioning the bot; or the group is not in the whitelist (groupPolicy defaults to allowlist), or it was set to disabled.
Correct approach: following step 4, add the group ID (starting with oc_) to groupAllowFrom and @mention it when speaking; if it still doesn't work, run openclaw logs --follow to check the logs.
❌ DMs get no response either; no messages are received at all
Cause: the Feishu Open Platform side is not configured properly — the app hasn't been published and approved, the event subscription is missing im.message.receive_v1, event receiving isn't set to long connection (WebSocket), or the permission scopes aren't all granted.
Correct approach: go through each item: app published and approved → event subscription includes im.message.receive_v1 → receiving mode set to long connection → add all required scopes → openclaw gateway status to confirm the Gateway is running.
❌ Scanning the QR code to create a bot with the domestic Feishu App does nothing
Cause: the domestic Feishu mobile client doesn't always respond to the QR-code flow (a known case on the official troubleshooting page).
Correct approach: rerun openclaw channels login --channel feishu and choose manual mode — create a custom app on the Open Platform, then copy the App ID / App Secret into the wizard.
❌ The App Secret has leaked
Correct approach: immediately reset the Secret on the Feishu Open Platform → update the value in the config → openclaw channels status --probe to confirm hot reload has taken effect. The config is hot-reloaded, so no Gateway restart is needed.
Advanced Tips (Optional)
Multiple Accounts: One Gateway Running Multiple Feishu Bots
Configure multiple bots in accounts (e.g., main / backup) and use defaultAccount to specify the default outbound account. Account-level fields override the top level, and TTS supports deep merging per account — sharing one set of voice credentials while each bot uses a different voice.
Group Session Granularity and Topic Threading
groupSessionScope controls how group messages map to sessions: group (default, one session per group), group_sender (split by person), group_topic (split by topic), group_topic_sender (topic + person). To make the bot's replies automatically start a topic thread, configure replyInThread: "enabled".
Dynamic Agent: Isolating a Public Bot per User
When opening up to the public (dmPolicy: "open" + allowFrom: ["*"]), enable dynamicAgentCreation.enabled: true — each DM user automatically gets an independent agent (ID like feishu-<open_id>), with workspace, memory, and session history fully isolated. Note two things: this is message-context isolation, not a security boundary against malicious co-tenancy; and it requires configWrites to stay enabled (on by default).
Sticker Replies
With actions.sticker: true, the bot can send back stickers it has** previously received** as-is; additionally configure stickerSets to search stickers by keyword (e.g., "like" → 👍). Limits: 32 bot sticker sets, 256 stickers per set, and 1–8 keywords per sticker. Note that it can only send stickers it has received; uploading new stickers and searching the sticker store are not supported.
Webhook Mode (Usually Unnecessary)
WebSocket is the default and works without opening the public internet. Only switch to connectionMode: "webhook" if you genuinely need callbacks: it shares the /feishu/events path on the Gateway's HTTP port (default 18789), requires verificationToken + encryptKey, and the Gateway host's clock must differ from Feishu's by less than 1 hour (keep NTP synchronized), otherwise signature verification returns 401.
Limits and Two Quota-Saving Switches
Media upload limit is 30 MB (mediaMaxMb); long text is chunked at 4000 characters (textChunkLimit). To save Feishu API quota: typingIndicator: false turns off the "typing" reaction, and resolveSenderNames: false turns off sender name lookup.
Multi-agent routing (routing messages to different agents by user/group) is covered in C3 Multi-Agent Collaboration.
Lesson Summary
✅ You can now:
- Complete OpenClaw Feishu integration: an AI assistant with streaming card replies in direct chats and group chats (install the plugin via the wizard → pair it into a group → unlock document tools)
- Send control commands like
/statusand/modelas plain text, and check progress anytime while it works - Have it create Feishu documents, write meeting notes, register entries in Bitable, and search the knowledge base
- Control access with whitelists (direct chats / groups / in-group senders) plus an @-mention threshold
Key configuration fields recap:
| Field | Recommended value | Description |
|---|---|---|
channels.feishu.connectionMode | websocket (default) | Event transport, no public URL needed |
channels.feishu.dmPolicy | pairing (default) / allowlist | Direct-chat policy; a bot created via QR code is automatically locked to its owner |
channels.feishu.groupPolicy | allowlist (default) | Group policy, used together with groupAllowFrom |
channels.feishu.requireMention | true (default) | Only replies when @-mentioned in groups; exempt by default under the open policy |
channels.feishu.groups.<群ID>.allowFrom | Fill in open_id per group | Whitelist of in-group senders |
channels.feishu.tools.perm | false (default) | Permission management tool, enable only as needed for sensitive operations |
Next lesson preview
In the next lesson A3 WeChat, QQ, and Yuanbao: Tencent ecosystem channel integration, you will learn:
- The capability boundaries of personal WeChat integration (direct chats only, no group chats)
- Official QQ bot: create a bot on the q.qq.com open platform and integrate it with a single command
- Tencent Yuanbao channel: how to configure WebSocket mode
- Configuration differences between Tencent ecosystem channels and Feishu/WeCom
Still using WeChat/QQ for communication at your company? In the next lesson, hook them up too — channels don't interfere with each other, and a single Gateway takes them all.