channels.* 配下のチャンネル別設定キー: DM とグループアクセス、複数アカウント構成、メンションゲート、Slack、Discord、Telegram、WhatsApp、Matrix、iMessage、その他のチャンネル Plugin 向けのチャンネル別キー。
エージェント、ツール、Gateway ランタイム、その他のトップレベルキーについては、設定リファレンスを参照してください。
チャンネル
各チャンネルは、設定セクションが存在すると自動的に起動します(enabled: false の場合を除く)。Telegram と iMessage はコアの openclaw パッケージ内に同梱されています。その他の公式チャンネル(Discord、Slack、WhatsApp、Matrix、Microsoft Teams、IRC、Google Chat、Signal、Mattermost など)は、openclaw plugins install <spec> で個別のプラグインとしてインストールします。完全な一覧とインストール仕様については、チャンネルを参照してください。
DM とグループアクセス
すべてのチャンネルは DM ポリシーとグループポリシーに対応しています。| DM ポリシー | 動作 |
|---|---|
pairing (default) | 不明な送信者には一度限りのペアリングコードを返し、所有者の承認が必要 |
allowlist | allowFrom 内の送信者(またはペアリング済み許可ストア)のみ |
open | すべての受信 DM を許可(allowFrom: ["*"] が必要) |
disabled | すべての受信 DM を無視 |
| グループポリシー | 動作 |
|---|---|
allowlist (default) | 設定された許可リストに一致するグループのみ |
open | グループ許可リストをバイパス(メンションゲートは引き続き適用) |
disabled | すべてのグループ/ルームメッセージをブロック |
channels.defaults.groupPolicy は、プロバイダーの groupPolicy が未設定の場合のデフォルトを設定します。
ペアリングコードは 1 時間後に期限切れになります。保留中のペアリングリクエストは アカウントごとに 3 件 までに制限されます(チャンネルとアカウント ID ごとのスコープ)。
プロバイダーブロック全体が欠落している場合(channels.<provider> が存在しない場合)、ランタイムのグループポリシーは起動時の警告とともに allowlist(フェイルクローズ)へフォールバックします。チャンネルモデルのオーバーライド
channels.modelByChannel を使用して、特定のチャンネル ID またはダイレクトメッセージのピアをモデルに固定します。値には provider/model または設定済みのモデルエイリアスを指定できます。チャンネルマッピングは、セッションに有効なモデルオーバーライドがまだ存在しない場合にのみ適用されます(たとえば /model で設定されたもの)。
グループ/スレッド会話では、キーはチャンネル固有のグループ ID、トピック ID、またはチャンネル名です。ダイレクトメッセージ(DM)会話では、キーはチャンネルの送信者 ID(nativeDirectUserId、origin.from、origin.to、OriginatingTo、From、または SenderId)から派生したピア識別子です。正確なキー形式はチャンネルによって異なります。
| チャンネル | DM キー形式 | 例 |
|---|---|---|
| Discord | 生のユーザー ID | 987654321 |
| Feishu | feishu:ou_... | feishu:ou_a8b6cab7e945387de5f253775d9b4d85 |
| Matrix | Matrix ユーザー ID | @user:matrix.org |
| Slack | user:U... | user:U12345 |
| Telegram | 生のユーザー ID | 123456789 |
| 電話番号または JID | 15551234567 |
チャンネルのデフォルトと Heartbeat
channels.defaults を使用して、プロバイダー間で共有されるグループポリシーと Heartbeat の動作を設定します。
channels.defaults.groupPolicy: プロバイダーレベルのgroupPolicyが未設定の場合のフォールバックグループポリシー。channels.defaults.contextVisibility: すべてのチャンネルに対する補足コンテキスト表示モードのデフォルト。値:all(デフォルト、引用/スレッド/履歴コンテキストをすべて含める)、allowlist(許可リスト内の送信者からのコンテキストのみ含める)、allowlist_quote(allowlist と同じだが明示的な引用/返信コンテキストは保持)。チャンネル別オーバーライド:channels.<channel>.contextVisibility。channels.defaults.heartbeat.showOk: 正常なチャンネルステータスを Heartbeat 出力に含める(デフォルトはfalse)。channels.defaults.heartbeat.showAlerts: 劣化/エラーステータスを Heartbeat 出力に含める(デフォルトはtrue)。channels.defaults.heartbeat.useIndicator: コンパクトなインジケータ形式の Heartbeat 出力をレンダリングする(デフォルトはtrue)。
web.whatsapp.keepAliveIntervalMs(デフォルト25000)、connectTimeoutMs(デフォルト60000)、defaultQueryTimeoutMs(デフォルト60000)は Baileys ソケットを調整します。web.reconnectのデフォルト:initialMs: 2000、maxMs: 30000、factor: 1.8、jitter: 0.25、maxAttempts: 12。maxAttempts: 0は諦める代わりに永続的に再試行します。type: "acp"を持つトップレベルのbindings[]エントリは、WhatsApp DM とグループ向けの永続的な ACP バインディングを設定します。match.peer.idには E.164 の直通番号または WhatsApp グループ JID を使用します。フィールドの意味は ACP エージェントで共有されています。
複数アカウント WhatsApp
複数アカウント WhatsApp
- 送信コマンドは、存在する場合はデフォルトでアカウント
defaultを使用し、存在しない場合は最初に設定されたアカウント ID(ソート順)を使用します。 - 任意の
channels.whatsapp.defaultAccountは、設定済みアカウント ID と一致する場合に、そのフォールバックデフォルトアカウント選択をオーバーライドします。 - レガシーな単一アカウント Baileys 認証ディレクトリは、
openclaw doctorによってwhatsapp/defaultに移行されます。 - アカウント別オーバーライド:
channels.whatsapp.accounts.<id>.sendReadReceipts、channels.whatsapp.accounts.<id>.dmPolicy、channels.whatsapp.accounts.<id>.allowFrom。
Telegram
- Bot トークン:
channels.telegram.botTokenまたはchannels.telegram.tokenFile(通常ファイルのみ。シンボリックリンクは拒否)、デフォルトアカウントのフォールバックとしてTELEGRAM_BOT_TOKEN。 apiRootは Telegram Bot API のルートのみです。https://api.telegram.org/bot<TOKEN>ではなく、https://api.telegram.orgまたはセルフホスト/プロキシのルートを使用してください。openclaw doctor --fixは誤って付いた末尾の/bot<TOKEN>サフィックスを削除します。--localモードのセルフホスト Bot API サーバーでは、trustedLocalFileRootsに OpenClaw が読み取れるホストパスを列挙します。サーバーデータボリュームを OpenClaw ホストにマウントし、そのデータルートまたはトークン別ディレクトリのいずれかを設定してください。/var/lib/telegram-bot-api配下のコンテナパスはそれらのルートにマッピングされます。その他の絶対パスは引き続き拒否されます。- 任意の
channels.telegram.defaultAccountは、設定済みアカウント ID と一致する場合にデフォルトアカウント選択をオーバーライドします。 - 複数アカウント構成(2 個以上のアカウント ID)では、フォールバックルーティングを避けるため、明示的なデフォルト(
channels.telegram.defaultAccountまたはchannels.telegram.accounts.default)を設定します。これが欠落しているか無効な場合、openclaw doctorが警告します。 configWrites: falseは、Telegram から開始される設定書き込み(スーパーグループ ID 移行、/config set|unset)をブロックします。type: "acp"を持つトップレベルのbindings[]エントリは、フォーラムトピック向けの永続的な ACP バインディングを設定します(match.peer.idには正規形式のchatId:topic:topicIdを使用)。フィールドの意味は ACP エージェントで共有されています。- Telegram ストリームプレビューは
sendMessage+editMessageTextを使用します(ダイレクトチャットとグループチャットで動作)。 network.dnsResultOrderは、一般的な IPv6 の fetch 失敗を避けるため、デフォルトで"ipv4first"になります。- 再試行ポリシー: 再試行ポリシーを参照してください。
Discord
- Token:
channels.discord.token。デフォルトアカウントのフォールバックとしてDISCORD_BOT_TOKENを使用します。 - 明示的な Discord
tokenを指定する直接アウトバウンド呼び出しでは、その呼び出しにそのトークンを使用します。アカウントのリトライ/ポリシー設定は、アクティブなランタイムスナップショットで選択されたアカウントから引き続き取得されます。 - オプションの
channels.discord.defaultAccountは、設定済みアカウント ID と一致する場合にデフォルトアカウントの選択を上書きします。 - 配信ターゲットには
user:<id>(DM) またはchannel:<id>(ギルドチャンネル) を使用します。裸の数値 ID は拒否されます。 - ギルドスラッグは小文字で、スペースは
-に置き換えます。チャンネルキーはスラッグ化した名前 (#なし) を使用します。ギルド ID を推奨します。 - ボットが作成したメッセージはデフォルトで無視されます。
allowBots: trueで有効化します。ボットにメンションしているボットメッセージのみを受け入れるにはallowBots: "mentions"を使用します (自身のメッセージは引き続きフィルターされます)。 - ボット作成のインバウンドメッセージをサポートするチャンネルでは、共有のボットループ保護を使用できます。基準となるペア予算は
channels.defaults.botLoopProtectionに設定し、別の制限が必要なサーフェスがある場合にのみチャンネルまたはアカウントで上書きします。 channels.discord.guilds.<id>.ignoreOtherMentions(およびチャンネル上書き) は、別のユーザーまたはロールにメンションしているがボットにはメンションしていないメッセージを破棄します (@everyone/@here を除く)。channels.discord.mentionAliasesは、送信前に安定したアウトバウンド@handleテキストを Discord ユーザー ID にマップします。これにより、一時的なディレクトリキャッシュが空でも既知のチームメイトに決定論的にメンションできます。アカウントごとの上書きはchannels.discord.accounts.<accountId>.mentionAliases配下にあります。maxLinesPerMessage(デフォルト17) は、2000 文字未満でも縦に長いメッセージを分割します。channels.discord.suppressEmbedsのデフォルトはtrueなので、無効化しない限りアウトバウンド URL は Discord リンクプレビューに展開されません。明示的なembedsペイロードは通常どおり送信されます。メッセージごとのツール呼び出しではsuppressEmbedsで上書きできます。channels.discord.threadBindingsは Discord スレッドバインドのルーティングを制御します:enabled: スレッドバインドセッション機能 (/focus、/unfocus、/agents、/session idle、/session max-age、およびバインドされた配信/ルーティング) の Discord 上書きidleHours: 非アクティブ時の自動フォーカス解除時間の Discord 上書き (0で無効)maxAgeHours: ハード最大経過時間の Discord 上書き (0で無効)spawnSessions:sessions_spawn({ thread: true })および ACP スレッド生成の自動スレッド作成/バインドのスイッチ (デフォルト:true)defaultSpawnContext: スレッドバインド生成のネイティブサブエージェントコンテキスト (デフォルトは"fork")
type: "acp"を持つトップレベルのbindings[]エントリは、チャンネルとスレッドの永続 ACP バインドを設定します (match.peer.idにはチャンネル/スレッド ID を使用)。フィールドのセマンティクスは ACP Agents で共有されています。channels.discord.ui.components.accentColorは Discord コンポーネント v2 コンテナのアクセントカラーを設定します。channels.discord.agentComponents.ttlMsは、送信済み Discord コンポーネントのコールバックが登録されたままになる時間を制御します。デフォルトは1800000(30 分)、最大は86400000(24 時間) です。アカウントごとの上書きはchannels.discord.accounts.<accountId>.agentComponents.ttlMs配下にあります。ワークフローに合う最短の TTL を推奨します。channels.discord.voiceは Discord ボイスチャンネル会話と、任意の自動参加 + LLM + TTS 上書きを有効化します。テキスト専用の Discord 設定では、デフォルトで音声はオフです。オプトインするにはchannels.discord.voice.enabled=trueを設定します。channels.discord.voice.modelは、Discord ボイスチャンネル応答に使用する LLM モデルを任意で上書きします。channels.discord.voice.daveEncryption(デフォルトtrue) とchannels.discord.voice.decryptionFailureTolerance(デフォルト24) は、@discordjs/voiceの DAVE オプションに渡されます。channels.discord.voice.connectTimeoutMsは、/vc joinと自動参加試行時の初期@discordjs/voiceReady 待機を制御します (デフォルト30000)。channels.discord.voice.reconnectGraceMsは、切断された音声セッションが再接続シグナリングに入るまでに許容される時間を制御します。超過すると OpenClaw が破棄します (デフォルト15000)。- Discord 音声再生は、別ユーザーの発話開始イベントによって中断されません。フィードバックループを避けるため、OpenClaw は TTS の再生中に新しい音声キャプチャを無視します。
- OpenClaw はさらに、復号失敗が繰り返された後に音声セッションを退出/再参加することで、音声受信の復旧を試みます。
channels.discord.streamingは正規のストリームモードキーです。Discord のデフォルトはstreaming.mode: "progress"なので、ツール/作業の進行状況は 1 つの編集済みプレビューメッセージに表示されます。無効化するにはstreaming.mode: "off"を設定します。レガシーのstreamModeと真偽値のstreaming値はランタイムエイリアスとして残ります。永続化された設定を書き換えるにはopenclaw doctor --fixを実行してください。channels.discord.autoPresenceはランタイム可用性をボットプレゼンスにマップし (healthy => online、degraded => idle、exhausted => dnd)、任意のステータステキスト上書きを許可します。channels.discord.dangerouslyAllowNameMatchingは、変更可能な名前/タグ照合を再有効化します (緊急互換モード)。channels.discord.execApprovals: Discord ネイティブの exec 承認配信と承認者認可。enabled:true、false、または"auto"(デフォルト)。自動モードでは、approversまたはcommands.ownerAllowFromから承認者を解決できる場合に exec 承認が有効化されます。approvers: exec リクエストの承認を許可された Discord ユーザー ID。省略時はcommands.ownerAllowFromにフォールバックします。agentFilter: 任意のエージェント ID allowlist。省略するとすべてのエージェントの承認を転送します。sessionFilter: 任意のセッションキーパターン (部分文字列または正規表現)。target: 承認プロンプトの送信先。"dm"(デフォルト) は承認者 DM に送信し、"channel"は発信元チャンネルに送信し、"both"は両方に送信します。ターゲットに"channel"が含まれる場合、ボタンは解決済み承認者のみ使用できます。cleanupAfterResolve:trueの場合、承認、拒否、またはタイムアウト後に承認 DM を削除します。
off (なし)、own (ボットのメッセージ、デフォルト)、all (すべてのメッセージ)、allowlist (すべてのメッセージで guilds.<id>.users から)。
Google Chat
- サービスアカウント JSON: インライン (
serviceAccount) またはファイルベース (serviceAccountFile)。 - サービスアカウント SecretRef もサポートされています (
serviceAccountRef)。 - 環境変数フォールバック:
GOOGLE_CHAT_SERVICE_ACCOUNTまたはGOOGLE_CHAT_SERVICE_ACCOUNT_FILE(デフォルトアカウントのみ)。 - 配信ターゲットには
spaces/<spaceId>またはusers/<userId>を使用します。 channels.googlechat.dangerouslyAllowNameMatchingは、変更可能なメールプリンシパル照合を再有効化します (緊急互換モード)。
Slack
- ソケットモード には
botTokenとappTokenの両方が必要です(デフォルトアカウントの環境変数フォールバックではSLACK_BOT_TOKEN+SLACK_APP_TOKEN)。 - HTTP モード には
botTokenとsigningSecret(ルートまたはアカウントごと)が必要です。 socketModeは、Slack SDK Socket Mode トランスポート調整を公開 Bolt receiver API に渡します。ping/pong タイムアウトや古い websocket の挙動を調査するときだけ使用してください。clientPingTimeoutのデフォルトは15000です。serverPingTimeoutとpingPongLoggingEnabledは設定されている場合のみ渡されます。botToken、appToken、signingSecret、userTokenはプレーンテキスト 文字列または SecretRef オブジェクトを受け付けます。- Slack アカウントスナップショットは、
botTokenSource、botTokenStatus、appTokenStatus、HTTP モードでのsigningSecretStatusなど、 認証情報ごとのソース/ステータスフィールドを公開します。configured_unavailableは、 アカウントが SecretRef 経由で設定されているものの、現在のコマンド/ランタイムパスが シークレット値を解決できなかったことを意味します。 configWrites: falseは Slack から開始される設定書き込みをブロックします。- 任意の
channels.slack.defaultAccountは、設定済みアカウント ID と一致する場合にデフォルトアカウント選択を上書きします。 channels.slack.streaming.modeは正規の Slack ストリームモードキーです(デフォルトは"partial")。channels.slack.streaming.nativeTransportは Slack のネイティブストリーミングトランスポートを制御します(デフォルトはtrue)。レガシーのstreamMode、ブール値streaming、chunkMode、blockStreaming、blockStreamingCoalesce、nativeStreamingの値はランタイムエイリアスとして残っています。永続化済み設定をstreaming.{mode,chunkMode,block.enabled,block.coalesce,nativeTransport}に書き換えるにはopenclaw doctor --fixを実行してください。unfurlLinksとunfurlMediaは、bot 返信に対して Slack のchat.postMessageリンクおよびメディアの unfurl ブール値を渡します。unfurlLinksのデフォルトはfalseのため、有効にしない限り送信 bot リンクはインライン展開されません。unfurlMediaは設定されていない限り省略されます。1 つのアカウントについてトップレベル値を上書きするには、どちらかの値をchannels.slack.accounts.<accountId>に設定します。- 配信ターゲットには
user:<id>(DM)またはchannel:<id>を使用します。
off、own(デフォルト)、all、allowlist(reactionAllowlist から)。
スレッドセッション分離: thread.historyScope はスレッドごと(デフォルト)またはチャンネル全体で共有です。thread.inheritParent は親チャンネルのトランスクリプトを新しいスレッドにコピーします。thread.initialHistoryLimit(デフォルト 20)は、新しいスレッドセッション開始時に取得する既存スレッドメッセージ数を制限します。0 はスレッド履歴の取得を無効にします。
- Slack ネイティブストリーミングと Slack アシスタント形式の「入力中…」スレッドステータスには、返信スレッドターゲットが必要です。トップレベル DM はデフォルトでスレッド外のままなので、スレッド形式のネイティブストリーム/ステータスプレビューを表示する代わりに、Slack の下書き投稿と編集プレビューを通じてストリーミングできます。
typingReactionは、返信の実行中に受信 Slack メッセージへ一時的なリアクションを追加し、完了時に削除します。"hourglass_flowing_sand"などの Slack 絵文字ショートコードを使用してください。channels.slack.execApprovals: Slack ネイティブ承認クライアント配信と exec 承認者認可。Discord と同じスキーマです:enabled(true/false/"auto")、approvers(Slack ユーザー ID)、agentFilter、sessionFilter、target("dm"、"channel"、または"both")。Slack Plugin 承認者が解決できる場合、Plugin 承認は Slack 発のリクエストにこのネイティブクライアントパスを使用できます。Slack 発セッションまたは Slack ターゲット向けの Slack ネイティブ Plugin 承認配信は、approvals.plugin経由でも有効化できます。Plugin 承認は exec 承認者ではなく、allowFromとデフォルトルーティングからの Slack Plugin 承認者を使用します。
| アクショングループ | デフォルト | 注記 |
|---|---|---|
| reactions | 有効 | リアクション追加 + 一覧取得 |
| messages | 有効 | 読み取り/送信/編集/削除 |
| pins | 有効 | ピン留め/ピン解除/一覧取得 |
| memberInfo | 有効 | メンバー情報 |
| emojiList | 有効 | カスタム絵文字一覧 |
Mattermost
Mattermost は Discord、Slack、WhatsApp と同じ方法で別個の Plugin としてインストールします。oncall(@メンションで応答、デフォルト)、onmessage(すべてのメッセージ)、onchar(トリガープレフィックスで始まるメッセージ)。
Mattermost ネイティブコマンドが有効な場合:
commands.callbackPathは完全な URL ではなくパス(例:/api/channels/mattermost/command)である必要があります。commands.callbackUrlは OpenClaw Gateway エンドポイントに解決され、Mattermost サーバーから到達可能である必要があります。- ネイティブスラッシュコールバックは、スラッシュコマンド登録時に Mattermost から返される
コマンドごとのトークンで認証されます。登録に失敗した場合、または
有効化されたコマンドがない場合、OpenClaw は
Unauthorized: invalid command token.でコールバックを拒否します。 - プライベート/tailnet/内部コールバックホストでは、Mattermost が
ServiceSettings.AllowedUntrustedInternalConnectionsにコールバックホスト/ドメインを含めることを要求する場合があります。 完全な URL ではなく、ホスト/ドメイン値を使用してください。 channels.mattermost.configWrites: Mattermost から開始される設定書き込みを許可または拒否します。channels.mattermost.requireMention: チャンネルで返信する前に@mentionを要求します。channels.mattermost.groups.<channelId>.requireMention: チャンネルごとのメンションゲート上書き(デフォルトは"*")。- 任意の
channels.mattermost.defaultAccountは、設定済みアカウント ID と一致する場合にデフォルトアカウント選択を上書きします。
Signal
off、own(デフォルト)、all、allowlist(reactionAllowlist から)。
channels.signal.account: チャンネル起動を特定の Signal アカウント ID に固定します。channels.signal.configWrites: Signal から開始される設定書き込みを許可または拒否します。- 任意の
channels.signal.defaultAccountは、設定済みアカウント ID と一致する場合にデフォルトアカウント選択を上書きします。
iMessage
OpenClaw はimsg rpc(stdio 上の JSON-RPC)を起動します。デーモンやポートは不要です。ホストが Messages データベースと Automation の権限を付与できる場合、新しい OpenClaw iMessage セットアップではこれが推奨パスです。
BlueBubbles サポートは削除されました。channels.bluebubbles は現在の OpenClaw でサポートされるランタイム設定サーフェスではありません。古い設定は channels.imessage に移行してください。短い説明は BlueBubbles の削除と imsg iMessage パス を、完全な変換表は BlueBubbles からの移行 を参照してください。
Gateway がサインイン済みの Messages Mac で実行されていない場合は、channels.imessage.enabled=true のままにし、channels.imessage.cliPath をその Mac 上で imsg "$@" を実行する SSH ラッパーに設定します。デフォルトのローカル imsg パスは macOS 専用です。
本番送信で SSH ラッパーに依存する前に、その正確なラッパー経由で送信 imsg send を検証してください。一部の macOS TCC 状態では Messages Automation が /usr/libexec/sshd-keygen-wrapper に割り当てられ、読み取りやプローブは動作しても AppleEvents -1743 により送信が失敗することがあります。iMessage の SSH ラッパートラブルシューティングセクションを参照してください。
- 任意の
channels.imessage.defaultAccountは、設定済みアカウント ID と一致する場合にデフォルトアカウント選択を上書きします。 - Messages DB へのフルディスクアクセスが必要です。
chat_id:<id>ターゲットを優先してください。チャット一覧を表示するにはimsg chats --limit 20を使用します。cliPathは SSH ラッパーを指すことができます。SCP 添付ファイル取得用にremoteHost(hostまたはuser@host)を設定します。attachmentRootsとremoteAttachmentRootsは受信添付ファイルパスを制限します(デフォルト:/Users/*/Library/Messages/Attachments)。- SCP は厳格なホストキー確認を使用するため、リレーホストキーがすでに
~/.ssh/known_hostsに存在することを確認してください。 channels.imessage.configWrites: iMessage から開始される設定書き込みを許可または拒否します。channels.imessage.sendTransport: 通常の送信返信に推奨されるimsgRPC 送信トランスポート。auto(デフォルト)は、実行中であれば既存チャットに IMCore ブリッジを使用し、その後 AppleScript にフォールバックします。bridgeは private-API 配信を要求します。applescriptは公開 Messages Automation パスを強制します。channels.imessage.actions.*:imsg status/openclaw channels status --probeによってもゲートされる private API アクションを有効にします。channels.imessage.includeAttachmentsはデフォルトでオフです。agent ターンで受信メディアを期待する前にtrueに設定してください。- ブリッジ/Gateway 再起動後の受信復旧は自動です(GUID 重複排除に加え、古いバックログ年齢フェンス)。既存の
channels.imessage.catchup.enabled: true設定は非推奨の互換性プロファイルとして引き続き尊重されます。catchupはデフォルトで無効です。 channels.imessage.groups: グループレジストリとグループごとの設定。groupPolicy: "allowlist"の場合、グループメッセージがレジストリゲートを通過できるよう、明示的なchat_idキーまたは"*"ワイルドカードエントリを設定してください。type: "acp"のトップレベルbindings[]エントリは、iMessage 会話を永続 ACP セッションにバインドできます。match.peer.idでは正規化済みハンドルまたは明示的なチャットターゲット(chat_id:*、chat_guid:*、chat_identifier:*)を使用します。共有フィールドセマンティクス: ACP Agents。
iMessage SSH ラッパー例
iMessage SSH ラッパー例
Matrix
Matrix は Plugin ベースで、channels.matrix の下に設定されます。
- トークン認証は
accessTokenを使用し、パスワード認証はuserId+passwordを使用します。 channels.matrix.proxyは、Matrix HTTP トラフィックを明示的な HTTP(S) プロキシ経由でルーティングします。名前付きアカウントはchannels.matrix.accounts.<id>.proxyでこれを上書きできます。channels.matrix.network.dangerouslyAllowPrivateNetworkは、プライベート/内部 homeserver を許可します。proxyとこのネットワークのオプトインは独立した制御です。channels.matrix.defaultAccountは、複数アカウント構成で優先アカウントを選択します。channels.matrix.autoJoinのデフォルトは"off"のため、招待されたルームと新規の DM 形式の招待は、autoJoinAllowlistとともにautoJoin: "allowlist"を設定するか、autoJoin: "always"を設定するまで無視されます。channels.matrix.execApprovals: Matrix ネイティブの exec 承認配信と承認者認可。enabled:true、false、または"auto"(デフォルト)。自動モードでは、approversまたはcommands.ownerAllowFromから承認者を解決できる場合に exec 承認が有効になります。approvers: exec リクエストの承認を許可された Matrix ユーザー ID(例:@owner:example.org)。agentFilter: 任意のエージェント ID 許可リスト。省略すると、すべてのエージェントの承認を転送します。sessionFilter: 任意のセッションキーパターン(部分文字列または正規表現)。target: 承認プロンプトの送信先。"dm"(デフォルト)、"channel"(送信元ルーム)、または"both"。- アカウントごとの上書き:
channels.matrix.accounts.<id>.execApprovals。
channels.matrix.dm.sessionScopeは、Matrix DM をどのようにセッションにグループ化するかを制御します。per-user(デフォルト)はルーティングされた相手ごとに共有し、per-roomは各 DM ルームを分離します。- Matrix ステータスプローブとライブディレクトリ検索は、ランタイムトラフィックと同じプロキシポリシーを使用します。
- Matrix の完全な構成、ターゲティングルール、セットアップ例は Matrix に記載されています。
Microsoft Teams
Microsoft Teams は Plugin によって支えられ、channels.msteams 配下で構成されます。
- ここで扱うコアキーパス:
channels.msteams、channels.msteams.configWrites。 - Teams の完全な構成(認証情報、webhook、DM/グループポリシー、チーム別/チャンネル別の上書き)は Microsoft Teams に記載されています。
IRC
IRC は Plugin によって支えられ、channels.irc 配下で構成されます。
- ここで扱うコアキーパス:
channels.irc、channels.irc.dmPolicy、channels.irc.configWrites、channels.irc.nickserv.*。 - 任意の
channels.irc.defaultAccountは、構成済みアカウント ID と一致する場合にデフォルトアカウント選択を上書きします。 - IRC チャンネルの完全な構成(host/port/TLS/channels/allowlists/mention gating)は IRC に記載されています。
複数アカウント(すべてのチャンネル)
チャンネルごとに複数のアカウントを実行します(それぞれが独自のaccountId を持ちます)。
defaultはaccountIdが省略された場合(CLI + ルーティング)に使用されます。- 環境変数トークンは default アカウントにのみ適用されます。
- ベースのチャンネル設定は、アカウントごとに上書きされない限り、すべてのアカウントに適用されます。
- 各アカウントを別のエージェントにルーティングするには
bindings[].match.accountIdを使用します。 - まだ単一アカウントのトップレベルチャンネル構成のまま、
openclaw channels add(またはチャンネルのオンボーディング)で非デフォルトアカウントを追加した場合、OpenClaw はまずアカウントスコープのトップレベル単一アカウント値をチャンネルのアカウントマップに昇格させ、元のアカウントが動作し続けるようにします。ほとんどのチャンネルではそれらをchannels.<channel>.accounts.defaultに移動します。Matrix では、既存の一致する名前付き/デフォルトターゲットを代わりに保持できます。 - 既存のチャンネルのみのバインディング(
accountIdなし)は、引き続きデフォルトアカウントに一致します。アカウントスコープのバインディングは引き続き任意です。 openclaw doctor --fixも、アカウントスコープのトップレベル単一アカウント値をそのチャンネルに選択された昇格済みアカウントへ移動して、混在した形状を修復します。ほとんどのチャンネルではaccounts.defaultを使用します。Matrix では、既存の一致する名前付き/デフォルトターゲットを代わりに保持できます。
その他の Plugin チャンネル
多くの Plugin チャンネルはchannels.<id> として構成され、それぞれ専用のチャンネルページ(例: Feishu、LINE、Nextcloud Talk、Nostr、QQ Bot、Synology Chat、Twitch、Zalo)に記載されています。
完全なチャンネルインデックスを参照してください: チャンネル。
グループチャットのメンションゲート
グループメッセージのデフォルトは メンション必須(メタデータメンションまたは安全な正規表現パターン)です。WhatsApp、Telegram、Discord、Google Chat、iMessage のグループチャットに適用されます。 可視返信は別に制御されます。通常のグループ、チャンネル、内部 WebChat の直接リクエストは、デフォルトで自動的な最終配信になります。最終的なアシスタントテキストは、レガシーの可視返信パスを通じて投稿されます。可視出力をエージェントがmessage(action=send) を呼び出した後にのみ投稿する必要がある場合は、messages.visibleReplies: "message_tool" または messages.groupChat.visibleReplies: "message_tool" をオプトインしてください。オプトイン済みのツール専用モードで、モデルがメッセージツールを呼び出さずに最終テキストを返した場合、その最終テキストはプライベートのままとなり、gateway の詳細ログに抑制されたペイロードのメタデータが記録されます。
ツール専用の可視返信には、ツールを確実に呼び出すモデル/ランタイムが必要であり、GPT 5.5 などの最新世代モデルを使う共有アンビエントルームに推奨されます。一部の弱いモデルは最終テキストで回答できますが、ソースに可視な出力は message(action=send) で送信する必要があることを理解できない場合があります。そのようなモデルでは、最終アシスタントターンが可視返信パスになるように "automatic" を使用してください。セッションログに didSendViaMessagingTool: false を含むアシスタントテキストが表示される場合、モデルはメッセージツールを呼び出す代わりにプライベートな最終テキストを生成しています。そのチャンネルでは、より強力なツール呼び出し対応モデルに切り替えるか、gateway の詳細ログで抑制されたペイロード要約を確認するか、messages.groupChat.visibleReplies: "automatic" を設定してすべてのグループ/チャンネルリクエストで可視の最終返信を使用してください。
アクティブなツールポリシーの下でメッセージツールが利用できない場合、OpenClaw は応答を黙って抑制するのではなく、自動可視返信にフォールバックします。openclaw doctor はこの不一致について警告します。
このルールは通常のエージェントの最終テキストに適用されます。Plugin が所有する会話バインディングでは、要求されたバインド済みスレッドターンの可視応答として、所有 Plugin が返した返信を使用します。Plugin はそれらのバインディング返信のために message(action=send) を呼び出す必要はありません。
トラブルシューティング: グループ @mention で入力中表示の後に無音になる(エラーなし)
症状: グループ/チャンネルの @mention で入力中インジケーターが表示され、gateway ログに dispatch complete (queuedFinal=false, replies=0) と報告されるものの、ルームにメッセージが届きません。同じエージェントへの DM は通常どおり返信します。
原因: グループ/チャンネルの可視返信モードが "message_tool" に解決されているため、OpenClaw はターンを実行しますが、エージェントが message(action=send) を呼び出さない限り最終アシスタントテキストを抑制します。このモードには NO_REPLY 契約はありません。メッセージツール呼び出しがないということは、ソース返信がないということです。抑制は構成された動作であるため、エラーはありません。通常のグループとチャンネルのターンはデフォルトで "automatic" なので、この症状は messages.groupChat.visibleReplies(またはグローバルの messages.visibleReplies)が明示的に "message_tool" に設定されている場合にのみ現れます。ハーネスの defaultVisibleReplies はここには適用されません — グループ/チャンネルリゾルバーはこれを無視します。これは直接/ソースチャットにのみ影響します(Codex ハーネスはその方法で直接チャットの最終応答を抑制します)。
修正: より強力なツール呼び出し対応モデルを選ぶか、明示的な "message_tool" 上書きを削除して "automatic" デフォルトに戻すか、messages.groupChat.visibleReplies: "automatic" を設定してすべてのグループ/チャンネルリクエストで可視返信を強制してください。gateway はファイル保存後に messages 構成をホットリロードします。デプロイでファイル監視または構成リロードが無効になっている場合のみ gateway を再起動してください。
メンションの種類:
- メタデータメンション: ネイティブプラットフォームの @-mentions。WhatsApp の self-chat モードでは無視されます。
- テキストパターン:
agents.list[].groupChat.mentionPatterns内の安全な正規表現パターン。無効なパターンと安全でない入れ子の反復は無視されます。 - メンションゲートは、検出が可能な場合(ネイティブメンションまたは少なくとも 1 つのパターン)にのみ適用されます。
messages.groupChat.historyLimit はグローバルデフォルトを設定します。チャンネルは channels.<channel>.historyLimit(またはアカウントごと)で上書きできます。無効にするには 0 を設定します。
messages.groupChat.unmentionedInbound: "room_event" は、対応チャンネルで、メンションされていない常時オンのグループ/チャンネルメッセージを静かなルームコンテキストとして送信します。メンションされたメッセージ、コマンド、直接メッセージは引き続きユーザーリクエストです。Discord、Slack、Telegram の完全な例については アンビエントルームイベント を参照してください。
messages.visibleReplies はグローバルなソースイベントデフォルトです。messages.groupChat.visibleReplies はグループ/チャンネルのソースイベントでそれを上書きします。messages.visibleReplies が未設定の場合、直接/ソースチャットは選択されたランタイムまたはハーネスのデフォルトを使用しますが、内部 WebChat の直接ターンは Pi/Codex プロンプトの同等性のため自動最終配信を使用します。可視出力に message(action=send) を意図的に必須にするには、messages.visibleReplies: "message_tool" を設定します。チャンネル許可リストとメンションゲートは引き続き、イベントを処理するかどうかを決定します。
DM 履歴制限
provider:direct:<id>(またはレガシーの provider:dm:<id>)形式に従う任意のチャンネルについて、channels.<provider>.dmHistoryLimit と channels.<provider>.dms.<id>.historyLimit を読み取ります。そのため、固定リストだけでなく、バンドル済みチャンネルと Plugin チャンネルの両方で同様に動作します。
Self-chat モード
self-chat モードを有効にするには、自分の番号をallowFrom に含めます(ネイティブ @-mentions を無視し、テキストパターンにのみ応答します)。
コマンド(チャットコマンド処理)
コマンドの詳細
コマンドの詳細
- このブロックはコマンドサーフェスを構成します。現在の組み込み + バンドル済みコマンドカタログについては、スラッシュコマンドを参照してください。
- このページは設定キーリファレンスであり、完全なコマンドカタログではありません。QQ Bot
/bot-ping/bot-help/bot-logs、LINE/card、device-pair/pair、memory/dreaming、phone-control/phone、Talk/voiceなど、チャンネル/Plugin が所有するコマンドは、それぞれのチャンネル/Plugin ページおよびスラッシュコマンドに記載されています。 - テキストコマンドは、先頭に
/が付いた単独のメッセージでなければなりません。 native: "auto"は Discord/Telegram のネイティブコマンドを有効にし、Slack は無効のままにします。nativeSkills: "auto"は Discord/Telegram のネイティブ Skills コマンドを有効にし、Slack は無効のままにします。- チャンネルごとに上書きできます:
channels.discord.commands.native(bool または"auto")。Discord の場合、falseは起動時のネイティブコマンド登録とクリーンアップをスキップします。 channels.<provider>.commands.nativeSkillsで、チャンネルごとのネイティブ Skills 登録を上書きします。channels.telegram.customCommandsは Telegram ボットメニューに追加エントリを追加します。bash: trueはホストシェル用の! <cmd>を有効にします。tools.elevated.enabledと、tools.elevated.allowFrom.<channel>内の送信者が必要です。config: trueは/config(openclaw.jsonの読み書き)を有効にします。Gatewaychat.sendクライアントの場合、永続的な/config set|unsetの書き込みにはoperator.adminも必要です。読み取り専用の/config showは、通常の書き込みスコープを持つ operator クライアントでも引き続き利用できます。mcp: trueは、mcp.servers配下の OpenClaw 管理 MCP サーバー設定用に/mcpを有効にします。plugins: trueは、Plugin の探索、インストール、有効化/無効化コントロール用に/pluginsを有効にします。channels.<provider>.configWritesは、チャンネルごとの設定変更を制御します(デフォルト: true)。- 複数アカウントのチャンネルでは、
channels.<provider>.accounts.<id>.configWritesも、そのアカウントを対象とする書き込みを制御します(例:/allowlist --config --account <id>または/config set channels.<provider>.accounts.<id>...)。 restart: falseは/restartと Gateway 再起動ツールアクションを無効にします。デフォルト:true。ownerAllowFromは、所有者専用コマンドと所有者ゲート付きチャンネルアクションの明示的な所有者許可リストです。allowFromとは別です。ownerDisplay: "hash"は、システムプロンプト内の所有者 ID をハッシュ化します。ハッシュを制御するにはownerDisplaySecretを設定します。allowFromは provider ごとの設定です。設定されている場合、これが唯一の認可ソースになります(チャンネル許可リスト/ペアリングとuseAccessGroupsは無視されます)。useAccessGroups: falseは、allowFromが設定されていない場合に、コマンドがアクセスグループポリシーをバイパスできるようにします。- コマンドドキュメントの対応表:
関連
- 設定リファレンス — トップレベルキー
- 設定 — agents
- チャンネル概要