Mainstream messaging
Slack
DM'ler ve kanallar için Slack uygulama entegrasyonlarıyla üretime hazır. Varsayılan mod Socket Mode'dur; HTTP İstek URL'leri de desteklenir. Relay modu, güvenilir bir yönlendiricinin Slack girişini yönettiği yönetilen dağıtımlar için tasarlanmıştır.
Slack DM'leri varsayılan olarak eşleştirme modunu kullanır.
Yerel komut davranışı ve komut kataloğu.
Kanallar arası tanılama ve onarım çalışma kılavuzları.
Socket Mode veya HTTP İstek URL'lerini seçme
Her iki aktarım da üretime hazırdır ve mesajlaşma, slash komutları, App Home ve etkileşim için özellik eşitliğine ulaşır. Özelliklere göre değil, dağıtım şekline göre seçim yapın.
| Konu | Socket Mode (varsayılan) | HTTP İstek URL'leri |
|---|---|---|
| Herkese açık Gateway URL'si | Gerekli değil | Gerekli (DNS, TLS, ters proxy veya tünel) |
| Giden ağ | wss-primary.slack.com adresine giden WSS erişilebilir olmalıdır |
Giden WS yok; yalnızca gelen HTTPS |
| Gerekli token'lar | Bot token'ı + connections:write ile App-Level Token |
Bot token'ı + Signing Secret |
| Geliştirici dizüstü / güvenlik duvarı arkasında | Olduğu gibi çalışır | Herkese açık bir tünel (ngrok, Cloudflare Tunnel, Tailscale Funnel) veya hazırlık Gateway'i gerekir |
| Yatay ölçeklendirme | Uygulama başına, ana bilgisayar başına bir Socket Mode oturumu; birden fazla Gateway ayrı Slack uygulamaları gerektirir | Durumsuz POST işleyici; birden fazla Gateway replikası bir yük dengeleyicinin arkasında tek bir uygulamayı paylaşabilir |
| Tek Gateway'de çoklu hesap | Desteklenir; her hesap kendi WS bağlantısını açar | Desteklenir; kayıtların çakışmaması için her hesabın benzersiz bir webhookPath değerine (varsayılan /slack/events) ihtiyacı vardır |
| Slash komutu aktarımı | WS bağlantısı üzerinden teslim edilir; slash_commands[].url yok sayılır |
Slack, slash_commands[].url adresine POST gönderir; komutun dağıtılması için alan gereklidir |
| İstek imzalama | Kullanılmaz (kimlik doğrulama App-Level Token'dır) | Slack her isteği imzalar; OpenClaw signingSecret ile doğrular |
| Bağlantı koptuğunda kurtarma | Slack SDK otomatik yeniden bağlanma etkindir; OpenClaw ayrıca başarısız Socket Mode oturumlarını sınırlı geri çekilme ile yeniden başlatır. Pong-timeout aktarım ayarı uygulanır. | Kopacak kalıcı bağlantı yoktur; yeniden denemeler Slack tarafından istek bazında yapılır |
Relay modu
Relay modu, Slack girişini OpenClaw gateway'den ayırır. Güvenilir bir yönlendirici tek Slack Socket Mode bağlantısına sahip olur, bir hedef gateway seçer ve yazılmış bir olayı kimliği doğrulanmış bir websocket üzerinden iletir. Gateway, giden Slack Web API çağrıları için bot token'ını kullanmaya devam eder.
{ channels: { slack: { mode: "relay", botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, relay: { url: "wss://router.example.com/gateway/ws", authToken: { source: "env", provider: "default", id: "SLACK_RELAY_AUTH_TOKEN" }, gatewayId: "team-gateway", }, }, },}Relay URL'si localhost'u hedeflemediği sürece wss:// kullanmalıdır. Bearer token'ı ve yönlendirici rota tablosunu Slack yetkilendirme sınırının parçası olarak ele alın: yönlendirilen olaylar, yetkilendirilmiş etkinleştirmeler olarak normal Slack mesaj işleyicisine girer. Websocket hello karesindeki yönlendirici tarafından sağlanan bir slack_identity, varsayılan giden kullanıcı adını ve simgeyi ayarlayabilir; çağıran tarafından sağlanan açık kimlik yine önceliklidir. Relay bağlantısı, Socket Mode tarafından kullanılan aynı sınırlı geri çekilme zamanlamasıyla yeniden bağlanır ve bağlantısı her kesildiğinde yönlendirici tarafından sağlanan kimliği temizler.
Kurulum
Kanalı yapılandırmadan önce Slack'i kurun:
openclaw plugins install @openclaw/slackplugins install, plugin'i kaydeder ve etkinleştirir. Slack uygulamasını ve aşağıdaki kanal ayarlarını yapılandırana kadar plugin yine de hiçbir şey yapmaz. Genel plugin davranışı ve kurulum kuralları için Plugins bölümüne bakın.
Hızlı kurulum
Socket Mode (default)
Create a new Slack app
api.slack.com/apps sayfasını açın → Create New App → From a manifest → çalışma alanınızı seçin → aşağıdaki manifestlerden birini yapıştırın → Next → Create.
{"display_information": {"name": "OpenClaw","description": "Slack connector for OpenClaw"},"features": {"bot_user": { "display_name": "OpenClaw", "always_online": true },"app_home": {"home_tab_enabled": true,"messages_tab_enabled": true,"messages_tab_read_only_enabled": false},"assistant_view": {"assistant_description": "OpenClaw connects Slack assistant threads to OpenClaw agents.","suggested_prompts": [{ "title": "What can you do?", "message": "What can you help me with?" },{"title": "Summarize this channel","message": "Summarize the recent activity in this channel."},{ "title": "Draft a reply", "message": "Help me draft a reply." }]},"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","usergroups:read","users:read"]}},"settings": {"socket_mode_enabled": true,"event_subscriptions": {"bot_events": ["app_home_opened","app_mention","assistant_thread_context_changed","assistant_thread_started","channel_rename","member_joined_channel","member_left_channel","message.channels","message.groups","message.im","message.mpim","pin_added","pin_removed","reaction_added","reaction_removed"]}}}{"display_information": {"name": "OpenClaw","description": "Slack connector for OpenClaw"},"features": {"bot_user": { "display_name": "OpenClaw", "always_online": true },"app_home": {"home_tab_enabled": true,"messages_tab_enabled": true,"messages_tab_read_only_enabled": false},"assistant_view": {"assistant_description": "OpenClaw connects Slack assistant threads to OpenClaw agents.","suggested_prompts": [{ "title": "What can you do?", "message": "What can you help me with?" },{"title": "Summarize this channel","message": "Summarize the recent activity in this channel."},{ "title": "Draft a reply", "message": "Help me draft a reply." }]},"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","groups:history","groups:read","im:history","im:read","im:write","users:read"]}},"settings": {"socket_mode_enabled": true,"event_subscriptions": {"bot_events": ["app_home_opened","app_mention","assistant_thread_context_changed","assistant_thread_started","message.channels","message.groups","message.im"]}}}Slack uygulamayı oluşturduktan sonra:
- Basic Information -> App-Level Tokens -> Generate Token and Scopes:
connections:writeekleyin, kaydedin, App-Level Token'ı kopyalayın. - Install App -> Install to Workspace: Bot User OAuth Token'ı kopyalayın.
Configure OpenClaw
Önerilen SecretRef kurulumu:
export SLACK_APP_TOKEN=slack-app-token-exampleexport SLACK_BOT_TOKEN=slack-bot-token-examplecat > 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" },},},}JSON5openclaw config patch --file ./slack.socket.patch.json5 --dry-runopenclaw config patch --file ./slack.socket.patch.json5Env yedeği (yalnızca varsayılan hesap):
SLACK_APP_TOKEN=slack-app-token-exampleSLACK_BOT_TOKEN=slack-bot-token-exampleStart gateway
openclaw gatewayHTTP Request URLs
Create a new Slack app
api.slack.com/apps adresini açın → Yeni Uygulama Oluştur → Bir manifestten → çalışma alanınızı seçin → aşağıdaki manifestlerden birini yapıştırın → https://gateway-host.example.com/slack/events değerini herkese açık Gateway URL'nizle değiştirin → İleri → Oluştur.
{"display_information": {"name": "OpenClaw","description": "Slack connector for OpenClaw"},"features": {"bot_user": { "display_name": "OpenClaw", "always_online": true },"app_home": {"home_tab_enabled": true,"messages_tab_enabled": true,"messages_tab_read_only_enabled": false},"assistant_view": {"assistant_description": "OpenClaw connects Slack assistant threads to OpenClaw agents.","suggested_prompts": [{ "title": "What can you do?", "message": "What can you help me with?" },{"title": "Summarize this channel","message": "Summarize the recent activity in this channel."},{ "title": "Draft a reply", "message": "Help me draft a reply." }]},"slash_commands": [{"command": "/openclaw","description": "Send a message to OpenClaw","should_escape": false,"url": "https://gateway-host.example.com/slack/events"}]},"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","usergroups:read","users:read"]}},"settings": {"event_subscriptions": {"request_url": "https://gateway-host.example.com/slack/events","bot_events": ["app_home_opened","app_mention","assistant_thread_context_changed","assistant_thread_started","channel_rename","member_joined_channel","member_left_channel","message.channels","message.groups","message.im","message.mpim","pin_added","pin_removed","reaction_added","reaction_removed"]},"interactivity": {"is_enabled": true,"request_url": "https://gateway-host.example.com/slack/events","message_menu_options_url": "https://gateway-host.example.com/slack/events"}}}{"display_information": {"name": "OpenClaw","description": "Slack connector for OpenClaw"},"features": {"bot_user": { "display_name": "OpenClaw", "always_online": true },"app_home": {"home_tab_enabled": true,"messages_tab_enabled": true,"messages_tab_read_only_enabled": false},"assistant_view": {"assistant_description": "OpenClaw connects Slack assistant threads to OpenClaw agents.","suggested_prompts": [{ "title": "What can you do?", "message": "What can you help me with?" },{"title": "Summarize this channel","message": "Summarize the recent activity in this channel."},{ "title": "Draft a reply", "message": "Help me draft a reply." }]},"slash_commands": [{"command": "/openclaw","description": "Send a message to OpenClaw","should_escape": false,"url": "https://gateway-host.example.com/slack/events"}]},"oauth_config": {"scopes": {"bot": ["app_mentions:read","assistant:write","channels:history","channels:read","chat:write","commands","groups:history","groups:read","im:history","im:read","im:write","users:read"]}},"settings": {"event_subscriptions": {"request_url": "https://gateway-host.example.com/slack/events","bot_events": ["app_home_opened","app_mention","assistant_thread_context_changed","assistant_thread_started","message.channels","message.groups","message.im"]},"interactivity": {"is_enabled": true,"request_url": "https://gateway-host.example.com/slack/events","message_menu_options_url": "https://gateway-host.example.com/slack/events"}}}Slack uygulamayı oluşturduktan sonra:
- Temel Bilgiler → Uygulama Kimlik Bilgileri: istek doğrulaması için İmzalama Sırrını kopyalayın.
- Uygulamayı Kur -> Çalışma Alanına Kur: Bot Kullanıcısı OAuth Token'ını kopyalayın.
Configure OpenClaw
Önerilen SecretRef kurulumu:
export SLACK_BOT_TOKEN=slack-bot-token-exampleexport SLACK_SIGNING_SECRET=...cat > slack.http.patch.json5 <<'JSON5'{channels: {slack: {enabled: true,mode: "http",botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" },signingSecret: { source: "env", provider: "default", id: "SLACK_SIGNING_SECRET" },webhookPath: "/slack/events",},},}JSON5openclaw config patch --file ./slack.http.patch.json5 --dry-runopenclaw config patch --file ./slack.http.patch.json5Start gateway
openclaw gatewaySocket Mode aktarım ayarı
OpenClaw, Socket Mode için Slack SDK istemcisi pong zaman aşımını varsayılan olarak 15 saniyeye ayarlar. Aktarım ayarlarını yalnızca çalışma alanına veya ana makineye özgü ayar gerektiğinde geçersiz kılın:
{ channels: { slack: { mode: "socket", socketMode: { clientPingTimeout: 20000, serverPingTimeout: 30000, pingPongLoggingEnabled: false, }, }, },}Bunu yalnızca Slack websocket pong/sunucu ping zaman aşımlarını günlüğe kaydeden veya bilinen olay döngüsü açlığı olan ana makinelerde çalışan Socket Mode çalışma alanları için kullanın. clientPingTimeout, SDK bir istemci pingi gönderdikten sonraki pong bekleme süresidir; serverPingTimeout, Slack sunucu pingleri için bekleme süresidir. Uygulama mesajları ve olayları, aktarım canlılığı sinyalleri değil uygulama durumudur.
Notlar:
socketMode, HTTP İstek URL'si modunda yok sayılır.- Temel
channels.slack.socketModeayarları, geçersiz kılınmadığı sürece tüm Slack hesaplarına uygulanır. Hesap bazında geçersiz kılmalarchannels.slack.accounts.<accountId>.socketModekullanır; bu bir nesne geçersiz kılması olduğundan, o hesap için istediğiniz her socket ayar alanını ekleyin. - Yalnızca
clientPingTimeoutiçin bir OpenClaw varsayılanı vardır (15000).serverPingTimeoutvepingPongLoggingEnabled, yalnızca yapılandırıldığında Slack SDK'ya geçirilir. - Socket Mode yeniden başlatma geri çekilmesi yaklaşık 2 saniyeden başlar ve yaklaşık 30 saniyede sınırlanır. Kurtarılabilir başlatma, başlatma beklemesi ve bağlantı kesilme hataları kanal durana kadar yeniden denenir. Geçersiz kimlik doğrulama, iptal edilmiş tokenlar veya eksik kapsamlar gibi kalıcı hesap ve kimlik bilgisi hataları ise sonsuza kadar yeniden denemek yerine hızlıca başarısız olur.
Manifest ve kapsam kontrol listesi
Temel Slack uygulama manifesti Socket Mode ve HTTP İstek URL'leri için aynıdır. Yalnızca settings bloğu (ve eğik çizgi komutu url) farklıdır.
Temel manifest (Socket Mode varsayılanı):
{ "display_information": { "name": "OpenClaw", "description": "Slack connector for OpenClaw" }, "features": { "bot_user": { "display_name": "OpenClaw", "always_online": true }, "app_home": { "home_tab_enabled": true, "messages_tab_enabled": true, "messages_tab_read_only_enabled": false }, "assistant_view": { "assistant_description": "OpenClaw connects Slack assistant threads to OpenClaw agents.", "suggested_prompts": [ { "title": "What can you do?", "message": "What can you help me with?" }, { "title": "Summarize this channel", "message": "Summarize the recent activity in this channel." }, { "title": "Draft a reply", "message": "Help me draft a reply." } ] }, "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", "usergroups:read", "users:read" ] } }, "settings": { "socket_mode_enabled": true, "event_subscriptions": { "bot_events": [ "app_home_opened", "app_mention", "assistant_thread_context_changed", "assistant_thread_started", "channel_rename", "member_joined_channel", "member_left_channel", "message.channels", "message.groups", "message.im", "message.mpim", "pin_added", "pin_removed", "reaction_added", "reaction_removed" ] } }}HTTP İstek URL'leri modu için settings değerini HTTP varyantıyla değiştirin ve her eğik çizgi komutuna url ekleyin. Herkese açık URL gereklidir:
{ "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": [ "app_home_opened", "app_mention", "assistant_thread_context_changed", "assistant_thread_started", "channel_rename", "member_joined_channel", "member_left_channel", "message.channels", "message.groups", "message.im", "message.mpim", "pin_added", "pin_removed", "reaction_added", "reaction_removed" ] }, "interactivity": { "is_enabled": true, "request_url": "https://gateway-host.example.com/slack/events", "message_menu_options_url": "https://gateway-host.example.com/slack/events" } }}Ek manifest ayarları
Yukarıdaki varsayılanları genişleten farklı özellikleri gösterin.
Varsayılan manifest, Slack Uygulama Ana Sayfası Ana Sayfa sekmesini etkinleştirir ve app_home_opened olayına abone olur. Bir çalışma alanı üyesi Ana Sayfa sekmesini açtığında OpenClaw, views.publish ile güvenli bir varsayılan Ana Sayfa görünümü yayımlar; konuşma yükü veya özel yapılandırma dahil edilmez. Mesajlar sekmesi Slack DM'leri için etkin kalır. Manifest ayrıca features.assistant_view, assistant:write, assistant_thread_started ve assistant_thread_context_changed ile Slack asistan iş parçacıklarını etkinleştirir; asistan iş parçacıkları kendi OpenClaw iş parçacığı oturumlarına yönlendirilir ve Slack tarafından sağlanan iş parçacığı bağlamını agent için kullanılabilir tutar.
İsteğe bağlı yerel eğik çizgi komutları
Birden çok yerel eğik çizgi komutu, bazı ayrıntılarla tek bir yapılandırılmış komut yerine kullanılabilir:
/statusyerine/agentstatuskullanın, çünkü/statuskomutu ayrılmıştır.- Aynı anda en fazla 25 eğik çizgi komutu kullanılabilir hale getirilebilir.
Mevcut features.slash_commands bölümünüzü kullanılabilir komutlar listesinin bir alt kümesiyle değiştirin:
Socket Mode (default)
{"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": "/approve","description": "Approve or deny pending approval requests","usage_hint": "<id> <decision>"},{"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": "/side","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"}]}HTTP Request URLs
Yukarıdaki Socket Mode ile aynı slash_commands listesini kullanın ve her girdiye "url": "https://gateway-host.example.com/slack/events" ekleyin. Örnek:
{"slash_commands": [{"command": "/new","description": "Start a new session","usage_hint": "[model]","url": "https://gateway-host.example.com/slack/events"},{"command": "/help","description": "Show the short help summary","url": "https://gateway-host.example.com/slack/events"}]}Bu url değerini listedeki her komutta tekrarlayın.
İsteğe bağlı yazarlık kapsamları (yazma işlemleri)
Giden mesajların varsayılan Slack uygulama kimliği yerine etkin agent kimliğini (özel kullanıcı adı ve simge) kullanmasını istiyorsanız chat:write.customize bot kapsamını ekleyin.
Emoji simgesi kullanıyorsanız Slack :emoji_name: söz dizimini bekler.
İsteğe bağlı kullanıcı belirteci kapsamları (okuma işlemleri)
channels.slack.userToken yapılandırırsanız tipik okuma kapsamları şunlardır:
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(Slack arama okumalarına bağlıysanız)
Belirteç modeli
- Socket Mode için
botToken+appTokengereklidir. - HTTP modu
botToken+signingSecretgerektirir. - Relay modu
botTokenile birlikterelay.url,relay.authTokenverelay.gatewayIdgerektirir; uygulama belirteci veya imzalama gizli anahtarı kullanmaz. botToken,appToken,signingSecret,relay.authTokenveuserTokendüz metin dizelerini veya SecretRef nesnelerini kabul eder.- Yapılandırma belirteçleri env yedeğini geçersiz kılar.
SLACK_BOT_TOKEN/SLACK_APP_TOKENenv yedeği yalnızca varsayılan hesaba uygulanır.userTokenyalnızca yapılandırma üzerinden ayarlanır (env yedeği yoktur) ve varsayılan olarak salt okunur davranışa (userTokenReadOnly: true) ayarlanır.
Durum anlık görüntüsü davranışı:
- Slack hesap incelemesi, kimlik bilgisi başına
*Sourceve*Statusalanlarını izler (botToken,appToken,signingSecret,userToken). - Durum
available,configured_unavailableveyamissingolur. configured_unavailable, hesabın SecretRef veya başka bir satır içi olmayan gizli kaynak üzerinden yapılandırıldığı, ancak geçerli komut/çalışma zamanı yolunun gerçek değeri çözemediği anlamına gelir.- HTTP modunda
signingSecretStatusdahil edilir; Socket Mode’da gerekli çiftbotTokenStatus+appTokenStatusolur.
Eylemler ve kapılar
Slack eylemleri channels.slack.actions.* tarafından denetlenir.
Geçerli Slack araçlarında kullanılabilir eylem grupları:
| Grup | Varsayılan |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
Geçerli Slack mesaj eylemleri arasında send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info ve emoji-list bulunur. download-file, gelen dosya yer tutucularında gösterilen Slack dosya kimliklerini kabul eder ve görüntüler için görüntü önizlemeleri, diğer dosya türleri için yerel dosya meta verileri döndürür.
Erişim denetimi ve yönlendirme
DM ilkesi
channels.slack.dmPolicy DM erişimini denetler. channels.slack.allowFrom kurallı DM izin listesidir.
pairing(varsayılan)allowlistopen(channels.slack.allowFromiçinde"*"bulunmasını gerektirir)disabled
DM bayrakları:
dm.enabled(varsayılan true)channels.slack.allowFromdm.allowFrom(eski)dm.groupEnabled(grup DM'leri varsayılan olarak false)dm.groupChannels(isteğe bağlı MPIM izin listesi)
Çoklu hesap önceliği:
channels.slack.accounts.default.allowFromyalnızcadefaulthesabına uygulanır.- Adlandırılmış hesaplar, kendi
allowFromdeğerleri ayarlanmamışsachannels.slack.allowFromdeğerini devralır. - Adlandırılmış hesaplar
channels.slack.accounts.default.allowFromdeğerini devralmaz.
Eski channels.slack.dm.policy ve channels.slack.dm.allowFrom uyumluluk için hâlâ okunur. openclaw doctor --fix, erişimi değiştirmeden yapabildiğinde bunları dmPolicy ve allowFrom değerlerine taşır.
DM'lerde eşleştirme openclaw pairing approve slack <code> kullanır.
Kanal ilkesi
channels.slack.groupPolicy kanal işlemeyi denetler:
openallowlistdisabled
Kanal izin listesi channels.slack.channels altında bulunur ve yapılandırma anahtarları olarak kararlı Slack kanal kimlikleri (örneğin C12345678) kullanmalıdır.
Çalışma zamanı notu: channels.slack tamamen eksikse (yalnızca env kurulumu), çalışma zamanı groupPolicy="allowlist" değerine geri döner ve bir uyarı kaydeder (channels.defaults.groupPolicy ayarlanmış olsa bile).
Ad/kimlik çözümleme:
- kanal izin listesi girdileri ve DM izin listesi girdileri, token erişimi izin verdiğinde başlangıçta çözümlenir
- çözümlenmemiş kanal adı girdileri yapılandırıldığı gibi tutulur, ancak varsayılan olarak yönlendirme için yok sayılır
- gelen yetkilendirme ve kanal yönlendirme varsayılan olarak önce kimlik temellidir; doğrudan kullanıcı adı/slug eşleşmesi
channels.slack.dangerouslyAllowNameMatching: truegerektirir
Bahsetmeler ve kanal kullanıcıları
Kanal iletileri varsayılan olarak bahsetme geçidine tabidir.
Bahsetme kaynakları:
- açık uygulama bahsetmesi (
<@botId>) - bot kullanıcısı ilgili kullanıcı grubunun üyesiyse Slack kullanıcı grubu bahsetmesi (
<!subteam^S...>);usergroups:readgerektirir - bahsetme regex desenleri (
agents.list[].groupChat.mentionPatterns, geri dönüşmessages.groupChat.mentionPatterns) - örtük bot yanıtı konu davranışı (
thread.requireExplicitMentiontrueolduğunda devre dışıdır)
Kanal başına denetimler (channels.slack.channels.<id>; adlar yalnızca başlangıç çözümlemesi veya dangerouslyAllowNameMatching üzerinden):
requireMentionusers(izin listesi)allowBotsskillssystemPrompttools,toolsBySendertoolsBySenderanahtar biçimi:channel:,id:,e164:,username:,name:veya"*"joker karakteri (eski öneksiz anahtarlar hâlâ yalnızcaid:ile eşlenir)
allowBots, kanallar ve özel kanallar için tutucudur: bot tarafından yazılan oda mesajları yalnızca gönderen bot o odanın users izin listesinde açıkça yer aldığında veya channels.slack.allowFrom içindeki en az bir açık Slack sahipliği kimliği o anda odanın üyesi olduğunda kabul edilir. Joker karakterler ve görünen ad sahipliği girdileri sahip varlığını karşılamaz. Sahip varlığı Slack conversations.members kullanır; uygulamanın oda türü için eşleşen okuma kapsamına sahip olduğundan emin olun (channels:read genel kanallar için, groups:read özel kanallar için). Üye araması başarısız olursa OpenClaw, bot tarafından yazılan oda mesajını düşürür.
Kabul edilen bot tarafından yazılmış Slack mesajları, paylaşılan bot döngüsü koruması kullanır. Varsayılan bütçe için channels.defaults.botLoopProtection yapılandırın, ardından bir çalışma alanı veya kanal farklı bir sınıra ihtiyaç duyduğunda channels.slack.botLoopProtection ya da channels.slack.channels.<id>.botLoopProtection ile geçersiz kılın.
İleti dizileri, oturumlar ve yanıt etiketleri
- DM'ler
directolarak; kanallarchannelolarak; MPIM'lergroupolarak yönlendirilir. - Slack rota bağlamaları ham eş kimliklerini ve
channel:C12345678,user:U12345678ve<@U12345678>gibi Slack hedef biçimlerini kabul eder. - Varsayılan
session.dmScope=mainile Slack DM'leri aracının ana oturumuna daraltılır. - Kanal oturumları:
agent:<agentId>:slack:channel:<channelId>. - Sıradan üst düzey kanal mesajları,
replyToModeoffolmadığında bile kanal başına oturumda kalır. - Slack ileti dizisi yanıtları, giden yanıt ileti dizileri
replyToMode="off"ile devre dışı bırakılmış olsa bile, oturum son ekleri için üst Slackthread_tsdeğerini kullanır (:thread:<threadTs>). - OpenClaw, bu kökün görünür bir Slack ileti dizisi başlatması beklendiğinde uygun bir üst düzey kanal kökünü
agent:<agentId>:slack:channel:<channelId>:thread:<rootTs>içine eker; böylece kök ve sonraki ileti dizisi yanıtları tek bir OpenClaw oturumunu paylaşır. Bu,app_mentionolayları, açık bot veya yapılandırılmış bahsetme deseni eşleşmeleri veoffolmayanreplyToModeilerequireMention: falsekanalları için geçerlidir. channels.slack.thread.historyScopevarsayılanıthread;thread.inheritParentvarsayılanıfalsedeğeridir.channels.slack.thread.initialHistoryLimit, yeni bir ileti dizisi oturumu başladığında kaç mevcut ileti dizisi mesajının getirileceğini denetler (varsayılan20; devre dışı bırakmak için0ayarlayın).channels.slack.thread.requireExplicitMention(varsayılanfalse):trueolduğunda örtük ileti dizisi bahsetmelerini bastırır; böylece bot, ileti dizisine zaten katılmış olsa bile yalnızca ileti dizileri içindeki açık@botbahsetmelerine yanıt verir. Bu olmadan, botun katıldığı bir ileti dizisindeki yanıtlarrequireMentiongeçidini atlar.
Yanıt ileti dizisi denetimleri:
channels.slack.replyToMode:off|first|all|batched(varsayılanoff)channels.slack.replyToModeByChatType:direct|group|channelbaşına- doğrudan sohbetler için eski yedek:
channels.slack.dm.replyToMode
Manuel yanıt etiketleri desteklenir:
[[reply_to_current]][[reply_to:<id>]]
message aracından açık Slack ileti dizisi yanıtları için, Slack'ten ileti dizisi yanıtını üst kanala da yayımlamasını istemek üzere action: "send" ve threadId veya replyTo ile replyBroadcast: true ayarlayın. Bu, Slack'in chat.postMessage reply_broadcast bayrağına eşlenir ve medya yüklemeleri için değil, yalnızca metin veya Block Kit gönderimleri için desteklenir.
Bir message araç çağrısı bir Slack ileti dizisi içinde çalıştığında ve aynı kanalı hedeflediğinde, OpenClaw normalde mevcut Slack ileti dizisini replyToMode uyarınca devralır. Bunun yerine yeni bir üst kanal mesajını zorlamak için action: "send" veya action: "upload-file" üzerinde topLevel: true ayarlayın. threadId: null aynı üst düzey çıkış seçeneği olarak kabul edilir.
Onay tepkileri
ackReaction, OpenClaw gelen bir mesajı işlerken bir onay emojisi gönderir. ackReactionScope, bu emojinin gerçekte ne zaman gönderileceğine karar verir.
Emoji (ackReaction)
Çözümleme sırası:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- aracı kimliği emoji yedeği (
agents.list[].identity.emoji, aksi halde"eyes"/ 👀)
Notlar:
- Slack kısa kodlar bekler (örneğin
"eyes"). - Slack hesabı için veya genel olarak tepkiyi devre dışı bırakmak üzere
""kullanın.
Kapsam (messages.ackReactionScope)
Slack sağlayıcısı kapsamı messages.ackReactionScope değerinden okur (varsayılan "group-mentions"). Bugün Slack hesabı veya Slack kanal düzeyinde geçersiz kılma yoktur; değer Gateway genelinde küreseldir.
Değerler:
"all": DM'lerde ve gruplarda tepki ver."direct": yalnızca DM'lerde tepki ver."group-all": her grup mesajında tepki ver (DM yok)."group-mentions"(varsayılan): gruplarda tepki ver, ancak yalnızca bottan bahsedildiğinde (veya kabul etmiş grup bahsedilebilirlerinde). DM'ler hariç tutulur."off"/"none": hiçbir zaman tepki verme.
{ messages: { ackReaction: "eyes", ackReactionScope: "all", // react in DMs and groups },}Metin akışı
channels.slack.streaming, canlı önizleme davranışını denetler:
off: canlı önizleme akışını devre dışı bırak.partial(varsayılan): önizleme metnini en son kısmi çıktı ile değiştir.block: parçalı önizleme güncellemeleri ekle.progress: oluşturma sırasında ilerleme durumu metnini göster, ardından son metni gönder.streaming.preview.toolProgress: taslak önizleme etkin olduğunda araç/ilerleme güncellemelerini aynı düzenlenen önizleme mesajına yönlendirir (varsayılan:true). Ayrı araç/ilerleme mesajlarını korumak içinfalseayarlayın.streaming.preview.commandText/streaming.progress.commandText: ham komut/exec metnini gizlerken kompakt araç ilerleme satırlarını korumak içinstatusolarak ayarlayın (varsayılan:raw).
Kompakt ilerleme satırlarını korurken ham komut/exec metnini gizleyin:
{ "channels": { "slack": { "streaming": { "mode": "progress", "progress": { "toolProgress": true, "commandText": "status" } } } }}channels.slack.streaming.nativeTransport, channels.slack.streaming.mode partial olduğunda Slack yerel metin akışını denetler (varsayılan: true).
Slack yerel ilerleme görev kartları, ilerleme modu için isteğe bağlıdır. İş çalışırken Slack'e yerel bir plan/görev kartı göndermek, ardından tamamlandığında aynı görev kartını güncellemek için channels.slack.streaming.mode="progress" ile channels.slack.streaming.progress.nativeTaskCards değerini true olarak ayarlayın. Bu bayrak olmadan, ilerleme modu taşınabilir taslak önizleme davranışını korur.
- Yerel metin akışının ve Slack asistan ileti dizisi durumunun görünmesi için bir yanıt ileti dizisi kullanılabilir olmalıdır. İleti dizisi seçimi yine
replyToModedeğerini izler. - Kanal, grup sohbeti ve üst düzey DM kökleri, yerel akış kullanılamadığında veya yanıt ileti dizisi olmadığında normal taslak önizlemeyi kullanmaya devam edebilir.
- Üst düzey Slack DM'leri varsayılan olarak ileti dizisi dışında kalır; bu nedenle Slack'in ileti dizisi tarzı yerel akış/durum önizlemesini göstermezler. OpenClaw bunun yerine DM içinde bir taslak önizleme yayımlar ve düzenler.
- Medya ve metin dışı yükler normal teslimata geri döner.
- Medya/hata sonları bekleyen önizleme düzenlemelerini iptal eder; uygun metin/blok sonları yalnızca önizlemeyi yerinde düzenleyebildiklerinde boşaltılır.
- Akış yanıt ortasında başarısız olursa OpenClaw kalan yükler için normal teslimata geri döner.
Slack yerel metin akışı yerine taslak önizleme kullanın:
{ channels: { slack: { streaming: { mode: "partial", nativeTransport: false, }, }, },}Slack yerel ilerleme görev kartlarını kabul edin:
{ channels: { slack: { streaming: { mode: "progress", progress: { nativeTaskCards: true, render: "rich", }, }, }, },}Eski anahtarlar:
channels.slack.streamMode(replace | status_final | append),channels.slack.streaming.modeiçin eski bir çalışma zamanı takma adıdır.- Boole
channels.slack.streaming,channels.slack.streaming.modevechannels.slack.streaming.nativeTransportiçin eski bir çalışma zamanı takma adıdır. - Eski
channels.slack.nativeStreaming,channels.slack.streaming.nativeTransportiçin bir çalışma zamanı takma adıdır. - Kalıcı Slack akış yapılandırmasını kurallı anahtarlara yeniden yazmak için
openclaw doctor --fixçalıştırın.
Yazıyor tepkisi yedeği
typingReaction, OpenClaw bir yanıtı işlerken gelen Slack mesajına geçici bir tepki ekler, ardından çalışma bittiğinde bunu kaldırır. Bu, varsayılan bir "yazıyor..." durum göstergesi kullanan ileti dizisi yanıtlarının dışında en kullanışlıdır.
Çözümleme sırası:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
Notlar:
- Slack kısa kodlar bekler (örneğin
"hourglass_flowing_sand"). - Tepki en iyi çaba esasına göredir ve yanıt veya hata yolu tamamlandıktan sonra temizlik otomatik olarak denenir.
Medya, parçalama ve teslimat
Gelen ekler
Slack dosya ekleri, Slack tarafından barındırılan özel URL'lerden indirilir (token ile kimlik doğrulamalı istek akışı) ve getirme başarılı olduğunda ve boyut sınırları izin verdiğinde medya deposuna yazılır. Dosya yer tutucuları Slack fileId değerini içerir; böylece aracılar özgün dosyayı download-file ile getirebilir.
İndirmeler sınırlı boşta kalma ve toplam zaman aşımları kullanır. Slack dosya alma işlemi takılır veya başarısız olursa OpenClaw mesajı işlemeye devam eder ve dosya yer tutucusuna geri döner.
Çalışma zamanı gelen boyut üst sınırı, channels.slack.mediaMaxMb ile geçersiz kılınmadığı sürece varsayılan olarak 20MB olur.
Giden metin ve dosyalar
- metin parçaları
channels.slack.textChunkLimitkullanır (varsayılan 4000) channels.slack.chunkMode="newline"paragraf öncelikli bölmeyi etkinleştirir- dosya gönderimleri Slack yükleme API'lerini kullanır ve ileti dizisi yanıtlarını (
thread_ts) içerebilir - giden medya üst sınırı yapılandırıldığında
channels.slack.mediaMaxMbdeğerini izler; aksi halde kanal gönderimleri medya hattındaki MIME türü varsayılanlarını kullanır
Teslimat hedefleri
Tercih edilen açık hedefler:
- DM'ler için
user:<id> - kanallar için
channel:<id>
Yalnızca metin/blok Slack DM'leri doğrudan kullanıcı kimliklerine gönderi yayımlayabilir; dosya yüklemeleri ve ileti dizili gönderimler önce Slack konuşma API'leri aracılığıyla DM'yi açar, çünkü bu yollar somut bir konuşma kimliği gerektirir.
Komutlar ve slash davranışı
Slash komutları Slack'te tek bir yapılandırılmış komut veya birden çok yerel komut olarak görünür. Komut varsayılanlarını değiştirmek için channels.slack.slashCommand yapılandırın:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
/openclaw /helpYerel komutlar Slack uygulamanızda ek manifest ayarları gerektirir ve bunun yerine küresel yapılandırmalarda channels.slack.commands.native: true veya commands.native: true ile etkinleştirilir.
- Yerel komut otomatik modu Slack için kapalıdır, bu nedenle
commands.native: "auto"Slack yerel komutlarını etkinleştirmez.
/helpYerel bağımsız değişken menüleri, seçilen bir seçenek değerini göndermeden önce bir onay modali gösteren uyarlanabilir bir işleme stratejisi kullanır:
- en fazla 5 seçenek: düğme blokları
- 6-100 seçenek: statik seçim menüsü
- 100'den fazla seçenek: etkileşim seçenek işleyicileri kullanılabilir olduğunda eşzamansız seçenek filtrelemeli dış seçim
- Slack sınırları aşıldı: kodlanmış seçenek değerleri düğmelere geri döner
/thinkSlash oturumları agent:<agentId>:slack:slash:<userId> gibi yalıtılmış anahtarlar kullanır ve komut yürütmelerini yine CommandTargetSessionKey kullanarak hedef konuşma oturumuna yönlendirir.
Etkileşimli yanıtlar
Slack, ajan tarafından yazılmış etkileşimli yanıt denetimlerini işleyebilir, ancak bu özellik varsayılan olarak devre dışıdır.
Yeni ajan, CLI ve Plugin çıktısı için paylaşılan
presentation düğmelerini veya seçim bloklarını tercih edin. Bunlar aynı Slack etkileşim
yolunu kullanırken diğer kanallarda da geriye uyumlu şekilde basitleşir.
Genel olarak etkinleştirin:
{ channels: { slack: { capabilities: { interactiveReplies: true, }, }, },}Veya yalnızca bir Slack hesabı için etkinleştirin:
{ channels: { slack: { accounts: { ops: { capabilities: { interactiveReplies: true, }, }, }, }, },}Etkinleştirildiğinde, ajanlar kullanımdan kaldırılmış yalnızca Slack'e özgü yanıt direktifleri yaymaya devam edebilir:
[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
Bu direktifler Slack Block Kit'e derlenir ve tıklamaları veya seçimleri mevcut Slack etkileşim olayı yolu üzerinden geri yönlendirir. Bunları eski istemler ve Slack'e özgü kaçış yolları için tutun; yeni taşınabilir denetimler için paylaşılan sunumu kullanın.
Direktif derleyici API'leri de yeni üretici kodu için kullanımdan kaldırılmıştır:
compileSlackInteractiveReplies(...)parseSlackOptionsLine(...)isSlackInteractiveRepliesEnabled(...)buildSlackInteractiveBlocks(...)
Yeni Slack'te işlenen denetimler için presentation yüklerini ve
buildSlackPresentationBlocks(...) kullanın.
Notlar:
- Bu, Slack'e özgü eski UI'dır. Diğer kanallar Slack Block Kit direktiflerini kendi düğme sistemlerine çevirmez.
- Etkileşimli geri çağrı değerleri, ajan tarafından yazılmış ham değerler değil, OpenClaw tarafından oluşturulan opak belirteçlerdir.
- Oluşturulan etkileşimli bloklar Slack Block Kit sınırlarını aşacaksa, OpenClaw geçersiz bir blok yükü göndermek yerine özgün metin yanıtına geri döner.
Plugin sahipli modal gönderimleri
Etkileşimli bir işleyici kaydeden Slack Plugin'leri, OpenClaw yükü
ajan tarafından görülebilen sistem olayı için sıkıştırmadan önce modal
view_submission ve view_closed yaşam döngüsü olaylarını da alabilir.
Bir Slack modali açarken bu yönlendirme desenlerinden birini kullanın:
callback_iddeğeriniopenclaw:<namespace>:<payload>olarak ayarlayın.- Veya mevcut bir
callback_iddeğerini koruyun ve modalprivate_metadataiçinepluginInteractiveData: "<namespace>:<payload>"koyun.
İşleyici ctx.interaction.kind değerini view_submission veya
view_closed olarak, normalleştirilmiş inputs değerlerini ve Slack'ten gelen tam ham
stateValues nesnesini alır. Yalnızca geri çağrı kimliğiyle yönlendirme, Plugin işleyicisini çağırmak için yeterlidir; modal aynı zamanda ajan tarafından görülebilen bir sistem olayı üretmeliyse mevcut modal private_metadata kullanıcı/oturum yönlendirme alanlarını ekleyin. Ajan kompakt, redakte edilmiş bir Slack interaction: ... sistem olayı alır. İşleyici
systemEvent.summary, systemEvent.reference veya systemEvent.data döndürürse, bu
alanlar kompakt olaya eklenir; böylece ajan, eksiksiz form yükünü görmeden
Plugin sahipli depolamaya başvurabilir.
Slack'te yerel onaylar
Slack, Web UI veya terminale geri dönmek yerine etkileşimli düğmeler ve etkileşimlerle yerel bir onay istemcisi olarak davranabilir.
- Exec ve Plugin onayları Slack'e özgü Block Kit istemleri olarak işlenebilir.
channels.slack.execApprovals.*, yerel exec onay istemcisi etkinleştirme ve DM/kanal yönlendirme yapılandırması olarak kalır.- Exec onayı DM'leri
channels.slack.execApprovals.approversveyacommands.ownerAllowFromkullanır. - Plugin onayları, Slack kaynak oturum için yerel onay istemcisi olarak etkinse veya
approvals.pluginkaynak Slack oturumuna ya da bir Slack hedefine yönlendiriyorsa Slack'e özgü düğmeler kullanır. - Plugin onayı DM'leri
channels.slack.allowFrom, adlandırılmış hesapallowFromveya hesap varsayılan rotasından Slack Plugin onaylayıcılarını kullanır. - Onaylayıcı yetkilendirmesi yine zorunlu tutulur: yalnızca exec onaylayıcıları, aynı zamanda Plugin onaylayıcısı değillerse Plugin isteklerini onaylayamaz.
Bu, diğer kanallarla aynı paylaşılan onay düğmesi yüzeyini kullanır. Slack uygulama ayarlarınızda interactivity etkin olduğunda, onay istemleri doğrudan konuşmada Block Kit düğmeleri olarak işlenir.
Bu düğmeler mevcut olduğunda birincil onay UX'i bunlardır; OpenClaw
yalnızca araç sonucu sohbet onaylarının kullanılamadığını veya manuel onayın tek yol olduğunu söylediğinde manuel bir /approve komutu eklemelidir.
Yapılandırma yolu:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(isteğe bağlı; mümkün olduğundacommands.ownerAllowFromdeğerine geri döner)channels.slack.execApprovals.target(dm|channel|both, varsayılan:dm)agentFilter,sessionFilter
Slack, enabled ayarlanmamışsa veya "auto" ise ve en az bir
exec onaylayıcı çözümleniyorsa yerel exec onaylarını otomatik olarak etkinleştirir. Slack, Slack Plugin onaylayıcıları çözümlendiğinde ve istek yerel istemci filtreleriyle eşleştiğinde bu yerel istemci
yolu üzerinden yerel Plugin onaylarını da işleyebilir. Slack'i yerel onay istemcisi olarak açıkça devre dışı bırakmak için
enabled: false ayarlayın. Onaylayıcılar çözümlendiğinde yerel onayları zorla açmak için enabled: true ayarlayın. Slack exec onaylarını devre dışı bırakmak,
approvals.plugin üzerinden etkinleştirilen yerel Slack Plugin onayı teslimini devre dışı bırakmaz; Plugin onayı
teslimi bunun yerine Slack Plugin onaylayıcılarını kullanır.
Açık Slack exec onay yapılandırması olmadan varsayılan davranış:
{ commands: { ownerAllowFrom: ["slack:U12345678"], },}Açık Slack'e özgü yapılandırma yalnızca onaylayıcıları geçersiz kılmak, filtre eklemek veya kaynak sohbet teslimine dahil olmak istediğinizde gereklidir:
{ channels: { slack: { execApprovals: { enabled: true, approvers: ["U12345678"], target: "both", }, }, },}Paylaşılan approvals.exec iletimi ayrıdır. Bunu yalnızca exec onayı istemlerinin başka sohbetlere veya açık bant dışı hedeflere de
yönlendirilmesi gerektiğinde kullanın. Paylaşılan approvals.plugin iletimi de
ayrıdır; Slack yerel teslimi, bu geri dönüşü yalnızca Slack Plugin
onayı isteğini yerel olarak işleyebildiğinde bastırır.
Aynı sohbette /approve, komutları zaten destekleyen Slack kanallarında ve DM'lerde de çalışır. Tam onay iletme modeli için Exec onayları bölümüne bakın.
Olaylar ve operasyonel davranış
- Mesaj düzenlemeleri/silmeleri sistem olaylarına eşlenir.
- Konu yayınları ("Kanala da gönder" konu yanıtları) normal kullanıcı mesajları olarak işlenir.
- Tepki ekleme/kaldırma olayları sistem olaylarına eşlenir.
- Üye katılma/ayrılma, kanal oluşturulma/yeniden adlandırılma ve sabitleme ekleme/kaldırma olayları sistem olaylarına eşlenir.
configWritesetkin olduğundachannel_id_changedkanal yapılandırma anahtarlarını taşıyabilir.- Kanal konu/amaç meta verileri güvenilmeyen bağlam olarak değerlendirilir ve yönlendirme bağlamına enjekte edilebilir.
- Konu başlatıcı ve ilk konu geçmişi bağlamı tohumlaması, geçerli olduğunda yapılandırılmış gönderen izin listelerine göre filtrelenir.
- Blok eylemleri, kısayollar ve modal etkileşimleri zengin yük alanlarıyla yapılandırılmış
Slack interaction: ...sistem olayları yayar:- blok eylemleri: seçilen değerler, etiketler, seçici değerleri ve
workflow_*meta verileri - genel kısayollar: geri çağrı ve aktör meta verileri, aktörün doğrudan oturumuna yönlendirilir
- mesaj kısayolları: geri çağrı, aktör, kanal, konu ve seçili mesaj bağlamı
- yönlendirilmiş kanal meta verileri ve form girdileriyle modal
view_submissionveview_closedolayları
- blok eylemleri: seçilen değerler, etiketler, seçici değerleri ve
Slack uygulama yapılandırmanızda genel veya mesaj kısayolları tanımlayın ve boş olmayan herhangi bir geri çağrı kimliği kullanın. OpenClaw eşleşen kısayol yüklerini onaylar, diğer Slack etkileşimleriyle aynı DM/kanal gönderen politikasını uygular ve temizlenmiş olayı yönlendirilen ajan oturumu için kuyruğa alır. Tetikleyici kimlikleri ve yanıt URL'leri ajan bağlamından redakte edilir.
Yapılandırma referansı
Birincil referans: Yapılandırma referansı - Slack.
Yüksek sinyalli Slack alanları
- mod/kimlik doğrulama:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - DM erişimi:
dm.enabled,dmPolicy,allowFrom(eski:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - uyumluluk anahtarı:
dangerouslyAllowNameMatching(son çare; gerekmedikçe kapalı tutun) - kanal erişimi:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - konular/geçmiş:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - teslim:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport,streaming.preview.toolProgress - önizlemeler:
unfurlLinks(varsayılan:false),chat.postMessagebağlantı/medya önizlemesi denetimi içinunfurlMedia; bağlantı önizlemelerine geri dönmek içinunfurlLinks: trueayarlayın - operasyonlar/özellikler:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
Sorun giderme
Kanallarda yanıt yok
Sırayla kontrol edin:
groupPolicy- kanal izin listesi (
channels.slack.channels) — anahtarlar kanal kimlikleri olmalıdır (C12345678), adlar değil (#channel-name). Ad tabanlı anahtarlar, kanal yönlendirmesi varsayılan olarak kimlik öncelikli olduğundangroupPolicy: "allowlist"altında sessizce başarısız olur. Bir kimlik bulmak için: Slack'te kanala sağ tıklayın → Bağlantıyı kopyala — URL'nin sonundakiC...değeri kanal kimliğidir. requireMention- kanal başına
usersizin listesi messages.groupChat.visibleReplies: normal grup/kanal istekleri varsayılan olarak"automatic"kullanır."message_tool"seçtiyseniz ve günlüklermessage(action=send)çağrısı olmadan asistan metni gösteriyorsa, model görünür message-tool yolunu kaçırmıştır. Son metin bu modda özel kalır; bastırılmış yük meta verileri için gateway ayrıntılı günlüğünü inceleyin veya her normal asistan son yanıtının eski yol üzerinden gönderilmesini istiyorsanız bunu"automatic"olarak ayarlayın.messages.groupChat.unmentionedInbound:"room_event"ise, bahsedilmeyen izinli kanal sohbeti ortam bağlamıdır ve ajanmessagearacını çağırmadıkça sessiz kalır. Ortam oda olayları bölümüne bakın.
{messages: {groupChat: { visibleReplies: "automatic",},},}Yararlı komutlar:
openclaw channels status --probeopenclaw logs --followopenclaw doctorDM mesajları yok sayılıyor
Kontrol edin:
channels.slack.dm.enabledchannels.slack.dmPolicy(veya eskichannels.slack.dm.policy)- eşleştirme onayları / izin listesi girdileri (
dmPolicy: "open"yine dechannels.slack.allowFrom: ["*"]gerektirir) - grup DM'leri MPIM işlemeyi kullanır;
channels.slack.dm.groupEnabledetkinleştirin ve yapılandırılmışsa MPIM'ichannels.slack.dm.groupChannelsiçine ekleyin - Slack Assistant DM olayları:
drop message_changedifadesinden bahseden ayrıntılı günlükler genellikle Slack'in mesaj meta verilerinde kurtarılabilir bir insan gönderen olmadan düzenlenmiş bir Assistant konu olayı gönderdiği anlamına gelir
openclaw pairing list slackSocket modu bağlanmıyor
Slack uygulama ayarlarında bot + uygulama belirteçlerini ve Socket Mode etkinleştirmesini doğrulayın.
App-Level Token connections:write gerektirir ve Bot User OAuth Token
bot belirteci, uygulama belirteciyle aynı Slack uygulamasına/çalışma alanına ait olmalıdır.
openclaw channels status --probe --json çıktısı botTokenStatus veya
appTokenStatus: "configured_unavailable" gösteriyorsa Slack hesabı
yapılandırılmıştır ancak mevcut çalışma zamanı SecretRef destekli
değeri çözememiştir.
slack socket mode failed to start; retry ... gibi günlükler kurtarılabilir
başlatma hatalarıdır. Eksik kapsamlar, iptal edilmiş token'lar ve geçersiz kimlik doğrulama ise
bunun yerine hızlı başarısız olur. Bir slack token mismatch ... günlüğü, bot token'ının ve uygulama token'ının
farklı Slack uygulamalarına ait göründüğü anlamına gelir; Slack uygulaması kimlik bilgilerini düzeltin.
HTTP mode not receiving events
Doğrulayın:
- imzalama sırrı
- webhook yolu
- Slack Request URL'leri (Events + Interactivity + Slash Commands)
- HTTP hesabı başına benzersiz
webhookPath - herkese açık URL TLS'i sonlandırır ve istekleri Gateway yoluna iletir
- Slack uygulamasının
request_urlyolu,channels.slack.webhookPathile tam olarak eşleşir (varsayılan/slack/events)
Hesap anlık görüntülerinde signingSecretStatus: "configured_unavailable"
görünürse, HTTP hesabı yapılandırılmıştır ancak mevcut çalışma zamanı
SecretRef destekli imzalama sırrını çözememiştir.
Yinelenen bir slack: webhook path ... already registered günlüğü, iki HTTP
hesabının aynı webhookPath değerini kullandığı anlamına gelir; her hesaba ayrı bir yol verin.
Native/slash commands not firing
Şunu amaçlayıp amaçlamadığınızı doğrulayın:
- Slack'te kayıtlı eşleşen slash commands ile yerel komut modu (
channels.slack.commands.native: true) - veya tek slash command modu (
channels.slack.slashCommand.enabled: true)
Slack, slash commands'ı otomatik olarak oluşturmaz veya kaldırmaz. commands.native: "auto" Slack yerel komutlarını etkinleştirmez; true kullanın ve Slack uygulamasında eşleşen komutları oluşturun. HTTP modunda, her Slack slash command Gateway URL'sini içermelidir. Socket Mode'da komut yükleri websocket üzerinden gelir ve Slack slash_commands[].url değerini yok sayar.
Ayrıca commands.useAccessGroups, DM yetkilendirmesini, kanal izin listelerini
ve kanal başına users izin listelerini kontrol edin. Slack, engellenen
slash-command gönderenleri için geçici hatalar döndürür, örneğin:
This channel is not allowed.You are not authorized to use this command here.
Ek görüş referansı
Slack dosya indirmeleri başarılı olduğunda ve boyut sınırları izin verdiğinde Slack, indirilen medyayı agent turuna ekleyebilir. Görüntü dosyaları medya anlama yolundan geçirilebilir veya doğrudan görüş yetenekli bir yanıt modeline iletilebilir; diğer dosyalar görüntü girdisi olarak ele alınmak yerine indirilebilir dosya bağlamı olarak tutulur.
Desteklenen medya türleri
| Medya türü | Kaynak | Mevcut davranış | Notlar |
|---|---|---|---|
| JPEG / PNG / GIF / WebP görüntüleri | Slack dosya URL'si | İndirilir ve görüş yetenekli işleme için tura eklenir | Dosya başına sınır: channels.slack.mediaMaxMb (varsayılan 20 MB) |
| PDF dosyaları | Slack dosya URL'si | İndirilir ve download-file veya pdf gibi araçlar için dosya bağlamı olarak sunulur |
Slack gelen akışı, PDF'leri otomatik olarak görüntü-görüş girdisine dönüştürmez |
| Diğer dosyalar | Slack dosya URL'si | Mümkün olduğunda indirilir ve dosya bağlamı olarak sunulur | İkili dosyalar görüntü girdisi olarak ele alınmaz |
| Thread yanıtları | Thread başlatıcı dosyaları | Yanıtın doğrudan medyası yoksa kök ileti dosyaları bağlam olarak hydrate edilebilir | Yalnızca dosya içeren başlatıcılar bir ek yer tutucusu kullanır |
| Çoklu görüntü iletileri | Birden fazla Slack dosyası | Her dosya bağımsız olarak değerlendirilir | Slack işleme, ileti başına sekiz dosyayla sınırlıdır |
Gelen akış hattı
Dosya ekleri olan bir Slack iletisi geldiğinde:
- OpenClaw, bot token'ını kullanarak dosyayı Slack'in özel URL'sinden indirir.
- Başarılı olursa dosya medya deposuna yazılır.
- İndirilen medya yolları ve içerik türleri gelen bağlama eklenir.
- Görüntü yetenekli model/araç yolları bu bağlamdaki görüntü eklerini kullanabilir.
- Görüntü olmayan dosyalar, bunları işleyebilen araçlar için dosya meta verisi veya medya referansı olarak kullanılabilir kalır.
Thread kök eki kalıtımı
Bir ileti bir thread içinde geldiğinde (thread_ts üst öğesi varsa):
- Yanıtın kendisinde doğrudan medya yoksa ve dahil edilen kök iletide dosyalar varsa, Slack kök dosyaları thread başlatıcı bağlamı olarak hydrate edebilir.
- Doğrudan yanıt ekleri, kök ileti eklerine göre önceliklidir.
- Yalnızca dosyaları olan ve metni olmayan bir kök ileti, geri dönüşün yine de dosyalarını içerebilmesi için bir ek yer tutucusuyla temsil edilir.
Çoklu ek işleme
Tek bir Slack iletisi birden fazla dosya eki içerdiğinde:
- Her ek, medya akış hattı üzerinden bağımsız olarak işlenir.
- İndirilen medya referansları ileti bağlamında birleştirilir.
- İşleme sırası, olay yükündeki Slack dosya sırasını izler.
- Bir ekin indirilmesindeki hata diğerlerini engellemez.
Boyut, indirme ve model sınırları
- Boyut sınırı: Dosya başına varsayılan 20 MB.
channels.slack.mediaMaxMbile yapılandırılabilir. - İndirme hataları: Slack'in sunamadığı dosyalar, süresi dolmuş URL'ler, erişilemeyen dosyalar, aşırı büyük dosyalar ve Slack kimlik doğrulama/giriş HTML yanıtları, desteklenmeyen biçimler olarak raporlanmak yerine atlanır.
- Görüş modeli: Görüntü analizi, görüşü desteklediğinde etkin yanıt modelini veya
agents.defaults.imageModelkonumunda yapılandırılan görüntü modelini kullanır.
Bilinen sınırlar
| Senaryo | Mevcut davranış | Geçici çözüm |
|---|---|---|
| Süresi dolmuş Slack dosya URL'si | Dosya atlanır; hata gösterilmez | Dosyayı Slack'e yeniden yükleyin |
| Görüş modeli yapılandırılmamış | Görüntü ekleri medya referansları olarak saklanır, ancak görüntü olarak analiz edilmez | agents.defaults.imageModel yapılandırın veya görüş yetenekli bir yanıt modeli kullanın |
| Çok büyük görüntüler (varsayılan olarak > 20 MB) | Boyut sınırı nedeniyle atlanır | Slack izin veriyorsa channels.slack.mediaMaxMb değerini artırın |
| İletilmiş/paylaşılmış ekler | Metin ve Slack barındırmalı görüntü/dosya medyası en iyi çaba ile işlenir | Doğrudan OpenClaw thread'inde yeniden paylaşın |
| PDF ekleri | Dosya/medya bağlamı olarak saklanır, otomatik olarak görüntü görüşü üzerinden yönlendirilmez | Dosya meta verisi için download-file veya PDF analizi için pdf aracını kullanın |
İlgili belgeler
- Medya anlama akış hattı
- PDF aracı
- Epik: #51349 — Slack ek görüşünü etkinleştirme
- Regresyon testleri: #51353
- Canlı doğrulama: #51354