OpenClaw
渠道整合12 分鐘閱讀

OpenClaw Discord 整合:機器人設定與 Gateway Intents 完整解析

建立 Discord 機器人並連接 OpenClaw 的完整指南,涵蓋 Gateway Intents 設定、私訊安全性原則配置,以及伺服器頻道存取控制。

O

OpenClaw Guides

Tutorial Authors

概述

Discord 整合讓您可以透過 Discord 機器人與 OpenClaw 進行對話,同時支援私訊(DM)和伺服器文字頻道通訊。本指南涵蓋建立機器人、理解 Gateway Intents、設定私訊安全性原則,以及配置伺服器頻道存取控制——所有內容皆以 OpenClaw 官方文件 為基礎。

前提條件

  • 已安裝並執行 OpenClaw
  • 一個 Discord 帳戶
  • 一個您有管理員權限的 Discord 伺服器(用於測試)

運作方式

在開始之前,先了解 OpenClaw 如何路由 Discord 訊息會很有幫助:

  • 私訊對話會合併為共享工作階段(agent:main:main),預設採用配對驗證機制。
  • 伺服器頻道對話依頻道隔離,使用 agent:<agentId>:discord:channel:<channelId> 格式。
  • 群組私訊預設會被忽略,但可透過 channels.discord.dm.groupEnabled 啟用。

當有效的 token 存在且 enabled 不為 false 時,閘道會自動啟動。

步驟 1:建立 Discord 應用程式

前往 Discord Developer Portal

  1. 造訪 Discord Developer Portal
  2. 點擊 New Application
  3. 輸入名稱(例如 "OpenClaw Assistant")
  4. 點擊 Create

設定機器人

  1. 在應用程式中,進入 Bot 分頁
  2. 點擊 Add BotYes, do it!
  3. Token 下,點擊 Copy 複製機器人權杖

重要: 請將機器人權杖視為密碼妥善保管,切勿公開分享。若權杖外洩,請立即重新產生。

步驟 2:啟用特權 Gateway Intents

Gateway Intents 控制機器人從 Discord 接收哪些事件。OpenClaw 需要特定的特權 intents 才能正常運作。

必要的 Intents

| Intent | 用途 | 是否必要 | |--------|------|----------| | Message Content Intent | 讀取伺服器頻道中的訊息文字 | 必要 — 缺少此 intent 會導致「Used disallowed intents」錯誤,或機器人可連線但無法回應 | | Server Members Intent | 成員查詢與白名單比對 | 建議啟用 — 使用白名單存取控制時需要 |

在 Developer Portal 中啟用 Intents

  1. 進入 Developer Portal 中的 Bot 分頁
  2. 捲動到 Privileged Gateway Intents
  3. 啟用 MESSAGE CONTENT INTENT(必要)
  4. 啟用 SERVER MEMBERS INTENT(建議)
  5. 點擊 Save Changes

注意: 加入超過 100 個伺服器的機器人需要通過 Discord 驗證才能使用特權 intents。

步驟 3:產生機器人邀請 URL

設定 OAuth2

  1. 進入 OAuth2URL Generator

  2. 選擇範圍:

    • bot
    • applications.commands(原生斜線命令所需)
  3. 選擇機器人權限:

    • View Channels
    • Send Messages
    • Read Message History
    • Embed Links
    • Attach Files
    • Add Reactions(選用但建議啟用)
    • Use External Emojis(選用)

警告: 除非正在進行除錯,否則請避免授予 Administrator 權限。僅授予必要的權限即可。

  1. 複製產生的 URL

邀請機器人

  1. 在瀏覽器中開啟該 URL
  2. 選擇您的測試伺服器
  3. 點擊 Authorize

取得數字 ID

在 Discord 中啟用開發者模式(使用者設定 → 應用程式設定 → 進階 → 開發者模式),即可透過右鍵選單複製伺服器、頻道和使用者 ID——設定過程中會需要用到這些 ID。

步驟 4:設定 OpenClaw

選項 A:環境變數

將 token 設定為環境變數:

bash
export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN"

選項 B:設定檔

在 OpenClaw 設定檔中直接填入 token:

json5
{
  channels: {
    discord: {
      enabled: true,
      token: "YOUR_BOT_TOKEN"
    }
  }
}

注意: 當環境變數和設定檔中的 token 同時存在時,以設定檔為優先。

選項 C:多帳號支援

若需要執行多個機器人帳號:

json5
{
  channels: {
    discord: {
      accounts: [
        { token: "BOT_TOKEN_1", name: "assistant-1" },
        { token: "BOT_TOKEN_2", name: "assistant-2" }
      ]
    }
  }
}

步驟 5:啟動與測試

啟動或重新啟動 OpenClaw 閘道:

bash
openclaw gateway restart

檢查頻道狀態:

bash
openclaw channels status --probe

如果出現異常,可執行診斷:

bash
openclaw doctor

首次私訊聯繫時,機器人預設使用配對機制——傳送者會收到一組限時驗證碼(1 小時後過期),需經核准後才能開始對話。

私訊安全性原則

OpenClaw 提供三種私訊存取控制原則:

配對(預設)

未知的傳送者會收到一組限時配對碼,1 小時後過期。該配對碼必須經核准後對話才能進行。

json5
{
  channels: {
    discord: {
      dm: {
        enabled: true,
        policy: "pairing"
      }
    }
  }
}

白名單

僅允許已設定的使用者 ID 或使用者名稱發送私訊:

json5
{
  channels: {
    discord: {
      dm: {
        enabled: true,
        policy: "allowlist",
        allowFrom: ["123456789012345678", "username#1234"]
      }
    }
  }
}

開放

任何人都可以發送私訊(請謹慎使用):

json5
{
  channels: {
    discord: {
      dm: {
        enabled: true,
        policy: "open",
        allowFrom: ["*"]
      }
    }
  }
}

伺服器頻道設定

基本伺服器存取控制

限制機器人只能在特定伺服器和頻道運作,並設定提及需求:

json5
{
  channels: {
    discord: {
      guilds: {
        "GUILD_ID": {
          requireMention: true,
          channels: {
            "CHANNEL_ID": {
              enabled: true
            }
          }
        }
      }
    }
  }
}

重要: requireMention 必須設定在伺服器或頻道層級,而最上層的 Discord 設定中。

個別頻道設定

您可以針對每個頻道設定白名單和技能限制:

json5
{
  channels: {
    discord: {
      guilds: {
        "GUILD_ID": {
          channels: {
            "CHANNEL_ID_1": {
              enabled: true,
              requireMention: true
            },
            "CHANNEL_ID_2": {
              enabled: true,
              requireMention: false
            }
          }
        }
      }
    }
  }
}

設定參數

訊息設定

| 參數 | 預設值 | 說明 | |------|--------|------| | textChunkLimit | 2000 | 每個外送訊息片段的最大字元數 | | chunkMode | — | 設定為在空白行(段落邊界)處分割,再套用長度限制 | | maxLinesPerMessage | 17 | 每則訊息的最大行數 | | mediaMaxMb | 8 | 媒體檔案大小上限(MB) |

上下文歷史記錄

json5
{
  channels: {
    discord: {
      historyLimit: 20  // 作為上下文納入的近期訊息數量(預設:20,設為 0 則停用)
    }
  }
}

回覆串接

原生回覆串接預設為關閉。啟用方式如下:

json5
{
  channels: {
    discord: {
      replyToMode: "on"  // 啟用原生回覆串接
    }
  }
}

在代理回應中使用回覆標籤來控制串接行為:

  • [[reply_to_current]] — 回覆目前正在處理的訊息
  • [[reply_to:<message_id>]] — 回覆特定訊息

表情反應通知

依伺服器設定表情反應事件通知:

json5
{
  channels: {
    discord: {
      guilds: {
        "GUILD_ID": {
          reactionNotifications: "own"  // 選項:"off"、"own"、"all"、"allowlist"
        }
      }
    }
  }
}

工具動作

代理可以呼叫 discord 工具在 Discord 中執行操作。大部分動作預設為啟用,但 rolesmoderation 預設為停用。

可用動作

| 類別 | 動作 | |------|------| | 表情反應 | react, sticker, poll | | 訊息 | readMessages, sendMessage, editMessage, deleteMessage, searchMessages | | 討論串 | threadCreate, threadList, threadReply | | 釘選 | pinMessage, unpinMessage, listPins | | 頻道 | channelInfo, channelList | | 成員 | memberInfo, roleInfo, permissions | | 身分組 | roleAdd, roleRemove(預設停用) | | 管理 | timeout, kick, ban(預設停用) | | 其他 | emojiList, voiceStatus, eventList, eventCreate, setPresence |

進階功能

PluralKit 支援

啟用後,OpenClaw 會將代理訊息解析至其底層系統成員,將傳送者顯示為「Member (PK:System)」以防止意外的 Discord 提及。

執行核准按鈕 UI

在私訊對話中,OpenClaw 可以顯示執行核准按鈕,供使用者互動確認工具動作。

重試設定

外送 API 呼叫會在遇到速率限制時自動重試,使用 Discord 的 retry_after 標頭搭配指數退避策略。可透過 channels.discord.retry 參數來設定重試行為。

疑難排解

機器人在線但不回應

  1. 檢查 Message Content Intent: 缺少此 intent 時,機器人可以連線但無法讀取訊息文字。前往 Developer Portal → Bot → Privileged Gateway Intents,確認 MESSAGE CONTENT INTENT 已啟用。

  2. 確認頻道權限: 確保機器人在目標頻道中擁有 View ChannelsSend Messages 權限。

  3. 檢查提及需求: 如果該伺服器或頻道啟用了 requireMention,您必須 @提及機器人。

  4. 檢查伺服器/頻道白名單: 確認該頻道未被白名單設定所封鎖。

「Used Disallowed Intents」錯誤

這表示必要的 intents 未在 Developer Portal 中啟用:

  1. 前往 Developer Portal → Bot → Privileged Gateway Intents
  2. 啟用 MESSAGE CONTENT INTENT
  3. 儲存並重新啟動 OpenClaw 閘道

私訊無法運作

  1. 確認 dm.enabled 未被設為 false
  2. 檢查私訊原則——若設為「allowlist」,請確認使用者 ID 已被納入
  3. 若使用「pairing」原則,請檢查配對碼是否已過期(限時 1 小時)

診斷命令

使用內建診斷工具來找出問題:

bash
# 執行完整診斷
openclaw doctor

# 檢查頻道狀態並探測連線
openclaw channels status --probe

最佳實踐

  1. 將機器人權杖視為密碼 — 在受管理的主機上使用環境變數,切勿將權杖提交至版本控制。
  2. 僅授予必要的權限 — 除非正在除錯,否則避免使用 Administrator。
  3. 使用配對或白名單私訊原則 — 「open」原則僅適用於已設定適當速率限制的公開機器人。
  4. 啟用 Server Members Intent,若使用白名單存取控制可獲得更可靠的成員比對。
  5. 在繁忙的伺服器中使用 requireMention,避免機器人對每則訊息都做出回應。
  6. 如果閘道卡住,使用 --force 重新啟動: openclaw gateway restart --force

後續步驟