Ana içeriğe atla

Slack

Durum: Slack uygulama entegrasyonları üzerinden DM’ler ve kanallar için üretime hazır. Varsayılan mod Socket Mode’dur; HTTP Events API modu da desteklenir.

Eşleştirme

Slack DM’leri varsayılan olarak eşleştirme modunu kullanır.

Slash komutları

Yerel komut davranışı ve komut kataloğu.

Kanal sorun giderme

Kanallar arası tanılama ve onarım rehberleri.

Hızlı kurulum

1

Slack uygulaması ve token'ları oluşturun

Slack uygulama ayarlarında:
  • Socket Mode’u etkinleştirin
  • connections:write ile App Token (xapp-...) oluşturun
  • uygulamayı yükleyin ve Bot Token (xoxb-...) değerini kopyalayın
2

OpenClaw yapılandırın

{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}
Ortam değişkeni yedeği (yalnızca varsayılan hesap):
SLACK_APP_TOKEN=xapp-...
SLACK_BOT_TOKEN=xoxb-...
3

Uygulama olaylarına abone olun

Şunlar için bot olaylarına abone olun:
  • app_mention
  • message.channels, message.groups, message.im, message.mpim
  • reaction_added, reaction_removed
  • member_joined_channel, member_left_channel
  • channel_rename
  • pin_added, pin_removed
Ayrıca DM’ler için App Home Messages Tab özelliğini etkinleştirin.
4

Gateway'i başlatın

openclaw gateway

Manifest ve kapsam denetim listesi

Slack uygulaması manifest örneği

{
  "display_information": {
    "name": "OpenClaw",
    "description": "Slack connector for OpenClaw"
  },
  "features": {
    "bot_user": {
      "display_name": "OpenClaw",
      "always_online": true
    },
    "app_home": {
      "messages_tab_enabled": true,
      "messages_tab_read_only_enabled": false
    },
    "slash_commands": [
      {
        "command": "/openclaw",
        "description": "Send a message to OpenClaw",
        "should_escape": false
      }
    ]
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "app_mentions:read",
        "assistant:write",
        "channels:history",
        "channels:read",
        "chat:write",
        "commands",
        "emoji:read",
        "files:read",
        "files:write",
        "groups:history",
        "groups:read",
        "im:history",
        "im:read",
        "im:write",
        "mpim:history",
        "mpim:read",
        "mpim:write",
        "pins:read",
        "pins:write",
        "reactions:read",
        "reactions:write",
        "users:read"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": true,
    "event_subscriptions": {
      "bot_events": [
        "app_mention",
        "channel_rename",
        "member_joined_channel",
        "member_left_channel",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "pin_added",
        "pin_removed",
        "reaction_added",
        "reaction_removed"
      ]
    }
  }
}
channels.slack.userToken yapılandırırsanız, tipik okuma kapsamları şunlardır:
  • channels:history, groups:history, im:history, mpim:history
  • channels:read, groups:read, im:read, mpim:read
  • users:read
  • reactions:read
  • pins:read
  • emoji:read
  • search:read (Slack arama okumalarına bağımlıysanız)

Token modeli

  • Socket Mode için botToken + appToken gereklidir.
  • HTTP modu botToken + signingSecret gerektirir.
  • botToken, appToken, signingSecret ve userToken, düz metin dizeleri veya SecretRef nesnelerini kabul eder.
  • Yapılandırma token’ları, ortam değişkeni yedeğinin önüne geçer.
  • SLACK_BOT_TOKEN / SLACK_APP_TOKEN ortam değişkeni yedeği yalnızca varsayılan hesap için geçerlidir.
  • userToken (xoxp-...) yalnızca yapılandırmada kullanılabilir (ortam değişkeni yedeği yoktur) ve varsayılan olarak salt okunur davranışı kullanır (userTokenReadOnly: true).
  • İsteğe bağlı: giden mesajların etkin ajan kimliğini kullanmasını istiyorsanız chat:write.customize ekleyin (özel username ve simge). icon_emoji, :emoji_name: söz dizimini kullanır.
Durum anlık görüntüsü davranışı:
  • Slack hesap incelemesi, kimlik bilgisi başına *Source ve *Status alanlarını izler (botToken, appToken, signingSecret, userToken).
  • Durum available, configured_unavailable veya missing olabilir.
  • configured_unavailable, hesabın SecretRef veya başka bir satır içi olmayan gizli kaynak üzerinden yapılandırıldığı, ancak mevcut komut/çalışma zamanı yolunun gerçek değeri çözemediği anlamına gelir.
  • HTTP modunda signingSecretStatus dahil edilir; Socket Mode’da gerekli çift botTokenStatus + appTokenStatus olur.
Eylemler/dizin okumaları için, yapılandırılmışsa kullanıcı token’ı tercih edilebilir. Yazma işlemlerinde bot token’ı tercih edilmeye devam eder; kullanıcı token’ı ile yazmaya yalnızca userTokenReadOnly: false olduğunda ve bot token’ı kullanılamadığında izin verilir.

Eylemler ve geçitler

Slack eylemleri channels.slack.actions.* ile denetlenir. Mevcut Slack araçlarında kullanılabilen eylem grupları:
GrupVarsayılan
messagesetkin
reactionsetkin
pinsetkin
memberInfoetkin
emojiListetkin
Mevcut Slack mesaj eylemleri arasında send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info ve emoji-list bulunur.

Erişim denetimi ve yönlendirme

channels.slack.dmPolicy, DM erişimini denetler (eski: channels.slack.dm.policy):
  • pairing (varsayılan)
  • allowlist
  • open (channels.slack.allowFrom içine "*" dahil edilmesini gerektirir; eski: channels.slack.dm.allowFrom)
  • disabled
DM bayrakları:
  • dm.enabled (varsayılan true)
  • channels.slack.allowFrom (tercih edilen)
  • dm.allowFrom (eski)
  • dm.groupEnabled (grup DM’leri varsayılan olarak false)
  • dm.groupChannels (isteğe bağlı MPIM izin listesi)
Çoklu hesap önceliği:
  • channels.slack.accounts.default.allowFrom yalnızca default hesabına uygulanır.
  • Adlandırılmış hesaplar, kendi allowFrom değerleri ayarlanmamışsa channels.slack.allowFrom değerini devralır.
  • Adlandırılmış hesaplar channels.slack.accounts.default.allowFrom değerini devralmaz.
DM’lerde eşleştirme için openclaw pairing approve slack <code> kullanılır.

Konular, oturumlar ve yanıt etiketleri

  • DM’ler direct olarak, kanallar channel olarak, MPIM’ler group olarak yönlendirilir.
  • Varsayılan session.dmScope=main ile Slack DM’leri ajan ana oturumunda birleştirilir.
  • Kanal oturumları: agent:<agentId>:slack:channel:<channelId>.
  • Konu yanıtları, uygun olduğunda konu oturumu sonekleri (:thread:<threadTs>) oluşturabilir.
  • channels.slack.thread.historyScope varsayılan olarak thread değerindedir; thread.inheritParent varsayılanı false değeridir.
  • channels.slack.thread.initialHistoryLimit, yeni bir konu oturumu başladığında kaç mevcut konu mesajının getirileceğini denetler (varsayılan 20; devre dışı bırakmak için 0 ayarlayın).
Yanıt konusu denetimleri:
  • channels.slack.replyToMode: off|first|all (varsayılan off)
  • channels.slack.replyToModeByChatType: her direct|group|channel için
  • doğrudan sohbetler için eski yedek: channels.slack.dm.replyToMode
El ile yanıt etiketleri desteklenir:
  • [[reply_to_current]]
  • [[reply_to:<id>]]
Not: replyToMode="off", açık [[reply_to_*]] etiketleri dahil Slack’teki tüm yanıt konularını devre dışı bırakır. Bu, açık etiketlerin "off" modunda hâlâ dikkate alındığı Telegram’dan farklıdır. Bu fark, platformların konu modellerini yansıtır: Slack konuları mesajları kanaldan gizlerken Telegram yanıtları ana sohbet akışında görünür kalır.

Onay reaksiyonları

ackReaction, OpenClaw gelen bir mesajı işlerken bir onay emojisi gönderir. Çözümleme sırası:
  • channels.slack.accounts.<accountId>.ackReaction
  • channels.slack.ackReaction
  • messages.ackReaction
  • ajan kimliği emoji yedeği (agents.list[].identity.emoji, aksi halde ”👀”)
Notlar:
  • Slack kısa kodları bekler (örneğin "eyes").
  • Slack hesabı için veya genel olarak reaksiyonu devre dışı bırakmak üzere "" kullanın.

Metin akışı

channels.slack.streaming, canlı önizleme davranışını denetler:
  • off: canlı önizleme akışını devre dışı bırakır.
  • partial (varsayılan): önizleme metnini en son kısmi çıktı ile değiştirir.
  • block: parçalanmış önizleme güncellemelerini ekler.
  • progress: oluşturma sırasında ilerleme durum metni gösterir, ardından son metni gönderir.
channels.slack.nativeStreaming, streaming değeri partial olduğunda Slack yerel metin akışını denetler (varsayılan: true).
  • Yerel metin akışının görünmesi için bir yanıt konusu mevcut olmalıdır. Konu seçimi yine replyToMode kurallarını izler. Bu olmadan normal taslak önizleme kullanılır.
  • Medya ve metin dışı yükler normal teslimata geri döner.
  • 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 önizleme kullanın:
{
  channels: {
    slack: {
      streaming: "partial",
      nativeStreaming: false,
    },
  },
}
Eski anahtarlar:
  • channels.slack.streamMode (replace | status_final | append) otomatik olarak channels.slack.streaming değerine taşınır.
  • boolean channels.slack.streaming otomatik olarak channels.slack.nativeStreaming değerine taşınır.

Yazıyor reaksiyonu yedeği

typingReaction, OpenClaw bir yanıtı işlerken gelen Slack mesajına geçici bir reaksiyon ekler, ardından çalışma tamamlandığında bunu kaldırır. Bu, en çok varsayılan “yazıyor…” durum göstergesini kullanan konu yanıtları dışında yararlıdır. Çözümleme sırası:
  • channels.slack.accounts.<accountId>.typingReaction
  • channels.slack.typingReaction
Notlar:
  • Slack kısa kodları bekler (örneğin "hourglass_flowing_sand").
  • Reaksiyon en iyi gayret esasına göre uygulanır ve yanıt veya hata yolu tamamlandıktan sonra temizlenmeye otomatik olarak çalışılır.

Medya, parçalama ve teslimat

Slack dosya ekleri, Slack tarafından barındırılan özel URL’lerden (token kimlik doğrulamalı istek akışı) indirilir ve getirme başarılı olduğunda ve boyut sınırları izin verdiğinde medya deposuna yazılır.Çalışma zamanı gelen boyut sınırı, channels.slack.mediaMaxMb ile geçersiz kılınmadıkça varsayılan olarak 20MB olur.
  • metin parçaları channels.slack.textChunkLimit kullanır (varsayılan 4000)
  • channels.slack.chunkMode="newline" paragraf öncelikli bölmeyi etkinleştirir
  • dosya gönderimleri Slack yükleme API’lerini kullanır ve konu yanıtlarını (thread_ts) içerebilir
  • giden medya sınırı, yapılandırıldığında channels.slack.mediaMaxMb değerini izler; aksi halde kanal gönderimleri medya işlem hattındaki MIME türü varsayılanlarını kullanır
Tercih edilen açık hedefler:
  • DM’ler için user:<id>
  • kanallar için channel:<id>
Slack DM’leri, kullanıcı hedeflerine gönderim yaparken Slack konuşma API’leri üzerinden açılır.

Komutlar ve slash davranışı

  • Slack için yerel komut otomatik modu kapalıdır (commands.native: "auto", Slack yerel komutlarını etkinleştirmez).
  • channels.slack.commands.native: true (veya genel commands.native: true) ile yerel Slack komut işleyicilerini etkinleştirin.
  • Yerel komutlar etkin olduğunda, Slack’te eşleşen slash komutlarını (/<command> adları) kaydedin; tek istisna:
    • durum komutu için /agentstatus kaydedin (Slack /status değerini ayırır)
  • Yerel komutlar etkin değilse, channels.slack.slashCommand aracılığıyla tek bir yapılandırılmış slash komutu çalıştırabilirsiniz.
  • Yerel arg menüleri artık oluşturma stratejilerini uyarlıyor:
    • 5 seçeneğe kadar: düğme blokları
    • 6-100 seçenek: statik seçim menüsü
    • 100’den fazla seçenek: etkileşim seçenek işleyicileri mevcut olduğunda eşzamansız seçenek filtrelemeli harici seçim
    • kodlanmış seçenek değerleri Slack sınırlarını aşarsa akış düğmelere geri döner
  • Uzun seçenek yükleri için Slash command argüman menüleri, seçilen bir değeri göndermeden önce bir onay iletişim kutusu kullanır.
Varsayılan slash komut ayarları:
  • enabled: false
  • name: "openclaw"
  • sessionPrefix: "slack:slash"
  • ephemeral: true
Slash oturumları yalıtılmış anahtarlar kullanır:
  • agent:<agentId>:slack:slash:<userId>
ve komut yürütmesini yine de hedef konuşma oturumuna (CommandTargetSessionKey) karşı yönlendirir.

Etkileşimli yanıtlar

Slack, ajan tarafından yazılan etkileşimli yanıt denetimlerini işleyebilir, ancak bu özellik varsayılan olarak devre dışıdır. Bunu genel olarak etkinleştirin:
{
  channels: {
    slack: {
      capabilities: {
        interactiveReplies: true,
      },
    },
  },
}
Veya yalnızca tek bir Slack hesabı için etkinleştirin:
{
  channels: {
    slack: {
      accounts: {
        ops: {
          capabilities: {
            interactiveReplies: true,
          },
        },
      },
    },
  },
}
Etkinleştirildiğinde ajanlar yalnızca Slack’e özgü yanıt yönergeleri 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. Notlar:
  • Bu, Slack’e özgü bir kullanıcı arayüzüdür. Diğer kanallar, Slack Block Kit yönergelerini kendi düğme sistemlerine çevirmez.
  • Etkileşimli geri çağırım değerleri, ham ajan tarafından yazılmış değerler değil, OpenClaw tarafından oluşturulmuş opak token’lardır.
  • Oluşturulan etkileşimli bloklar Slack Block Kit sınırlarını aşarsa OpenClaw geçersiz bir blok yükü göndermek yerine özgün metin yanıtına geri döner.

Slack’te exec onayları

Slack, Web UI veya terminale geri dönmek yerine etkileşimli düğmeler ve etkileşimlerle yerel bir onay istemcisi olarak davranabilir.
  • Exec onayları, yerel DM/kanal yönlendirmesi için channels.slack.execApprovals.* kullanır.
  • İstek zaten Slack’e düşüyorsa ve onay kimliği türü plugin: ise plugin onayları yine aynı Slack yerel düğme yüzeyi üzerinden çözülebilir.
  • Onaylayıcı yetkilendirmesi yine uygulanır: yalnızca onaylayıcı olarak tanımlanan kullanıcılar Slack üzerinden istekleri onaylayabilir veya reddedebilir.
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 doğrudan konuşmada Block Kit düğmeleri olarak işlenir. Bu düğmeler mevcut olduğunda birincil onay UX’i bunlardır; OpenClaw yalnızca araç sonucu sohbet içi onayların kullanılamadığını söylediğinde veya tek yol el ile onaysa manuel bir /approve komutu içermelidir. Yapılandırma yolu:
  • channels.slack.execApprovals.enabled
  • channels.slack.execApprovals.approvers (isteğe bağlı; mümkün olduğunda commands.ownerAllowFrom değerine geri döner)
  • channels.slack.execApprovals.target (dm | channel | both, varsayılan: dm)
  • agentFilter, sessionFilter
Slack, enabled ayarsız veya "auto" olduğunda ve en az bir onaylayıcı çözüldüğünde yerel exec onaylarını otomatik olarak etkinleştirir. Slack’i yerel onay istemcisi olarak açıkça devre dışı bırakmak için enabled: false ayarlayın. Onaylayıcılar çözüldüğünde yerel onayları zorla açmak için enabled: true ayarlayın. Açık Slack exec onay yapılandırması olmadan varsayılan davranış:
{
  commands: {
    ownerAllowFrom: ["slack:U12345678"],
  },
}
Açık Slack yerel yapılandırması yalnızca onaylayıcıları geçersiz kılmak, filtreler eklemek veya kaynak sohbet teslimatını etkinleştirmek istediğinizde gerekir:
{
  channels: {
    slack: {
      execApprovals: {
        enabled: true,
        approvers: ["U12345678"],
        target: "both",
      },
    },
  },
}
Paylaşılan approvals.exec yönlendirmesi ayrıdır. Bunu yalnızca exec onay istemleri ayrıca başka sohbetlere veya açık bant dışı hedeflere yönlendirilmek zorundaysa kullanın. Paylaşılan approvals.plugin yönlendirmesi de ayrıdır; Slack yerel düğmeleri, bu istekler zaten Slack’e düşüyorsa plugin onaylarını yine çözebilir. Aynı sohbet içi /approve, komutları zaten destekleyen Slack kanallarında ve DM’lerde de çalışır. Tam onay yönlendirme modeli için bkz. Exec approvals.

Olaylar ve operasyonel davranış

  • Mesaj düzenlemeleri/silmeleri/konu yayınları sistem olaylarına eşlenir.
  • Reaksiyon ekleme/kaldırma olayları sistem olaylarına eşlenir.
  • Üye katılma/ayrılma, kanal oluşturma/yeniden adlandırma ve iğne ekleme/kaldırma olayları sistem olaylarına eşlenir.
  • channel_id_changed, configWrites etkin olduğunda kanal yapılandırma anahtarlarını taşıyabilir.
  • Kanal konu/amaç meta verileri güvenilmeyen bağlam olarak değerlendirilir ve yönlendirme bağlamına eklenebilir.
  • Konu başlatıcı ve ilk konu geçmişi bağlam tohumlaması, uygulanabildiğinde yapılandırılmış gönderici izin listeleriyle filtrelenir.
  • Blok eylemleri ve modal etkileşimler, zengin yük alanlarıyla yapılandırılmış Slack interaction: ... sistem olayları üretir:
    • blok eylemleri: seçilen değerler, etiketler, seçici değerleri ve workflow_* meta verileri
    • yönlendirilmiş kanal meta verileri ve form girdileri ile modal view_submission ve view_closed olayları

Yapılandırma başvuru işaretçileri

Birincil başvuru:
  • Yapılandırma başvurusu - Slack Yüksek sinyalli Slack alanları:
    • mod/kimlik doğrulama: mode, botToken, appToken, signingSecret, webhookPath, accounts.*
    • DM erişimi: dm.enabled, dmPolicy, allowFrom (eski: dm.policy, dm.allowFrom), dm.groupEnabled, dm.groupChannels
    • uyumluluk anahtarı: dangerouslyAllowNameMatching (acil durum için; gerekmedikçe kapalı tutun)
    • kanal erişimi: groupPolicy, channels.*, channels.*.users, channels.*.requireMention
    • konu/geçmiş: replyToMode, replyToModeByChatType, thread.*, historyLimit, dmHistoryLimit, dms.*.historyLimit
    • teslimat: textChunkLimit, chunkMode, mediaMaxMb, streaming, nativeStreaming
    • işlemler/özellikler: configWrites, commands.native, slashCommand.*, actions.*, userToken, userTokenReadOnly

Sorun giderme

Sırayla kontrol edin:
  • groupPolicy
  • kanal izin listesi (channels.slack.channels)
  • requireMention
  • kanal başına users izin listesi
Yararlı komutlar:
openclaw channels status --probe
openclaw logs --follow
openclaw doctor
Şunları kontrol edin:
  • channels.slack.dm.enabled
  • channels.slack.dmPolicy (veya eski channels.slack.dm.policy)
  • eşleştirme onayları / izin listesi girdileri
openclaw pairing list slack
Slack uygulama ayarlarında bot + app token’larını ve Socket Mode etkinleştirmesini doğrulayın.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 çözememiştir.
Doğrulayın:
  • signing secret
  • webhook yolu
  • Slack Request URL’leri (Events + Interactivity + Slash Commands)
  • HTTP hesabı başına benzersiz webhookPath
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 signing secret değerini çözememiştir.
Şu niyetlerden hangisini istediğinizi doğrulayın:
  • Slack’te eşleşen slash komutları kayıtlı yerel komut modu (channels.slack.commands.native: true)
  • veya tek slash komut modu (channels.slack.slashCommand.enabled: true)
Ayrıca commands.useAccessGroups ve kanal/kullanıcı izin listelerini kontrol edin.

İlgili