Slack
Status: siap produksi untuk DM + channel melalui integrasi aplikasi Slack. Mode default adalah Socket Mode; URL Permintaan HTTP juga didukung.Pairing
DM Slack secara default menggunakan mode pairing.
Slash commands
Perilaku perintah native dan katalog perintah.
Channel troubleshooting
Diagnostik lintas channel dan playbook perbaikan.
Penyiapan cepat
- Socket Mode (default)
- HTTP Request URLs
Create a new Slack app
Di pengaturan aplikasi Slack, tekan tombol Create New App:
- pilih from a manifest dan pilih workspace untuk aplikasi Anda
- tempel contoh manifest di bawah ini lalu lanjutkan untuk membuat
- buat App-Level Token (
xapp-...) denganconnections:write - instal aplikasi dan salin Bot Token (
xoxb-...) yang ditampilkan
Daftar periksa manifest dan scope
- Socket Mode (default)
- HTTP Request URLs
Pengaturan manifest tambahan
Tampilkan fitur berbeda yang memperluas default di atas.Optional native slash commands
Optional native slash commands
Beberapa native slash commands dapat digunakan sebagai pengganti satu perintah terkonfigurasi dengan nuansa tertentu:
- Gunakan
/agentstatusalih-alih/statuskarena perintah/statusdicadangkan. - Tidak lebih dari 25 slash command dapat tersedia pada saat yang sama.
features.slash_commands yang ada dengan subset dari perintah yang tersedia:- Socket Mode (default)
- HTTP Request URLs
Cakupan penulisan atribusi opsional (operasi tulis)
Cakupan penulisan atribusi opsional (operasi tulis)
Tambahkan bot scope
chat:write.customize jika Anda ingin pesan keluar menggunakan identitas agent aktif (username dan ikon kustom) alih-alih identitas aplikasi Slack default.Jika Anda menggunakan ikon emoji, Slack mengharapkan sintaks :emoji_name:.Cakupan user-token opsional (operasi baca)
Cakupan user-token opsional (operasi baca)
Jika Anda mengonfigurasi
channels.slack.userToken, scope baca yang umum adalah:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(jika Anda bergantung pada pembacaan pencarian Slack)
Model token
botToken+appTokendiperlukan untuk Socket Mode.- Mode HTTP memerlukan
botToken+signingSecret. botToken,appToken,signingSecret, danuserTokenmenerima string plaintext atau objek SecretRef.- Token konfigurasi menimpa fallback env.
- Fallback env
SLACK_BOT_TOKEN/SLACK_APP_TOKENhanya berlaku untuk akun default. userToken(xoxp-...) hanya untuk konfigurasi (tanpa fallback env) dan default ke perilaku hanya-baca (userTokenReadOnly: true).
- Pemeriksaan akun Slack melacak field
*Sourcedan*Statusper kredensial (botToken,appToken,signingSecret,userToken). - Status adalah
available,configured_unavailable, ataumissing. configured_unavailableberarti akun dikonfigurasi melalui SecretRef atau sumber secret non-inline lain, tetapi jalur perintah/runtime saat ini tidak dapat menyelesaikan nilai sebenarnya.- Dalam mode HTTP,
signingSecretStatusdisertakan; dalam Socket Mode, pasangan yang diperlukan adalahbotTokenStatus+appTokenStatus.
Actions dan gate
Actions Slack dikendalikan olehchannels.slack.actions.*.
Grup action yang tersedia dalam tooling Slack saat ini:
| Grup | Default |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info, dan emoji-list.
Kontrol akses dan routing
- Kebijakan DM
- Kebijakan channel
- Mention dan pengguna channel
channels.slack.dmPolicy mengontrol akses DM (legacy: channels.slack.dm.policy):pairing(default)allowlistopen(memerlukanchannels.slack.allowFromuntuk menyertakan"*"; legacy:channels.slack.dm.allowFrom)disabled
dm.enabled(default true)channels.slack.allowFrom(disarankan)dm.allowFrom(legacy)dm.groupEnabled(default false untuk DM grup)dm.groupChannels(allowlist MPIM opsional)
channels.slack.accounts.default.allowFromhanya berlaku untuk akundefault.- Akun bernama mewarisi
channels.slack.allowFromsaatallowFrommilik mereka sendiri tidak diatur. - Akun bernama tidak mewarisi
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Threading, session, dan tag balasan
- DM dirutekan sebagai
direct; channel sebagaichannel; MPIM sebagaigroup. - Dengan default
session.dmScope=main, DM Slack digabungkan ke session utama agent. - Session channel:
agent:<agentId>:slack:channel:<channelId>. - Balasan thread dapat membuat sufiks session thread (
:thread:<threadTs>) jika berlaku. - Default
channels.slack.thread.historyScopeadalahthread; defaultthread.inheritParentadalahfalse. channels.slack.thread.initialHistoryLimitmengontrol berapa banyak pesan thread yang sudah ada diambil ketika session thread baru dimulai (default20; atur0untuk menonaktifkan).channels.slack.thread.requireExplicitMention(defaultfalse): saattrue, menekan mention thread implisit sehingga bot hanya merespons mention@boteksplisit di dalam thread, bahkan ketika bot sudah berpartisipasi dalam thread tersebut. Tanpa ini, balasan dalam thread yang diikuti bot melewati gaterequireMention.
channels.slack.replyToMode:off|first|all|batched(defaultoff)channels.slack.replyToModeByChatType: perdirect|group|channel- fallback legacy untuk chat langsung:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" menonaktifkan semua threading balasan di Slack, termasuk tag [[reply_to_*]] yang eksplisit. Ini berbeda dari Telegram, di mana tag eksplisit tetap dihormati dalam mode "off". Perbedaan ini mencerminkan model threading platform: thread Slack menyembunyikan pesan dari channel, sedangkan balasan Telegram tetap terlihat dalam alur chat utama.
Reaksi ack
ackReaction mengirim emoji pengakuan saat OpenClaw sedang memproses pesan inbound.
Urutan resolusi:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- fallback emoji identitas agent (
agents.list[].identity.emoji, jika tidak"👀")
- Slack mengharapkan shortcode (misalnya
"eyes"). - Gunakan
""untuk menonaktifkan reaksi untuk akun Slack atau secara global.
Streaming teks
channels.slack.streaming mengontrol perilaku pratinjau langsung:
off: nonaktifkan streaming pratinjau langsung.partial(default): ganti teks pratinjau dengan output parsial terbaru.block: tambahkan pembaruan pratinjau yang dipotong per chunk.progress: tampilkan teks status progres saat menghasilkan, lalu kirim teks final.
channels.slack.streaming.nativeTransport mengontrol streaming teks native Slack saat channels.slack.streaming.mode adalah partial (default: true).
- Thread balasan harus tersedia agar streaming teks native dan status thread asisten Slack dapat muncul. Pemilihan thread tetap mengikuti
replyToMode. - Root channel dan group chat tetap dapat menggunakan pratinjau draf normal saat streaming native tidak tersedia.
- DM Slack tingkat atas tetap off-thread secara default, sehingga tidak menampilkan pratinjau bergaya thread; gunakan balasan thread atau
typingReactionjika Anda ingin progres terlihat di sana. - Payload media dan non-teks akan fallback ke pengiriman normal.
- Jika streaming gagal di tengah balasan, OpenClaw akan fallback ke pengiriman normal untuk payload yang tersisa.
channels.slack.streamMode(replace | status_final | append) dimigrasikan otomatis kechannels.slack.streaming.mode.- boolean
channels.slack.streamingdimigrasikan otomatis kechannels.slack.streaming.modedanchannels.slack.streaming.nativeTransport. channels.slack.nativeStreaminglegacy dimigrasikan otomatis kechannels.slack.streaming.nativeTransport.
Fallback reaksi mengetik
typingReaction menambahkan reaksi sementara ke pesan Slack inbound saat OpenClaw memproses balasan, lalu menghapusnya saat proses selesai. Ini paling berguna di luar balasan thread, yang menggunakan indikator status default “is typing…”.
Urutan resolusi:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack mengharapkan shortcode (misalnya
"hourglass_flowing_sand"). - Reaksi ini bersifat best-effort dan pembersihan diupayakan secara otomatis setelah balasan atau jalur kegagalan selesai.
Media, chunking, dan pengiriman
Lampiran inbound
Lampiran inbound
Lampiran file Slack diunduh dari URL privat yang di-host Slack (alur permintaan yang diautentikasi token) dan ditulis ke media store ketika pengambilan berhasil dan batas ukuran mengizinkan.Batas ukuran inbound runtime default adalah
20MB kecuali ditimpa oleh channels.slack.mediaMaxMb.Teks dan file outbound
Teks dan file outbound
- chunk teks menggunakan
channels.slack.textChunkLimit(default 4000) channels.slack.chunkMode="newline"mengaktifkan pemisahan dengan paragraf terlebih dahulu- pengiriman file menggunakan API upload Slack dan dapat menyertakan balasan thread (
thread_ts) - batas media outbound mengikuti
channels.slack.mediaMaxMbsaat dikonfigurasi; jika tidak, pengiriman channel menggunakan default jenis MIME dari pipeline media
Target pengiriman
Target pengiriman
Target eksplisit yang disarankan:
user:<id>untuk DMchannel:<id>untuk channel
Perintah dan perilaku slash
Slash command muncul di Slack sebagai satu perintah terkonfigurasi atau beberapa perintah native. Konfigurasikanchannels.slack.slashCommand untuk mengubah default perintah:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
channels.slack.commands.native: true atau commands.native: true pada konfigurasi global.
- Mode otomatis perintah native adalah off untuk Slack sehingga
commands.native: "auto"tidak mengaktifkan perintah native Slack.
- hingga 5 opsi: blok tombol
- 6-100 opsi: menu pilih statis
- lebih dari 100 opsi: external select dengan pemfilteran opsi async saat handler opsi interaktivitas tersedia
- batas Slack terlampaui: nilai opsi yang dienkode fallback ke tombol
agent:<agentId>:slack:slash:<userId> dan tetap merutekan eksekusi perintah ke session percakapan target menggunakan CommandTargetSessionKey.
Balasan interaktif
Slack dapat merender kontrol balasan interaktif yang ditulis agent, tetapi fitur ini dinonaktifkan secara default. Aktifkan secara global:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan directive Slack Block Kit ke sistem tombol mereka sendiri.
- Nilai callback interaktif adalah token opak yang dihasilkan OpenClaw, bukan nilai mentah yang ditulis agent.
- Jika blok interaktif yang dihasilkan melebihi batas Slack Block Kit, OpenClaw akan fallback ke balasan teks asli alih-alih mengirim payload blok yang tidak valid.
Persetujuan exec di Slack
Slack dapat bertindak sebagai klien persetujuan native dengan tombol dan interaksi interaktif, alih-alih fallback ke UI Web atau terminal.- Persetujuan exec menggunakan
channels.slack.execApprovals.*untuk routing DM/channel native. - Persetujuan plugin tetap dapat diselesaikan melalui permukaan tombol native Slack yang sama saat permintaan sudah masuk ke Slack dan jenis id persetujuan adalah
plugin:. - Otorisasi approver tetap ditegakkan: hanya pengguna yang diidentifikasi sebagai approver yang dapat menyetujui atau menolak permintaan melalui Slack.
interactivity diaktifkan di pengaturan aplikasi Slack Anda, prompt persetujuan dirender sebagai tombol Block Kit langsung di percakapan.
Saat tombol tersebut ada, tombol itu menjadi UX persetujuan utama; OpenClaw
seharusnya hanya menyertakan perintah /approve manual saat hasil tool menyatakan persetujuan chat
tidak tersedia atau persetujuan manual adalah satu-satunya jalur.
Path konfigurasi:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(opsional; fallback kecommands.ownerAllowFrombila memungkinkan)channels.slack.execApprovals.target(dm|channel|both, default:dm)agentFilter,sessionFilter
enabled tidak diatur atau "auto" dan setidaknya satu
approver berhasil diselesaikan. Atur enabled: false untuk menonaktifkan Slack sebagai klien persetujuan native secara eksplisit.
Atur enabled: true untuk memaksa persetujuan native aktif saat approver berhasil diselesaikan.
Perilaku default tanpa konfigurasi persetujuan exec Slack yang eksplisit:
approvals.exec bersifat terpisah. Gunakan itu hanya saat prompt persetujuan exec juga harus
dirutekan ke chat lain atau target out-of-band yang eksplisit. Penerusan bersama approvals.plugin juga
terpisah; tombol native Slack tetap dapat menyelesaikan persetujuan plugin saat permintaan tersebut sudah masuk
ke Slack.
/approve di chat yang sama juga berfungsi di channel dan DM Slack yang sudah mendukung perintah. Lihat Exec approvals untuk model penerusan persetujuan lengkap.
Event dan perilaku operasional
- Edit/hapus pesan/thread broadcast dipetakan ke system event.
- Event tambah/hapus reaksi dipetakan ke system event.
- Event anggota masuk/keluar, channel dibuat/diubah namanya, dan tambah/hapus pin dipetakan ke system event.
channel_id_changeddapat memigrasikan key konfigurasi channel saatconfigWritesdiaktifkan.- Metadata topik/tujuan channel diperlakukan sebagai konteks tidak tepercaya dan dapat disuntikkan ke konteks routing.
- Pemula thread dan penyemaian konteks riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku.
- Aksi blok dan interaksi modal mengeluarkan system event terstruktur
Slack interaction: ...dengan field payload yang kaya:- aksi blok: nilai terpilih, label, nilai picker, dan metadata
workflow_* - event modal
view_submissiondanview_closeddengan metadata channel yang dirutekan dan input formulir
- aksi blok: nilai terpilih, label, nilai picker, dan metadata
Pointer referensi konfigurasi
Referensi utama:-
Referensi konfigurasi - Slack
Field Slack dengan sinyal tinggi:
- mode/auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - akses DM:
dm.enabled,dmPolicy,allowFrom(legacy:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - toggle kompatibilitas:
dangerouslyAllowNameMatching(break-glass; biarkan nonaktif kecuali diperlukan) - akses channel:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - threading/riwayat:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - pengiriman:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport - operasi/fitur:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- mode/auth:
Pemecahan masalah
Tidak ada balasan di channel
Tidak ada balasan di channel
Periksa, secara berurutan:
groupPolicy- allowlist channel (
channels.slack.channels) requireMention- allowlist
usersper channel
Pesan DM diabaikan
Pesan DM diabaikan
Periksa:
channels.slack.dm.enabledchannels.slack.dmPolicy(atau legacychannels.slack.dm.policy)- persetujuan pairing / entri allowlist
Socket mode tidak terhubung
Socket mode tidak terhubung
Validasi token bot + app dan pengaktifan Socket Mode di pengaturan aplikasi Slack.Jika
openclaw channels status --probe --json menampilkan botTokenStatus atau
appTokenStatus: "configured_unavailable", akun Slack tersebut
telah dikonfigurasi tetapi runtime saat ini tidak dapat menyelesaikan nilai
yang didukung SecretRef.Mode HTTP tidak menerima event
Mode HTTP tidak menerima event
Validasi:
- signing secret
- path webhook
- URL Permintaan Slack (Events + Interactivity + Slash Commands)
webhookPathunik per akun HTTP
signingSecretStatus: "configured_unavailable" muncul di snapshot
akun, akun HTTP telah dikonfigurasi tetapi runtime saat ini tidak dapat
menyelesaikan signing secret yang didukung SecretRef.Perintah native/slash tidak berjalan
Perintah native/slash tidak berjalan
Verifikasi apakah yang Anda maksud adalah:
- mode perintah native (
channels.slack.commands.native: true) dengan slash command yang cocok terdaftar di Slack - atau mode slash command tunggal (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups dan allowlist channel/pengguna.