Slack
Socket-Modus (Standard)
Schnellstart (Einsteiger)
- Erstellen Sie eine Slack-App und aktivieren Sie den Socket-Modus.
- Erstellen Sie ein App-Token (
xapp-...) und ein Bot-Token (xoxb-...). - Setzen Sie die Tokens für OpenClaw und starten Sie das Gateway.
Einrichtung
- Erstellen Sie eine Slack-App („From scratch“) unter https://api.slack.com/apps.
- Socket Mode → aktivieren. Gehen Sie dann zu Basic Information → App-Level Tokens → Generate Token and Scopes mit dem Scope
connections:write. Kopieren Sie das App-Token (xapp-...). - OAuth & Permissions → fügen Sie Bot-Token-Scopes hinzu (verwenden Sie das Manifest unten). Klicken Sie auf Install to Workspace. Kopieren Sie das Bot User OAuth Token (
xoxb-...). - Optional: OAuth & Permissions → fügen Sie User Token Scopes hinzu (siehe die schreibgeschützte Liste unten). Installieren Sie die App erneut und kopieren Sie das User OAuth Token (
xoxp-...). - Event Subscriptions → aktivieren Sie Events und abonnieren Sie:
message.*(enthält Bearbeitungen/Löschungen/Thread-Broadcasts)app_mentionreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
- Laden Sie den Bot in die Kanäle ein, die er lesen soll.
- Slash Commands → erstellen Sie
/openclaw, wenn Siechannels.slack.slashCommandverwenden. Wenn Sie native Commands aktivieren, fügen Sie pro integrierter Funktion einen Slash Command hinzu (gleiche Namen wie/help). Nativ ist für Slack standardmäßig deaktiviert, es sei denn, Sie setzenchannels.slack.commands.native: true(globalescommands.nativeist"auto", wodurch Slack deaktiviert bleibt). - App Home → aktivieren Sie den Messages Tab, damit Benutzer dem Bot Direktnachrichten senden können.
channels.slack.accounts mit Tokens pro Account und optional name. Siehe gateway/configuration für das gemeinsame Muster.
OpenClaw-Konfiguration (Socket-Modus)
Setzen Sie Tokens über Umgebungsvariablen (empfohlen):SLACK_APP_TOKEN=xapp-...SLACK_BOT_TOKEN=xoxb-...
User-Token (optional)
OpenClaw kann ein Slack-User-Token (xoxp-...) für Leseoperationen verwenden (Verlauf,
Pins, Reaktionen, Emoji, Mitgliederinformationen). Standardmäßig bleibt dies schreibgeschützt: Lesezugriffe
bevorzugen bei Vorhandensein das User-Token, Schreibzugriffe verwenden weiterhin das Bot-Token, sofern Sie
nicht ausdrücklich optieren. Selbst mit userTokenReadOnly: false bleibt das Bot-Token
für Schreibzugriffe bevorzugt, wenn es verfügbar ist.
User-Tokens werden in der Konfigurationsdatei eingerichtet (keine Unterstützung über Umgebungsvariablen). Für
Multi-Account setzen Sie channels.slack.accounts.<id>.userToken.
Beispiel mit Bot- + App- + User-Token:
Token-Nutzung
- Leseoperationen (Verlauf, Reaktionsliste, Pin-Liste, Emoji-Liste, Mitgliederinformationen, Suche) bevorzugen das User-Token, falls konfiguriert, andernfalls das Bot-Token.
- Schreiboperationen (Nachrichten senden/bearbeiten/löschen, Reaktionen hinzufügen/entfernen, pinnen/entpinnen,
Datei-Uploads) verwenden standardmäßig das Bot-Token. Wenn
userTokenReadOnly: falsegesetzt ist und kein Bot-Token verfügbar ist, greift OpenClaw auf das User-Token zurück.
Verlaufskontext
channels.slack.historyLimit(oderchannels.slack.accounts.*.historyLimit) steuert, wie viele aktuelle Kanal-/Gruppennachrichten in den Prompt eingebettet werden.- Fällt zurück auf
messages.groupChat.historyLimit. Setzen Sie0, um dies zu deaktivieren (Standard: 50).
HTTP-Modus (Events API)
Verwenden Sie den HTTP-Webhook-Modus, wenn Ihr Gateway für Slack über HTTPS erreichbar ist (typisch für Server-Deployments). Der HTTP-Modus verwendet die Events API + Interactivity + Slash Commands mit einer gemeinsamen Request-URL.Einrichtung (HTTP-Modus)
- Erstellen Sie eine Slack-App und deaktivieren Sie den Socket-Modus (optional, wenn Sie nur HTTP verwenden).
- Basic Information → kopieren Sie das Signing Secret.
- OAuth & Permissions → installieren Sie die App und kopieren Sie das Bot User OAuth Token (
xoxb-...). - Event Subscriptions → aktivieren Sie Events und setzen Sie die Request URL auf den Webhook-Pfad Ihres Gateways (Standard:
/slack/events). - Interactivity & Shortcuts → aktivieren und dieselbe Request URL setzen.
- Slash Commands → setzen Sie dieselbe Request URL für Ihre Commands.
https://gateway-host/slack/events
OpenClaw-Konfiguration (minimal)
channels.slack.accounts.<id>.mode = "http" und stellen Sie pro Account eine eindeutige
webhookPath bereit, damit jede Slack-App auf ihre eigene URL zeigen kann.
Manifest (optional)
Verwenden Sie dieses Slack-App-Manifest, um die App schnell zu erstellen (passen Sie Name/Befehl nach Bedarf an). Fügen Sie die User-Scopes hinzu, wenn Sie ein User-Token konfigurieren möchten.slash_commands-Eintrag pro Command hinzu, den Sie bereitstellen möchten (entsprechend der /help-Liste). Überschreiben Sie dies mit channels.slack.commands.native.
Scopes (aktuell vs. optional)
Die Conversations API von Slack ist typ-spezifisch: Sie benötigen nur die Scopes für die Conversation-Typen, die Sie tatsächlich verwenden (channels, groups, im, mpim). Siehe https://docs.slack.dev/apis/web-api/using-the-conversations-api/ für den Überblick.Bot-Token-Scopes (erforderlich)
chat:write(Nachrichten senden/aktualisieren/löschen überchat.postMessage) https://docs.slack.dev/reference/methods/chat.postMessageim:write(DMs öffnen überconversations.openfür Benutzer-DMs) https://docs.slack.dev/reference/methods/conversations.openchannels:history,groups:history,im:history,mpim:historyhttps://docs.slack.dev/reference/methods/conversations.historychannels:read,groups:read,im:read,mpim:readhttps://docs.slack.dev/reference/methods/conversations.infousers:read(Benutzerabfrage) https://docs.slack.dev/reference/methods/users.inforeactions:read,reactions:write(reactions.get/reactions.add) https://docs.slack.dev/reference/methods/reactions.get https://docs.slack.dev/reference/methods/reactions.addpins:read,pins:write(pins.list/pins.add/pins.remove) https://docs.slack.dev/reference/scopes/pins.read https://docs.slack.dev/reference/scopes/pins.writeemoji:read(emoji.list) https://docs.slack.dev/reference/scopes/emoji.readfiles:write(Uploads überfiles.uploadV2) https://docs.slack.dev/messaging/working-with-files/#upload
User-Token-Scopes (optional, standardmäßig schreibgeschützt)
Fügen Sie diese unter User Token Scopes hinzu, wenn Siechannels.slack.userToken konfigurieren.
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read
Derzeit nicht benötigt (aber wahrscheinlich zukünftig)
mpim:write(nur wenn wir Gruppen-DM-Öffnen/DM-Start überconversations.openhinzufügen)groups:write(nur wenn wir Private-Channel-Management hinzufügen: erstellen/umbenennen/einladen/archivieren)chat:write.public(nur wenn wir in Kanäle posten möchten, in denen der Bot nicht ist) https://docs.slack.dev/reference/scopes/chat.write.publicusers:read.email(nur wenn wir E-Mail-Felder aususers.infobenötigen) https://docs.slack.dev/changelog/2017-04-narrowing-email-accessfiles:read(nur wenn wir beginnen, Dateimetadaten aufzulisten/zu lesen)
Konfiguration
Slack verwendet ausschließlich den Socket-Modus (kein HTTP-Webhook-Server). Stellen Sie beide Tokens bereit:SLACK_BOT_TOKENSLACK_APP_TOKEN
messages.ackReaction +
messages.ackReactionScope gesteuert. Verwenden Sie messages.removeAckAfterReply, um die
Ack-Reaktion zu entfernen, nachdem der Bot geantwortet hat.
Limits
- Ausgehender Text wird in Blöcke von
channels.slack.textChunkLimitaufgeteilt (Standard: 4000). - Optionale Zeilenumbruch-Chunking: Setzen Sie
channels.slack.chunkMode="newline", um vor der Längenaufteilung an Leerzeilen (Absatzgrenzen) zu trennen. - Medien-Uploads sind durch
channels.slack.mediaMaxMbbegrenzt (Standard: 20).
Antwort-Threading
Standardmäßig antwortet OpenClaw im Hauptkanal. Verwenden Siechannels.slack.replyToMode, um automatisches Threading zu steuern:
| Modus | Verhalten |
|---|---|
off | Standard. Antwort im Hauptkanal. Thread nur, wenn die auslösende Nachricht bereits in einem Thread war. |
first | Erste Antwort geht in den Thread (unter der auslösenden Nachricht), nachfolgende Antworten gehen in den Hauptkanal. Nützlich, um Kontext sichtbar zu halten und Thread-Clutter zu vermeiden. |
all | Alle Antworten gehen in den Thread. Hält Unterhaltungen zusammen, kann aber die Sichtbarkeit reduzieren. |
slack sendMessage).
Threading pro Chat-Typ
Sie können unterschiedliches Threading-Verhalten pro Chat-Typ konfigurieren, indem Siechannels.slack.replyToModeByChatType setzen:
direct: 1:1-DMs (Slackim)group: Gruppen-DMs / MPIMs (Slackmpim)channel: Standardkanäle (öffentlich/privat)
replyToModeByChatType.<chatType>replyToMode- Anbieter-Standard (
off)
channels.slack.dm.replyToMode wird weiterhin als Fallback für direct akzeptiert, wenn kein Chat-Typ-Override gesetzt ist.
Beispiele:
Nur DMs threaden:
Manuelle Threading-Tags
Für eine feingranulare Steuerung verwenden Sie diese Tags in Agenten-Antworten:[[reply_to_current]]— Antwort auf die auslösende Nachricht (Thread starten/fortsetzen).[[reply_to:<id>]]— Antwort auf eine bestimmte Nachrichten-ID.
Sitzungen + Routing
- DMs teilen sich die
main-Sitzung (wie WhatsApp/Telegram). - Kanäle werden auf
agent:<agentId>:slack:channel:<channelId>-Sitzungen abgebildet. - Slash Commands verwenden
agent:<agentId>:slack:slash:<userId>-Sitzungen (Präfix konfigurierbar überchannels.slack.slashCommand.sessionPrefix). - Wenn Slack kein
channel_typebereitstellt, leitet OpenClaw es aus dem Kanal-ID-Präfix ab (D,C,G) und verwendet standardmäßigchannel, um Sitzungsschlüssel stabil zu halten. - Die Registrierung nativer Commands verwendet
commands.native(globaler Standard"auto"→ Slack aus) und kann pro Workspace mitchannels.slack.commands.nativeüberschrieben werden. Text-Commands erfordern eigenständige/...-Nachrichten und können mitcommands.text: falsedeaktiviert werden. Slack-Slash-Commands werden in der Slack-App verwaltet und nicht automatisch entfernt. Verwenden Siecommands.useAccessGroups: false, um Zugriffsguppenprüfungen für Commands zu umgehen. - Vollständige Command-Liste + Konfiguration: Slash commands
DM-Sicherheit (Pairing)
- Standard:
channels.slack.dm.policy="pairing"— unbekannte DM-Absender erhalten einen Pairing-Code (läuft nach 1 Stunde ab). - Freigabe über:
openclaw pairing approve slack <code>. - Um alle zuzulassen: Setzen Sie
channels.slack.dm.policy="open"undchannels.slack.dm.allowFrom=["*"]. channels.slack.dm.allowFromakzeptiert Benutzer-IDs, @Handles oder E-Mails (werden beim Start aufgelöst, wenn Tokens dies erlauben). Der Assistent akzeptiert Benutzernamen und löst sie während der Einrichtung in IDs auf, wenn Tokens dies erlauben.
Gruppenrichtlinie
channels.slack.groupPolicysteuert die Kanalbehandlung (open|disabled|allowlist).allowlisterfordert, dass Kanäle inchannels.slack.channelsaufgeführt sind.- Wenn Sie nur
SLACK_BOT_TOKEN/SLACK_APP_TOKENsetzen und niemals einenchannels.slack-Abschnitt erstellen, setzt die LaufzeitgroupPolicystandardmäßig aufopen. Fügen Siechannels.slack.groupPolicy,channels.defaults.groupPolicyoder eine Kanal-Allowlist hinzu, um es einzuschränken. - Der Konfigurationsassistent akzeptiert
#channel-Namen und löst sie nach Möglichkeit in IDs auf (öffentlich + privat); bei mehreren Treffern wird der aktive Kanal bevorzugt. - Beim Start löst OpenClaw Kanal-/Benutzernamen in Allowlists zu IDs auf (wenn Tokens dies erlauben) und protokolliert die Zuordnung; nicht aufgelöste Einträge bleiben unverändert.
- Um keine Kanäle zuzulassen, setzen Sie
channels.slack.groupPolicy: "disabled"(oder behalten Sie eine leere Allowlist).
channels.slack.channels.<id> oder channels.slack.channels.<name>):
allow: Kanal erlauben/verbieten, wenngroupPolicy="allowlist".requireMention: Erwähnungs-Gating für den Kanal.tools: optionale kanalweise Tool-Policy-Overrides (allow/deny/alsoAllow).toolsBySender: optionale absenderbezogene Tool-Policy-Overrides innerhalb des Kanals (Schlüssel sind Absender-IDs/@Handles/E-Mails; Platzhalter"*"unterstützt).allowBots: vom Bot verfasste Nachrichten in diesem Kanal zulassen (Standard: false).users: optionale kanalweise Benutzer-Allowlist.skills: Skill-Filter (weglassen = alle Skills, leer = keine).systemPrompt: zusätzlicher System-Prompt für den Kanal (kombiniert mit Thema/Zweck).enabled: setzen Siefalse, um den Kanal zu deaktivieren.
Lieferziele
Verwenden Sie diese für Cron-/CLI-Sendungen:user:<id>für DMschannel:<id>für Kanäle
Tool-Aktionen
Slack-Tool-Aktionen können mitchannels.slack.actions.* eingeschränkt werden:
| Aktionsgruppe | Standard | Hinweise |
|---|---|---|
| reactions | aktiviert | Reagieren + Reaktionen auflisten |
| messages | aktiviert | Lesen/Senden/Bearbeiten/Löschen |
| pins | aktiviert | Anpinnen/Entpinnen/Auflisten |
| memberInfo | aktiviert | Mitgliederinformationen |
| emojiList | aktiviert | Benutzerdefinierte Emoji-Liste |
Sicherheitshinweise
- Schreibzugriffe verwenden standardmäßig das Bot-Token, damit zustandsändernde Aktionen auf die Bot-Berechtigungen und -Identität der App beschränkt bleiben.
- Das Setzen von
userTokenReadOnly: falseerlaubt die Verwendung des User-Tokens für Schreibzugriffe, wenn kein Bot-Token verfügbar ist; Aktionen laufen dann mit den Rechten des installierenden Benutzers. Behandeln Sie das User-Token als hochprivilegiert und halten Sie Aktions-Gates und Allowlists eng. - Wenn Sie User-Token-Schreibzugriffe aktivieren, stellen Sie sicher, dass das User-Token die erwarteten
Schreib-Scopes enthält (
chat:write,reactions:write,pins:write,files:write), andernfalls schlagen diese Operationen fehl.
Fehlerbehebung
Führen Sie zuerst diese Abfolge aus:- Verbunden, aber keine Kanalantworten: Kanal durch
groupPolicyblockiert oder nicht in derchannels.slack.channels-Allowlist. - DMs werden ignoriert: Absender nicht freigegeben bei
channels.slack.dm.policy="pairing". - API-Fehler (
missing_scope,not_in_channel, Auth-Fehler): Bot-/App-Tokens oder Slack-Scopes sind unvollständig.
Hinweise
- Erwähnungs-Gating wird über
channels.slack.channelsgesteuert (setzen SierequireMentionauftrue);agents.list[].groupChat.mentionPatterns(odermessages.groupChat.mentionPatterns) zählen ebenfalls als Erwähnungen. - Multi-Agent-Override: Setzen Sie agentenspezifische Muster unter
agents.list[].groupChat.mentionPatterns. - Reaktionsbenachrichtigungen folgen
channels.slack.reactionNotifications(verwenden SiereactionAllowlistmit Modusallowlist). - Vom Bot verfasste Nachrichten werden standardmäßig ignoriert; aktivieren Sie dies über
channels.slack.allowBotsoderchannels.slack.channels.<id>.allowBots. - Warnung: Wenn Sie Antworten an andere Bots zulassen (
channels.slack.allowBots=trueoderchannels.slack.channels.<id>.allowBots=true), verhindern Sie Bot-zu-Bot-Antwortschleifen mitrequireMention,channels.slack.channels.<id>.users-Allowlists und/oder klaren Guardrails inAGENTS.mdundSOUL.md. - Für das Slack-Werkzeug sind die Semantiken zum Entfernen von Reaktionen unter /tools/reactions beschrieben.
- Anhänge werden bei Erlaubnis und unterhalb des Größenlimits in den Medienspeicher heruntergeladen.