Pairing
DM Slack default menggunakan mode pairing.
Slash commands
Perilaku command native dan katalog command.
Channel troubleshooting
Diagnostik lintas-channel dan playbook perbaikan.
Memilih Socket Mode atau HTTP Request URLs
Kedua transport siap produksi dan mencapai paritas fitur untuk perpesanan, slash commands, App Home, dan interaktivitas. Pilih berdasarkan bentuk deployment, bukan fitur.| Hal | Socket Mode (default) | HTTP Request URLs |
|---|---|---|
| URL Gateway publik | Tidak diperlukan | Diperlukan (DNS, TLS, reverse proxy, atau tunnel) |
| Jaringan outbound | WSS outbound ke wss-primary.slack.com harus dapat dijangkau | Tidak ada WS outbound; hanya HTTPS inbound |
| Token yang dibutuhkan | Bot token + App-Level Token dengan connections:write | Bot token + Signing Secret |
| Laptop dev / di balik firewall | Berfungsi apa adanya | Membutuhkan tunnel publik (ngrok, Cloudflare Tunnel, Tailscale Funnel) atau Gateway staging |
| Penskalaan horizontal | Satu sesi Socket Mode per aplikasi per host; beberapa Gateway membutuhkan aplikasi Slack terpisah | Handler POST tanpa state; beberapa replika Gateway dapat berbagi satu aplikasi di balik load balancer |
| Multi-akun pada satu Gateway | Didukung; setiap akun membuka WS sendiri | Didukung; setiap akun membutuhkan webhookPath unik (default /slack/events) agar registrasi tidak bertabrakan |
| Transport slash command | Dikirim melalui koneksi WS; slash_commands[].url diabaikan | Slack mengirim POST ke slash_commands[].url; field diperlukan agar command dikirim |
| Penandatanganan request | Tidak digunakan (auth adalah App-Level Token) | Slack menandatangani setiap request; OpenClaw memverifikasi dengan signingSecret |
| Pemulihan saat koneksi putus | Reconnect otomatis Slack SDK diaktifkan; OpenClaw juga memulai ulang sesi Socket Mode yang gagal dengan backoff terbatas. Tuning transport pong-timeout berlaku. | Tidak ada koneksi persisten yang putus; retry dilakukan per-request dari Slack |
Pilih Socket Mode untuk host Gateway tunggal, laptop dev, dan jaringan on-prem yang dapat menjangkau
*.slack.com secara outbound tetapi tidak dapat menerima HTTPS inbound.Pilih HTTP Request URLs saat menjalankan beberapa replika Gateway di balik load balancer, saat WSS outbound diblokir tetapi HTTPS inbound diizinkan, atau saat Anda sudah menghentikan Slack webhooks di reverse proxy.Mode relay
Mode relay memisahkan ingress Slack dari gateway OpenClaw. Router tepercaya memiliki satu koneksi Slack Socket Mode, memilih gateway tujuan, dan meneruskan event bertipe melalui websocket terautentikasi. Gateway tetap menggunakan bot token-nya untuk panggilan Slack Web API outbound.wss:// kecuali menargetkan localhost. Perlakukan bearer token dan
tabel rute router sebagai bagian dari batas otorisasi Slack: event yang dirutekan masuk ke
handler pesan Slack normal sebagai aktivasi terotorisasi. slack_identity yang disediakan router
dalam frame hello websocket dapat menetapkan username dan ikon outbound default; identitas
eksplisit yang diberikan pemanggil tetap menang. Koneksi relay melakukan reconnect dengan
timing backoff terbatas yang sama seperti Socket Mode dan menghapus identitas yang disediakan router setiap kali
terputus.
Instal
Instal Slack sebelum mengonfigurasi channel:plugins install mendaftarkan dan mengaktifkan plugin. Plugin tetap tidak melakukan apa pun sampai Anda mengonfigurasi aplikasi Slack dan pengaturan channel di bawah. Lihat Plugins untuk perilaku plugin umum dan aturan instalasi.
Setup cepat
- Socket Mode (default)
- HTTP Request URLs
Create a new Slack app
Buka api.slack.com/apps → Create New App → From a manifest → pilih workspace Anda → tempel salah satu manifest di bawah → Next → Create.Setelah Slack membuat aplikasi:
Recommended cocok dengan set fitur lengkap plugin Slack: App Home, slash commands, file, reaction, pin, DM grup, serta pembacaan emoji/usergroup. Pilih Minimal ketika kebijakan workspace membatasi scope — ini mencakup DM, riwayat channel/grup, mention, dan slash commands tetapi menghapus file, reaction, pin, DM grup (
mpim:*), emoji:read, dan usergroups:read. Lihat Checklist manifest dan scope untuk alasan per-scope dan opsi aditif seperti slash commands tambahan.- Basic Information -> App-Level Tokens -> Generate Token and Scopes: tambahkan
connections:write, simpan, salin App-Level Token. - Install App -> Install to Workspace: salin Bot User OAuth Token.
Penyesuaian transport Mode Socket
OpenClaw menetapkan timeout pong klien Slack SDK ke 15 detik secara default untuk Mode Socket. Timpa pengaturan transport hanya ketika Anda membutuhkan penyesuaian khusus workspace atau host:clientPingTimeout adalah waktu tunggu pong setelah SDK mengirim ping klien; serverPingTimeout adalah waktu tunggu untuk ping server Slack. Pesan dan event aplikasi tetap menjadi status aplikasi, bukan sinyal keaktifan transport.
Catatan:
socketModediabaikan dalam mode URL Permintaan HTTP.- Pengaturan dasar
channels.slack.socketModeberlaku untuk semua akun Slack kecuali ditimpa. Penimpaan per akun menggunakanchannels.slack.accounts.<accountId>.socketMode; karena ini adalah penimpaan objek, sertakan setiap kolom penyesuaian socket yang Anda inginkan untuk akun tersebut. - Hanya
clientPingTimeoutyang memiliki default OpenClaw (15000).serverPingTimeoutdanpingPongLoggingEnabledditeruskan ke Slack SDK hanya ketika dikonfigurasi. - Backoff restart Mode Socket dimulai sekitar 2 detik dan dibatasi sekitar 30 detik. Kegagalan start, start-wait, dan disconnect yang dapat dipulihkan akan dicoba ulang hingga channel berhenti. Error akun dan kredensial permanen seperti autentikasi tidak valid, token dicabut, atau cakupan hilang akan gagal cepat alih-alih mencoba ulang selamanya.
Daftar periksa manifes dan cakupan
Manifes aplikasi Slack dasar sama untuk Mode Socket dan URL Permintaan HTTP. Hanya bloksettings (dan url perintah slash) yang berbeda.
Manifes dasar (default Mode Socket):
settings dengan varian HTTP dan tambahkan url ke setiap perintah slash. URL publik wajib:
Pengaturan manifes tambahan
Tampilkan berbagai fitur yang memperluas default di atas. Manifes default mengaktifkan tab Beranda Slack App Home dan berlangganan keapp_home_opened. Saat anggota workspace membuka tab Beranda, OpenClaw menerbitkan tampilan Beranda default yang aman dengan views.publish; tidak ada payload percakapan atau konfigurasi privat yang disertakan. Tab Pesan tetap diaktifkan untuk DM Slack. Manifes juga mengaktifkan utas asisten Slack dengan features.assistant_view, assistant:write, assistant_thread_started, dan assistant_thread_context_changed; utas asisten dirutekan ke sesi utas OpenClaw tersendiri dan menjaga konteks utas yang disediakan Slack tetap tersedia bagi agen.
Optional native slash commands
Optional native slash commands
Beberapa perintah slash native dapat digunakan sebagai pengganti satu perintah yang dikonfigurasi, dengan beberapa nuansa:
- Gunakan
/agentstatussebagai pengganti/statuskarena perintah/statusdicadangkan. - Tidak lebih dari 25 perintah slash dapat tersedia sekaligus.
features.slash_commands yang ada dengan subset dari perintah yang tersedia:- Socket Mode (default)
- HTTP Request URLs
Optional user-token scopes (read operations)
Optional user-token scopes (read operations)
Jika Anda mengonfigurasi
channels.slack.userToken, cakupan 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+appTokenwajib untuk Socket Mode.- Mode HTTP memerlukan
botToken+signingSecret. - Mode relay memerlukan
botTokensertarelay.url,relay.authToken, danrelay.gatewayId; mode ini tidak menggunakan token aplikasi atau signing secret. botToken,appToken,signingSecret,relay.authToken, danuserTokenmenerima string teks biasa atau objek SecretRef.- Token konfigurasi menimpa fallback env.
- Fallback env
SLACK_BOT_TOKEN/SLACK_APP_TOKENhanya berlaku untuk akun default. userTokenhanya melalui konfigurasi (tanpa fallback env) dan default ke perilaku hanya-baca (userTokenReadOnly: true).
- Inspeksi akun Slack melacak kolom
*Sourcedan*Statusper kredensial (botToken,appToken,signingSecret,userToken). - Status adalah
available,configured_unavailable, ataumissing. configured_unavailableberarti akun dikonfigurasi melalui SecretRef atau sumber rahasia non-inline lainnya, tetapi jalur perintah/runtime saat ini tidak dapat menyelesaikan nilai aktualnya.- Dalam mode HTTP,
signingSecretStatusdisertakan; dalam Socket Mode, pasangan wajibnya adalahbotTokenStatus+appTokenStatus.
Aksi dan gate
Aksi Slack dikendalikan olehchannels.slack.actions.*.
Grup aksi yang tersedia dalam tooling Slack saat ini:
| Grup | Default |
|---|---|
| messages | diaktifkan |
| reactions | diaktifkan |
| pins | diaktifkan |
| memberInfo | diaktifkan |
| emojiList | diaktifkan |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info, dan emoji-list. download-file menerima ID file Slack yang ditampilkan dalam placeholder file masuk dan mengembalikan pratinjau gambar untuk gambar atau metadata file lokal untuk jenis file lainnya.
Kontrol akses dan perutean
- DM policy
- Channel policy
- Mentions and channel users
channels.slack.dmPolicy mengontrol akses DM. channels.slack.allowFrom adalah daftar izin DM kanonis.pairing(default)allowlistopen(mengharuskanchannels.slack.allowFrommenyertakan"*")disabled
dm.enabled(default true)channels.slack.allowFromdm.allowFrom(lama)dm.groupEnabled(DM grup default false)dm.groupChannels(daftar izin MPIM opsional)
channels.slack.accounts.default.allowFromhanya berlaku untuk akundefault.- Akun bernama mewarisi
channels.slack.allowFromketikaallowFrommiliknya sendiri belum disetel. - Akun bernama tidak mewarisi
channels.slack.accounts.default.allowFrom.
channels.slack.dm.policy dan channels.slack.dm.allowFrom lama masih dibaca untuk kompatibilitas. openclaw doctor --fix memigrasikannya ke dmPolicy dan allowFrom jika dapat melakukannya tanpa mengubah akses.Pemasangan di DM menggunakan openclaw pairing approve slack <code>.Thread, sesi, dan tag balasan
- DM dirutekan sebagai
direct; channel sebagaichannel; MPIM sebagaigroup. - Pengikatan rute Slack menerima ID peer mentah plus bentuk target Slack seperti
channel:C12345678,user:U12345678, dan<@U12345678>. - Dengan default
session.dmScope=main, DM Slack diciutkan ke sesi utama agen. - Sesi channel:
agent:<agentId>:slack:channel:<channelId>. - Pesan channel level atas biasa tetap berada di sesi per channel, bahkan ketika
replyToModebukanoff. - Balasan thread Slack menggunakan
thread_tsinduk Slack untuk sufiks sesi (:thread:<threadTs>), bahkan ketika thread balasan keluar dinonaktifkan denganreplyToMode="off". - OpenClaw menanamkan root channel level atas yang memenuhi syarat ke dalam
agent:<agentId>:slack:channel:<channelId>:thread:<rootTs>ketika root tersebut diharapkan memulai thread Slack yang terlihat, sehingga root dan balasan thread berikutnya berbagi satu sesi OpenClaw. Ini berlaku untuk eventapp_mention, kecocokan bot eksplisit atau pola penyebutan terkonfigurasi, dan channelrequireMention: falsedenganreplyToModenon-off. - Default
channels.slack.thread.historyScopeadalahthread; defaultthread.inheritParentadalahfalse. channels.slack.thread.initialHistoryLimitmengontrol berapa banyak pesan thread yang sudah ada yang diambil ketika sesi thread baru dimulai (default20; setel0untuk menonaktifkan).channels.slack.thread.requireExplicitMention(defaultfalse): ketikatrue, menekan penyebutan thread implisit sehingga bot hanya merespons penyebutan@boteksplisit di dalam thread, bahkan ketika bot sudah berpartisipasi dalam thread tersebut. Tanpa ini, balasan dalam thread yang diikuti bot melewati gerbangrequireMention.
channels.slack.replyToMode:off|first|all|batched(defaultoff)channels.slack.replyToModeByChatType: perdirect|group|channel- fallback lama untuk chat langsung:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
message, setel replyBroadcast: true dengan action: "send" dan threadId atau replyTo untuk meminta Slack juga menyiarkan balasan thread ke channel induk. Ini dipetakan ke flag reply_broadcast chat.postMessage Slack dan hanya didukung untuk pengiriman teks atau Block Kit, bukan unggahan media.
Ketika panggilan alat message berjalan di dalam thread Slack dan menargetkan channel yang sama, OpenClaw biasanya mewarisi thread Slack saat ini sesuai replyToMode. Setel topLevel: true pada action: "send" atau action: "upload-file" untuk memaksa pesan channel induk baru sebagai gantinya. threadId: null diterima sebagai opt-out level atas yang sama.
replyToMode="off" menonaktifkan thread balasan Slack keluar, termasuk tag [[reply_to_*]] eksplisit. Ini tidak meratakan sesi thread Slack masuk: pesan yang sudah diposting di dalam thread Slack tetap dirutekan ke sesi :thread:<threadTs>. Ini berbeda dari Telegram, tempat tag eksplisit tetap dihormati dalam mode "off". Thread Slack menyembunyikan pesan dari channel sementara balasan Telegram tetap terlihat sebaris.Reaksi ack
ackReaction mengirim emoji pengakuan saat OpenClaw memproses pesan masuk. ackReactionScope menentukan kapan emoji itu benar-benar dikirim.
Emoji (ackReaction)
Urutan resolusi:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- fallback emoji identitas agen (
agents.list[].identity.emoji, atau"eyes"/ 👀)
- Slack mengharapkan shortcode (misalnya
"eyes"). - Gunakan
""untuk menonaktifkan reaksi untuk akun Slack atau secara global.
Cakupan (messages.ackReactionScope)
Provider Slack membaca cakupan dari messages.ackReactionScope (default "group-mentions"). Saat ini tidak ada penimpaan level akun Slack atau level channel Slack; nilainya bersifat global untuk Gateway.
Nilai:
"all": bereaksi di DM dan grup."direct": bereaksi hanya di DM."group-all": bereaksi pada setiap pesan grup (tanpa DM)."group-mentions"(default): bereaksi di grup, tetapi hanya ketika bot disebut (atau di mentionable grup yang ikut serta). DM dikecualikan."off"/"none": jangan pernah bereaksi.
Cakupan default (
"group-mentions") tidak memicu reaksi ack di pesan langsung. Untuk melihat ackReaction terkonfigurasi (misalnya "eyes") pada DM Slack masuk, setel messages.ackReactionScope ke "direct" atau "all". messages.ackReactionScope dibaca saat startup provider Slack, sehingga restart gateway diperlukan agar perubahan berlaku.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 dalam potongan.progress: tampilkan teks status progres saat menghasilkan, lalu kirim teks final.streaming.preview.toolProgress: ketika pratinjau draf aktif, rutekan pembaruan alat/progres ke pesan pratinjau yang sama yang diedit (default:true). Setelfalseuntuk mempertahankan pesan alat/progres terpisah.streaming.preview.commandText/streaming.progress.commandText: setel kestatusuntuk mempertahankan baris progres alat yang ringkas sambil menyembunyikan teks command/exec mentah (default:raw).
channels.slack.streaming.nativeTransport mengontrol streaming teks native Slack ketika channels.slack.streaming.mode adalah partial (default: true).
Kartu tugas progres native Slack bersifat opt-in untuk mode progres. Setel channels.slack.streaming.progress.nativeTaskCards ke true dengan channels.slack.streaming.mode="progress" untuk mengirim kartu rencana/tugas native Slack saat pekerjaan berjalan, lalu memperbarui kartu tugas yang sama saat selesai. Tanpa flag ini, mode progres mempertahankan perilaku pratinjau draf portabel.
- Thread balasan harus tersedia agar streaming teks native dan status thread asisten Slack muncul. Pemilihan thread tetap mengikuti
replyToMode. - Root channel, chat grup, dan DM level atas masih dapat menggunakan pratinjau draf normal ketika streaming native tidak tersedia atau tidak ada thread balasan.
- DM Slack level atas tetap di luar thread secara default, sehingga tidak menampilkan pratinjau stream/status native bergaya thread milik Slack; OpenClaw memposting dan mengedit pratinjau draf di DM sebagai gantinya.
- Media dan payload non-teks fallback ke pengiriman normal.
- Final media/error membatalkan edit pratinjau tertunda; final teks/blok yang memenuhi syarat hanya di-flush ketika dapat mengedit pratinjau di tempat.
- Jika streaming gagal di tengah balasan, OpenClaw fallback ke pengiriman normal untuk payload yang tersisa.
channels.slack.streamMode(replace | status_final | append) adalah alias runtime lama untukchannels.slack.streaming.mode.- boolean
channels.slack.streamingadalah alias runtime lama untukchannels.slack.streaming.modedanchannels.slack.streaming.nativeTransport. channels.slack.nativeStreaminglama adalah alias runtime untukchannels.slack.streaming.nativeTransport.- Jalankan
openclaw doctor --fixuntuk menulis ulang konfigurasi streaming Slack tersimpan ke kunci kanonis.
Fallback reaksi mengetik
typingReaction menambahkan reaksi sementara ke pesan Slack masuk saat OpenClaw memproses balasan, lalu menghapusnya ketika run selesai. Ini paling berguna di luar balasan thread, yang menggunakan indikator status default “sedang mengetik…”.
Urutan resolusi:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack mengharapkan shortcode (misalnya
"hourglass_flowing_sand"). - Reaksi bersifat best-effort dan pembersihan dicoba secara otomatis setelah jalur balasan atau kegagalan selesai.
Media, pemotongan, dan pengiriman
Lampiran masuk
Lampiran masuk
Lampiran file Slack diunduh dari URL privat yang dihosting Slack (alur permintaan terautentikasi token) dan ditulis ke penyimpanan media ketika pengambilan berhasil dan batas ukuran mengizinkan. Placeholder file menyertakan
fileId Slack sehingga agen dapat mengambil file asli dengan download-file.Unduhan menggunakan timeout idle dan total yang dibatasi. Jika pengambilan file Slack macet atau gagal, OpenClaw tetap memproses pesan dan fallback ke placeholder file.Batas ukuran runtime masuk default ke 20MB kecuali ditimpa oleh channels.slack.mediaMaxMb.Teks dan file keluar
Teks dan file keluar
- potongan teks menggunakan
channels.slack.textChunkLimit(default 4000) channels.slack.chunkMode="newline"mengaktifkan pemisahan yang mengutamakan paragraf- pengiriman file menggunakan API unggah Slack dan dapat menyertakan balasan thread (
thread_ts) - batas media keluar mengikuti
channels.slack.mediaMaxMbketika dikonfigurasi; jika tidak, pengiriman channel menggunakan default jenis MIME dari pipeline media
Target pengiriman
Target pengiriman
Target eksplisit yang disukai:
user:<id>untuk DMchannel:<id>untuk channel
Perintah dan perilaku slash
Perintah slash 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 di konfigurasi global sebagai gantinya.
- Mode otomatis perintah native nonaktif 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: pilih eksternal dengan pemfilteran opsi asinkron ketika handler opsi interaktivitas tersedia
- batas Slack terlampaui: nilai opsi yang dikodekan fallback ke tombol
agent:<agentId>:slack:slash:<userId> dan tetap merutekan eksekusi perintah ke sesi percakapan target menggunakan CommandTargetSessionKey.
Balasan interaktif
Slack dapat merender kontrol balasan interaktif yang dibuat agen, tetapi fitur ini dinonaktifkan secara default. Untuk output agen, CLI, dan Plugin baru, utamakan tombolpresentation bersama atau blok pilihan. Keduanya menggunakan jalur interaksi Slack
yang sama sekaligus menurun fungsinya di saluran lain.
Aktifkan secara global:
[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
compileSlackInteractiveReplies(...)parseSlackOptionsLine(...)isSlackInteractiveRepliesEnabled(...)buildSlackInteractiveBlocks(...)
presentation dan buildSlackPresentationBlocks(...) untuk kontrol
baru yang dirender Slack.
Catatan:
- Ini adalah UI lama khusus Slack. Saluran lain tidak menerjemahkan direktif Slack Block Kit menjadi sistem tombol mereka sendiri.
- Nilai callback interaktif adalah token buram yang dihasilkan OpenClaw, bukan nilai mentah yang dibuat agen.
- Jika blok interaktif yang dihasilkan akan melampaui batas Slack Block Kit, OpenClaw kembali ke balasan teks asli alih-alih mengirim payload blok yang tidak valid.
Pengiriman modal milik Plugin
Plugin Slack yang mendaftarkan handler interaktif juga dapat menerima peristiwa siklus hidup modalview_submission dan view_closed sebelum OpenClaw memadatkan
payload untuk peristiwa sistem yang terlihat agen. Gunakan salah satu pola perutean
ini saat membuka modal Slack:
- Atur
callback_idkeopenclaw:<namespace>:<payload>. - Atau pertahankan
callback_idyang ada dan letakkanpluginInteractiveData: "<namespace>:<payload>"dalamprivate_metadatamodal.
ctx.interaction.kind sebagai view_submission atau
view_closed, inputs yang dinormalisasi, dan objek mentah penuh stateValues dari
Slack. Perutean hanya callback-id cukup untuk memanggil handler Plugin; sertakan
field perutean pengguna/sesi private_metadata modal yang ada saat
modal juga harus menghasilkan peristiwa sistem yang terlihat agen. Agen menerima
peristiwa sistem Slack interaction: ... yang ringkas dan disunting. Jika handler mengembalikan
systemEvent.summary, systemEvent.reference, atau systemEvent.data, field
tersebut disertakan dalam peristiwa ringkas itu sehingga agen dapat merujuk
penyimpanan milik Plugin tanpa melihat payload formulir lengkap.
Persetujuan native di Slack
Slack dapat bertindak sebagai klien persetujuan native dengan tombol dan interaksi interaktif, alih-alih kembali ke UI Web atau terminal.- Persetujuan exec dan Plugin dapat dirender sebagai prompt Slack-native Block Kit.
channels.slack.execApprovals.*tetap menjadi konfigurasi pengaktifan klien persetujuan exec native dan perutean DM/saluran.- DM persetujuan exec menggunakan
channels.slack.execApprovals.approversataucommands.ownerAllowFrom. - Persetujuan Plugin menggunakan tombol Slack-native saat Slack diaktifkan sebagai klien persetujuan native untuk sesi asal, atau saat
approvals.pluginmerutekan ke sesi Slack asal atau target Slack. - DM persetujuan Plugin menggunakan pemberi persetujuan Plugin Slack dari
channels.slack.allowFrom,allowFromakun bernama, atau rute default akun. - Otorisasi pemberi persetujuan tetap diberlakukan: pemberi persetujuan khusus exec tidak dapat menyetujui permintaan Plugin kecuali mereka juga merupakan pemberi persetujuan Plugin.
interactivity diaktifkan di pengaturan aplikasi Slack Anda, prompt persetujuan dirender sebagai tombol Block Kit langsung dalam percakapan.
Saat tombol tersebut ada, tombol itu adalah UX persetujuan utama; OpenClaw
sebaiknya hanya menyertakan perintah manual /approve saat hasil alat menyatakan persetujuan chat
tidak tersedia atau persetujuan manual adalah satu-satunya jalur.
Jalur konfigurasi:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(opsional; kembali kecommands.ownerAllowFrombila memungkinkan)channels.slack.execApprovals.target(dm|channel|both, default:dm)agentFilter,sessionFilter
enabled tidak diatur atau "auto" dan setidaknya satu
pemberi persetujuan exec berhasil di-resolve. Slack juga dapat menangani persetujuan Plugin native melalui jalur klien native
ini saat pemberi persetujuan Plugin Slack berhasil di-resolve dan permintaan cocok dengan filter klien native. Atur
enabled: false untuk menonaktifkan Slack sebagai klien persetujuan native secara eksplisit. Atur enabled: true untuk
memaksa persetujuan native aktif saat pemberi persetujuan berhasil di-resolve. Menonaktifkan persetujuan exec Slack tidak menonaktifkan
pengiriman persetujuan Plugin Slack native yang diaktifkan melalui approvals.plugin; pengiriman persetujuan Plugin
menggunakan pemberi persetujuan Plugin Slack sebagai gantinya.
Perilaku default tanpa konfigurasi persetujuan exec Slack eksplisit:
approvals.exec bersama bersifat terpisah. Gunakan hanya saat prompt persetujuan exec juga harus
dirutekan ke chat lain atau target out-of-band eksplisit. Penerusan approvals.plugin bersama juga
terpisah; pengiriman native Slack menekan fallback itu hanya saat Slack dapat menangani permintaan persetujuan Plugin
secara native.
/approve dalam chat yang sama juga berfungsi di saluran Slack dan DM yang sudah mendukung perintah. Lihat Persetujuan exec untuk model penerusan persetujuan lengkap.
Peristiwa dan perilaku operasional
- Edit/hapus pesan dipetakan ke peristiwa sistem.
- Siaran thread (balasan thread “Juga kirim ke saluran”) diproses sebagai pesan pengguna normal.
- Peristiwa tambah/hapus reaksi dipetakan ke peristiwa sistem.
- Peristiwa anggota bergabung/keluar, saluran dibuat/diubah nama, dan tambah/hapus pin dipetakan ke peristiwa sistem.
channel_id_changeddapat memigrasikan kunci konfigurasi saluran saatconfigWritesdiaktifkan.- Metadata topik/tujuan saluran diperlakukan sebagai konteks tidak tepercaya dan dapat disuntikkan ke konteks perutean.
- Pengisian awal konteks pembuka thread dan riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku.
- Aksi blok, shortcut, dan interaksi modal memancarkan peristiwa sistem
Slack interaction: ...terstruktur dengan field payload kaya:- aksi blok: nilai yang dipilih, label, nilai pemilih, dan metadata
workflow_* - shortcut global: metadata callback dan aktor, dirutekan ke sesi langsung aktor
- shortcut pesan: konteks callback, aktor, saluran, thread, dan pesan terpilih
- peristiwa modal
view_submissiondanview_closeddengan metadata saluran yang dirutekan dan input formulir
- aksi blok: nilai yang dipilih, label, nilai pemilih, dan metadata
Referensi konfigurasi
Referensi utama: Referensi konfigurasi - Slack.Field Slack bernilai tinggi
Field Slack bernilai tinggi
- mode/auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - akses DM:
dm.enabled,dmPolicy,allowFrom(lama:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - toggle kompatibilitas:
dangerouslyAllowNameMatching(break-glass; biarkan nonaktif kecuali diperlukan) - akses saluran:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - threading/riwayat:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - pengiriman:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport,streaming.preview.toolProgress - unfurl:
unfurlLinks(default:false),unfurlMediauntuk kontrol pratinjau tautan/mediachat.postMessage; aturunfurlLinks: trueuntuk memilih kembali ke pratinjau tautan - ops/fitur:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
Pemecahan masalah
Tidak ada balasan di saluran
Tidak ada balasan di saluran
Periksa, secara berurutan:Perintah berguna:
groupPolicy- allowlist saluran (
channels.slack.channels) — kunci harus berupa ID saluran (C12345678), bukan nama (#channel-name). Kunci berbasis nama gagal diam-diam di bawahgroupPolicy: "allowlist"karena perutean saluran secara default mengutamakan ID. Untuk menemukan ID: klik kanan saluran di Slack → Copy link — nilaiC...di akhir URL adalah ID saluran. requireMention- allowlist
usersper saluran messages.groupChat.visibleReplies: permintaan grup/saluran normal default ke"automatic". Jika Anda memilih"message_tool"dan log menampilkan teks asisten tanpa panggilanmessage(action=send), model melewatkan jalur alat pesan yang terlihat. Teks akhir tetap privat dalam mode ini; periksa log verbose gateway untuk metadata payload yang ditekan, atau atur ke"automatic"jika Anda ingin setiap balasan akhir asisten normal diposting melalui jalur lama.messages.groupChat.unmentionedInbound: jika nilainya"room_event", percakapan saluran yang diizinkan tanpa mention adalah konteks sekitar dan tetap senyap kecuali agen memanggil alatmessage. Lihat Peristiwa ruang sekitar.
Pesan DM diabaikan
Pesan DM diabaikan
Periksa:
channels.slack.dm.enabledchannels.slack.dmPolicy(atauchannels.slack.dm.policylama)- persetujuan pairing / entri allowlist (
dmPolicy: "open"tetap memerlukanchannels.slack.allowFrom: ["*"]) - DM grup menggunakan penanganan MPIM; aktifkan
channels.slack.dm.groupEnableddan, jika dikonfigurasi, sertakan MPIM dalamchannels.slack.dm.groupChannels - Peristiwa DM Slack Assistant: log verbose yang menyebutkan
drop message_changedbiasanya berarti Slack mengirim peristiwa thread Assistant yang diedit tanpa pengirim manusia yang dapat dipulihkan dalam metadata pesan
Socket mode tidak tersambung
Socket mode tidak tersambung
Validasi token bot + aplikasi dan pengaktifan Socket Mode di pengaturan aplikasi Slack.
App-Level Token memerlukan
connections:write, dan Bot User OAuth Token
bot token harus milik aplikasi/ruang kerja Slack yang sama dengan token aplikasi.Jika openclaw channels status --probe --json menampilkan botTokenStatus atau
appTokenStatus: "configured_unavailable", akun Slack
telah dikonfigurasi tetapi runtime saat ini tidak dapat me-resolve nilai berbasis SecretRef.Log seperti slack socket mode failed to start; retry ... adalah kegagalan
mulai yang dapat dipulihkan. Scope yang hilang, token yang dicabut, dan autentikasi tidak valid akan gagal cepat
sebagai gantinya. Log slack token mismatch ... berarti token bot dan token aplikasi
tampaknya milik aplikasi Slack yang berbeda; perbaiki kredensial aplikasi Slack.HTTP mode not receiving events
HTTP mode not receiving events
Validasi:
- signing secret
- jalur webhook
- URL Permintaan Slack (Events + Interactivity + Slash Commands)
webhookPathunik per akun HTTP- URL publik mengakhiri TLS dan meneruskan permintaan ke jalur Gateway
- jalur
request_urlaplikasi Slack sama persis denganchannels.slack.webhookPath(default/slack/events)
signingSecretStatus: "configured_unavailable" muncul dalam snapshot
akun, akun HTTP sudah dikonfigurasi tetapi runtime saat ini tidak dapat
menyelesaikan signing secret yang didukung SecretRef.Log berulang slack: webhook path ... already registered berarti dua akun HTTP
menggunakan webhookPath yang sama; berikan setiap akun jalur yang berbeda.Native/slash commands not firing
Native/slash commands not firing
Verifikasi apakah yang Anda maksud adalah:
- mode perintah native (
channels.slack.commands.native: true) dengan perintah slash yang sesuai terdaftar di Slack - atau mode perintah slash tunggal (
channels.slack.slashCommand.enabled: true)
commands.native: "auto" tidak mengaktifkan perintah native Slack; gunakan true dan buat perintah yang sesuai di aplikasi Slack. Dalam mode HTTP, setiap perintah slash Slack harus menyertakan URL Gateway. Dalam Socket Mode, payload perintah tiba melalui websocket dan Slack mengabaikan slash_commands[].url.Periksa juga commands.useAccessGroups, otorisasi DM, allowlist channel,
dan allowlist users per channel. Slack mengembalikan error ephemeral untuk
pengirim perintah slash yang diblokir, termasuk:This channel is not allowed.You are not authorized to use this command here.
Referensi vision lampiran
Slack dapat melampirkan media yang diunduh ke giliran agen ketika unduhan file Slack berhasil dan batas ukuran mengizinkan. File gambar dapat diteruskan melalui jalur pemahaman media atau langsung ke model balasan yang mendukung vision; file lain dipertahankan sebagai konteks file yang dapat diunduh, bukan diperlakukan sebagai input gambar.Jenis media yang didukung
| Jenis media | Sumber | Perilaku saat ini | Catatan |
|---|---|---|---|
| Gambar JPEG / PNG / GIF / WebP | URL file Slack | Diunduh dan dilampirkan ke giliran untuk penanganan yang mendukung vision | Batas per file: channels.slack.mediaMaxMb (default 20 MB) |
| File PDF | URL file Slack | Diunduh dan diekspos sebagai konteks file untuk alat seperti download-file atau pdf | Inbound Slack tidak mengonversi PDF menjadi input image-vision secara otomatis |
| File lain | URL file Slack | Diunduh jika memungkinkan dan diekspos sebagai konteks file | File biner tidak diperlakukan sebagai input gambar |
| Balasan thread | File pemulai thread | File pesan root dapat dihidrasi sebagai konteks ketika balasan tidak memiliki media langsung | Pemulai hanya file menggunakan placeholder lampiran |
| Pesan multi-gambar | Beberapa file Slack | Setiap file dievaluasi secara independen | Pemrosesan Slack dibatasi hingga delapan file per pesan |
Pipeline inbound
Ketika pesan Slack dengan lampiran file tiba:- OpenClaw mengunduh file dari URL privat Slack menggunakan token bot.
- File ditulis ke penyimpanan media saat berhasil.
- Jalur media yang diunduh dan jenis konten ditambahkan ke konteks inbound.
- Jalur model/alat yang mendukung gambar dapat menggunakan lampiran gambar dari konteks tersebut.
- File non-gambar tetap tersedia sebagai metadata file atau referensi media untuk alat yang dapat menanganinya.
Pewarisan lampiran root thread
Ketika pesan tiba dalam thread (memiliki indukthread_ts):
- Jika balasan itu sendiri tidak memiliki media langsung dan pesan root yang disertakan memiliki file, Slack dapat menghidrasi file root sebagai konteks pemulai thread.
- Lampiran balasan langsung lebih diprioritaskan daripada lampiran pesan root.
- Pesan root yang hanya memiliki file dan tanpa teks direpresentasikan dengan placeholder lampiran sehingga fallback tetap dapat menyertakan filenya.
Penanganan multi-lampiran
Ketika satu pesan Slack berisi beberapa lampiran file:- Setiap lampiran diproses secara independen melalui pipeline media.
- Referensi media yang diunduh digabungkan ke dalam konteks pesan.
- Urutan pemrosesan mengikuti urutan file Slack dalam payload event.
- Kegagalan dalam unduhan satu lampiran tidak memblokir lampiran lainnya.
Batas ukuran, unduhan, dan model
- Batas ukuran: Default 20 MB per file. Dapat dikonfigurasi melalui
channels.slack.mediaMaxMb. - Kegagalan unduhan: File yang tidak dapat disajikan Slack, URL kedaluwarsa, file yang tidak dapat diakses, file terlalu besar, dan respons HTML autentikasi/login Slack dilewati alih-alih dilaporkan sebagai format yang tidak didukung.
- Model vision: Analisis gambar menggunakan model balasan aktif ketika model tersebut mendukung vision, atau model gambar yang dikonfigurasi di
agents.defaults.imageModel.
Batasan yang diketahui
| Skenario | Perilaku saat ini | Solusi sementara |
|---|---|---|
| URL file Slack kedaluwarsa | File dilewati; tidak ada error yang ditampilkan | Unggah ulang file di Slack |
| Model vision belum dikonfigurasi | Lampiran gambar disimpan sebagai referensi media, tetapi tidak dianalisis sebagai gambar | Konfigurasikan agents.defaults.imageModel atau gunakan model balasan yang mendukung vision |
| Gambar sangat besar (> 20 MB secara default) | Dilewati sesuai batas ukuran | Tingkatkan channels.slack.mediaMaxMb jika Slack mengizinkan |
| Lampiran yang diteruskan/dibagikan | Teks dan media gambar/file yang dihosting Slack bersifat upaya terbaik | Bagikan ulang langsung di thread OpenClaw |
| Lampiran PDF | Disimpan sebagai konteks file/media, tidak otomatis dirutekan melalui image vision | Gunakan download-file untuk metadata file atau alat pdf untuk analisis PDF |
Dokumentasi terkait
- Pipeline pemahaman media
- Alat PDF
- Epic: #51349 — Pengaktifan vision lampiran Slack
- Uji regresi: #51353
- Verifikasi live: #51354
Terkait
Pairing
Pasangkan pengguna Slack ke gateway.
Groups
Perilaku channel dan DM grup.
Channel routing
Rutekan pesan inbound ke agen.
Security
Model ancaman dan hardening.
Configuration
Tata letak konfigurasi dan prioritas.
Slash commands
Katalog dan perilaku perintah.