Skip to main content

Feishu/Lark

This is a shipped runtime-backed surface: direct sends are implemented, the serve loop is implemented, and the channel can join gateway run or gateway run.

At A Glance

Minimal Config

Preferred setup path:
This starts the official Feishu/Lark QR registration flow in the terminal, saves the generated 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 through channels serve feishu, or under Gateway And Supervision through gateway run.

Operator Notes

  • loong feishu onboard is the recommended first-run path for both Feishu and Lark. Use --domain lark to start on the international lane, or keep the default Feishu lane and let the registration poll switch to Lark when the scanned tenant reports tenant_brand = "lark".
  • loong channels send feishu and loong channels serve feishu stay 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-type on the dedicated loong feishu send and loong feishu reply surfaces instead of widening the shared grouped contract.
  • Webhook mode additionally needs verification_token and encrypt_key; websocket mode does not.
  • Set require_mention = true when 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_id and app_secret, so it currently targets websocket mode. Use loong feishu onboard --manual --mode webhook ... when you need webhook callback credentials.
  • When QR onboarding receives the configuring user’s open_id and no Feishu inbound allowlists are already configured, Loong bootstraps allowed_chat_ids = ["*"] plus allowed_sender_ids = [owner_open_id] so that same user can immediately start a direct chat with the bot after setup.
  • Use allowed_chat_ids as the trust boundary instead of treating it as a convenience filter.
  • Keep domain = "lark" for the Lark lane and domain = "feishu" for the Feishu lane; the runtime contract is the same family.