メッセージングプラットフォーム

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

ウィザードは以下の手順を案内します:

  1. Feishuアプリの作成と認証情報の収集
  2. OpenClawでのアプリ認証情報の設定
  3. ゲートウェイの起動

設定後、ゲートウェイの状態を確認します:

  • openclaw gateway status
  • openclaw logs --follow

方法2: CLIセットアップ

初期インストールが完了している場合は、CLI経由でチャネルを追加します:

openclaw channels add

Feishuを選択し、App IDとApp Secretを入力します。✅ 設定後、ゲートウェイを管理します:

  • openclaw gateway status
  • openclaw gateway restart
  • openclaw logs --follow

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

1. Feishuオープンプラットフォームを開く

Feishuオープンプラットフォームにアクセスしてサインインします。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. ボット機能を有効化する

アプリ機能 > ボットで:

  1. ボット機能を有効化
  2. ボット名を設定

ボット機能を有効化

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

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

  1. Feishuに対してopenclaw channels addを実行済みであること
  2. ゲートウェイが実行中であること(openclaw gateway status

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

  1. 長い接続を使用してイベントを受信する(WebSocket)を選択
  2. イベントim.message.receive_v1を追加

⚠️ ゲートウェイが実行されていない場合、長い接続の設定は保存に失敗する可能性があります。 イベントサブスクリプションを設定

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"を使用する場合は、verificationTokenを設定します。Feishu Webhookサーバーはデフォルトで127.0.0.1にバインドされます。異なるバインドアドレスを意図的に必要とする場合のみwebhookHostを設定してください。

検証トークン(Webhookモード)

Webhookモードを使用する場合は、設定でchannels.feishu.verificationTokenを設定します。値を取得するには:

  1. Feishuオープンプラットフォームでアプリを開く
  2. 開発イベントとコールバックに移動
  3. 暗号化タブを開く
  4. 検証トークンをコピー

検証トークンの場所

環境変数で設定する

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(推奨)

  1. ゲートウェイを起動し、グループ内でボットを@メンションします
  2. openclaw logs --followを実行し、chat_idを探します

方法2 Feishu APIデバッガーを使用してグループチャットをリストします。

ユーザーID(open_id)

ユーザーIDはou_xxxのようになります。方法1(推奨)

  1. ゲートウェイを起動し、ボットにDMを送信します
  2. 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ゲートウェイログを追跡

トラブルシューティング

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

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

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

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

App Secretの漏洩

  1. FeishuオープンプラットフォームでApp Secretをリセット
  2. 設定内のApp Secretを更新
  3. ゲートウェイを再起動

メッセージ送信失敗

  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はインタラクティブカードを介したストリーミング返信をサポートしています。有効にすると、ボットはテキストを生成しながらカードを更新します。

{
  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.domainAPIドメイン(feishuまたはlarkfeishu
channels.feishu.connectionModeイベント転送モードwebsocket
channels.feishu.defaultAccountアウトバウンドルーティングのデフォルトアカウントIDdefault
channels.feishu.verificationTokenWebhookモードで必須-
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を無効化

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

受信

  • ✅ テキスト
  • ✅ リッチテキスト(投稿)
  • ✅ 画像
  • ✅ ファイル
  • ✅ 音声
  • ✅ 動画
  • ✅ ステッカー

送信

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

DiscordGoogle Chat