Slack
Tryb gniazda (domyślny)
Szybka konfiguracja (dla początkujących)
- Utwórz aplikację Slack i włącz Socket Mode.
- Utwórz App Token (
xapp-...) oraz Bot Token (xoxb-...). - Ustaw tokeny dla OpenClaw i uruchom Gateway.
Konfiguracja
- Utwórz aplikację Slack (From scratch) na stronie https://api.slack.com/apps.
- Socket Mode → włącz. Następnie przejdź do Basic Information → App-Level Tokens → Generate Token and Scopes z zakresem
connections:write. Skopiuj App Token (xapp-...). - OAuth & Permissions → dodaj zakresy tokena bota (użyj manifestu poniżej). Kliknij Install to Workspace. Skopiuj Bot User OAuth Token (
xoxb-...). - Opcjonalnie: OAuth & Permissions → dodaj User Token Scopes (zobacz listę tylko do odczytu poniżej). Zainstaluj ponownie aplikację i skopiuj User OAuth Token (
xoxp-...). - Event Subscriptions → włącz zdarzenia i zasubskrybuj:
message.*(obejmuje edycje/usunięcia/rozgłaszanie wątków)app_mentionreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
- Zaproś bota do kanałów, które ma czytać.
- Slash Commands → utwórz
/openclaw, jeśli używaszchannels.slack.slashCommand. Jeśli włączysz polecenia natywne, dodaj jedno polecenie slash na każde wbudowane polecenie (te same nazwy co/help). Natywne polecenia są domyślnie wyłączone dla Slacka, chyba że ustawiszchannels.slack.commands.native: true(globalnecommands.nativema wartość"auto", co pozostawia Slack wyłączony). - App Home → włącz Messages Tab, aby użytkownicy mogli wysyłać DM-y do bota.
channels.slack.accounts z tokenami per konto oraz opcjonalnie name. Zobacz gateway/configuration, aby poznać wspólny wzorzec.
Konfiguracja OpenClaw (tryb gniazda)
Ustaw tokeny przez zmienne środowiskowe (zalecane):SLACK_APP_TOKEN=xapp-...SLACK_BOT_TOKEN=xoxb-...
Token użytkownika (opcjonalny)
OpenClaw może używać tokena użytkownika Slacka (xoxp-...) do operacji odczytu (historia,
przypięcia, reakcje, emoji, informacje o członkach). Domyślnie pozostaje on tylko do odczytu: odczyty
preferują token użytkownika, gdy jest dostępny, a zapisy nadal używają tokena bota, chyba że
jawnie się na to zdecydujesz. Nawet przy userTokenReadOnly: false token bota pozostaje
preferowany do zapisów, gdy jest dostępny.
Tokeny użytkownika konfiguruje się w pliku konfiguracyjnym (brak wsparcia dla zmiennych środowiskowych). Dla
wielu kont ustaw channels.slack.accounts.<id>.userToken.
Przykład z tokenami: bot + app + user:
Użycie tokenów
- Operacje odczytu (historia, lista reakcji, lista przypięć, lista emoji, informacje o członkach, wyszukiwanie) preferują token użytkownika, jeśli jest skonfigurowany, w przeciwnym razie token bota.
- Operacje zapisu (wysyłanie/edycja/usuwanie wiadomości, dodawanie/usuwanie reakcji, przypinanie/odpinanie,
przesyłanie plików) domyślnie używają tokena bota. Jeśli
userTokenReadOnly: falsei token bota nie jest dostępny, OpenClaw przełącza się na token użytkownika.
Kontekst historii
channels.slack.historyLimit(lubchannels.slack.accounts.*.historyLimit) kontroluje, ile ostatnich wiadomości z kanału/grupy jest opakowywanych w prompt.- W razie braku używa
messages.groupChat.historyLimit. Ustaw0, aby wyłączyć (domyślnie 50).
Tryb HTTP (Events API)
Użyj trybu webhooka HTTP, gdy Twój Gateway jest osiągalny dla Slacka przez HTTPS (typowe dla wdrożeń serwerowych). Tryb HTTP korzysta z Events API + Interactivity + Slash Commands ze współdzielonym adresem URL żądań.Konfiguracja (tryb HTTP)
- Utwórz aplikację Slack i wyłącz Socket Mode (opcjonalne, jeśli używasz tylko HTTP).
- Basic Information → skopiuj Signing Secret.
- OAuth & Permissions → zainstaluj aplikację i skopiuj Bot User OAuth Token (
xoxb-...). - Event Subscriptions → włącz zdarzenia i ustaw Request URL na ścieżkę webhooka Gateway (domyślnie
/slack/events). - Interactivity & Shortcuts → włącz i ustaw ten sam Request URL.
- Slash Commands → ustaw ten sam Request URL dla poleceń.
https://gateway-host/slack/events
Konfiguracja OpenClaw (minimalna)
channels.slack.accounts.<id>.mode = "http" i zapewnij unikalny
webhookPath dla każdego konta, aby każda aplikacja Slack mogła wskazywać własny adres URL.
Manifest (opcjonalnie)
Użyj tego manifestu aplikacji Slack, aby szybko utworzyć aplikację (w razie potrzeby dostosuj nazwę/polecenie). Dołącz zakresy użytkownika, jeśli planujesz skonfigurować token użytkownika.slash_commands na każde polecenie, które chcesz udostępnić (zgodnie z listą /help). Nadpisz przez channels.slack.commands.native.
Zakresy (aktualne vs opcjonalne)
API Conversations Slacka jest typowane zakresem: potrzebujesz tylko zakresów dla typów konwersacji, z których faktycznie korzystasz (channels, groups, im, mpim). Zobacz https://docs.slack.dev/apis/web-api/using-the-conversations-api/ – przegląd.Zakresy tokenów bota (wymagane)
chat:write(wysyłanie/aktualizacja/usuwanie wiadomości przezchat.postMessage) https://docs.slack.dev/reference/methods/chat.postMessageim:write(otwieranie DM-ów przezconversations.opendla DM-ów użytkowników) 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(wyszukiwanie użytkowników) 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(przesyłanie przezfiles.uploadV2) https://docs.slack.dev/messaging/working-with-files/#upload
Zakresy tokena użytkownika (opcjonalne, domyślnie tylko do odczytu)
Dodaj je w User Token Scopes, jeśli konfigurujeszchannels.slack.userToken.
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read
Dziś niepotrzebne (ale prawdopodobna przyszłość)
mpim:write(tylko jeśli dodamy otwieranie DM-ów grupowych/rozpoczynanie DM przezconversations.open)groups:write(tylko jeśli dodamy zarządzanie kanałami prywatnymi: tworzenie/zmiana nazwy/zapraszanie/archiwizacja)chat:write.public(tylko jeśli chcemy publikować w kanałach, w których bot nie jest) https://docs.slack.dev/reference/scopes/chat.write.publicusers:read.email(tylko jeśli potrzebujemy pól e-mail zusers.info) https://docs.slack.dev/changelog/2017-04-narrowing-email-accessfiles:read(tylko jeśli zaczniemy listować/czytać metadane plików)
Konfiguracja
Slack używa wyłącznie trybu gniazda (brak serwera webhooków HTTP). Podaj oba tokeny:SLACK_BOT_TOKENSLACK_APP_TOKEN
messages.ackReaction +
messages.ackReactionScope. Użyj messages.removeAckAfterReply, aby wyczyścić
reakcję potwierdzenia po odpowiedzi bota.
Limity
- Wychodzący tekst jest dzielony na fragmenty do
channels.slack.textChunkLimit(domyślnie 4000). - Opcjonalne dzielenie po nowych liniach: ustaw
channels.slack.chunkMode="newline", aby dzielić po pustych liniach (granice akapitów) przed dzieleniem wg długości. - Przesyłanie mediów jest ograniczone przez
channels.slack.mediaMaxMb(domyślnie 20).
Wątkowanie odpowiedzi
Domyślnie OpenClaw odpowiada w głównym kanale. Użyjchannels.slack.replyToMode, aby kontrolować automatyczne wątkowanie:
| Tryb | Zachowanie |
|---|---|
off | Domyślny. Odpowiedź w głównym kanale. Wątek tylko wtedy, gdy wiadomość wyzwalająca była już w wątku. |
first | Pierwsza odpowiedź trafia do wątku (pod wiadomością wyzwalającą), kolejne odpowiedzi do głównego kanału. Przydatne do zachowania kontekstu przy ograniczaniu bałaganu w wątkach. |
all | Wszystkie odpowiedzi trafiają do wątku. Utrzymuje rozmowy w jednym miejscu, ale może zmniejszać widoczność. |
slack sendMessage).
Wątkowanie per typ czatu
Możesz skonfigurować różne zachowania wątkowania dla poszczególnych typów czatu, ustawiającchannels.slack.replyToModeByChatType:
direct: DM-y 1:1 (Slackim)group: DM-y grupowe / MPIM (Slackmpim)channel: standardowe kanały (publiczne/prywatne)
replyToModeByChatType.<chatType>replyToMode- Domyślne ustawienie dostawcy (
off)
channels.slack.dm.replyToMode jest nadal akceptowane jako zapasowe dla direct, gdy nie ustawiono nadpisania per typ czatu.
Przykłady:
Wątkuj tylko DM-y:
Ręczne tagi wątkowania
Dla precyzyjnej kontroli użyj tych tagów w odpowiedziach agenta:[[reply_to_current]]— odpowiedź na wiadomość wyzwalającą (rozpocznij/kontynuuj wątek).[[reply_to:<id>]]— odpowiedź na konkretny identyfikator wiadomości.
Sesje + routowanie
- DM-y współdzielą sesję
main(jak WhatsApp/Telegram). - Kanały mapują się na sesje
agent:<agentId>:slack:channel:<channelId>. - Polecenia slash używają sesji
agent:<agentId>:slack:slash:<userId>(prefiks konfigurowalny przezchannels.slack.slashCommand.sessionPrefix). - Jeśli Slack nie dostarcza
channel_type, OpenClaw wnioskuje go z prefiksu identyfikatora kanału (D,C,G) i domyślnie używachannel, aby zachować stabilność kluczy sesji. - Rejestracja poleceń natywnych używa
commands.native(globalna wartość domyślna"auto"→ Slack wyłączony) i może być nadpisana per obszar roboczy przezchannels.slack.commands.native. Polecenia tekstowe wymagają samodzielnych wiadomości/...i mogą być wyłączone przezcommands.text: false. Polecenia slash Slacka są zarządzane w aplikacji Slack i nie są usuwane automatycznie. Użyjcommands.useAccessGroups: false, aby pominąć sprawdzanie grup dostępu dla poleceń. - Pełna lista poleceń + konfiguracja: Polecenia slash
Bezpieczeństwo DM (parowanie)
- Domyślnie:
channels.slack.dm.policy="pairing"— nieznani nadawcy DM otrzymują kod parowania (wygasa po 1 godzinie). - Zatwierdzanie przez:
openclaw pairing approve slack <code>. - Aby zezwolić wszystkim: ustaw
channels.slack.dm.policy="open"ichannels.slack.dm.allowFrom=["*"]. channels.slack.dm.allowFromakceptuje identyfikatory użytkowników, @handle lub adresy e-mail (rozwiązywane przy starcie, gdy tokeny na to pozwalają). Kreator akceptuje nazwy użytkowników i rozwiązuje je do identyfikatorów podczas konfiguracji, gdy tokeny na to pozwalają.
Polityka grup
channels.slack.groupPolicykontroluje obsługę kanałów (open|disabled|allowlist).allowlistwymaga, aby kanały były wymienione wchannels.slack.channels.- Jeśli ustawisz tylko
SLACK_BOT_TOKEN/SLACK_APP_TOKENi nigdy nie utworzysz sekcjichannels.slack, środowisko uruchomieniowe domyślnie ustawiagroupPolicynaopen. Dodajchannels.slack.groupPolicy,channels.defaults.groupPolicylub listę dozwolonych kanałów, aby to zablokować. - Kreator konfiguracji akceptuje nazwy
#channeli w miarę możliwości rozwiązuje je do identyfikatorów (publiczne + prywatne); jeśli istnieje wiele dopasowań, preferuje aktywny kanał. - Przy starcie OpenClaw rozwiązuje nazwy kanałów/użytkowników w listach dozwolonych do identyfikatorów (gdy tokeny na to pozwalają) i loguje mapowanie; nierozwiązane wpisy są zachowywane w postaci wprowadzonej.
- Aby zezwolić na brak kanałów, ustaw
channels.slack.groupPolicy: "disabled"(lub pozostaw pustą listę dozwolonych).
channels.slack.channels.<id> lub channels.slack.channels.<name>):
allow: zezwól/zabroń kanału, gdygroupPolicy="allowlist".requireMention: bramkowanie wzmianek dla kanału.tools: opcjonalne nadpisania polityk narzędzi per kanał (allow/deny/alsoAllow).toolsBySender: opcjonalne nadpisania polityk narzędzi per nadawca w obrębie kanału (klucze to identyfikatory nadawców/@handle/adresy e-mail; obsługiwany symbol wieloznaczny"*").allowBots: zezwól na wiadomości autorstwa bota w tym kanale (domyślnie: false).users: opcjonalna lista dozwolonych użytkowników per kanał.skills: filtr Skills (brak = wszystkie Skills, puste = brak).systemPrompt: dodatkowy prompt systemowy dla kanału (łączony z tematem/celem).enabled: ustawfalse, aby wyłączyć kanał.
Cele dostarczania
Używaj ich przy wysyłkach cron/CLI:user:<id>dla DM-ówchannel:<id>dla kanałów
Akcje narzędzi
Akcje narzędzi Slacka można bramkować za pomocąchannels.slack.actions.*:
| Grupa akcji | Domyślnie | Uwagi |
|---|---|---|
| reactions | włączone | Reakcje + lista reakcji |
| messages | włączone | Odczyt/wysyłanie/edycja/usuwanie |
| pins | włączone | Przypinanie/odpinanie/lista |
| memberInfo | włączone | Informacje o członkach |
| emojiList | włączone | Lista niestandardowych emoji |
Uwagi dotyczące bezpieczeństwa
- Zapisy domyślnie używają tokena bota, aby działania zmieniające stan pozostały w zakresie uprawnień i tożsamości bota aplikacji.
- Ustawienie
userTokenReadOnly: falsepozwala używać tokena użytkownika do operacji zapisu, gdy token bota jest niedostępny, co oznacza, że działania są wykonywane z uprawnieniami użytkownika instalującego. Traktuj token użytkownika jako wysoce uprzywilejowany i utrzymuj ścisłe bramkowanie akcji oraz listy dozwolonych. - Jeśli włączysz zapisy tokenem użytkownika, upewnij się, że token użytkownika zawiera
oczekiwane zakresy zapisu (
chat:write,reactions:write,pins:write,files:write), w przeciwnym razie operacje się nie powiodą.
Rozwiązywanie problemów
Najpierw uruchom tę drabinę:- Połączenie jest nawiązane, ale brak odpowiedzi w kanałach: kanał zablokowany przez
groupPolicylub nie znajduje się na liście dozwolonychchannels.slack.channels. - DM-y ignorowane: nadawca niezatwierdzony, gdy
channels.slack.dm.policy="pairing". - Błędy API (
missing_scope,not_in_channel, błędy uwierzytelniania): tokeny bota/aplikacji lub zakresy Slacka są niekompletne.
Uwagi
- Bramkowanie wzmianek jest kontrolowane przez
channels.slack.channels(ustawrequireMentionnatrue);agents.list[].groupChat.mentionPatterns(lubmessages.groupChat.mentionPatterns) również liczą się jako wzmianki. - Nadpisanie wieloagentowe: ustaw wzorce per agent w
agents.list[].groupChat.mentionPatterns. - Powiadomienia o reakcjach podążają za
channels.slack.reactionNotifications(użyjreactionAllowlistz trybemallowlist). - Wiadomości autorstwa bota są domyślnie ignorowane; włącz przez
channels.slack.allowBotslubchannels.slack.channels.<id>.allowBots. - Ostrzeżenie: jeśli zezwolisz na odpowiedzi do innych botów (
channels.slack.allowBots=truelubchannels.slack.channels.<id>.allowBots=true), zapobiegaj pętlom odpowiedzi bot–bot za pomocą list dozwolonychrequireMention,channels.slack.channels.<id>.usersi/lub wyraźnych barier wAGENTS.mdorazSOUL.md. - Dla narzędzia Slack semantyka usuwania reakcji jest opisana w /tools/reactions.
- Załączniki są pobierane do magazynu multimediów, gdy jest to dozwolone i mieszczą się w limicie rozmiaru.