Chuyển đến nội dung chính

Slack

Trạng thái: sẵn sàng cho sản xuất với DMs + kênh thông qua tích hợp ứng dụng Slack. Chế độ mặc định là Socket Mode; cũng hỗ trợ chế độ HTTP Events API.

Ghép nối

DMs của Slack mặc định ở chế độ ghép nối.

Lệnh gạch chéo

Hành vi lệnh gốc và danh mục lệnh.

Khắc phục sự cố kênh

Chẩn đoán và sửa chữa đa kênh.

Thiết lập nhanh

1

Tạo ứng dụng Slack và token

Trong cài đặt ứng dụng Slack:
  • bật Socket Mode
  • tạo App Token (xapp-...) với connections:write
  • cài đặt ứng dụng và sao chép Bot Token (xoxb-...)
2

Cấu hình OpenClaw

{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}
Biến môi trường dự phòng (chỉ tài khoản mặc định):
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
3

Đăng ký sự kiện ứng dụng

Đăng ký sự kiện bot cho:
  • 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
Cũng bật Tab Messages của App Home cho DMs.
4

Khởi động gateway

openclaw gateway

Mô hình token

  • botToken + appToken là bắt buộc cho Socket Mode.
  • Chế độ HTTP yêu cầu botToken + signingSecret.
  • Token cấu hình ghi đè biến môi trường dự phòng.
  • Biến môi trường SLACK_BOT_TOKEN / SLACK_APP_TOKEN chỉ áp dụng cho tài khoản mặc định.
  • userToken (xoxp-...) chỉ có trong cấu hình (không có dự phòng môi trường) và mặc định là chỉ đọc (userTokenReadOnly: true).
  • Tùy chọn: thêm chat:write.customize nếu muốn tin nhắn gửi đi sử dụng danh tính tác nhân hiện tại (tùy chỉnh username và icon). icon_emoji sử dụng cú pháp :emoji_name:.
Đối với các hành động/đọc thư mục, token người dùng có thể được ưu tiên khi được cấu hình. Đối với ghi, token bot vẫn được ưu tiên; ghi token người dùng chỉ được phép khi userTokenReadOnly: false và token bot không khả dụng.

Kiểm soát truy cập và định tuyến

channels.slack.dmPolicy kiểm soát truy cập DM (cũ: channels.slack.dm.policy):
  • pairing (mặc định)
  • allowlist
  • open (yêu cầu channels.slack.allowFrom bao gồm "*"; cũ: channels.slack.dm.allowFrom)
  • disabled
Cờ DM:
  • dm.enabled (mặc định true)
  • channels.slack.allowFrom (ưu tiên)
  • dm.allowFrom (cũ)
  • dm.groupEnabled (DM nhóm mặc định false)
  • dm.groupChannels (danh sách cho phép MPIM tùy chọn)
Ưu tiên đa tài khoản:
  • channels.slack.accounts.default.allowFrom chỉ áp dụng cho tài khoản default.
  • Các tài khoản được đặt tên kế thừa channels.slack.allowFrom khi allowFrom của riêng chúng chưa được đặt.
  • Các tài khoản được đặt tên không kế thừa channels.slack.accounts.default.allowFrom.
Ghép nối trong DMs sử dụng openclaw pairing approve slack <code>.

Lệnh và hành vi gạch chéo

  • Chế độ tự động lệnh gốc là tắt cho Slack (commands.native: "auto" không kích hoạt lệnh gốc của Slack).
  • Kích hoạt trình xử lý lệnh gốc của Slack với channels.slack.commands.native: true (hoặc toàn cầu commands.native: true).
  • Khi lệnh gốc được kích hoạt, đăng ký các lệnh gạch chéo tương ứng trong Slack (/<command> tên), với một ngoại lệ:
    • đăng ký /agentstatus cho lệnh trạng thái (Slack dành riêng /status)
  • Nếu lệnh gốc không được kích hoạt, bạn có thể chạy một lệnh gạch chéo được cấu hình duy nhất thông qua channels.slack.slashCommand.
  • Menu đối số gốc hiện thích ứng với chiến lược hiển thị của chúng:
    • tối đa 5 tùy chọn: khối nút
    • 6-100 tùy chọn: menu chọn tĩnh
    • hơn 100 tùy chọn: chọn bên ngoài với lọc tùy chọn không đồng bộ khi các trình xử lý tùy chọn tương tác có sẵn
    • nếu các giá trị tùy chọn được mã hóa vượt quá giới hạn của Slack, luồng sẽ quay lại nút
  • Đối với tải trọng tùy chọn dài, menu đối số lệnh gạch chéo sử dụng hộp thoại xác nhận trước khi gửi giá trị đã chọn.

Phản hồi tương tác

Slack có thể hiển thị các điều khiển phản hồi tương tác do tác nhân tạo ra, nhưng tính năng này bị tắt theo mặc định. Kích hoạt toàn cầu:
{
  channels: {
    slack: {
      capabilities: {
        interactiveReplies: true,
      },
    },
  },
}
Hoặc kích hoạt cho một tài khoản Slack duy nhất:
{
  channels: {
    slack: {
      accounts: {
        ops: {
          capabilities: {
            interactiveReplies: true,
          },
        },
      },
    },
  },
}
Khi được kích hoạt, các tác nhân có thể phát ra các chỉ thị phản hồi chỉ dành cho Slack:
  • [[slack_buttons: Approve:approve, Reject:reject]]
  • [[slack_select: Choose a target | Canary:canary, Production:production]]
Các chỉ thị này được biên dịch thành Slack Block Kit và định tuyến các lần nhấp hoặc lựa chọn quay lại thông qua đường dẫn sự kiện tương tác Slack hiện có. Lưu ý:
  • Đây là giao diện người dùng cụ thể của Slack. Các kênh khác không dịch các chỉ thị Slack Block Kit thành hệ thống nút của riêng họ.
  • Các giá trị phản hồi tương tác là các token mờ do OpenClaw tạo ra, không phải là các giá trị do tác nhân tạo ra.
  • Nếu các khối tương tác được tạo ra vượt quá giới hạn của Slack Block Kit, OpenClaw sẽ quay lại phản hồi văn bản gốc thay vì gửi tải trọng khối không hợp lệ.
Cài đặt lệnh gạch chéo mặc định:
  • enabled: false
  • name: "openclaw"
  • sessionPrefix: "slack:slash"
  • ephemeral: true
Các phiên gạch chéo sử dụng khóa cách ly:
  • agent:<agentId>:slack:slash:<userId>
và vẫn định tuyến thực thi lệnh chống lại phiên hội thoại mục tiêu (CommandTargetSessionKey).

Luồng, phiên và thẻ phản hồi

  • DMs định tuyến là direct; kênh là channel; MPIMs là group.
  • Với session.dmScope=main mặc định, DMs của Slack sụp đổ thành phiên chính của tác nhân.
  • Phiên kênh: agent:<agentId>:slack:channel:<channelId>.
  • Phản hồi luồng có thể tạo hậu tố phiên luồng (:thread:<threadTs>) khi áp dụng.
  • channels.slack.thread.historyScope mặc định là thread; thread.inheritParent mặc định là false.
  • channels.slack.thread.initialHistoryLimit kiểm soát số lượng tin nhắn luồng hiện có được lấy khi một phiên luồng mới bắt đầu (mặc định 20; đặt 0 để tắt).
Kiểm soát phản hồi luồng:
  • channels.slack.replyToMode: off|first|all (mặc định off)
  • channels.slack.replyToModeByChatType: theo direct|group|channel
  • dự phòng cũ cho các cuộc trò chuyện trực tiếp: channels.slack.dm.replyToMode
Thẻ phản hồi thủ công được hỗ trợ:
  • [[reply_to_current]]
  • [[reply_to:<id>]]
Lưu ý: replyToMode="off" vô hiệu hóa tất cả luồng phản hồi trong Slack, bao gồm cả thẻ [[reply_to_*]] rõ ràng. Điều này khác với Telegram, nơi các thẻ rõ ràng vẫn được tôn trọng trong chế độ "off". Sự khác biệt này phản ánh các mô hình luồng của nền tảng: các luồng của Slack ẩn tin nhắn khỏi kênh, trong khi các phản hồi của Telegram vẫn hiển thị trong luồng trò chuyện chính.

Phương tiện, phân đoạn và phân phối

Các tệp đính kèm của Slack được tải xuống từ các URL riêng tư được lưu trữ trên Slack (luồng yêu cầu xác thực token) và được ghi vào kho phương tiện khi tải thành công và giới hạn kích thước cho phép.Giới hạn kích thước đầu vào runtime mặc định là 20MB trừ khi được ghi đè bởi channels.slack.mediaMaxMb.
  • các đoạn văn bản sử dụng channels.slack.textChunkLimit (mặc định 4000)
  • channels.slack.chunkMode="newline" kích hoạt chia đoạn theo đoạn văn trước
  • gửi tệp sử dụng API tải lên của Slack và có thể bao gồm phản hồi luồng (thread_ts)
  • giới hạn phương tiện gửi đi tuân theo channels.slack.mediaMaxMb khi được cấu hình; nếu không, gửi kênh sử dụng mặc định loại MIME từ đường dẫn phương tiện
Mục tiêu rõ ràng ưu tiên:
  • user:<id> cho DMs
  • channel:<id> cho kênh
DMs của Slack được mở thông qua API hội thoại của Slack khi gửi đến các mục tiêu người dùng.

Hành động và cổng

Hành động của Slack được kiểm soát bởi channels.slack.actions.*. Các nhóm hành động có sẵn trong công cụ Slack hiện tại:
NhómMặc định
messagesenabled
reactionsenabled
pinsenabled
memberInfoenabled
emojiListenabled

Sự kiện và hành vi hoạt động

  • Chỉnh sửa/xóa tin nhắn/phát sóng luồng được ánh xạ thành sự kiện hệ thống.
  • Sự kiện thêm/xóa phản ứng được ánh xạ thành sự kiện hệ thống.
  • Thành viên tham gia/rời đi, kênh được tạo/đổi tên, và sự kiện thêm/xóa ghim được ánh xạ thành sự kiện hệ thống.
  • Cập nhật trạng thái luồng trợ lý (cho các chỉ báo “đang gõ…” trong luồng) sử dụng assistant.threads.setStatus và yêu cầu phạm vi bot assistant:write.
  • channel_id_changed có thể di chuyển các khóa cấu hình kênh khi configWrites được bật.
  • Siêu dữ liệu chủ đề/mục đích của kênh được coi là ngữ cảnh không đáng tin cậy và có thể được tiêm vào ngữ cảnh định tuyến.
  • Hành động khối và tương tác modal phát ra sự kiện hệ thống có cấu trúc Slack interaction: ... với các trường tải trọng phong phú:
    • hành động khối: các giá trị đã chọn, nhãn, giá trị chọn, và siêu dữ liệu workflow_*
    • sự kiện view_submissionview_closed của modal với siêu dữ liệu kênh được định tuyến và đầu vào biểu mẫu

Phản ứng xác nhận

ackReaction gửi một emoji xác nhận trong khi OpenClaw đang xử lý một tin nhắn đầu vào. Thứ tự giải quyết:
  • channels.slack.accounts.<accountId>.ackReaction
  • channels.slack.ackReaction
  • messages.ackReaction
  • dự phòng emoji danh tính tác nhân (agents.list[].identity.emoji, nếu không ”👀”)
Lưu ý:
  • Slack mong đợi mã ngắn (ví dụ "eyes").
  • Sử dụng "" để vô hiệu hóa phản ứng cho tài khoản Slack hoặc toàn cầu.

Phản ứng gõ dự phòng

typingReaction thêm một phản ứng tạm thời vào tin nhắn Slack đầu vào trong khi OpenClaw đang xử lý một phản hồi, sau đó xóa nó khi quá trình chạy kết thúc. Đây là một dự phòng hữu ích khi gõ trợ lý gốc của Slack không khả dụng, đặc biệt trong DMs. Thứ tự giải quyết:
  • channels.slack.accounts.<accountId>.typingReaction
  • channels.slack.typingReaction
Lưu ý:
  • Slack mong đợi mã ngắn (ví dụ "hourglass_flowing_sand").
  • Phản ứng là nỗ lực tốt nhất và việc dọn dẹp được thực hiện tự động sau khi phản hồi hoặc đường dẫn thất bại hoàn tất.

Danh sách kiểm tra manifest và phạm vi

{
  "display_information": {
    "name": "OpenClaw",
    "description": "Kết nối Slack cho 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": "Gửi tin nhắn đến 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"
      ]
    }
  }
}
Nếu bạn cấu hình channels.slack.userToken, các phạm vi đọc điển hình là:
  • channels:history, groups:history, im:history, mpim:history
  • channels:read, groups:read, im:read, mpim:read
  • users:read
  • reactions:read
  • pins:read
  • emoji:read
  • search:read (nếu bạn phụ thuộc vào đọc tìm kiếm của Slack)

Khắc phục sự cố

Kiểm tra, theo thứ tự:
  • groupPolicy
  • danh sách cho phép kênh (channels.slack.channels)
  • requireMention
  • danh sách cho phép users theo kênh
Các lệnh hữu ích:
openclaw channels status --probe
openclaw logs --follow
openclaw doctor
Kiểm tra:
  • channels.slack.dm.enabled
  • channels.slack.dmPolicy (hoặc cũ channels.slack.dm.policy)
  • phê duyệt ghép nối / mục danh sách cho phép
openclaw pairing list slack
Xác thực bot + token ứng dụng và bật Socket Mode trong cài đặt ứng dụng Slack.
Xác thực:
  • ký bí mật
  • đường dẫn webhook
  • URL Yêu cầu của Slack (Sự kiện + Tương tác + Lệnh gạch chéo)
  • webhookPath duy nhất cho mỗi tài khoản HTTP
Xác minh xem bạn có ý định:
  • chế độ lệnh gốc (channels.slack.commands.native: true) với các lệnh gạch chéo tương ứng đã đăng ký trong Slack
  • hoặc chế độ lệnh gạch chéo đơn (channels.slack.slashCommand.enabled: true)
Cũng kiểm tra commands.useAccessGroups và danh sách cho phép kênh/người dùng.

Truyền văn bản

OpenClaw hỗ trợ truyền văn bản gốc của Slack thông qua API Agents và AI Apps. channels.slack.streaming kiểm soát hành vi xem trước trực tiếp:
  • off: tắt truyền xem trước trực tiếp.
  • partial (mặc định): thay thế văn bản xem trước bằng đầu ra từng phần mới nhất.
  • block: thêm các cập nhật xem trước phân đoạn.
  • progress: hiển thị văn bản trạng thái tiến độ trong khi tạo, sau đó gửi văn bản cuối cùng.
channels.slack.nativeStreaming kiểm soát API truyền gốc của Slack (chat.startStream / chat.appendStream / chat.stopStream) khi streamingpartial (mặc định: true). Tắt truyền gốc của Slack (giữ hành vi xem trước bản nháp):
channels:
  slack:
    streaming: partial
    nativeStreaming: false
Các khóa cũ:
  • channels.slack.streamMode (replace | status_final | append) được tự động chuyển đổi thành channels.slack.streaming.
  • boolean channels.slack.streaming được tự động chuyển đổi thành channels.slack.nativeStreaming.

Yêu cầu

  1. Bật Agents và AI Apps trong cài đặt ứng dụng Slack của bạn.
  2. Đảm bảo ứng dụng có phạm vi assistant:write.
  3. Một luồng phản hồi phải có sẵn cho tin nhắn đó. Lựa chọn luồng vẫn tuân theo replyToMode.

Hành vi

  • Khối văn bản đầu tiên bắt đầu một luồng (chat.startStream).
  • Các khối văn bản sau đó được thêm vào cùng một luồng (chat.appendStream).
  • Kết thúc phản hồi hoàn tất luồng (chat.stopStream).
  • Phương tiện và tải trọng không phải văn bản quay lại phân phối bình thường.
  • Nếu truyền thất bại giữa phản hồi, OpenClaw quay lại phân phối bình thường cho các tải trọng còn lại.

Tham chiếu cấu hình

Tham chiếu chính:
  • Tham chiếu cấu hình - Slack Các trường Slack quan trọng:
    • chế độ/xác thực: mode, botToken, appToken, signingSecret, webhookPath, accounts.*
    • truy cập DM: dm.enabled, dmPolicy, allowFrom (cũ: dm.policy, dm.allowFrom), dm.groupEnabled, dm.groupChannels
    • chuyển đổi tương thích: dangerouslyAllowNameMatching (phá vỡ kính; giữ tắt trừ khi cần thiết)
    • truy cập kênh: groupPolicy, channels.*, channels.*.users, channels.*.requireMention
    • luồng/lịch sử: replyToMode, replyToModeByChatType, thread.*, historyLimit, dmHistoryLimit, dms.*.historyLimit
    • phân phối: textChunkLimit, chunkMode, mediaMaxMb, streaming, nativeStreaming
    • hoạt động/tính năng: configWrites, commands.native, slashCommand.*, actions.*, userToken, userTokenReadOnly

Liên quan

Last modified on March 22, 2026