Slack
Chế độ Socket (mặc định)
Thiết lập nhanh (cho người mới)
- Tạo một Slack app và bật Socket Mode.
- Tạo App Token (
xapp-...) và Bot Token (xoxb-...). - Đặt các token cho OpenClaw và khởi động gateway.
Thiết lập
- Tạo một Slack app (From scratch) tại https://api.slack.com/apps.
- Socket Mode → bật. Then go to Basic Information → App-Level Tokens → Generate Token and Scopes with scope
connections:write. Sao chép App Token (xapp-...). -
- OAuth & Permissions → thêm các bot token scopes (sử dụng manifest bên dưới). 3. Nhấp Install to Workspace. 4. Sao chép Bot User OAuth Token (
xoxb-...).
- OAuth & Permissions → thêm các bot token scopes (sử dụng manifest bên dưới). 3. Nhấp Install to Workspace. 4. Sao chép Bot User OAuth Token (
-
- Tùy chọn: OAuth & Permissions → thêm User Token Scopes (xem danh sách chỉ đọc bên dưới). 6. Cài đặt lại ứng dụng và sao chép User OAuth Token (
xoxp-...).
- Tùy chọn: OAuth & Permissions → thêm User Token Scopes (xem danh sách chỉ đọc bên dưới). 6. Cài đặt lại ứng dụng và sao chép User OAuth Token (
- Event Subscriptions → bật events và đăng ký:
message.*(bao gồm chỉnh sửa/xóa/phát sóng thread)app_mentionreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
- Mời bot vào các kênh bạn muốn nó đọc.
- Slash Commands → tạo
/openclawnếu bạn dùngchannels.slack.slashCommand. 8. Nếu bạn bật native commands, hãy thêm một slash command cho mỗi lệnh tích hợp sẵn (cùng tên như trong/help). Mặc định native bị tắt cho Slack trừ khi bạn đặtchannels.slack.commands.native: true(thiết lập toàn cụccommands.nativelà"auto"nên để Slack ở trạng thái tắt). - App Home → bật Messages Tab để người dùng có thể DM bot.
channels.slack.accounts với token theo từng tài khoản và name tùy chọn. 10. Xem gateway/configuration để biết mẫu dùng chung.
Cấu hình OpenClaw (Chế độ Socket)
Đặt token qua biến môi trường (khuyến nghị):SLACK_APP_TOKEN=xapp-...SLACK_BOT_TOKEN=xoxb-...
User token (tùy chọn)
OpenClaw can use a Slack user token (xoxp-...) for read operations (history,
pins, reactions, emoji, member info). By default this stays read-only: reads
prefer the user token when present, and writes still use the bot token unless
you explicitly opt in. 13. Ngay cả khi userTokenReadOnly: false, bot token vẫn được ưu tiên cho các thao tác ghi khi nó khả dụng.
User tokens are configured in the config file (no env var support). 15. Đối với multi-account, đặt channels.slack.accounts.<id>.userToken`.
Ví dụ với bot + app + user tokens:
Cách dùng token
- Thao tác đọc (lịch sử, danh sách phản ứng, danh sách ghim, danh sách emoji, thông tin thành viên, tìm kiếm) ưu tiên user token khi được cấu hình, nếu không thì dùng bot token.
- Các thao tác ghi (gửi/sửa/xóa tin nhắn, thêm/xóa reaction, ghim/bỏ ghim,
tải tệp lên) mặc định sử dụng bot token. If
userTokenReadOnly: falseand no bot token is available, OpenClaw falls back to the user token.
Ngữ cảnh lịch sử
channels.slack.historyLimit(hoặcchannels.slack.accounts.*.historyLimit) điều khiển số lượng tin nhắn gần đây của kênh/nhóm được gói vào prompt.- Falls back to
messages.groupChat.historyLimit. Set0to disable (default 50).
Chế độ HTTP (Events API)
Use HTTP webhook mode when your Gateway is reachable by Slack over HTTPS (typical for server deployments). HTTP mode uses the Events API + Interactivity + Slash Commands with a shared request URL.Thiết lập (Chế độ HTTP)
- Tạo Slack app và tắt Socket Mode (tùy chọn nếu bạn chỉ dùng HTTP).
- Basic Information → sao chép Signing Secret.
- OAuth & Permissions → cài đặt app và sao chép Bot User OAuth Token (
xoxb-...). - Event Subscriptions → bật events và đặt Request URL trỏ tới đường dẫn webhook của gateway (mặc định
/slack/events). - Interactivity & Shortcuts → bật và đặt cùng Request URL.
- Slash Commands → đặt cùng Request URL cho các lệnh.
https://gateway-host/slack/events
Cấu hình OpenClaw (tối thiểu)
- Chế độ HTTP multi-account: đặt
channels.slack.accounts.<id>.mode = “http”and provide a uniquewebhookPath` per account so each Slack app can point to its own URL.
Manifest (tùy chọn)
- Sử dụng Slack app manifest này để tạo ứng dụng nhanh chóng (điều chỉnh tên/lệnh nếu bạn muốn). Include the user scopes if you plan to configure a user token.
slash_commands cho mỗi lệnh bạn muốn công bố (khớp với danh sách /help). Ghi đè bằng channels.slack.commands.native.
Scopes (hiện tại vs tùy chọn)
Slack’s Conversations API is type-scoped: you only need the scopes for the conversation types you actually touch (channels, groups, im, mpim). See https://docs.slack.dev/apis/web-api/using-the-conversations-api/ for the overview.Bot token scopes (bắt buộc)
chat:write(gửi/cập nhật/xóa tin nhắn quachat.postMessage) https://docs.slack.dev/reference/methods/chat.postMessageim:write(mở DM quaconversations.opencho DM người dùng) https://docs.slack.dev/reference/methods/conversations.openchannels:history,groups:history,im:history,mpim:historyhttps://docs.slack.dev/reference/methods/conversations.historychannels:read,groups:read,im:read,mpim:readhttps://docs.slack.dev/reference/methods/conversations.infousers:read(tra cứu người dùng) https://docs.slack.dev/reference/methods/users.inforeactions:read,reactions:write(reactions.get/reactions.add) https://docs.slack.dev/reference/methods/reactions.get https://docs.slack.dev/reference/methods/reactions.addpins:read,pins:write(pins.list/pins.add/pins.remove) https://docs.slack.dev/reference/scopes/pins.read https://docs.slack.dev/reference/scopes/pins.writeemoji:read(emoji.list) https://docs.slack.dev/reference/scopes/emoji.readfiles:write(tải lên quafiles.uploadV2) https://docs.slack.dev/messaging/working-with-files/#upload
User token scopes (tùy chọn, mặc định chỉ đọc)
Thêm các scope này dưới User Token Scopes nếu bạn cấu hìnhchannels.slack.userToken.
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read
Chưa cần hiện tại (nhưng có thể trong tương lai)
mpim:write(chỉ khi thêm mở group-DM/bắt đầu DM quaconversations.open)groups:write(chỉ khi thêm quản lý kênh riêng: tạo/đổi tên/mời/lưu trữ)chat:write.public(chỉ khi muốn đăng vào kênh mà bot không tham gia) https://docs.slack.dev/reference/scopes/chat.write.publicusers:read.email(chỉ khi cần trường email từusers.info) https://docs.slack.dev/changelog/2017-04-narrowing-email-accessfiles:read(chỉ khi bắt đầu liệt kê/đọc metadata tệp)
Cấu hình
- Slack chỉ sử dụng Socket Mode (không có HTTP webhook server). 32. Cung cấp cả hai token:
SLACK_BOT_TOKENSLACK_APP_TOKEN
- Ack reactions được điều khiển toàn cục qua
messages.ackReaction+messages.ackReactionScope. 34. Sử dụngmessages.removeAckAfterReplyđể xóa phản ứng ack sau khi bot trả lời.
Giới hạn
- Văn bản gửi đi được chia khối theo
channels.slack.textChunkLimit(mặc định 4000). - Chia theo dòng trống (tùy chọn): đặt
channels.slack.chunkMode="newline"để tách theo dòng trống (ranh giới đoạn) trước khi chia theo độ dài. - Tải lên media bị giới hạn bởi
channels.slack.mediaMaxMb(mặc định 20).
Luồng trả lời (thread)
By default, OpenClaw replies in the main channel. 36. Sử dụngchannels.slack.replyToMode để điều khiển việc tự động tạo thread:
| Mode | Behavior |
|---|---|
off | 37. Mặc định. Trả lời trong kênh chính. 38. Chỉ tạo thread nếu tin nhắn kích hoạt đã nằm trong một thread. |
first | 39. Phản hồi đầu tiên vào thread (bên dưới tin nhắn kích hoạt), các phản hồi tiếp theo vào kênh chính. Useful for keeping context visible while avoiding thread clutter. |
all | All replies go to thread. Keeps conversations contained but may reduce visibility. |
slack sendMessage).
Thread theo từng loại chat
Bạn có thể cấu hình hành vi threading khác nhau cho từng loại chat bằng cách đặtchannels.slack.replyToModeByChatType:
direct: DM 1:1 (Slackim)group: DM nhóm / MPIM (Slackmpim)channel: kênh tiêu chuẩn (công khai/riêng tư)
replyToModeByChatType.<chatType>replyToMode- Mặc định của nhà cung cấp (
off)
channels.slack.dm.replyToMode (cũ) vẫn được chấp nhận như phương án dự phòng cho direct khi không đặt ghi đè theo loại chat.
Ví dụ:
Chỉ thread DM:
Thẻ thread thủ công
Để kiểm soát chi tiết, dùng các thẻ này trong phản hồi của tác tử:[[reply_to_current]]— trả lời tin nhắn kích hoạt (bắt đầu/tiếp tục thread).[[reply_to:<id>]]— trả lời một message id cụ thể.
Phiên + định tuyến
- DM dùng chung phiên
main(giống WhatsApp/Telegram). - Kênh ánh xạ tới phiên
agent:<agentId>:slack:channel:<channelId>. - Slash commands dùng phiên
agent:<agentId>:slack:slash:<userId>(tiền tố cấu hình quachannels.slack.slashCommand.sessionPrefix). - Nếu Slack không cung cấp
channel_type, OpenClaw suy ra từ tiền tố ID kênh (D,C,G) và mặc định vềchannelđể giữ khóa phiên ổn định. - Native command registration uses
commands.native(global default"auto"→ Slack off) and can be overridden per-workspace withchannels.slack.commands.native. Text commands require standalone/...messages and can be disabled withcommands.text: false. 47. Slack slash commands được quản lý trong Slack app và không bị tự động xóa. 48. Sử dụngcommands.useAccessGroups: falseđể bỏ qua kiểm tra access-group cho các lệnh. - Danh sách lệnh đầy đủ + cấu hình: Slash commands
Bảo mật DM (ghép cặp)
- Mặc định:
channels.slack.dm.policy="pairing"— người gửi DM chưa biết sẽ nhận mã ghép cặp (hết hạn sau 1 giờ). - Phê duyệt qua:
openclaw pairing approve slack <code>. - Cho phép mọi người: đặt
channels.slack.dm.policy="open"vàchannels.slack.dm.allowFrom=["*"]. -
channels.slack.dm.allowFromchấp nhận user ID, @handle hoặc email (được resolve khi khởi động nếu token cho phép). 50. Wizard chấp nhận username và resolve chúng thành id trong quá trình thiết lập khi token cho phép.
Chính sách nhóm
channels.slack.groupPolicyđiều khiển xử lý kênh (open|disabled|allowlist).allowlistyêu cầu kênh phải được liệt kê trongchannels.slack.channels.- If you only set
SLACK_BOT_TOKEN/SLACK_APP_TOKENand never create achannels.slacksection, the runtime defaultsgroupPolicytoopen. Addchannels.slack.groupPolicy,channels.defaults.groupPolicy, or a channel allowlist to lock it down. - Trình cấu hình chấp nhận tên
#channelvà phân giải sang ID khi có thể (công khai + riêng tư); nếu có nhiều kết quả trùng, nó ưu tiên kênh đang hoạt động. - Khi khởi động, OpenClaw phân giải tên kênh/người dùng trong allowlist sang ID (khi token cho phép) và ghi log ánh xạ; các mục không phân giải được sẽ giữ nguyên như đã nhập.
- Để không cho phép kênh nào, đặt
channels.slack.groupPolicy: "disabled"(hoặc giữ allowlist rỗng).
channels.slack.channels.<id> or channels.slack.channels.<name>):
allow: cho phép/từ chối kênh khigroupPolicy="allowlist".requireMention: kiểm soát nhắc tên cho kênh.tools: ghi đè chính sách công cụ theo kênh (tùy chọn) (allow/deny/alsoAllow).toolsBySender: ghi đè chính sách công cụ theo người gửi trong kênh (khóa là sender id/@handle/email; hỗ trợ wildcard"*").allowBots: cho phép tin nhắn do bot tạo trong kênh này (mặc định: false).users: allowlist người dùng theo kênh (tùy chọn).skills: bộ lọc skill (bỏ qua = tất cả skills, rỗng = không skill nào).systemPrompt: system prompt bổ sung cho kênh (kết hợp với topic/purpose).enabled: đặtfalseđể tắt kênh.
Đích gửi
Dùng với cron/CLI gửi:user:<id>cho DMchannel:<id>cho kênh
Hành động công cụ
Hành động công cụ Slack có thể bị giới hạn bằngchannels.slack.actions.*:
| Nhóm hành động | Mặc định | Ghi chú |
|---|---|---|
| reactions | bật | Phản ứng + liệt kê phản ứng |
| messages | bật | Đọc/gửi/sửa/xóa |
| pins | bật | Ghim/bỏ ghim/liệt kê |
| memberInfo | bật | Thông tin thành viên |
| emojiList | bật | Danh sách emoji tùy chỉnh |
Ghi chú bảo mật
- Thao tác ghi mặc định dùng bot token để các hành động thay đổi trạng thái được giới hạn trong quyền và danh tính của bot.
- Setting
userTokenReadOnly: falseallows the user token to be used for write operations when a bot token is unavailable, which means actions run with the installing user’s access. Treat the user token as highly privileged and keep action gates and allowlists tight. - Nếu bật ghi bằng user token, hãy đảm bảo user token có các scope ghi
tương ứng (
chat:write,reactions:write,pins:write,files:write) nếu không các thao tác đó sẽ thất bại.
Xử lý sự cố
Chạy theo thứ tự này trước:- Đã kết nối nhưng không có trả lời ở kênh: kênh bị chặn bởi
groupPolicyhoặc không nằm trong allowlistchannels.slack.channels. - DM bị bỏ qua: người gửi chưa được phê duyệt khi
channels.slack.dm.policy="pairing". - Lỗi API (
missing_scope,not_in_channel, lỗi xác thực): bot/app token hoặc Slack scopes chưa đầy đủ.
Ghi chú
- Kiểm soát nhắc tên được điều khiển qua
channels.slack.channels(đặtrequireMentionthànhtrue);agents.list[].groupChat.mentionPatterns(hoặcmessages.groupChat.mentionPatterns) cũng được tính là nhắc tên. - Ghi đè đa tác tử: đặt mẫu theo từng tác tử trong
agents.list[].groupChat.mentionPatterns. - Thông báo phản ứng tuân theo
channels.slack.reactionNotifications(dùngreactionAllowlistvới chế độallowlist). - Bot-authored messages are ignored by default; enable via
channels.slack.allowBotsorchannels.slack.channels.<id>.allowBots. - Warning: If you allow replies to other bots (
channels.slack.allowBots=trueorchannels.slack.channels.<id>.allowBots=true), prevent bot-to-bot reply loops withrequireMention,channels.slack.channels.<id>.usersallowlists, and/or clear guardrails inAGENTS.mdandSOUL.md. - Với công cụ Slack, ngữ nghĩa xóa phản ứng nằm tại /tools/reactions.
- Tệp đính kèm được tải xuống kho media khi được phép và dưới giới hạn kích thước.