Slack
Status: produktionsreif für DMs + Kanäle über Slack-App-Integrationen. Der Standardmodus ist Socket Mode; der HTTP-Events-API-Modus wird ebenfalls unterstützt.Pairing
Slack-DMs verwenden standardmäßig den Pairing-Modus.
Slash commands
Natives Befehlsverhalten und Befehlskatalog.
Channel troubleshooting
Kanalübergreifende Diagnose- und Reparaturleitfäden.
Schnelleinrichtung
- Socket Mode (Standard)
- HTTP Events API mode
Slack-App und Tokens erstellen
In den Slack-App-Einstellungen:
- Socket Mode aktivieren
- App Token (
xapp-...) mitconnections:writeerstellen - App installieren und Bot Token (
xoxb-...) kopieren
App-Ereignisse abonnieren
Bot-Ereignisse abonnieren für:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Checkliste für Manifest und Scopes
Beispiel für ein Slack-App-Manifest
Beispiel für ein Slack-App-Manifest
Optionale User-Token-Scopes (Leseoperationen)
Optionale User-Token-Scopes (Leseoperationen)
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ängig sind)
Token-Modell
botToken+appTokensind für Socket Mode erforderlich.- HTTP-Modus erfordert
botToken+signingSecret. botToken,appToken,signingSecretunduserTokenakzeptieren Klartext- Zeichenfolgen oder SecretRef-Objekte.- Konfigurations-Tokens ü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).- Optional: Fügen Sie
chat:write.customizehinzu, wenn ausgehende Nachrichten die aktive Agentenidentität verwenden sollen (benutzerdefinierterusernameund Symbol).icon_emojiverwendet die Syntax:emoji_name:.
- Die Inspektion von Slack-Konten verfolgt pro Anmeldedaten 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 Geheimnisquelle konfiguriert ist, der aktuelle Befehls-/Laufzeitpfad den tatsächlichen Wert aber nicht auflösen konnte.- Im HTTP-Modus wird
signingSecretStatuseingeschlossen; in Socket Mode ist das erforderliche PaarbotTokenStatus+appTokenStatus.
Aktionen und Gates
Slack-Aktionen werden überchannels.slack.actions.* gesteuert.
Verfügbare Aktionsgruppen in den aktuellen Slack-Tools:
| 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
- Kanalrichtlinie
- Mentions und Kanalbenutzer
channels.slack.dmPolicy steuert den DM-Zugriff (veraltet: channels.slack.dm.policy):pairing(Standard)allowlistopen(erfordert, dasschannels.slack.allowFrom"*"enthält; veraltet:channels.slack.dm.allowFrom)disabled
dm.enabled(standardmäßig true)channels.slack.allowFrom(bevorzugt)dm.allowFrom(veraltet)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>.Threading, Sitzungen und Antwort-Tags
- DMs werden als
directgeroutet; Kanäle alschannel; MPIMs alsgroup. - Mit dem Standard
session.dmScope=mainwerden Slack-DMs auf die Agenten-Hauptsitzung reduziert. - Kanalsitzungen:
agent:<agentId>:slack:channel:<channelId>. - Thread-Antworten können Suffixe für Thread-Sitzungen (
:thread:<threadTs>) erzeugen, wenn anwendbar. - Der Standardwert von
channels.slack.thread.historyScopeistthread;thread.inheritParentist standardmäßigfalse. channels.slack.thread.initialHistoryLimitsteuert, wie viele vorhandene Thread-Nachrichten abgerufen werden, wenn eine neue Thread-Sitzung startet (Standard20; auf0setzen, um zu deaktivieren).
channels.slack.replyToMode:off|first|all(Standardoff)channels.slack.replyToModeByChatType: prodirect|group|channel- veralteter Fallback für Direktchats:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" deaktiviert jegliches Antwort-Threading in Slack, einschließlich expliziter Tags [[reply_to_*]]. Dies unterscheidet sich von Telegram, wo explizite Tags im Modus "off" weiterhin berücksichtigt werden. Der Unterschied spiegelt die Threading-Modelle der Plattformen wider: Slack-Threads verbergen Nachrichten vor dem Kanal, während Telegram-Antworten im Haupt-Chatfluss 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- Fallback auf Agentenidentitäts-Emoji (
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): Vorschaunachricht durch die neueste Teilausgabe ersetzen.block: Vorschauaktualisierungen in Blöcken anhängen.progress: Fortschrittsstatustext während der Generierung anzeigen und dann den endgültigen Text senden.
channels.slack.nativeStreaming steuert natives Slack-Text-Streaming, wenn streaming auf partial steht (Standard: true).
- Ein Antwort-Thread muss verfügbar sein, damit natives Text-Streaming angezeigt wird. Die Thread-Auswahl folgt weiterhin
replyToMode. Ohne Thread wird die normale Entwurfsvorschau verwendet. - Medien und Nicht-Text-Payloads fallen auf normale Zustellung zurück.
- 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) wird automatisch nachchannels.slack.streamingmigriert.- boolean
channels.slack.streamingwird automatisch nachchannels.slack.nativeStreamingmigriert.
Fallback für Schreibreaktion
typingReaction fügt der eingehenden Slack-Nachricht vorübergehend eine Reaktion hinzu, während OpenClaw eine Antwort verarbeitet, und entfernt sie, wenn die Ausführung abgeschlossen ist. Das 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 nach Abschluss des Antwort- oder Fehlerpfads automatisch versucht.
Medien, Chunking und Zustellung
Eingehende Anhänge
Eingehende Anhänge
Slack-Dateianhänge werden von privat gehosteten Slack-URLs heruntergeladen (tokenauthentifizierter Anfragefluss) und beim Erfolg des Abrufs und innerhalb der Größenbeschränkungen in den Medienspeicher geschrieben.Die Laufzeitgrenze für eingehende Größen beträgt standardmäßig
20MB, sofern nicht durch channels.slack.mediaMaxMb überschrieben.Ausgehender Text und Dateien
Ausgehender Text und Dateien
- Text-Chunks verwenden
channels.slack.textChunkLimit(Standard 4000) channels.slack.chunkMode="newline"aktiviert eine absatzorientierte Aufteilung- Dateisendungen verwenden Slack-Upload-APIs und können Thread-Antworten (
thread_ts) enthalten - die Grenze für ausgehende Medien folgt
channels.slack.mediaMaxMb, wenn konfiguriert; andernfalls verwenden Kanalsendungen MIME-Art-Standards aus der Medienpipeline
Zustellziele
Zustellziele
Bevorzugte explizite Ziele:
user:<id>für DMschannel:<id>für Kanäle
Befehle und Slash-Verhalten
- Der native Befehls-Automatikmodus ist für Slack deaktiviert (
commands.native: "auto"aktiviert keine nativen Slack-Befehle). - Aktivieren Sie native Slack-Befehlshandler mit
channels.slack.commands.native: true(oder globalcommands.native: true). - Wenn native Befehle aktiviert sind, registrieren Sie passende Slash-Befehle in Slack (
/<command>-Namen), mit einer Ausnahme:- registrieren Sie
/agentstatusfür den Statusbefehl (Slack reserviert/status)
- registrieren Sie
- Wenn native Befehle nicht aktiviert sind, können Sie einen einzelnen konfigurierten Slash-Befehl über
channels.slack.slashCommandausführen. - Native Argumentmenüs passen ihre Darstellungsstrategie jetzt an:
- bis zu 5 Optionen: Button-Blöcke
- 6-100 Optionen: statisches Select-Menü
- mehr als 100 Optionen: externes Select mit asynchroner Optionsfilterung, wenn Interactivity-Option-Handler verfügbar sind
- wenn kodierte Optionswerte die Slack-Grenzen überschreiten, fällt der Ablauf auf Buttons zurück
- Für lange Options-Payloads verwenden Slash-command-Argumentmenüs einen Bestätigungsdialog, bevor ein ausgewählter Wert ausgeführt wird.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
Interaktive Antworten
Slack kann vom Agenten verfasste interaktive Antwort-Steuerelemente 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 Slack-spezifische UI. Andere Kanäle übersetzen Slack-Block-Kit-Direktiven nicht in ihre eigenen Button-Systeme.
- Die interaktiven Callback-Werte sind von OpenClaw generierte opake Tokens, keine vom Agenten roh verfassten Werte.
- Wenn generierte interaktive Blöcke die Grenzen von Slack Block Kit überschreiten würden, fällt OpenClaw auf die ursprüngliche Textantwort zurück, statt eine ungültige Blocks-Payload zu senden.
Exec-Freigaben in Slack
Slack kann als nativer Freigabe-Client mit interaktiven Buttons und Interaktionen dienen, statt auf die Web-UI oder das Terminal zurückzufallen.- Exec-Freigaben verwenden
channels.slack.execApprovals.*für natives DM-/Kanalrouting. - Plugin-Freigaben können weiterhin über dieselbe Slack-native Button-Oberfläche aufgelöst werden, wenn die Anfrage bereits in Slack landet und die Art der Freigabe-ID
plugin:ist. - Die Autorisierung der Genehmigenden wird weiterhin erzwungen: Nur Benutzer, die als Genehmigende identifiziert sind, 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 Unterhaltung gerendert.
Wenn diese Buttons vorhanden sind, sind sie die primäre Freigabe-UX; OpenClaw
sollte einen manuellen /approve-Befehl nur einbeziehen, wenn das Tool-Ergebnis sagt, dass Chat-
Freigaben nicht verfügbar sind oder eine manuelle Freigabe 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
Genehmigender aufgelöst wird. Setzen Sie enabled: false, um Slack ausdrücklich als nativen Freigabe-Client zu deaktivieren.
Setzen Sie enabled: true, um native Freigaben zu erzwingen, wenn Genehmigende aufgelöst werden.
Standardverhalten ohne explizite Slack-Exec-Freigabekonfiguration:
approvals.exec 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 Weiterleitung von approvals.plugin ist ebenfalls
getrennt; Slack-native Buttons können Plugin-Freigaben weiterhin auflösen, wenn diese Anfragen bereits in Slack landen.
/approve im selben Chat funktioniert ebenfalls in Slack-Kanälen und DMs, die bereits Befehle unterstützen. Siehe Exec approvals für das vollständige Modell der Freigabeweiterleitung.
Ereignisse und betriebliches Verhalten
- Bearbeitungen/Löschungen von Nachrichten sowie Thread-Broadcasts werden in Systemereignisse umgewandelt.
- Ereignisse zum Hinzufügen/Entfernen von Reaktionen werden in Systemereignisse umgewandelt.
- Ereignisse zum Beitreten/Verlassen von Mitgliedern, Erstellen/Umbenennen von Kanälen und Hinzufügen/Entfernen von Pins werden in Systemereignisse umgewandelt.
channel_id_changedkann Kanalkonfigurationsschlüssel migrieren, wennconfigWritesaktiviert ist.- Metadaten zu Kanalthema/-zweck werden als nicht vertrauenswürdiger Kontext behandelt und können in den Routing-Kontext eingespeist werden.
- Kontext-Seeding für Thread-Starter und initialen Thread-Verlauf wird, wenn anwendbar, anhand konfigurierter Sender-Allowlists gefiltert.
- Block-Aktionen und Modal-Interaktionen erzeugen strukturierte Systemereignisse
Slack interaction: ...mit umfangreichen Payload-Feldern:- Block-Aktionen: ausgewählte Werte, Beschriftungen, Picker-Werte und
workflow_*-Metadaten - Modal-Ereignisse
view_submissionundview_closedmit gerouteten Kanalmetadaten und Formulareingaben
- Block-Aktionen: ausgewählte Werte, Beschriftungen, Picker-Werte und
Verweise auf die Konfigurationsreferenz
Primäre Referenz:-
Configuration reference - Slack
Wichtige Slack-Felder:
- Modus/Auth:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - DM-Zugriff:
dm.enabled,dmPolicy,allowFrom(veraltet:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - Kompatibilitätsschalter:
dangerouslyAllowNameMatching(Notfalloption; deaktiviert lassen, wenn nicht nötig) - Kanalzugriff:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - Threading/Verlauf:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - Zustellung:
textChunkLimit,chunkMode,mediaMaxMb,streaming,nativeStreaming - Betrieb/Funktionen:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- Modus/Auth:
Fehlerbehebung
Keine Antworten in Kanälen
Keine Antworten in Kanälen
Prüfen Sie in dieser Reihenfolge:
groupPolicy- Kanal-Allowlist (
channels.slack.channels) requireMentionusers-Allowlist pro Kanal
DM-Nachrichten werden ignoriert
DM-Nachrichten werden ignoriert
Prüfen Sie:
channels.slack.dm.enabledchannels.slack.dmPolicy(oder veraltetchannels.slack.dm.policy)- Pairing-Freigaben / Allowlist-Einträge
Socket Mode verbindet sich nicht
Socket Mode verbindet sich nicht
Validieren Sie Bot- + App-Tokens sowie 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 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 + Interactivity + Slash Commands)
- eindeutigen
webhookPathpro HTTP-Konto
signingSecretStatus: "configured_unavailable" in Konto-
Snapshots erscheint, ist das HTTP-Konto konfiguriert, aber die aktuelle Laufzeit konnte das 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, was Sie beabsichtigt haben:
- nativen Befehlsmodus (
channels.slack.commands.native: true) mit passenden in Slack registrierten Slash-Befehlen - oder Einzel-Slash-Command-Modus (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups sowie Kanal-/Benutzer-Allowlists.