Feishu
Feishu(Lark)は、企業がメッセージングとコラボレーションに使用するチームチャットプラットフォームです。このプラグインは、Feishu/LarkのWebSocketイベントサブスクリプションを使用してOpenClawをFeishu/Larkボットに接続し、公開Webhook URLを公開せずにメッセージを受信できるようにします。
必要なプラグイン
Feishuプラグインをインストールします:
openclaw plugins install @openclaw/feishu
ローカルチェックアウト(gitリポジトリから実行する場合):
openclaw plugins install ./extensions/feishu
クイックスタート
Feishuチャネルを追加する方法は2つあります:
方法1: オンボーディングウィザード(推奨)
OpenClawをインストールしたばかりの場合は、ウィザードを実行します:
openclaw onboard
ウィザードは以下の手順を案内します:
- Feishuアプリの作成と認証情報の収集
- OpenClawでのアプリ認証情報の設定
- ゲートウェイの起動
✅ 設定後、ゲートウェイの状態を確認します:
openclaw gateway statusopenclaw logs --follow
方法2: CLIセットアップ
初期インストールが完了している場合は、CLI経由でチャネルを追加します:
openclaw channels add
Feishuを選択し、App IDとApp Secretを入力します。✅ 設定後、ゲートウェイを管理します:
openclaw gateway statusopenclaw gateway restartopenclaw logs --follow
ステップ1: Feishuアプリを作成する
1. Feishuオープンプラットフォームを開く
Feishuオープンプラットフォームにアクセスしてサインインします。Lark(グローバル)テナントはhttps://open.larksuite.com/appを使用し、Feishu設定でdomain: "lark"を設定する必要があります。
2. アプリを作成する
- 企業アプリを作成をクリック
- アプリ名と説明を入力
- アプリアイコンを選択

3. 認証情報をコピーする
認証情報と基本情報から以下をコピーします:
- App ID(形式:
cli_xxx) - App Secret
❗ 重要: App Secretは秘密にしてください。 
4. 権限を設定する
権限で、一括インポートをクリックし、以下を貼り付けます:
{
"scopes": {
"tenant": [
"aily:file:read",
"aily:file:write",
"application:application.app_message_stats.overview:readonly",
"application:application:self_manage",
"application:bot.menu:write",
"cardkit:card:read",
"cardkit:card:write",
"contact:user.employee_id:readonly",
"corehr:file:download",
"event:ip_list",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.members:bot_access",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.p2p_msg:readonly",
"im:message:readonly",
"im:message:send_as_bot",
"im:resource"
],
"user": ["aily:file:read", "aily:file:write", "im:chat.access_event.bot_p2p_chat:read"]
}
}

5. ボット機能を有効化する
アプリ機能 > ボットで:
- ボット機能を有効化
- ボット名を設定

6. イベントサブスクリプションを設定する
⚠️ 重要: イベントサブスクリプションを設定する前に、以下を確認してください:
- Feishuに対して
openclaw channels addを実行済みであること - ゲートウェイが実行中であること(
openclaw gateway status)
イベントサブスクリプションで:
- 長い接続を使用してイベントを受信する(WebSocket)を選択
- イベント
im.message.receive_v1を追加
⚠️ ゲートウェイが実行されていない場合、長い接続の設定は保存に失敗する可能性があります。 
7. アプリを公開する
- バージョン管理とリリースでバージョンを作成
- レビューに提出して公開
- 管理者の承認を待つ(企業アプリは通常自動承認されます)
ステップ2: OpenClawを設定する
ウィザードで設定する(推奨)
openclaw channels add
Feishuを選択し、App IDとApp Secretを貼り付けます。
設定ファイルで設定する
~/.openclaw/openclaw.jsonを編集します:
{
channels: {
feishu: {
enabled: true,
dmPolicy: "pairing",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
botName: "My AI assistant",
},
},
},
},
}
connectionMode: "webhook"を使用する場合は、verificationTokenを設定します。Feishu Webhookサーバーはデフォルトで127.0.0.1にバインドされます。異なるバインドアドレスを意図的に必要とする場合のみwebhookHostを設定してください。
検証トークン(Webhookモード)
Webhookモードを使用する場合は、設定でchannels.feishu.verificationTokenを設定します。値を取得するには:
- Feishuオープンプラットフォームでアプリを開く
- 開発 → イベントとコールバックに移動
- 暗号化タブを開く
- 検証トークンをコピー

環境変数で設定する
export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"
Lark(グローバル)ドメイン
テナントがLark(国際版)にある場合は、ドメインをlark(または完全なドメイン文字列)に設定します。channels.feishu.domainまたはアカウントごとに(channels.feishu.accounts.<id>.domain)設定できます。
{
channels: {
feishu: {
domain: "lark",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
},
},
},
},
}
クォータ最適化フラグ
2つのオプションフラグでFeishu APIの使用量を削減できます:
typingIndicator(デフォルトtrue):falseの場合、タイピングリアクション呼び出しをスキップします。resolveSenderNames(デフォルトtrue):falseの場合、送信者プロファイル検索呼び出しをスキップします。
トップレベルまたはアカウントごとに設定します:
{
channels: {
feishu: {
typingIndicator: false,
resolveSenderNames: false,
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
typingIndicator: true,
resolveSenderNames: false,
},
},
},
},
}
ステップ3: 起動 + テスト
1. ゲートウェイを起動する
openclaw gateway
2. テストメッセージを送信する
Feishuでボットを見つけ、メッセージを送信します。
3. ペアリングを承認する
デフォルトでは、ボットはペアリングコードで応答します。承認します:
openclaw pairing approve feishu <CODE>
承認後、通常通りチャットできます。
概要
- Feishuボットチャネル:ゲートウェイによって管理されるFeishuボット
- 決定論的ルーティング:返信は常にFeishuに戻ります
- セッション分離:DMはメインセッションを共有し、グループは分離されます
- WebSocket接続:Feishu SDK経由の長い接続、公開URLは不要
アクセス制御
ダイレクトメッセージ
-
デフォルト:
dmPolicy: "pairing"(不明なユーザーはペアリングコードを受け取ります) -
ペアリングを承認:
コピー
openclaw pairing list feishu openclaw pairing approve feishu <CODE> -
許可リストモード:
channels.feishu.allowFromに許可されたOpen IDを設定
グループチャット
1. グループポリシー(channels.feishu.groupPolicy):
"open"= グループ内の全員を許可(デフォルト)"allowlist"=groupAllowFromのみ許可"disabled"= グループメッセージを無効化
2. メンション要件(channels.feishu.groups.<chat_id>.requireMention):
true= @メンションを必要とする(デフォルト)false= メンションなしで応答
グループ設定例
すべてのグループを許可、@メンションが必要(デフォルト)
{
channels: {
feishu: {
groupPolicy: "open",
// デフォルト requireMention: true
},
},
}
すべてのグループを許可、@メンションは不要
{
channels: {
feishu: {
groups: {
oc_xxx: { requireMention: false },
},
},
},
}
特定のグループのみ許可
{
channels: {
feishu: {
groupPolicy: "allowlist",
// FeishuグループID(chat_id)は oc_xxx のようになります
groupAllowFrom: ["oc_xxx", "oc_yyy"],
},
},
}
グループ内でメッセージを送信できる送信者を制限する(送信者許可リスト)
グループ自体を許可することに加えて、そのグループ内のすべてのメッセージは送信者のopen_idによってゲートされます:groups.<chat_id>.allowFromにリストされたユーザーのみがメッセージを処理され、他のメンバーからのメッセージは無視されます(これは、/resetや/newなどの制御コマンドのみではなく、送信者レベルの完全なゲーティングです)。
{
channels: {
feishu: {
groupPolicy: "allowlist",
groupAllowFrom: ["oc_xxx"],
groups: {
oc_xxx: {
// FeishuユーザーID(open_id)は ou_xxx のようになります
allowFrom: ["ou_user1", "ou_user2"],
},
},
},
},
}
グループ/ユーザーIDを取得する
グループID(chat_id)
グループIDはoc_xxxのようになります。方法1(推奨)
- ゲートウェイを起動し、グループ内でボットを@メンションします
openclaw logs --followを実行し、chat_idを探します
方法2 Feishu APIデバッガーを使用してグループチャットをリストします。
ユーザーID(open_id)
ユーザーIDはou_xxxのようになります。方法1(推奨)
- ゲートウェイを起動し、ボットにDMを送信します
openclaw logs --followを実行し、open_idを探します
方法2 ペアリングリクエストでユーザーOpen IDを確認します:
openclaw pairing list feishu
一般的なコマンド
| コマンド | 説明 |
|---|---|
/status | ボットの状態を表示 |
/reset | セッションをリセット |
/model | モデルを表示/切り替え |
注:Feishuはネイティブのコマンドメニューをまだサポートしていないため、コマンドはテキストとして送信する必要があります。
ゲートウェイ管理コマンド
| コマンド | 説明 |
|---|---|
openclaw gateway status | ゲートウェイの状態を表示 |
openclaw gateway install | ゲートウェイサービスをインストール/起動 |
openclaw gateway stop | ゲートウェイサービスを停止 |
openclaw gateway restart | ゲートウェイサービスを再起動 |
openclaw logs --follow | ゲートウェイログを追跡 |
トラブルシューティング
ボットがグループチャットで応答しない
- ボットがグループに追加されていることを確認
- ボットを@メンションしていることを確認(デフォルト動作)
groupPolicyが"disabled"に設定されていないことを確認- ログを確認:
openclaw logs --follow
ボットがメッセージを受信しない
- アプリが公開され承認されていることを確認
- イベントサブスクリプションに
im.message.receive_v1が含まれていることを確認 - 長い接続が有効になっていることを確認
- アプリの権限が完全であることを確認
- ゲートウェイが実行中であることを確認:
openclaw gateway status - ログを確認:
openclaw logs --follow
App Secretの漏洩
- FeishuオープンプラットフォームでApp Secretをリセット
- 設定内のApp Secretを更新
- ゲートウェイを再起動
メッセージ送信失敗
- アプリに
im:message:send_as_bot権限があることを確認 - アプリが公開されていることを確認
- 詳細なエラーについてログを確認
高度な設定
複数アカウント
{
channels: {
feishu: {
defaultAccount: "main",
accounts: {
main: {
appId: "cli_xxx",
appSecret: "xxx",
botName: "Primary bot",
},
backup: {
appId: "cli_yyy",
appSecret: "yyy",
botName: "Backup bot",
enabled: false,
},
},
},
},
}
defaultAccountは、アウトバウンドAPIが明示的にaccountIdを指定しない場合に使用されるFeishuアカウントを制御します。
メッセージ制限
textChunkLimit:アウトバウンドテキストのチャンクサイズ(デフォルト:2000文字)mediaMaxMb:メディアアップロード/ダウンロード制限(デフォルト:30MB)
ストリーミング
Feishuはインタラクティブカードを介したストリーミング返信をサポートしています。有効にすると、ボットはテキストを生成しながらカードを更新します。
{
channels: {
feishu: {
streaming: true, // ストリーミングカード出力を有効化(デフォルト true)
blockStreaming: true, // ブロックレベルのストリーミングを有効化(デフォルト true)
},
},
}
streaming: falseを設定すると、完全な返信を待ってから送信します。
マルチエージェントルーティング
bindingsを使用して、FeishuのDMまたはグループを異なるエージェントにルーティングします。
{
agents: {
list: [
{ id: "main" },
{
id: "clawd-fan",
workspace: "/home/user/clawd-fan",
agentDir: "/home/user/.openclaw/agents/clawd-fan/agent",
},
{
id: "clawd-xi",
workspace: "/home/user/clawd-xi",
agentDir: "/home/user/.openclaw/agents/clawd-xi/agent",
},
],
},
bindings: [
{
agentId: "main",
match: {
channel: "feishu",
peer: { kind: "direct", id: "ou_xxx" },
},
},
{
agentId: "clawd-fan",
match: {
channel: "feishu",
peer: { kind: "direct", id: "ou_yyy" },
},
},
{
agentId: "clawd-xi",
match: {
channel: "feishu",
peer: { kind: "group", id: "oc_zzz" },
},
},
],
}
ルーティングフィールド:
match.channel:"feishu"match.peer.kind:"direct"または"group"match.peer.id:ユーザーOpen ID(ou_xxx)またはグループID(oc_xxx)
検索のヒントについてはグループ/ユーザーIDを取得するを参照してください。
設定リファレンス
完全な設定:ゲートウェイ設定 主なオプション:
| 設定 | 説明 | デフォルト |
|---|---|---|
channels.feishu.enabled | チャネルの有効/無効 | true |
channels.feishu.domain | APIドメイン(feishuまたはlark) | feishu |
channels.feishu.connectionMode | イベント転送モード | websocket |
channels.feishu.defaultAccount | アウトバウンドルーティングのデフォルトアカウントID | default |
channels.feishu.verificationToken | Webhookモードで必須 | - |
channels.feishu.webhookPath | Webhookルートパス | /feishu/events |
channels.feishu.webhookHost | Webhookバインドホスト | 127.0.0.1 |
channels.feishu.webhookPort | Webhookバインドポート | 3000 |
channels.feishu.accounts.<id>.appId | App ID | - |
channels.feishu.accounts.<id>.appSecret | App Secret | - |
channels.feishu.accounts.<id>.domain | アカウントごとのAPIドメイン上書き | feishu |
channels.feishu.dmPolicy | DMポリシー | pairing |
channels.feishu.allowFrom | DM許可リスト(open_idリスト) | - |
channels.feishu.groupPolicy | グループポリシー | open |
channels.feishu.groupAllowFrom | グループ許可リスト | - |
channels.feishu.groups.<chat_id>.requireMention | @メンションを必要とする | true |
channels.feishu.groups.<chat_id>.enabled | グループを有効化 | true |
channels.feishu.textChunkLimit | メッセージチャンクサイズ | 2000 |
channels.feishu.mediaMaxMb | メディアサイズ制限 | 30 |
channels.feishu.streaming | ストリーミングカード出力を有効化 | true |
channels.feishu.blockStreaming | ブロックストリーミングを有効化 | true |
dmPolicyリファレンス
| 値 | 動作 |
|---|---|
"pairing" | デフォルト。 不明なユーザーはペアリングコードを受け取り、承認が必要 |
"allowlist" | allowFrom内のユーザーのみチャット可能 |
"open" | すべてのユーザーを許可(allowFromに"*"が必要) |
"disabled" | DMを無効化 |
サポートされているメッセージタイプ
受信
- ✅ テキスト
- ✅ リッチテキスト(投稿)
- ✅ 画像
- ✅ ファイル
- ✅ 音声
- ✅ 動画
- ✅ ステッカー
送信
- ✅ テキスト
- ✅ 画像
- ✅ ファイル
- ✅ 音声
- ⚠️ リッチテキスト(部分的なサポート)