Slack
Status: gotowe do użycia produkcyjnego dla wiadomości prywatnych i kanałów przez integracje aplikacji Slack. Domyślnym trybem jest Socket Mode; obsługiwany jest również tryb HTTP Events API.Parowanie
Wiadomości prywatne Slacka domyślnie działają w trybie 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ślnie)
- Tryb HTTP Events API
Utwórz aplikację Slack i tokeny
W ustawieniach aplikacji Slack:
- włącz Socket Mode
- utwórz App Token (
xapp-...) z uprawnieniemconnections:write - zainstaluj aplikację i skopiuj Bot Token (
xoxb-...)
Subskrybuj zdarzenia aplikacji
Subskrybuj zdarzenia bota dla:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Lista kontrolna manifestu i zakresów
Przykład manifestu aplikacji Slack
Przykład manifestu aplikacji Slack
Opcjonalne zakresy tokena użytkownika (operacje odczytu)
Opcjonalne zakresy tokena użytkownika (operacje odczytu)
Jeśli skonfigurujesz
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 odczytu wyszukiwania Slacka)
Model tokenów
botToken+appTokensą wymagane dla Socket Mode.- Tryb HTTP wymaga
botToken+signingSecret. botToken,appToken,signingSecretiuserTokenakceptują jawne ciągi znaków lub obiekty SecretRef.- Tokeny z konfiguracji mają pierwszeństwo przed zapasowymi zmiennymi środowiskowymi.
- Zapasowe zmienne środowiskowe
SLACK_BOT_TOKEN/SLACK_APP_TOKENmają zastosowanie tylko do konta domyślnego. userToken(xoxp-...) jest dostępny tylko w konfiguracji (bez zapasowej zmiennej środowiskowej) i domyślnie działa w trybie tylko do odczytu (userTokenReadOnly: true).- Opcjonalnie: dodaj
chat:write.customize, jeśli chcesz, aby wiadomości wychodzące używały tożsamości aktywnego agenta (niestandardowausernamei ikona).icon_emojiużywa składni:nazwa_emoji:.
- Inspekcja konta Slack śledzi pola
*Sourcei*Statusdla każdego poświadczenia (botToken,appToken,signingSecret,userToken). - Status ma 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ędniany jest
signingSecretStatus; w Socket Mode wymaganą parą sąbotTokenStatus+appTokenStatus.
Działania i bramki
Działania Slacka są kontrolowane przezchannels.slack.actions.*.
Dostępne grupy działań w bieżących narzędziach Slacka:
| Grupa | Domyślnie |
|---|---|
| messages | włączone |
| reactions | włączone |
| pins | włączone |
| memberInfo | włączone |
| emojiList | włączone |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info i emoji-list.
Kontrola dostępu i routing
- Zasady dla wiadomości prywatnych
- Zasady dla kanałów
- Wzmianki i użytkownicy kanałów
channels.slack.dmPolicy kontroluje dostęp do wiadomości prywatnych (starsze: channels.slack.dm.policy):pairing(domyślnie)allowlistopen(wymaga, abychannels.slack.allowFromzawierało"*"; starsze:channels.slack.dm.allowFrom)disabled
dm.enabled(domyślnie true)channels.slack.allowFrom(preferowane)dm.allowFrom(starsze)dm.groupEnabled(grupowe wiadomości prywatne domyślnie false)dm.groupChannels(opcjonalna lista dozwolonych MPIM)
channels.slack.accounts.default.allowFromma zastosowanie tylko do 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
- Wiadomości prywatne są routowane jako
direct; kanały jakochannel; MPIM jakogroup. - Przy domyślnym
session.dmScope=mainwiadomości prywatne Slacka 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>) tam, gdzie ma to zastosowanie. - Domyślna wartość
channels.slack.thread.historyScopetothread; domyślna wartośćthread.inheritParenttofalse. channels.slack.thread.initialHistoryLimitkontroluje, ile istniejących wiadomości w wątku jest pobieranych przy rozpoczęciu nowej sesji wątku (domyślnie20; ustaw0, aby wyłączyć).
channels.slack.replyToMode:off|first|all(domyślnieoff)channels.slack.replyToModeByChatType: dla każdego zdirect|group|channel- starsza wartość zapasowa 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_*]]. Różni się to od Telegrama, gdzie jawne tagi są nadal honorowane w trybie "off". Ta różnica odzwierciedla modele wątków na platformach: w Slacku wątki ukrywają wiadomości z kanału, podczas gdy odpowiedzi w Telegramie pozostają widoczne w głównym przepływie czatu.
Reakcje potwierdzenia
ackReaction wysyła emoji potwierdzenia, gdy OpenClaw przetwarza wiadomość przychodzącą.
Kolejność rozstrzygania:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- zapasowo 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ąp tekst podglądu najnowszym częściowym wynikiem.block: dodawaj 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 natywne strumieniowanie tekstu było widoczne, musi być dostępny wątek odpowiedzi. Wybór wątku nadal podlega
replyToMode. Bez niego używany jest zwykły roboczy podgląd. - Media 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.- logiczne
channels.slack.streamingjest automatycznie migrowane 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ść rozstrzygania:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack oczekuje shortcode’ów (na przykład
"hourglass_flowing_sand"). - Reakcja jest podejmowana w trybie best-effort, a próba wyczyszczenia następuje automatycznie po odpowiedzi lub po zakończeniu ścieżki błędu.
Media, porcjowanie i dostarczanie
Załączniki przychodzące
Załączniki przychodzące
Załączniki plików Slacka są pobierane z prywatnych adresów URL hostowanych przez Slacka (przepływ żądania uwierzytelnianego tokenem) i zapisywane w magazynie mediów, gdy pobranie się powiedzie i pozwalają na to limity rozmiaru.Limit rozmiaru danych przychodzących w środowisku uruchomieniowym domyślnie wynosi
20MB, chyba że zostanie nadpisany przez channels.slack.mediaMaxMb.Tekst i pliki wychodzące
Tekst i pliki wychodzące
- porcje 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 mediów wychodzących jest zgodny z
channels.slack.mediaMaxMb, jeśli jest skonfigurowany; w przeciwnym razie wysyłanie kanałowe używa domyślnych wartości typu MIME z pipeline’u mediów
Cele dostarczania
Cele dostarczania
Preferowane jawne cele:
user:<id>dla wiadomości prywatnychchannel:<id>dla kanałów
Polecenia i zachowanie poleceń slash
- Natywny tryb automatyczny poleceń jest wyłączony dla Slacka (
commands.native: "auto"nie włącza natywnych poleceń Slacka). - Włącz natywne obsługiwacze poleceń Slacka za pomocą
channels.slack.commands.native: true(lub globalnegocommands.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 uruchamiać pojedyncze skonfigurowane polecenie slash przez
channels.slack.slashCommand. - Natywne menu argumentów dostosowują teraz strategię renderowania:
- do 5 opcji: bloki przycisków
- 6-100 opcji: statyczne menu wyboru
- ponad 100 opcji: wybór zewnętrzny z asynchronicznym filtrowaniem opcji, gdy dostępne są obsługiwacze opcji interaktywności
- jeśli zakodowane wartości opcji przekroczą limity Slacka, przepływ wraca do przycisków
- Dla 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]]
- Jest to interfejs specyficzny dla Slacka. Inne kanały nie tłumaczą dyrektyw Slack Block Kit na własne systemy przycisków.
- Wartości interaktywnych 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 bloków.
Zatwierdzenia exec w Slacku
Slack może działać jako natywny klient zatwierdzeń z interaktywnymi przyciskami i interakcjami, zamiast wracać do interfejsu Web UI lub terminala.- Zatwierdzenia exec używają
channels.slack.execApprovals.*do natywnego routingu wiadomości prywatnych/kanałów. - Zatwierdzenia pluginów mogą nadal być rozstrzygane przez tę samą natywną powierzchnię przycisków Slacka, gdy żądanie już trafia do Slacka, a rodzaj identyfikatora zatwierdzenia to
plugin:. - Autoryzacja zatwierdzających nadal jest egzekwowana: tylko użytkownicy zidentyfikowani jako zatwierdzający mogą zatwierdzać lub odrzucać żądania przez Slack.
interactivity, prośby o zatwierdzenie są renderowane bezpośrednio w konwersacji jako przyciski Block Kit.
Gdy te przyciski są obecne, stanowią podstawowy interfejs 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ą ścieżką.
Ścieżka konfiguracji:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(opcjonalne; gdy to możliwe, wraca docommands.ownerAllowFrom)channels.slack.execApprovals.target(dm|channel|both, domyślnie:dm)agentFilter,sessionFilter
enabled nie jest ustawione lub ma wartość "auto" i zostanie rozstrzygnięty co najmniej jeden
zatwierdzający. Ustaw enabled: false, aby jawnie wyłączyć Slack jako natywnego klienta zatwierdzeń.
Ustaw enabled: true, aby wymusić włączenie natywnych zatwierdzeń po rozstrzygnięciu zatwierdzających.
Domyślne zachowanie bez jawnej konfiguracji zatwierdzeń exec dla Slacka:
approvals.exec jest oddzielne. Używaj go tylko wtedy, gdy prośby o zatwierdzenie exec muszą być również
kierowane do innych czatów lub jawnych celów poza pasmem. Współdzielone przekazywanie approvals.plugin także jest
oddzielne; natywne przyciski Slacka nadal mogą rozstrzygać zatwierdzenia pluginów, gdy te żądania już trafiają
do Slacka.
Polecenie /approve w tym samym czacie działa także w kanałach i wiadomościach prywatnych Slacka, które już obsługują polecenia. Pełny model przekazywania zatwierdzeń znajdziesz w Zatwierdzenia exec.
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 pinezki są mapowane na zdarzenia systemowe.
channel_id_changedmoże migrować klucze konfiguracji kanału, gdy włączone jestconfigWrites.- Metadane tematu/celu kanału są traktowane jako niezaufany kontekst i mogą być wstrzykiwane do kontekstu routingu.
- Inicjator wątku i początkowe zasiewanie kontekstu historii wątku są filtrowane według skonfigurowanych list dozwolonych nadawców, gdy ma to zastosowanie.
- Akcje bloków i interakcje modalne emitują ustrukturyzowane zdarzenia systemowe
Slack interaction: ...z bogatymi polami ładunku:- akcje bloków: wybrane wartości, etykiety, wartości selektorów i metadane
workflow_* - zdarzenia modalne
view_submissioniview_closedz kierowanymi metadanymi kanału i danymi wejściowymi formularza
- akcje bloków: wybrane wartości, etykiety, wartości selektorów i metadane
Wskaźniki do dokumentacji konfiguracji
Główne odwołanie:-
Dokumentacja konfiguracji - Slack
Najważniejsze pola Slacka:
- tryb/uwierzytelnianie:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - dostęp do wiadomości prywatnych:
dm.enabled,dmPolicy,allowFrom(starsze:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - przełącznik zgodności:
dangerouslyAllowNameMatching(tylko awaryjnie; pozostaw wyłączone, jeśli nie jest potrzebne) - 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/uwierzytelnianie:
Rozwiązywanie problemów
Brak odpowiedzi na kanałach
Brak odpowiedzi na kanałach
Sprawdź po kolei:
groupPolicy- lista dozwolonych kanałów (
channels.slack.channels) requireMention- lista dozwolonych
usersdla kanału
Wiadomości prywatne są ignorowane
Wiadomości prywatne 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",
konto HTTP jest skonfigurowane, ale bieżące środowisko uruchomieniowe nie mogło
rozwiązać signing secret opartego na SecretRef.Natywne/polecenia slash nie działają
Natywne/polecenia slash nie działają
Sprawdź, czy zamierzeniem było:
- natywny tryb poleceń (
channels.slack.commands.native: true) z pasującymi poleceniami slash zarejestrowanymi w Slacku - czy tryb pojedynczego polecenia slash (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups oraz listy dozwolonych kanałów/użytkowników.