Gateway
設定 — チャンネル
channels.* 配下のチャネルごとの設定キー。DM とグループアクセス、
マルチアカウント構成、メンションゲート、および Slack、Discord、
Telegram、WhatsApp、Matrix、iMessage、その他の同梱チャネル Plugin のチャネルごとのキーを扱います。
エージェント、ツール、Gateway ランタイム、その他のトップレベルキーについては、 設定リファレンスを参照してください。
チャネル
各チャネルは、設定セクションが存在すると自動的に起動します(enabled: false の場合を除く)。
DM とグループアクセス
すべてのチャネルは DM ポリシーとグループポリシーをサポートします。
| DM ポリシー | 動作 |
|---|---|
pairing (default) |
不明な送信者には 1 回限りのペアリングコードが送られ、所有者の承認が必要 |
allowlist |
allowFrom(またはペアリング済み許可ストア)内の送信者のみ |
open |
すべての受信 DM を許可(allowFrom: ["*"] が必要) |
disabled |
すべての受信 DM を無視 |
| グループポリシー | 動作 |
|---|---|
allowlist (default) |
設定された許可リストに一致するグループのみ |
open |
グループ許可リストをバイパス(メンションゲートは引き続き適用) |
disabled |
すべてのグループ/ルームメッセージをブロック |
チャネルモデルの上書き
channels.modelByChannel を使用して、特定のチャネル ID をモデルに固定します。値には provider/model または設定済みのモデルエイリアスを指定できます。セッションにモデル上書きがまだない場合(たとえば /model で設定された場合)に、チャネルマッピングが適用されます。
{ channels: { modelByChannel: { discord: { "123456789012345678": "anthropic/claude-opus-4-6", }, slack: { C1234567890: "openai/gpt-4.1", }, telegram: { "-1001234567890": "openai/gpt-4.1-mini", "-1001234567890:topic:99": "anthropic/claude-sonnet-4-6", }, }, },}チャネルデフォルトと Heartbeat
プロバイダー全体で共有されるグループポリシーと Heartbeat の動作には、channels.defaults を使用します。
{ channels: { defaults: { groupPolicy: "allowlist", // open | allowlist | disabled contextVisibility: "all", // all | allowlist | allowlist_quote heartbeat: { showOk: false, showAlerts: true, useIndicator: true, }, }, },}channels.defaults.groupPolicy: プロバイダーレベルのgroupPolicyが未設定の場合のフォールバックグループポリシー。channels.defaults.contextVisibility: すべてのチャネルのデフォルト補助コンテキスト可視性モード。値:all(デフォルト、引用/スレッド/履歴コンテキストをすべて含める)、allowlist(許可リスト内の送信者からのコンテキストのみ含める)、allowlist_quote(allowlist と同じだが、明示的な引用/返信コンテキストは保持)。チャネルごとの上書き:channels.<channel>.contextVisibility。channels.defaults.heartbeat.showOk: Heartbeat 出力に正常なチャネルステータスを含める。channels.defaults.heartbeat.showAlerts: Heartbeat 出力に劣化/エラーステータスを含める。channels.defaults.heartbeat.useIndicator: コンパクトなインジケーター形式の Heartbeat 出力を表示する。
WhatsApp は Gateway の Web チャネル(Baileys Web)を通じて実行されます。リンク済みセッションが存在すると自動的に起動します。
{ web: { enabled: true, heartbeatSeconds: 60, whatsapp: { keepAliveIntervalMs: 25000, connectTimeoutMs: 60000, defaultQueryTimeoutMs: 60000, }, reconnect: { initialMs: 2000, maxMs: 120000, factor: 1.4, jitter: 0.2, maxAttempts: 0, }, }, channels: { whatsapp: { dmPolicy: "pairing", // pairing | allowlist | open | disabled allowFrom: ["+15555550123", "+447700900123"], textChunkLimit: 4000, chunkMode: "length", // length | newline mediaMaxMb: 50, sendReadReceipts: true, // blue ticks (false in self-chat mode) groups: { "*": { requireMention: true }, }, groupPolicy: "allowlist", groupAllowFrom: ["+15551234567"], }, },}マルチアカウント WhatsApp
{channels: { whatsapp: { accounts: { default: {}, personal: {}, biz: { // authDir: "~/.openclaw/credentials/whatsapp/biz", }, }, },},}- 送信コマンドは、存在する場合はアカウント
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
{ channels: { telegram: { enabled: true, botToken: "your-bot-token", dmPolicy: "pairing", allowFrom: ["tg:123456789"], groups: { "*": { requireMention: true }, "-1001234567890": { allowFrom: ["@admin"], systemPrompt: "Keep answers brief.", topics: { "99": { requireMention: false, skills: ["search"], systemPrompt: "Stay on topic.", }, }, }, }, customCommands: [ { command: "backup", description: "Git backup" }, { command: "generate", description: "Create an image" }, ], historyLimit: 50, replyToMode: "first", // off | first | all | batched linkPreview: true, streaming: "partial", // off | partial | block | progress (default: off; opt in explicitly to avoid preview-edit rate limits) actions: { reactions: true, sendMessage: true }, reactionNotifications: "own", // off | own | all mediaMaxMb: 100, retry: { attempts: 3, minDelayMs: 400, maxDelayMs: 30000, jitter: 0.1, }, network: { autoSelectFamily: true, dnsResultOrder: "ipv4first", }, apiRoot: "https://api.telegram.org", proxy: "socks5://localhost:9050", webhookUrl: "https://example.com/telegram-webhook", webhookSecret: "secret", webhookPath: "/telegram-webhook", }, },}- ボットトークン:
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>サフィックスを削除します。- 任意の
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を使用します(ダイレクトチャットとグループチャットで動作)。 - リトライポリシー: リトライポリシーを参照してください。
Discord
{ channels: { discord: { enabled: true, token: "your-bot-token", mediaMaxMb: 100, allowBots: false, actions: { reactions: true, stickers: true, polls: true, permissions: true, messages: true, threads: true, pins: true, search: true, memberInfo: true, roleInfo: true, roles: false, channelInfo: true, voiceStatus: true, events: true, moderation: false, }, replyToMode: "off", // off | first | all | batched dmPolicy: "pairing", allowFrom: ["1234567890", "123456789012345678"], dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] }, guilds: { "123456789012345678": { slug: "friends-of-openclaw", requireMention: false, ignoreOtherMentions: true, reactionNotifications: "own", users: ["987654321098765432"], channels: { general: { allow: true }, help: { allow: true, requireMention: true, users: ["987654321098765432"], skills: ["docs"], systemPrompt: "Short answers only.", }, }, }, }, historyLimit: 20, textChunkLimit: 2000, chunkMode: "length", // length | newline streaming: { mode: "progress", // off | partial | block | progress (Discord default: progress) progress: { label: "auto", maxLines: 8, toolProgress: true, }, }, maxLinesPerMessage: 17, ui: { components: { accentColor: "#5865F2", }, }, threadBindings: { enabled: true, idleHours: 24, maxAgeHours: 0, spawnSessions: true, defaultSpawnContext: "fork", }, voice: { enabled: true, autoJoin: [ { guildId: "123456789012345678", channelId: "234567890123456789", }, ], daveEncryption: true, decryptionFailureTolerance: 24, connectTimeoutMs: 30000, reconnectGraceMs: 15000, tts: { provider: "openai", openai: { voice: "alloy" }, }, }, execApprovals: { enabled: "auto", // true | false | "auto" approvers: ["987654321098765432"], agentFilter: ["default"], sessionFilter: ["discord:"], target: "dm", // dm | channel | both cleanupAfterResolve: false, }, retry: { attempts: 3, minDelayMs: 500, maxDelayMs: 30000, jitter: 0.1, }, }, },}- トークン:
channels.discord.token。デフォルトアカウントのフォールバックとしてDISCORD_BOT_TOKENを使用します。 - 明示的な Discord
tokenを指定する直接のアウトバウンド呼び出しでは、その呼び出しにそのトークンを使用します。アカウントのリトライ/ポリシー設定は、アクティブなランタイムスナップショット内の選択されたアカウントから引き続き取得されます。 - 任意の
channels.discord.defaultAccountは、構成済みアカウント ID と一致する場合にデフォルトアカウント選択を上書きします。 - 配信ターゲットには
user:<id>(DM) またはchannel:<id>(ギルドチャンネル) を使用します。裸の数値 ID は拒否されます。 - ギルドスラッグは小文字で、スペースは
-に置き換えられます。チャンネルキーはスラッグ化された名前を使用します (#なし)。ギルド ID を推奨します。 - ボットが作成したメッセージはデフォルトで無視されます。
allowBots: trueで有効化できます。ボットにメンションしているボットメッセージのみを受け入れるにはallowBots: "mentions"を使用します (自身のメッセージは引き続きフィルタリングされます)。 channels.discord.guilds.<id>.ignoreOtherMentions(およびチャンネル上書き) は、ボットではない別のユーザーまたはロールにメンションしているメッセージを破棄します (@everyone/@here は除外)。channels.discord.mentionAliasesは、安定したアウトバウンド@handleテキストを送信前に Discord ユーザー ID にマップします。これにより、一時的なディレクトリキャッシュが空でも、既知のチームメイトを決定的にメンションできます。アカウントごとの上書きはchannels.discord.accounts.<accountId>.mentionAliases配下に置きます。maxLinesPerMessage(デフォルト 17) は、2000 文字未満でも縦に長いメッセージを分割します。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 エージェント で共通です。channels.discord.ui.components.accentColorは、Discord components v2 コンテナのアクセントカラーを設定します。channels.discord.voiceは Discord ボイスチャンネル会話と、任意の自動参加 + LLM + TTS 上書きを有効にします。テキストのみの Discord 構成では、デフォルトで音声はオフです。オプトインするにはchannels.discord.voice.enabled=trueを設定します。channels.discord.voice.modelは、Discord ボイスチャンネル応答に使用される LLM モデルを任意で上書きします。channels.discord.voice.daveEncryptionとchannels.discord.voice.decryptionFailureToleranceは、@discordjs/voiceの DAVE オプションにそのまま渡されます (デフォルトはtrueと24)。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"(デフォルト)。auto モードでは、approversまたはcommands.ownerAllowFromから承認者を解決できる場合に exec 承認が有効になります。approvers: exec リクエストの承認を許可された Discord ユーザー ID。省略時はcommands.ownerAllowFromにフォールバックします。agentFilter: 任意のエージェント ID 許可リスト。省略すると、すべてのエージェントの承認を転送します。sessionFilter: 任意のセッションキーパターン (部分文字列または正規表現)。target: 承認プロンプトの送信先。"dm"(デフォルト) は承認者の DM に送信し、"channel"は発信元チャンネルに送信し、"both"は両方に送信します。ターゲットに"channel"が含まれる場合、ボタンは解決済み承認者のみが使用できます。cleanupAfterResolve:trueの場合、承認、拒否、またはタイムアウト後に承認 DM を削除します。
リアクション通知モード: off (なし)、own (ボットのメッセージ、デフォルト)、all (すべてのメッセージ)、allowlist (すべてのメッセージに対して guilds.<id>.users から)。
Google Chat
{ channels: { googlechat: { enabled: true, serviceAccountFile: "/path/to/service-account.json", audienceType: "app-url", // app-url | project-number audience: "https://gateway.example.com/googlechat", webhookPath: "/googlechat", botUser: "users/1234567890", dm: { enabled: true, policy: "pairing", allowFrom: ["users/1234567890"], }, groupPolicy: "allowlist", groups: { "spaces/AAAA": { allow: true, requireMention: true }, }, actions: { reactions: true }, typingIndicator: "message", mediaMaxMb: 20, }, },}- サービスアカウント JSON: インライン (
serviceAccount) またはファイルベース (serviceAccountFile)。 - サービスアカウント SecretRef もサポートされています (
serviceAccountRef)。 - 環境変数フォールバック:
GOOGLE_CHAT_SERVICE_ACCOUNTまたはGOOGLE_CHAT_SERVICE_ACCOUNT_FILE。 - 配信ターゲットには
spaces/<spaceId>またはusers/<userId>を使用します。 channels.googlechat.dangerouslyAllowNameMatchingは、変更可能なメールプリンシパル照合を再有効化します (緊急互換モード)。
Slack
{ channels: { slack: { enabled: true, botToken: "xoxb-...", appToken: "xapp-...", socketMode: { clientPingTimeout: 15000, serverPingTimeout: 30000, pingPongLoggingEnabled: false, }, dmPolicy: "pairing", allowFrom: ["U123", "U456", "*"], dm: { enabled: true, groupEnabled: false, groupChannels: ["G123"] }, channels: { C123: { allow: true, requireMention: true, allowBots: false }, "#general": { allow: true, requireMention: true, allowBots: false, users: ["U123"], skills: ["docs"], systemPrompt: "Short answers only.", }, }, historyLimit: 50, allowBots: false, reactionNotifications: "own", reactionAllowlist: ["U123"], replyToMode: "off", // off | first | all | batched thread: { historyScope: "thread", // thread | channel inheritParent: false, }, actions: { reactions: true, messages: true, pins: true, memberInfo: true, emojiList: true, }, slashCommand: { enabled: true, name: "openclaw", sessionPrefix: "slack:slash", ephemeral: true, }, typingReaction: "hourglass_flowing_sand", unfurlLinks: false, unfurlMedia: false, textChunkLimit: 4000, chunkMode: "length", streaming: { mode: "partial", // off | partial | block | progress nativeTransport: true, // use Slack native streaming API when mode=partial }, mediaMaxMb: 20, execApprovals: { enabled: "auto", // true | false | "auto" approvers: ["U123"], agentFilter: ["default"], sessionFilter: ["slack:"], target: "dm", // dm | channel | both }, }, },}- Socket mode には
botTokenとappTokenの両方が必要です (デフォルトアカウントの環境変数フォールバックにはSLACK_BOT_TOKEN+SLACK_APP_TOKEN)。 - HTTP mode には
botTokenとsigningSecret(ルートまたはアカウントごと) が必要です。 socketModeは Slack SDK Socket Mode トランスポート調整を公開 Bolt レシーバー API にそのまま渡します。ping/pong タイムアウトや古い websocket の挙動を調査するときだけ使用してください。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 ストリームモードキーです。channels.slack.streaming.nativeTransportは Slack のネイティブストリーミングトランスポートを制御します。レガシーのstreamMode、ブール値のstreaming、およびnativeStreamingはランタイムエイリアスとして残ります。永続化された構成を書き換えるにはopenclaw doctor --fixを実行します。unfurlLinksとunfurlMediaは、ボット返信向けに Slack のchat.postMessageのリンクおよびメディア展開ブール値をそのまま渡します。Slack のデフォルト動作を維持するには省略します。1 つのアカウントでトップレベルのデフォルトを上書きするにはchannels.slack.accounts.<accountId>に設定します。- 配信ターゲットには
user:<id>(DM) またはchannel:<id>を使用します。
リアクション通知モード: off、own (デフォルト)、all、allowlist (reactionAllowlist から)。
スレッドセッション分離: thread.historyScope はスレッドごと (デフォルト) またはチャンネル全体で共有です。thread.inheritParent は親チャンネルのトランスクリプトを新しいスレッドにコピーします。
- Slack ネイティブストリーミングと Slack アシスタント形式の「is typing...」スレッドステータスには、返信スレッドターゲットが必要です。トップレベル 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")。
| アクショングループ | デフォルト | メモ |
|---|---|---|
| reactions | 有効 | リアクション + リアクション一覧 |
| messages | 有効 | 読み取り/送信/編集/削除 |
| pins | 有効 | ピン留め/ピン解除/一覧 |
| memberInfo | 有効 | メンバー情報 |
| emojiList | 有効 | カスタム絵文字一覧 |
Mattermost
Mattermost は現在の OpenClaw リリースではバンドル Plugin として提供されます。古いビルドまたは
カスタムビルドでは、現在の npm パッケージを
openclaw plugins install @openclaw/mattermost でインストールできます。バージョンを固定する前に、現在の dist-tag を
npmjs.com/package/@openclaw/mattermost
で確認してください。
{ channels: { mattermost: { enabled: true, botToken: "mm-token", baseUrl: "https://chat.example.com", dmPolicy: "pairing", chatmode: "oncall", // oncall | onmessage | onchar oncharPrefixes: [">", "!"], groups: { "*": { requireMention: true }, "team-channel-id": { requireMention: false }, }, commands: { native: true, // opt-in nativeSkills: true, callbackPath: "/api/channels/mattermost/command", // Optional explicit URL for reverse-proxy/public deployments callbackUrl: "https://gateway.example.com/api/channels/mattermost/command", }, textChunkLimit: 4000, chunkMode: "length", }, },}チャットモード: 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
{ channels: { signal: { enabled: true, account: "+15555550123", // optional account binding dmPolicy: "pairing", allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], configWrites: true, reactionNotifications: "own", // off | own | all | allowlist reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"], historyLimit: 50, }, },}リアクション通知モード: 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 サポートは削除されました。現在の OpenClaw では、channels.bluebubbles はサポート対象のランタイム設定サーフェスではありません。古い設定は channels.imessage に移行してください。短い概要は BlueBubbles の削除と imsg iMessage パス を、完全な変換表は BlueBubbles からの移行 を参照してください。
Gateway がサインイン済みの Messages Mac で実行されていない場合は、channels.imessage.enabled=true のままにし、channels.imessage.cliPath をその Mac で imsg "$@" を実行する SSH ラッパーに設定します。デフォルトのローカル imsg パスは macOS 専用です。
{ channels: { imessage: { enabled: true, cliPath: "imsg", dbPath: "~/Library/Messages/chat.db", remoteHost: "user@gateway-host", dmPolicy: "pairing", allowFrom: ["+15555550123", "[email protected]", "chat_id:123"], historyLimit: 50, includeAttachments: false, attachmentRoots: ["/Users/*/Library/Messages/Attachments"], remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"], mediaMaxMb: 16, service: "auto", region: "US", actions: { reactions: true, edit: true, unsend: true, reply: true, sendWithEffect: true, sendAttachment: true, }, catchup: { enabled: false, }, }, },}-
任意の
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.actions.*:imsg status/openclaw channels status --probeでもゲートされるプライベート API アクションを有効にします。 -
channels.imessage.includeAttachmentsはデフォルトでオフです。エージェントターンで受信メディアを期待する前にtrueに設定してください。 -
channels.imessage.catchup.enabled: Gateway が停止していた間に到着した受信メッセージの再生にオプトインします。 -
channels.imessage.groups: グループレジストリとグループごとの設定です。groupPolicy: "allowlist"では、グループメッセージがレジストリゲートを通過できるよう、明示的なchat_idキーまたは"*"ワイルドカードエントリのいずれかを設定します。 -
type: "acp"を持つトップレベルのbindings[]エントリは、iMessage 会話を永続 ACP セッションにバインドできます。match.peer.idには正規化されたハンドル、または明示的なチャットターゲット(chat_id:*、chat_guid:*、chat_identifier:*)を使用します。共有フィールドの意味: ACP エージェント。
iMessage SSH ラッパー例
#!/usr/bin/env bashexec ssh -T gateway-host imsg "$@"Matrix
Matrix は Plugin ベースで、channels.matrix 配下で設定されます。
{ channels: { matrix: { enabled: true, homeserver: "https://matrix.example.org", accessToken: "syt_bot_xxx", proxy: "http://127.0.0.1:7890", encryption: true, initialSyncLimit: 20, defaultAccount: "ops", accounts: { ops: { name: "Ops", userId: "@ops:example.org", accessToken: "syt_ops_xxx", }, alerts: { userId: "@alerts:example.org", password: "secret", proxy: "http://127.0.0.1:7891", }, }, }, },}- トークン認証は
accessTokenを使用し、パスワード認証はuserId+passwordを使用します。 channels.matrix.proxyは Matrix HTTP トラフィックを明示的な HTTP(S) プロキシ経由でルーティングします。名前付きアカウントはchannels.matrix.accounts.<id>.proxyで上書きできます。channels.matrix.network.dangerouslyAllowPrivateNetworkはプライベート/内部ホームサーバーを許可します。proxyとこのネットワークオプトインは独立した制御です。channels.matrix.defaultAccountは、複数アカウント設定で優先アカウントを選択します。channels.matrix.autoJoinはデフォルトでoffのため、招待されたルームと新しい DM 形式の招待は、autoJoin: "allowlist"とautoJoinAllowlist、または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: { enabled: true, configWrites: true, // appId, appPassword, tenantId, webhook, team/channel policies: // see /channels/msteams }, },}- ここで扱うコアキーパス:
channels.msteams、channels.msteams.configWrites。 - Teams の完全な設定(認証情報、webhook、DM/グループポリシー、チームごと/チャンネルごとの上書き)は Microsoft Teams に記載されています。
IRC
IRC は Plugin ベースで、channels.irc 配下で設定されます。
{ channels: { irc: { enabled: true, dmPolicy: "pairing", configWrites: true, nickserv: { enabled: true, service: "NickServ", password: "${IRC_NICKSERV_PASSWORD}", register: false, registerEmail: "[email protected]", }, }, },}- ここで扱うコアキーパス:
channels.irc、channels.irc.dmPolicy、channels.irc.configWrites、channels.irc.nickserv.*。 - 任意の
channels.irc.defaultAccountは、設定済みアカウント ID と一致する場合にデフォルトアカウント選択を上書きします。 - IRC チャンネルの完全な設定(ホスト/ポート/TLS/チャンネル/許可リスト/メンションゲート)は IRC に記載されています。
複数アカウント(すべてのチャンネル)
チャンネルごとに複数のアカウントを実行します(それぞれ独自の accountId を持ちます)。
{ channels: { telegram: { accounts: { default: { name: "Primary bot", botToken: "123456:ABC...", }, alerts: { name: "Alerts bot", botToken: "987654:XYZ...", }, }, }, },}accountIdが省略された場合、defaultが使用されます(CLI + ルーティング)。- 環境変数トークンは デフォルト アカウントにのみ適用されます。
- ベースチャンネル設定は、アカウントごとに上書きされない限り、すべてのアカウントに適用されます。
- 各アカウントを別のエージェントにルーティングするには、
bindings[].match.accountIdを使用します。 - 単一アカウントのトップレベルチャンネル設定のまま、
openclaw channels add(またはチャンネルオンボーディング)で非デフォルトアカウントを追加した場合、OpenClaw は元のアカウントが引き続き動作するよう、まずアカウントスコープのトップレベル単一アカウント値をチャンネルアカウントマップに昇格します。ほとんどのチャンネルではそれらをchannels.<channel>.accounts.defaultに移動します。Matrix では既存の一致する名前付き/デフォルトターゲットを代わりに保持できます。 - 既存のチャンネルのみのバインディング(
accountIdなし)はデフォルトアカウントとのマッチを維持します。アカウントスコープのバインディングは引き続き任意です。 openclaw doctor --fixも、そのチャンネルで選択された昇格済みアカウントへ、アカウントスコープのトップレベル単一アカウント値を移動することで混在形状を修復します。ほとんどのチャンネルではaccounts.defaultを使用します。Matrix では既存の一致する名前付き/デフォルトターゲットを代わりに保持できます。
その他の Plugin チャンネル
多くの Plugin チャンネルは channels.<id> として設定され、それぞれ専用のチャンネルページに記載されています(例: Feishu、Matrix、LINE、Nostr、Zalo、Nextcloud Talk、Synology Chat、Twitch)。
完全なチャンネル索引を参照してください: チャンネル。
グループチャットのメンションゲート
グループメッセージはデフォルトで メンション必須(メタデータメンションまたは安全な正規表現パターン)です。WhatsApp、Telegram、Discord、Google Chat、iMessage のグループチャットに適用されます。
表示される返信は別に制御されます。グループ/チャンネルルームのデフォルトは messages.groupChat.visibleReplies: "message_tool" です。OpenClaw は引き続きターンを処理しますが、通常の最終返信は非公開のままで、ルームに表示される出力には message(action=send) が必要です。通常の返信をルームへ投稿し返す従来の挙動が必要な場合のみ "automatic" を設定してください。同じツール専用の表示返信挙動をダイレクトチャットにも適用するには、messages.visibleReplies: "message_tool" を設定します。Codex ハーネスも、未設定のダイレクトチャットのデフォルトとしてこのツール専用挙動を使用します。
ツール専用の表示返信には、確実にツールを呼び出すモデル/ランタイムが必要です。セッションログに didSendViaMessagingTool: false の assistant テキストが表示される場合、そのモデルはメッセージツールを呼び出す代わりに非公開の最終回答を生成しています。そのチャンネルでは、より強力なツール呼び出し対応モデルに切り替えるか、messages.groupChat.visibleReplies: "automatic" を設定して従来の表示される最終返信を復元してください。
アクティブなツールポリシーでメッセージツールが利用できない場合、OpenClaw は応答を静かに抑制するのではなく、自動の表示返信にフォールバックします。openclaw doctor はこの不一致について警告します。
Gateway は、ファイルの保存後に messages 設定をホットリロードします。デプロイでファイル監視または設定リロードが無効になっている場合のみ再起動してください。
メンションの種類:
- メタデータメンション: ネイティブプラットフォームの @ メンション。WhatsApp のセルフチャットモードでは無視されます。
- テキストパターン:
agents.list[].groupChat.mentionPatterns内の安全な正規表現パターン。無効なパターンと安全でないネストされた繰り返しは無視されます。 - メンションゲーティングは、検出が可能な場合(ネイティブメンション、または少なくとも 1 つのパターン)にのみ適用されます。
{ messages: { visibleReplies: "automatic", // global default for direct/source chats; Codex harness defaults unset direct chats to message_tool groupChat: { historyLimit: 50, visibleReplies: "message_tool", // default; use "automatic" for legacy final replies }, }, agents: { list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }], },}messages.groupChat.historyLimit はグローバルデフォルトを設定します。チャンネルは channels.<channel>.historyLimit(またはアカウント単位)で上書きできます。無効にするには 0 を設定します。
messages.visibleReplies はグローバルなソースターンのデフォルトです。messages.groupChat.visibleReplies は、グループ/チャンネルのソースターンについてそれを上書きします。messages.visibleReplies が未設定の場合、ハーネスは独自のダイレクト/ソースのデフォルトを提供できます。Codex ハーネスのデフォルトは message_tool です。チャンネル許可リストとメンションゲーティングは、ターンを処理するかどうかを引き続き決定します。
DM 履歴制限
{ channels: { telegram: { dmHistoryLimit: 30, dms: { "123456789": { historyLimit: 50 }, }, }, },}解決順序: DM 単位の上書き → プロバイダーのデフォルト → 制限なし(すべて保持)。
対応: telegram, whatsapp, discord, slack, signal, imessage, msteams。
セルフチャットモード
セルフチャットモードを有効にするには、自分の番号を allowFrom に含めます(ネイティブ @ メンションを無視し、テキストパターンにのみ応答します)。
{ channels: { whatsapp: { allowFrom: ["+15555550123"], groups: { "*": { requireMention: true } }, }, }, agents: { list: [ { id: "main", groupChat: { mentionPatterns: ["reisponde", "@openclaw"] }, }, ], },}コマンド(チャットコマンド処理)
{ commands: { native: "auto", // register native commands when supported nativeSkills: "auto", // register native skill commands when supported text: true, // parse /commands in chat messages bash: false, // allow ! (alias: /bash) bashForegroundMs: 2000, config: false, // allow /config mcp: false, // allow /mcp plugins: false, // allow /plugins debug: false, // allow /debug restart: true, // allow /restart + gateway restart tool ownerAllowFrom: ["discord:123456789012345678"], ownerDisplay: "raw", // raw | hash ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}", allowFrom: { "*": ["user1"], discord: ["user:123"], }, useAccessGroups: true, },}コマンドの詳細
- このブロックはコマンドサーフェスを設定します。現在の組み込み + バンドル済みコマンドカタログについては、スラッシュコマンド を参照してください。
- このページは設定キーのリファレンスであり、完全なコマンドカタログではありません。QQ Bot の
/bot-ping/bot-help/bot-logs、LINE の/card、デバイスペアリングの/pair、メモリの/dreaming、電話制御の/phone、Talk の/voiceなど、チャンネル/Plugin が所有するコマンドは、それぞれのチャンネル/Plugin ページと スラッシュコマンド に記載されています。 - テキストコマンドは、先頭に
/が付いた単独のメッセージである必要があります。 native: "auto"は Discord/Telegram のネイティブコマンドを有効にし、Slack はオフのままにします。nativeSkills: "auto"は Discord/Telegram のネイティブ Skills コマンドを有効にし、Slack はオフのままにします。- チャンネル単位で上書きします:
channels.discord.commands.native(真偽値または"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の読み取り/書き込み)を有効にします。Gateway のchat.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は、owner 専用コマンド/ツール向けの明示的な owner 許可リストです。allowFromとは別です。ownerDisplay: "hash"はシステムプロンプト内の owner ID をハッシュ化します。ハッシュ化を制御するにはownerDisplaySecretを設定します。allowFromはプロバイダー単位です。設定されている場合、それが唯一の認可ソースです(チャンネル許可リスト/ペアリングとuseAccessGroupsは無視されます)。useAccessGroups: falseは、allowFromが設定されていない場合に、コマンドがアクセスグループポリシーをバイパスできるようにします。- コマンドドキュメントマップ:
- 組み込み + バンドル済みカタログ: スラッシュコマンド
- チャンネル固有のコマンドサーフェス: チャンネル
- QQ Bot コマンド: QQ Bot
- ペアリングコマンド: ペアリング
- LINE カードコマンド: LINE
- メモリ Dreaming: Dreaming
関連
- 設定リファレンス — トップレベルキー
- 設定 — agents
- チャンネル概要