Skip to main content

Slack

狀態:透過 Slack 應用程式整合,已可正式用於私訊與頻道。預設模式為 Socket Mode;也支援 HTTP Events API 模式。

配對

Slack 私訊預設使用配對模式。

斜線指令

原生指令行為與指令目錄。

頻道疑難排解

跨頻道診斷與修復流程。

快速設定

1

建立 Slack 應用程式與 Token

在 Slack 應用程式設定中:
  • 啟用 Socket Mode
  • 建立 App Tokenxapp-...),範圍設為 connections:write
  • 安裝應用程式並複製 Bot Tokenxoxb-...
2

設定 OpenClaw

{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}
環境變數備援(僅限預設帳號):
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
3

訂閱應用程式事件

訂閱以下 Bot 事件:
  • app_mention
  • message.channelsmessage.groupsmessage.immessage.mpim
  • reaction_addedreaction_removed
  • member_joined_channelmember_left_channel
  • channel_rename
  • pin_addedpin_removed
同時在 App Home 中啟用 Messages Tab 以支援私訊。
4

啟動 Gateway

openclaw gateway

Token 模型

  • Socket Mode 需要 botToken + appToken
  • HTTP 模式需要 botToken + signingSecret
  • 設定中的 Token 優先於環境變數備援。
  • SLACK_BOT_TOKEN / SLACK_APP_TOKEN 環境變數備援僅適用於預設帳號。
  • userTokenxoxp-...)僅可透過設定指定(無環境變數備援),預設為唯讀行為(userTokenReadOnly: true)。
  • 選填:若希望輸出訊息使用當前 Agent 身份(自訂 username 和圖示),請新增 chat:write.customizeicon_emoji 使用 :emoji_name: 語法。
對於操作/目錄讀取,設定後可優先使用 User Token。對於寫入,Bot Token 仍為優先;只有在 userTokenReadOnly: false 且 Bot Token 不可用時,才允許使用 User Token 寫入。

存取控制與路由

channels.slack.dmPolicy 控制私訊存取(舊版:channels.slack.dm.policy):
  • pairing(預設)
  • allowlist
  • open(需要 channels.slack.allowFrom 包含 "*";舊版:channels.slack.dm.allowFrom
  • disabled
私訊旗標:
  • dm.enabled(預設 true)
  • channels.slack.allowFrom(推薦)
  • dm.allowFrom(舊版)
  • dm.groupEnabled(群組私訊預設 false)
  • dm.groupChannels(選填 MPIM 白名單)
多帳號優先順序:
  • channels.slack.accounts.default.allowFrom 僅適用於 default 帳號。
  • 具名帳號在未設定自己的 allowFrom 時,繼承 channels.slack.allowFrom
  • 具名帳號不繼承 channels.slack.accounts.default.allowFrom
私訊配對使用 openclaw pairing approve slack <code>

指令與斜線行為

  • 原生指令自動模式對 Slack 不啟用commands.native: "auto" 不會啟用 Slack 原生指令)。
  • 透過 channels.slack.commands.native: true(或全域 commands.native: true)啟用原生 Slack 指令處理程式。
  • 啟用原生指令後,請在 Slack 中註冊對應的斜線指令(/<command> 名稱),但有一個例外:
    • 狀態指令請註冊 /agentstatus(Slack 保留了 /status
  • 若未啟用原生指令,可透過 channels.slack.slashCommand 執行單一設定的斜線指令。
  • 原生參數選單現在會自適應渲染策略:
    • 最多 5 個選項:按鈕區塊
    • 6-100 個選項:靜態下拉選單
    • 超過 100 個選項:啟用互動選項處理時使用非同步選項篩選的外部下拉選單
    • 若編碼後的選項值超過 Slack 限制,退回使用按鈕
  • 對於較長的選項載荷,斜線指令參數選單在送出選取值前會顯示確認對話框。
預設斜線指令設定:
  • enabled: false
  • name: "openclaw"
  • sessionPrefix: "slack:slash"
  • ephemeral: true
斜線工作階段使用獨立金鑰:
  • agent:<agentId>:slack:slash:<userId>
並仍針對目標對話工作階段執行指令(CommandTargetSessionKey)。

討論串、工作階段與回覆標籤

  • 私訊路由為 direct;頻道為 channel;MPIM 為 group
  • 預設 session.dmScope=main 時,Slack 私訊收斂至 Agent 主要工作階段。
  • 頻道工作階段:agent:<agentId>:slack:channel:<channelId>
  • 討論串回覆可建立討論串工作階段後綴(:thread:<threadTs>,視情況而定)。
  • channels.slack.thread.historyScope 預設為 threadthread.inheritParent 預設為 false
  • channels.slack.thread.initialHistoryLimit 控制新討論串工作階段開始時擷取的現有討論串訊息數量(預設 20;設為 0 停用)。
回覆串控制:
  • channels.slack.replyToModeoff|first|all(預設 off
  • channels.slack.replyToModeByChatType:按 direct|group|channel 個別設定
  • 直接聊天的舊版備援:channels.slack.dm.replyToMode
支援手動回覆標籤:
  • [[reply_to_current]]
  • [[reply_to:<id>]]
注意:replyToMode="off" 會停用 Slack 中所有回覆串,包括明確的 [[reply_to_*]] 標籤。這與 Telegram 不同,Telegram 在 "off" 模式下仍支援明確標籤。此差異反映了平台討論串模型的不同:Slack 討論串會將訊息隱藏在頻道外,而 Telegram 回覆仍在主聊天流中可見。

媒體、區塊與傳送

Slack 檔案附件從 Slack 托管的私有 URL(Token 驗證請求流程)下載,並在擷取成功且大小符合限制時寫入媒體儲存。執行時收入大小上限預設為 20MB,除非由 channels.slack.mediaMaxMb 覆寫。
  • 文字區塊使用 channels.slack.textChunkLimit(預設 4000)
  • channels.slack.chunkMode="newline" 啟用段落優先分割
  • 檔案傳送使用 Slack 上傳 API,可包含討論串回覆(thread_ts
  • 輸出媒體上限遵循 channels.slack.mediaMaxMb(若已設定);否則頻道傳送使用媒體管道的 MIME 類型預設值
推薦的明確目標:
  • user:<id> 用於私訊
  • channel:<id> 用於頻道
傳送至用戶目標時,Slack 私訊透過 Slack 對話 API 開啟。

操作與閘門

Slack 操作由 channels.slack.actions.* 控制。 當前 Slack 工具中可用的操作群組:
群組預設
messages啟用
reactions啟用
pins啟用
memberInfo啟用
emojiList啟用

事件與操作行為

  • 訊息編輯/刪除/討論串廣播映射為系統事件。
  • 反應新增/移除事件映射為系統事件。
  • 成員加入/離開、頻道建立/重新命名和釘選新增/移除事件映射為系統事件。
  • 助理討論串狀態更新(討論串中的「正在輸入…」指示器)使用 assistant.threads.setStatus,需要 Bot 範圍 assistant:write
  • 啟用 configWrites 時,channel_id_changed 可遷移頻道設定金鑰。
  • 頻道主題/用途中繼資料視為不可信任的情境,可注入路由情境。
  • 區塊操作和 Modal 互動發出帶有豐富載荷欄位的結構化 Slack interaction: ... 系統事件:
    • 區塊操作:選取值、標籤、選取器值和 workflow_* 中繼資料
    • Modal view_submissionview_closed 事件,附帶路由頻道中繼資料和表單輸入

確認反應

ackReaction 在 OpenClaw 處理收入訊息時傳送確認 emoji。 解析順序:
  • channels.slack.accounts.<accountId>.ackReaction
  • channels.slack.ackReaction
  • messages.ackReaction
  • Agent 身份 emoji 備援(agents.list[].identity.emoji,否則使用 ”👀”)
注意:
  • Slack 使用 shortcode(例如 "eyes")。
  • 使用 "" 停用 Slack 帳號或全域的反應。

輸入反應備援

typingReaction 在 OpenClaw 處理回覆時,為收入的 Slack 訊息暫時新增一個反應,回覆完成後移除。這在 Slack 原生助理輸入狀態不可用時(尤其在私訊中)很有用。 解析順序:
  • channels.slack.accounts.<accountId>.typingReaction
  • channels.slack.typingReaction
注意:
  • Slack 使用 shortcode(例如 "hourglass_flowing_sand")。
  • 反應採用盡力而為的方式,回覆或失敗路徑完成後自動嘗試清除。

Manifest 與範圍清單

{
  "display_information": {
    "name": "OpenClaw",
    "description": "Slack connector for OpenClaw"
  },
  "features": {
    "bot_user": {
      "display_name": "OpenClaw",
      "always_online": false
    },
    "app_home": {
      "messages_tab_enabled": true,
      "messages_tab_read_only_enabled": false
    },
    "slash_commands": [
      {
        "command": "/openclaw",
        "description": "Send a message to OpenClaw",
        "should_escape": false
      }
    ]
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "chat:write",
        "channels:history",
        "channels:read",
        "groups:history",
        "im:history",
        "im:read",
        "im:write",
        "mpim:history",
        "mpim:read",
        "mpim:write",
        "users:read",
        "app_mentions:read",
        "assistant:write",
        "reactions:read",
        "reactions:write",
        "pins:read",
        "pins:write",
        "emoji:read",
        "commands",
        "files:read",
        "files:write"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": true,
    "event_subscriptions": {
      "bot_events": [
        "app_mention",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "reaction_added",
        "reaction_removed",
        "member_joined_channel",
        "member_left_channel",
        "channel_rename",
        "pin_added",
        "pin_removed"
      ]
    }
  }
}
若你設定了 channels.slack.userToken,典型的讀取範圍為:
  • channels:historygroups:historyim:historympim:history
  • channels:readgroups:readim:readmpim:read
  • users:read
  • reactions:read
  • pins:read
  • emoji:read
  • search:read(若依賴 Slack 搜尋讀取)

疑難排解

依序確認:
  • groupPolicy
  • 頻道白名單(channels.slack.channels
  • requireMention
  • 每頻道 users 白名單
實用指令:
openclaw channels status --probe
openclaw logs --follow
openclaw doctor
確認:
  • channels.slack.dm.enabled
  • channels.slack.dmPolicy(或舊版 channels.slack.dm.policy
  • 配對核准 / 白名單項目
openclaw pairing list slack
確認 Slack 應用程式設定中的 Bot + App Token 及 Socket Mode 是否已啟用。
確認:
  • Signing Secret
  • Webhook 路徑
  • Slack Request URL(事件、互動性、斜線指令)
  • 每個 HTTP 帳號的唯一 webhookPath
確認你的設定意圖:
  • 原生指令模式(channels.slack.commands.native: true),且在 Slack 中已註冊對應的斜線指令
  • 或單一斜線指令模式(channels.slack.slashCommand.enabled: true
同時確認 commands.useAccessGroups 和頻道/用戶白名單。

文字串流

OpenClaw 支援透過 Agents and AI Apps API 的 Slack 原生文字串流。 channels.slack.streaming 控制即時預覽行為:
  • off:停用即時預覽串流。
  • partial(預設):以最新的部分輸出替換預覽文字。
  • block:附加區塊化的預覽更新。
  • progress:產生過程中顯示進度狀態文字,然後傳送最終文字。
channels.slack.nativeStreaming 控制 streamingpartial 時的 Slack 原生串流 API(chat.startStream / chat.appendStream / chat.stopStream)(預設:true)。 停用 Slack 原生串流(保留草稿預覽行為):
channels:
  slack:
    streaming: partial
    nativeStreaming: false
舊版金鑰:
  • channels.slack.streamModereplace | status_final | append)自動遷移至 channels.slack.streaming
  • 布林值 channels.slack.streaming 自動遷移至 channels.slack.nativeStreaming

需求

  1. 在 Slack 應用程式設定中啟用 Agents and AI Apps
  2. 確保應用程式擁有 assistant:write 範圍。
  3. 該訊息必須有可用的回覆討論串。討論串選擇仍遵循 replyToMode

行為

  • 第一個文字區塊啟動串流(chat.startStream)。
  • 後續文字區塊附加至相同串流(chat.appendStream)。
  • 回覆結束時完成串流(chat.stopStream)。
  • 媒體和非文字載荷退回至一般傳送方式。
  • 若串流在回覆中途失敗,OpenClaw 對剩餘載荷退回至一般傳送方式。

設定參考指引

主要參考:
  • 設定參考 - Slack Slack 重要欄位:
    • 模式/驗證:modebotTokenappTokensigningSecretwebhookPathaccounts.*
    • 私訊存取:dm.enableddmPolicyallowFrom(舊版:dm.policydm.allowFrom)、dm.groupEnableddm.groupChannels
    • 相容切換:dangerouslyAllowNameMatching(緊急用;除非必要否則保持關閉)
    • 頻道存取:groupPolicychannels.*channels.*.userschannels.*.requireMention
    • 討論串/記錄:replyToModereplyToModeByChatTypethread.*historyLimitdmHistoryLimitdms.*.historyLimit
    • 傳送:textChunkLimitchunkModemediaMaxMbstreamingnativeStreaming
    • 操作/功能:configWritescommands.nativeslashCommand.*actions.*userTokenuserTokenReadOnly

相關文件