Slack
Status: produktionsreif für DMs + Channels über Slack-App-Integrationen. Der Standardmodus ist Socket Mode; HTTP-Request-URLs werden ebenfalls unterstützt.Kopplung
Slack-DMs verwenden standardmäßig den Kopplungsmodus.
Slash-Befehle
Natives Befehlsverhalten und Befehlskatalog.
Fehlerbehebung für Channels
Kanalübergreifende Diagnose- und Reparaturleitfäden.
Schnelleinrichtung
- Socket Mode (Standard)
- HTTP-Request-URLs
Eine neue Slack-App erstellen
Klicken Sie in den Slack-App-Einstellungen auf die Schaltfläche Create New App:
- wählen Sie from a manifest und wählen Sie einen Workspace für Ihre App aus
- fügen Sie das Beispielmanifest von unten ein und fahren Sie mit dem Erstellen fort
- generieren Sie ein App-Level-Token (
xapp-...) mitconnections:write - installieren Sie die App und kopieren Sie das angezeigte Bot-Token (
xoxb-...)
Manifest- und Scope-Checkliste
- Socket Mode (Standard)
- HTTP-Request-URLs
Zusätzliche Manifesteinstellungen
Machen Sie verschiedene Funktionen sichtbar, die die obigen Standardeinstellungen erweitern.Optionale native Slash-Befehle
Optionale native Slash-Befehle
Mehrere native Slash-Befehle können mit Nuancen anstelle eines einzelnen konfigurierten Befehls verwendet werden:
- Verwenden Sie
/agentstatusanstelle von/status, weil der Befehl/statusreserviert ist. - Es können nicht mehr als 25 Slash-Befehle gleichzeitig verfügbar gemacht werden.
features.slash_commands durch eine Teilmenge der verfügbaren Befehle:- Socket Mode (Standard)
- HTTP-Request-URLs
Optionale Scope-Berechtigungen für Verfasserschaft (Schreibvorgänge)
Optionale Scope-Berechtigungen für Verfasserschaft (Schreibvorgänge)
Fügen Sie den Bot-Scope
chat:write.customize hinzu, wenn ausgehende Nachrichten die aktive Agent-Identität (benutzerdefinierter Benutzername und Icon) statt der Standardidentität der Slack-App verwenden sollen.Wenn Sie ein Emoji-Icon verwenden, erwartet Slack die Syntax :emoji_name:.Optionale User-Token-Scopes (Lesevorgänge)
Optionale User-Token-Scopes (Lesevorgänge)
Wenn Sie
channels.slack.userToken konfigurieren, sind typische Lesescopes: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ängig sind)
Token-Modell
botToken+appTokensind für Socket Mode erforderlich.- Der HTTP-Modus erfordert
botToken+signingSecret. botToken,appToken,signingSecretunduserTokenakzeptieren Klartextzeichenfolgen oder SecretRef-Objekte.- Konfigurations-Token überschreiben den Env-Fallback.
- Der Env-Fallback
SLACK_BOT_TOKEN/SLACK_APP_TOKENgilt nur für das Standardkonto. userToken(xoxp-...) ist nur per Konfiguration verfügbar (kein Env-Fallback) und verwendet standardmäßig schreibgeschütztes Verhalten (userTokenReadOnly: true).
- Die Slack-Kontoinspektion verfolgt pro Zugangsdaten
*Source- und*Status-Felder (botToken,appToken,signingSecret,userToken). - Der Status ist
available,configured_unavailableodermissing. configured_unavailablebedeutet, dass das Konto über SecretRef oder eine andere nicht-inline Geheimnisquelle konfiguriert ist, der aktuelle Befehls-/Laufzeitpfad den tatsächlichen Wert aber nicht auflösen konnte.- Im HTTP-Modus wird
signingSecretStatuseingeschlossen; im Socket Mode ist das erforderliche PaarbotTokenStatus+appTokenStatus.
Aktionen und Gates
Slack-Aktionen werden durchchannels.slack.actions.* gesteuert.
Verfügbare Aktionsgruppen im aktuellen Slack-Tooling:
| Gruppe | Standard |
|---|---|
| messages | aktiviert |
| reactions | aktiviert |
| pins | aktiviert |
| memberInfo | aktiviert |
| emojiList | aktiviert |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info und emoji-list.
Zugriffskontrolle und Routing
- DM-Richtlinie
- Channel-Richtlinie
- Erwähnungen und Channel-Benutzer
channels.slack.dmPolicy steuert den DM-Zugriff (Legacy: channels.slack.dm.policy):pairing(Standard)allowlistopen(erfordert, dasschannels.slack.allowFrom"*"enthält; Legacy:channels.slack.dm.allowFrom)disabled
dm.enabled(standardmäßig true)channels.slack.allowFrom(bevorzugt)dm.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 übernehmen
channels.slack.allowFrom, wenn ihr eigenesallowFromnicht gesetzt ist. - Benannte Konten übernehmen nicht
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Threads, Sitzungen und Antwort-Tags
- DMs werden als
directgeroutet; Channels alschannel; MPIMs alsgroup. - Mit dem Standard
session.dmScope=mainwerden Slack-DMs in die Hauptsitzung des Agenten zusammengeführt. - Channel-Sitzungen:
agent:<agentId>:slack:channel:<channelId>. - Thread-Antworten können bei Bedarf Thread-Sitzungssuffixe (
:thread:<threadTs>) erzeugen. - Der Standardwert von
channels.slack.thread.historyScopeistthread; der Standardwert vonthread.inheritParentistfalse. channels.slack.thread.initialHistoryLimitsteuert, wie viele vorhandene Thread-Nachrichten abgerufen werden, wenn eine neue Thread-Sitzung beginnt (Standard20; setzen Sie0, um dies zu deaktivieren).channels.slack.thread.requireExplicitMention(Standardfalse): Wenntrue, werden implizite Thread-Erwähnungen unterdrückt, sodass der Bot in Threads nur auf explizite@bot-Erwähnungen antwortet, selbst wenn der Bot bereits am Thread teilgenommen hat. 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>]]
replyToMode="off" deaktiviert in Slack jegliches Antwort-Threading, einschließlich expliziter [[reply_to_*]]-Tags. Dies unterscheidet sich von Telegram, wo explizite Tags im Modus "off" weiterhin beachtet werden. Der Unterschied spiegelt die Threading-Modelle der Plattformen wider: Slack-Threads blenden Nachrichten aus dem Channel aus, während Telegram-Antworten im Haupt-Chatverlauf sichtbar bleiben.
Bestätigungsreaktionen
ackReaction sendet ein Bestätigungs-Emoji, während OpenClaw eine eingehende Nachricht verarbeitet.
Auflösungsreihenfolge:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- Emoji-Fallback der Agent-Identität (
agents.list[].identity.emoji, sonst"👀")
- Slack erwartet Shortcodes (zum Beispiel
"eyes"). - Verwenden Sie
"", um die Reaktion für das Slack-Konto oder global zu deaktivieren.
Text-Streaming
channels.slack.streaming steuert das Verhalten der Live-Vorschau:
off: Live-Vorschau-Streaming deaktivieren.partial(Standard): Vorschautext durch die neueste partielle Ausgabe ersetzen.block: Vorschauaktualisierungen in Blöcken anhängen.progress: Fortschrittsstatustext während der Generierung anzeigen und dann den endgültigen Text senden.
channels.slack.streaming.nativeTransport steuert natives Slack-Text-Streaming, wenn channels.slack.streaming.mode auf partial gesetzt ist (Standard: true).
- Für natives Text-Streaming und die Anzeige des Slack-Assistant-Thread-Status muss ein Antwort-Thread verfügbar sein. Die Thread-Auswahl folgt weiterhin
replyToMode. - Channel- und Gruppenchat-Wurzeln können weiterhin die normale Entwurfsvorschau verwenden, wenn natives Streaming nicht verfügbar ist.
- Slack-DMs der obersten Ebene bleiben standardmäßig ohne Thread, daher zeigen sie keine Vorschau im Thread-Stil an; verwenden Sie Thread-Antworten oder
typingReaction, wenn Sie dort sichtbaren Fortschritt wünschen. - Medien und Nicht-Text-Payloads fallen auf die normale Zustellung zurück.
- Wenn das Streaming mitten in einer Antwort fehlschlägt, fällt OpenClaw für die verbleibenden Payloads auf die normale Zustellung zurück.
channels.slack.streamMode(replace | status_final | append) wird automatisch nachchannels.slack.streaming.modemigriert.- boolesches
channels.slack.streamingwird automatisch nachchannels.slack.streaming.modeundchannels.slack.streaming.nativeTransportmigriert. - Legacy-
channels.slack.nativeStreamingwird automatisch nachchannels.slack.streaming.nativeTransportmigriert.
Typing-Reaction-Fallback
typingReaction fügt der eingehenden Slack-Nachricht vorübergehend eine Reaktion hinzu, während OpenClaw eine Antwort verarbeitet, und entfernt sie wieder, wenn der Lauf beendet ist. Dies ist besonders nützlich außerhalb von Thread-Antworten, die standardmäßig einen 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 automatisch versucht, nachdem die Antwort oder der Fehlerpfad abgeschlossen ist.
Medien, Chunking und Zustellung
Eingehende Anhänge
Eingehende Anhänge
Slack-Dateianhänge werden von Slack-gehosteten privaten URLs heruntergeladen (token-authentifizierter Anfragefluss) und in den Medienspeicher geschrieben, wenn der Abruf erfolgreich ist und Größenlimits dies erlauben.Die Laufzeitobergrenze für eingehende Größen beträgt standardmäßig
20MB, sofern sie nicht durch channels.slack.mediaMaxMb überschrieben wird.Ausgehender Text und Dateien
Ausgehender Text und Dateien
- Text-Chunks verwenden
channels.slack.textChunkLimit(Standard 4000) channels.slack.chunkMode="newline"aktiviert paragrafenorientiertes Aufteilen- Dateisendungen verwenden Slack-Upload-APIs und können Thread-Antworten (
thread_ts) enthalten - Das Limit für ausgehende Medien folgt bei Konfiguration
channels.slack.mediaMaxMb; andernfalls verwenden Channel-Sendungen die MIME-Typ-Standards aus der Medienpipeline
Zustellungsziele
Zustellungsziele
Bevorzugte explizite Ziele:
user:<id>für DMschannel:<id>für Channels
Befehle und Slash-Verhalten
Slash-Befehle erscheinen in Slack entweder als einzelner konfigurierter Befehl oder als mehrere native Befehle. Konfigurieren Siechannels.slack.slashCommand, um die 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 native Befehlsmodus ist für Slack deaktiviert, daher aktiviert
commands.native: "auto"keine nativen Slack-Befehle.
- bis zu 5 Optionen: Button-Blöcke
- 6–100 Optionen: statisches Auswahlmenü
- mehr als 100 Optionen: externe Auswahl mit asynchroner Optionsfilterung, wenn Interaktivitäts-Options-Handler verfügbar sind
- überschrittene Slack-Limits: codierte Optionswerte fallen auf Buttons zurück
agent:<agentId>:slack:slash:<userId> und leiten Befehlsausführungen weiterhin über CommandTargetSessionKey an die Ziel-Konversationssitzung weiter.
Interaktive Antworten
Slack kann von Agenten verfasste interaktive Antwortsteuerungen rendern, aber diese Funktion ist standardmäßig deaktiviert. Global aktivieren:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Dies ist eine Slack-spezifische UI. Andere Channels übersetzen Slack-Block-Kit-Direktiven nicht in ihre eigenen Button-Systeme.
- Die Werte interaktiver Callbacks sind von OpenClaw generierte undurchsichtige Token, keine unbearbeiteten, vom Agenten verfassten Werte.
- Wenn generierte interaktive Blöcke die Slack-Block-Kit-Limits überschreiten würden, fällt OpenClaw auf die ursprüngliche Textantwort zurück, anstatt eine ungültige Blocks-Payload zu senden.
Exec-Freigaben in Slack
Slack kann als nativer Freigabe-Client mit interaktiven Buttons und Interaktionen dienen, anstatt auf die Web-UI oder das Terminal zurückzufallen.- Exec-Freigaben verwenden
channels.slack.execApprovals.*für natives DM-/Channel-Routing. - Plugin-Freigaben können weiterhin über dieselbe native Slack-Button-Oberfläche aufgelöst werden, wenn die Anfrage bereits in Slack landet und die Freigabe-ID-Art
plugin:ist. - Die Autorisierung der Freigebenden wird weiterhin erzwungen: Nur als Freigebende identifizierte Benutzer können Anfragen über Slack genehmigen oder ablehnen.
interactivity in Ihren Slack-App-Einstellungen aktiviert ist, werden Freigabeaufforderungen direkt als Block-Kit-Buttons in der Konversation gerendert.
Wenn diese Buttons vorhanden sind, sind sie die primäre Freigabe-UX; OpenClaw
sollte einen manuellen /approve-Befehl nur einschließen, wenn das Tool-Ergebnis sagt, dass Chat-Freigaben nicht verfügbar sind oder manuelle Freigabe der einzige Weg ist.
Konfigurationspfad:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(optional; fällt wenn möglich aufcommands.ownerAllowFromzurück)channels.slack.execApprovals.target(dm|channel|both, Standard:dm)agentFilter,sessionFilter
enabled nicht gesetzt oder "auto" ist und sich mindestens ein
Freigebender auflösen lässt. Setzen Sie enabled: false, um Slack explizit als nativen Freigabe-Client zu deaktivieren.
Setzen Sie enabled: true, um native Freigaben zu erzwingen, wenn sich Freigebende auflösen lassen.
Standardverhalten ohne explizite Slack-Exec-Freigabekonfiguration:
approvals.exec-Weiterleitung ist getrennt. Verwenden Sie sie nur, wenn Exec-Freigabeaufforderungen zusätzlich
an andere Chats oder explizite Ziele außerhalb des Bandes weitergeleitet werden müssen. Gemeinsame approvals.plugin-Weiterleitung ist ebenfalls
getrennt; native Slack-Buttons können Plugin-Freigaben weiterhin auflösen, wenn diese Anfragen bereits in Slack landen.
/approve im selben Chat funktioniert ebenfalls in Slack-Channels und DMs, die bereits Befehle unterstützen. Siehe Exec approvals für das vollständige Modell zur Freigabeweiterleitung.
Ereignisse und Laufzeitverhalten
- Nachrichtenbearbeitungen/-löschungen/Thread-Broadcasts werden in Systemereignisse abgebildet.
- Hinzugefügte/entfernte Reaktionen werden in Systemereignisse abgebildet.
- Beitritt/Austritt von Mitgliedern, Erstellung/Umbenennung von Channels und Hinzufügen/Entfernen von Pins werden in Systemereignisse abgebildet.
channel_id_changedkann Channel-Konfigurationsschlüssel migrieren, wennconfigWritesaktiviert ist.- Channel-Topic-/Purpose-Metadaten werden als nicht vertrauenswürdiger Kontext behandelt und können in den Routing-Kontext eingefügt werden.
- Thread-Starter und das anfängliche Seedings des Thread-Verlaufs-Kontexts werden, sofern zutreffend, durch konfigurierte Absender-Allowlists gefiltert.
- Block-Aktionen und Modal-Interaktionen erzeugen strukturierte Systemereignisse
Slack interaction: ...mit umfangreichen Payload-Feldern:- Block-Aktionen: ausgewählte Werte, Labels, Picker-Werte und
workflow_*-Metadaten - Modal-Ereignisse
view_submissionundview_closedmit gerouteten Channel-Metadaten und Formulareingaben
- Block-Aktionen: ausgewählte Werte, Labels, Picker-Werte und
Verweise auf die Konfigurationsreferenz
Primäre Referenz:-
Konfigurationsreferenz - Slack
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ätsschalter:
dangerouslyAllowNameMatching(Break-Glass; deaktiviert lassen, sofern nicht benötigt) - Channel-Zugriff:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - Threading/Verlauf:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - Zustellung:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport - Betrieb/Funktionen:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- Modus/Auth:
Fehlerbehebung
Keine Antworten in Channels
Keine Antworten in Channels
Prüfen Sie in dieser Reihenfolge:
groupPolicy- Channel-Allowlist (
channels.slack.channels) requireMentionusers-Allowlist pro Channel
DM-Nachrichten werden ignoriert
DM-Nachrichten werden ignoriert
Prüfen Sie:
channels.slack.dm.enabledchannels.slack.dmPolicy(oder Legacychannels.slack.dm.policy)- Pairing-Freigaben / Allowlist-Einträge
Socket Mode verbindet sich nicht
Socket Mode verbindet sich nicht
Validieren Sie Bot- + App-Token und die Aktivierung von Socket Mode in den Slack-App-Einstellungen.Wenn
openclaw channels status --probe --json botTokenStatus oder
appTokenStatus: "configured_unavailable" anzeigt, ist das Slack-Konto
konfiguriert, aber die aktuelle Laufzeit konnte den durch SecretRef
gestützten Wert nicht auflösen.HTTP-Modus empfängt keine Ereignisse
HTTP-Modus empfängt keine Ereignisse
Validieren Sie:
- Signing Secret
- Webhook-Pfad
- Slack-Request-URLs (Events + Interaktivität + Slash-Befehle)
- eindeutiger
webhookPathpro HTTP-Konto
signingSecretStatus: "configured_unavailable" in Konto-Snapshots
erscheint, ist das HTTP-Konto konfiguriert, aber die aktuelle Laufzeit konnte das
durch SecretRef gestützte Signing Secret nicht auflösen.Native/Slash-Befehle werden nicht ausgelöst
Native/Slash-Befehle werden nicht ausgelöst
Prüfen Sie, ob Sie Folgendes beabsichtigt haben:
- nativen Befehlsmodus (
channels.slack.commands.native: true) mit passenden in Slack registrierten Slash-Befehlen - oder Modus mit einzelnem Slash-Befehl (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups und Channel-/Benutzer-Allowlists.