Skip to main content

Slack

Socketmodus (standaard)

Snelle installatie (beginner)

  1. Maak een Slack-app en schakel Socket Mode in.
  2. Maak een App Token (xapp-...) en Bot Token (xoxb-...).
  3. Stel tokens in voor OpenClaw en start de Gateway.
Minimale config:

Installatie

  1. Maak een Slack-app (From scratch) op https://api.slack.com/apps.
  2. Socket Mode → schakel in. Ga daarna naar Basic InformationApp-Level TokensGenerate Token and Scopes met scope connections:write. Kopieer de App Token (xapp-...).
  3. OAuth & Permissions → voeg bot-token-scopes toe (gebruik het manifest hieronder). Klik Install to Workspace. Kopieer de Bot User OAuth Token (xoxb-...).
  4. Optioneel: OAuth & Permissions → voeg User Token Scopes toe (zie de alleen-lezenlijst hieronder). Installeer de app opnieuw en kopieer de User OAuth Token (xoxp-...).
  5. Event Subscriptions → schakel events in en abonneer je op:
    • message.* (inclusief bewerkingen/verwijderingen/thread-uitzendingen)
    • app_mention
    • reaction_added, reaction_removed
    • member_joined_channel, member_left_channel
    • channel_rename
    • pin_added, pin_removed
  6. Nodig de bot uit voor kanalen die hij moet lezen.
  7. Slash Commands → maak /openclaw als je channels.slack.slashCommand gebruikt. Als je native commands inschakelt, voeg één slash command per ingebouwde opdracht toe (dezelfde namen als /help). Native staat standaard uit voor Slack tenzij je channels.slack.commands.native: true instelt (globaal commands.native is "auto" waardoor Slack uit blijft).
  8. App Home → schakel de Messages Tab in zodat gebruikers de bot kunnen DM’en.
Gebruik het manifest hieronder zodat scopes en events gesynchroniseerd blijven. Ondersteuning voor meerdere accounts: gebruik channels.slack.accounts met tokens per account en optioneel name. Zie gateway/configuration voor het gedeelde patroon.

OpenClaw-config (Socketmodus)

Stel tokens in via omgevingsvariabelen (aanbevolen):
  • SLACK_APP_TOKEN=xapp-...
  • SLACK_BOT_TOKEN=xoxb-...
Of via config:

User token (optioneel)

OpenClaw kan een Slack user token (xoxp-...) gebruiken voor leesbewerkingen (geschiedenis, pins, reacties, emoji, ledeninfo). Standaard blijft dit alleen-lezen: lezen gebruikt bij aanwezigheid bij voorkeur het user token, en schrijven gebruikt nog steeds het bot-token tenzij je expliciet kiest. Zelfs met userTokenReadOnly: false blijft het bot-token de voorkeur houden voor schrijven wanneer het beschikbaar is. User tokens worden geconfigureerd in het configbestand (geen ondersteuning voor env vars). Voor meerdere accounts stel je channels.slack.accounts.<id>.userToken in. Voorbeeld met bot- + app- + user-tokens:
Voorbeeld met userTokenReadOnly expliciet ingesteld (user-token-schrijven toestaan):

Tokengebruik

  • Leesbewerkingen (geschiedenis, reactieslijst, pinslijst, emojilijst, ledeninfo, zoeken) geven de voorkeur aan het user token wanneer geconfigureerd, anders het bot-token.
  • Schrijfbewerkingen (berichten verzenden/bewerken/verwijderen, reacties toevoegen/verwijderen, pinnen/ontpinnen, bestandsuploads) gebruiken standaard het bot-token. Als userTokenReadOnly: false en er geen bot-token beschikbaar is, valt OpenClaw terug op het user token.

Geschiedeniscontext

  • channels.slack.historyLimit (of channels.slack.accounts.*.historyLimit) bepaalt hoeveel recente kanaal-/groepberichten in de prompt worden opgenomen.
  • Valt terug op messages.groupChat.historyLimit. Stel 0 in om uit te schakelen (standaard 50).

HTTP-modus (Events API)

Gebruik HTTP-webhookmodus wanneer je Gateway via HTTPS door Slack bereikbaar is (typisch voor serverdeployments). HTTP-modus gebruikt de Events API + Interactivity + Slash Commands met één gedeelde request-URL.

Installatie (HTTP-modus)

  1. Maak een Slack-app en schakel Socket Mode uit (optioneel als je alleen HTTP gebruikt).
  2. Basic Information → kopieer de Signing Secret.
  3. OAuth & Permissions → installeer de app en kopieer de Bot User OAuth Token (xoxb-...).
  4. Event Subscriptions → schakel events in en stel de Request URL in op het webhookpad van je Gateway (standaard /slack/events).
  5. Interactivity & Shortcuts → schakel in en stel dezelfde Request URL in.
  6. Slash Commands → stel dezelfde Request URL in voor je commando(’s).
Voorbeeld request-URL: https://gateway-host/slack/events

OpenClaw-config (minimaal)

HTTP-modus met meerdere accounts: stel channels.slack.accounts.<id>.mode = "http" in en geef een unieke webhookPath per account zodat elke Slack-app naar zijn eigen URL kan wijzen.

Manifest (optioneel)

Gebruik dit Slack-app-manifest om de app snel te maken (pas naam/commando aan indien gewenst). Neem de user-scopes op als je van plan bent een user token te configureren.
Als je native commands inschakelt, voeg één slash_commands-entry toe per commando dat je wilt blootstellen (overeenkomend met de lijst /help). Overschrijf met channels.slack.commands.native.

Scopes (huidig vs optioneel)

Slack’s Conversations API is type-gescopeerd: je hebt alleen de scopes nodig voor de gesprekstypen die je daadwerkelijk gebruikt (channels, groups, im, mpim). Zie https://docs.slack.dev/apis/web-api/using-the-conversations-api/ voor het overzicht.

Bot-token-scopes (vereist)

User-token-scopes (optioneel, standaard alleen-lezen)

Voeg deze toe onder User Token Scopes als je channels.slack.userToken configureert.
  • channels:history, groups:history, im:history, mpim:history
  • channels:read, groups:read, im:read, mpim:read
  • users:read
  • reactions:read
  • pins:read
  • emoji:read
  • search:read

Vandaag niet nodig (maar waarschijnlijk in de toekomst)

Config

Slack gebruikt alleen Socket Mode (geen HTTP-webhookserver). Geef beide tokens op:
Tokens kunnen ook via omgevingsvariabelen worden aangeleverd:
  • SLACK_BOT_TOKEN
  • SLACK_APP_TOKEN
Ack-reacties worden globaal aangestuurd via messages.ackReaction + messages.ackReactionScope. Gebruik messages.removeAckAfterReply om de ack-reactie te verwijderen nadat de bot heeft geantwoord.

Beperkingen

  • Uitgaande tekst wordt opgeknipt tot channels.slack.textChunkLimit (standaard 4000).
  • Optioneel splitsen op nieuwe regels: stel channels.slack.chunkMode="newline" in om op lege regels (paragraafgrenzen) te splitsen vóór lengte-opknippen.
  • Media-uploads zijn beperkt door channels.slack.mediaMaxMb (standaard 20).

Antwoord-threading

Standaard antwoordt OpenClaw in het hoofdkanaal. Gebruik channels.slack.replyToMode om automatische threading te regelen: De modus geldt voor zowel auto-replies als agent tool calls (slack sendMessage).

Threading per chat-type

Je kunt verschillend threading-gedrag per chat-type configureren door channels.slack.replyToModeByChatType in te stellen:
Ondersteunde chat-typen:
  • direct: 1:1 DM’s (Slack im)
  • group: groeps-DM’s / MPIM’s (Slack mpim)
  • channel: standaardkanalen (openbaar/privé)
Voorrang:
  1. replyToModeByChatType.<chatType>
  2. replyToMode
  3. Provider-standaard (off)
Legacy channels.slack.dm.replyToMode wordt nog geaccepteerd als fallback voor direct wanneer geen chat-type-override is ingesteld. Voorbeelden: Alleen DM’s in threads:
Groeps-DM’s in threads, kanalen in de root houden:
Kanalen in threads maken, DM’s in de root houden:

Handmatige threading-tags

Voor fijnmazige controle gebruik je deze tags in agent-antwoorden:
  • [[reply_to_current]] — antwoord op het triggerende bericht (thread starten/voortzetten).
  • [[reply_to:<id>]] — antwoord op een specifiek bericht-id.

Sessies + routering

  • DM’s delen de main-sessie (zoals WhatsApp/Telegram).
  • Kanalen mappen naar agent:<agentId>:slack:channel:<channelId>-sessies.
  • Slash commands gebruiken agent:<agentId>:slack:slash:<userId>-sessies (prefix configureerbaar via channels.slack.slashCommand.sessionPrefix).
  • Als Slack channel_type niet levert, leidt OpenClaw dit af uit de kanaal-ID-prefix (D, C, G) en valt terug op channel om sessiesleutels stabiel te houden.
  • Registratie van native commands gebruikt commands.native (globale standaard "auto" → Slack uit) en kan per werkruimte worden overschreven met channels.slack.commands.native. Tekstcommando’s vereisen losse /...-berichten en kunnen worden uitgeschakeld met commands.text: false. Slack slash commands worden in de Slack-app beheerd en niet automatisch verwijderd. Gebruik commands.useAccessGroups: false om access-group-controles voor commando’s te omzeilen.
  • Volledige commandolijst + config: Slash commands

DM-beveiliging (koppelen)

  • Standaard: channels.slack.dm.policy="pairing" — onbekende DM-afzenders krijgen een koppelcode (verloopt na 1 uur).
  • Goedkeuren via: openclaw pairing approve slack <code>.
  • Om iedereen toe te staan: stel channels.slack.dm.policy="open" en channels.slack.dm.allowFrom=["*"] in.
  • channels.slack.dm.allowFrom accepteert gebruikers-ID’s, @handles of e-mails (worden bij opstarten opgelost wanneer tokens dit toestaan). De wizard accepteert gebruikersnamen en zet ze tijdens de installatie om naar id’s wanneer tokens dit toestaan.

Groepsbeleid

  • channels.slack.groupPolicy regelt kanaalafhandeling (open|disabled|allowlist).
  • allowlist vereist dat kanalen in channels.slack.channels worden vermeld.
  • Als je alleen SLACK_BOT_TOKEN/SLACK_APP_TOKEN instelt en nooit een channels.slack-sectie maakt, stelt de runtime standaard groupPolicy in op open. Voeg channels.slack.groupPolicy, channels.defaults.groupPolicy of een kanaal-allowlist toe om het te vergrendelen.
  • De configuratiewizard accepteert #channel-namen en zet ze waar mogelijk om naar ID’s (openbaar + privé); bij meerdere overeenkomsten heeft het actieve kanaal de voorkeur.
  • Bij het opstarten zet OpenClaw kanaal-/gebruikersnamen in allowlists om naar ID’s (wanneer tokens dit toestaan) en logt de mapping; niet-opgeloste entries blijven zoals ingevoerd.
  • Om geen kanalen toe te staan, stel channels.slack.groupPolicy: "disabled" in (of houd een lege allowlist aan).
Kanaalopties (channels.slack.channels.<id> of channels.slack.channels.<name>):
  • allow: sta het kanaal toe/weiger het wanneer groupPolicy="allowlist".
  • requireMention: mention-gating voor het kanaal.
  • tools: optionele per-kanaal tool-policy-overschrijvingen (allow/deny/alsoAllow).
  • toolsBySender: optionele per-afzender tool-policy-overschrijvingen binnen het kanaal (sleutels zijn afzender-id’s/@handles/e-mails; "*"-wildcard ondersteund).
  • allowBots: sta door de bot geschreven berichten toe in dit kanaal (standaard: false).
  • users: optionele per-kanaal gebruikers-allowlist.
  • skills: skill-filter (weglaten = alle Skills, leeg = geen).
  • systemPrompt: extra systeemprompt voor het kanaal (gecombineerd met topic/doel).
  • enabled: stel false in om het kanaal uit te schakelen.

Doelbestemmingen voor levering

Gebruik deze met cron/CLI-verzendingen:
  • user:<id> voor DM’s
  • channel:<id> voor kanalen

Toolacties

Slack-toolacties kunnen worden begrensd met channels.slack.actions.*:

Beveiligingsnotities

  • Schrijven gebruikt standaard het bot-token zodat statusveranderende acties binnen de bot-rechten en -identiteit van de app blijven.
  • Het instellen van userTokenReadOnly: false staat toe dat het user token wordt gebruikt voor schrijf- bewerkingen wanneer geen bot-token beschikbaar is; acties draaien dan met de rechten van de installerende gebruiker. Behandel het user token als zeer geprivilegieerd en houd actiegates en allowlists strak.
  • Als je user-token-schrijven inschakelt, zorg ervoor dat het user token de verwachte schrijfrechten bevat (chat:write, reactions:write, pins:write, files:write), anders zullen die bewerkingen falen.

Problemen oplossen

Doorloop eerst deze ladder:
Controleer daarna zo nodig de DM-koppelstatus:
Veelvoorkomende fouten:
  • Verbonden maar geen kanaalantwoorden: kanaal geblokkeerd door groupPolicy of niet in de channels.slack.channels-allowlist.
  • DM’s genegeerd: afzender niet goedgekeurd wanneer channels.slack.dm.policy="pairing".
  • API-fouten (missing_scope, not_in_channel, authenticatiefouten): bot-/app-tokens of Slack-scopes zijn onvolledig.
Voor triageflow: /channels/troubleshooting.

Notities

  • Mention-gating wordt geregeld via channels.slack.channels (stel requireMention in op true); agents.list[].groupChat.mentionPatterns (of messages.groupChat.mentionPatterns) tellen ook als mentions.
  • Multi-agent-override: stel per-agent patronen in op agents.list[].groupChat.mentionPatterns.
  • Reactienotificaties volgen channels.slack.reactionNotifications (gebruik reactionAllowlist met modus allowlist).
  • Door de bot geschreven berichten worden standaard genegeerd; schakel in via channels.slack.allowBots of channels.slack.channels.<id>.allowBots.
  • Waarschuwing: als je antwoorden aan andere bots toestaat (channels.slack.allowBots=true of channels.slack.channels.<id>.allowBots=true), voorkom bot-tot-bot-antwoordlussen met requireMention, channels.slack.channels.<id>.users-allowlists en/of duidelijke guardrails in AGENTS.md en SOUL.md.
  • Voor de Slack-tool staan de semantiek voor het verwijderen van reacties in /tools/reactions.
  • Bijlagen worden, wanneer toegestaan en onder de groottelimiet, gedownload naar de mediaopslag.