Slack mit OpenClaw verbinden: Bot, Mentions und Routing sauber einrichten
OpenClaw per Socket Mode mit Slack verbinden, DM-Pairing, Channel-Allowlisten und Threads reproduzierbar testen sowie Fehler und Token-Leaks sicher beheben.
Ein Slack-Bot, der auf eine Mention antwortet, ist schnell eingerichtet. Ob er auch an den richtigen Stellen schweigt, zeigt dieser Test nicht. Für den Einsatz in Team-Channels zählen die negativen Fälle: Ein nicht freigegebener Channel bleibt stumm, ein unbekannter DM-Absender landet im Pairing, und jede Antwort erscheint im richtigen Thread.
Dieses Tutorial baut dafür eine kontrollierte Abnahme mit Socket Mode auf. Du brauchst zwei Slack-Konten und zwei private Channels – genug, um jede Schranke einzeln auszulösen, ohne die Freigaben eines produktiven Workspace anzufassen.
Welcher Agent antwortet, in welcher Session und an welchem Slack-Ziel, entscheidet die Host-Konfiguration. Das Modell hat darauf keinen Einfluss.
1. Slack-Plugin installieren
Laut der OpenClaw-Dokumentation zum Slack setup installierst du auf dem Gateway-Host zuerst das Plugin:
openclaw plugins install @openclaw/slack
Der Befehl registriert und aktiviert das Plugin. Mehr passiert noch nicht. Solange Slack-App und Channel-Einstellungen fehlen, bleibt das Plugin untätig, und eine Transportprobe ergibt an dieser Stelle noch keinen Sinn.
2. Testszenario und Slack-App vorbereiten
Socket Mode ist laut OpenClaw-Doku der Standardtransport. Eine öffentliche Gateway-URL brauchst du dafür nicht, wohl aber ausgehende WSS-Verbindungen zu wss-primary.slack.com. Auf einem Entwicklerlaptop oder hinter einer Firewall, die nur ausgehenden Verkehr erlaubt, funktioniert das ohne Tunnel.
Lege zwei private Channels an, etwa oc-allowed-private und oc-denied-private, und notiere jeweils die Channel-ID im Format C.... Am schnellsten geht das per Rechtsklick auf den Channel und Copy link: Die ID steht am Ende der URL.
Für die App sieht die Setup-Seite den Weg über ein Manifest vor:
- Im Slack API Dashboard Create New App → From a manifest wählen, den Workspace auswählen und das empfohlene Manifest der Setup-Seite einfügen.
- Socket Mode ist im Basis-Manifest bereits aktiviert. Erzeuge einen App-Level Token mit
connections:write; er wird alsappTokenkonfiguriert. - Installiere die App im Workspace und kopiere den Bot User OAuth Token für
botToken. - Lade den Bot in beide Test-Channels ein und prüfe, dass er in der Mitgliederliste erscheint.
Der letzte Schritt wirkt banal, trennt aber zwei Schranken voneinander: Slack stellt Ereignisse nur aus Channels zu, in denen die App Mitglied ist, und erst danach entscheidet OpenClaw, ob es sie verarbeitet oder verwirft.
Welche Manifest-Teile die Tests tragen
Das Basis-Manifest auf der OpenClaw-Seite Slack manifest and scopes enthält deutlich mehr Scopes und Events, als diese Abnahme braucht. Für die Texttests kommt es auf diese Einträge an:
| Szenario | Bot-Scopes | Bot-Events | Mitgliedschaft |
|---|---|---|---|
| DM, vom Absender geöffnet | chat:write, im:history |
message.im |
keine Einladung nötig |
| Öffentlicher Channel mit Mention | chat:write, app_mentions:read, channels:history |
app_mention, message.channels |
Bot einladen |
| Privater Channel mit Mention oder Thread | chat:write, app_mentions:read, groups:history |
app_mention, message.groups |
Bot ausdrücklich einladen |
Wer das Manifest kürzt, sollte genau diese Einträge behalten. Datei-, Reaktions- und Pin-Funktionen brauchen weitere Scopes. Ändert sich ein OAuth-Scope, muss die App im Workspace neu installiert werden, sonst arbeitet die bestehende Installation mit den alten Rechten weiter.
3. Die aktive Konfiguration finden
Im Standardprofil liegt die Gateway-Konfiguration unter ~/.openclaw/openclaw.json im JSON5-Format. Benannte Profile, Container oder angepasste Dienste können allerdings eine andere Datei laden. Kläre deshalb mit openclaw status, welches Gateway tatsächlich läuft, und prüfe bei einem Dienst auch dessen Startparameter und Umgebung. Sonst pflegst du eine plausible openclaw.json, die der aktive Prozess gar nicht liest.
Mehr zum Aufbau der Datei steht in Gateway-Konfiguration: openclaw.json verständlich erklärt.
4. Zugriff begrenzen
Die Slack-Zugriffskontrolle beantwortet drei getrennte Fragen. Wer darf per DM schreiben? Welche Channels verarbeitet OpenClaw überhaupt? Und wer darf innerhalb eines freigegebenen Channels den Bot auslösen?
Laut der OpenClaw-Seite Slack access control regelt dmPolicy den DM-Zugang, und allowFrom ist die DM-Allowlist mit Slack User IDs. Mit groupPolicy: "allowlist" verarbeitet OpenClaw nur Channels, die unter channels.slack.channels eingetragen sind. Die Schlüssel dort müssen stabile Channel-IDs sein: Ein Name wie #oc-allowed-private scheitert laut Troubleshooting-Seite unter allowlist stillschweigend, weil das Routing standardmäßig über IDs läuft. Pro Channel begrenzt eine users-Liste die zugelassenen Absender, requireMention erzwingt eine Erwähnung.
Für den Test steht nur Testkonto A in den Allowlisten, und nur oc-allowed-private ist freigegeben:
{
channels: {
slack: {
botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" },
appToken: { source: "env", provider: "default", id: "SLACK_APP_TOKEN" },
dmPolicy: "pairing",
allowFrom: ["U11111111"], // Testkonto A
groupPolicy: "allowlist",
channels: {
C22222222: {
enabled: true,
requireMention: true,
users: ["U11111111"],
},
},
replyToMode: "all",
},
},
messages: {
groupChat: {
visibleReplies: "automatic",
},
},
}
Ersetze U11111111 durch die User ID von Testkonto A und C22222222 durch die ID von oc-allowed-private. Die ID des zweiten Channels fehlt absichtlich.
Bei dmPolicy: "pairing", laut Doku der Standard, schreiben Einträge aus allowFrom ohne Pairing-Code, während ein unbekannter Absender zunächst einen Code erhält. Deshalb braucht der Test zwei Konten. Eine DM vom bereits freigegebenen Konto sagt über das Pairing nichts aus.
replyToMode: "all" legt Antworten auf Channel-Nachrichten als Thread-Antworten ab; der Standard ist off. thread.historyScope steht per Default auf thread, der Kontext wird also pro Slack-Thread getrennt. messages.groupChat.visibleReplies: "automatic" ist ebenfalls der Standard und postet die finale Antwort direkt in den Raum. Im Modus "message_tool" bliebe der finale Text privat, solange das Modell nicht ausdrücklich message(action=send) aufruft – im Test sieht das aus wie ein stummer Bot.
5. Tokens setzen und Transport prüfen
Lege SLACK_BOT_TOKEN und SLACK_APP_TOKEN im geschützten Laufzeitkontext des Gateways ab, nicht in einer versionierten Datei oder einem gemeinsam lesbaren Startskript. Starte das Gateway anschließend über den Dienst deiner Installation neu und prüfe die Verbindung:
openclaw channels status --probe
Meldet die Probe botTokenStatus oder appTokenStatus als configured_unavailable, ist das Konto zwar konfiguriert, die Laufzeit konnte den SecretRef aber nicht auflösen. Prüfe dann, ob die Variable im Kontext des Dienstes ankommt. Eine Logzeile slack token mismatch ... bedeutet laut Troubleshooting-Seite, dass Bot- und App-Token zu verschiedenen Slack-Apps gehören. Fehlende Scopes, widerrufene Tokens und ungültige Authentifizierung brechen sofort ab, statt endlos neu zu versuchen.
Erst wenn diese Probe sauber durchläuft, lohnt die Suche bei Mentions und Allowlisten.
6. DM-Pairing mit zwei Konten
Testkonto A steht in allowFrom. Testkonto B darf weder dort noch in einem früheren Pairing-Eintrag stehen; openclaw pairing list slack zeigt den aktuellen Stand.
Testkonto A schickt dem Bot eine DM. Erwartung: direkte Antwort in derselben Unterhaltung, kein Code.
Testkonto B schickt eine DM und erhält einen Pairing-Code. Bestätige ihn auf dem Gateway-Host:
openclaw pairing approve slack <CODE>
Die zweite DM von Testkonto B wird nun verarbeitet, ein zusätzlicher Eintrag in allowFrom ist nicht nötig. Laut der OpenClaw-Seite zu Gruppen öffnet die Pairing-Freigabe allerdings nur DMs. In oc-allowed-private bleibt Testkonto B blockiert, solange es nicht in der users-Liste steht. Das ist ein lohnender Zusatztest.
7. Channel-Freigabe, Mentions und Threads
Alle Channel-Tests laufen über Testkonto A.
Vorab ein Detail, das sonst für Verwirrung sorgt: Wird der Bot in einen freigegebenen Channel eingeladen, postet OpenClaw laut Access-Control-Seite standardmäßig eine kurze Vorstellung, auch ohne Mention. Das ist kein Loch im Mention-Gating. Wer das im Test nicht will, setzt channels.slack.joinIntro: false.
Nicht freigegebener Channel
Erwähne den Bot in oc-denied-private. Slack stellt das Ereignis zu, OpenClaw antwortet nicht. Laut Troubleshooting-Seite protokolliert das Info-Log dann Slack inbound event rejected during preparation mit Grund und Routing-IDs. Kommt doch eine Antwort, greift die Allowlist nicht – oder der Prozess liest eine andere Konfiguration.
Freigegebener Channel ohne Mention
Sende eine normale Nachricht in oc-allowed-private. Der Bot bleibt stumm.
Neue Nachricht mit Mention
Sende eine Top-Level-Nachricht mit @DeinBot. Wegen replyToMode: "all" erscheint die Antwort als Thread darunter; ihr thread_ts entspricht dem ts deiner Nachricht. Laut der Seite Slack threads and sessions legt OpenClaw für einen solchen Mention-Root direkt die Session agent:<agentId>:slack:channel:<channelId>:thread:<rootTs> an, damit Root und spätere Thread-Antworten dieselbe Session teilen.
Folgeantworten im Thread
Antworte im Thread, diesmal ohne Mention. Der Bot reagiert trotzdem, weil implicitMentions.threadParticipation per Default aktiv ist: In einem Thread, in dem der Bot schon geantwortet hat, umgeht eine Folgeantwort das Mention-Gating. Wer dort eine neue explizite Erwähnung verlangen will, setzt den Wert auf false.
Starte anschließend einen zweiten Thread im selben Channel. Er bekommt eine eigene :thread:-Session und darf den Inhalt des ersten nicht kennen. Bei Thread-Problemen ist thread_ts verlässlicher als der optische Eindruck in der Slack-Oberfläche.
Die allgemeinen Routing-Regeln erklärt OpenClaw Channel-Routing: Mehrere Kanäle und Agenten sauber zuordnen.
8. HTTP Request URLs
Laut der Seite Slack transports bieten Socket Mode und HTTP Request URLs bei Messaging, Slash Commands, App Home und Interaktivität denselben Funktionsumfang; entscheiden sollte die Deployment-Form. HTTP braucht einen öffentlichen HTTPS-Endpunkt, das Signing Secret und mode: "http", dafür können mehrere Gateway-Replikas hinter einem Load Balancer eine App teilen. Socket Mode hält eine Session pro App und Host. Teilen sich mehrere Gateways per Socket Mode eine App, kann Slack jedes Ereignis an jede Verbindung zustellen, und alle Gateways brauchen dann gleichwertige Routing- und Zugriffsregeln.
HTTP ist hier bewusst kein zweiter Happy Path. Wer umsteigt, folgt dem vollständigen Ablauf auf der Transports-Seite, statt Socket-Mode-Felder mit halb eingerichtetem HTTP-Ingress zu mischen.
9. Fehler von unten nach oben eingrenzen
Bleibt der Bot stumm, ist die Allowlist der falsche Startpunkt.
- Transport:
openclaw channels status --probemeldet keine Token- oder Socket-Fehler. - Aktives Profil: Das laufende Gateway liest die Datei, die du bearbeitet hast.
- Slack-App: Die aktuelle App-Fassung ist im richtigen Workspace installiert.
- Mitgliedschaft: Der Bot steht in der Mitgliederliste des Channels.
Danach empfiehlt die Troubleshooting-Seite für Channels die Reihenfolge groupPolicy, Channel-Allowlist, requireMention und users-Liste, für DMs dm.enabled, dmPolicy und den Pairing-Status. openclaw logs --follow und openclaw doctor begleiten jeden Schritt. Bleibt ausschließlich ein privater Channel stumm, lohnt der Blick auf groups:history und message.groups.
10. Token-Recovery und Rückbau
Ist ein Bot- oder App-Level Token offengelegt, rotiere ihn in Slack, aktualisiere den Laufzeitkontext, starte das Gateway neu und wiederhole die Probe.
Kannst du nicht sofort neue Credentials bereitstellen, entferne den channels.slack-Block aus der aktiven Konfiguration. Ohne diesen Block startet das Gateway Slack laut Access-Control-Seite nicht automatisch aus SLACK_*-Umgebungsvariablen, solange es nicht mit --ambient-channels läuft.
Für einen vollständigen Rückbau entfernst du zusätzlich die Tokens aus dem Laufzeitkontext, prüfst den Channel-Status, nimmst den Bot aus beiden Test-Channels und deinstallierst die App bei Bedarf über die Slack-App-Verwaltung.
Weiterlesen
- OpenClaw mit Discord verbinden: Bot, Intents und Serverrechte ohne Blindflug
- OpenClaw Channel-Routing: Mehrere Kanäle und Agenten sauber zuordnen
Die Betriebsregel
Eine Bot-Antwort zeigt nur, dass ein Teil der Kette funktioniert. Freigabereif ist die Integration erst, wenn auch die negativen Tests sitzen: Der fremde Channel schweigt, das unbekannte Konto muss ins Pairing, und jeder Thread behält seine eigene Session. Der Ablauf folgt der aktuellen OpenClaw-Dokumentation und ist als Abnahmeplan gedacht, nicht als Messprotokoll einer bestimmten Installation.
Die Mindestregel für den Betrieb lautet: Zugriffspolitik nicht auf Verdacht lockern. Wer bei einem stummen Bot groupPolicy auf open stellt, findet vielleicht den Fehler, öffnet aber nebenbei jeden Channel, in dem die App Mitglied ist.
Transparenz
agentenlog.de nutzt KI-Assistenz für Recherche, Struktur und Entwurf. Inhaltliche Auswahl, Einordnung und Veröffentlichung liegen redaktionell bei agentenlog.de; Quellen und Fakten werden vor Veröffentlichung automatisiert geprüft.
Quellen
- https://docs.openclaw.ai/channels/slack.md
- https://docs.openclaw.ai/channels/slack/setup
- https://docs.openclaw.ai/channels/slack/manifest-and-scopes
- https://docs.openclaw.ai/channels/slack/access-control
- https://docs.openclaw.ai/channels/slack/transports
- https://docs.openclaw.ai/channels/slack/threads-and-sessions
- https://docs.openclaw.ai/channels/slack/troubleshooting
- https://docs.openclaw.ai/channels/groups.md
- https://docs.openclaw.ai/channels/channel-routing.md
Serie: Alle Kanäle verbinden
Das könnte dich auch interessieren
OpenClaw Channel-Routing: Mehrere Kanäle und Agenten sauber zuordnen
OpenClaw-Bindings für mehrere Kanäle und Agenten präzise konfigurieren, Sessions trennen, Antwortwege prüfen und fehlerhafte Routen sicher zurücknehmen.
OpenClaw mit Matrix verbinden: Räume, Push-Regeln und sichere Replies ohne Zustellchaos
Wenn Matrix-Räume stumm bleiben oder Quiet-Streaming nie pusht: So prüfst du Setup, Auto-Join, Allowlists und sichere Replies Schritt für Schritt.
OpenClaw auf X: Öffentliche Replies mit Allowlist absichern
So begrenzt die X-Allowlist öffentliche OpenClaw-Replies, schützt vor fremden Auslösern und hält GitHub-Rechte sowie Bot-Signatur kontrollierbar.