メインコンテンツへスキップ

Feishuボット

Feishu(Lark)は、企業でメッセージングやコラボレーションに使われるチームチャットプラットフォームです。このプラグインは、プラットフォームのWebSocketイベントサブスクリプションを使用してOpenClawをFeishu/Larkボットに接続し、公開Webhook URLを公開せずにメッセージを受信できるようにします。

バンドル済みプラグイン

Feishuは現在のOpenClawリリースにバンドルされているため、別途プラグインをインストールする必要はありません。 バンドル済みFeishuを含まない古いビルドまたはカスタムインストールを使用している場合は、手動でインストールしてください。
openclaw plugins install @openclaw/feishu

クイックスタート

Feishuチャンネルを追加する方法は2つあります。

方法1: オンボーディング(推奨)

OpenClawをインストールしたばかりなら、オンボーディングを実行します。
openclaw onboard
ウィザードでは次の手順を案内します。
  1. Feishuアプリを作成し、認証情報を収集する
  2. OpenClawでアプリ認証情報を設定する
  3. Gatewayを起動する
設定後、Gatewayステータスを確認します。
  • openclaw gateway status
  • openclaw logs --follow

方法2: CLIセットアップ

初回インストールをすでに完了している場合は、CLI経由でチャンネルを追加します。
openclaw channels add
Feishuを選択し、App IDとApp Secretを入力します。 設定後、Gatewayを管理します。
  • openclaw gateway status
  • openclaw gateway restart
  • openclaw logs --follow

ステップ1: Feishuアプリを作成する

1. Feishu Open Platformを開く

Feishu Open Platformにアクセスしてサインインします。 Lark(グローバル)テナントはhttps://open.larksuite.com/appを使用し、Feishu設定でdomain: "lark"を設定してください。

2. アプリを作成する

  1. Create enterprise appをクリックします
  2. アプリ名と説明を入力します
  3. アプリアイコンを選択します
Create enterprise app

3. 認証情報をコピーする

Credentials & Basic Infoから、次をコピーします。
  • App ID(形式: cli_xxx
  • App Secret
重要: App Secretは非公開にしてください。 Get credentials

4. 権限を設定する

PermissionsBatch importをクリックし、以下を貼り付けます。
{
  "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"]
  }
}
Configure permissions

5. ボット機能を有効にする

App Capability > Botで次を行います。
  1. ボット機能を有効にする
  2. ボット名を設定する
Enable bot capability

6. イベントサブスクリプションを設定する

⚠️ 重要: イベントサブスクリプションを設定する前に、以下を確認してください。
  1. Feishuに対してすでにopenclaw channels addを実行している
  2. Gatewayが実行中である(openclaw gateway status
Event Subscriptionで次を行います。
  1. Use long connection to receive events(WebSocket)を選択する
  2. イベントim.message.receive_v1を追加する
  3. (任意)Driveコメントワークフロー用に、drive.notice.comment_add_v1も追加する
⚠️ Gatewayが実行されていない場合、長期接続の設定は保存に失敗する可能性があります。 Configure event subscription

7. アプリを公開する

  1. Version Management & Releaseでバージョンを作成する
  2. 審査に提出して公開する
  3. 管理者の承認を待つ(通常、企業アプリは自動承認されます)

ステップ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",
          name: "My AI assistant",
        },
      },
    },
  },
}
connectionMode: "webhook"を使用する場合は、verificationTokenencryptKeyの両方を設定してください。Feishu webhookサーバーはデフォルトで127.0.0.1にバインドされます。別のバインドアドレスが意図的に必要な場合にのみwebhookHostを設定してください。

Verification TokenとEncrypt Key(webhookモード)

webhookモードを使用する場合は、設定でchannels.feishu.verificationTokenchannels.feishu.encryptKeyの両方を設定してください。値を取得するには、次の手順を実行します。
  1. Feishu Open Platformでアプリを開く
  2. DevelopmentEvents & Callbacks(开发配置 → 事件与回调)に移動する
  3. Encryptionタブ(加密策略)を開く
  4. Verification TokenEncrypt Keyをコピーする
以下のスクリーンショットは、Verification Tokenの場所を示しています。Encrypt Keyは同じEncryptionセクションに表示されます。 Verification Token location

環境変数で設定する

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. Gatewayを起動する

openclaw gateway

2. テストメッセージを送信する

Feishuでボットを見つけてメッセージを送信します。

3. ペアリングを承認する

デフォルトでは、ボットはペアリングコードを返信します。次のように承認してください。
openclaw pairing approve feishu <CODE>
承認後は通常どおりチャットできます。

概要

  • Feishuボットチャンネル: Gatewayによって管理されるFeishuボット
  • 決定論的ルーティング: 返信は常にFeishuに戻る
  • セッション分離: DMはメインセッションを共有し、グループは分離される
  • WebSocket接続: Feishu SDKによる長期接続で、公開URLは不要

アクセス制御

ダイレクトメッセージ

  • デフォルト: dmPolicy: "pairing"(不明なユーザーにはペアリングコードを返す)
  • ペアリングを承認する:
    openclaw pairing list feishu
    openclaw pairing approve feishu <CODE>
    
  • 許可リストモード: 許可されたOpen IDでchannels.feishu.allowFromを設定する

グループチャット

1. グループポリシーchannels.feishu.groupPolicy):
  • "open" = グループ内の全員を許可
  • "allowlist" = groupAllowFromのみ許可
  • "disabled" = グループメッセージを無効化
デフォルト: allowlist 2. メンション要件channels.feishu.requireMentionchannels.feishu.groups.<chat_id>.requireMentionで上書き可能):
  • 明示的にtrue = @mentionが必要
  • 明示的にfalse = メンションなしで応答
  • 未設定かつgroupPolicy: "open"の場合 = デフォルトでfalse
  • 未設定かつgroupPolicy"open"でない場合 = デフォルトでtrue

グループ設定例

すべてのグループを許可し、@mention不要にする(openグループのデフォルト)

{
  channels: {
    feishu: {
      groupPolicy: "open",
    },
  },
}

すべてのグループを許可するが、引き続き@mentionを必須にする

{
  channels: {
    feishu: {
      groupPolicy: "open",
      requireMention: true,
    },
  },
}

特定のグループのみ許可する

{
  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(推奨)
  1. Gatewayを起動し、グループ内でボットに@mentionする
  2. openclaw logs --followを実行し、chat_idを探す
方法2 Feishu APIデバッガーを使ってグループチャットを一覧表示します。

ユーザーID(open_id)

ユーザーIDはou_xxxのようになります。 方法1(推奨)
  1. Gatewayを起動し、ボットにDMする
  2. openclaw logs --followを実行し、open_idを探す
方法2 ペアリング要求でユーザーOpen IDを確認します。
openclaw pairing list feishu

よく使うコマンド

コマンド説明
/statusボットのステータスを表示
/resetセッションをリセット
/modelモデルを表示/切り替え
注: Feishuはまだネイティブのコマンドメニューをサポートしていないため、コマンドはテキストとして送信する必要があります。

Gateway管理コマンド

コマンド説明
openclaw gateway statusGatewayステータスを表示
openclaw gateway installGatewayサービスをインストール/起動
openclaw gateway stopGatewayサービスを停止
openclaw gateway restartGatewayサービスを再起動
openclaw logs --followGatewayログを追跡

トラブルシューティング

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

  1. ボットがグループに追加されていることを確認する
  2. ボットに@mentionしていることを確認する(デフォルト動作)
  3. groupPolicy"disabled"に設定されていないことを確認する
  4. ログを確認する: openclaw logs --follow

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

  1. アプリが公開され、承認されていることを確認する
  2. イベントサブスクリプションにim.message.receive_v1が含まれていることを確認する
  3. long connectionが有効になっていることを確認する
  4. アプリ権限が完全であることを確認する
  5. Gatewayが実行中であることを確認する: openclaw gateway status
  6. ログを確認する: openclaw logs --follow

App Secretの漏えい

  1. Feishu Open PlatformでApp Secretをリセットする
  2. 設定内のApp Secretを更新する
  3. Gatewayを再起動する

メッセージ送信失敗

  1. アプリにim:message:send_as_bot権限があることを確認する
  2. アプリが公開されていることを確認する
  3. 詳細なエラーについてログを確認する

高度な設定

複数アカウント

{
  channels: {
    feishu: {
      defaultAccount: "main",
      accounts: {
        main: {
          appId: "cli_xxx",
          appSecret: "xxx",
          name: "Primary bot",
        },
        backup: {
          appId: "cli_yyy",
          appSecret: "yyy",
          name: "Backup bot",
          enabled: false,
        },
      },
    },
  },
}
defaultAccountは、送信APIがaccountIdを明示的に指定しない場合に、どのFeishuアカウントを使うかを制御します。

メッセージ制限

  • textChunkLimit: 送信テキストのチャンクサイズ(デフォルト: 2000文字)
  • mediaMaxMb: メディアのアップロード/ダウンロード制限(デフォルト: 30MB)

ストリーミング

Feishuは、インタラクティブカードによるストリーミング返信をサポートしています。有効にすると、ボットはテキスト生成中にカードを更新します。
{
  channels: {
    feishu: {
      streaming: true, // ストリーミングカード出力を有効化(デフォルト true)
      blockStreaming: true, // ブロックレベルストリーミングを有効化(デフォルト true)
    },
  },
}
streaming: falseに設定すると、全文の返信が完成するまで待ってから送信します。

ACPセッション

Feishuは以下に対してACPをサポートしています。
  • DM
  • グループのトピック会話
Feishu ACPはテキストコマンド駆動です。ネイティブのスラッシュコマンドメニューはないため、会話内で直接/acp ...メッセージを使用してください。

永続的なACPバインディング

トップレベルの型付きACPバインディングを使って、FeishuのDMまたはトピック会話を永続的なACPセッションに固定します。
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "feishu",
        accountId: "default",
        peer: { kind: "direct", id: "ou_1234567890" },
      },
    },
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "feishu",
        accountId: "default",
        peer: { kind: "group", id: "oc_group_chat:topic:om_topic_root" },
      },
      acp: { label: "codex-feishu-topic" },
    },
  ],
}

チャットからスレッドに紐づくACPを起動する

FeishuのDMまたはトピック会話では、その場でACPセッションを起動してバインドできます。
/acp spawn codex --thread here
注:
  • --thread hereはDMとFeishuトピックで動作します。
  • バインドされたDM/トピック内の後続メッセージは、そのACPセッションへ直接ルーティングされます。
  • v1では、一般的な非トピックのグループチャットは対象にしていません。

マルチエージェントルーティング

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を取得するを参照してください。

設定リファレンス

完全な設定: Gateway configuration 主なオプション:
設定説明デフォルト
channels.feishu.enabledチャンネルを有効化/無効化true
channels.feishu.domainAPIドメイン(feishuまたはlarkfeishu
channels.feishu.connectionModeイベント転送モードwebsocket
channels.feishu.defaultAccount送信ルーティング用のデフォルトアカウントIDdefault
channels.feishu.verificationTokenwebhookモードで必須-
channels.feishu.encryptKeywebhookモードで必須-
channels.feishu.webhookPathWebhookルートパス/feishu/events
channels.feishu.webhookHostWebhookバインドホスト127.0.0.1
channels.feishu.webhookPortWebhookバインドポート3000
channels.feishu.accounts.<id>.appIdApp ID-
channels.feishu.accounts.<id>.appSecretApp Secret-
channels.feishu.accounts.<id>.domainアカウントごとのAPIドメイン上書きfeishu
channels.feishu.dmPolicyDMポリシーpairing
channels.feishu.allowFromDM許可リスト(open_id一覧)-
channels.feishu.groupPolicyグループポリシーallowlist
channels.feishu.groupAllowFromグループ許可リスト-
channels.feishu.requireMentionデフォルトで@mention必須conditional
channels.feishu.groups.<chat_id>.requireMentionグループごとの@mention必須上書きinherited
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を無効化

サポートされるメッセージタイプ

受信

  • ✅ テキスト
  • ✅ リッチテキスト(post)
  • ✅ 画像
  • ✅ ファイル
  • ✅ 音声
  • ✅ 動画/メディア
  • ✅ ステッカー

送信

  • ✅ テキスト
  • ✅ 画像
  • ✅ ファイル
  • ✅ 音声
  • ✅ 動画/メディア
  • ✅ インタラクティブカード
  • ⚠️ リッチテキスト(post形式の書式設定とカード。任意のFeishuオーサリング機能ではありません)

スレッドと返信

  • ✅ インライン返信
  • ✅ Feishuがreply_in_threadを公開するトピックスレッド返信
  • ✅ メディア返信は、スレッド/トピックメッセージへの返信時にもスレッド認識を維持

Driveコメント

Feishuでは、誰かがFeishu Driveドキュメント(Docs、Sheetsなど)にコメントを追加したときに、エージェントを起動できます。エージェントはコメントテキスト、ドキュメントコンテキスト、コメントスレッドを受け取り、スレッド内で応答したりドキュメントを編集したりできます。 要件:
  • Feishuアプリのイベントサブスクリプション設定でdrive.notice.comment_add_v1を購読する (既存のim.message.receive_v1とあわせて)
  • Driveツールはデフォルトで有効です。channels.feishu.tools.drive: falseで無効化できます
feishu_driveツールは次のコメントアクションを公開します。
アクション説明
list_commentsドキュメント上のコメントを一覧表示
list_comment_repliesコメントスレッド内の返信を一覧表示
add_comment新しいトップレベルコメントを追加
reply_comment既存のコメントスレッドに返信
エージェントがDriveコメントイベントを処理するとき、次を受け取ります。
  • コメントテキストと送信者
  • ドキュメントメタデータ(タイトル、種類、URL)
  • スレッド内返信のためのコメントスレッドコンテキスト
ドキュメント編集後、エージェントにはコメント投稿者へ通知するためにfeishu_drive.reply_commentを使い、その後で重複送信を避けるために正確なサイレントトークンNO_REPLY / no_replyを出力するよう案内されます。

ランタイムアクションサーフェス

Feishuは現在、次のランタイムアクションを公開しています。
  • send
  • read
  • edit
  • thread-reply
  • pin
  • list-pins
  • unpin
  • member-info
  • channel-info
  • channel-list
  • リアクションが設定で有効な場合のreactreactions
  • feishu_driveコメントアクション: list_commentslist_comment_repliesadd_commentreply_comment

関連

  • Channels Overview — サポートされるすべてのチャンネル
  • Pairing — DM認証とペアリングフロー
  • Groups — グループチャットの挙動とメンション制御
  • Channel Routing — メッセージのセッションルーティング
  • Security — アクセスモデルとハードニング