Skip to content

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 feishu wizard, 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? ​

CapabilityWeb-Based AIOpenClaw + 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 --version shows 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.

shell
openclaw channels login --channel feishu

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

shell
openclaw channels status --probe

You should see: the feishu channel shows as ready. If the Gateway is offline, start it first, then probe again.

  • openclaw channels status --probe shows 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:

shell
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 with oc_): 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 for open_id in openclaw logs --follow; or check openclaw pairing list feishu

Allow your groups in openclaw.json (example: allow two groups, one of which is exempt from @mention):

json
{
  "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:

LayerFieldWhat it governs
GroupgroupAllowFrom / groups.<群ID>Which groups can join
MentionrequireMentionWhether @mention is required in groups (required by default; exempt by default when groupPolicy: "open")
Persongroups.<群ID>.allowFromWhich 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_doc Creating a doctakes only a title—for the body, it has to write again using the returned document_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 the app_token it 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 familyWhat it doesDefault
tools.docFeishu Docs read/write✅ on
tools.wikiKnowledge base (depends on doc)✅ on
tools.driveCloud drive✅ on
tools.bitableBitable✅ on
tools.chatGroup/member info lookup✅ on
tools.scopesApp permission scope diagnostics✅ on
tools.permPermission 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.

json
{
  "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 answers

Checkpoint ✅ ​

  • openclaw channels status --probe shows 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: false get replies even without an @mention
  • Have it create a Feishu doc; the link opens and the title is correct
  • dmPolicy / groupPolicy are 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 /status and /model as 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:

FieldRecommended valueDescription
channels.feishu.connectionModewebsocket (default)Event transport, no public URL needed
channels.feishu.dmPolicypairing (default) / allowlistDirect-chat policy; a bot created via QR code is automatically locked to its owner
channels.feishu.groupPolicyallowlist (default)Group policy, used together with groupAllowFrom
channels.feishu.requireMentiontrue (default)Only replies when @-mentioned in groups; exempt by default under the open policy
channels.feishu.groups.<群ID>.allowFromFill in open_id per groupWhitelist of in-group senders
channels.feishu.tools.permfalse (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.