Caricamento in corso...
Caricamento in corso...
Last synced: Today, 22:00
Technical reference for the OpenClaw framework. Real-time synchronization with the official documentation engine.
Use this file to discover all available pages before exploring further.
Feishu/Lark is an all-in-one collaboration platform where teams chat, share documents, manage calendars, and get work done together.
Status: production-ready for bot DMs + group chats. WebSocket is the default mode; webhook mode is optional.
textScan the QR code with your Feishu/Lark mobile app to create a Feishu/Lark bot automatically.
Configure
dmPolicy"pairing""allowlist"allowFrom"open"allowFrom"*""disabled"Approve a pairing request:
bashopenclaw pairing list feishu openclaw pairing approve feishu <CODE>
Group policy (
channels.feishu.groupPolicy| Value | Behavior |
|---|---|
text "open" | Respond to all messages in groups |
text "allowlist" | Only respond to groups in text groupAllowFromtext groups.<chat_id> |
text "disabled" | Disable all group messages; explicit text groups.<chat_id> |
Default:
allowlistMention requirement (
channels.feishu.requireMentiontruefalsechannels.feishu.groups.<chat_id>.requireMention@all@_all@alljson5{ channels: { feishu: { groupPolicy: "open", }, }, }
json5{ channels: { feishu: { groupPolicy: "open", requireMention: true, }, }, }
json5{ channels: { feishu: { groupPolicy: "allowlist", // Group IDs look like: oc_xxx groupAllowFrom: ["oc_xxx", "oc_yyy"], }, }, }
In
allowlistgroups.<chat_id>groupPolicy: "disabled"groups.*json5{ channels: { feishu: { groupPolicy: "allowlist", groups: { oc_xxx: { requireMention: false, }, }, }, }, }
json5{ channels: { feishu: { groupPolicy: "allowlist", groupAllowFrom: ["oc_xxx"], groups: { oc_xxx: { // User open_ids look like: ou_xxx allowFrom: ["ou_user1", "ou_user2"], }, }, }, }, }
chat_idoc_xxxOpen the group in Feishu/Lark, click the menu icon in the top-right corner, and go to Settings. The group ID (
chat_id
Get Group ID
open_idou_xxxStart the gateway, send a DM to the bot, then check the logs:
bashopenclaw logs --follow
Look for
open_idbashopenclaw pairing list feishu
| Command | Description |
|---|---|
text /status | Show bot status |
text /reset | Reset the current session |
text /model | Show or switch the AI model |
groupPolicy"disabled"openclaw logs --followim.message.receive_v1openclaw gateway statusopenclaw logs --followopenclaw gateway restartjson5{ channels: { feishu: { defaultAccount: "main", accounts: { main: { appId: "cli_xxx", appSecret: "xxx", name: "Primary bot", tts: { providers: { openai: { voice: "shimmer" }, }, }, }, backup: { appId: "cli_yyy", appSecret: "yyy", name: "Backup bot", enabled: false, }, }, }, }, }
defaultAccountaccountIdaccounts.<id>.ttsmessages.ttstextChunkLimit2000mediaMaxMb30Feishu/Lark supports streaming replies via interactive cards. When enabled, the bot updates the card in real time as it generates text.
json5{ channels: { feishu: { streaming: true, // enable streaming card output (default: true) blockStreaming: true, // enable block-level streaming (default: true) }, }, }
Set
streaming: falseReduce the number of Feishu/Lark API calls with two optional flags:
typingIndicatortruefalseresolveSenderNamestruefalsejson5{ channels: { feishu: { typingIndicator: false, resolveSenderNames: false, }, }, }
Feishu/Lark supports ACP for DMs and group thread messages. Feishu/Lark ACP is text-command driven — there are no native slash-command menus, so use
/acp ...json5{ agents: { list: [ { id: "codex", runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", cwd: "/workspace/openclaw", }, }, }, ], }, bindings: [ { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "direct", id: "ou_1234567890" }, }, }, { type: "acp", agentId: "codex", match: { channel: "feishu", accountId: "default", peer: { kind: "group", id: "oc_group_chat:topic:om_topic_root" }, }, acp: { label: "codex-feishu-topic" }, }, ], }
In a Feishu/Lark DM or thread:
text/acp spawn codex --thread here
--thread hereUse
bindingsjson5{ agents: { list: [ { id: "main" }, { id: "agent-a", workspace: "/home/user/agent-a" }, { id: "agent-b", workspace: "/home/user/agent-b" }, ], }, bindings: [ { agentId: "agent-a", match: { channel: "feishu", peer: { kind: "direct", id: "ou_xxx" }, }, }, { agentId: "agent-b", match: { channel: "feishu", peer: { kind: "group", id: "oc_zzz" }, }, }, ], }
Routing fields:
match.channel"feishu"match.peer.kind"direct""group"match.peer.idou_xxxoc_xxxSee Get group/user IDs for lookup tips.
Full configuration: Gateway configuration
| Setting | Description | Default |
|---|---|---|
text channels.feishu.enabled | Enable/disable the channel | text true |
text channels.feishu.domain | API domain ( text feishutext lark | text feishu |
text channels.feishu.connectionMode | Event transport ( text websockettext webhook | text websocket |
text channels.feishu.defaultAccount | Default account for outbound routing | text default |
text channels.feishu.verificationToken | Required for webhook mode | — |
text channels.feishu.encryptKey | Required for webhook mode | — |
text channels.feishu.webhookPath | Webhook route path | text /feishu/events |
text channels.feishu.webhookHost | Webhook bind host | text 127.0.0.1 |
text channels.feishu.webhookPort | Webhook bind port | text 3000 |
text channels.feishu.accounts.<id>.appId | App ID | — |
text channels.feishu.accounts.<id>.appSecret | App Secret | — |
text channels.feishu.accounts.<id>.domain | Per-account domain override | text feishu |
text channels.feishu.accounts.<id>.tts | Per-account TTS override | text messages.tts |
text channels.feishu.dmPolicy | DM policy | text allowlist |
text channels.feishu.allowFrom | DM allowlist (open_id list) | [BotOwnerId] |
text channels.feishu.groupPolicy | Group policy | text allowlist |
text channels.feishu.groupAllowFrom | Group allowlist | — |
text channels.feishu.requireMention | Require @mention in groups | text true |
text channels.feishu.groups.<chat_id>.requireMention | Per-group @mention override; explicit IDs also admit the group in allowlist mode | inherited |
text channels.feishu.groups.<chat_id>.enabled | Enable/disable a specific group | text true |
text channels.feishu.textChunkLimit | Message chunk size | text 2000 |
text channels.feishu.mediaMaxMb | Media size limit | text 30 |
text channels.feishu.streaming | Streaming card output | text true |
text channels.feishu.blockStreaming | Block-level streaming | text true |
text channels.feishu.typingIndicator | Send typing reactions | text true |
text channels.feishu.resolveSenderNames | Resolve sender display names | text true |
Inbound Feishu/Lark audio messages are normalized as media placeholders instead of raw
file_keytools.media.audio<media:audio>Native Feishu/Lark audio bubbles use the Feishu
audiofile_type: "opus".opus.oggffmpegaudioAsVoiceasVoiceffmpegFor
groupSessionScope: "group_topic""group_topic_sender"thread_idomt_*om_*© 2024 TaskFlow Mirror
Powered by TaskFlow Sync Engine