@openclaw/feishu Plugin を通じて Feishu/Lark(オールインワンのコラボレーションプラットフォーム)に接続します。ボットとの DM、グループチャット、ストリーミングカード応答、Feishu のドキュメント/wiki/ドライブ/Bitable ツールを利用できます。
ステータス: ボットとの DM とグループチャットにおいて本番環境で使用可能です。デフォルトのイベント転送方式は WebSocket(公開 URL は不要)で、Webhook モードは任意です。
クイックスタート
OpenClaw 2026.5.29 以降が必要です。
openclaw --version を実行して確認してください。openclaw update でアップグレードできます。1
チャネル設定ウィザードを実行する
@openclaw/feishu Plugin がない場合はインストールされ、その後、設定が順に案内されます。- 手動設定: Feishu Open Platform(
https://open.feishu.cn)または Lark Developer(https://open.larksuite.com)から取得した App ID と App Secret を貼り付けます。 - QR 設定: Feishu アプリで QR コードをスキャンし、ボットを自動作成します。このフローでは、DM が自分のアカウント(自分の
open_idを指定したdmPolicy: "allowlist")に限定されます。
2
設定完了後、変更を適用するために Gateway を再起動する
受信イベントの耐久性
OpenClaw は、認証済みのim.message.receive_v1 および drive.notice.comment_add_v1 エンベロープを、エージェントへのディスパッチ前に永続キューへ登録します。保留中または再試行可能なイベントは Gateway の再起動後も維持され、チャットまたはドキュメント単位で直列化されたまま処理されます。また、アクティブな完了記録または保持されている完了記録が存在する間は、Feishu のイベント ID を使用してキューへの重複登録を抑止します。
制限付き再試行後も WebSocket イベントを永続化できない場合、OpenClaw は未コミットのターンを飛ばして処理を続行せず、そのソケットを閉じて新しい認証済み接続を強制します。リアクションや VC 会議への招待を含むその他の Feishu イベントタイプは通常のイベント経路を使用するため、この永続キューの保証は適用されません。
アクセス制御
ダイレクトメッセージ
ボットに DM を送信できるユーザーを制御するには、channels.feishu.dmPolicy(デフォルト: pairing)を設定します。
ペアリング要求を承認する:
グループチャット
グループポリシー(channels.feishu.groupPolicy、デフォルト: allowlist):
メンション要件(
channels.feishu.requireMention):
- デフォルトでは @メンションが必要です。ただし、有効なグループポリシーが
"open"の場合は、メンションを付けられないメッセージ(画像など)もエージェントに届くよう、デフォルトがfalseになります。 - 上書きするには、
trueまたはfalseを明示的に設定します。グループ単位で上書きするには、channels.feishu.groups.<chat_id>.requireMentionを使用します。 - ブロードキャスト専用の
@allおよび@_allは、ボットへのメンションとして扱われません。@allとボットの両方を直接メンションしたメッセージは、引き続きボットへのメンションとして扱われます。
グループ設定の例
すべてのグループを許可し、@メンションを不要にする
すべてのグループを許可し、引き続き @メンションを必須にする
特定のグループのみを許可する
allowlist モードでは、明示的な groups.<chat_id> エントリを追加してグループを許可することもできます。明示的なエントリでも groupPolicy: "disabled" は上書きされません。groups.* のワイルドカードデフォルトは一致するグループを設定しますが、それだけでグループが許可されるわけではありません。
グループ内の送信者を制限する
channels.feishu.groupSenderAllowFrom は、すべてのグループに同じ送信者許可リストを設定します。グループ単位の allowFrom が優先されます。
ボットが作成したメッセージ
Feishu は、デフォルトで他のボットが作成したメッセージを無視します。ボット間のグループ会話を許可するには、アプリにim:message.group_at_msg.include_bot:readonly および im:message:readonly スコープを付与してから、allowBots を設定します。
channels.defaults.botLoopProtection ガードを適用します。
グループ ID/ユーザー ID を取得する
グループ ID(chat_id、形式: oc_xxx)
Feishu/Lark でグループを開き、右上のメニューアイコンをクリックして、Settings に移動します。グループ ID(chat_id)は設定ページに表示されます。

ユーザー ID(open_id、形式: ou_xxx)
Gateway を起動してボットに DM を送信し、ログを確認します。
open_id を探します。保留中のペアリング要求を確認することもできます。
よく使用するコマンド
Feishu/Lark はネイティブのスラッシュコマンドメニューをサポートしていないため、これらをプレーンテキストメッセージとして送信してください。
トラブルシューティング
ボットがグループチャットで応答しない
- ボットがグループに追加されていることを確認します
- ボットを @メンションしていることを確認します(デフォルトで必須)
groupPolicyが"disabled"ではないことを確認します- ログを確認します:
openclaw logs --follow
ボットがメッセージを受信しない
- ボットが Feishu Open Platform / Lark Developer で公開および承認されていることを確認します
- イベントサブスクリプションに
im.message.receive_v1が含まれていることを確認します - 会議招待への自動参加を使用する場合は、
vc.bot.meeting_invited_v1もサブスクライブします - persistent connection(WebSocket)が選択されていることを確認します
- 必要なすべての権限スコープが付与されていることを確認します
- Gateway が実行中であることを確認します:
openclaw gateway status - ログを確認します:
openclaw logs --follow
vc.bot.meeting_invited_v1 をサブスクライブしても、イベントが配信されるだけです。自動参加は
デフォルトで無効です。すべてのアカウントで有効にするには、次のように設定します。
vc:meeting.bot.join:write スコープを持つ利用可能な Feishu VC 参加
ツールも必要です。たとえば、公式の
lark-cli VC エージェント skill
は vc +meeting-join を提供します。
Feishu モバイルアプリで QR 設定に反応しない
- 設定を再実行します:
openclaw channels login --channel feishu - 手動設定を選択します
- Feishu Open Platform で自社開発アプリを作成し、その App ID と App Secret をコピーします
- それらの認証情報を設定ウィザードに貼り付けます
App Secret が漏えいした
- Feishu Open Platform / Lark Developer で App Secret をリセットします
- 設定内の値を更新します
- Gateway を再起動します:
openclaw gateway restart
高度な設定
複数のアカウント
defaultAccount は、送信 API で accountId が指定されていない場合に使用するアカウントを制御します。アカウントエントリはトップレベルの設定を継承し、ほとんどのトップレベルキーはアカウント単位で上書きできます。
accounts.<id>.tts は tts と同じ形式を使用し、グローバル TTS 設定に対してディープマージされます。そのため、複数ボットの Feishu 設定では、共有するプロバイダー認証情報をグローバルに保持しながら、音声、モデル、ペルソナ、または自動モードのみをアカウント単位で上書きできます。
メッセージの制限
textChunkLimit- 送信テキストのチャンクサイズ(デフォルト:4000文字)streaming.chunkMode-"length"(デフォルト)は上限で分割し、"newline"は改行位置を優先しますmediaMaxMb- メディアのアップロード/ダウンロード上限(デフォルト:30MB)
ストリーミング
Feishu/Lark は、インタラクティブカード(Card Kit ストリーミング API)によるストリーミング応答をサポートしています。有効にすると、ボットはテキストの生成中にカードをリアルタイムで更新します。streaming.mode: "off" を設定すると、返信全体が 1 つのメッセージで送信されます。renderMode: "raw"(カードではなくプレーンテキスト)でもストリーミングカードが無効になります。streaming.block.enabled はデフォルトで無効です。完了したアシスタントブロックを最終返信の前に送信したい場合にのみ有効にしてください。従来のブール値 streaming とフラットな blockStreaming / blockStreamingCoalesce / chunkMode キーは、openclaw doctor --fix によってこのネストされた形式へ移行されます。
クォータの最適化
2 つのオプションフラグを使用して、Feishu/Lark API の呼び出し回数を減らせます。typingIndicator(デフォルトtrue):falseに設定すると、入力中リアクションの呼び出しを省略しますresolveSenderNames(デフォルトtrue):falseに設定すると、送信者プロフィールの検索を省略します
グループセッションのスコープとトピックスレッド
channels.feishu.groupSessionScope(トップレベル、アカウント単位、またはグループ単位)は、グループメッセージをエージェントセッションにマッピングする方法を制御します。
トピックスコープでは、Feishu/Lark のネイティブトピックグループはイベント
thread_id(omt_*)を正規のトピックセッションキーとして使用します。ネイティブのトピック開始イベントで thread_id が省略されている場合、OpenClaw はターンをルーティングする前に Feishu からその値を取得します。OpenClaw がスレッドに変換する通常のグループ返信では、引き続き返信ルートメッセージ ID(om_*)を使用するため、最初のターンと後続のターンが同じセッションに維持されます。
replyInThread: "enabled"(トップレベルまたはグループ単位)を設定すると、ボットの返信はインラインで返信する代わりに、Feishu のトピックスレッドを作成または継続します。topicSessionMode は groupSessionScope の非推奨の旧設定です。groupSessionScope を使用してください。
Feishu ワークスペースツール
Plugin には、Feishu のドキュメント、チャット、ナレッジベース、クラウドストレージ、権限、Bitable 用のエージェントツールと、対応する Skills(feishu-doc、feishu-drive、feishu-perm、feishu-wiki)が含まれています。ツールファミリーは channels.feishu.tools によって制限されます。
tools.base は tools.bitable のエイリアスです。両方が設定されている場合は、明示的な bitable の値が優先されます。アカウント単位の制限は accounts.<id>.tools に配置します。
ルートディレクトリ外で feishu_drive info を直接検索するには、アプリに完全な drive:drive スコープがすでに付与されている場合を除き、drive:drive.metadata:readonly を付与してください。どちらのスコープもない場合、info により、従来のルートディレクトリ検索を drive:drive:readonly 経由で引き続き利用できます。
ACP セッション
Feishu/Lark は、DM とグループスレッドメッセージで ACP をサポートしています。Feishu/Lark の ACP はテキストコマンドで操作します。ネイティブのスラッシュコマンドメニューはないため、会話内で/acp ... メッセージを直接使用してください。
永続的な ACP バインディング
チャットから ACP を生成
Feishu/Lark の DM またはスレッドで次を実行します。--thread here は、DM と Feishu/Lark のスレッドメッセージで機能します。バインドされた会話内の後続メッセージは、その ACP セッションへ直接ルーティングされます。
マルチエージェントルーティング
bindings を使用して、Feishu/Lark の DM またはグループを異なるエージェントへルーティングします。
match.channel:"feishu"match.peer.kind:"direct"(DM)または"group"(グループチャット)match.peer.id:ユーザー Open ID(ou_xxx)またはグループ ID(oc_xxx)
ユーザー単位のエージェント分離(動的エージェント作成)
dynamicAgentCreation を有効にすると、DM ユーザーごとに分離されたエージェントインスタンスが自動的に作成されます。各ユーザーには、以下が個別に割り当てられます。
- 独立したワークスペースディレクトリ
- 個別の
USER.md/SOUL.md/MEMORY.md - 非公開の会話履歴
- 分離された Skills と状態
動的バインディングには正規化された Feishu
accountId が含まれるため、デフォルトアカウントと名前付きアカウントのどちらでも、各送信者が正しい動的エージェントへルーティングされます。名前付きアカウントが以前のリリースでスコープなしの動的エージェントを作成した場合、その従来のエージェントも引き続き maxAgents にカウントされます。削除する前にデフォルトアカウントで使用されていないことを確認するか、maxAgents を一時的に増やしてください。OpenClaw は、所有アカウントが曖昧な従来の状態を安全に推測できません。クイックセットアップ
動作の仕組み
新しいユーザーが初めて DM を送信すると、次の処理が行われます。- チャンネルが一意の
agentIdを生成します。デフォルトアカウントではfeishu-{user_open_id}、名前付きアカウントでは長さを制限したアカウント接頭辞付きの識別子ダイジェストになります workspaceTemplateパスに新しいワークスペースを作成します- エージェントを登録し、このユーザー用のバインディングを作成します
- ワークスペースヘルパーが、初回アクセス時にブートストラップファイル(
AGENTS.md、SOUL.md、USER.mdなど)を確実に用意します - このユーザーからの今後のすべてのメッセージを専用エージェントへルーティングします
設定オプション
テンプレート変数:
{agentId}- 生成されたエージェント ID(例:feishu-ou_xxxxxxまたはfeishu-support-<identity_digest>){userId}- 送信者の Feishu open_id(例:ou_xxxxxx)
セッションスコープ
session.dmScope は、ダイレクトメッセージをエージェントセッションにマッピングする方法を制御します。これは、すべてのチャンネルに影響するグローバル設定です。
トレードオフ:
"main" を使用すると、ブートストラップファイル(USER.md、SOUL.md、MEMORY.md)の自動読み込みが有効になりますが、すべてのチャンネルの全 DM で同じセッションキーパターンが共有されます。ブートストラップの自動読み込みより分離を重視する公開マルチユーザーボットでは、"per-channel-peer" を検討し、ブートストラップファイルを手動で管理してください。
名前付き Feishu アカウントで、同じ送信者に対して個別のセッションを維持する場合は、
"per-account-channel-peer" を使用してください。動的バインディングではアカウントスコープが維持されます。一般的なマルチユーザー構成
検証
Gateway のログを確認し、動的作成が機能していることを確認します。注記
- ワークスペースの分離: 各ユーザーには専用のワークスペースディレクトリとエージェントインスタンスが割り当てられます。通常のメッセージングフローでは、ユーザーは互いの会話履歴やファイルを参照できません。
- セキュリティ境界: これはメッセージングコンテキストを分離する仕組みであり、敵対的な共同テナントに対するセキュリティ境界ではありません。エージェントプロセスとホスト環境は共有されます。
- 設定の書き込みを有効にしておく必要があります: 動的エージェントの作成では、エージェントとバインディングが設定に書き込まれます。
channels.feishu.configWritesがfalseの場合はスキップされます(デフォルト: 有効)。 bindingsは空にする必要があります: 動的エージェントは自身のバインディングを自動登録します- アップグレードパス: 既存の手動バインディングは動的エージェントと併用できます
session.dmScopeはグローバルです: これは Feishu だけでなく、すべてのチャンネルに影響します
設定リファレンス
完全な設定: Gateway の設定対応しているメッセージタイプ
受信
- ✅ テキスト
- ✅ リッチテキスト(投稿)
- ✅ 画像
- ✅ ファイル
- ✅ 音声
- ✅ 動画/メディア
- ✅ ステッカー
file_key JSON ではなく、
メディアプレースホルダーとして正規化されます。tools.media.audio が設定されている場合、
OpenClaw は音声メモのリソースをダウンロードし、エージェントターンの前に共有音声文字起こしを
実行するため、エージェントは発話内容の文字起こしを受け取ります。Feishu が音声ペイロードに
文字起こしテキストを直接含めている場合、そのテキストが使用され、追加の ASR 呼び出しは
行われません。音声文字起こしプロバイダーがない場合でも、エージェントは生の Feishu
リソースペイロードではなく、<media:audio> プレースホルダーと保存された添付ファイルを
受け取ります。
送信
- ✅ テキスト
- ✅ 画像
- ✅ ファイル
- ✅ 音声
- ✅ 動画/メディア
- ✅ インタラクティブカード(ストリーミング更新を含む)
- ⚠️ リッチテキスト(投稿形式の書式設定。Feishu/Lark のすべての作成機能には対応していません)
audio メッセージタイプを使用し、
Ogg/Opus アップロードメディア(file_type: "opus")を必要とします。既存の .opus および .ogg メディアは、
ネイティブ音声として直接送信されます。MP3/WAV/M4A およびその他の音声形式と推定されるファイルは、
返信で音声配信が要求された場合(audioAsVoice / メッセージツール asVoice、TTS 音声メモの
返信を含む)に限り、ffmpeg を使用して 48kHz Ogg/Opus にトランスコードされます。
通常の MP3 添付ファイルは通常のファイルのままです。ffmpeg が存在しない場合、または
変換に失敗した場合、OpenClaw はファイル添付にフォールバックし、その理由をログに記録します。
スレッドと返信
- ✅ インライン返信
- ✅ スレッド返信
- ✅ スレッドメッセージに返信する場合、メディア返信でもスレッド情報が維持されます
関連項目
- チャンネルの概要 - サポートされているすべてのチャンネル
- ペアリング - DM 認証とペアリングの流れ
- グループ - グループチャットの動作とメンションゲート
- チャンネルルーティング - メッセージのセッションルーティング
- セキュリティ - アクセスモデルと堅牢化