Mainstream messaging
Slack
Slack desteği, Slack uygulama entegrasyonları aracılığıyla DM'leri ve kanalları kapsar. Varsayılan aktarım Socket Mode'dur; HTTP Request URL'leri de desteklenir. Relay modu, güvenilir bir yönlendiricinin Slack girişini yönettiği yönetilen dağıtımlar içindir.
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 planları.
Aktarım seçme
Socket Mode ve HTTP Request URL'leri; mesajlaşma, eğik çizgi komutları, App Home ve etkileşim özelliklerinde eşdeğerdir. Özelliklere göre değil, dağıtım yapısına göre seçim yapın.
| Konu | Socket Mode (varsayılan) | HTTP Request URL'leri |
|---|---|---|
| Genel 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 yoktur; yalnızca gelen HTTPS |
| Gerekli token'lar | Bot kimliği: bot token'ı + connections:write içeren App-Level Token; kullanıcı kimliği: kullanıcı token'ı + App-Level Token |
Bot kimliği: bot token'ı + Signing Secret; kullanıcı kimliği: kullanıcı token'ı + Signing Secret |
| Geliştirme dizüstü bilgisayarı / güvenlik duvarı arkası | Olduğu gibi çalışır | Genel bir tünel (ngrok, Cloudflare Tunnel, Tailscale Funnel) veya hazırlama Gateway'i gerekir |
| Yatay ölçeklendirme | Her ana makinedeki her uygulama için bir Socket Mode oturumu; birden fazla Gateway ayrı Slack uygulamaları gerektirir | Durumsuz POST işleyicisi; birden fazla Gateway replikası, yük dengeleyicinin arkasında tek bir uygulamayı paylaşabilir |
| Tek Gateway'de birden fazla hesap | Desteklenir; her hesap kendi WS bağlantısını açar | Desteklenir; kayıtların çakışmaması için her hesap benzersiz bir webhookPath (varsayılan /slack/events) gerektirir |
| Eğik çizgi 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 yönlendirilmesi için alan gereklidir |
| İstek imzalama | Kullanılmaz (kimlik doğrulama App-Level Token ile yapılır) | Slack her isteği imzalar; OpenClaw, signingSecret ile doğrular |
| Bağlantı kesildiğinde kurtarma | Slack SDK otomatik yeniden bağlanmayı etkinleştirir; OpenClaw ayrıca başarısız Socket Mode oturumlarını sınırlı geri çekilmeyle yeniden başlatır. Pong zaman aşımı aktarım ayarı uygulanır. | Kesilecek kalıcı bir bağlantı yoktur; yeniden denemeler Slack tarafından istek başına yapılır |
Relay modu
Relay modu, Slack girişini OpenClaw Gateway'inden ayırır. Güvenilir bir yönlendirici tek Slack Socket Mode bağlantısını yönetir, hedef Gateway'i seçer ve kimliği doğrulanmış bir websocket üzerinden türü belirlenmiş bir olay iletir. Gateway, giden Slack Web API çağrıları için yine kendi bot token'ını kullanır.
{ 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'ını ve yönlendiricinin rota tablosunu Slack yetkilendirme sınırının bir parçası olarak değerlendirin: yönlendirilen olaylar, yetkilendirilmiş etkinleştirmeler olarak normal Slack mesaj işleyicisine girer. Yönlendiricinin websocket hello çerçevesinde sağladığı slack_identity, varsayılan giden kullanıcı adını ve simgeyi ayarlayabilir; çağıranın açıkça sağladığı kimlik yine önceliklidir. Relay bağlantısı, Socket Mode ile aynı sınırlı geri çekilme zamanlamasıyla yeniden bağlanır ve bağlantı her kesildiğinde yönlendiricinin sağladığı kimliği temizler.
Enterprise Grid kuruluş genelindeki kurulumlar
Tek bir Slack hesabı, Enterprise Grid kuruluş genelindeki bir kurulumun kapsadığı her çalışma alanından mesaj alabilir. Doğrudan Socket Mode veya HTTP Request URL'lerini seçin; Relay modu kurumsal hesaplar için desteklenmez. Aşağıdaki iki asgari ayrıcalıklı manifest de yalnızca V1 message ve app_mention olay yolunu, anlık yanıtları ve dinleyicinin yönettiği durum tepkilerini etkinleştirir.
Socket Mode
{ "display_information": { "name": "OpenClaw", "description": "OpenClaw için Slack bağlayıcısı" }, "features": { "bot_user": { "display_name": "OpenClaw", "always_online": true } }, "oauth_config": { "scopes": { "bot": [ "app_mentions:read", "channels:history", "channels:read", "chat:write", "files:read", "files:write", "groups:history", "groups:read", "im:history", "im:read", "mpim:history", "mpim:read", "reactions:write", "users:read" ] } }, "settings": { "org_deploy_enabled": true, "socket_mode_enabled": true, "event_subscriptions": { "bot_events": [ "app_mention", "message.channels", "message.groups", "message.im", "message.mpim" ] } }}Bir Enterprise Grid Org Admin veya Org Owner'ın uygulamayı onaylamasını, kuruluş düzeyinde yüklemesini ve kurulumun kapsayacağı çalışma alanlarını seçmesini sağlayın. OpenClaw'ı başlatmadan önce uygulamanın hedeflenen her çalışma alanında kullanılabildiğini doğrulayın. Socket Mode için connections:write içeren uygulama düzeyinde bir token oluşturun, ardından kuruluş kurulumundaki bot token'ını kopyalayın. Kuruluşta yüklenen bot token'ını kullanan hesabı yapılandırın:
{ channels: { slack: { enabled: true, mode: "socket", enterpriseOrgInstall: true, appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" }, botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, dmPolicy: "open", allowFrom: ["*"], groupPolicy: "allowlist", channels: { C0123456789: { requireMention: true }, }, }, },}HTTP Request URL'leri
Gateway'in genel bir HTTPS uç noktası olduğunda ve Socket Mode bağlantısı açmadığında HTTP modunu kullanın. Örnek URL'yi Gateway'in genel webhookPath URL'siyle (varsayılan /slack/events) değiştirin:
{ "display_information": { "name": "OpenClaw", "description": "OpenClaw için Slack bağlayıcısı" }, "features": { "bot_user": { "display_name": "OpenClaw", "always_online": true } }, "oauth_config": { "scopes": { "bot": [ "app_mentions:read", "channels:history", "channels:read", "chat:write", "files:read", "files:write", "groups:history", "groups:read", "im:history", "im:read", "mpim:history", "mpim:read", "reactions:write", "users:read" ] } }, "settings": { "org_deploy_enabled": true, "event_subscriptions": { "request_url": "https://gateway-host.example.com/slack/events", "bot_events": [ "app_mention", "message.channels", "message.groups", "message.im", "message.mpim" ] } }}Bir Enterprise Grid Org Admin veya Org Owner'ın uygulamayı onaylamasını, kuruluş düzeyinde yüklemesini ve kurulumun kapsayacağı çalışma alanlarını seçmesini sağlayın. Slack, Request URL'yi doğruladıktan sonra kuruluş kurulumunun bot token'ını ve uygulamanın Basic Information -> App Credentials -> Signing Secret değerini kopyalayın. Kurumsal hesabı aynı Request URL yolu ile yapılandırın:
{ channels: { slack: { enabled: true, mode: "http", enterpriseOrgInstall: true, botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" }, signingSecret: { source: "env", provider: "default", id: "SLACK_SIGNING_SECRET", }, webhookPath: "/slack/events", dmPolicy: "open", allowFrom: ["*"], groupPolicy: "allowlist", channels: { C0123456789: { requireMention: true }, }, }, },}Başlangıçta OpenClaw, enterpriseOrgInstall değerini Slack auth.test ile doğrular. İşaret olmadan kuruluşta yüklenmiş bir token veya işaretle birlikte bir çalışma alanı token'ı başlangıcın başarısız olmasına neden olur. Kuruluma hangi çalışma alanlarının izin verdiği konusunda doğruluk kaynağı Slack olmaya devam eder; ardından OpenClaw, teslim edilen her olaya yapılandırılmış kanal, kullanıcı, DM ve bahsetme politikalarını uygular. Enterprise V1, kuruluş kurulumları döngü önleme için çalışma alanıyla nitelendirilmiş kararlı bir bot kimliği sağlamadığından, allowBots değerinden bağımsız olarak bot tarafından oluşturulan tüm message ve app_mention olaylarını yönlendirmeden önce reddeder.
Enterprise desteği kasıtlı olarak doğrudan Socket Mode veya HTTP message ve app_mention olaylarıyla ve bunların anlık yanıtlarıyla sınırlıdır. Relay modu, eğik çizgi komutları, etkileşimler, App Home, tepki olayı dinleyicileri, sabitlenen öğeler, Slack eylem araçları, Slack'e özgü onaylar, bağlamalar, kuyruğa alınmış veya zamanlanmış teslimat ve proaktif gönderimler kurumsal hesaplarda kullanılamaz. Giden alındı bildirimi, yazıyor ve durum tepkileri, dinleyicinin yönettiği Slack istemcisi üzerinden desteklenir ve reactions:write gerektirir; gelen tepki bildirimleri ve tepki eylemi araçları kullanılamaz.
Anında yanıtlar; parçalar, medya, meta veriler, kimlik yedeği, bağlantı önizlemeleri ve alındılar için standart Slack teslim davranışını yeniden kullanır, ancak yalnızca doğrulanmış, dinleyiciye ait istemci etkin olay çevrimi içinde kaldığı sürece. Bellek içi gönderim kuyruğu ve ileti dizisine katılım kayıtları, söz konusu olayın çalışma alanına göre bölümlenir; istemcinin kendisi hiçbir zaman serileştirilmez veya kalıcı hâle getirilmez.
Kanal ilkesi anahtarları ve dm.groupChannels girdileri, ham ve kararlı Slack kanal kimliklerini veya
channel:<id> biçimini kullanmalıdır. OpenClaw, çalışma zamanı eşleştirmesi için her iki biçimi de ham kanal kimliğine normalleştirir; slack:, group: ve mpim: ön ekleri başlatmanın başarısız olmasına neden olur.
Kullanıcı ilkesi girdileri kararlı Slack kullanıcı kimliklerini kullanmalıdır; adlar, kısa adlar, görünen adlar ve e-posta adresleri başlatmanın başarısız olmasına neden olur. Kimlikler, Slack'in standart büyük harfli ön ekini ve gövdesini kullanmalıdır (örneğin C0123456789 veya U0123456789); küçük harfli ve kısa benzerleri başlatmanın başarısız olmasına neden olur. Kurumsal hesaplar
dangerouslyAllowNameMatching özelliğini etkinleştiremez. Kurumsal hesaplar genel
mentionPatterns.mode değerini ayarlayabilir, ancak yalın Slack kanal kimlikleri çalışma alanıyla nitelendirilmediğinden ve çalışma alanları arasında yeniden kullanılabildiğinden mentionPatterns.allowIn ve
mentionPatterns.denyIn başlatmanın başarısız olmasına neden olur. Çalışma alanı kurulumları mevcut kapsamlı bahsetme kalıbı davranışını korur. Kabul edilen her çalışma alanı, Slack kimlikleri çakışsa bile ayrı yönlendirme, oturum, transkript, yinelenenleri ayıklama, geçmiş ve önbellek kimliği alır. message akışı içinde sıradan kullanıcı mesajları ve kullanıcı tarafından oluşturulan file_share olayları desteklenir; diğer mesaj alt türleri yetkilendirme veya sistem olayı işlemeden önce reddedilir.
Kurumsal DM'ler ya devre dışı bırakılmalı (dm.enabled=false veya
dmPolicy="disabled") ya da dmPolicy="open" ile açıkça açılmalı ve değişmez "*" değerini içeren etkin bir hesap allowFrom ayarına sahip olmalıdır. Boş bir izin listesi veya "*" olmadan kullanıcıya özgü kimlikler başlatmanın başarısız olmasına neden olur. Slack kullanıcı kimlikleri bu yetkilendirme depolarında çalışma alanıyla nitelendirilmediğinden eşleştirme ve kullanıcı başına DM izin listeleri reddedilir. Kanal ve gönderen ilkesi kanal mesajlarına uygulanmaya devam eder.
Kurulum
openclaw plugins install @openclaw/slackplugins install, Plugin'i kaydeder ve etkinleştirir. Aşağıdaki Slack uygulaması ve kanal ayarlarını yapılandırana kadar hiçbir işlem yapmaz. Genel Plugin kurulum kuralları için Pluginler bölümüne bakın.
Hızlı kurulum
Bu bölümdeki manifestler, çalışma alanı kapsamlı bir kurulum oluşturur. Enterprise Grid kuruluş kurulumu için bunun yerine özel kuruluş genelindeki manifesti ve iş akışını kullanın.
Socket Mode (varsayılan)
Yeni bir Slack uygulaması oluşturun
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": "OpenClaw için Slack bağlayıcısı"},"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},"agent_view": {"agent_description": "OpenClaw, Slack Agent View konuşmalarını OpenClaw aracılarının kullanımına bağlar.","suggested_prompts": [{ "title": "Neler yapabilirsiniz?", "message": "Bana hangi konularda yardımcı olabilirsiniz?" },{"title": "Bu kanalı özetle","message": "Bu kanaldaki son etkinlikleri özetle."},{ "title": "Yanıt taslağı hazırla", "message": "Bir yanıt taslağı hazırlamama yardım et." }]},"slash_commands": [{"command": "/openclaw","description": "OpenClaw'a mesaj gönder","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","app_context_changed","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": "OpenClaw için Slack bağlayıcısı"},"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},"agent_view": {"agent_description": "OpenClaw, Slack Agent View konuşmalarını OpenClaw aracılarının kullanımına bağlar.","suggested_prompts": [{ "title": "Neler yapabilirsiniz?", "message": "Bana hangi konularda yardımcı olabilirsiniz?" },{"title": "Bu kanalı özetle","message": "Bu kanaldaki son etkinlikleri özetle."},{ "title": "Yanıt taslağı hazırla", "message": "Bir yanıt taslağı hazırlamama yardım et." }]},"slash_commands": [{"command": "/openclaw","description": "OpenClaw'a mesaj gönder","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","app_context_changed","message.channels","message.groups","message.im"]}}}Slack uygulamayı oluşturduktan sonra:
- Basic Information -> App-Level Tokens -> Generate Token and Scopes:
connections:writeekleyin, kaydedin ve App-Level Token değerini kopyalayın. - Install App -> Install to Workspace: Bot User OAuth Token değerini kopyalayın.
OpenClaw'ı yapılandırın
Ö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.json5Ortam değişkeni yedeği (yalnızca varsayılan hesap):
SLACK_APP_TOKEN=slack-app-token-exampleSLACK_BOT_TOKEN=slack-bot-token-exampleGateway'i başlatın
openclaw gatewayHTTP İstek URL'leri
Yeni bir Slack uygulaması oluşturun
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 → https://gateway-host.example.com/slack/events değerini genel Gateway URL'nizle değiştirin → Next → Create.
{"display_information": {"name": "OpenClaw","description": "OpenClaw için Slack bağlayıcısı"},"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},"agent_view": {"agent_description": "OpenClaw, Slack Agent View konuşmalarını OpenClaw aracılarının kullanımına bağlar.","suggested_prompts": [{ "title": "Neler yapabilirsiniz?", "message": "Bana hangi konularda yardımcı olabilirsiniz?" },{"title": "Bu kanalı özetle","message": "Bu kanaldaki son etkinlikleri özetle."},{ "title": "Yanıt taslağı hazırla", "message": "Bir yanıt taslağı hazırlamama yardım et." }]},"slash_commands": [{"command": "/openclaw","description": "OpenClaw'a mesaj gönder","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","app_context_changed","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": "OpenClaw için Slack bağlayıcısı"},"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},"agent_view": {"agent_description": "OpenClaw, Slack Agent View konuşmalarını OpenClaw ajanlarına bağlar.","suggested_prompts": [{ "title": "Neler yapabilirsin?", "message": "Bana hangi konularda yardımcı olabilirsin?" },{"title": "Bu kanalı özetle","message": "Bu kanaldaki son etkinlikleri özetle."},{ "title": "Bir yanıt taslağı hazırla", "message": "Bir yanıt taslağı hazırlamama yardım et." }]},"slash_commands": [{"command": "/openclaw","description": "OpenClaw'a mesaj gönder","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","app_context_changed","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:
- Basic Information → App Credentials: istek doğrulaması için Signing Secret değerini kopyalayın.
- Install App -> Install to Workspace: Bot User OAuth Token değerini kopyalayın.
OpenClaw'ı yapılandır
Ö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.json5Gateway'i başlat
openclaw gatewayKullanıcı kimliği (gerçek bir kişi olarak paylaşım yapma)
Kullanıcı kimliği, OpenClaw'ın Slack uygulamasını yetkilendiren insan adına içerik okumasına ve paylaşmasına olanak tanır. userToken işlem yapan kimliktir; eşlik eden bir Slack uygulaması, Events API trafiğini Socket Mode veya bir HTTP Request URL üzerinden taşır. Eşlik eden uygulamanın bot kullanıcısına veya bot token'ına ihtiyacı yoktur.
Eşlik eden uygulamayı şu şekilde kurun:
-
OAuth & Permissions -> User Token Scopes altında, kullanıcı kapsamlı şu izinleri ekleyin:
- geçmiş:
channels:history,groups:history,im:history,mpim:history - konuşma arama:
channels:read,groups:read,im:read,mpim:read - kişiler:
users:read - paylaşım yapma:
chat:write(mesajlar yetkilendiren kullanıcı adına paylaşılır) - DM açma:
im:write,mpim:write
- geçmiş:
-
Event Subscriptions -> Subscribe to events on behalf of users altında, şu kullanıcı olaylarını ekleyin. Bunları yalnızca bot olayları listesine eklemeyin:
message.channelsmessage.groupsmessage.immessage.mpim
-
Bir olay taşıma yöntemi seçin:
- Socket Mode: Socket Mode'u etkinleştirin ve
connections:writeile uygulama düzeyinde bir token oluşturun. BunuappTokenolarak yapılandırın. - HTTP Request URL: Event Subscriptions öğesini herkese açık OpenClaw Slack uç noktasına yönlendirin ve Basic Information -> App Credentials -> Signing Secret değerini kopyalayın. Bunu
signingSecretolarak yapılandırın.
- Socket Mode: Socket Mode'u etkinleştirin ve
-
Uygulamayı yükleyin veya yeniden yükleyin, hedeflenen insan olarak yetkilendirin ve elde edilen kullanıcı OAuth token'ını
userTokeniçine kopyalayın.
Socket Mode yapılandırması:
{ channels: { slack: { identity: "user", userToken: "<xoxp>", appToken: "<xapp>", }, },}HTTP Request URL yapılandırması:
{ channels: { slack: { identity: "user", mode: "http", userToken: "<xoxp>", signingSecret: "<signing-secret>", webhookPath: "/slack/events", }, },}OpenClaw, çözümlenen insan kimliğinin yazdığı kullanıcı kapsamlı mesaj olaylarını otomatik olarak bırakır; böylece gönderdiği mesajlar kendi kendine yanıtları tetiklemez.
Socket Mode taşıma ayarları
OpenClaw, Socket Mode için Slack SDK istemcisinin pong zaman aşımını varsayılan olarak 15 saniyeye ayarlar. Taşıma ayarlarını yalnızca çalışma alanına veya ana makineye özgü ayarlama 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 olay döngüsünde bilinen tıkanmaların bulunduğu 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 pinglerinin bekleme süresidir. Uygulama mesajları ve olayları taşıma canlılığı sinyalleri değil, uygulama durumu olarak kalır.
Notlar:
socketMode, HTTP Request URL modunda yok sayılır.- Temel
channels.slack.socketModeayarları, geçersiz kılınmadıkları sürece tüm Slack hesaplarına uygulanır. Hesaba özgü geçersiz kılmalarchannels.slack.accounts.<accountId>.socketModekullanır; bu bir nesne geçersiz kılması olduğundan, ilgili hesap için istediğiniz tüm soket ayarlama alanlarını ekleyin. - Yalnızca
clientPingTimeoutiçin bir OpenClaw varsayılanı (15000) vardır.serverPingTimeoutvepingPongLoggingEnabled, yalnızca yapılandırıldıklarında Slack SDK'ya aktarılır. - Socket Mode yeniden başlatma geri çekilmesi yaklaşık 2 saniyede başlar ve yaklaşık 30 saniyede üst sınıra ulaşır. Kurtarılabilir başlatma, başlatmayı bekleme ve bağlantı kesilmesi hataları, kanal durana kadar yeniden denenir. Geçersiz kimlik doğrulama, iptal edilmiş token'lar veya eksik kapsamlar gibi kalıcı hesap ve kimlik bilgisi hataları sonsuza kadar yeniden denenmek yerine hızla başarısız olur.
Manifest ve kapsam denetim listesi
Temel Slack uygulama manifesti, Socket Mode ve HTTP Request URL'leri için aynıdır. Yalnızca settings bloğu (ve eğik çizgi komutunun url değeri) farklıdır.
Temel manifest (Socket Mode varsayılanı):
{ "display_information": { "name": "OpenClaw", "description": "OpenClaw için Slack bağlayıcısı" }, "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 }, "agent_view": { "agent_description": "OpenClaw, Slack Agent View konuşmalarını OpenClaw ajanlarına bağlar.", "suggested_prompts": [ { "title": "Neler yapabilirsin?", "message": "Bana hangi konularda yardımcı olabilirsin?" }, { "title": "Bu kanalı özetle", "message": "Bu kanaldaki son etkinlikleri özetle." }, { "title": "Bir yanıt taslağı hazırla", "message": "Bir yanıt taslağı hazırlamama yardım et." } ] }, "slash_commands": [ { "command": "/openclaw", "description": "OpenClaw'a mesaj gönder", "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", "app_context_changed", "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 Request URLs modu için settings öğesini 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": "OpenClaw'a mesaj gönder", "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", "app_context_changed", "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 kullanıma sunun.
Varsayılan bildirim, Slack Uygulama Ana Sayfası Home sekmesini etkinleştirir ve app_home_opened olayına abone olur. Bir çalışma alanı üyesi Home sekmesini açtığında OpenClaw, views.publish ile güvenli bir varsayılan Home görünümü yayımlar; hiçbir konuşma yükü veya özel yapılandırma eklenmez. Tek eğik çizgi komutu modu etkinleştirildiğinde komut ipucu channels.slack.slashCommand.name kullanır; yerel komutları kullanan veya eğik çizgi komutu kullanmayan kurulumlarda bu ipucu gösterilmez. Slack DM'leri için Messages sekmesi etkin kalır. Yeni uygulamalar features.agent_view, assistant:write ve app_context_changed aracılığıyla Slack Agent View kullanır. Görünür her Agent View kökü kendi OpenClaw ileti dizisi oturumuna yönlendirilir ve Slack'in sıralı etkin görünüm varlıkları aracıya yalnızca güvenilmeyen bağlam olarak ulaşır.
Zaten features.assistant_view kullanan mevcut uygulamalar geçerli bildirimlerini koruyabilir. OpenClaw, bu kurulumlar için assistant_thread_started ve assistant_thread_context_changed olaylarını işlemeye devam eder. Slack, Assistant View'dan Agent View'a geçişi geri döndürülemez hâle getirir ve sonrasında kullanıcıların tam yenileme yapmasını gerektirir; bu nedenle tüm çalışma alanını taşımayı planlayana kadar mevcut bir uygulamada assistant_view değerini değiştirmeyin.
İsteğe bağlı yerel eğik çizgi komutları
Bazı ayrıntılar dikkate alınarak tek bir yapılandırılmış komut yerine birden çok yerel eğik çizgi komutu kullanılabilir:
/statuskomutu ayrılmış olduğundan/statusyerine/agentstatuskullanın.- Bir Slack uygulamasında aynı anda en fazla 25 eğik çizgi komutu kaydedilebilir (Slack platformu sınırı).
OpenClaw, etkinleştirilen yerel komutlar için işleyiciler kaydeder; ancak Slack bildirim girdileri yöneticiler tarafından yönetilmeye devam eder ve çalışma zamanında eşitlenmez. Bildirime /login değerini manuel olarak ekleyin; aşağıdaki örnek, 25 komut sınırında kalmak için isteğe bağlı /side diğer adı yerine bunu içerir. /login her yerde gösterilebilir, ancak eşleştirme kodlarını yalnızca özel sohbetlerde veya Web Kullanıcı Arayüzü'nde verir.
Mevcut features.slash_commands bölümünüzü kullanılabilir komutların bir alt kümesiyle değiştirin:
Socket Mode (varsayılan)
{"slash_commands": [{"command": "/new","description": "Yeni bir oturum başlat","usage_hint": "[model]"},{"command": "/reset","description": "Geçerli oturumu sıfırla"},{"command": "/compact","description": "Oturum bağlamını sıkıştır","usage_hint": "[instructions]"},{"command": "/stop","description": "Geçerli çalıştırmayı durdur"},{"command": "/session","description": "İleti dizisi bağlama süresinin dolmasını yönet","usage_hint": "boşta <duration|off> veya azami yaş <duration|off>"},{"command": "/think","description": "Düşünme düzeyini ayarla","usage_hint": "<level>"},{"command": "/verbose","description": "Ayrıntılı çıktıyı aç veya kapat","usage_hint": "on|off|full"},{"command": "/fast","description": "Hızlı modu göster veya ayarla","usage_hint": "[status|on|off]"},{"command": "/reasoning","description": "Akıl yürütme görünürlüğünü aç veya kapat","usage_hint": "[on|off|stream]"},{"command": "/elevated","description": "Yükseltilmiş modu aç veya kapat","usage_hint": "[on|off|ask|full]"},{"command": "/exec","description": "Çalıştırma varsayılanlarını göster veya ayarla","usage_hint": "host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>"},{"command": "/approve","description": "Bekleyen onay isteklerini onayla veya reddet","usage_hint": "<id> <decision>"},{"command": "/model","description": "Modeli göster veya ayarla","usage_hint": "[name|#|status]"},{"command": "/models","description": "Sağlayıcıları/modelleri listele","usage_hint": "[provider] [page] [limit=<n>|size=<n>|all]"},{"command": "/help","description": "Kısa yardım özetini göster"},{"command": "/commands","description": "Oluşturulan komut kataloğunu göster"},{"command": "/tools","description": "Geçerli aracının şu anda neleri kullanabileceğini göster","usage_hint": "[compact|verbose]"},{"command": "/agentstatus","description": "Kullanılabilir olduğunda sağlayıcı kullanımı/kotası dâhil çalışma zamanı durumunu göster"},{"command": "/tasks","description": "Geçerli oturumun etkin/yakın tarihli arka plan görevlerini listele"},{"command": "/context","description": "Bağlamın nasıl oluşturulduğunu açıkla","usage_hint": "[list|detail|json]"},{"command": "/whoami","description": "Gönderen kimliğinizi göster"},{"command": "/skill","description": "Bir beceriyi adına göre çalıştır","usage_hint": "<name> [input]"},{"command": "/btw","description": "Oturum bağlamını değiştirmeden bir yan soru sor","usage_hint": "<question>"},{"command": "/login","description": "Codex oturum açma işlemini eşleştir","usage_hint": "[codex|openai]"},{"command": "/usage","description": "Kullanım alt bilgisini denetle veya maliyet özetini göster","usage_hint": "off|tokens|full|cost"}]}HTTP İstek URL'leri
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": "Yeni bir oturum başlat","usage_hint": "[model]","url": "https://gateway-host.example.com/slack/events"},{"command": "/help","description": "Kısa yardım özetini göster","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 iletilerin varsayılan Slack uygulama kimliği yerine etkin aracı kimliğini (özel kullanıcı adı ve simge) kullanmasını istiyorsanız chat:write.customize bot kapsamını ekleyin.
Emoji simgesi kullanırsanı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
- Bot kimliği (varsayılan), Socket Mode için
botToken+appToken; HTTP modu için isebotToken+signingSecretgerektirir. - Kullanıcı kimliği, Socket Mode için
userToken+appToken; HTTP modu için iseuserToken+signingSecretgerektirir. Bot belirteci kullanmaz. - Aktarma modu,
botTokenile birlikterelay.url,relay.authTokenverelay.gatewayIdgerektirir; uygulama belirteci veya imzalama sırrı kullanmaz. botToken,appToken,signingSecret,relay.authTokenveuserTokendüz metin dizelerini veya SecretRef nesnelerini kabul eder.- Yapılandırma belirteçleri, ortam geri dönüşünü geçersiz kılar.
SLACK_BOT_TOKEN,SLACK_APP_TOKENveSLACK_USER_TOKENortam geri dönüşlerinin her biri yalnızca varsayılan hesap için geçerlidir.userTokenvarsayılan olarak salt okunur davranışı (userTokenReadOnly: true) kullanır.
Durum anlık görüntüsü davranışı:
- Slack hesap incelemesi, kimlik bilgisi başına
*Sourceve*Statusalanlarını (botToken,appToken,signingSecret,userToken) izler. - Durum
available,configured_unavailableveyamissingdeğeridir. configured_unavailable, hesabın SecretRef veya satır içi olmayan başka bir sır kaynağı aracılığıyla yapılandırıldığı, ancak geçerli komut/çalışma zamanı yolunun gerçek değeri çözümleyemediği anlamına gelir.- HTTP modunda
signingSecretStatusdâhil edilir. Socket Mode, bot kimliği içinbotTokenStatus+appTokenStatus, kullanıcı kimliği için iseuserTokenStatus+appTokenStatuskullanır.
Eylemler ve geçitler
Slack eylemleri channels.slack.actions.* tarafından denetlenir.
Geçerli Slack araçlarında kullanılabilen eylem grupları:
| Grup | Varsayılan |
|---|---|
| messages | etkin |
| reactions | etkin |
| pins | etkin |
| memberInfo | etkin |
| emojiList | etkin |
Geçerli Slack ileti 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ü önizlemelerini, diğer dosya türleri içinse yerel dosya meta verilerini döndürür.
Erişim denetimi ve yönlendirme
DM politikası
channels.slack.dmPolicy, DM erişimini denetler. channels.slack.allowFrom, standart DM izin listesidir.
pairing(varsayılan)allowlistopen(channels.slack.allowFromdeğerinin"*"içermesini gerektirir)disabled
DM bayrakları:
dm.enabled(varsayılan olarak true)channels.slack.allowFromdm.allowFrom(eski)dm.groupEnabled(grup DM'lerinde 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 amacıyla 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 politikası
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 kimliklerini kullanmalıdır (örneğin C12345678).
Çalışma zamanı notu: channels.slack tamamen eksikse (yalnızca ortam değişkenleriyle kurulum), çalışma zamanı groupPolicy="allowlist" değerine geri döner ve (channels.defaults.groupPolicy ayarlanmış olsa bile) bir uyarı kaydeder.
Ad/kimlik çözümleme:
- kanal izin listesi girdileri ve DM izin listesi girdileri, belirteç erişimi izin verdiğinde başlangıçta çözümlenir
- çözümlenemeyen kanal adı girdileri yapılandırıldıkları biçimde korunur ancak varsayılan olarak yönlendirmede yok sayılır
- gelen yetkilendirme ve kanal yönlendirme varsayılan olarak önce kimliğe göre yapılır; doğrudan kullanıcı adı/kısa ad eşleştirmesi
channels.slack.dangerouslyAllowNameMatching: truegerektirir
Bahsetmeler ve kanal kullanıcıları
Kanal mesajları varsayılan olarak bahsetme koşuluna 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 kalıpları (
agents.entries.*.groupChat.mentionPatterns, geri dönüş olarakmessages.groupChat.mentionPatterns) - botun kendi Slack mesajına verilen yanıtlar (
implicitMentions.replyToBot) - botun katıldığı ileti dizilerindeki takip mesajları (
implicitMentions.threadParticipation)
Kanal başına denetimler (channels.slack.channels.<id>; adlar yalnızca başlangıç çözümlemesi veya dangerouslyAllowNameMatching aracılığıyla):
requireMentionignoreOtherMentionsreplyToMode(off|first|all|batched; bu kanal için hesap/sohbet türü yanıt modunu geçersiz kılar)users(izin listesi)allowBotsskillssystemPrompttools,toolsBySendertoolsBySenderanahtar biçimi:channel:,id:,e164:,username:,name:veya"*"joker karakteri (önek içermeyen eski anahtarlar hâlâ yalnızcaid:ile eşlenir)
ignoreOtherMentions (varsayılan false), başka bir kullanıcıdan veya kullanıcı grubundan bahsedip bu bottan bahsetmeyen kanal mesajlarını atar. DM'ler ve grup DM'leri (MPIM'ler) etkilenmez. Filtre, auth.test üzerinden çözümlenmiş bir bot kullanıcı kimliği gerektirir; bu kimlik kullanılamıyorsa (örneğin yalnızca kullanıcı belirtecine sahip bir kimlik), geçit açık kalır ve mesajlar değiştirilmeden geçer.
allowBots, kanallar ve özel kanallar için ihtiyatlı davranır: bot tarafından oluşturulan oda mesajları yalnızca gönderen bot o odanın users izin listesinde açıkça yer alıyorsa veya channels.slack.allowFrom içindeki en az bir açık Slack sahibi kimliği o anda odanın üyesiyse kabul edilir. Joker karakterler ve görünen ad biçimindeki sahip girdileri, sahip bulunma koşulunu karşılamaz. Sahip bulunma denetimi Slack conversations.members kullanır; uygulamanın oda türü için uygun okuma kapsamına sahip olduğundan emin olun (herkese açık kanallar için channels:read, özel kanallar için groups:read). Üye araması başarısız olursa OpenClaw, bot tarafından oluşturulan oda mesajını atar.
Kabul edilen, bot tarafından oluşturulmuş Slack mesajları ortak bot döngüsü korumasını 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ır gerektirdiğinde 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
direct; kanallarchannel; MPIM'ler isegroupolarak yönlendirilir. - Slack yönlendirme bağlamaları, ham eş kimliklerinin yanı sıra
channel:C12345678,user:U12345678ve<@U12345678>gibi Slack hedef biçimlerini kabul eder. - Varsayılan
session.dmScope=mainile sıradan Slack DM'leri ana ajan oturumunda birleştirilir. Agent View kökleri ve mevcut Assistant View ileti dizileri,:thread:<threadTs>oturumları olarak yalıtılmış kalır. - Kanal oturumları:
agent:<agentId>:slack:channel:<channelId>. - Sıradan üst düzey kanal mesajları,
replyToModedeğerioffolmasa bile kanal başına oturumda kalır. - Slack kanalı, MPIM, Agent View ve Assistant View ileti dizisi yanıtları, oturum son ekleri için üst Slack
thread_tsdeğerini kullanır (:thread:<threadTs>). Sıradan DM yanıt dizileri, temel DM oturumunda bir kullanıcı arayüzü olanağı olarak kalır. - OpenClaw, görünür bir Slack ileti dizisi başlatması beklenen uygun bir üst düzey kanal kökünü
agent:<agentId>:slack:channel:<channelId>:thread:<rootTs>içine başlangıç verisi olarak ekler; böylece kök ve sonraki ileti dizisi yanıtları aynı OpenClaw oturumunu paylaşır. Bu,app_mentionolayları, açık bot veya yapılandırılmış bahsetme kalıbı eşleşmeleri verequireMention: falseolupreplyToModedeğerioffolmayan kanallar 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 mevcut ileti dizisinden kaç mesajın getirileceğini denetler (varsayılan20; devre dışı bırakmak için0olarak ayarlayın).channels.slack.implicitMentions.replyToBot, botun kendi mesajına verilen bir yanıtın bahsetme geçidini atlayıp atlamayacağını denetler (varsayılantrue).channels.slack.implicitMentions.threadParticipation, botun yanıt verdiği bir ileti dizisindeki takip mesajlarının bahsetme geçidini atlayıp atlamayacağını denetler (varsayılantrue). Bu takip mesajlarında yeni ve açık bir bahsetme gerektirmek içinfalseolarak ayarlayın.openclaw doctor --fix, eskichannels.slack.thread.requireExplicitMentionanahtarını bu pozitif standart bayrağa taşır.- Hesap geçersiz kılmaları
channels.slack.accounts.<id>.implicitMentions; ortak varsayılanlarchannels.defaults.implicitMentionsaltında bulunur.
Yanıt ileti dizisi denetimleri:
channels.slack.channels.<id>.replyToMode: Slack kanalı/özel kanal mesajları için kanal başına geçersiz kılmachannels.slack.replyToMode:off|first|all|batched(varsayılanoff)channels.slack.replyToModeByChatType:direct|group|channelbaşına- doğrudan sohbetler için eski geri dönüş:
channels.slack.dm.replyToMode
Elle belirtilen yanıt etiketleri desteklenir:
[[reply_to_current]][[reply_to:<id>]]
message aracından açık Slack ileti dizisi yanıtları göndermek için replyBroadcast: true değerini action: "send" ile ve threadId ya da replyTo değerini ayarlayarak Slack'ten ileti dizisi yanıtını üst kanalda da yayımlamasını isteyin. Bu, Slack'in chat.postMessage reply_broadcast bayrağıyla eşlenir ve medya yüklemelerinde değil, yalnızca metin veya Block Kit gönderimlerinde desteklenir.
Bir message araç çağrısı Slack ileti dizisi içinde çalışıp aynı kanalı hedeflediğinde OpenClaw, normalde geçerli hesap, sohbet türü veya kanal başına replyToMode ayarına göre mevcut Slack ileti dizisini devralır. Otomatik yanıtlar ve aynı kanala yönelik send ya da upload-file çağrıları aynı kanal başına geçersiz kılmayı kullanır. Bunun yerine üst kanalda yeni bir mesaj göndermeyi zorlamak için action: "send" veya action: "upload-file" üzerinde topLevel: true ayarlayın. threadId: null aynı üst düzey devre dışı bırakma 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ğini belirler.
Varsayılan olarak onay emojisi sabit kalırken Slack'in yerel ajan/asistan ileti dizisi durumu, dönüşümlü yükleme mesajlarıyla ilerlemeyi gösterir. Bunun yerine kuyruğa alındı/düşünüyor/araç/tamamlandı/hata tepki yaşam döngüsünü etkinleştirmek için messages.statusReactions.enabled: true ayarlayın.
Emoji (ackReaction)
Çözümleme sırası:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- ajan kimliği emojisi geri dönüşü (
agents.entries.*.identity.emoji, aksi takdirde"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 üzerinden okur (varsayılan "group-mentions"). Şu anda Slack hesabı veya Slack kanalı düzeyinde geçersiz kılma yoktur; değer Gateway genelinde geçerlidir.
Değerler:
"all": ortam oda olayları dâhil olmak üzere DM'lerde ve gruplarda tepki ver."direct": yalnızca DM'lerde tepki ver."group-all": ortam oda olayları dışında her grup mesajına tepki ver (DM'ler hariç)."group-mentions"(varsayılan): gruplarda yalnızca bottan bahsedildiğinde (veya katılımı etkinleştirmiş grup bahsedilebilirlerinde) tepki ver. DM'ler hariç tutulur."off"/"none": hiçbir zaman tepki verme.
{ messages: { ackReaction: "eyes", ackReactionScope: "all", // DM'lerde ve gruplarda tepki ver },}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ıyla değiştir.block: parçalı önizleme güncellemelerini sona ekle.progress: oluşturma sırasında ilerleme durumu metnini göster, ardından son metni gönder.streaming.preview.toolProgress: taslak önizlemesi etkinken araç/ilerleme güncellemelerini düzenlenen aynı önizleme mesajına yönlendir (varsayılan:true). Araç/ilerleme mesajlarını ayrı tutmak içinfalseayarlayın.streaming.preview.commandText/streaming.progress.commandText: ham komut/çalıştırma metnini gizlerken kompakt araç ilerleme satırlarını korumak içinstatusolarak ayarlayın (varsayılan:raw).
Kompakt ilerleme satırlarını korurken ham komut/çalıştırma metnini gizleyin:
{ "channels": { "slack": { "streaming": { "mode": "progress", "progress": { "toolProgress": true, "commandText": "status" } } } }}channels.slack.streaming.nativeTransport, channels.slack.streaming.mode değeri partial olduğunda Slack'in yerel metin akışını denetler (varsayılan: true).
Slack'in yerel ilerleme görev kartları, ilerleme modu için isteğe bağlıdır. Çalışma sürerken Slack'e özgü bir plan/görev kartı göndermek ve tamamlandığında aynı görev kartını güncellemek için channels.slack.streaming.progress.nativeTaskCards değerini true olarak channels.slack.streaming.mode="progress" ile 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
replyToModekuralını izler. - Kanal, grup sohbeti ve üst düzey DM kökleri, yerel akış kullanılamadığında veya yanıt ileti dizisi bulunmadığında normal taslak önizlemesini 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ındaki yerel akış/durum önizlemesini göstermez. Bunun yerine OpenClaw, DM'de bir taslak önizlemesi gönderir ve düzenler.
- Medya ve metin dışı yükler normal teslimata geri döner.
- Medya/hata nihai sonuçları bekleyen önizleme düzenlemelerini iptal eder; uygun metin/blok nihai sonuçları yalnızca önizlemeyi yerinde düzenleyebildiklerinde gönderilir.
- Akış yanıtın ortasında başarısız olursa OpenClaw, kalan yükler için normal teslimata geri döner.
Slack yerel metin akışı yerine taslak önizlemesini kullanın:
{ channels: { slack: { streaming: { mode: "partial", nativeTransport: false, }, }, },}Slack yerel ilerleme görev kartlarını etkinleştirin:
{ 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 diğer addır.- boolean
channels.slack.streaming,channels.slack.streaming.modevechannels.slack.streaming.nativeTransportiçin eski bir diğer addır. - Üst düzey
channels.slack.chunkModevechannels.slack.nativeStreaming,channels.slack.streaming.chunkModevechannels.slack.streaming.nativeTransportiçin eski diğer adlardır. - Eski diğer adlar çalışma zamanında okunmaz; kalıcı Slack akış yapılandırmasını standart anahtarlarla yeniden yazmak için
openclaw doctor --fixkomutunu çalıştırın.
Yazıyor tepkisi geri dönüşü
typingReaction, OpenClaw bir yanıtı işlerken gelen Slack mesajına geçici bir tepki ekler ve çalıştırma tamamlandığında bunu kaldırır. Bu özellik en çok, varsayılan bir "yazıyor..." durum göstergesi kullanan ileti dizisi yanıtlarının dışında yararlı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, mümkün olan en iyi şekilde uygulanır ve yanıt ya da hata yolu tamamlandıktan sonra otomatik olarak temizlenmeye çalışılır.
Sesli giriş
Bugün Slack'te OpenClaw ile konuşmak için OpenClaw uygulamasına bir Slack ses klibi gönderin. Slackbot'un dikte mikrofonu, uygulama API'si olmayan ve Slack'e ait ayrı bir özelliktir.
- Slackbot sesli diktesi kullanıcının özel Slackbot görüşmesinde bulunur. Slack, kaydı bir Slackbot istemine dönüştürür ancak Events API aracılığıyla üçüncü taraf Slack uygulamalarına ses dosyası, dikte olayı, istem veya giriş kaynağı işaretçisi göndermez. OpenClaw Slack Plugin'i bunu etkinleştiremez veya alamaz.
- Slack ses klipleri, OpenClaw DM'sinde, kanalında veya ileti dizisinde gönderilebilen, Slack'te depolanan dosyalardır. OpenClaw, erişilebilir bir klibi bot belirteciyle indirir, Slack'in klip MIME meta verilerini normalleştirir ve ortak ses transkripsiyonu işlem hattına gönderir. Önerilen uygulama manifesti, gerekli
files:readkapsamını içerir.
Ses klipleri ile Slackbot diktesinin gizlilik açısından farklı anlamları vardır: Klipler Slack dosya saklama politikasına tabidir ve OpenClaw bunları transkripsiyon için indirir; Slack ise dikte sesinin depolanmadığını belirtir.
requireMention: true bulunan bir kanalda, altyazısız bir ses klibi yapılandırılmış bir bahsetme kalıbının seslendirilmesiyle eşiği karşılayabilir (agents.entries.*.groupChat.mentionPatterns, yoksa messages.groupChat.mentionPatterns kullanılır). OpenClaw, klibi indirmeden veya yazıya dökmeden önce göndereni yetkilendirir; ardından yalnızca transkript eşleşirse klibi kabul eder. Başarısız veya eşleşmeyen spekülatif bir transkript, indirilen kliple birlikte atılır; kanal geçmişinde saklanmaz. Yerel Slack @bot kimliği konuşmadan çıkarılamaz; bu nedenle seslendirilen bir ad kalıbı yapılandırın veya yazılı bir bahsetme ekleyin. Transkript yankılama etkinse yankı yalnızca kabulden sonra gönderilir.
Medya, parçalara ayırma ve teslimat
Gelen ekler
Slack dosya ekleri, Slack tarafından barındırılan özel URL'lerden indirilir (belirteçle kimliği doğrulanan 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ı, aracıların özgün dosyayı download-file ile getirebilmesi için Slack fileId değerini içerir.
İndirmeler sınırlı boşta kalma ve toplam zaman aşımları kullanır. Slack dosyasının alınması duraklar veya başarısız olursa OpenClaw mesajı işlemeye devam eder ve dosya yer tutucusuna geri döner.
Çalışma zamanındaki gelen boyut üst sınırı, channels.slack.mediaMaxMb tarafından geçersiz kılınmadığı sürece varsayılan olarak 20MB değeridir.
Giden metin ve dosyalar
- Metin parçaları
channels.slack.textChunkLimitkullanır (varsayılan8000, Slack'in kendi mesaj uzunluğu sınırıyla kısıtlanır) channels.slack.streaming.chunkMode="newline"önce paragrafa göre bölmeyi etkinleştirir- Dosya gönderimleri Slack yükleme API'lerini kullanır ve ileti dizisi yanıtları (
thread_ts) içerebilir - Uzun dosya açıklamaları, yükleme yorumu olarak Slack açısından güvenli ilk metin parçasını kullanır ve kalan parçaları takip mesajları olarak gönderir
- Giden medya üst sınırı, yapılandırılmışsa
channels.slack.mediaMaxMbdeğerini izler; aksi takdirde kanal gönderimleri medya işlem 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 içeren Slack DM'leri doğrudan kullanıcı kimliklerine gönderilebilir; dosya yüklemeleri ve ileti dizisi gönderimleri ise bu yollar somut bir görüşme kimliği gerektirdiğinden önce Slack görüşme API'leri aracılığıyla DM'yi açar.
Komutlar ve eğik çizgi davranışı
Eğik çizgi komutları Slack'te tek bir yapılandırılmış komut veya birden fazla yerel komut olarak görünür. Komut varsayılanlarını değiştirmek için channels.slack.slashCommand yapılandırmasını ayarlayın:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
/openclaw /helpYerel komutlar, Slack uygulamanızda ek manifest ayarları gerektirir ve bunun yerine genel yapılandırmalardaki 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 öncelik sırasına göre aşağıdakilerden biri olarak oluşturulur:
- Yeterince kısa 3-5 seçenek: taşma ("...") menüsü
- 100'den fazla seçenek ve zaman uyumsuz seçenek filtreleme kullanılabilir: harici seçim
- 1-2 seçenek veya kodlanmış değeri seçim için fazla uzun olan herhangi bir seçenek: düğme blokları
- Diğer durumlarda (6-100 seçenek veya zaman uyumsuz filtreleme olmadan 100'den fazla seçenek): menü başına 100 seçenek olacak şekilde parçalara ayrılmış statik seçim menüsü
/thinkEğik çizgi oturumları agent:<agentId>:slack:slash:<userId> gibi yalıtılmış anahtarlar kullanır ve komut yürütmelerini yine CommandTargetSessionKey kullanarak hedef görüşme oturumuna yönlendirir.
Yerel grafikler
Slack'in herkese açık data_visualization Block Kit bloğu
mesajlarda çizgi, çubuk, alan ve pasta grafiklerini oluşturur. OpenClaw, taşınabilir
presentation chart bloğunu bu yerel biçime eşler; normal
chat:write mesaj erişiminin ötesinde ek OAuth kapsamı, dosya yükleme,
görüntü oluşturucu veya Slack yapılandırması gerekmez.
{ "blocks": [ { "type": "chart", "chartType": "bar", "title": "Üç aylık gelir", "categories": ["Q1", "Q2"], "series": [{ "name": "Gelir", "values": [120, 145] }], "xLabel": "Çeyrek" } ]}Slack'in sınırları yerel oluşturmadan önce uygulanır:
- Başlık ve isteğe bağlı eksen etiketleri: 50 karakter
- Pasta: 1-12 pozitif dilim
- Çizgi/çubuk/alan: benzersiz adlandırılmış 1-12 seri ve 1-20 ortak kategori
- Dilim, kategori ve seri etiketleri: 20 karakter
- Her seri, her kategori için bir sonlu değer içermelidir; pasta dışındaki değerler negatif olabilir
Her yerel grafik ayrıca ekran okuyucular, bildirimler, oturum yansıtma ve bloğu
oluşturamayan istemciler için üst düzey bir metin gösterimi taşır. Diğer OpenClaw
kanallarına yapılan standart sunum gönderimleri, yerel grafik desteğini bildirmedikleri
sürece aynı belirlenimci grafik verilerini metin olarak alır. Aşamalı kullanıma sunma
sırasında Slack grafiği invalid_blocks ile reddederse OpenClaw, reddedilen yerel
veri bloklarını kaldırır, varsa diğer denetimleri korur ve eksiksiz grafik gösterimini
görünür metin olarak gönderir.
Slack şu anda mesaj başına en fazla iki data_visualization bloğunu kabul eder. Bir
sunum ikiden fazla geçerli grafik içerdiğinde OpenClaw bunların sırasını korur ve
her mesajda en fazla iki grafik olacak şekilde takip mesajlarında yerel oluşturmaya
devam eder.
Slack'in geliştirici duyurusu bloğu uygulamalara yönelik bir Block Kit özelliği olarak belgeler ve ücretli plan kısıtlaması yayımlamaz. Business+/Enterprise uygunluk ifadesi, bir uygulamanın önceden yapılandırılmış bir Block Kit grafiği göndermesinden ayrı olan Slackbot'un otomatik yapay zekâ grafik üretimi için geçerlidir. Grafikler yalnızca mesaj bloklarıdır; App Home, modal veya Canvas içeriği değildir.
Yerel tablolar
Slack'in mevcut data_table Block Kit bloğu
mesajlarda yapılandırılmış satırları ve sütunları oluşturur. OpenClaw, açık bir
taşınabilir presentation table bloğunu data_table biçimine eşler; Slack'in
eski table bloğunu
kullanmaz. Normal chat:write mesaj erişiminin ötesinde ek OAuth kapsamı veya
Slack yapılandırması gerekmez.
{ "blocks": [ { "type": "table", "caption": "Açık işlem hattı", "headers": ["Hesap", "Aşama", "ARR"], "rows": [ ["Acme", "Kazanıldı", 125000], ["Globex", "İnceleme", 82000] ], "rowHeaderColumnIndex": 0 } ]}OpenClaw, başlık ve dize hücrelerini Slack raw_text hücrelerine eşler. Sayısal
hücreler raw_number biçimine eşlenir ve sonlu sayısal değer, yerel sıralama ve
filtreleme için korunur. rowHeaderColumnIndex, mevcut olduğunda, sıfır tabanlı bu
sütunu Slack satır başlıkları olarak işaretler.
Slack'in yayımlanan data_table sınırları yerel oluşturmadan önce uygulanır:
- 1-20 sütun
- 1-100 veri satırı ve başlık satırı
- Her satırda aynı sayıda hücre
- Tek bir mesajdaki tüm tablo hücrelerinde toplam en fazla 10.000 karakter
Mesaj toplam karakter sınırı içinde kaldığı sürece birden fazla geçerli tablo bloğu yerel olarak oluşturulabilir. Yerel zarf içinde oluşturulamayan bir tablo, satırları veya hücreleri kaybetmek yerine eksiksiz belirlenimci metne dönüşür. Bu metin tek bir Slack mesajını aşarsa gönderimler ve eğik çizgi yanıtları sıralı metin parçaları kullanır. Tablo düzenlemeleri, mevcut bir mesajdaki satırları sessizce kesmek yerine açık bir boyut hatasıyla başarısız olur.
Taşınabilir sunumdan üretilen her yerel tablo ayrıca ekran okuyucular, bildirimler, oturum yansıtma ve
bloğu işleyemeyen istemciler için üst düzey bir metin gösterimi taşır. Ham grafik ve tablo değerleri
yedek gösterimde değişmez kalır; böylece <@U123> gibi hücre verileri bir Slack bahsine dönüşmez.
Slack, yerel grafik veya tablo bloklarını invalid_blocks ile reddederse OpenClaw,
sınırlandırılmış tek bir kurtarma adımında tüm yerel veri bloklarını kaldırır, düğmeler ve seçimler gibi
geçerli eşdüzey blokları korur ve Slack biçimlendirmesi devre dışı bırakılmış olarak grafik ve tablo
metninin tamamını görünür biçimde gönderir. Eğik çizgi komutu teslimi, komut genelinde
Slack'in beş çağrılık response_url bütçesini izler. Her yanıt grubundan önce,
kalan çağrılara sığan eksiksiz bir plan seçer veya bu grubu göndermeden önce başarısız olur.
Yalnızca açık presentation tablo blokları yerel tablolara yükseltilir.
Markdown dikey çizgi tabloları, yazıldıkları biçimde metin olarak kalır; OpenClaw tablo
yapısını veya hücre türlerini tahmin etmez. Mevcut güvenilir Slack yerel üreticileri,
ham blokları channelData.slack.blocks üzerinden geçirmeye devam edebilir; OpenClaw geçerli ham
data_table hücrelerinden yedek metin türetirken, hatalı özel bloklar
başlıklarına veya genel Block Kit yedek gösterimine indirgenebilir. Taşınabilir ajan, CLI
ve plugin çıktısı presentation kullanmalıdır.
Etkileşimli yanıtlar
Slack, ajan tarafından oluşturulan etkileşimli yanıt denetimlerini işleyebilir ancak bu özellik varsayılan olarak devre dışıdır.
Yeni ajan, CLI ve plugin çıktıları 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 uygun bir yedek gösterime indirgenir.
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 yönergelerini yine de yayımlayabilir:
[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
Bu yönergeler 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 koruyun; yeni taşınabilir denetimler için paylaşılan sunumu kullanın.
Yönerge derleyici API'leri de yeni üretici kodları için kullanımdan kaldırılmıştır:
compileSlackInteractiveReplies(...)parseSlackOptionsLine(...)isSlackInteractiveRepliesEnabled(...)buildSlackInteractiveBlocks(...)
Slack tarafından işlenen yeni denetimler için presentation yüklerini ve
buildSlackPresentationBlocks(...) kullanın.
Notlar:
- Bu, Slack'e özgü eski kullanıcı arayüzüdür. Diğer kanallar Slack Block Kit yönergelerini kendi düğme sistemlerine dönüştürmez.
- Etkileşimli geri çağırma 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'e ait modal gönderimleri
Etkileşimli bir işleyici kaydeden Slack pluginleri, OpenClaw yükü
ajanın görebildiği 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 modalı
açarken şu yönlendirme kalıplarından birini kullanın:
callback_iddeğeriniopenclaw:<namespace>:<payload>olarak ayarlayın.- Ya da mevcut bir
callback_iddeğerini koruyun ve modalınprivate_metadataalanınapluginInteractiveData: "<namespace>:<payload>"yerleştirin.
İşleyici, ctx.interaction.kind değerini view_submission veya
view_closed olarak, normalleştirilmiş inputs değerini ve Slack'ten gelen tam ham
stateValues nesnesini alır. Yalnızca geri çağırma kimliğine göre yönlendirme, plugin işleyicisini
çağırmak için yeterlidir; modalın ayrıca ajanın görebildiği bir sistem olayı üretmesi gerektiğinde
mevcut modal private_metadata kullanıcı/oturum yönlendirme alanlarını ekleyin. Ajan,
sıkıştırılmış ve gizli bilgileri çıkarılmış bir Slack interaction: ... sistem olayı alır. İşleyici
systemEvent.summary, systemEvent.reference veya systemEvent.data döndürürse bu
alanlar söz konusu sıkıştırılmış olaya eklenir; böylece ajan, form yükünün tamamını görmeden
plugin'e ait depolamaya başvurabilir.
Slack'te yerel onaylar
Slack, Web kullanıcı arayüzüne veya terminale geri dönmek yerine etkileşimli düğmeler ve etkileşimlerle yerel bir onay istemcisi olarak çalışabilir.
- Exec ve plugin onayları, Slack'e özgü Block Kit istemleri olarak işlenebilir.
channels.slack.execApprovals.*, yerel exec onay istemcisini etkinleştirme ve DM/kanal yönlendirme yapılandırması olarak kalır.- Exec onayı DM'leri
channels.slack.execApprovals.approversveyacommands.ownerAllowFromkullanır. - Slack, kaynak oturum için yerel onay istemcisi olarak etkinleştirildiğinde veya
approvals.pluginkaynak Slack oturumuna ya da bir Slack hedefine yönlendirme yaptığında, plugin onayları Slack'e özgü düğmeleri kullanır. - Plugin onayı DM'leri,
channels.slack.allowFromiçindeki Slack plugin onaylayanlarını, adlandırılmış hesapallowFromdeğerini veya hesabın varsayılan rotasını kullanır. - Onaylayan yetkilendirmesi uygulanmaya devam eder: yalnızca exec onaylayabilenler, aynı zamanda plugin onaylayanı olmadıkça plugin isteklerini onaylayamaz.
Bu, diğer kanallarla aynı paylaşılan onay düğmesi yüzeyini kullanır. Slack uygulama ayarlarınızda interactivity etkinleştirildiğinde onay istemleri, konuşmanın doğrudan içinde Block Kit düğmeleri olarak işlenir.
Bu düğmeler mevcut olduğunda birincil onay kullanıcı deneyimi bunlardır; OpenClaw
yalnızca araç sonucu sohbet onaylarının kullanılamadığını veya tek yolun manuel onay olduğunu belirtiyorsa
manuel bir /approve komutu eklemelidir.
Yapılandırma yolu:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(isteğe bağlıdır; mümkün olduğundacommands.ownerAllowFromdeğerine geri döner)channels.slack.execApprovals.target(dm|channel|both, varsayılan:dm)agentFilter,sessionFilter
enabled ayarlanmamışsa veya "auto" ise ve en az bir
exec onaylayanı çözümlenirse Slack, yerel exec onaylarını otomatik olarak etkinleştirir. Slack plugin
onaylayanları çözümlendiğinde ve istek yerel istemci filtreleriyle eşleştiğinde Slack, 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. Onaylayanlar çözümlendiğinde yerel onayları zorla
etkinleştirmek 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 onaylayanlarını kullanır.
Açık bir Slack exec onayı yapılandırması olmadığındaki varsayılan davranış:
{ commands: { ownerAllowFrom: ["slack:U12345678"], },}Açık Slack yerel yapılandırması yalnızca onaylayanları geçersiz kılmak, filtre eklemek veya kaynak sohbete teslimi etkinleştirmek istediğinizde gereklidir:
{ channels: { slack: { execApprovals: { enabled: true, approvers: ["U12345678"], target: "both", }, }, },}Paylaşılan approvals.exec yönlendirmesi ayrıdır. Bunu yalnızca exec onayı istemlerinin ayrıca
diğer sohbetlere veya açık bant dışı hedeflere yönlendirilmesi gerektiğinde kullanın. Paylaşılan
approvals.plugin yönlendirmesi de ayrıdır; Slack yerel teslimi, yalnızca Slack plugin onayı
isteğini yerel olarak işleyebildiğinde bu yedek gösterimi engeller.
Aynı sohbet içindeki /approve, komutları zaten destekleyen Slack kanallarında ve DM'lerde de çalışır. Eksiksiz onay yönlendirme modeli için Exec onayları bölümüne bakın.
Olaylar ve işletim davranışı
- Mesaj düzenlemeleri/silmeleri sistem olaylarına eşlenir.
- İleti dizisi yayınları ("Also send to channel" ileti dizisi 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şturma/yeniden adlandırma ve sabitleme ekleme/kaldırma olayları sistem olaylarına eşlenir.
- İsteğe bağlı iletişim durumu yoklaması, gözlemlenen bir insan katılımcının
awaydurumundanactivedurumuna geçişini, katılımcının en son etkin olan uygun Slack oturumuna eşleyebilir. Varsayılan olarak kapalıdır. configWritesetkinleştirildiğindechannel_id_changedkanal yapılandırma anahtarlarını taşıyabilir.- Kanal konusu/amacı meta verileri güvenilmeyen bağlam olarak değerlendirilir ve yönlendirme bağlamına eklenebilir.
- Agent View
app_contextvarlıkları Slack uygunluk sırasına göre doğrulanır ve yalnızca yapılandırılmış güvenilmeyen bağlam olarak sunulur; bağlamın atlanması, eski varlıkları yeniden kullanmak yerine dönüşü temizler. - İleti dizisi başlatıcısı ve ilk ileti dizisi geçmişi bağlamı yerleştirme işlemleri, 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ına sahip yapılandırılmış
Slack interaction: ...sistem olayları yayımlar:- blok eylemleri: seçilen değerler, etiketler, seçici değerleri ve
workflow_*meta verileri - genel kısayollar: geri çağırma ve aktör meta verileri; aktörün doğrudan oturumuna yönlendirilir
- mesaj kısayolları: geri çağırma, aktör, kanal, ileti dizisi ve seçili mesaj bağlamı
- yönlendirilmiş kanal meta verileri ve form girdileri içeren 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ğırma 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 arındırılmış olayı yönlendirilen ajan oturumu için kuyruğa alır. Tetikleyici kimlikleri ve yanıt URL'leri ajan bağlamından çıkarılır.
İletişim durumu olayları
Slack, iletişim durumu değişikliklerini Events API veya Socket Mode üzerinden göndermez. Bunun yerine OpenClaw, mesajları normal Slack erişim ve yönlendirme denetimlerinden geçen insan katılımcılar için users.getPresence yoklaması yapabilir.
{ channels: { slack: { presenceEvents: { mode: "auto" }, channels: { C0123456789: { presenceEvents: { mode: "on" } }, C0987654321: { presenceEvents: { mode: "off" } }, }, }, },}off(varsayılan): iletişim durumu zamanlayıcısı veya Slack API çağrısı yoktur.auto: son 24 saat içinde etkin olan, en fazla 8 gözlemlenen insan katılımcıya sahip DM'leri, MPIM'leri ve Slack ileti dizilerini izler. Üst düzey kanal oturumları hariç tutulur.on: aynı konuşmaları katılımcı sınırı olmadan izler ve üst düzey kanal oturumlarını dahil eder. Bir kanalı zorla dahil etmek veya hariç tutmak için kanal başına geçersiz kılma kullanın.
OpenClaw, Slack hesabı başına dakikada en fazla 45 benzersiz kullanıcıyı yoklar, ilk sonucu ajanı uyandırmadan başlangıç değeri olarak kaydeder ve yalnızca gözlemlenen bir away durumundan active durumuna geçişte uyandırır. Kişi birkaç ileti dizisine katılsa bile Slack hesabı ve kullanıcı başına kalıcı 8 saatlik bir bekleme süresi uygulanır. Olay yalnızca söz konusu kişinin en son etkin olan uygun konuşmasına yönlendirilir ve ajana kısa bir selamlama gönderip göndermemeye karar vermeden önce belleğe/wiki'ye ve bilinen saat dilimi bağlamına başvurmasını söyler. Ajan sessiz kalabilir.
Bot belirteci, önerilen manifestte zaten bulunan users:read kapsamına ihtiyaç duyar. İletişim durumu olayları, Enterprise Grid kuruluş geneli kurulumlarda kullanılamaz.
Yapılandırma referansı
Birincil referans: Yapılandırma referansı - Slack.
Önemli Slack alanları
- mod/kimlik doğrulama:
identity,mode,enterpriseOrgInstall,botToken,appToken,userToken,signingSecret,webhookPath,accounts.* - DM erişimi:
dm.enabled,dmPolicy,allowFrom(eski:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - uyumluluk anahtarı:
dangerouslyAllowNameMatching(acil durum; gerekmedikçe kapalı tutun) - kanal erişimi:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention,implicitMentions.* - iş parçacığı/geçmiş:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - varlıkla uyandırmalar:
presenceEvents.mode,channels.*.presenceEvents.mode(off|auto|on; varsayılanoff) - teslimat:
textChunkLimit,streaming.chunkMode,mediaMaxMb,streaming,streaming.nativeTransport,streaming.preview.toolProgress - önizlemeler:
unfurlLinks(varsayılan:false),chat.postMessagebağlantı/medya önizleme denetimi içinunfurlMedia; bağlantı önizlemelerini yeniden etkinleştirmek içinunfurlLinks: truedeğerini ayarlayın - işlemler/özellikler:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
Sorun giderme
Kanallarda yanıt yok
Sırasıyla şunları kontrol edin:
groupPolicy- kanal izin listesi (
channels.slack.channels) — anahtarlar kanal kimlikleri olmalıdır (C12345678), adlar (#channel-name) değil. Kanal yönlendirmesi varsayılan olarak önce kimliği kullandığından, ada dayalı anahtarlargroupPolicy: "allowlist"altında sessizce başarısız olur. Bir kimliği bulmak için: Slack'te kanala sağ tıklayın → Copy link — 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"değerini kullanır."message_tool"seçeneğini etkinleştirdiyseniz ve günlüklerdemessage(action=send)çağrısı olmadan asistan metni görünüyorsa model, görünür mesaj aracı yolunu kullanmamıştır. Bu modda son metin özel kalır; engellenen 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, bahsedilmeden izin verilen kanal sohbetleri ortam bağlamıdır ve aracımessagearacını çağırmadıkça sessiz kalır. Bkz. Ortam odası olayları.
{messages: {groupChat: { visibleReplies: "automatic",},},}Yararlı komutlar:
openclaw channels status --probeopenclaw logs --followopenclaw doctorDM mesajları yok sayılıyor
Şunları 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.groupEnabledseçeneğini etkinleş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önderici bulunmayan, düzenlenmiş bir Assistant iş parçacığı olayı gönderdiği anlamına gelir
openclaw pairing list slackSocket modu bağlanmıyor
Slack uygulama ayarlarında bot ve uygulama token'larını ve Socket Mode'un etkinleştirildiğini doğrulayın.
App-Level Token için connections:write gerekir ve Bot User OAuth Token
bot token'ı, uygulama token'ıyla aynı Slack uygulamasına/çalışma alanına ait olmalıdır.
openclaw channels status --probe --json, botTokenStatus veya
appTokenStatus: "configured_unavailable" gösteriyorsa Slack hesabı
yapılandırılmıştır ancak mevcut çalışma zamanı SecretRef destekli
değeri çözümleyememiş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
hemen başarısız olur. slack token mismatch ... günlüğü, bot token'ı ile uygulama token'ının
farklı Slack uygulamalarına ait göründüğü anlamına gelir; Slack uygulaması kimlik bilgilerini düzeltin.
HTTP modu olayları almıyor
Şunları 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'nin TLS'yi sonlandırdığı ve istekleri Gateway yoluna ilettiği
- Slack uygulamasının
request_urlyolununchannels.slack.webhookPathile tam olarak eşleştiği (varsayılan/slack/events)
Hesap anlık görüntülerinde signingSecretStatus: "configured_unavailable" görünüyorsa
HTTP hesabı yapılandırılmıştır ancak mevcut çalışma zamanı
SecretRef destekli imzalama sırrını çözümleyememiştir.
Yinelenen slack: webhook path ... already registered günlüğü, iki HTTP
hesabının aynı webhookPath değerini kullandığı anlamına gelir; her hesaba farklı bir yol verin.
Yerel/eğik çizgi komutları çalışmıyor
Şunlardan hangisini amaçladığınızı doğrulayın:
- Slack'te kayıtlı eşleşen eğik çizgi komutlarıyla yerel komut modu (
channels.slack.commands.native: true) - veya tek eğik çizgi komutu modu (
channels.slack.slashCommand.enabled: true)
Slack, eğik çizgi komutlarını 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 eğik çizgi komutu 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 yetkilendirmesi, kanal izin listeleri
ve kanal başına users izin listelerini kontrol edin. Slack, engellenen
eğik çizgi komutu göndericileri için geçici hatalar döndürür; bunlar arasında şunlar bulunur:
This channel is not allowed.You are not authorized to use this command here.
Ek medya referansı
Slack dosya indirmeleri başarılı olduğunda ve boyut sınırları izin verdiğinde Slack, indirilen medyayı aracı turuna ekleyebilir. Ses kliplerinin dökümü oluşturulabilir, görüntü dosyaları medya anlama yolundan geçebilir veya doğrudan görsel işleme yeteneğine sahip bir yanıt modeline iletilebilir; diğer dosyalar ise indirilebilir dosya bağlamı olarak kullanılabilir kalır.
Desteklenen medya türleri
| Medya türü | Kaynak | Mevcut davranış | Notlar |
|---|---|---|---|
| Slack ses klipleri | Slack dosya URL'si | İndirilir ve paylaşılan ses dökümü oluşturma üzerinden yönlendirilir | files:read ve çalışan bir tools.media.audio modeli veya CLI gerektirir |
| JPEG / PNG / GIF / WebP görüntüleri | Slack dosya URL'si | İndirilir ve görsel işleme yeteneğine sahip kullanım 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'ten gelen PDF'ler otomatik olarak görüntü tabanlı görsel girdiye dönüştürülmez |
| 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 değerlendirilmez |
| İş parçacığı yanıtları | İş parçacığı başlangıç dosyaları | Yanıtta doğrudan medya yoksa kök mesaj dosyaları bağlam olarak yüklenebilir | Yalnızca dosya içeren başlangıçlar bir ek yer tutucusu kullanır |
| Çok dosyalı mesajlar | Birden fazla Slack dosyası | Her dosya bağımsız olarak değerlendirilir | Slack işlemesi mesaj başına sekiz dosyayla sınırlıdır |
Gelen veri işlem hattı
Dosya ekleri içeren bir Slack mesajı geldiğinde:
- OpenClaw, bot token'ını kullanarak dosyayı Slack'in özel URL'sinden indirir.
- Başarılı olduğunda dosya medya deposuna yazılır.
- İndirilen medya yolları ve içerik türleri gelen bağlama eklenir.
- Ses klipleri paylaşılan döküm oluşturma işlem hattına yönlendirilir; görüntü işleyebilen model/araç yolları aynı bağlamdaki görüntü eklerini kullanabilir.
- Diğer dosyalar, bunları işleyebilen araçlar için dosya meta verileri veya medya referansları olarak kullanılabilir kalır.
İş parçacığı kökü ek devralımı
Bir mesaj bir iş parçacığına geldiğinde (thread_ts üst öğesine sahipse):
- Yanıtın kendisinde doğrudan medya yoksa ve eklenen kök mesajda dosyalar varsa Slack, kök dosyaları iş parçacığı başlangıç bağlamı olarak yükleyebilir.
- Kök dosyaları yalnızca yeni veya sıfırlanmış bir iş parçacığı oturumu başlatılırken yüklenir. Sonraki yalnızca metin içeren yanıtlar mevcut oturum bağlamını yeniden kullanır ve kök dosyalarını yeni medya olarak yeniden eklemez.
- Doğrudan yanıt ekleri, kök mesaj eklerine göre önceliklidir.
- Yalnızca dosyaları olan ve metni olmayan bir kök mesaj, geri dönüşün yine de dosyalarını içerebilmesi için bir ek yer tutucusuyla temsil edilir.
Birden fazla eki işleme
Tek bir Slack mesajı birden fazla dosya eki içerdiğinde:
- Her ek, medya işlem hattı üzerinden bağımsız olarak işlenir.
- İndirilen medya referansları mesaj bağlamında birleştirilir.
- İşleme sırası, olay yükündeki Slack dosya sırasını izler.
- Bir ekin indirilememesi diğerlerini engellemez.
Boyut, indirme ve model sınırları
- Boyut sınırı: Dosya başına varsayılan 20 MB.
channels.slack.mediaMaxMbüzerinden yapılandırılabilir. - Ses dökümü sınırı: İndirilen dosya bir döküm sağlayıcısına veya CLI'ye gönderildiğinde, seçilen ses işleyebilen
tools.media.models[]girdisininmaxBytesdeğeri de geçerlidir. - İndirme hataları: Slack'in sunamadığı dosyalar, süresi dolmuş URL'ler, erişilemeyen dosyalar, boyut sınırını aşan dosyalar ve Slack kimlik doğrulama/oturum açma HTML yanıtları, desteklenmeyen biçimler olarak bildirilmek yerine atlanır.
- Görsel modeli: Görüntü analizi, görsel işlemeyi 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 |
| Ses transkripsiyonu kullanılamıyor | Klip ekli kalır ancak transkript oluşturulmaz | tools.media.audio yapılandırın veya desteklenen bir yerel transkripsiyon CLI'si yükleyin |
| Altyazısız klip, bahsetme geçidini aşmaz | Özel spekülatif transkripsiyondan sonra bırakılır; transkript ve indirme silinir | Söylenen ad için bir bahsetme kalıbı yapılandırın, yazılı bir bot bahsetmesi ekleyin veya DM kullanın |
| Görüntü modeli yapılandırılmamış | Görsel ekleri medya referansları olarak depolanır ancak görsel olarak analiz edilmez | agents.defaults.imageModel yapılandırın veya görüntü özellikli bir yanıt modeli kullanın |
| Çok büyük görseller (varsayılan olarak > 20 MB) | Boyut sınırına göre atlanır | Slack izin veriyorsa channels.slack.mediaMaxMb değerini artırın |
| İletilen/paylaşılan ekler | Metin ile Slack'te barındırılan görsel/dosya medyası mümkün olduğunca işlenir | Doğrudan OpenClaw ileti dizisinde yeniden paylaşın |
| PDF ekleri | Dosya/medya bağlamı olarak depolanır, görsel görüntü analizine otomatik olarak yönlendirilmez | Dosya meta verileri için download-file veya PDF analizi için pdf aracını kullanın |