Skip to main content
OpenClaw は、公式 @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")に限定されます。
ウィザードでは、API ドメイン(Feishu または Lark)とグループポリシーについても確認されます。中国国内版 Feishu モバイルアプリで QR コードに反応しない場合は、設定を再実行して手動設定を選択してください。
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 を設定します。
Feishu がボット作成のグループイベントを配信するのは、別のボットがこのボットをメンションした場合のみです。既存のグループポリシー、送信者許可リスト、メンション要件は引き続き適用されます。OpenClaw は自身が作成したメッセージを破棄し、すべてのテキスト応答またはカード応答で相手のボットをメンションし、共通の channels.defaults.botLoopProtection ガードを適用します。

グループ ID/ユーザー ID を取得する

グループ ID(chat_id、形式: oc_xxx

Feishu/Lark でグループを開き、右上のメニューアイコンをクリックして、Settings に移動します。グループ ID(chat_id)は設定ページに表示されます。 グループ ID を取得する

ユーザー ID(open_id、形式: ou_xxx

Gateway を起動してボットに DM を送信し、ログを確認します。
ログ出力で open_id を探します。保留中のペアリング要求を確認することもできます。

よく使用するコマンド

Feishu/Lark はネイティブのスラッシュコマンドメニューをサポートしていないため、これらをプレーンテキストメッセージとして送信してください。

トラブルシューティング

ボットがグループチャットで応答しない

  1. ボットがグループに追加されていることを確認します
  2. ボットを @メンションしていることを確認します(デフォルトで必須)
  3. groupPolicy"disabled" ではないことを確認します
  4. ログを確認します: openclaw logs --follow

ボットがメッセージを受信しない

  1. ボットが Feishu Open Platform / Lark Developer で公開および承認されていることを確認します
  2. イベントサブスクリプションに im.message.receive_v1 が含まれていることを確認します
  3. 会議招待への自動参加を使用する場合は、vc.bot.meeting_invited_v1 もサブスクライブします
  4. persistent connection(WebSocket)が選択されていることを確認します
  5. 必要なすべての権限スコープが付与されていることを確認します
  6. Gateway が実行中であることを確認します: openclaw gateway status
  7. ログを確認します: openclaw logs --follow
vc.bot.meeting_invited_v1 をサブスクライブしても、イベントが配信されるだけです。自動参加は デフォルトで無効です。すべてのアカウントで有効にするには、次のように設定します。
1 つのアカウントだけで有効にするには、トップレベルの切り替えを省略し、アカウントの上書きを設定します。
エージェントが参加ターンを受信する前に、招待者には通常の Feishu DM ポリシー、許可リスト/ペアリング、セッション、応答 ルーティングが引き続き適用されます。参加には、アプリのアイデンティティ用に設定され、かつ vc:meeting.bot.join:write スコープを持つ利用可能な Feishu VC 参加 ツールも必要です。たとえば、公式の lark-cli VC エージェント skillvc +meeting-join を提供します。
公式の lark-cli VC エージェント skill では、現在、会議ボットのアクションが限定ベータとして示されています。ツールが ErrNotInGray またはエラーコード 20017 を返す場合、そのアプリまたはテナントではベータが有効になっていません。通常のスコープ付与をトラブルシューティングする前に、リンク先の skill に記載された早期アクセスの案内を使用してください。

Feishu モバイルアプリで QR 設定に反応しない

  1. 設定を再実行します: openclaw channels login --channel feishu
  2. 手動設定を選択します
  3. Feishu Open Platform で自社開発アプリを作成し、その App ID と App Secret をコピーします
  4. それらの認証情報を設定ウィザードに貼り付けます

App Secret が漏えいした

  1. Feishu Open Platform / Lark Developer で App Secret をリセットします
  2. 設定内の値を更新します
  3. Gateway を再起動します: openclaw gateway restart

高度な設定

複数のアカウント

defaultAccount は、送信 API で accountId が指定されていない場合に使用するアカウントを制御します。アカウントエントリはトップレベルの設定を継承し、ほとんどのトップレベルキーはアカウント単位で上書きできます。 accounts.<id>.ttstts と同じ形式を使用し、グローバル TTS 設定に対してディープマージされます。そのため、複数ボットの Feishu 設定では、共有するプロバイダー認証情報をグローバルに保持しながら、音声、モデル、ペルソナ、または自動モードのみをアカウント単位で上書きできます。

メッセージの制限

  • textChunkLimit - 送信テキストのチャンクサイズ(デフォルト: 4000 文字)
  • streaming.chunkMode - "length"(デフォルト)は上限で分割し、"newline" は改行位置を優先します
  • mediaMaxMb - メディアのアップロード/ダウンロード上限(デフォルト: 30 MB)

ストリーミング

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_idomt_*)を正規のトピックセッションキーとして使用します。ネイティブのトピック開始イベントで thread_id が省略されている場合、OpenClaw はターンをルーティングする前に Feishu からその値を取得します。OpenClaw がスレッドに変換する通常のグループ返信では、引き続き返信ルートメッセージ ID(om_*)を使用するため、最初のターンと後続のターンが同じセッションに維持されます。 replyInThread: "enabled"(トップレベルまたはグループ単位)を設定すると、ボットの返信はインラインで返信する代わりに、Feishu のトピックスレッドを作成または継続します。topicSessionModegroupSessionScope の非推奨の旧設定です。groupSessionScope を使用してください。

Feishu ワークスペースツール

Plugin には、Feishu のドキュメント、チャット、ナレッジベース、クラウドストレージ、権限、Bitable 用のエージェントツールと、対応する Skills(feishu-docfeishu-drivefeishu-permfeishu-wiki)が含まれています。ツールファミリーは channels.feishu.tools によって制限されます。 tools.basetools.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
検索のヒントについては、グループ ID/ユーザー ID を取得するを参照してください。

ユーザー単位のエージェント分離(動的エージェント作成)

dynamicAgentCreation を有効にすると、DM ユーザーごとに分離されたエージェントインスタンスが自動的に作成されます。各ユーザーには、以下が個別に割り当てられます。
  • 独立したワークスペースディレクトリ
  • 個別の USER.md / SOUL.md / MEMORY.md
  • 非公開の会話履歴
  • 分離された Skills と状態
これは、各ユーザーに専用の非公開 AI アシスタント体験を提供する公開ボットに不可欠です。
動的バインディングには正規化された Feishu accountId が含まれるため、デフォルトアカウントと名前付きアカウントのどちらでも、各送信者が正しい動的エージェントへルーティングされます。名前付きアカウントが以前のリリースでスコープなしの動的エージェントを作成した場合、その従来のエージェントも引き続き maxAgents にカウントされます。削除する前にデフォルトアカウントで使用されていないことを確認するか、maxAgents を一時的に増やしてください。OpenClaw は、所有アカウントが曖昧な従来の状態を安全に推測できません。

クイックセットアップ

動作の仕組み

新しいユーザーが初めて DM を送信すると、次の処理が行われます。
  1. チャンネルが一意の agentId を生成します。デフォルトアカウントでは feishu-{user_open_id}、名前付きアカウントでは長さを制限したアカウント接頭辞付きの識別子ダイジェストになります
  2. workspaceTemplate パスに新しいワークスペースを作成します
  3. エージェントを登録し、このユーザー用のバインディングを作成します
  4. ワークスペースヘルパーが、初回アクセス時にブートストラップファイル(AGENTS.mdSOUL.mdUSER.md など)を確実に用意します
  5. このユーザーからの今後のすべてのメッセージを専用エージェントへルーティングします

設定オプション

テンプレート変数:
  • {agentId} - 生成されたエージェント ID(例:feishu-ou_xxxxxx または feishu-support-<identity_digest>
  • {userId} - 送信者の Feishu open_id(例:ou_xxxxxx

セッションスコープ

session.dmScope は、ダイレクトメッセージをエージェントセッションにマッピングする方法を制御します。これは、すべてのチャンネルに影響するグローバル設定です。 トレードオフ"main" を使用すると、ブートストラップファイル(USER.mdSOUL.mdMEMORY.md)の自動読み込みが有効になりますが、すべてのチャンネルの全 DM で同じセッションキーパターンが共有されます。ブートストラップの自動読み込みより分離を重視する公開マルチユーザーボットでは、"per-channel-peer" を検討し、ブートストラップファイルを手動で管理してください。
名前付き Feishu アカウントで、同じ送信者に対して個別のセッションを維持する場合は、"per-account-channel-peer" を使用してください。動的バインディングではアカウントスコープが維持されます。

一般的なマルチユーザー構成

検証

Gateway のログを確認し、動的作成が機能していることを確認します。
作成されたすべてのワークスペースを一覧表示します。

注記

  • ワークスペースの分離: 各ユーザーには専用のワークスペースディレクトリとエージェントインスタンスが割り当てられます。通常のメッセージングフローでは、ユーザーは互いの会話履歴やファイルを参照できません。
  • セキュリティ境界: これはメッセージングコンテキストを分離する仕組みであり、敵対的な共同テナントに対するセキュリティ境界ではありません。エージェントプロセスとホスト環境は共有されます。
  • 設定の書き込みを有効にしておく必要があります: 動的エージェントの作成では、エージェントとバインディングが設定に書き込まれます。channels.feishu.configWritesfalse の場合はスキップされます(デフォルト: 有効)。
  • bindings は空にする必要があります: 動的エージェントは自身のバインディングを自動登録します
  • アップグレードパス: 既存の手動バインディングは動的エージェントと併用できます
  • session.dmScope はグローバルです: これは Feishu だけでなく、すべてのチャンネルに影響します

設定リファレンス

完全な設定: Gateway の設定

対応しているメッセージタイプ

受信

  • ✅ テキスト
  • ✅ リッチテキスト(投稿)
  • ✅ 画像
  • ✅ ファイル
  • ✅ 音声
  • ✅ 動画/メディア
  • ✅ ステッカー
受信した Feishu/Lark の音声メッセージは、生の file_key JSON ではなく、 メディアプレースホルダーとして正規化されます。tools.media.audio が設定されている場合、 OpenClaw は音声メモのリソースをダウンロードし、エージェントターンの前に共有音声文字起こしを 実行するため、エージェントは発話内容の文字起こしを受け取ります。Feishu が音声ペイロードに 文字起こしテキストを直接含めている場合、そのテキストが使用され、追加の ASR 呼び出しは 行われません。音声文字起こしプロバイダーがない場合でも、エージェントは生の Feishu リソースペイロードではなく、<media:audio> プレースホルダーと保存された添付ファイルを 受け取ります。

送信

  • ✅ テキスト
  • ✅ 画像
  • ✅ ファイル
  • ✅ 音声
  • ✅ 動画/メディア
  • ✅ インタラクティブカード(ストリーミング更新を含む)
  • ⚠️ リッチテキスト(投稿形式の書式設定。Feishu/Lark のすべての作成機能には対応していません)
Feishu/Lark ネイティブの音声バブルは、Feishu の audio メッセージタイプを使用し、 Ogg/Opus アップロードメディア(file_type: "opus")を必要とします。既存の .opus および .ogg メディアは、 ネイティブ音声として直接送信されます。MP3/WAV/M4A およびその他の音声形式と推定されるファイルは、 返信で音声配信が要求された場合(audioAsVoice / メッセージツール asVoice、TTS 音声メモの 返信を含む)に限り、ffmpeg を使用して 48kHz Ogg/Opus にトランスコードされます。 通常の MP3 添付ファイルは通常のファイルのままです。ffmpeg が存在しない場合、または 変換に失敗した場合、OpenClaw はファイル添付にフォールバックし、その理由をログに記録します。

スレッドと返信

  • ✅ インライン返信
  • ✅ スレッド返信
  • ✅ スレッドメッセージに返信する場合、メディア返信でもスレッド情報が維持されます
トピックグループのセッションルーティングについては、 グループセッションのスコープとトピックスレッドを参照してください。

関連項目