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

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Sẵn sàng cho production đối với DM và kênh thông qua tích hợp ứng dụng Slack. Chế độ mặc định là Socket Mode; HTTP Request URLs cũng được hỗ trợ.

Pairing

DM Slack mặc định dùng chế độ ghép nối.

Slash commands

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

Channel troubleshooting

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

Thiết lập nhanh

1

Create a new Slack app

Trong phần cài đặt ứng dụng Slack, nhấn nút Create New App:
  • chọn from a manifest và chọn workspace cho ứng dụng của bạn
  • dán manifest mẫu bên dưới và tiếp tục để tạo
  • tạo App-Level Token (xapp-...) với connections:write
  • cài đặt ứng dụng và sao chép Bot Token (xoxb-...) được hiển thị
2

Configure OpenClaw

Thiết lập SecretRef được khuyến nghị:
export SLACK_APP_TOKEN=xapp-...
export SLACK_BOT_TOKEN=xoxb-...
cat > slack.socket.patch.json5 <<'JSON5'
{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" },
      botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" },
    },
  },
}
JSON5
openclaw config patch --file ./slack.socket.patch.json5 --dry-run
openclaw config patch --file ./slack.socket.patch.json5
Env fallback (chỉ tài khoản mặc định):
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
3

Start gateway

openclaw gateway

Tinh chỉnh transport Socket Mode

OpenClaw đặt thời gian chờ pong của client Slack SDK mặc định là 15 giây cho Socket Mode. Chỉ ghi đè cài đặt transport khi bạn cần tinh chỉnh theo workspace hoặc host cụ thể:
{
  channels: {
    slack: {
      mode: "socket",
      socketMode: {
        clientPingTimeout: 20000,
        serverPingTimeout: 30000,
        pingPongLoggingEnabled: false,
      },
    },
  },
}
Chỉ dùng tùy chọn này cho workspace Socket Mode ghi log thời gian chờ Slack websocket pong/server-ping hoặc chạy trên host được biết có tình trạng nghẽn vòng lặp sự kiện. clientPingTimeout là thời gian chờ pong sau khi SDK gửi client ping; serverPingTimeout là thời gian chờ ping từ máy chủ Slack. Tin nhắn và sự kiện của ứng dụng vẫn là trạng thái ứng dụng, không phải tín hiệu liveness của transport.

Danh sách kiểm tra manifest và scope

Manifest cơ sở của ứng dụng Slack giống nhau cho Socket Mode và HTTP Request URLs. Chỉ khối settings (và url của slash command) là khác. Manifest cơ sở (mặc định Socket Mode):
{
  "display_information": {
    "name": "OpenClaw",
    "description": "Slack connector for OpenClaw"
  },
  "features": {
    "bot_user": { "display_name": "OpenClaw", "always_online": true },
    "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": [
        "app_mentions:read",
        "assistant:write",
        "channels:history",
        "channels:read",
        "chat:write",
        "commands",
        "emoji:read",
        "files:read",
        "files:write",
        "groups:history",
        "groups:read",
        "im:history",
        "im:read",
        "im:write",
        "mpim:history",
        "mpim:read",
        "mpim:write",
        "pins:read",
        "pins:write",
        "reactions:read",
        "reactions:write",
        "users:read"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": true,
    "event_subscriptions": {
      "bot_events": [
        "app_mention",
        "channel_rename",
        "member_joined_channel",
        "member_left_channel",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "pin_added",
        "pin_removed",
        "reaction_added",
        "reaction_removed"
      ]
    }
  }
}
Đối với chế độ HTTP Request URLs, thay settings bằng biến thể HTTP và thêm url vào từng slash command. Cần có URL công khai:
{
  "features": {
    "slash_commands": [
      {
        "command": "/openclaw",
        "description": "Send a message to OpenClaw",
        "should_escape": false,
        "url": "https://gateway-host.example.com/slack/events"
      }
    ]
  },
  "settings": {
    "event_subscriptions": {
      "request_url": "https://gateway-host.example.com/slack/events",
      "bot_events": [
        /* same as Socket Mode */
      ]
    },
    "interactivity": {
      "is_enabled": true,
      "request_url": "https://gateway-host.example.com/slack/events",
      "message_menu_options_url": "https://gateway-host.example.com/slack/events"
    }
  }
}

Cài đặt manifest bổ sung

Hiển thị các tính năng khác mở rộng các mặc định ở trên.
Có thể dùng nhiều slash command gốc thay cho một lệnh cấu hình duy nhất, với một số điểm cần lưu ý:
  • Dùng /agentstatus thay vì /status vì lệnh /status đã được đặt trước.
  • Không thể cung cấp quá 25 slash command cùng lúc.
Thay phần features.slash_commands hiện có của bạn bằng một tập con của các lệnh có sẵn:
    "slash_commands": [
      {
        "command": "/new",
        "description": "Start a new session",
        "usage_hint": "[model]"
      },
      {
        "command": "/reset",
        "description": "Reset the current session"
      },
      {
        "command": "/compact",
        "description": "Compact the session context",
        "usage_hint": "[instructions]"
      },
      {
        "command": "/stop",
        "description": "Stop the current run"
      },
      {
        "command": "/session",
        "description": "Manage thread-binding expiry",
        "usage_hint": "idle <duration|off> or max-age <duration|off>"
      },
      {
        "command": "/think",
        "description": "Set the thinking level",
        "usage_hint": "<level>"
      },
      {
        "command": "/verbose",
        "description": "Toggle verbose output",
        "usage_hint": "on|off|full"
      },
      {
        "command": "/fast",
        "description": "Show or set fast mode",
        "usage_hint": "[status|on|off]"
      },
      {
        "command": "/reasoning",
        "description": "Toggle reasoning visibility",
        "usage_hint": "[on|off|stream]"
      },
      {
        "command": "/elevated",
        "description": "Toggle elevated mode",
        "usage_hint": "[on|off|ask|full]"
      },
      {
        "command": "/exec",
        "description": "Show or set exec defaults",
        "usage_hint": "host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>"
      },
      {
        "command": "/model",
        "description": "Show or set the model",
        "usage_hint": "[name|#|status]"
      },
      {
        "command": "/models",
        "description": "List providers/models",
        "usage_hint": "[provider] [page] [limit=<n>|size=<n>|all]"
      },
      {
        "command": "/help",
        "description": "Show the short help summary"
      },
      {
        "command": "/commands",
        "description": "Show the generated command catalog"
      },
      {
        "command": "/tools",
        "description": "Show what the current agent can use right now",
        "usage_hint": "[compact|verbose]"
      },
      {
        "command": "/agentstatus",
        "description": "Show runtime status, including provider usage/quota when available"
      },
      {
        "command": "/tasks",
        "description": "List active/recent background tasks for the current session"
      },
      {
        "command": "/context",
        "description": "Explain how context is assembled",
        "usage_hint": "[list|detail|json]"
      },
      {
        "command": "/whoami",
        "description": "Show your sender identity"
      },
      {
        "command": "/skill",
        "description": "Run a skill by name",
        "usage_hint": "<name> [input]"
      },
      {
        "command": "/btw",
        "description": "Ask a side question without changing session context",
        "usage_hint": "<question>"
      },
      {
        "command": "/usage",
        "description": "Control the usage footer or show cost summary",
        "usage_hint": "off|tokens|full|cost"
      }
    ]
Thêm bot scope chat:write.customize nếu bạn muốn tin nhắn gửi đi dùng danh tính agent đang hoạt động (tên người dùng và biểu tượng tùy chỉnh) thay vì danh tính mặc định của ứng dụng Slack.Nếu bạn dùng biểu tượng emoji, Slack kỳ vọng cú pháp :emoji_name:.
Nếu bạn cấu hình channels.slack.userToken, các scope đọ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 thao tác đọc tìm kiếm Slack)

Mô hình token

  • botToken + appToken là bắt buộc đối với Socket Mode.
  • Chế độ HTTP yêu cầu botToken + signingSecret.
  • botToken, appToken, signingSecretuserToken chấp nhận chuỗi văn bản thuần hoặc đối tượng SecretRef.
  • Token trong cấu hình ghi đè phương án dự phòng từ env.
  • Phương án dự phòng env SLACK_BOT_TOKEN / SLACK_APP_TOKEN chỉ áp dụng cho tài khoản mặc định.
  • userToken (xoxp-...) chỉ cấu hình được trong config (không có phương án dự phòng env) và mặc định ở hành vi chỉ đọc (userTokenReadOnly: true).
Hành vi ảnh chụp trạng thái:
  • Việc kiểm tra tài khoản Slack theo dõi các trường *Source*Status theo từng thông tin xác thực (botToken, appToken, signingSecret, userToken).
  • Trạng thái là available, configured_unavailable hoặc missing.
  • configured_unavailable nghĩa là tài khoản được cấu hình qua SecretRef hoặc nguồn bí mật không nội tuyến khác, nhưng đường dẫn lệnh/runtime hiện tại không thể phân giải giá trị thực tế.
  • Ở chế độ HTTP, signingSecretStatus được bao gồm; trong Socket Mode, cặp bắt buộc là botTokenStatus + appTokenStatus.
Đối với hành động/đọc thư mục, token người dùng có thể được ưu tiên khi đã cấu hình. Đối với thao tác ghi, token bot vẫn được ưu tiên; ghi bằng token người dùng chỉ được cho phép khi userTokenReadOnly: false và token bot không khả dụng.

Hành động và cổng kiểm soát

Các hành động Slack được điều khiển 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
messagesbật
reactionsbật
pinsbật
memberInfobật
emojiListbật
Các hành động tin nhắn Slack hiện tại bao gồm send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-infoemoji-list. download-file chấp nhận ID tệp Slack hiển thị trong placeholder tệp đầu vào và trả về bản xem trước hình ảnh đối với ảnh hoặc siêu dữ liệu tệp cục bộ đối với các loại tệp khác.

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

channels.slack.dmPolicy kiểm soát quyền truy cập DM. channels.slack.allowFrom là danh sách cho phép DM chính tắc.
  • pairing (mặc định)
  • allowlist
  • open (yêu cầu channels.slack.allowFrom bao gồm "*")
  • disabled
Cờ DM:
  • dm.enabled (mặc định true)
  • channels.slack.allowFrom
  • dm.allowFrom (kế thừa)
  • dm.groupEnabled (DM nhóm mặc định false)
  • dm.groupChannels (danh sách cho phép MPIM tùy chọn)
Thứ tự ưu tiên nhiều tài khoản:
  • channels.slack.accounts.default.allowFrom chỉ áp dụng cho tài khoản default.
  • Tài khoản có tên kế thừa channels.slack.allowFrom khi allowFrom riêng của chúng chưa được đặt.
  • Tài khoản có tên không kế thừa channels.slack.accounts.default.allowFrom.
channels.slack.dm.policychannels.slack.dm.allowFrom kế thừa vẫn được đọc để tương thích. openclaw doctor --fix di chuyển chúng sang dmPolicyallowFrom khi có thể làm vậy mà không thay đổi quyền truy cập.Ghép nối trong DM dùng openclaw pairing approve slack <code>.

Luồng, phiên và thẻ trả lời

  • DM định tuyến là direct; kênh là channel; MPIM là group.
  • Với session.dmScope=main mặc định, DM Slack gộp vào phiên chính của agent.
  • Phiên kênh: agent:<agentId>:slack:channel:<channelId>.
  • Trả lời trong luồng có thể tạo hậu tố phiên luồng (:thread:<threadTs>) khi phù hợp.
  • 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).
  • channels.slack.thread.requireExplicitMention (mặc định false): khi true, chặn mention luồng ngầm định để bot chỉ phản hồi các mention @bot rõ ràng bên trong luồng, ngay cả khi bot đã tham gia luồng. Nếu không có tùy chọn này, các trả lời trong luồng mà bot đã tham gia sẽ bỏ qua cổng requireMention.
Điều khiển luồng trả lời:
  • channels.slack.replyToMode: off|first|all|batched (mặc định off)
  • channels.slack.replyToModeByChatType: theo từng direct|group|channel
  • phương án dự phòng kế thừa cho trò chuyện trực tiếp: channels.slack.dm.replyToMode
Hỗ trợ thẻ trả lời thủ công:
  • [[reply_to_current]]
  • [[reply_to:<id>]]
replyToMode="off" tắt toàn bộ luồng trả lờ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". Luồng Slack ẩn tin nhắn khỏi kênh trong khi trả lời Telegram vẫn hiển thị nội tuyến.

Phản ứng xác nhận

ackReaction gửi một emoji xác nhận trong khi OpenClaw đang xử lý tin nhắn đầu vào. Thứ tự phân giải:
  • channels.slack.accounts.<accountId>.ackReaction
  • channels.slack.ackReaction
  • messages.ackReaction
  • phương án dự phòng emoji định danh agent (agents.list[].identity.emoji, nếu không có thì ”👀”)
Ghi chú:
  • Slack yêu cầu shortcode (ví dụ "eyes").
  • Dùng "" để tắt phản ứng cho tài khoản Slack hoặc trên toàn cục.

Truyền phát văn bản

channels.slack.streaming kiểm soát hành vi xem trước trực tiếp:
  • off: tắt truyền phát 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: nối thêm các bản cập nhật xem trước theo khúc.
  • progress: hiển thị văn bản trạng thái tiến độ trong khi tạo, rồi gửi văn bản cuối cùng.
  • streaming.preview.toolProgress: khi bản xem trước nháp đang hoạt động, định tuyến các cập nhật công cụ/tiến độ vào cùng tin nhắn xem trước đã chỉnh sửa (mặc định: true). Đặt false để giữ riêng các tin nhắn công cụ/tiến độ.
channels.slack.streaming.nativeTransport kiểm soát truyền phát văn bản gốc của Slack khi channels.slack.streaming.modepartial (mặc định: true).
  • Phải có luồng trả lời để truyền phát văn bản gốc và để trạng thái luồng trợ lý Slack xuất hiện. Việc chọn luồng vẫn tuân theo replyToMode.
  • Gốc của kênh và trò chuyện nhóm vẫn có thể dùng bản xem trước nháp thông thường khi truyền phát gốc không khả dụng.
  • DM Slack cấp cao nhất mặc định ở ngoài luồng, nên chúng không hiển thị bản xem trước kiểu luồng; dùng trả lời trong luồng hoặc typingReaction nếu bạn muốn có tiến độ hiển thị ở đó.
  • Media và payload không phải văn bản quay về cách gửi thông thường.
  • Kết quả cuối media/lỗi hủy các chỉnh sửa xem trước đang chờ; kết quả cuối văn bản/block đủ điều kiện chỉ được đẩy ra khi có thể chỉnh sửa bản xem trước tại chỗ.
  • Nếu truyền phát thất bại giữa chừng khi trả lời, OpenClaw quay về cách gửi thông thường cho các payload còn lại.
Dùng bản xem trước nháp thay vì truyền phát văn bản gốc của Slack:
{
  channels: {
    slack: {
      streaming: {
        mode: "partial",
        nativeTransport: false,
      },
    },
  },
}
Khóa kế thừa:
  • channels.slack.streamMode (replace | status_final | append) được tự động di chuyển sang channels.slack.streaming.mode.
  • boolean channels.slack.streaming được tự động di chuyển sang channels.slack.streaming.modechannels.slack.streaming.nativeTransport.
  • channels.slack.nativeStreaming kế thừa được tự động di chuyển sang channels.slack.streaming.nativeTransport.

Phương án dự phòng phản ứng đang nhập

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ý câu trả lời, rồi xóa phản ứng đó khi lượt chạy kết thúc. Điều này hữu ích nhất bên ngoài trả lời trong luồng, vốn dùng chỉ báo trạng thái “is typing…” mặc định. Thứ tự phân giải:
  • channels.slack.accounts.<accountId>.typingReaction
  • channels.slack.typingReaction
Ghi chú:
  • Slack yêu cầu shortcode (ví dụ "hourglass_flowing_sand").
  • Phản ứng được thực hiện theo khả năng tốt nhất và việc dọn dẹp được tự động thử sau khi đường dẫn trả lời hoặc thất bại hoàn tất.

Media, chia khúc và gửi

Tệp đính kèm Slack được tải xuống từ URL riêng do Slack lưu trữ (luồng yêu cầu xác thực bằng token) và được ghi vào kho media khi tải thành công và giới hạn kích thước cho phép. Placeholder tệp bao gồm fileId của Slack để agent có thể lấy tệp gốc bằng download-file.Tải xuống dùng thời gian chờ rỗi và tổng thời gian chờ có giới hạn. Nếu việc truy xuất tệp Slack bị treo hoặc thất bại, OpenClaw tiếp tục xử lý tin nhắn và quay về placeholder tệp.Giới hạn kích thước đầu vào runtime mặc định là 20MB trừ khi bị ghi đè bởi channels.slack.mediaMaxMb.
  • khúc văn bản dùng channels.slack.textChunkLimit (mặc định 4000)
  • channels.slack.chunkMode="newline" bật tách ưu tiên đoạn văn
  • gửi tệp dùng API tải lên của Slack và có thể bao gồm trả lời trong luồng (thread_ts)
  • giới hạn media đầu ra tuân theo channels.slack.mediaMaxMb khi được cấu hình; nếu không, gửi qua kênh dùng mặc định theo loại MIME từ pipeline media
Đích rõ ràng được ưu tiên:
  • user:<id> cho DM
  • channel:<id> cho kênh
DM Slack được mở qua API cuộc hội thoại của Slack khi gửi đến đích người dùng.

Lệnh và hành vi slash

Lệnh slash xuất hiện trong Slack dưới dạng một lệnh đã cấu hình duy nhất hoặc nhiều lệnh gốc. Cấu hình channels.slack.slashCommand để thay đổi mặc định lệnh:
  • enabled: false
  • name: "openclaw"
  • sessionPrefix: "slack:slash"
  • ephemeral: true
/openclaw /help
Lệnh gốc yêu cầu cài đặt manifest bổ sung trong ứng dụng Slack của bạn và thay vào đó được bật bằng channels.slack.commands.native: true hoặc commands.native: true trong cấu hình toàn cục.
  • Chế độ tự động của lệnh gốc bị tắt cho Slack, nên commands.native: "auto" không bật lệnh gốc của Slack.
/help
Menu đối số gốc dùng chiến lược kết xuất thích ứng, hiển thị modal xác nhận trước khi gửi giá trị tùy chọn đã chọn:
  • 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 bất đồng bộ khi có trình xử lý tùy chọn tương tác
  • vượt giới hạn Slack: giá trị tùy chọn được mã hóa sẽ chuyển dự phòng về nút
/think
Phiên slash dùng các khóa cô lập như agent:<agentId>:slack:slash:<userId> và vẫn định tuyến các lần thực thi lệnh đến phiên hội thoại đích bằng CommandTargetSessionKey.

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

Slack có thể kết xuất các điều khiển phản hồi tương tác do tác nhân tạo, nhưng tính năng này mặc định bị tắt. Bật ở phạm vi toàn cục:
{
  channels: {
    slack: {
      capabilities: {
        interactiveReplies: true,
      },
    },
  },
}
Hoặc chỉ bật cho một tài khoản Slack:
{
  channels: {
    slack: {
      accounts: {
        ops: {
          capabilities: {
            interactiveReplies: true,
          },
        },
      },
    },
  },
}
Khi được bật, 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 lượt bấm hoặc lựa chọn trở lại qua đường dẫn sự kiện tương tác Slack hiện có. Ghi chú:
  • Đây là giao diện người dùng riêng cho Slack. Các kênh khác không chuyển đổi chỉ thị Slack Block Kit thành hệ thống nút riêng của chúng.
  • Các giá trị callback tương tác là token mờ do OpenClaw tạo, không phải giá trị thô do tác nhân tạo.
  • Nếu các khối tương tác được tạo vượt giới hạn Slack Block Kit, OpenClaw sẽ chuyển dự phòng về phản hồi văn bản gốc thay vì gửi payload khối không hợp lệ.

Phê duyệt exec trong Slack

Slack có thể hoạt động như một máy khách phê duyệt gốc với nút và tương tác, thay vì chuyển dự phòng sang Web UI hoặc terminal.
  • Phê duyệt exec dùng channels.slack.execApprovals.* cho định tuyến DM/kênh gốc.
  • Phê duyệt Plugin vẫn có thể được xử lý qua cùng bề mặt nút gốc của Slack khi yêu cầu đã đến Slack và loại id phê duyệt là plugin:.
  • Ủy quyền người phê duyệt vẫn được thực thi: chỉ người dùng được xác định là người phê duyệt mới có thể phê duyệt hoặc từ chối yêu cầu qua Slack.
Tính năng này dùng cùng bề mặt nút phê duyệt dùng chung như các kênh khác. Khi interactivity được bật trong cài đặt ứng dụng Slack của bạn, lời nhắc phê duyệt sẽ kết xuất thành nút Block Kit trực tiếp trong cuộc hội thoại. Khi các nút đó xuất hiện, chúng là UX phê duyệt chính; OpenClaw chỉ nên bao gồm lệnh /approve thủ công khi kết quả công cụ cho biết phê duyệt qua chat không khả dụng hoặc phê duyệt thủ công là đường dẫn duy nhất. Đường dẫn cấu hình:
  • channels.slack.execApprovals.enabled
  • channels.slack.execApprovals.approvers (tùy chọn; chuyển dự phòng về commands.ownerAllowFrom khi có thể)
  • channels.slack.execApprovals.target (dm | channel | both, mặc định: dm)
  • agentFilter, sessionFilter
Slack tự động bật phê duyệt exec gốc khi enabled chưa được đặt hoặc là "auto" và ít nhất một người phê duyệt được phân giải. Đặt enabled: false để tắt rõ ràng Slack dưới dạng máy khách phê duyệt gốc. Đặt enabled: true để buộc bật phê duyệt gốc khi người phê duyệt được phân giải. Hành vi mặc định khi không có cấu hình phê duyệt exec Slack rõ ràng:
{
  commands: {
    ownerAllowFrom: ["slack:U12345678"],
  },
}
Cấu hình gốc của Slack rõ ràng chỉ cần thiết khi bạn muốn ghi đè người phê duyệt, thêm bộ lọc, hoặc chọn tham gia gửi đến chat gốc:
{
  channels: {
    slack: {
      execApprovals: {
        enabled: true,
        approvers: ["U12345678"],
        target: "both",
      },
    },
  },
}
Chuyển tiếp approvals.exec dùng chung là riêng biệt. Chỉ dùng khi lời nhắc phê duyệt exec cũng phải định tuyến đến các chat khác hoặc đích ngoài băng tần rõ ràng. Chuyển tiếp approvals.plugin dùng chung cũng riêng biệt; các nút gốc Slack vẫn có thể xử lý phê duyệt Plugin khi các yêu cầu đó đã đến Slack. /approve trong cùng chat cũng hoạt động trong các kênh Slack và DM đã hỗ trợ lệnh. Xem Phê duyệt exec để biết đầy đủ mô hình chuyển tiếp phê duyệt.

Sự kiện và hành vi vận hành

  • Chỉnh sửa/xóa tin nhắn được ánh xạ thành sự kiện hệ thống.
  • Phát lên kênh từ luồng (“Also send to channel” trong phản hồi luồng) được xử lý như tin nhắn người dùng thông thường.
  • Sự kiện thêm/xóa reaction được ánh xạ thành sự kiện hệ thống.
  • Sự kiện thành viên tham gia/rời khỏi, kênh được tạo/đổi tên, và thêm/xóa ghim được ánh xạ thành sự kiện hệ thống.
  • channel_id_changed có thể di chuyển 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 xem là ngữ cảnh không đáng tin cậy và có thể được chèn vào ngữ cảnh định tuyến.
  • Người khởi tạo luồng và việc nạp ngữ cảnh lịch sử luồng ban đầu được lọc theo danh sách cho phép người gửi đã cấu hình khi áp dụng.
  • Hành động khối và tương tác modal phát ra sự kiện hệ thống Slack interaction: ... có cấu trúc với các trường payload phong phú:
    • hành động khối: giá trị đã chọn, nhãn, giá trị bộ chọn, và siêu dữ liệu workflow_*
    • sự kiện modal view_submissionview_closed với siêu dữ liệu kênh đã định tuyến và đầu vào biểu mẫu

Tham chiếu cấu hình

Tham chiếu chính: Tham chiếu cấu hình - Slack.
  • 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
  • nút bật/tắt tương thích: dangerouslyAllowNameMatching (break-glass; giữ tắt trừ khi cần)
  • truy cập kênh: groupPolicy, channels.*, channels.*.users, channels.*.requireMention
  • luồng/lịch sử: replyToMode, replyToModeByChatType, thread.*, historyLimit, dmHistoryLimit, dms.*.historyLimit
  • gửi: textChunkLimit, chunkMode, mediaMaxMb, streaming, streaming.nativeTransport, streaming.preview.toolProgress
  • vận hành/tính năng: configWrites, commands.native, slashCommand.*, actions.*, userToken, userTokenReadOnly

Khắc phục sự cố

Kiểm tra theo thứ tự:
  • groupPolicy
  • danh sách cho phép kênh (channels.slack.channels) — khóa phải là ID kênh (C12345678), không phải tên (#channel-name). Khóa dựa trên tên sẽ âm thầm thất bại dưới groupPolicy: "allowlist" vì định tuyến kênh mặc định ưu tiên ID. Để tìm ID: nhấp chuột phải vào kênh trong Slack → Copy link — giá trị C... ở cuối URL là ID kênh.
  • requireMention
  • danh sách cho phép users theo từng kênh
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
  • Sự kiện DM của Slack Assistant: log chi tiết nhắc đến drop message_changed thường có nghĩa là Slack đã gửi sự kiện luồng Assistant đã chỉnh sửa mà không có người gửi là con người có thể khôi phục trong siêu dữ liệu tin nhắn
openclaw pairing list slack
Xác thực token bot + ứng dụng và việc bật Socket Mode trong cài đặt ứng dụng Slack.Nếu openclaw channels status --probe --json hiển thị botTokenStatus hoặc appTokenStatus: "configured_unavailable", tài khoản Slack đã được cấu hình nhưng runtime hiện tại không phân giải được giá trị dựa trên SecretRef.
Xác thực:
  • signing secret
  • đường dẫn Webhook
  • URL yêu cầu Slack (Events + Interactivity + Slash Commands)
  • webhookPath duy nhất cho mỗi tài khoản HTTP
Nếu signingSecretStatus: "configured_unavailable" xuất hiện trong snapshot tài khoản, tài khoản HTTP đã được cấu hình nhưng runtime hiện tại không phân giải được signing secret dựa trên SecretRef.
Xác minh bạn dự định dùng:
  • chế độ lệnh gốc (channels.slack.commands.native: true) với các lệnh slash tương ứng đã đăng ký trong Slack
  • hoặc chế độ một lệnh slash (channels.slack.slashCommand.enabled: true)
Đồng thời kiểm tra commands.useAccessGroups và danh sách cho phép kênh/người dùng.

Tham chiếu vision cho tệp đính kèm

Slack có thể đính kèm phương tiện đã tải xuống vào lượt của tác nhân khi tải tệp Slack thành công và giới hạn kích thước cho phép. Tệp hình ảnh có thể được truyền qua đường dẫn hiểu phương tiện hoặc trực tiếp đến mô hình phản hồi có khả năng vision; các tệp khác được giữ lại dưới dạng ngữ cảnh tệp có thể tải xuống thay vì được xử lý như đầu vào hình ảnh.

Loại phương tiện được hỗ trợ

Loại phương tiệnNguồnHành vi hiện tạiGhi chú
Hình ảnh JPEG / PNG / GIF / WebPURL tệp SlackĐược tải xuống và đính kèm vào lượt để xử lý có khả năng visionGiới hạn mỗi tệp: channels.slack.mediaMaxMb (mặc định 20 MB)
Tệp PDFURL tệp SlackĐược tải xuống và hiển thị dưới dạng ngữ cảnh tệp cho công cụ như download-file hoặc pdfĐầu vào Slack không tự động chuyển PDF thành đầu vào image-vision
Tệp khácURL tệp SlackĐược tải xuống khi có thể và hiển thị dưới dạng ngữ cảnh tệpTệp nhị phân không được xử lý như đầu vào hình ảnh
Phản hồi luồngTệp của người khởi tạo luồngTệp của tin nhắn gốc có thể được hydrate làm ngữ cảnh khi phản hồi không có phương tiện trực tiếpNgười khởi tạo chỉ có tệp dùng placeholder tệp đính kèm
Tin nhắn nhiều hình ảnhNhiều tệp SlackMỗi tệp được đánh giá độc lậpXử lý Slack được giới hạn ở tám tệp mỗi tin nhắn

Pipeline đầu vào

Khi một tin nhắn Slack có tệp đính kèm đến:
  1. OpenClaw tải tệp xuống từ URL riêng tư của Slack bằng token bot (xoxb-...).
  2. Tệp được ghi vào kho phương tiện khi thành công.
  3. Đường dẫn phương tiện đã tải xuống và loại nội dung được thêm vào ngữ cảnh đầu vào.
  4. Các đường dẫn mô hình/công cụ có khả năng hình ảnh có thể dùng tệp đính kèm hình ảnh từ ngữ cảnh đó.
  5. Tệp không phải hình ảnh vẫn khả dụng dưới dạng siêu dữ liệu tệp hoặc tham chiếu phương tiện cho các công cụ có thể xử lý chúng.

Kế thừa tệp đính kèm từ gốc luồng

Khi một tin nhắn đến trong luồng (có cha thread_ts):
  • Nếu chính phản hồi không có phương tiện trực tiếp và tin nhắn gốc được bao gồm có tệp, Slack có thể hydrate các tệp gốc làm ngữ cảnh người khởi tạo luồng.
  • Tệp đính kèm phản hồi trực tiếp được ưu tiên hơn tệp đính kèm của tin nhắn gốc.
  • Tin nhắn gốc chỉ có tệp và không có văn bản được biểu diễn bằng placeholder tệp đính kèm để phương án dự phòng vẫn có thể bao gồm các tệp của nó.

Xử lý nhiều tệp đính kèm

Khi một tin nhắn Slack duy nhất chứa nhiều tệp đính kèm:
  • Mỗi tệp đính kèm được xử lý độc lập thông qua pipeline phương tiện.
  • Các tham chiếu phương tiện đã tải xuống được tổng hợp vào ngữ cảnh tin nhắn.
  • Thứ tự xử lý tuân theo thứ tự tệp của Slack trong tải trọng sự kiện.
  • Lỗi khi tải xuống một tệp đính kèm không chặn các tệp khác.

Giới hạn kích thước, tải xuống và mô hình

  • Giới hạn kích thước: Mặc định 20 MB cho mỗi tệp. Có thể cấu hình qua channels.slack.mediaMaxMb.
  • Lỗi tải xuống: Các tệp mà Slack không thể phục vụ, URL hết hạn, tệp không thể truy cập, tệp vượt kích thước và phản hồi HTML xác thực/đăng nhập của Slack sẽ bị bỏ qua thay vì được báo cáo là định dạng không được hỗ trợ.
  • Mô hình thị giác: Phân tích hình ảnh dùng mô hình trả lời đang hoạt động khi mô hình đó hỗ trợ thị giác, hoặc mô hình hình ảnh được cấu hình tại agents.defaults.imageModel.

Giới hạn đã biết

Tình huốngHành vi hiện tạiCách xử lý thay thế
URL tệp Slack hết hạnTệp bị bỏ qua; không hiển thị lỗiTải lại tệp lên Slack
Chưa cấu hình mô hình thị giácTệp đính kèm hình ảnh được lưu dưới dạng tham chiếu phương tiện, nhưng không được phân tích như hình ảnhCấu hình agents.defaults.imageModel hoặc dùng mô hình trả lời có khả năng thị giác
Hình ảnh rất lớn (> 20 MB theo mặc định)Bị bỏ qua theo giới hạn kích thướcTăng channels.slack.mediaMaxMb nếu Slack cho phép
Tệp đính kèm được chuyển tiếp/chia sẻVăn bản và phương tiện hình ảnh/tệp do Slack lưu trữ được xử lý theo khả năng tốt nhấtChia sẻ lại trực tiếp trong luồng OpenClaw
Tệp đính kèm PDFĐược lưu làm ngữ cảnh tệp/phương tiện, không tự động được định tuyến qua thị giác hình ảnhDùng download-file cho siêu dữ liệu tệp hoặc công cụ pdf để phân tích PDF

Tài liệu liên quan

Liên quan

Pairing

Ghép nối người dùng Slack với gateway.

Groups

Hành vi DM kênh và nhóm.

Channel routing

Định tuyến tin nhắn đến cho các agent.

Security

Mô hình đe dọa và gia cố bảo mật.

Configuration

Bố cục cấu hình và thứ tự ưu tiên.

Slash commands

Danh mục lệnh và hành vi.