Feishu/Lark
This is a shipped runtime-backed surface: direct sends are implemented, the serve loop is implemented, and the channel can joingateway run or gateway run.
At A Glance
Minimal Config
Preferred setup path:app_id and app_secret into loong.toml, and defaults the channel to mode = "websocket". Manual credential handoff remains available with loong feishu onboard --manual --app-id ... --app-secret ....
Smoke Test
Command Surface
Required Fields For Send
Required Fields For Serve
Gateway And Ownership
This surface can run directly throughchannels serve feishu, or under Gateway And Supervision through gateway run.
Operator Notes
loong feishu onboardis the recommended first-run path for both Feishu and Lark. Use--domain larkto start on the international lane, or keep the default Feishu lane and let the registration poll switch to Lark when the scanned tenant reportstenant_brand = "lark".loong channels send feishuandloong channels serve feishustay aligned with the same canonical grouped channel contract used by other shipped channels.- Keep Feishu-specific richer payload modes such as
--post-json,--image-key/--image-path, and--file-key/--file-path/--file-typeon the dedicatedloong feishu sendandloong feishu replysurfaces instead of widening the shared grouped contract. - Webhook mode additionally needs
verification_tokenandencrypt_key; websocket mode does not. - Set
require_mention = truewhen multiple bots share the same group and you only want Loong to react when this bot is explicitly @-mentioned. P2P chats still bypass that gate. - QR onboarding only provisions
app_idandapp_secret, so it currently targets websocket mode. Useloong feishu onboard --manual --mode webhook ...when you need webhook callback credentials. - When QR onboarding receives the configuring user’s
open_idand no Feishu inbound allowlists are already configured, Loong bootstrapsallowed_chat_ids = ["*"]plusallowed_sender_ids = [owner_open_id]so that same user can immediately start a direct chat with the bot after setup. - Use
allowed_chat_idsas the trust boundary instead of treating it as a convenience filter. - Keep
domain = "lark"for the Lark lane anddomain = "feishu"for the Feishu lane; the runtime contract is the same family.
Related Docs
- Continue to Channel Guides for the full shipped channel matrix.
- Continue to Channels for the conceptual surface model.
- Continue to Channel Setup for the shared public setup contract.
- Continue to Gateway And Supervision when this surface needs longer-lived runtime ownership.