本文へスキップ

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

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..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またはlark)feishu
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..appIdApp ID-
channels.feishu.accounts..appSecretApp Secret-
channels.feishu.accounts..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