Slack
Status: gotowe do użycia produkcyjnego dla DM-ów i kanałów przez integracje aplikacji Slack. Domyślnym trybem jest Socket Mode; HTTP Request URLs są również obsługiwane.Parowanie
Slack DM-y domyślnie używają trybu parowania.
Polecenia slash
Natywne zachowanie poleceń i katalog poleceń.
Rozwiązywanie problemów z kanałami
Diagnostyka międzykanałowa i instrukcje naprawy.
Szybka konfiguracja
- Socket Mode (domyślny)
- HTTP Request URLs
Utwórz nową aplikację Slack
W ustawieniach aplikacji Slack naciśnij przycisk Create New App:
- wybierz from a manifest i wybierz workspace dla swojej aplikacji
- wklej przykładowy manifest poniżej i kontynuuj tworzenie
- wygeneruj App-Level Token (
xapp-...) zconnections:write - zainstaluj aplikację i skopiuj wyświetlony Bot Token (
xoxb-...)
Lista kontrolna manifestu i zakresów
- Socket Mode (domyślny)
- HTTP Request URLs
Opcjonalne zakresy autorstwa (operacje zapisu)
Opcjonalne zakresy autorstwa (operacje zapisu)
Dodaj zakres bota
chat:write.customize, jeśli chcesz, aby wiadomości wychodzące używały tożsamości aktywnego agenta (niestandardowa nazwa użytkownika i ikona) zamiast domyślnej tożsamości aplikacji Slack.Jeśli używasz ikony emoji, Slack oczekuje składni :emoji_name:.Opcjonalne zakresy tokenu użytkownika (operacje odczytu)
Opcjonalne zakresy tokenu użytkownika (operacje odczytu)
Jeśli konfigurujesz
channels.slack.userToken, typowe zakresy odczytu to:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(jeśli korzystasz z odczytów wyszukiwania Slacka)
Model tokenów
botToken+appTokensą wymagane dla Socket Mode.- Tryb HTTP wymaga
botToken+signingSecret. botToken,appToken,signingSecretiuserTokenakceptują zwykłe ciągi znaków lub obiekty SecretRef.- Tokeny z konfiguracji mają pierwszeństwo przed zapasową konfiguracją env.
- Zapasowa konfiguracja env
SLACK_BOT_TOKEN/SLACK_APP_TOKENdotyczy tylko konta domyślnego. userToken(xoxp-...) jest dostępny tylko w konfiguracji (bez zapasowej konfiguracji env) i domyślnie działa w trybie tylko do odczytu (userTokenReadOnly: true).
- Inspekcja konta Slack śledzi pola
*Sourcei*Statusdla każdego poświadczenia (botToken,appToken,signingSecret,userToken). - Status może mieć wartość
available,configured_unavailablelubmissing. configured_unavailableoznacza, że konto jest skonfigurowane przez SecretRef lub inne niejawne źródło sekretu, ale bieżąca ścieżka polecenia/środowiska uruchomieniowego nie mogła rozwiązać rzeczywistej wartości.- W trybie HTTP uwzględniane jest
signingSecretStatus; w Socket Mode wymagana para tobotTokenStatus+appTokenStatus.
Akcje i bramki
Akcje Slacka są kontrolowane przezchannels.slack.actions.*.
Dostępne grupy akcji w obecnych narzędziach Slacka:
| Group | Default |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info i emoji-list.
Kontrola dostępu i routing
- Zasady DM
- Zasady kanałów
- Wzmianki i użytkownicy kanałów
channels.slack.dmPolicy kontroluje dostęp do DM-ów (starsza wersja: channels.slack.dm.policy):pairing(domyślnie)allowlistopen(wymaga, abychannels.slack.allowFromzawierało"*"; starsza wersja:channels.slack.dm.allowFrom)disabled
dm.enabled(domyślnie true)channels.slack.allowFrom(zalecane)dm.allowFrom(starsza wersja)dm.groupEnabled(grupowe DM-y domyślnie false)dm.groupChannels(opcjonalna lista dozwolonych MPIM)
channels.slack.accounts.default.allowFromdotyczy tylko kontadefault.- Nazwane konta dziedziczą
channels.slack.allowFrom, gdy ich własneallowFromnie jest ustawione. - Nazwane konta nie dziedziczą
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Wątki, sesje i tagi odpowiedzi
- DM-y są routowane jako
direct; kanały jakochannel; MPIM-y jakogroup. - Przy domyślnym
session.dmScope=mainSlack DM-y są scalane do głównej sesji agenta. - Sesje kanałów:
agent:<agentId>:slack:channel:<channelId>. - Odpowiedzi w wątkach mogą tworzyć sufiksy sesji wątku (
:thread:<threadTs>), gdy ma to zastosowanie. - Domyślną wartością
channels.slack.thread.historyScopejestthread; domyślną wartościąthread.inheritParentjestfalse. channels.slack.thread.initialHistoryLimitkontroluje, ile istniejących wiadomości z wątku jest pobieranych przy rozpoczęciu nowej sesji wątku (domyślnie20; ustaw0, aby wyłączyć).channels.slack.thread.requireExplicitMention(domyślniefalse): gdy ma wartośćtrue, wyłącza niejawne wzmianki w wątkach, tak aby bot odpowiadał tylko na jawne wzmianki@botwewnątrz wątków, nawet jeśli bot już uczestniczył w wątku. Bez tego odpowiedzi w wątku, w którym uczestniczy bot, omijają bramkowanierequireMention.
channels.slack.replyToMode:off|first|all|batched(domyślnieoff)channels.slack.replyToModeByChatType: dladirect|group|channel- starsza zapasowa konfiguracja dla czatów bezpośrednich:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" wyłącza całe odpowiadanie w wątkach w Slacku, w tym jawne tagi [[reply_to_*]]. To różni się od Telegram, gdzie jawne tagi są nadal honorowane w trybie "off". Różnica wynika z modeli wątków na platformach: w Slacku wątki ukrywają wiadomości przed kanałem, podczas gdy odpowiedzi w Telegram pozostają widoczne w głównym przepływie czatu.
Reakcje potwierdzenia
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza wiadomość przychodzącą.
Kolejność rozwiązywania:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- zapasowa konfiguracja emoji tożsamości agenta (
agents.list[].identity.emoji, w przeciwnym razie ”👀”)
- Slack oczekuje shortcode’ów (na przykład
"eyes"). - Użyj
"", aby wyłączyć reakcję dla konta Slack lub globalnie.
Strumieniowanie tekstu
channels.slack.streaming kontroluje zachowanie podglądu na żywo:
off: wyłącz strumieniowanie podglądu na żywo.partial(domyślnie): zastępuj tekst podglądu najnowszym częściowym wynikiem.block: dołączaj porcjowane aktualizacje podglądu.progress: pokazuj tekst statusu postępu podczas generowania, a następnie wyślij końcowy tekst.
channels.slack.nativeStreaming kontroluje natywne strumieniowanie tekstu Slacka, gdy streaming ma wartość partial (domyślnie: true).
- Aby pojawiło się natywne strumieniowanie tekstu, musi być dostępny wątek odpowiedzi. Wybór wątku nadal podlega
replyToMode. Bez niego używany jest zwykły podgląd wersji roboczej. - Multimedia i ładunki inne niż tekst wracają do zwykłego dostarczania.
- Jeśli strumieniowanie nie powiedzie się w trakcie odpowiedzi, OpenClaw wraca do zwykłego dostarczania pozostałych ładunków.
channels.slack.streamMode(replace | status_final | append) jest automatycznie migrowane dochannels.slack.streaming.- wartość logiczna
channels.slack.streamingjest automatycznie migrowana dochannels.slack.nativeStreaming.
Zapasowa reakcja pisania
typingReaction dodaje tymczasową reakcję do przychodzącej wiadomości Slacka, gdy OpenClaw przetwarza odpowiedź, a następnie usuwa ją po zakończeniu działania. Jest to najbardziej przydatne poza odpowiedziami w wątkach, które używają domyślnego wskaźnika statusu „pisze…”.
Kolejność rozwiązywania:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack oczekuje shortcode’ów (na przykład
"hourglass_flowing_sand"). - Reakcja jest wykonywana w trybie best-effort, a po zakończeniu odpowiedzi lub ścieżki błędu automatycznie podejmowana jest próba jej usunięcia.
Multimedia, dzielenie na części i dostarczanie
Załączniki przychodzące
Załączniki przychodzące
Załączniki plików Slacka są pobierane z prywatnych URL-i hostowanych przez Slacka (przepływ żądań uwierzytelnianych tokenem) i zapisywane w magazynie multimediów, gdy pobranie powiedzie się i limity rozmiaru na to pozwalają.Domyślny limit rozmiaru przychodzącego w czasie działania to
20MB, chyba że zostanie nadpisany przez channels.slack.mediaMaxMb.Tekst i pliki wychodzące
Tekst i pliki wychodzące
- części tekstu używają
channels.slack.textChunkLimit(domyślnie 4000) channels.slack.chunkMode="newline"włącza dzielenie najpierw według akapitów- wysyłanie plików używa API przesyłania Slacka i może obejmować odpowiedzi w wątkach (
thread_ts) - limit multimediów wychodzących podlega
channels.slack.mediaMaxMb, jeśli jest skonfigurowany; w przeciwnym razie wysyłanie do kanałów używa domyślnych wartości rodzaju MIME z pipeline’u multimediów
Cele dostarczania
Cele dostarczania
Preferowane jawne cele:
user:<id>dla DM-ówchannel:<id>dla kanałów
Polecenia i zachowanie slash
- Natywny tryb automatyczny poleceń jest wyłączony dla Slacka (
commands.native: "auto"nie włącza natywnych poleceń Slacka). - Włącz natywne handlery poleceń Slacka za pomocą
channels.slack.commands.native: true(lub globalniecommands.native: true). - Gdy natywne polecenia są włączone, zarejestruj pasujące polecenia slash w Slacku (nazwy
/<command>), z jednym wyjątkiem:- zarejestruj
/agentstatusdla polecenia statusu (Slack rezerwuje/status)
- zarejestruj
- Jeśli natywne polecenia nie są włączone, możesz uruchomić jedno skonfigurowane polecenie slash przez
channels.slack.slashCommand. - Natywne menu argumentów teraz dostosowują strategię renderowania:
- do 5 opcji: bloki przycisków
- 6-100 opcji: statyczne menu wyboru
- ponad 100 opcji: zewnętrzny wybór z asynchronicznym filtrowaniem opcji, gdy dostępne są handlery opcji interaktywności
- jeśli zakodowane wartości opcji przekraczają limity Slacka, przepływ wraca do przycisków
- W przypadku długich ładunków opcji menu argumentów poleceń slash używają okna potwierdzenia przed wysłaniem wybranej wartości.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
Odpowiedzi interaktywne
Slack może renderować interaktywne kontrolki odpowiedzi tworzone przez agenta, ale ta funkcja jest domyślnie wyłączona. Włącz ją globalnie:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- To jest interfejs specyficzny dla Slacka. Inne kanały nie tłumaczą dyrektyw Slack Block Kit na własne systemy przycisków.
- Interaktywne wartości callbacków to nieprzezroczyste tokeny generowane przez OpenClaw, a nie surowe wartości tworzone przez agenta.
- Jeśli wygenerowane bloki interaktywne przekroczyłyby limity Slack Block Kit, OpenClaw wraca do oryginalnej odpowiedzi tekstowej zamiast wysyłać nieprawidłowy ładunek blocks.
Zatwierdzenia exec w Slacku
Slack może działać jako natywny klient zatwierdzeń z interaktywnymi przyciskami i interakcjami, zamiast wracać do Web UI lub terminala.- Zatwierdzenia exec używają
channels.slack.execApprovals.*do natywnego routingu DM/kanałów. - Zatwierdzenia pluginów mogą nadal być rozwiązywane przez tę samą natywną powierzchnię przycisków Slacka, gdy żądanie już trafia do Slacka, a rodzaj identyfikatora zatwierdzenia to
plugin:. - Autoryzacja zatwierdzającego jest nadal egzekwowana: tylko użytkownicy zidentyfikowani jako zatwierdzający mogą zatwierdzać lub odrzucać żądania przez Slacka.
interactivity jest włączone w ustawieniach aplikacji Slack, monity o zatwierdzenie są renderowane jako przyciski Block Kit bezpośrednio w konwersacji.
Gdy te przyciski są obecne, są głównym UX zatwierdzania; OpenClaw
powinien dołączać ręczne polecenie /approve tylko wtedy, gdy wynik narzędzia wskazuje, że zatwierdzenia na czacie są niedostępne lub ręczne zatwierdzenie jest jedyną możliwą ścieżką.
Ścieżka konfiguracji:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(opcjonalnie; jeśli to możliwe, używa wartości zapasowej zcommands.ownerAllowFrom)channels.slack.execApprovals.target(dm|channel|both, domyślnie:dm)agentFilter,sessionFilter
enabled jest nieustawione lub ma wartość "auto" i zostanie rozwiązany co najmniej jeden
zatwierdzający. Ustaw enabled: false, aby jawnie wyłączyć Slack jako natywnego klienta zatwierdzeń.
Ustaw enabled: true, aby wymusić natywne zatwierdzenia, gdy zostaną rozwiązani zatwierdzający.
Domyślne zachowanie bez jawnej konfiguracji zatwierdzeń exec dla Slacka:
approvals.exec jest oddzielne. Używaj go tylko wtedy, gdy monity zatwierdzeń exec muszą być również
kierowane do innych czatów lub jawnych celów poza pasmem. Współdzielone przekazywanie approvals.plugin jest również
oddzielne; natywne przyciski Slacka nadal mogą rozwiązywać zatwierdzenia pluginów, gdy te żądania już trafiają
do Slacka.
/approve w tym samym czacie również działa w kanałach i DM-ach Slacka, które już obsługują polecenia. Zobacz Zatwierdzenia exec, aby poznać pełny model przekazywania zatwierdzeń.
Zdarzenia i zachowanie operacyjne
- Edycje/usunięcia wiadomości i rozgłoszenia wątków są mapowane na zdarzenia systemowe.
- Zdarzenia dodania/usunięcia reakcji są mapowane na zdarzenia systemowe.
- Zdarzenia dołączenia/opuszczenia członka, utworzenia/zmiany nazwy kanału oraz dodania/usunięcia przypięcia są mapowane na zdarzenia systemowe.
channel_id_changedmoże migrować klucze konfiguracji kanałów, gdyconfigWritesjest włączone.- Metadane tematu/celu kanału są traktowane jako niezaufany kontekst i mogą być wstrzykiwane do kontekstu routingu.
- Inicjator wątku i początkowe zasianie kontekstu historii wątku są filtrowane przez skonfigurowane listy dozwolonych nadawców, jeśli ma to zastosowanie.
- Akcje bloków i interakcje z modalami emitują ustrukturyzowane zdarzenia systemowe
Slack interaction: ...z bogatymi polami ładunku:- akcje bloków: wybrane wartości, etykiety, wartości selektora i metadane
workflow_* - zdarzenia modali
view_submissioniview_closedz routowanymi metadanymi kanału i wejściami formularza
- akcje bloków: wybrane wartości, etykiety, wartości selektora i metadane
Wskazówki do dokumentacji referencyjnej konfiguracji
Główne odniesienie:-
Dokumentacja referencyjna konfiguracji - Slack
Najważniejsze pola Slacka:
- tryb/autoryzacja:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - dostęp do DM-ów:
dm.enabled,dmPolicy,allowFrom(starsza wersja:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - przełącznik zgodności:
dangerouslyAllowNameMatching(awaryjny; pozostaw wyłączony, jeśli nie jest potrzebny) - dostęp do kanałów:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - wątki/historia:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - dostarczanie:
textChunkLimit,chunkMode,mediaMaxMb,streaming,nativeStreaming - operacje/funkcje:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- tryb/autoryzacja:
Rozwiązywanie problemów
Brak odpowiedzi na kanałach
Brak odpowiedzi na kanałach
Sprawdź po kolei:
groupPolicy- listę dozwolonych kanałów (
channels.slack.channels) requireMention- listę dozwolonych
usersdla danego kanału
Wiadomości DM są ignorowane
Wiadomości DM są ignorowane
Sprawdź:
channels.slack.dm.enabledchannels.slack.dmPolicy(lub starszechannels.slack.dm.policy)- zatwierdzenia parowania / wpisy listy dozwolonych
Tryb Socket nie łączy się
Tryb Socket nie łączy się
Zweryfikuj tokeny bota i aplikacji oraz włączenie Socket Mode w ustawieniach aplikacji Slack.Jeśli
openclaw channels status --probe --json pokazuje botTokenStatus lub
appTokenStatus: "configured_unavailable", konto Slack jest
skonfigurowane, ale bieżące środowisko uruchomieniowe nie mogło rozwiązać wartości
opartej na SecretRef.Tryb HTTP nie odbiera zdarzeń
Tryb HTTP nie odbiera zdarzeń
Zweryfikuj:
- signing secret
- ścieżkę webhooka
- Slack Request URLs (Events + Interactivity + Slash Commands)
- unikalny
webhookPathdla każdego konta HTTP
signingSecretStatus: "configured_unavailable" pojawia się w migawkach
konta, konto HTTP jest skonfigurowane, ale bieżące środowisko uruchomieniowe nie mogło
rozwiązać signing secret opartego na SecretRef.Natywne/polecenia slash nie uruchamiają się
Natywne/polecenia slash nie uruchamiają się
Sprawdź, czy zamierzony był:
- natywny tryb poleceń (
channels.slack.commands.native: true) z pasującymi poleceniami slash zarejestrowanymi w Slacku - albo tryb pojedynczego polecenia slash (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups oraz listy dozwolonych kanałów/użytkowników.