Feishu Bot

Feishu(Lark)は、企業がメッセージングやコラボレーションに使用するチームチャットプラットフォームです。このプラグインはOpenClawをFeishu/Lark BotにWebSocketイベントサブスクリプション経由で接続するため、パブリックな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. エンタープライズアプリを作成をクリック
  2. アプリ名と説明を入力
  3. アプリアイコンを選択

エンタープライズアプリの作成

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. Bot機能の有効化

アプリ機能 > Botで:

  1. Bot機能を有効化
  2. Bot名を設定

Bot機能の有効化

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

警告: イベントサブスクリプションを設定する前に、以下を確認してください:

  1. Feishu用にopenclaw channels addを実行済み
  2. Gatewayが実行中(openclaw gateway status

イベントサブスクリプションで:

  1. 長時間接続でイベントを受信(WebSocket)を選択
  2. イベントim.message.receive_v1を追加

警告: Gatewayが実行されていない場合、長時間接続のセットアップが保存できない場合があります。

イベントサブスクリプションの設定

7. アプリの公開

  1. バージョン管理とリリースでバージョンを作成
  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",
          botName: "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. 開発イベントとコールバックに移動
  3. 暗号化タブを開く
  4. Verification TokenEncrypt Keyをコピー

Verification Tokenの場所

環境変数で設定

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で自分のBotを見つけてメッセージを送信してください。

3. ペアリングの承認

デフォルトでは、Botはペアリングコードで応答します。承認してください:

openclaw pairing approve feishu <CODE>

承認後、通常どおりチャットできるようになります。


概要

  • Feishu Botチャンネル:Gatewayが管理するFeishu Bot
  • 決定的ルーティング:返信は常に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にリストされたユーザーのメッセージのみが処理され、他のメンバーからのメッセージは無視されます。

{
  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を起動してグループ内でBotを@メンション
  2. openclaw logs --followを実行してchat_idを確認

方法2

Feishu APIデバッガーでグループチャットを一覧表示してください。

ユーザーID(open_id)

ユーザーIDはou_xxxのような形式です。

方法1(推奨)

  1. Gatewayを起動してBotにDMを送信
  2. openclaw logs --followを実行してopen_idを確認

方法2

ペアリングリクエストでユーザーOpen IDを確認:

openclaw pairing list feishu

よく使うコマンド

コマンド説明
/statusBotのステータス表示
/resetセッションのリセット
/modelモデルの表示/切替

注意:Feishuはネイティブコマンドメニューにまだ対応していないため、コマンドはテキストとして送信する必要があります。

Gateway管理コマンド

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

トラブルシューティング

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

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

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

  1. アプリが公開および承認されていることを確認
  2. イベントサブスクリプションにim.message.receive_v1が含まれていることを確認
  3. 長時間接続が有効になっていることを確認
  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",
          botName: "Primary bot",
        },
        backup: {
          appId: "cli_yyy",
          appSecret: "yyy",
          botName: "Backup bot",
          enabled: false,
        },
      },
    },
  },
}

defaultAccountは、送信APIでaccountIdが明示的に指定されていない場合に使用されるFeishuアカウントを制御します。

メッセージ上限

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

ストリーミング

Feishuはインタラクティブカードによるストリーミング返信をサポートしています。有効にすると、Botはテキスト生成中にカードを更新します。

{
  channels: {
    feishu: {
      streaming: true, // ストリーミングカード出力を有効化(デフォルト true)
      blockStreaming: true, // ブロックレベルストリーミングを有効化(デフォルト true)
    },
  },
}

完全な返信を待ってから送信するにはstreaming: falseを設定してください。

マルチAgentルーティング

bindingsを使用してFeishuのDMやグループを異なるAgentにルーティングできます。

{
  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の取得方法はグループ/ユーザーIDの取得を参照してください。


設定リファレンス

完全な設定:Gateway設定

主な設定項目:

設定説明デフォルト
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グループポリシー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を無効化

対応メッセージタイプ

受信

  • テキスト
  • リッチテキスト(投稿)
  • 画像
  • ファイル
  • 音声
  • 動画
  • スタンプ

送信

  • テキスト
  • 画像
  • ファイル
  • 音声
  • リッチテキスト(部分的サポート)