配對
Discord DM 預設為配對模式。
斜線命令
原生命令行為與命令目錄。
頻道疑難排解
跨頻道診斷與修復流程。
快速設定
建立一個含機器人的 Discord 應用程式,將機器人加入你的伺服器,並與 OpenClaw 配對。如果可以,請使用私人伺服器;如有需要,請先建立一個(Create My Own > For me and my friends)。建立 Discord 應用程式與機器人
在 Discord Developer Portal 中,按一下 New Application 並為它命名(例如「OpenClaw」)。在側邊欄開啟 Bot,並將 Username 設為你的代理程式名稱。
啟用特權 intent
仍在 Bot 頁面中,於 Privileged Gateway Intents 下啟用:
- Message Content Intent(必要)
- Server Members Intent(建議;角色允許清單、名稱對 ID 比對,以及頻道受眾存取群組需要)
- Presence Intent(選用;僅用於狀態更新)
產生邀請 URL 並將機器人加入你的伺服器
在側邊欄開啟 OAuth2。在 OAuth2 URL Generator 中啟用這些 scope:
botapplications.commands
- View Channels
- Send Messages
- Read Message History
- Embed Links
- Attach Files
- Add Reactions(選用)
啟用開發者模式並收集你的 ID
在 Discord 應用程式中,啟用開發者模式,以便複製 ID:
- User Settings(齒輪圖示)→ Developer → 開啟 Developer Mode (行動版:App Settings → Advanced)
- 以右鍵按一下你的 server icon → Copy Server ID
- 以右鍵按一下你的個人頭像 → Copy User ID
允許來自伺服器成員的 DM
若要讓配對運作,Discord 必須允許機器人傳送 DM 給你。以右鍵按一下你的 server icon → Privacy Settings → 開啟 Direct Messages。如果你會搭配 OpenClaw 使用 Discord DM,請保持開啟。如果你只使用伺服器頻道,可以在配對後停用。
安全設定你的機器人權杖(不要在聊天中傳送)
機器人權杖是秘密。請先在執行 OpenClaw 的機器上設定它,再傳訊息給你的代理程式:如果 OpenClaw 已作為背景服務執行,請透過 OpenClaw Mac 應用程式重新啟動,或停止並重新啟動
openclaw gateway run 程序。
對於受管理的服務安裝,請從已設定 DISCORD_BOT_TOKEN 的 shell 執行 openclaw gateway install,或將變數儲存在 ~/.openclaw/.env,讓服務在重新啟動後可解析 env SecretRef。
如果你的主機遭 Discord 的啟動應用程式查詢封鎖或速率限制,請從 Developer Portal 設定 application/client ID,讓啟動流程可略過該 REST 呼叫:預設帳戶使用 channels.discord.applicationId,或每個機器人使用 channels.discord.accounts.<accountId>.applicationId。設定 OpenClaw 並配對
- 詢問你的代理程式
- 命令列介面 / config
在既有頻道(例如 Telegram)與你的 OpenClaw 代理程式聊天並告訴它。如果 Discord 是你的第一個頻道,請改用命令列介面 / config 分頁。
「我已經在 config 中設定 Discord bot token。請使用 User ID<user_id>和 Server ID<server_id>完成 Discord 設定。」
權杖解析會感知帳戶。Config token 值優先於 env fallback,而
DISCORD_BOT_TOKEN 只會用於預設帳戶。
如果兩個已啟用的 Discord 帳戶解析為相同的機器人權杖,OpenClaw 只會為該權杖啟動一個閘道監控:來自 config 的權杖優先於 env fallback;否則第一個已啟用帳戶勝出,重複帳戶會回報為已停用,原因為 duplicate bot token。
對於進階 outbound 呼叫(message tool/channel actions),明確的每次呼叫 token 會用於該呼叫。這適用於傳送與 read/probe 風格的動作(read/search/fetch/thread/pins/permissions)。帳戶 policy/retry 設定仍來自作用中 runtime snapshot 裡選取的帳戶。建議:設定伺服器工作區
DM 可運作後,你可以將伺服器變成完整工作區,讓每個頻道都有自己的代理程式工作階段與自己的脈絡。建議用於只有你和你的機器人的私人伺服器。將你的伺服器加入伺服器允許清單
這會讓你的代理程式可在你伺服器上的任何頻道回應,而不只是 DM。
- 詢問你的代理程式
- Config
「將我的 Discord Server ID <server_id> 加入伺服器允許清單」
允許不需 @mention 的回應
預設情況下,代理程式只會在伺服器頻道中被 @mentioned 時回應。在私人伺服器上,你可能希望它回應每則訊息。在伺服器頻道中,一般回覆預設會自動發出。對於共享的常駐聊天室,選擇使用
messages.groupChat.visibleReplies: "message_tool",讓代理程式可潛伏,並只在判斷頻道回覆有用時才發文。這最適合最新世代、工具可靠的模型,例如 GPT 5.5。周遭聊天室事件會保持安靜,除非工具送出。完整潛伏模式 config 請參閱周遭聊天室事件。如果 Discord 顯示正在輸入,且 logs 顯示 token 用量但沒有發出訊息,請檢查該 turn 是否設定為周遭聊天室事件,或是否選擇使用 message-tool visible replies。- 詢問你的代理程式
- Config
「允許我的代理程式在這個伺服器上回應,不必被 @mentioned」
#coding、#home、#research,或任何符合你工作流程的頻道。
Runtime 模型
- 閘道擁有 Discord 連線。
- 回覆路由是確定性的:Discord inbound 會回覆到 Discord。
- Discord 伺服器/頻道中繼資料會作為不受信任脈絡加入模型 prompt,而不是作為使用者可見的回覆前綴。如果模型把該 envelope 複製回來,OpenClaw 會從 outbound 回覆和未來 replay 脈絡中移除複製的中繼資料。
- 預設情況下(
session.dmScope=main),直接聊天會共用代理程式主要工作階段(agent:main:main)。 - 伺服器頻道是隔離的工作階段 key(
agent:<agentId>:discord:channel:<channelId>)。 - Group DM 預設會被忽略(
channels.discord.dm.groupEnabled=false)。 - 原生斜線命令會在隔離的命令工作階段中執行(
agent:<agentId>:discord:slash:<userId>),同時仍攜帶CommandTargetSessionKey到路由後的對話工作階段。 - 傳送到 Discord 的純文字 cron/heartbeat 公告會收斂為最終的 assistant-visible answer,並只傳送一次。當代理程式發出多個可傳遞 payload 時,媒體與結構化元件 payload 仍會是多訊息。
論壇頻道
Discord 論壇和媒體頻道只接受討論串貼文。OpenClaw 支援兩種建立方式:- 傳送訊息到論壇父層(
channel:<forumId>)以自動建立討論串。討論串標題會使用訊息的第一個非空白行(截斷至 Discord 的 100 字元討論串名稱限制)。 - 使用
openclaw message thread create直接建立討論串。請勿對論壇頻道傳入--message-id。
channel:<threadId>)。
互動式元件
OpenClaw 支援供代理訊息使用的 Discord components v2 容器。使用訊息工具並搭配components 承載資料。互動結果會像一般傳入訊息一樣路由回代理,並遵循既有的 Discord replyToMode 設定。
支援的區塊:
text、section、separator、actions、media-gallery、file- 動作列最多允許 5 個按鈕或單一選取選單
- 選取類型:
string、user、role、mentionable、channel
components.reusable=true 可允許按鈕、選取項和表單在到期前多次使用。
若要限制誰可以點擊按鈕,請在該按鈕上設定 allowedUsers(Discord 使用者 ID、標籤或 *)。不符合的使用者會收到僅自己可見的拒絕訊息。
元件回呼預設會在 30 分鐘後到期。設定 channels.discord.agentComponents.ttlMs 可變更預設帳號的回呼登錄生命週期,或依帳號設定 channels.discord.accounts.<accountId>.agentComponents.ttlMs。此值以毫秒為單位,必須是正整數,且上限為 86400000(24 小時)。較長的 TTL 適合需要讓按鈕保持可用的審查/核准工作流程,但也會延長舊 Discord 訊息仍可觸發動作的時間範圍。請偏好使用符合需求的最短 TTL,並在過期回呼會令人意外時保留預設值。
/model 和 /models 斜線命令會開啟互動式模型選擇器,其中包含供應商、模型和相容執行階段下拉選單,並有提交步驟。/models add 已棄用,會傳回棄用訊息,而不是從聊天註冊模型。選擇器回覆是僅自己可見的,且只能由呼叫它的使用者使用。Discord 選取選單限制為 25 個選項,因此當你希望選擇器只針對所選供應商(例如 openai 或 vllm)顯示動態探索到的模型時,請將 provider/* 項目加入 agents.defaults.models。
檔案附件:
file區塊必須指向附件參照(attachment://<filename>)- 透過
media/path/filePath提供附件(單一檔案);多個檔案請使用media-gallery - 當上傳名稱應與附件參照相符時,使用
filename覆寫上傳名稱
- 加入
components.modal,最多可包含 5 個欄位 - 欄位類型:
text、checkbox、radio、select、role-select、user-select - OpenClaw 會自動加入觸發按鈕
存取控制與路由
- 私訊政策
- 存取群組
- 伺服器政策
- 提及與群組 DM
channels.discord.dmPolicy 控制 DM 存取。channels.discord.allowFrom 是標準 DM 允許清單。pairing(預設)allowlist(至少需要一個allowFrom傳送者)open(需要channels.discord.allowFrom包含"*")disabled
pairing 模式中被提示配對)。多帳號優先順序:channels.discord.accounts.default.allowFrom只套用至default帳號。- 對單一帳號而言,
allowFrom優先於舊版dm.allowFrom。 - 當具名帳號本身的
allowFrom和舊版dm.allowFrom未設定時,會繼承channels.discord.allowFrom。 - 具名帳號不會繼承
channels.discord.accounts.default.allowFrom。
channels.discord.dm.policy 和 channels.discord.dm.allowFrom。openclaw doctor --fix 會在不變更存取權的情況下,將它們遷移到 dmPolicy 和 allowFrom。傳遞用的 DM 目標格式:user:<id><@id>提及
allowFrom 中的 ID,為了相容性會被視為使用者 DM 目標。以角色為基礎的代理路由
使用bindings[].match.roles 依角色 ID 將 Discord 伺服器成員路由到不同代理。以角色為基礎的繫結只接受角色 ID,且會在對等或父對等繫結之後、僅伺服器繫結之前評估。如果繫結也設定其他比對欄位(例如 peer + guildId + roles),所有已設定欄位都必須符合。
原生命令與命令授權
commands.native預設為"auto",並對 Discord 啟用。- 依頻道覆寫:
channels.discord.commands.native。 commands.native=false會在啟動期間略過 Discord 斜線命令註冊與清理。先前註冊的命令可能仍會在 Discord 中可見,直到你從 Discord 應用程式移除它們。- 原生命令驗證使用與一般訊息處理相同的 Discord 允許清單/政策。
- 未授權使用者仍可能在 Discord UI 中看到命令;執行時會強制套用 OpenClaw 驗證並回覆「未授權」。
- 預設斜線命令設定:
ephemeral: true(channels.discord.slashCommand.ephemeral)。
功能詳細資料
回覆標籤與原生回覆
回覆標籤與原生回覆
Discord 支援代理程式輸出中的回覆標籤:
[[reply_to_current]][[reply_to:<id>]]
channels.discord.replyToMode 控制:off(預設):沒有隱含的回覆串接;明確的[[reply_to_*]]標籤仍會被遵守first:將隱含的原生回覆參照附加到該回合的第一則外送 Discord 訊息all:附加到每一則外送訊息batched:只有在傳入事件是多則訊息的防抖批次時才附加;適合你主要想在模糊、突發的聊天中使用原生回覆,而不是每個單一訊息回合都使用
連結預覽
連結預覽
Discord 預設會為 URL 產生豐富連結嵌入。OpenClaw 預設會抑制外送 Discord 訊息上這些產生的嵌入,因此代理程式傳送的 URL 會維持純連結,除非你選擇啟用:設定
channels.discord.accounts.<id>.suppressEmbeds 以覆寫單一帳戶。代理程式訊息工具傳送也可以針對單一訊息傳入 suppressEmbeds: false。明確的 Discord embeds 酬載不會被預設連結預覽設定抑制。即時串流預覽
即時串流預覽
OpenClaw 可以透過傳送暫時訊息並在文字抵達時編輯它,來串流草稿回覆。預覽串流僅支援文字;媒體回覆會退回一般傳送。
channels.discord.streaming.mode 接受 off | partial | block | progress(未設定 streaming/舊版 streamMode 鍵時的預設值)。streamMode 是舊版別名;執行 openclaw doctor --fix 以將持久化設定重寫為標準巢狀 streaming 形狀。off停用 Discord 預覽編輯。partial會在 token 抵達時編輯單一預覽訊息。block會送出草稿大小的區塊;使用streaming.preview.chunk(minChars、maxChars、breakPreference)調整大小與斷點,並限制在textChunkLimit內。明確啟用區塊串流時,OpenClaw 會略過預覽串流以避免雙重串流。progress會保留一則可編輯的狀態草稿,並以工具進度更新它,直到最終傳送;共用起始標籤是一行滾動文字,因此一旦出現足夠工作內容,它就會像其餘內容一樣捲離。- 媒體、錯誤和明確回覆的最終訊息會取消待處理的預覽編輯。
streaming.preview.toolProgress(預設true)控制工具/進度更新是否重用預覽訊息。- 工具/進度列會在可用時以精簡的表情符號 + 標題 + 詳細資料呈現,例如
🛠️ Bash: run tests或🔎 Web Search: for "query"。 streaming.progress.commentary(預設false)選擇在暫時進度草稿中納入助理評論/前言文字。評論會在顯示前清理,保持暫時性,且不會改變最終答案傳送。streaming.progress.maxLineChars控制每行進度預覽預算。散文會在字詞邊界縮短;命令與路徑詳細資料會保留有用的後綴。streaming.preview.commandText/streaming.progress.commandText控制精簡進度列中的命令/執行詳細資料:raw(預設)或status(僅工具標籤)。
歷史、脈絡與討論串行為
歷史、脈絡與討論串行為
伺服器歷史脈絡:
channels.discord.historyLimit預設20- 備援:
messages.groupChat.historyLimit 0停用
channels.discord.dmHistoryLimitchannels.discord.dms["<user_id>"].historyLimit
- Discord 討論串會以頻道工作階段路由,並繼承父頻道設定,除非已覆寫。
- 討論串工作階段會繼承父頻道的工作階段層級
/model選擇,作為僅模型的備援;討論串本地/model選擇優先,且除非啟用逐字稿繼承,否則不會複製父逐字稿歷史。 channels.discord.thread.inheritParent(預設false)會讓新的自動討論串選擇從父逐字稿植入。依帳戶覆寫:channels.discord.accounts.<id>.thread.inheritParent。- 訊息工具反應可以解析
user:<id>DM 目標。 guilds.<guild>.channels.<channel>.requireMention: false會在回覆階段啟用備援期間保留。
子代理程式的討論串綁定工作階段
子代理程式的討論串綁定工作階段
Discord 可以將討論串綁定到工作階段目標,讓該討論串中的後續訊息持續路由到相同工作階段(包含子代理程式工作階段)。命令:附註:
/focus <target>將目前/新討論串綁定到子代理程式/工作階段目標/unfocus移除目前討論串綁定/agents顯示作用中執行與綁定狀態/session idle <duration|off>檢查/更新聚焦綁定的不活動自動取消聚焦/session max-age <duration|off>檢查/更新聚焦綁定的硬性最大期限
session.threadBindings.*設定全域預設值;channels.discord.threadBindings.*覆寫 Discord 行為。spawnSessions控制sessions_spawn({ thread: true })和 ACP 討論串生成的自動建立/綁定討論串。預設:true。defaultSpawnContext控制討論串綁定生成的原生子代理程式脈絡。預設:"fork"。- 已棄用的
spawnSubagentSessions/spawnAcpSessions鍵會由openclaw doctor --fix遷移。 - 如果某個帳戶停用討論串綁定,
/focus和相關討論串綁定操作將不可用。
持久 ACP 頻道綁定
持久 ACP 頻道綁定
對於穩定的「always-on」ACP 工作區,請設定頂層型別化 ACP 綁定,目標為 Discord 對話。設定路徑:附註:
bindings[],搭配 type: "acp" 和 match.channel: "discord"。/acp spawn codex --bind here會就地綁定目前頻道或討論串,並讓未來訊息維持在相同 ACP 工作階段。討論串訊息會繼承父頻道綁定。- 在已綁定的頻道或討論串中,
/new和/reset會就地重設相同 ACP 工作階段。暫時討論串綁定可以在作用中時覆寫目標解析。 spawnSessions透過--thread auto|here控管子討論串建立/綁定。
反應通知
反應通知
每個伺服器的反應通知模式(
guilds.<id>.reactionNotifications):offown(預設)allallowlist(使用guilds.<id>.users)
確認反應
確認反應
ackReaction 會在 OpenClaw 處理傳入訊息時傳送確認表情符號。解析順序:channels.discord.accounts.<accountId>.ackReactionchannels.discord.ackReactionmessages.ackReaction- 代理程式身分表情符號備援(
agents.list[].identity.emoji,否則為 ”👀”)
- Discord 接受 unicode 表情符號或自訂表情符號名稱。
- 使用
""停用頻道或帳戶的反應。
messages.ackReactionScope):值:"all"(DM + 群組,包含周遭聊天室事件)、"direct"(僅 DM)、"group-all"(除了周遭聊天室事件之外的每則群組訊息,無 DM)、"group-mentions"(機器人被提及時的群組;無 DM,預設)、"off" / "none"(停用)。預設範圍(
"group-mentions")不會在直接訊息或周遭聊天室事件中觸發確認反應。若要在傳入 Discord DM 和安靜聊天室事件上取得確認反應,請將 messages.ackReactionScope 設為 "all"。設定寫入
設定寫入
預設啟用由頻道啟動的設定寫入。這會影響
/config set|unset 流程(啟用命令功能時)。停用:閘道代理
閘道代理
透過 依帳戶覆寫:
channels.discord.proxy 使用 HTTP(S) 代理路由 Discord 閘道 WebSocket 流量與啟動 REST 查詢(應用程式 ID + 允許清單解析)。
Discord 閘道 WebSocket 代理是明確的;WebSocket 連線不會繼承閘道程序的環境代理變數。設定 channels.discord.proxy 時,啟動 REST 查詢會使用此代理。PluralKit 支援
PluralKit 支援
啟用 PluralKit 解析,以將代理訊息對應到系統成員身分:備註:
- 允許清單可使用
pk:<memberId> - 只有在
channels.discord.dangerouslyAllowNameMatching: true時,才會依名稱/slug 比對成員顯示名稱 - 查詢會使用原始訊息 ID 查詢 PluralKit API
- 如果查詢失敗,代理訊息會被視為機器人訊息並丟棄,除非
allowBots允許它們通過
傳出提及別名
傳出提及別名
當代理需要對已知 Discord 使用者進行確定性的傳出提及時,請使用
mentionAliases。鍵是不含前置 @ 的 handle;值是 Discord 使用者 ID。未知 handle、@everyone、@here,以及 Markdown 程式碼範圍內的提及會保持不變。狀態設定
狀態設定
當你設定狀態或活動欄位,或啟用自動狀態時,會套用狀態更新。僅狀態:活動(設定 串流:活動類型對照表:自動狀態會將執行階段可用性對應到 Discord 狀態:健康 => 線上,降級或未知 => 閒置,已耗盡或不可用 => 請勿打擾。預設值:
activity 時,自訂狀態是預設活動類型):- 0: 遊玩中
- 1: 串流中(需要
activityUrl;activityUrl也需要activityType: 1) - 2: 聆聽中
- 3: 觀看中
- 4: 自訂(使用活動文字作為狀態狀態;表情符號為選填)
- 5: 競賽中
intervalMs 30000,minUpdateIntervalMs 15000(必須小於或等於 intervalMs)。選填文字覆寫:autoPresence.healthyTextautoPresence.degradedTextautoPresence.exhaustedText(支援{reason}placeholder)
Discord 中的核准
Discord 中的核准
Discord 支援在私訊中使用按鈕式核准處理,也可選擇在原始頻道中張貼核准提示。設定路徑:
channels.discord.execApprovals.enabledchannels.discord.execApprovals.approvers(選填;可行時會退回使用commands.ownerAllowFrom)channels.discord.execApprovals.target(dm|channel|both,預設:dm)agentFilter、sessionFilter、cleanupAfterResolve
enabled 未設定或為 "auto",且至少能解析出一位核准者時,Discord 會自動啟用原生 exec 核准;核准者可來自 execApprovals.approvers 或 commands.ownerAllowFrom。Discord 不會從頻道 allowFrom、舊版 dm.allowFrom 或直接訊息 defaultTo 推斷 exec 核准者。若要明確停用 Discord 作為原生核准用戶端,請設定 enabled: false。對於 /diagnostics 和 /export-trajectory 等敏感的僅限擁有者群組命令,OpenClaw 會私下傳送核准提示和最終結果。當發起命令的擁有者有 Discord 擁有者路由時,它會先嘗試 Discord 私訊;否則會退回使用 commands.ownerAllowFrom 中第一個可用的擁有者路由,例如 Telegram。當 target 為 channel 或 both 時,核准提示會在頻道中可見。只有已解析的核准者可以使用按鈕;其他使用者會收到暫時性的拒絕訊息。核准提示會包含命令文字,因此只應在受信任的頻道中啟用頻道傳遞。如果無法從工作階段鍵推導出頻道 ID,OpenClaw 會退回使用私訊傳遞。Discord 會呈現其他聊天頻道使用的共用核准按鈕;原生 Discord 配接器主要新增核准者私訊路由和頻道扇出。當這些按鈕存在時,它們是主要核准使用者體驗;OpenClaw 只有在工具結果表示聊天核准不可用,或手動核准是唯一路徑時,才應包含手動 /approve 命令。如果 Discord 原生核准執行階段未啟用,OpenClaw 會保持本機確定性的 /approve <id> <decision> 提示可見。如果執行階段已啟用,但原生卡片無法傳遞到任何目標,OpenClaw 會在同一聊天中傳送備援通知,並包含待處理核准中的確切 /approve 命令。閘道驗證和核准解析遵循共用的閘道用戶端合約(plugin: ID 透過 plugin.approval.resolve 解析;其他 ID 透過 exec.approval.resolve 解析)。核准預設會在 30 分鐘後過期。請參閱 Exec 核准。工具和動作閘門
Discord 訊息動作涵蓋傳訊、頻道管理、審核、狀態和中繼資料。 核心範例:- 傳訊:
sendMessage、readMessages、editMessage、deleteMessage、threadReply - 反應:
react、reactions、emojiList - 審核:
timeout、kick、ban - 狀態:
setPresence
event-create 動作接受選填的 image 參數(URL 或本機檔案路徑),用於設定排程活動封面圖片。
動作閘門位於 channels.discord.actions.* 下。
預設閘門行為:
| 動作群組 | 預設 |
|---|---|
| reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | 已啟用 |
| roles | 已停用 |
| moderation | 已停用 |
| presence | 已停用 |
Components v2 UI
OpenClaw 使用 Discord components v2 進行 exec 核准和跨情境標記。Discord 訊息動作也可以接受components 來建立自訂 UI(進階;需要透過 discord 工具建構 component payload),而舊版 embeds 仍可使用,但不建議。
channels.discord.ui.components.accentColor設定 Discord component 容器使用的強調色(十六進位)。各帳號:channels.discord.accounts.<id>.ui.components.accentColor。channels.discord.agentComponents.ttlMs控制已傳送的 Discord component callback 保持註冊的時間長度(預設1800000,最大86400000)。各帳號:channels.discord.accounts.<id>.agentComponents.ttlMs。- 當 components v2 存在時,會忽略
embeds。 - 純 URL 預覽預設會被抑制。當單一傳出連結應展開時,請在訊息動作上設定
suppressEmbeds: false。
語音
Discord 有兩種不同的語音介面:即時語音頻道(連續對話)和語音訊息附件(波形預覽格式)。閘道同時支援兩者。語音頻道
設定檢查清單:- 在 Discord Developer Portal 啟用 Message Content Intent。
- 使用角色/使用者允許清單時,啟用 Server Members Intent。
- 使用
bot和applications.commandsscope 邀請機器人。 - 在目標語音頻道中授予 Connect、Speak、Send Messages 和 Read Message History。
- 啟用原生命令(
commands.native或channels.discord.commands.native)。 - 設定
channels.discord.voice。
/vc join|leave|status 控制工作階段。此命令使用帳號預設代理,並遵循與其他 Discord 命令相同的允許清單和群組政策規則。
- Discord 語音對純文字設定是選用功能;設定
channels.discord.voice.enabled=true(或保留既有的channels.discord.voice區塊)即可啟用/vc指令、語音執行階段,以及GuildVoiceStates閘道意圖。channels.discord.intents.voiceStates可以明確覆寫意圖訂閱;若不設定,則會跟隨實際的語音啟用狀態。 voice.mode控制對話路徑。預設值是agent-proxy:即時語音前端會處理回合時序、中斷與播放,透過openclaw_agent_consult將實質工作委派給路由到的 OpenClaw 代理程式,並將結果視為該說話者輸入的 Discord 文字提示。stt-tts保留較舊的批次 STT 加 TTS 流程。bidi讓即時模型直接對話,同時公開openclaw_agent_consult給 OpenClaw 大腦使用。voice.agentSession控制哪個 OpenClaw 對話會接收語音回合。若不設定,會使用語音頻道自己的工作階段;也可以設定{ mode: "target", target: "channel:<text-channel-id>" },讓語音頻道成為既有 Discord 文字頻道工作階段(例如#maintainers)的麥克風/喇叭延伸。voice.model會覆寫 Discord 語音回應與即時諮詢所使用的 OpenClaw 代理大腦。若不設定,會繼承路由到的代理模型。它與voice.realtime.model是分開的。voice.followUsers讓機器人可與選定使用者一起加入、移動及離開 Discord 語音。請參閱在語音中跟隨使用者。agent-proxy會透過discord-voice路由語音,這會保留說話者與目標工作階段的正常擁有者/工具授權,但會隱藏代理程式的tts工具,因為 Discord 語音負責播放。預設情況下,agent-proxy會對擁有者說話者提供完整的擁有者等效工具存取權(voice.realtime.toolPolicy: "owner"),並強烈偏好在給出實質回答前先諮詢 OpenClaw 代理程式(voice.realtime.consultPolicy: "always")。在該預設的always模式下,即時層不會在諮詢答案前自動說出填充語;它會擷取並轉錄語音,然後說出路由後的 OpenClaw 答案。如果 Discord 仍在播放第一個答案時有多個強制諮詢答案完成,後續的精確語音答案會排入佇列,直到播放閒置後再播放,而不是在句子中途替換語音。- 在
stt-tts模式中,STT 使用tools.media.audio;voice.model不會影響轉錄。 - 在即時模式中,
voice.realtime.provider、voice.realtime.model與voice.realtime.speakerVoice會設定即時音訊工作階段。若要搭配 Codex 大腦使用 OpenAI Realtime 2,請使用voice.realtime.model: "gpt-realtime-2"與voice.model: "openai/gpt-5.5"。 - 即時語音模式預設會在即時提供者指令中包含小型
IDENTITY.md、USER.md與SOUL.md設定檔,讓快速直接回合保有與路由到的 OpenClaw 代理程式相同的身分、使用者根據與角色設定。將voice.realtime.bootstrapContextFiles設為子集合可自訂此行為,或設為[]可停用。僅支援這些設定檔;AGENTS.md仍會留在一般代理程式上下文中。注入的設定檔上下文不會取代openclaw_agent_consult在工作區工作、目前事實、記憶查詢或工具支援動作中的用途。 - 在 OpenAI
agent-proxy即時模式中,設定voice.realtime.requireWakeName: true,即可讓 Discord 即時語音在轉錄以喚醒名稱開頭或結尾之前保持靜默。設定的喚醒名稱必須是一個或兩個詞。如果未設定voice.realtime.wakeNames,OpenClaw 會使用路由到的代理程式name加上OpenClaw,並在需要時退回代理程式 ID 加上OpenClaw。喚醒名稱閘控會停用即時提供者自動回應,將接受的回合透過 OpenClaw 代理程式諮詢路徑路由,並在最終轉錄抵達前,若從部分轉錄辨識到前置喚醒名稱,就給出簡短的語音確認。 - OpenAI 即時提供者接受目前的 Realtime 2 事件名稱,以及與舊版 Codex 相容的輸出音訊與轉錄事件別名,因此相容的提供者快照即使漂移,也不會遺失助理音訊。
voice.realtime.bargeIn控制 Discord 說話者開始事件是否會中斷使用中的即時播放。若未設定,會跟隨即時提供者的輸入音訊中斷設定。voice.realtime.minBargeInAudioEndMs控制 OpenAI 即時插話截斷音訊前,助理播放的最短持續時間。預設值:250。在低回音房間中可設為0以立即中斷;在回音較重的喇叭環境中可提高此值。voice.tts只會針對stt-tts語音播放覆寫messages.tts;即時模式改用voice.realtime.speakerVoice。若要在 Discord 播放中使用 OpenAI 語音,請設定voice.tts.provider: "openai",並在voice.tts.providers.openai.speakerVoice下選擇文字轉語音聲音。cedar在目前的 OpenAI TTS 模型上是很適合的偏陽性聲音選項。- 每個 Discord 頻道的
systemPrompt覆寫會套用到該語音頻道的語音轉錄回合。 - 語音轉錄回合會從 Discord
allowFrom(或dm.allowFrom)推導擁有者狀態,用於需要擁有者權限的指令與頻道動作。代理程式工具可見性會跟隨路由工作階段設定的工具政策。 - 如果
voice.autoJoin對同一個伺服器有多個項目,OpenClaw 會加入該伺服器最後設定的頻道。 voice.allowedChannels是選用的駐留允許清單。若不設定,會允許/vc join加入任何已授權的 Discord 語音頻道。設定後,/vc join、啟動時自動加入,以及機器人語音狀態移動,都會限制在列出的{ guildId, channelId }項目。將其設為空陣列可拒絕所有 Discord 語音加入。如果 Discord 將機器人移到允許清單之外,OpenClaw 會離開該頻道,並在有可用目標時重新加入設定的自動加入目標。voice.daveEncryption與voice.decryptionFailureTolerance會傳遞給@discordjs/voice加入選項;上游預設值是daveEncryption=true與decryptionFailureTolerance=24。- OpenClaw 使用內建的
libopus-wasm編解碼器來接收 Discord 語音與播放即時原始 PCM。它隨附固定版本的 libopus WebAssembly 建置,不需要原生 opus 附加元件。 voice.connectTimeoutMs控制/vc join與自動加入嘗試時,初始等待@discordjs/voiceReady 的時間。預設值:30000。voice.reconnectGraceMs控制 OpenClaw 在銷毀已中斷連線的語音工作階段前,等待其開始重新連線的時間。預設值:15000。- 在
stt-tts模式中,語音播放不會只因為另一位使用者開始說話就停止。為避免回授迴圈,OpenClaw 會在 TTS 播放期間忽略新的語音擷取;請在播放結束後再說話以進入下一回合。即時模式會將說話者開始事件轉送為傳給即時提供者的插話訊號。 - 在即時模式中,喇叭回音進入開放麥克風可能看起來像插話並中斷播放。對於回音較重的 Discord 房間,請設定
voice.realtime.providers.openai.interruptResponseOnInputAudio: false,避免 OpenAI 因輸入音訊而自動中斷。若仍希望 Discord 說話者開始事件中斷使用中的播放,請加入voice.realtime.bargeIn: true。OpenAI 即時橋接會將短於voice.realtime.minBargeInAudioEndMs的播放截斷視為可能的回音/雜訊並略過記錄,而不是清除 Discord 播放。 voice.captureSilenceGraceMs控制 Discord 回報說話者停止後,OpenClaw 在為 STT 最終化該音訊片段前等待的時間。預設值:2000;如果 Discord 將正常停頓切成斷續的部分轉錄,請提高此值。- 當 ElevenLabs 是選定的 TTS 提供者時,Discord 語音播放會使用串流 TTS,並從提供者回應串流開始。沒有串流支援的提供者會退回合成暫存檔路徑。
- OpenClaw 會監看接收解密失敗,並在短時間內重複失敗後,透過離開並重新加入語音頻道自動復原。
- 如果更新後接收記錄反覆顯示
DecryptionFailed(UnencryptedWhenPassthroughDisabled),請收集相依性報告與記錄。內建的@discordjs/voice版本包含來自 discord.js PR #11449 的上游填補修正,該修正已關閉 discord.js issue #11419。 - OpenClaw 最終化已擷取的說話者片段時,預期會出現
The operation was aborted接收事件;它們是詳細診斷,不是警告。 - 詳細 Discord 語音記錄會針對每個接受的說話者片段包含一行有界的 STT 轉錄預覽,因此偵錯時能同時看到使用者端與代理程式回覆端,而不會傾印無界轉錄文字。
- 在
agent-proxy模式中,強制諮詢備援會略過可能不完整的轉錄片段,例如以...結尾的文字,或像「and」這類結尾連接詞,以及像「be right back」或「bye」這類明顯無法採取動作的結語。當這避免了陳舊的佇列答案時,記錄會顯示forced agent consult skipped reason=...。
在語音中跟隨使用者
當你希望 Discord 語音機器人跟隨一位或多位已知 Discord 使用者,而不是在啟動時加入固定頻道或等待/vc join 時,請使用 voice.followUsers。
followUsers接受原始 Discord 使用者 ID 與discord:<id>值。OpenClaw 會在比對語音狀態事件前正規化這兩種形式。- 設定
followUsers時,followUsersEnabled預設為true。將其設為false可保留已儲存清單,但停止自動語音跟隨。 - 當被跟隨的使用者加入允許的語音頻道時,OpenClaw 會加入該頻道。當使用者移動時,OpenClaw 會跟著移動。當目前被跟隨的使用者中斷連線時,OpenClaw 會離開。
- 如果同一個伺服器中有多位被跟隨的使用者,且目前被跟隨的使用者離開,OpenClaw 會先移動到另一位被追蹤跟隨使用者的頻道,再離開該伺服器。如果多位被跟隨的使用者同時移動,最新觀察到的語音狀態事件優先。
allowedChannels仍會套用。位於不允許頻道中的被跟隨使用者會被忽略,而跟隨擁有的工作階段會移動到另一位被跟隨使用者,或離開。- OpenClaw 會在啟動時及以有界間隔調和遺漏的語音狀態事件。調和會取樣已設定的伺服器,並限制每次執行的 REST 查詢數,因此非常大的
followUsers清單可能需要超過一個間隔才能收斂。 - 如果 Discord 或管理員在機器人跟隨使用者時移動它,OpenClaw 會重建語音工作階段,並在目的地允許時保留跟隨所有權。如果機器人被移到
allowedChannels之外,OpenClaw 會離開,並在有設定目標時重新加入。 - DAVE 接收復原可能會在重複解密失敗後離開並重新加入同一個頻道。跟隨擁有的工作階段會在該復原路徑中保留跟隨所有權,因此之後被跟隨使用者中斷連線時仍會離開該頻道。
- 對於個人或操作員設定,若機器人應在你進入語音時自動出現在語音中,請使用
followUsers。 - 對於即使沒有被追蹤使用者在語音中也應存在的固定房間機器人,請使用
autoJoin。 - 對於一次性加入,或自動語音存在會令人意外的房間,請使用
/vc join。
- 語音接收記錄會顯示
discord voice: opus decoder: libopus-wasm。 - 即時播放會先使用相同的內建
libopus-wasm套件,將原始 48 kHz 立體聲 PCM 編碼為 Opus,再將封包交給@discordjs/voice。 - 檔案與提供者串流播放會使用 ffmpeg 轉碼為原始 48 kHz 立體聲 PCM,然後使用
libopus-wasm產生傳送到 Discord 的 Opus 封包串流。
- Discord PCM 擷取內容會轉換成 WAV 暫存檔。
tools.media.audio處理 STT,例如openai/gpt-4o-mini-transcribe。- 轉錄文字會透過 Discord 輸入與路由傳送,而回應 LLM 會以語音輸出政策執行,該政策會隱藏代理的
tts工具並要求回傳文字,因為 Discord 語音負責最終的 TTS 播放。 voice.model設定後,只會覆寫此語音頻道回合的回應 LLM。voice.tts會覆蓋合併到messages.tts;支援串流的提供者會直接送入播放器,否則會在已加入的頻道中播放產生的音訊檔案。
voice.agentSession 區塊時,每個語音頻道都會取得自己的已路由 OpenClaw 工作階段。例如,/vc join channel:234567890123456789 會與該 Discord 語音頻道的工作階段對話。即時模型只是語音前端;實質請求會交給已設定的 OpenClaw 代理。如果即時模型在未呼叫諮詢工具的情況下產生最終轉錄文字,OpenClaw 會強制執行諮詢作為後援,因此預設行為仍會像是在與代理對話。
舊版 STT 加 TTS 範例:
agent-proxy 模式中,機器人會加入已設定的語音頻道,但 OpenClaw 代理回合會使用目標頻道的一般已路由工作階段與代理。即時語音工作階段會把回傳結果說回語音頻道。監督代理仍可依照其工具政策使用一般訊息工具,包括在這是正確動作時傳送另一則 Discord 訊息。
委派的 OpenClaw 執行作用中時,新的 Discord 語音轉錄文字會在開始另一個代理回合前,被視為即時執行控制。像是「status」、「cancel that」、「use the smaller fix」或「when you’re done also check tests」這類片語,會被分類為作用中工作階段的狀態、取消、引導或後續輸入。狀態、取消、已接受的引導與後續結果會說回語音頻道,讓呼叫者知道 OpenClaw 是否已處理請求。
實用的目標形式:
target: "channel:123456789012345678"透過 Discord 文字頻道工作階段路由。target: "123456789012345678"會被視為頻道目標。target: "dm:123456789012345678"或target: "user:123456789012345678"透過該直接訊息工作階段路由。
bargeIn: true 讓 Discord 說話者開始事件與已作用中的說話者音訊,在下一個擷取回合到達 OpenAI 前取消作用中的即時回應。audioEndMs 低於 minBargeInAudioEndMs 的非常早期插話訊號會被視為可能是回聲/雜訊並忽略,因此模型不會在第一個播放影格就中止。
預期的語音日誌:
- 加入時:
discord voice: joining ... voiceSession=... supervisorSession=... agentSessionMode=... voiceModel=... realtimeModel=... - 即時啟動時:
discord voice: realtime bridge starting ... autoRespond=false interruptResponse=false bargeIn=false minBargeInAudioEndMs=... - 說話者音訊:
discord voice: realtime speaker turn opened ...、discord voice: realtime input audio started ... outputAudioMs=... outputActive=...與discord voice: realtime speaker turn closed ... chunks=... discordBytes=... realtimeBytes=... interruptedPlayback=... - 略過過時語音時:
discord voice: realtime forced agent consult skipped reason=incomplete-transcript ...或reason=non-actionable-closing ... - 即時回應完成時:
discord voice: realtime audio playback finishing reason=response.done ... audioMs=... chunks=... - 播放停止/重設時:
discord voice: realtime audio playback stopped reason=... audioMs=... elapsedMs=... chunks=... - 即時諮詢時:
discord voice: realtime consult requested ... voiceSession=... supervisorSession=... question=... - 代理回答時:
discord voice: agent turn answer ... - 佇列精確語音時:
discord voice: realtime exact speech queued ... queued=... outputAudioMs=... outputActive=...,接著是discord voice: realtime exact speech dequeued reason=player-idle ... - 偵測到插話時:
discord voice: realtime barge-in detected source=speaker-start ...或discord voice: realtime barge-in detected source=active-speaker-audio ...,接著是discord voice: realtime barge-in requested reason=... outputAudioMs=... outputActive=... - 即時中斷時:
discord voice: realtime model interrupt requested client:response.cancel reason=barge-in,接著是discord voice: realtime model audio truncated client:conversation.item.truncate reason=barge-in audioEndMs=...或discord voice: realtime model interrupt confirmed server:response.done status=cancelled ... - 忽略回聲/雜訊時:
discord voice: realtime model interrupt ignored client:conversation.item.truncate.skipped reason=barge-in audioEndMs=0 minAudioEndMs=250 - 插話停用時:
discord voice: realtime capture ignored during playback (barge-in disabled) ... - 閒置播放時:
discord voice: realtime barge-in ignored reason=... outputActive=false ... playbackChunks=0
realtime audio playback started表示 Discord 已開始播放助理音訊。橋接器會從此時開始計算助理輸出區塊、Discord PCM 位元組、提供者即時位元組,以及合成音訊時長。realtime speaker turn opened標記 Discord 說話者變為作用中。如果播放已經作用中且bargeIn已啟用,後面可能接著barge-in detected source=speaker-start。realtime input audio started標記該說話者回合收到第一個實際音訊影格。這裡的outputActive=true或非零outputAudioMs表示麥克風在助理播放仍作用中時送出輸入。barge-in detected source=active-speaker-audio表示 OpenClaw 在助理播放作用中時看到即時說話者音訊。這有助於區分真正的中斷與沒有實用音訊的 Discord 說話者開始事件。barge-in requested reason=...表示 OpenClaw 要求即時提供者取消或截斷作用中的回應。它包含outputAudioMs、outputActive與playbackChunks,因此你可以看到中斷前實際播放了多少助理音訊。realtime audio playback stopped reason=...是本機 Discord 播放重設點。原因會說明是誰停止播放:barge-in、player-idle、provider-clear-audio、forced-agent-consult、stream-close或session-close。realtime speaker turn closed摘要擷取到的輸入回合。chunks=0或hasAudio=false表示說話者回合已開啟,但沒有可用音訊到達即時橋接器。interruptedPlayback=true表示該輸入回合與助理輸出重疊,並觸發插話邏輯。
outputAudioMs:即時提供者在該日誌列之前產生的助理音訊時長。audioMs:OpenClaw 在播放停止前計算到的助理音訊時長。elapsedMs:開啟與關閉播放串流或說話者回合之間的實際經過時間。discordBytes:傳送到或接收自 Discord 語音的 48 kHz 立體聲 PCM 位元組。realtimeBytes:傳送到或接收自即時提供者的提供者格式 PCM 位元組。playbackChunks:轉送到 Discord 以供作用中回應使用的助理音訊區塊。sinceLastAudioMs:最後擷取到的說話者音訊影格與說話者回合關閉之間的間隔。
- 伴隨
source=active-speaker-audio、很小的outputAudioMs,且附近是同一位使用者的立即中斷,通常表示喇叭回聲進入麥克風。提高voice.realtime.minBargeInAudioEndMs、降低喇叭音量、使用耳機,或設定voice.realtime.providers.openai.interruptResponseOnInputAudio: false。 source=speaker-start後接speaker turn closed ... hasAudio=false表示 Discord 回報說話者開始,但沒有音訊到達 OpenClaw。這可能是暫時性的 Discord 語音事件、雜訊閘行為,或用戶端短暫觸發麥克風。- 沒有附近插話或
provider-clear-audio的audio playback stopped reason=stream-close,表示本機 Discord 播放串流非預期結束。請檢查前面的提供者與 Discord 播放器日誌。 capture ignored during playback (barge-in disabled)表示 OpenClaw 在助理音訊作用中時刻意丟棄輸入。如果你希望語音中斷播放,請啟用voice.realtime.bargeIn。barge-in ignored ... outputActive=false表示 Discord 或提供者 VAD 回報語音,但 OpenClaw 沒有可中斷的作用中播放。這不應該中斷音訊。
voice.model 使用 LLM 路由驗證、tools.media.audio 使用 STT 驗證、messages.tts/voice.tts 使用 TTS 驗證,而 voice.realtime.providers 或提供者的一般驗證設定使用即時提供者驗證。
語音訊息
Discord 語音訊息會顯示波形預覽,並需要 OGG/Opus 音訊。OpenClaw 會自動產生波形,但需要閘道主機上的ffmpeg 與 ffprobe 來檢查與轉換。
- 提供本機檔案路徑(URL 會被拒絕)。
- 省略文字內容(Discord 會拒絕在同一個承載中同時包含文字 + 語音訊息)。
- 可接受任何音訊格式;OpenClaw 會視需要轉換為 OGG/Opus。
疑難排解
Used disallowed intents or bot sees no guild messages
Used disallowed intents or bot sees no guild messages
- 啟用 Message Content Intent
- 當你依賴使用者/成員解析時,啟用 Server Members Intent
- 變更 intents 後重新啟動閘道
Guild 訊息意外遭封鎖
Guild 訊息意外遭封鎖
- 驗證
groupPolicy - 驗證
channels.discord.guilds下的 guild 允許清單 - 如果存在 guild
channels對應表,則只允許列出的頻道 - 驗證
requireMention行為和提及模式
Require mention 為 false 但仍遭封鎖
Require mention 為 false 但仍遭封鎖
常見原因:
groupPolicy="allowlist",但沒有相符的 guild/頻道允許清單requireMention設定在錯誤位置(必須位於channels.discord.guilds下,或位於頻道項目中)- 傳送者被 guild/頻道
users允許清單封鎖
長時間執行的 Discord 回合或重複回覆
長時間執行的 Discord 回合或重複回覆
典型記錄:
Slow listener detected ...stuck session: sessionKey=agent:...:discord:... state=processing ...
- 單帳號:
channels.discord.eventQueue.listenerTimeout - 多帳號:
channels.discord.accounts.<accountId>.eventQueue.listenerTimeout - 這只控制 Discord 閘道監聽器工作,而不是代理回合生命週期
閘道中繼資料查詢逾時警告
閘道中繼資料查詢逾時警告
OpenClaw 會在連線前擷取 Discord
/gateway/bot 中繼資料。暫時性失敗會退回使用 Discord 的預設閘道 URL,並在記錄中受速率限制。中繼資料逾時調整項目:- 單帳號:
channels.discord.gatewayInfoTimeoutMs - 多帳號:
channels.discord.accounts.<accountId>.gatewayInfoTimeoutMs - 未設定 config 時的 env 後援:
OPENCLAW_DISCORD_GATEWAY_INFO_TIMEOUT_MS - 預設值:
30000(30 秒),最大值:120000
閘道 READY 逾時重新啟動
閘道 READY 逾時重新啟動
OpenClaw 會在啟動期間和執行階段重新連線後等待 Discord 閘道
READY 事件。具有啟動錯開設定的多帳號配置,可能需要比預設值更長的啟動 READY 視窗。READY 逾時調整項目:- 啟動單帳號:
channels.discord.gatewayReadyTimeoutMs - 啟動多帳號:
channels.discord.accounts.<accountId>.gatewayReadyTimeoutMs - 未設定 config 時的啟動 env 後援:
OPENCLAW_DISCORD_READY_TIMEOUT_MS - 啟動預設值:
15000(15 秒),最大值:120000 - 執行階段單帳號:
channels.discord.gatewayRuntimeReadyTimeoutMs - 執行階段多帳號:
channels.discord.accounts.<accountId>.gatewayRuntimeReadyTimeoutMs - 未設定 config 時的執行階段 env 後援:
OPENCLAW_DISCORD_RUNTIME_READY_TIMEOUT_MS - 執行階段預設值:
30000(30 秒),最大值:120000
權限稽核不一致
權限稽核不一致
channels status --probe 權限檢查只適用於數字頻道 ID。如果你使用 slug 鍵,執行階段比對仍可運作,但 probe 無法完整驗證權限。DM 和配對問題
DM 和配對問題
- DM 已停用:
channels.discord.dm.enabled=false - DM policy 已停用:
channels.discord.dmPolicy="disabled"(舊版:channels.discord.dm.policy) - 在
pairing模式中等待配對核准
語音 STT 因 DecryptionFailed(...) 而丟失
語音 STT 因 DecryptionFailed(...) 而丟失
- 保持 OpenClaw 為最新版本(
openclaw update),讓 Discord 語音接收復原邏輯可用 - 確認
channels.discord.voice.daveEncryption=true(預設) - 從
channels.discord.voice.decryptionFailureTolerance=24(上游預設值)開始,只有在需要時才調整 - 觀察記錄中的:
discord voice: DAVE decrypt failures detecteddiscord voice: repeated decrypt failures; attempting rejoin
- 如果自動重新加入後失敗仍持續,收集記錄並與 discord.js #11419 和 discord.js #11449 中的上游 DAVE 接收歷史比較
設定參考
主要參考:設定參考 - Discord。高訊號 Discord 欄位
高訊號 Discord 欄位
- 啟動/驗證:
enabled、token、applicationId、accounts.*、allowBots - policy:
groupPolicy、dmPolicy、allowFrom、dm.*、guilds.*、guilds.*.channels.* - command:
commands.native、commands.useAccessGroups(全域)、configWrites、slashCommand.ephemeral - 事件佇列:
eventQueue.listenerTimeout(監聽器預算,預設120000)、eventQueue.maxQueueSize(預設10000)、eventQueue.maxConcurrency(預設50) - 閘道:
proxy、gatewayInfoTimeoutMs、gatewayReadyTimeoutMs、gatewayRuntimeReadyTimeoutMs - 回覆/歷史:
replyToMode、historyLimit、dmHistoryLimit、dms.*.historyLimit - 傳遞:
textChunkLimit(預設2000)、maxLinesPerMessage(預設17) - 串流:
streaming.mode、streaming.chunkMode、streaming.preview.*、streaming.progress.*、streaming.block.*(舊版扁平streamMode、draftChunk、blockStreaming、blockStreamingCoalesce、chunkMode鍵會由openclaw doctor --fix遷移到streaming.*) - 媒體/重試:
mediaMaxMb(限制對外 Discord 上傳,預設100)、retry - actions:
actions.* - presence:
activity、status、activityType、activityUrl、autoPresence.* - UI:
ui.components.accentColor - features:
threadBindings、頂層bindings[](type: "acp")、pluralkit、execApprovals、intents、agentComponents.enabled、agentComponents.ttlMs、heartbeat、responsePrefix
安全與操作
- 將機器人權杖視為秘密(在受監督環境中建議使用
DISCORD_BOT_TOKEN)。 - 授予最低權限 Discord 權限。
- 如果 command 部署/狀態過期,請重新啟動閘道,並使用
openclaw channels status --probe重新檢查。
相關
配對
將 Discord 使用者配對到閘道。
群組
群組聊天和允許清單行為。
頻道路由
將傳入訊息路由到代理。
安全性
威脅模型與強化。
多代理路由
將 guild 和頻道對應到代理。
斜線命令
原生命令行為。