Pairing
Slack-DMs verwenden standardmäßig den Kopplungsmodus.
Slash commands
Natives Befehlsverhalten und Befehlskatalog.
Channel troubleshooting
Kanalübergreifende Diagnose- und Reparatur-Playbooks.
Socket Mode oder HTTP Request URLs auswählen
Beide Transporte sind produktionsreif und erreichen Funktionsparität für Messaging, Slash-Befehle, App Home und Interaktivität. Wählen Sie nach Bereitstellungsform, nicht nach Funktionen.| Aspekt | Socket Mode (Standard) | HTTP Request URLs |
|---|---|---|
| Öffentliche Gateway-URL | Nicht erforderlich | Erforderlich (DNS, TLS, Reverse-Proxy oder Tunnel) |
| Ausgehendes Netzwerk | Ausgehendes WSS zu wss-primary.slack.com muss erreichbar sein | Kein ausgehendes WS; nur eingehendes HTTPS |
| Benötigte Token | Bot-Token + App-Level Token mit connections:write | Bot-Token + Signing Secret |
| Entwickler-Laptop / hinter Firewall | Funktioniert unverändert | Benötigt einen öffentlichen Tunnel (ngrok, Cloudflare Tunnel, Tailscale Funnel) oder ein Staging-Gateway |
| Horizontale Skalierung | Eine Socket-Mode-Sitzung pro App und Host; mehrere Gateways benötigen separate Slack-Apps | Zustandsloser POST-Handler; mehrere Gateway-Replikate können eine App hinter einem Load Balancer teilen |
| Mehrere Konten auf einem Gateway | Unterstützt; jedes Konto öffnet eigenes WS | Unterstützt; jedes Konto benötigt einen eindeutigen webhookPath (Standard /slack/events), damit Registrierungen nicht kollidieren |
| Transport für Slash-Befehl | Wird über die WS-Verbindung zugestellt; slash_commands[].url wird ignoriert | Slack sendet POSTs an slash_commands[].url; das Feld ist erforderlich, damit der Befehl ausgelöst wird |
| Request-Signierung | Nicht verwendet (Authentifizierung ist das App-Level Token) | Slack signiert jede Anfrage; OpenClaw prüft mit signingSecret |
| Wiederherstellung nach Verbindungsabbruch | Automatische Wiederverbindung des Slack SDK ist aktiviert; OpenClaw startet fehlgeschlagene Socket-Mode-Sitzungen zusätzlich mit begrenztem Backoff neu. Pong-Timeout-Transportabstimmung gilt. | Keine persistente Verbindung, die abbrechen kann; Wiederholungen erfolgen pro Anfrage durch Slack |
Wählen Sie Socket Mode für Hosts mit einzelnem Gateway, Entwickler-Laptops und On-Prem-Netzwerke, die
*.slack.com ausgehend erreichen können, aber kein eingehendes HTTPS akzeptieren können.Wählen Sie HTTP Request URLs, wenn Sie mehrere Gateway-Replikate hinter einem Load Balancer ausführen, wenn ausgehendes WSS blockiert ist, eingehendes HTTPS aber erlaubt ist, oder wenn Sie Slack-Webhooks bereits an einem Reverse-Proxy terminieren.Relay-Modus
Der Relay-Modus trennt den Slack-Eingang vom OpenClaw-Gateway. Ein vertrauenswürdiger Router besitzt die einzelne Slack-Socket-Mode-Verbindung, wählt ein Ziel-Gateway aus und leitet ein typisiertes Ereignis über einen authentifizierten Websocket weiter. Das Gateway verwendet weiterhin sein Bot-Token für ausgehende Slack-Web-API-Aufrufe.wss:// verwenden, außer sie zielt auf localhost. Behandeln Sie das Bearer-Token und
die Routing-Tabelle des Routers als Teil der Slack-Autorisierungsgrenze: Weitergeleitete Ereignisse gelangen als autorisierte Aktivierungen in den
normalen Slack-Nachrichtenhandler. Eine vom Router bereitgestellte slack_identity
im Websocket-hello-Frame kann den standardmäßigen ausgehenden Benutzernamen und das Symbol festlegen; eine explizit
vom Aufrufer bereitgestellte Identität hat weiterhin Vorrang. Die Relay-Verbindung stellt die Verbindung mit demselben
begrenzten Backoff-Timing wieder her, das von Socket Mode verwendet wird, und löscht die vom Router bereitgestellte Identität immer dann,
wenn die Verbindung getrennt wird.
Installation
Installieren Sie Slack, bevor Sie den Kanal konfigurieren:plugins install registriert und aktiviert das Plugin. Das Plugin tut dennoch nichts, bis Sie die Slack-App und die Kanaleinstellungen unten konfigurieren. Allgemeines Plugin-Verhalten und Installationsregeln finden Sie unter Plugins.
Schnelleinrichtung
- Socket Mode (default)
- HTTP-Anfrage-URLs
Create a new Slack app
Öffnen Sie api.slack.com/apps → Create New App → From a manifest → wählen Sie Ihren Workspace aus → fügen Sie eines der folgenden Manifeste ein → Next → Create.Nachdem Slack die App erstellt hat:
Recommended entspricht dem vollen Funktionsumfang des Slack-Plugins: App Home, Slash-Befehle, Dateien, Reaktionen, Pins, Gruppen-DMs und Emoji-/Benutzergruppen-Lesezugriffe. Wählen Sie Minimal, wenn Workspace-Richtlinien Scopes einschränken — es deckt DMs, Kanal-/Gruppenverlauf, Erwähnungen und Slash-Befehle ab, lässt aber Dateien, Reaktionen, Pins, Gruppen-DM (
mpim:*), emoji:read und usergroups:read weg. Die Begründung pro Scope und additive Optionen wie zusätzliche Slash-Befehle finden Sie in der Manifest- und Scope-Checkliste.- Basic Information -> App-Level Tokens -> Generate Token and Scopes: Fügen Sie
connections:writehinzu, speichern Sie und kopieren Sie das App-Level Token. - Install App -> Install to Workspace: Kopieren Sie das Bot User OAuth Token.
Transportabstimmung für Socket Mode
OpenClaw setzt das Pong-Timeout des Slack-SDK-Clients im Socket Mode standardmäßig auf 15 Sekunden. Überschreiben Sie die Transporteinstellungen nur, wenn Sie Workspace- oder host-spezifische Abstimmung benötigen:clientPingTimeout ist die Wartezeit auf Pong, nachdem das SDK einen Client-Ping sendet; serverPingTimeout ist die Wartezeit auf Slack-Server-Pings. App-Nachrichten und Events bleiben Anwendungszustand, keine Liveness-Signale des Transports.
Hinweise:
socketModewird im HTTP Request URL-Modus ignoriert.- Basis-Einstellungen unter
channels.slack.socketModegelten für alle Slack-Konten, sofern sie nicht überschrieben werden. Kontospezifische Überschreibungen verwendenchannels.slack.accounts.<accountId>.socketMode; da dies eine Objektüberschreibung ist, müssen Sie jedes Socket-Abstimmungsfeld angeben, das Sie für dieses Konto verwenden möchten. - Nur
clientPingTimeouthat einen OpenClaw-Standardwert (15000).serverPingTimeoutundpingPongLoggingEnabledwerden nur bei Konfiguration an das Slack-SDK übergeben. - Der Neustart-Backoff für Socket Mode beginnt bei etwa 2 Sekunden und ist bei etwa 30 Sekunden gedeckelt. Wiederherstellbare Start-, Start-Warte- und Verbindungsabbruchfehler werden erneut versucht, bis der Channel stoppt. Permanente Konto- und Anmeldedatenfehler wie ungültige Authentifizierung, widerrufene Tokens oder fehlende Scopes schlagen schnell fehl, statt unbegrenzt wiederholt zu werden.
Manifest- und Scope-Checkliste
Das Basismanifest der Slack-App ist für Socket Mode und HTTP-Anfrage-URLs identisch. Nur der Blocksettings (und die Slash-Befehl-url) unterscheidet sich.
Basismanifest (Socket-Mode-Standard):
settings durch die HTTP-Variante und fügen Sie jedem Slash-Befehl url hinzu. Öffentliche URL erforderlich:
Zusätzliche Manifest-Einstellungen
Zeigen Sie andere Funktionen an, die die oben genannten Standardwerte erweitern. Das Standardmanifest aktiviert den Slack App Home-Tab Home und abonniertapp_home_opened. Wenn ein Workspace-Mitglied den Home-Tab öffnet, veröffentlicht OpenClaw mit views.publish eine sichere Standard-Home-Ansicht; es werden keine Konversations-Payloads oder privaten Konfigurationen einbezogen. Der Tab Messages bleibt für Slack-DMs aktiviert. Das Manifest aktiviert außerdem Slack-Assistant-Threads mit features.assistant_view, assistant:write, assistant_thread_started und assistant_thread_context_changed; Assistant-Threads werden an eigene OpenClaw-Thread-Sessions weitergeleitet und halten den von Slack bereitgestellten Thread-Kontext für den Agent verfügbar.
Optional native slash commands
Optional native slash commands
Mehrere native Slash-Befehle können mit entsprechenden Nuancen anstelle eines einzelnen konfigurierten Befehls verwendet werden:
- Verwenden Sie
/agentstatusstatt/status, da der Befehl/statusreserviert ist. - Es können höchstens 25 Slash-Befehle gleichzeitig verfügbar gemacht werden.
features.slash_commands durch eine Teilmenge der verfügbaren Befehle:- Socket Mode (default)
- HTTP Request URLs
Optional user-token scopes (read operations)
Optional user-token scopes (read operations)
Wenn Sie
channels.slack.userToken konfigurieren, sind typische Lese-Scopes:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(wenn Sie von Slack-Suchlesevorgängen abhängen)
Token-Modell
botToken+appTokensind für Socket Mode erforderlich.- Der HTTP-Modus erfordert
botToken+signingSecret. - Der Relay-Modus erfordert
botTokensowierelay.url,relay.authTokenundrelay.gatewayId; er verwendet kein App-Token und kein Signing Secret. botToken,appToken,signingSecret,relay.authTokenunduserTokenakzeptieren Klartext- Zeichenfolgen oder SecretRef-Objekte.- Konfigurations-Token überschreiben Env-Fallbacks.
- Der Env-Fallback
SLACK_BOT_TOKEN/SLACK_APP_TOKENgilt nur für das Standardkonto. userTokenist ausschließlich konfigurationsbasiert (kein Env-Fallback) und ist standardmäßig auf schreibgeschütztes Verhalten eingestellt (userTokenReadOnly: true).
- Die Slack-Kontoinspektion verfolgt pro Zugangsdaten die Felder
*Sourceund*Status(botToken,appToken,signingSecret,userToken). - Der Status ist
available,configured_unavailableodermissing. configured_unavailablebedeutet, dass das Konto über SecretRef oder eine andere nicht inline angegebene Secret-Quelle konfiguriert ist, der aktuelle Befehls-/Runtime-Pfad den tatsächlichen Wert jedoch nicht auflösen konnte.- Im HTTP-Modus ist
signingSecretStatusenthalten; in Socket Mode ist das erforderliche PaarbotTokenStatus+appTokenStatus.
Aktionen und Gates
Slack-Aktionen werden überchannels.slack.actions.* gesteuert.
Verfügbare Aktionsgruppen im aktuellen Slack-Tooling:
| Gruppe | Standard |
|---|---|
| messages | enabled |
| reactions | enabled |
| pins | enabled |
| memberInfo | enabled |
| emojiList | enabled |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info und emoji-list. download-file akzeptiert Slack-Datei-IDs, die in Platzhaltern für eingehende Dateien angezeigt werden, und gibt für Bilder Bildvorschauen oder für andere Dateitypen lokale Dateimetadaten zurück.
Zugriffssteuerung und Routing
- DM policy
- Channel policy
- Mentions and channel users
channels.slack.dmPolicy steuert den DM-Zugriff. channels.slack.allowFrom ist die kanonische DM-Allowlist.pairing(Standard)allowlistopen(erfordert, dasschannels.slack.allowFrom"*"enthält)disabled
dm.enabled(standardmäßig true)channels.slack.allowFromdm.allowFrom(Legacy)dm.groupEnabled(Gruppen-DMs standardmäßig false)dm.groupChannels(optionale MPIM-Allowlist)
channels.slack.accounts.default.allowFromgilt nur für das Kontodefault.- Benannte Konten erben
channels.slack.allowFrom, wenn ihr eigenesallowFromnicht gesetzt ist. - Benannte Konten erben
channels.slack.accounts.default.allowFromnicht.
channels.slack.dm.policy und channels.slack.dm.allowFrom werden aus Kompatibilitätsgründen weiterhin gelesen. openclaw doctor --fix migriert sie zu dmPolicy und allowFrom, wenn dies ohne Änderung des Zugriffs möglich ist.Pairing in DMs verwendet openclaw pairing approve slack <code>.Threading, Sitzungen und Antwort-Tags
- DMs werden als
directgeroutet; Kanäle alschannel; MPIMs alsgroup. - Slack-Routenbindungen akzeptieren rohe Peer-IDs sowie Slack-Zielformen wie
channel:C12345678,user:U12345678und<@U12345678>. - Mit dem Standard
session.dmScope=mainwerden Slack-DMs auf die Hauptsitzung des Agenten reduziert. - Kanalsitzungen:
agent:<agentId>:slack:channel:<channelId>. - Gewöhnliche Top-Level-Kanalnachrichten bleiben in der Sitzung pro Kanal, selbst wenn
replyToModenichtoffist. - Slack-Thread-Antworten verwenden das übergeordnete Slack-
thread_tsfür Sitzungssuffixe (:thread:<threadTs>), selbst wenn ausgehendes Antwort-Threading mitreplyToMode="off"deaktiviert ist. - OpenClaw setzt einen geeigneten Top-Level-Kanal-Root in
agent:<agentId>:slack:channel:<channelId>:thread:<rootTs>ein, wenn dieser Root voraussichtlich einen sichtbaren Slack-Thread startet, sodass der Root und spätere Thread-Antworten dieselbe OpenClaw-Sitzung teilen. Dies gilt fürapp_mention-Ereignisse, explizite Bot- oder konfigurierte Erwähnungsmuster-Treffer und Kanäle mitrequireMention: falseund nicht-offreplyToMode. - Der Standard für
channels.slack.thread.historyScopeistthread; der Standard fürthread.inheritParentistfalse. channels.slack.thread.initialHistoryLimitsteuert, wie viele vorhandene Thread-Nachrichten abgerufen werden, wenn eine neue Thread-Sitzung startet (Standard20; auf0setzen, um dies zu deaktivieren).channels.slack.thread.requireExplicitMention(Standardfalse): Wenntrue, werden implizite Thread-Erwähnungen unterdrückt, sodass der Bot nur auf explizite@bot-Erwähnungen innerhalb von Threads reagiert, selbst wenn der Bot bereits am Thread beteiligt war. Ohne dies umgehen Antworten in einem Thread mit Bot-Beteiligung dasrequireMention-Gating.
channels.slack.replyToMode:off|first|all|batched(Standardoff)channels.slack.replyToModeByChatType: prodirect|group|channel- Legacy-Fallback für direkte Chats:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
message-Tool setzen Sie replyBroadcast: true mit action: "send" und threadId oder replyTo, um Slack aufzufordern, die Thread-Antwort auch im übergeordneten Kanal zu veröffentlichen. Dies wird auf Slacks chat.postMessage-Flag reply_broadcast abgebildet und wird nur für Text- oder Block-Kit-Sendungen unterstützt, nicht für Medien-Uploads.
Wenn ein message-Tool-Aufruf innerhalb eines Slack-Threads läuft und denselben Kanal adressiert, übernimmt OpenClaw normalerweise den aktuellen Slack-Thread gemäß replyToMode. Setzen Sie topLevel: true bei action: "send" oder action: "upload-file", um stattdessen eine neue Nachricht im übergeordneten Kanal zu erzwingen. threadId: null wird als dieselbe Top-Level-Abwahl akzeptiert.
replyToMode="off" deaktiviert ausgehendes Slack-Antwort-Threading, einschließlich expliziter [[reply_to_*]]-Tags. Es flacht eingehende Slack-Thread-Sitzungen nicht ab: Nachrichten, die bereits innerhalb eines Slack-Threads gepostet wurden, werden weiterhin an die :thread:<threadTs>-Sitzung geroutet. Dies unterscheidet sich von Telegram, wo explizite Tags im Modus "off" weiterhin beachtet werden. Slack-Threads verbergen Nachrichten im Kanal, während Telegram-Antworten inline sichtbar bleiben.Ack-Reaktionen
ackReaction sendet ein Bestätigungs-Emoji, während OpenClaw eine eingehende Nachricht verarbeitet. ackReactionScope entscheidet, wann dieses Emoji tatsächlich gesendet wird.
Emoji (ackReaction)
Auflösungsreihenfolge:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- Fallback auf Emoji der Agentenidentität (
agents.list[].identity.emoji, sonst"eyes"/ 👀)
- Slack erwartet Shortcodes (zum Beispiel
"eyes"). - Verwenden Sie
"", um die Reaktion für das Slack-Konto oder global zu deaktivieren.
Scope (messages.ackReactionScope)
Der Slack-Provider liest den Scope aus messages.ackReactionScope (Standard "group-mentions"). Es gibt heute keine Überschreibung auf Slack-Konto- oder Slack-Kanalebene; der Wert gilt global für den Gateway.
Werte:
"all": in DMs und Gruppen reagieren."direct": nur in DMs reagieren."group-all": auf jede Gruppennachricht reagieren (keine DMs)."group-mentions"(Standard): in Gruppen reagieren, aber nur wenn der Bot erwähnt wird (oder in Gruppenerwähnungen, die sich dafür entschieden haben). DMs sind ausgeschlossen."off"/"none": nie reagieren.
Der Standard-Scope (
"group-mentions") löst in Direktnachrichten keine Ack-Reaktionen aus. Um die konfigurierte ackReaction (zum Beispiel "eyes") bei eingehenden Slack-DMs zu sehen, setzen Sie messages.ackReactionScope auf "direct" oder "all". messages.ackReactionScope wird beim Start des Slack-Providers gelesen, daher ist ein Gateway-Neustart erforderlich, damit die Änderung wirksam wird.Text-Streaming
channels.slack.streaming steuert das Live-Vorschauverhalten:
off: Live-Vorschau-Streaming deaktivieren.partial(Standard): Vorschautext durch die neueste Teilausgabe ersetzen.block: gestückelte Vorschau-Updates anhängen.progress: Fortschrittsstatus-Text während der Generierung anzeigen und anschließend finalen Text senden.streaming.preview.toolProgress: Wenn die Entwurfsvorschau aktiv ist, Tool-/Fortschrittsupdates in dieselbe bearbeitete Vorschaunachricht routen (Standard:true). Auffalsesetzen, um separate Tool-/Fortschrittsnachrichten beizubehalten.streaming.preview.commandText/streaming.progress.commandText: aufstatussetzen, um kompakte Tool-Fortschrittszeilen beizubehalten und rohen Befehls-/Ausführungstext auszublenden (Standard:raw).
channels.slack.streaming.nativeTransport steuert Slack-natives Text-Streaming, wenn channels.slack.streaming.mode partial ist (Standard: true).
Slack-native Fortschritts-Aufgabenkarten sind für den Fortschrittsmodus opt-in. Setzen Sie channels.slack.streaming.progress.nativeTaskCards auf true mit channels.slack.streaming.mode="progress", um eine Slack-native Plan-/Aufgabenkarte zu senden, während die Arbeit läuft, und dieselbe Aufgabenkarte bei Abschluss zu aktualisieren. Ohne dieses Flag behält der Fortschrittsmodus das portable Entwurfsvorschauverhalten bei.
- Für natives Text-Streaming und die Anzeige des Slack-Assistenten-Threadstatus muss ein Antwort-Thread verfügbar sein. Die Thread-Auswahl folgt weiterhin
replyToMode. - Kanal-, Gruppenchat- und Top-Level-DM-Roots können weiterhin die normale Entwurfsvorschau verwenden, wenn natives Streaming nicht verfügbar ist oder kein Antwort-Thread existiert.
- Top-Level-Slack-DMs bleiben standardmäßig außerhalb von Threads, daher zeigen sie Slacks threadartige native Stream-/Statusvorschau nicht an; OpenClaw postet und bearbeitet stattdessen eine Entwurfsvorschau in der DM.
- Medien und Nicht-Text-Payloads fallen auf normale Zustellung zurück.
- Medien-/Fehler-Endausgaben brechen ausstehende Vorschau-Bearbeitungen ab; geeignete Text-/Block-Endausgaben werden nur geflusht, wenn sie die Vorschau an Ort und Stelle bearbeiten können.
- Wenn Streaming mitten in einer Antwort fehlschlägt, fällt OpenClaw für verbleibende Payloads auf normale Zustellung zurück.
channels.slack.streamMode(replace | status_final | append) ist ein Legacy-Runtime-Alias fürchannels.slack.streaming.mode.- Boolesches
channels.slack.streamingist ein Legacy-Runtime-Alias fürchannels.slack.streaming.modeundchannels.slack.streaming.nativeTransport. - Legacy-
channels.slack.nativeStreamingist ein Runtime-Alias fürchannels.slack.streaming.nativeTransport. - Führen Sie
openclaw doctor --fixaus, um persistierte Slack-Streaming-Konfiguration in die kanonischen Schlüssel umzuschreiben.
Fallback für Tippreaktion
typingReaction fügt der eingehenden Slack-Nachricht eine temporäre Reaktion hinzu, während OpenClaw eine Antwort verarbeitet, und entfernt sie, wenn der Lauf abgeschlossen ist. Dies ist am nützlichsten außerhalb von Thread-Antworten, die einen standardmäßigen Statusindikator „is typing…“ verwenden.
Auflösungsreihenfolge:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack erwartet Shortcodes (zum Beispiel
"hourglass_flowing_sand"). - Die Reaktion erfolgt nach bestem Bemühen, und die Bereinigung wird nach Abschluss des Antwort- oder Fehlerpfads automatisch versucht.
Medien, Chunking und Zustellung
Inbound attachments
Inbound attachments
Slack-Dateianhänge werden von Slack-gehosteten privaten URLs heruntergeladen (tokenauthentifizierter Anfragefluss) und bei erfolgreichem Abruf sowie zulässigen Größenlimits in den Medienspeicher geschrieben. Dateiplatzhalter enthalten die Slack-
fileId, damit Agenten die Originaldatei mit download-file abrufen können.Downloads verwenden begrenzte Idle- und Gesamt-Timeouts. Wenn der Abruf einer Slack-Datei hängen bleibt oder fehlschlägt, verarbeitet OpenClaw die Nachricht weiter und fällt auf den Dateiplatzhalter zurück.Die Laufzeit-Obergrenze für eingehende Größen ist standardmäßig 20MB, sofern sie nicht durch channels.slack.mediaMaxMb überschrieben wird.Outbound text and files
Outbound text and files
- Text-Chunks verwenden
channels.slack.textChunkLimit(Standard 4000) channels.slack.chunkMode="newline"aktiviert absatzorientierte Aufteilung- Dateisendungen verwenden Slack-Upload-APIs und können Thread-Antworten enthalten (
thread_ts) - Die Obergrenze für ausgehende Medien folgt
channels.slack.mediaMaxMb, wenn konfiguriert; andernfalls verwenden Kanalsendungen MIME-Art-Standards aus der Medienpipeline
Delivery targets
Delivery targets
Bevorzugte explizite Ziele:
user:<id>für DMschannel:<id>für Kanäle
Befehle und Slash-Verhalten
Slash-Befehle erscheinen in Slack entweder als ein einzelner konfigurierter Befehl oder als mehrere native Befehle. Konfigurieren Siechannels.slack.slashCommand, um Befehlsstandards zu ändern:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
channels.slack.commands.native: true oder commands.native: true in globalen Konfigurationen aktiviert.
- Der automatische Modus für native Befehle ist für Slack aus, sodass
commands.native: "auto"Slack-native Befehle nicht aktiviert.
- bis zu 5 Optionen: Button-Blöcke
- 6-100 Optionen: statisches Auswahlmenü
- mehr als 100 Optionen: externe Auswahl mit asynchroner Optionsfilterung, wenn Interaktivitäts-Optionshandler verfügbar sind
- überschrittene Slack-Limits: codierte Optionswerte fallen auf Buttons zurück
agent:<agentId>:slack:slash:<userId> und leiten Befehlsausführungen weiterhin mit CommandTargetSessionKey an die Ziel-Konversationssitzung weiter.
Interaktive Antworten
Slack kann von Agenten erstellte interaktive Antwortsteuerelemente darstellen, aber diese Funktion ist standardmäßig deaktiviert. Für neue Agenten-, CLI- und Plugin-Ausgaben sollten Sie die gemeinsamenpresentation-Buttons oder Auswahlblöcke bevorzugen. Sie verwenden denselben Slack-Interaktionspfad
und werden zugleich auf anderen Kanälen herabgestuft.
Global aktivieren:
[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
compileSlackInteractiveReplies(...)parseSlackOptionsLine(...)isSlackInteractiveRepliesEnabled(...)buildSlackInteractiveBlocks(...)
presentation-Payloads und buildSlackPresentationBlocks(...) für neue
in Slack gerenderte Steuerelemente.
Hinweise:
- Dies ist eine Slack-spezifische Legacy-UI. Andere Kanäle übersetzen Slack Block Kit-Direktiven nicht in ihre eigenen Button-Systeme.
- Die interaktiven Callback-Werte sind von OpenClaw erzeugte undurchsichtige Tokens, keine rohen, vom Agenten erstellten Werte.
- Wenn generierte interaktive Blöcke die Slack Block Kit-Grenzwerte überschreiten würden, fällt OpenClaw auf die ursprüngliche Textantwort zurück, statt eine ungültige Blocks-Payload zu senden.
Plugin-eigene Modal-Übermittlungen
Slack-Plugins, die einen interaktiven Handler registrieren, können auch Modal-view_submission- und view_closed-Lebenszyklusereignisse empfangen, bevor OpenClaw
die Payload für das agentensichtbare Systemereignis komprimiert. Verwenden Sie eines dieser Routing-
Muster, wenn Sie ein Slack-Modal öffnen:
- Setzen Sie
callback_idaufopenclaw:<namespace>:<payload>. - Oder behalten Sie eine bestehende
callback_idbei und legen SiepluginInteractiveData: "<namespace>:<payload>"inprivate_metadatades Modals ab.
ctx.interaction.kind als view_submission oder
view_closed, normalisierte inputs und das vollständige rohe stateValues-Objekt von
Slack. Routing nur über die Callback-ID reicht aus, um den Plugin-Handler aufzurufen; fügen Sie
die bestehenden private_metadata-Benutzer-/Sitzungs-Routingfelder des Modals ein, wenn das
Modal auch ein agentensichtbares Systemereignis erzeugen soll. Der Agent erhält ein
kompaktes, redigiertes Systemereignis Slack interaction: .... Wenn der Handler
systemEvent.summary, systemEvent.reference oder systemEvent.data zurückgibt, werden diese
Felder in dieses kompakte Ereignis aufgenommen, damit der Agent auf
Plugin-eigenen Speicher verweisen kann, ohne die vollständige Formular-Payload zu sehen.
Native Genehmigungen in Slack
Slack kann als nativer Genehmigungsclient mit interaktiven Buttons und Interaktionen dienen, statt auf die Web-UI oder das Terminal zurückzufallen.- Exec- und Plugin-Genehmigungen können als Slack-native Block Kit-Prompts gerendert werden.
channels.slack.execApprovals.*bleibt die Aktivierungs- und DM-/Kanal-Routing-Konfiguration für den nativen Exec-Genehmigungsclient.- Exec-Genehmigungs-DMs verwenden
channels.slack.execApprovals.approversodercommands.ownerAllowFrom. - Plugin-Genehmigungen verwenden Slack-native Buttons, wenn Slack als nativer Genehmigungsclient für die Ursprungssitzung aktiviert ist oder wenn
approvals.pluginan die ursprüngliche Slack-Sitzung oder ein Slack-Ziel weiterleitet. - Plugin-Genehmigungs-DMs verwenden Slack-Plugin-Genehmigende aus
channels.slack.allowFrom, benannte Konto-allowFrom-Einträge oder die Standardroute des Kontos. - Die Autorisierung von Genehmigenden wird weiterhin erzwungen: Nur-Exec-Genehmigende können Plugin-Anfragen nicht genehmigen, es sei denn, sie sind auch Plugin-Genehmigende.
interactivity in Ihren Slack-App-Einstellungen aktiviert ist, werden Genehmigungs-Prompts direkt in der Konversation als Block Kit-Buttons gerendert.
Wenn diese Buttons vorhanden sind, sind sie die primäre Genehmigungs-UX; OpenClaw
sollte nur dann einen manuellen /approve-Befehl einschließen, wenn das Tool-Ergebnis besagt, dass Chat-
Genehmigungen nicht verfügbar sind oder manuelle Genehmigung der einzige Weg ist.
Konfigurationspfad:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(optional; fällt nach Möglichkeit aufcommands.ownerAllowFromzurück)channels.slack.execApprovals.target(dm|channel|both, Standard:dm)agentFilter,sessionFilter
enabled nicht gesetzt oder "auto" ist und mindestens ein
Exec-Genehmigender aufgelöst wird. Slack kann über diesen nativen Client-Pfad auch native Plugin-Genehmigungen verarbeiten,
wenn Slack-Plugin-Genehmigende aufgelöst werden und die Anfrage den nativen Client-Filtern entspricht. Setzen Sie
enabled: false, um Slack als nativen Genehmigungsclient explizit zu deaktivieren. Setzen Sie enabled: true, um
native Genehmigungen zu erzwingen, wenn Genehmigende aufgelöst werden. Das Deaktivieren von Slack-Exec-Genehmigungen deaktiviert nicht
die native Slack-Plugin-Genehmigungszustellung, die über approvals.plugin aktiviert ist; die Plugin-Genehmigungszustellung
verwendet stattdessen Slack-Plugin-Genehmigende.
Standardverhalten ohne explizite Slack-Exec-Genehmigungskonfiguration:
approvals.exec-Weiterleitung ist separat. Verwenden Sie sie nur, wenn Exec-Genehmigungs-Prompts zusätzlich
an andere Chats oder explizite Out-of-Band-Ziele weitergeleitet werden müssen. Gemeinsame approvals.plugin-Weiterleitung ist ebenfalls
separat; Slack-native Zustellung unterdrückt diesen Fallback nur, wenn Slack die Plugin-
Genehmigungsanfrage nativ verarbeiten kann.
/approve im selben Chat funktioniert auch in Slack-Kanälen und DMs, die bereits Befehle unterstützen. Siehe Exec-Genehmigungen für das vollständige Modell der Genehmigungsweiterleitung.
Ereignisse und Betriebsverhalten
- Nachrichtenbearbeitungen/-löschungen werden in Systemereignisse abgebildet.
- Thread-Broadcasts (Thread-Antworten mit „Also send to channel“) werden als normale Benutzernachrichten verarbeitet.
- Hinzufügen/Entfernen von Reaktionen wird in Systemereignisse abgebildet.
- Beitritt/Austritt von Mitgliedern, erstellte/umbenannte Kanäle und Hinzufügen/Entfernen von Pins werden in Systemereignisse abgebildet.
channel_id_changedkann Kanal-Konfigurationsschlüssel migrieren, wennconfigWritesaktiviert ist.- Kanalthema/-zweck-Metadaten werden als nicht vertrauenswürdiger Kontext behandelt und können in den Routing-Kontext injiziert werden.
- Thread-Starter und anfängliches Seed-Setzen des Thread-Verlaufskontexts werden, sofern anwendbar, nach konfigurierten Sender-Allowlists gefiltert.
- Block-Aktionen, Shortcuts und Modal-Interaktionen geben strukturierte Systemereignisse
Slack interaction: ...mit umfangreichen Payload-Feldern aus:- Block-Aktionen: ausgewählte Werte, Labels, Picker-Werte und
workflow_*-Metadaten - Globale Shortcuts: Callback- und Akteur-Metadaten, an die direkte Sitzung des Akteurs weitergeleitet
- Nachrichten-Shortcuts: Callback, Akteur, Kanal, Thread und Kontext der ausgewählten Nachricht
- Modal-
view_submission- undview_closed-Ereignisse mit weitergeleiteten Kanal-Metadaten und Formulareingaben
- Block-Aktionen: ausgewählte Werte, Labels, Picker-Werte und
Konfigurationsreferenz
Primäre Referenz: Konfigurationsreferenz - Slack.Wichtige Slack-Felder
Wichtige Slack-Felder
- Modus/Auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - DM-Zugriff:
dm.enabled,dmPolicy,allowFrom(Legacy:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - Kompatibilitäts-Umschalter:
dangerouslyAllowNameMatching(Notfalloption; ausgeschaltet lassen, sofern nicht erforderlich) - Kanalzugriff:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - Threading/Verlauf:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - Zustellung:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport,streaming.preview.toolProgress - Unfurls:
unfurlLinks(Standard:false),unfurlMediafür die Steuerung von Link-/Medienvorschauen inchat.postMessage; setzen SieunfurlLinks: true, um Linkvorschauen wieder zu aktivieren - Betrieb/Funktionen:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
Fehlerbehebung
Keine Antworten in Kanälen
Keine Antworten in Kanälen
Prüfen Sie der Reihe nach:Nützliche Befehle:
groupPolicy- Kanal-Allowlist (
channels.slack.channels) — Schlüssel müssen Kanal-IDs sein (C12345678), keine Namen (#channel-name). Namensbasierte Schlüssel schlagen untergroupPolicy: "allowlist"still fehl, weil Kanal-Routing standardmäßig ID-zuerst erfolgt. So finden Sie eine ID: Rechtsklick auf den Kanal in Slack → Link kopieren — der WertC...am Ende der URL ist die Kanal-ID. requireMention- kanalbezogene
users-Allowlist messages.groupChat.visibleReplies: Normale Gruppen-/Kanal-Anfragen verwenden standardmäßig"automatic". Wenn Sie"message_tool"aktiviert haben und Logs Assistententext ohnemessage(action=send)-Aufruf zeigen, hat das Modell den sichtbaren Message-Tool-Pfad verfehlt. Abschlusstext bleibt in diesem Modus privat; prüfen Sie das ausführliche Gateway-Log auf unterdrückte Payload-Metadaten oder setzen Sie den Wert auf"automatic", wenn Sie möchten, dass jede normale abschließende Assistentenantwort über den Legacy-Pfad gepostet wird.messages.groupChat.unmentionedInbound: Wenn der Wert"room_event"ist, ist nicht erwähnter, erlaubter Kanal-Chat Umgebungskontext und bleibt stumm, sofern der Agent nicht dasmessage-Tool aufruft. Siehe Umgebungs-Raumereignisse.
DM-Nachrichten ignoriert
DM-Nachrichten ignoriert
Prüfen Sie:
channels.slack.dm.enabledchannels.slack.dmPolicy(oder Legacychannels.slack.dm.policy)- Pairing-Genehmigungen / Allowlist-Einträge (
dmPolicy: "open"erfordert weiterhinchannels.slack.allowFrom: ["*"]) - Gruppen-DMs verwenden MPIM-Verarbeitung; aktivieren Sie
channels.slack.dm.groupEnabledund nehmen Sie, falls konfiguriert, die MPIM inchannels.slack.dm.groupChannelsauf - Slack Assistant-DM-Ereignisse: Ausführliche Logs mit
drop message_changedbedeuten in der Regel, dass Slack ein bearbeitetes Assistant-Thread-Ereignis ohne wiederherstellbaren menschlichen Sender in den Nachrichtenmetadaten gesendet hat
Socket Mode verbindet nicht
Socket Mode verbindet nicht
Validieren Sie Bot- und App-Tokens sowie die Aktivierung von Socket Mode in den Slack-App-Einstellungen.
Das App-Level Token benötigt
connections:write, und das Bot User OAuth Token
muss zur gleichen Slack-App bzw. zum gleichen Workspace gehören wie das App-Token.Wenn openclaw channels status --probe --json botTokenStatus oder
appTokenStatus: "configured_unavailable" zeigt, ist das Slack-Konto
konfiguriert, aber die aktuelle Laufzeit konnte den SecretRef-gestützten
Wert nicht auflösen.Logs wie slack socket mode failed to start; retry ... sind behebbare
Startfehler. Fehlende Scopes, widerrufene Tokens und ungültige Authentifizierung schlagen
stattdessen schnell fehl. Ein Log slack token mismatch ... bedeutet, dass Bot-Token und App-Token
offenbar zu unterschiedlichen Slack-Apps gehören; korrigieren Sie die Zugangsdaten der Slack-App.HTTP-Modus empfängt keine Ereignisse
HTTP-Modus empfängt keine Ereignisse
Prüfen Sie:
- Signing Secret
- Webhook-Pfad
- Slack Request URLs (Events + Interactivity + Slash Commands)
- eindeutiger
webhookPathpro HTTP-Konto - die öffentliche URL terminiert TLS und leitet Anfragen an den Gateway-Pfad weiter
- der Slack-App-Pfad
request_urlentspricht exaktchannels.slack.webhookPath(Standard/slack/events)
signingSecretStatus: "configured_unavailable" in Konto-Snapshots
erscheint, ist das HTTP-Konto konfiguriert, aber die aktuelle Runtime konnte
das SecretRef-basierte Signing Secret nicht auflösen.Ein wiederholtes Log slack: webhook path ... already registered bedeutet, dass zwei HTTP-
Konten denselben webhookPath verwenden; geben Sie jedem Konto einen eigenen Pfad.Native Befehle/Slash-Befehle werden nicht ausgelöst
Native Befehle/Slash-Befehle werden nicht ausgelöst
Prüfen Sie, was Sie beabsichtigt haben:
- nativer Befehlsmodus (
channels.slack.commands.native: true) mit passenden in Slack registrierten Slash-Befehlen - oder einzelner Slash-Befehlsmodus (
channels.slack.slashCommand.enabled: true)
commands.native: "auto" aktiviert keine nativen Slack-Befehle; verwenden Sie true und erstellen Sie die passenden Befehle in der Slack-App. Im HTTP-Modus muss jeder Slack-Slash-Befehl die Gateway-URL enthalten. Im Socket Mode kommen Befehls-Payloads über den WebSocket an, und Slack ignoriert slash_commands[].url.Prüfen Sie außerdem commands.useAccessGroups, DM-Autorisierung, Kanal-Allowlists
und kanalbezogene users-Allowlists. Slack gibt kurzlebige Fehler für
blockierte Absender von Slash-Befehlen zurück, darunter:This channel is not allowed.You are not authorized to use this command here.
Referenz zu Vision für Anhänge
Slack kann heruntergeladene Medien an den Agent-Turn anhängen, wenn Slack-Dateidownloads erfolgreich sind und Größenbeschränkungen es zulassen. Bilddateien können durch den Pfad für Medienverständnis oder direkt an ein antwortendes Modell mit Vision-Fähigkeit übergeben werden; andere Dateien bleiben als herunterladbarer Dateikontext erhalten, statt als Bildeingabe behandelt zu werden.Unterstützte Medientypen
| Medientyp | Quelle | Aktuelles Verhalten | Hinweise |
|---|---|---|---|
| JPEG-/PNG-/GIF-/WebP-Bilder | Slack-Datei-URL | Heruntergeladen und für Vision-fähige Verarbeitung an den Turn angehängt | Begrenzung pro Datei: channels.slack.mediaMaxMb (Standard 20 MB) |
| PDF-Dateien | Slack-Datei-URL | Heruntergeladen und als Dateikontext für Tools wie download-file oder pdf bereitgestellt | Slack-Inbound konvertiert PDFs nicht automatisch in Bild-Vision-Eingaben |
| Andere Dateien | Slack-Datei-URL | Wenn möglich heruntergeladen und als Dateikontext bereitgestellt | Binärdateien werden nicht als Bildeingabe behandelt |
| Thread-Antworten | Dateien des Thread-Starters | Dateien der Root-Nachricht können als Kontext hydriert werden, wenn die Antwort keine direkten Medien hat | Starter nur mit Dateien verwenden einen Anhang-Platzhalter |
| Nachrichten mit mehreren Bildern | Mehrere Slack-Dateien | Jede Datei wird unabhängig ausgewertet | Die Slack-Verarbeitung ist auf acht Dateien pro Nachricht begrenzt |
Inbound-Pipeline
Wenn eine Slack-Nachricht mit Dateianhängen eintrifft:- OpenClaw lädt die Datei mit dem Bot-Token von der privaten Slack-URL herunter.
- Die Datei wird bei Erfolg in den Medienspeicher geschrieben.
- Heruntergeladene Medienpfade und Inhaltstypen werden dem Inbound-Kontext hinzugefügt.
- Bildfähige Modell-/Tool-Pfade können Bildanhänge aus diesem Kontext verwenden.
- Nicht-Bilddateien bleiben als Dateimetadaten oder Medienreferenzen für Tools verfügbar, die damit umgehen können.
Vererbung von Anhängen aus der Thread-Root
Wenn eine Nachricht in einem Thread eintrifft (mit einemthread_ts-Parent):
- Wenn die Antwort selbst keine direkten Medien hat und die enthaltene Root-Nachricht Dateien enthält, kann Slack die Root-Dateien als Thread-Starter-Kontext hydrieren.
- Direkte Antwortanhänge haben Vorrang vor Anhängen der Root-Nachricht.
- Eine Root-Nachricht, die nur Dateien und keinen Text enthält, wird mit einem Anhang-Platzhalter dargestellt, damit der Fallback ihre Dateien weiterhin einbeziehen kann.
Umgang mit mehreren Anhängen
Wenn eine einzelne Slack-Nachricht mehrere Dateianhänge enthält:- Jeder Anhang wird unabhängig durch die Medien-Pipeline verarbeitet.
- Heruntergeladene Medienreferenzen werden im Nachrichtenkontext zusammengeführt.
- Die Verarbeitungsreihenfolge folgt der Dateireihenfolge von Slack im Ereignis-Payload.
- Ein Fehler beim Download eines Anhangs blockiert die anderen nicht.
Größen-, Download- und Modelllimits
- Größenbegrenzung: Standardmäßig 20 MB pro Datei. Konfigurierbar über
channels.slack.mediaMaxMb. - Downloadfehler: Dateien, die Slack nicht bereitstellen kann, abgelaufene URLs, unzugängliche Dateien, zu große Dateien und Slack-Auth-/Login-HTML-Antworten werden übersprungen, statt als nicht unterstützte Formate gemeldet zu werden.
- Vision-Modell: Die Bildanalyse verwendet das aktive Antwortmodell, wenn es Vision unterstützt, oder das unter
agents.defaults.imageModelkonfigurierte Bildmodell.
Bekannte Grenzen
| Szenario | Aktuelles Verhalten | Workaround |
|---|---|---|
| Abgelaufene Slack-Datei-URL | Datei übersprungen; kein Fehler angezeigt | Laden Sie die Datei erneut in Slack hoch |
| Vision-Modell nicht konfiguriert | Bildanhänge werden als Medienreferenzen gespeichert, aber nicht als Bilder analysiert | Konfigurieren Sie agents.defaults.imageModel oder verwenden Sie ein antwortendes Modell mit Vision-Fähigkeit |
| Sehr große Bilder (> 20 MB standardmäßig) | Gemäß Größenbegrenzung übersprungen | Erhöhen Sie channels.slack.mediaMaxMb, wenn Slack dies zulässt |
| Weitergeleitete/geteilte Anhänge | Text und von Slack gehostete Bild-/Dateimedien werden nach bestem Aufwand verarbeitet | Teilen Sie sie direkt im OpenClaw-Thread erneut |
| PDF-Anhänge | Als Datei-/Medienkontext gespeichert, nicht automatisch durch Image Vision geleitet | Verwenden Sie download-file für Dateimetadaten oder das Tool pdf für PDF-Analysen |
Verwandte Dokumentation
- Pipeline für Medienverständnis
- PDF-Tool
- Epic: #51349 — Aktivierung von Vision für Slack-Anhänge
- Regressionstests: #51353
- Live-Verifizierung: #51354
Verwandt
Kopplung
Koppeln Sie einen Slack-Benutzer mit dem Gateway.
Gruppen
Verhalten von Kanälen und Gruppen-DMs.
Kanal-Routing
Leiten Sie Inbound-Nachrichten an Agenten weiter.
Sicherheit
Bedrohungsmodell und Härtung.
Konfiguration
Konfigurationslayout und Priorität.
Slash-Befehle
Befehlskatalog und Verhalten.