Auth model
Installed plugin + tenant app credentials + WebSocket bot config
A Lark/Feishu lane for teams that want enterprise chat on a plugin track.
Feishu integration for OpenClaw focuses on plugin installation, WebSocket bot setup, tenant permissions, verification, and team rollout hygiene.
Auth model
Installed plugin + tenant app credentials + WebSocket bot config
Safety stance
Treat tenant-level permissions and app scopes as part of the rollout plan, not a one-time form fill.
Verification ritual
Validate plugin registration, bot connectivity, and one message round-trip inside the intended tenant workspace.
Rollout mode
30–45 min setup
Feishu over long connection
OpenClaw uses Feishu’s WebSocket event subscription, defaults DMs to pairing, and requires @mentions in groups unless you relax the policy.
Watch the long connection
Plugin installation drift and tenant permission mismatches can stall the bot before the first message lands.
Feishu is a good OpenClaw lane for teams already living inside Feishu or Lark, but it is not a “paste one token and go” surface. The real trust boundary is the combination of plugin installation, tenant app permissions, event subscription mode, and OpenClaw DM / group policy.
Feishu is documented upstream as a separate plugin channel, not a core bundled lane.
That matters operationally because there are two distinct setup layers:
@openclaw/feishuIf either layer is incomplete, the bot can look “configured” while still receiving nothing useful.
For teams on the international Lark tenant, there is a second difference worth calling out early: the docs require domain: "lark" when you are not on the default Feishu domain.
The Feishu plugin currently supports:
The default event transport is WebSocket long connection, which is the cleanest beginner path because it avoids exposing a public webhook URL.
Webhook mode exists, but it adds more surface area and requires a verificationToken.
Feishu failures usually come from mixing two separate systems together.
Before OpenClaw policy matters, Feishu must accept and deliver events to the app.
That means the following have to be true first:
im.message.receive_v1,The Feishu docs also warn that long-connection event subscription may fail to save if the gateway is not already running.
Once messages reach the gateway, OpenClaw still evaluates channel policy:
dmPolicyallowFromgroupPolicygroupAllowFromgroups.<chat_id>.requireMentionSo a connected Feishu bot can still stay quiet by design.
Put these facts near the top of your operator notes because they shape every later decision:
openclaw plugins install @openclaw/feishuFor Lark tenants, explicitly set the domain rather than assuming the default Feishu endpoint is correct.
The upstream docs show dmPolicy: "pairing" as the default DM stance. That is still the best first move here.
For groups, a safer first production posture is stricter than the documented default:
pairing,@mention in those groups,{
channels: {
feishu: {
enabled: true,
dmPolicy: 'pairing',
groupPolicy: 'allowlist',
groupAllowFrom: ['oc_team_room'],
accounts: {
main: {
appId: 'cli_xxx',
appSecret: 'xxx',
botName: 'Ops Assistant',
},
},
groups: {
oc_team_room: {
requireMention: true,
},
},
},
},
}
Why this is a good starting shape:
If the tenant is on Lark rather than Feishu, add the domain explicitly:
{
channels: {
feishu: {
domain: 'lark',
accounts: {
main: {
appId: 'cli_xxx',
appSecret: 'xxx',
},
},
},
},
}
This channel is not bundled with core OpenClaw.
Install it first:
openclaw plugins install @openclaw/feishu
If you are operating from a local checkout, the docs also support:
openclaw plugins install ./extensions/feishu
Only after that should you run:
openclaw onboard
or:
openclaw channels add
The official docs explicitly list both onboarding and CLI-based setup.
The upstream doc’s order matters here:
im.message.receive_v1Two operator notes matter more than they look:
If you skip either, you can spend a long time debugging the wrong layer.
The documented default is WebSocket long connection. For most operators, that should remain the first path.
Use webhook mode only if you actually need it.
If you do move to webhook mode, the docs require:
connectionMode: "webhook"verificationToken127.0.0.1 by default unless you intentionally change webhookHostThat default bind behavior is a good example of why webhook mode should be treated as an explicit infrastructure choice, not just another toggle.
Feishu’s group support is powerful enough to become noisy if you leave policy vague.
The local official docs describe three layers you should separate mentally:
channels.feishu.groupPolicy supports:
openallowlistdisabledThe docs mark open as the default, but many teams will want allowlist first.
Per-group requireMention defaults to true.
That default is useful. Keep it until the bot has earned ambient presence in shared rooms.
If your team primarily talks to the bot by replying inside a thread under a bot message, note this limitation:
@bot mention to trigger a response when requireMention: true.Today, the only operator workaround is to set requireMention: false for that group, which affects the whole group (not just thread replies).
If you choose that workaround, compensate by tightening at least one other layer:
groupPolicy: "allowlist" (do not leave it open), and/orgroups.<chat_id>.allowFrom to restrict who can drive the bot in that group.The docs also support groups.<chat_id>.allowFrom, which gates all processed messages in that group by sender open_id.
That is stronger than a control-command allowlist. Use it when a room itself is valid but only a subset of members should drive the bot.
The Feishu docs expose two API-usage controls:
typingIndicatorresolveSenderNamesDefaults are true.
If you want to reduce platform API usage, you can disable one or both.
{
channels: {
feishu: {
typingIndicator: false,
resolveSenderNames: false,
},
},
}
This is not mandatory tuning, but it is worth documenting because operators often discover API-call volume only after rollout.
Do not stop at “the app saved.” Feishu is one of the channels where admin-side configuration can make a broken lane look healthy.
The upstream docs call out these checks repeatedly:
openclaw gateway status
openclaw logs --follow
Also keep the broader observability checklist nearby:
The official test flow is simple:
openclaw pairing list feishu
openclaw pairing approve feishu <CODE>
If you are unsure what pairing is actually proving, read:
After DM flow works, add exactly one shared group and keep it narrow:
@mention it,chat_id matches the intended allowlist entry,Feishu long-connection behavior is tied to the running gateway, so do one deliberate restart and repeat the DM plus one group test.
That catches a surprising number of “worked during setup only” failures.
The official doc’s first checks are the right first checks:
@mentioning it when requireMention is still true,groupPolicy is not effectively blocking the group,openclaw logs --follow.The local docs point to the usual suspects:
This is why “credentials look correct” is not a meaningful Feishu health check by itself.
For international Lark tenants, the docs explicitly require domain: "lark".
If everything else looks normal but the tenant context is wrong, fix the domain before inventing a deeper explanation.
The official doc specifically calls out:
im:message:send_as_bot permission,That is a good reminder that inbound success does not prove outbound permission symmetry.
The doc has a dedicated App Secret leak section. Treat that seriously:
The official capability section is useful because it tells you what not to over-expect:
200030MBThat makes Feishu stronger than a plain text-only bot lane, but you should still verify the exact message surface you care about before promising it internally.
Feishu is one of the channels where explicit routing can matter quickly in a real company environment.
The official local docs support:
defaultAccountaccountsbindings keyed by direct user or group identifiersThat makes Feishu viable as more than a single catch-all bot, but only if you treat account identity and routing as separate design decisions.
For the routing model itself, keep this nearby:
Feishu is a strong fit when:
It is a weaker first lane if you want the absolute shortest possible day-0 setup with almost no platform admin work.
Verification & references
References