Slack
Socket modu (varsayılan)
Hızlı kurulum (başlangıç)
- Bir Slack uygulaması oluşturun ve Socket Mode’u etkinleştirin.
- Bir App Token (
xapp-...) ve Bot Token (xoxb-...) oluşturun. - OpenClaw için belirteçleri ayarlayın ve gateway’i başlatın.
Kurulum
- https://api.slack.com/apps adresinde bir Slack uygulaması oluşturun (From scratch).
- Socket Mode → açın. Ardından Basic Information → App-Level Tokens →
connections:writekapsamı ile Generate Token and Scopes. App Token’ı (xapp-...) kopyalayın. - OAuth & Permissions → bot token kapsamlarını ekleyin (aşağıdaki manifesti kullanın). Install to Workspace’e tıklayın. Bot User OAuth Token’ı (
xoxb-...) kopyalayın. - İsteğe bağlı: OAuth & Permissions → User Token Scopes ekleyin (aşağıdaki salt-okunur listeye bakın). Uygulamayı yeniden yükleyin ve User OAuth Token’ı (
xoxp-...) kopyalayın. - Event Subscriptions → etkinleştirin ve şunlara abone olun:
message.*(düzenlemeler/silmeler/thread yayınlarını içerir)app_mentionreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
- Botu okumak istediğiniz kanallara davet edin.
- Slash Commands →
channels.slack.slashCommandkullanıyorsanız/openclawoluşturun. Yerel komutları etkinleştirirseniz, her yerleşik komut için bir slash command ekleyin (/helpile aynı adlar). Yerel komutlar,channels.slack.commands.native: trueayarlanmadıkça Slack için varsayılan olarak kapalıdır (genelcommands.nativevarsayılanı"auto"olup Slack’i kapalı bırakır). - App Home → kullanıcıların botla DM yapabilmesi için Messages Tab’i etkinleştirin.
channels.slack.accounts kullanın ve isteğe bağlı name. Ortak desen için gateway/configuration bölümüne bakın.
OpenClaw yapılandırması (Socket modu)
Set tokens via env vars (recommended):SLACK_APP_TOKEN=xapp-...SLACK_BOT_TOKEN=xoxb-...
Kullanıcı belirteci (isteğe bağlı)
OpenClaw, okuma işlemleri (geçmiş, pinler, tepkiler, emoji, üye bilgisi) için bir Slack kullanıcı belirteci (xoxp-...) kullanabilir. Varsayılan olarak bu salt-okunur kalır: mevcutsa okumalar kullanıcı belirtecini tercih eder, yazmalar ise siz açıkça etkinleştirmedikçe bot belirtecini kullanır. userTokenReadOnly: false olsa bile, bot belirteci mevcutken yazmalar için tercih edilir.
Kullanıcı belirteçleri yapılandırma dosyasında ayarlanır (ortam değişkeni desteği yoktur). Çoklu hesap için channels.slack.accounts.<id>.userToken ayarlayın.
Bot + app + kullanıcı belirteçleriyle örnek:
Belirteç kullanımı
- Okuma işlemleri (geçmiş, tepkiler listesi, pinler listesi, emoji listesi, üye bilgisi, arama) yapılandırılmışsa kullanıcı belirtecini, aksi halde bot belirtecini tercih eder.
- Yazma işlemleri (mesaj gönderme/düzenleme/silme, tepki ekleme/kaldırma, pinleme/pinden çıkarma,
dosya yüklemeleri) varsayılan olarak bot belirtecini kullanır.
userTokenReadOnly: falseise ve bot belirteci yoksa, OpenClaw kullanıcı belirtecine geri döner.
History context
channels.slack.historyLimit(veyachannels.slack.accounts.*.historyLimit) prompt içine sarılan son kanal/grup mesajı sayısını kontrol eder.messages.groupChat.historyLimit’e geri düşer. Devre dışı bırakmak için0ayarlayın (varsayılan 50).
HTTP modu (Events API)
Gateway’iniz Slack tarafından HTTPS üzerinden erişilebilir olduğunda HTTP webhook modunu kullanın (sunucu dağıtımları için tipik). HTTP modu, ortak bir istek URL’si ile Events API + Interactivity + Slash Commands kullanır.Kurulum (HTTP modu)
- Bir Slack uygulaması oluşturun ve Socket Mode’u devre dışı bırakın (yalnızca HTTP kullanıyorsanız isteğe bağlı).
- Basic Information → Signing Secret’ı kopyalayın.
- OAuth & Permissions → uygulamayı yükleyin ve Bot User OAuth Token’ı (
xoxb-...) kopyalayın. - Event Subscriptions → etkinleştirin ve Request URL’yi gateway webhook yolunuza ayarlayın (varsayılan
/slack/events). - Interactivity & Shortcuts → etkinleştirin ve aynı Request URL’yi ayarlayın.
- Slash Commands → komut(lar)ınız için aynı Request URL’yi ayarlayın.
https://gateway-host/slack/events
OpenClaw yapılandırması (minimal)
channels.slack.accounts.<id>.mode = "http" ayarlayın ve her Slack uygulamasının kendi URL’sine işaret edebilmesi için hesap başına benzersiz bir webhookPath sağlayın.
Manifest (isteğe bağlı)
Uygulamayı hızlıca oluşturmak için bu Slack uygulama manifestini kullanın (isterseniz ad/komutu ayarlayın). Kullanıcı belirteci yapılandırmayı planlıyorsanız kullanıcı kapsamlarını ekleyin.slash_commands girdisi ekleyin (/help listesiyle eşleşmelidir). channels.slack.commands.native ile geçersiz kılın.
Kapsamlar (mevcut vs isteğe bağlı)
Slack’in Conversations API’si tür-kapsamlıdır: yalnızca gerçekten dokunduğunuz konuşma türleri (channels, groups, im, mpim) için kapsamlar gerekir. Genel bakış için https://docs.slack.dev/apis/web-api/using-the-conversations-api/ adresine bakın.Bot token kapsamları (gerekli)
chat:write(chat.postMessageüzerinden mesaj gönderme/güncelleme/silme) https://docs.slack.dev/reference/methods/chat.postMessageim:write(kullanıcı DM’leri içinconversations.openile DM açma) https://docs.slack.dev/reference/methods/conversations.openchannels:history,groups:history,im:history,mpim:historyhttps://docs.slack.dev/reference/methods/conversations.historychannels:read,groups:read,im:read,mpim:readhttps://docs.slack.dev/reference/methods/conversations.infousers:read(kullanıcı arama) https://docs.slack.dev/reference/methods/users.inforeactions:read,reactions:write(reactions.get/reactions.add) https://docs.slack.dev/reference/methods/reactions.get https://docs.slack.dev/reference/methods/reactions.addpins:read,pins:write(pins.list/pins.add/pins.remove) https://docs.slack.dev/reference/scopes/pins.read https://docs.slack.dev/reference/scopes/pins.writeemoji:read(emoji.list) https://docs.slack.dev/reference/scopes/emoji.readfiles:write(files.uploadV2üzerinden yüklemeler) https://docs.slack.dev/messaging/working-with-files/#upload
Kullanıcı token kapsamları (isteğe bağlı, varsayılan olarak salt-okunur)
channels.slack.userToken yapılandırırsanız bunları User Token Scopes altında ekleyin.
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read
Bugün gerekli değil (ama muhtemelen gelecekte)
mpim:write(yalnızcaconversations.openile grup-DM açma/DM başlatma eklersek)groups:write(yalnızca özel kanal yönetimi eklersek: oluştur/yeniden adlandır/davet/arşivle)chat:write.public(botun içinde olmadığı kanallara gönderi yapmak istersek) https://docs.slack.dev/reference/scopes/chat.write.publicusers:read.email(users.info’dan e‑posta alanlarına ihtiyaç duyarsak) https://docs.slack.dev/changelog/2017-04-narrowing-email-accessfiles:read(dosya meta verilerini listelemeye/okumaya başlarsak)
Yapılandırma
Slack yalnızca Socket Mode kullanır (HTTP webhook sunucusu yoktur). Her iki belirteci de sağlayın:SLACK_BOT_TOKENSLACK_APP_TOKEN
messages.ackReaction +
messages.ackReactionScope ile kontrol edilir. Bot yanıtladıktan sonra
ack tepkisini temizlemek için messages.removeAckAfterReply kullanın.
Sınırlar
- Giden metin
channels.slack.textChunkLimit’ye bölünür (varsayılan 4000). - İsteğe bağlı satır sonu bölme: uzunluk bölmeden önce boş satırlarda (paragraf sınırları) bölmek için
channels.slack.chunkMode="newline"ayarlayın. - Medya yüklemeleri
channels.slack.mediaMaxMbile sınırlandırılmıştır (varsayılan 20).
Yanıt iş parçacığı (threading)
Varsayılan olarak OpenClaw ana kanalda yanıtlar. Otomatik threading’i kontrol etmek içinchannels.slack.replyToMode kullanın:
| Mod | Davranış |
|---|---|
off | Varsayılan. Ana kanalda yanıtla. Yalnızca tetikleyen mesaj zaten bir thread içindeyse thread’e gir. |
first | İlk yanıt thread’e gider (tetikleyen mesajın altında), sonraki yanıtlar ana kanala gider. Bağlamı görünür tutarken thread karmaşasını azaltmak için yararlıdır. |
all | Tüm yanıtlar thread’e gider. Konuşmaları sınırlı tutar ancak görünürlüğü azaltabilir. |
slack sendMessage) için geçerlidir.
Sohbet türüne göre threading
channels.slack.replyToModeByChatType ayarlayarak sohbet türü başına farklı threading davranışı yapılandırabilirsiniz:
direct: 1:1 DM’ler (Slackim)group: grup DM’ler / MPIM’ler (Slackmpim)channel: standart kanallar (herkese açık/özel)
replyToModeByChatType.<chatType>replyToMode- Sağlayıcı varsayılanı (
off)
channels.slack.dm.replyToMode, sohbet türü geçersiz kılma ayarlanmadığında direct için yedek olarak hâlâ kabul edilir.
Örnekler:
Yalnızca DM’leri thread’e al:
Manuel threading etiketleri
İnce ayar için ajan yanıtlarında şu etiketleri kullanın:[[reply_to_current]]— tetikleyen mesaja yanıtla (thread başlat/devam et).[[reply_to:<id>]]— belirli bir mesaj kimliğine yanıtla.
Sessions + routing
- DM’ler
mainoturumunu paylaşır (WhatsApp/Telegram gibi). - Kanallar
agent:<agentId>:slack:channel:<channelId>oturumlarına eşlenir. - Slash komutları
agent:<agentId>:slack:slash:<userId>oturumlarını kullanır (ön ekchannels.slack.slashCommand.sessionPrefixile yapılandırılabilir). - Slack
channel_typesağlamazsa, OpenClaw bunu kanal kimliği önekinden (D,C,G) çıkarır ve oturum anahtarlarını kararlı tutmak için varsayılan olarakchannel’yı kullanır. - Yerel komut kaydı
commands.nativekullanır (genel varsayılan"auto"→ Slack kapalı) ve çalışma alanı bazındachannels.slack.commands.nativeile geçersiz kılınabilir. Metin komutları bağımsız/...mesajları gerektirir vecommands.text: falseile devre dışı bırakılabilir. Slack slash komutları Slack uygulamasında yönetilir ve otomatik olarak kaldırılmaz. Komutlar için erişim-grubu denetimlerini atlamak üzerecommands.useAccessGroups: falsekullanın. - Tam komut listesi + yapılandırma: Slash commands
DM güvenliği (eşleştirme)
- Varsayılan:
channels.slack.dm.policy="pairing"— bilinmeyen DM gönderenlere bir eşleştirme kodu verilir (1 saat sonra süresi dolar). - Onaylama:
openclaw pairing approve slack <code>üzerinden. - Herkese izin vermek için:
channels.slack.dm.policy="open"vechannels.slack.dm.allowFrom=["*"]ayarlayın. channels.slack.dm.allowFromkullanıcı kimliklerini, @handle’ları veya e‑postaları kabul eder (belirteçler izin verdiğinde başlangıçta çözülür). Sihirbaz, kullanıcı adlarını kabul eder ve kurulum sırasında (belirteçler izin verdiğinde) bunları kimliklere çözer.
Grup politikası
channels.slack.groupPolicykanal işlemeyi kontrol eder (open|disabled|allowlist).allowlist, kanallarınchannels.slack.channelsiçinde listelenmesini gerektirir.- Yalnızca
SLACK_BOT_TOKEN/SLACK_APP_TOKENayarlayıp hiçchannels.slackbölümü oluşturmazsanız, çalışma zamanı varsayılanlarıgroupPolicy’iopenolarak ayarlar. Kilitlemek içinchannels.slack.groupPolicy,channels.defaults.groupPolicyveya bir kanal izin listesi ekleyin. - Yapılandırma sihirbazı
#channeladlarını kabul eder ve mümkün olduğunda kimliklere çözer (herkese açık + özel); birden fazla eşleşme varsa etkin kanalı tercih eder. - Başlangıçta OpenClaw, izin listelerindeki kanal/kullanıcı adlarını (belirteçler izin verdiğinde) kimliklere çözer ve eşlemeyi günlüğe kaydeder; çözülemeyen girdiler yazıldığı gibi tutulur.
- Hiç kanala izin vermemek için
channels.slack.groupPolicy: "disabled"ayarlayın (veya boş bir izin listesi bırakın).
channels.slack.channels.<id> veya channels.slack.channels.<name>):
allow:groupPolicy="allowlist"iken kanala izin ver/reddet.requireMention: kanal için mention geçidi.tools: isteğe bağlı kanal başına araç politikası geçersiz kılmaları (allow/deny/alsoAllow).toolsBySender: kanal içinde gönderici başına isteğe bağlı araç politikası geçersiz kılmaları (anahtarlar gönderici kimlikleri/@handle’lar/e‑postalar;"*"joker karakteri desteklenir).allowBots: bu kanalda bot tarafından yazılan mesajlara izin ver (varsayılan: false).users: isteğe bağlı kanal başına kullanıcı izin listesi.skills: skill filtresi (atlanırsa = tüm skills, boş = hiçbiri).systemPrompt: kanal için ek sistem prompt’u (konu/amaç ile birleştirilir).enabled: kanalı devre dışı bırakmak içinfalseayarlayın.
Teslim hedefleri
Cron/CLI gönderimleriyle birlikte kullanın:- DM’ler için
user:<id> - Kanallar için
channel:<id>
Araç eylemleri
Slack araç eylemlerichannels.slack.actions.* ile kapatılabilir:
| Eylem grubu | Varsayılan | Notlar |
|---|---|---|
| reactions | etkin | Tepki ekle + listele |
| messages | etkin | Oku/gönder/düzenle/sil |
| pins | etkin | Pinle/pinden çıkar/listele |
| memberInfo | etkin | Üye bilgisi |
| emojiList | etkin | Özel emoji listesi |
Güvenlik notları
- Yazmalar varsayılan olarak bot belirtecini kullanır; böylece durum değiştiren eylemler uygulamanın bot izinleri ve kimliğiyle sınırlı kalır.
userTokenReadOnly: falseayarı, bot belirteci olmadığında kullanıcı belirtecinin yazma işlemleri için kullanılmasına izin verir; bu da eylemlerin uygulamayı yükleyen kullanıcının erişimiyle çalıştığı anlamına gelir. Kullanıcı belirtecini yüksek ayrıcalıklı kabul edin ve eylem kapılarını ve izin listelerini sıkı tutun.- Kullanıcı belirteci yazmalarını etkinleştirirseniz, kullanıcı belirtecinin beklediğiniz yazma
kapsamlarını içerdiğinden emin olun (
chat:write,reactions:write,pins:write,files:write); aksi halde bu işlemler başarısız olur.
Sorun Giderme
Önce şu merdiveni çalıştırın:- Bağlı ama kanallarda yanıt yok: kanal
groupPolicytarafından engellenmiş veyachannels.slack.channelsizin listesinde değil. - DM’ler yok sayılıyor:
channels.slack.dm.policy="pairing"iken gönderici onaylanmamış. - API hataları (
missing_scope,not_in_channel, kimlik doğrulama hataları): bot/app belirteçleri veya Slack kapsamları eksik.
Notlar
- Mention geçidi
channels.slack.channelsile kontrol edilir (requireMention’yitrueolarak ayarlayın);agents.list[].groupChat.mentionPatterns(veyamessages.groupChat.mentionPatterns) de mention olarak sayılır. - Çoklu ajan geçersiz kılması:
agents.list[].groupChat.mentionPatternsüzerinde ajan başına desenler ayarlayın. - Tepki bildirimleri
channels.slack.reactionNotifications’yi izler (allowlistmodu ilereactionAllowlistkullanın). - Bot tarafından yazılan mesajlar varsayılan olarak yok sayılır;
channels.slack.allowBotsveyachannels.slack.channels.<id>.allowBotsile etkinleştirin. - Uyarı: Diğer botlara yanıt vermeye izin verirseniz (
channels.slack.allowBots=trueveyachannels.slack.channels.<id>.allowBots=true), botlar arası yanıt döngülerinirequireMention,channels.slack.channels.<id>.usersizin listeleri ve/veyaAGENTS.mdileSOUL.mdiçindeki koruyucu sınırları temizleyerek önleyin. - Slack aracı için tepki kaldırma semantiklerine /tools/reactions bölümünde bakın.
- Ekler, izin verildiğinde ve boyut sınırı altındaysa medya deposuna indirilir.