channels.discord.activities 存在且可解析出用戶端密鑰時,OpenClaw 才會註冊 Activity HTTP 路由、show_widget 代理程式工具及啟動按鈕處理常式。已淘汰的 discord_widget 別名仍會保留一個版本。
先決條件
- 現有的 OpenClaw Discord 機器人
- 可連至 OpenClaw 閘道的公用 HTTPS 主機名稱
- 設定機器人 Discord 應用程式之 Activities 與 OAuth2 的權限
設定
1
透過 HTTPS 公開閘道
啟動通道或反向 Proxy,並在新增 Activities 設定後,確認
https://openclaw.example.com/discord/activity/ 可連至閘道。請將範例主機名稱替換為你自己的主機名稱。2
在 Discord 中啟用 Activities
在 Discord Developer Portal 中開啟現有的機器人應用程式。開啟 Activities、啟用 Activities,然後建立 URL 對應:
- 前綴:
ROOT(/) - 目標:
openclaw.example.com/discord/activity
/discord/activity,結尾不含斜線。3
複製 OAuth2 用戶端密鑰
在 Developer Portal 中開啟 OAuth2。Discord 要求至少設定一個重新導向 URI,因此若應用程式尚未設定,請新增本機預留位置,例如回送位址;Embedded App SDK 會處理 Activity 的返回流程。複製或重設應用程式用戶端密鑰。請將其視為認證資訊:不要貼到聊天、日誌或已提交的設定檔中。
4
設定 OpenClaw
在應提供小工具的 Discord 帳號中新增一個區塊:設定
DISCORD_CLIENT_SECRET 時,可從區塊中省略 clientSecret。區塊本身必須保留,才能選擇啟用此功能。一般 Discord 存取設定仍是分開管理。例如,allowFrom 仍控制誰可以向代理程式傳送私訊;它不會控制誰可以開啟已發佈至頻道的小工具。5
重新啟動並測試
重新啟動閘道。在 Discord 對話中,要求代理程式顯示互動式小工具。代理程式會呼叫
show_widget;按一下已發佈訊息中的 Open widget。安全模型
- 傳回小工具中繼資料前,OAuth 會識別 Discord 使用者。
- Discord 的 Get Activity Instance API 必須確認 OAuth 使用者存在於目前的 Activity 執行個體中。該執行個體的頻道必須與小工具發佈所在的頻道相符。
- Discord 允許進入該頻道的所有人都能開啟其中的小工具。若要縮小對象範圍,請使用 Discord 頻道權限。OpenClaw 命令與私訊允許清單不會授予或移除對已發佈頻道內容的存取權。
- OAuth 工作階段會在 15 分鐘後到期。小工具文件權能會在 60 秒後到期,且僅能使用一次。
- 小工具會在七天後到期,每個 Discord 外掛執行個體最多保留 64 個。
- 小工具 HTML 由你的代理程式撰寫,應視為受信任的內容。請勿嵌入你不希望因小工具程式錯誤而外洩的機密資訊。
- 小工具可在自身的巢狀框架內瀏覽。
sandbox="allow-scripts"iframe 會封鎖頂層導覽、彈出式視窗及同源存取,而其內容安全政策會封鎖網路連線與外部資源。這些控制措施屬於縱深防禦,並非用來防範撰寫該小工具之代理程式的安全邊界。 - 停用 Activities 時,完全不會註冊
/discord/activity。
疑難排解
Activity 顯示「Gateway offline」
- 確認通道正在執行,且路由至閘道實際繫結的連接埠
- 確認 Developer Portal 目標包含
/discord/activity - 變更 Discord 或 OpenClaw 設定後,重新啟動閘道
- 查看閘道日誌中關於缺少 Activities 用戶端密鑰的單行警告
Discord 開啟空白頁面或回報 blocked:csp
- 確認 URL 對應使用
ROOT,且沒有新增第二個/discord/activity區段 - 確認 Shell、
shell.js及 SDK 模組全都透過 Discord Proxy 傳回 - 檢查閘道日誌中位於
/discord/activity/下的要求