Slack¶
Socket-tilstand (standard)¶
Hurtig opsætning (begynder)¶
- Opret en Slack-app og aktivér Socket Mode.
- Opret et App Token (
xapp-...) og et Bot Token (xoxb-...). - Sæt tokens for OpenClaw og start gatewayen.
Minimal konfiguration:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}
Opsætning¶
- Opret en Slack-app (From scratch) på https://api.slack.com/apps.
- Sokkel tilstand → slå til. Gå derefter til Grundlæggende oplysninger → App-Level Tokens → Generere Token og Scopes med anvendelsesområde
forbindelser:skrive. Kopier App Token (xapp-...). - OAuth & Tilladelser → Tilføj bot token scopes (brug manifestet nedenfor). Klik på Installer på arbejdsområdet. Kopier Bot User OAuth Token (
xoxb-...). - Valgfri: OAuth & Tilladelser → Tilføj Bruger Token Scopes (se listen med skrivebeskyttet nedenfor). Geninstaller app'en og kopier Bruger OAuth Token (
xoxp-...). - Event Subscriptions → aktivér events og abonnér på:
-
message.*(inkluderer redigeringer/sletninger/tråd-broadcasts) -app_mention-reaction_added,reaction_removed-member_joined_channel,member_left_channel-channel_rename-pin_added,pin_removed - Invitér botten til de kanaler, du vil have den til at læse.
- Slash kommandoer → oprette
/openclawhvis du brugerchannels.slack.slashCommand. Hvis du aktiverer lokale kommandoer, skal du tilføje en skråstreg kommando pr. indbygget kommando (samme navne som/help). Indfødte standarder er slukket for Slack medmindre du sætterchannels.slack.commands.native: true(globalcommands.nativeer"auto"som efterlader Slack off). - App Home → aktivér Messages Tab, så brugere kan DM’e botten.
Brug manifestet nedenfor, så scopes og events forbliver synkroniserede.
Understøttelse af flere konti: brug channels.slack.accounts med tokens pr. konto og valgfri name. Se gateway/configuration for det delte mønster.
OpenClaw-konfiguration (Socket-tilstand)¶
Sæt tokens via miljøvariabler (anbefalet):
SLACK_APP_TOKEN=xapp-...SLACK_BOT_TOKEN=xoxb-...
Eller via konfiguration:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}
User token (valgfrit)¶
OpenClaw kan bruge en Slack bruger token (xoxp-...) for læseoperationer (historie,
pins, reaktioner, emoji, medlem info). Som standard forbliver dette read-only: læser
foretrækker brugeren token når den er til stede, og skriver stadig bruge bot token medmindre
du udtrykkeligt vælger det. Selv med userTokenReadOnly: false, bot token forbliver
foretrukket for skriver, når den er tilgængelig.
Bruger-tokens er konfigureret i konfigurationsfilen (ingen understøttelse for env var). For
multi-konto, angiv channels.slack.accounts.<id>.userToken.
Eksempel med bot + app + user tokens:
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
userToken: "xoxp-...",
},
},
}
Eksempel med userTokenReadOnly eksplicit sat (tillad skrivninger med user token):
{
channels: {
slack: {
enabled: true,
appToken: "xapp-...",
botToken: "xoxb-...",
userToken: "xoxp-...",
userTokenReadOnly: false,
},
},
}
Token-brug¶
- Læseoperationer (historik, reaktionsliste, pins-liste, emoji-liste, medlemsinfo, søgning) foretrækker user token, når det er konfigureret, ellers bot token.
- Skriv operationer (send/edit/delete beskeder, tilføj/remove reaktioner, pin/unpin,
fil uploads) bruge bot token som standard. If
userTokenReadOnly: falseand no bot token is available OpenClaw falls back to the user token.
Historik-kontekst¶
channels.slack.historyLimit(ellerchannels.slack.accounts.*.historyLimit) styrer, hvor mange nylige kanal-/gruppebeskeder der pakkes ind i prompten.- Falder tilbage til
messages.groupChat.historyLimit. Sæt0til at deaktivere (standard 50).
HTTP-tilstand (Events API)¶
Brug HTTP webhook tilstand, når din Gateway er tilgængelig af Slack over HTTPS (typisk for server implementeringer). HTTP-tilstand bruger Events API + Interaktivitet + Slash kommandoer med en delt anmodning URL.
Opsætning (HTTP-tilstand)¶
- Opret en Slack-app og deaktivér Socket Mode (valgfrit, hvis du kun bruger HTTP).
- Basic Information → kopiér Signing Secret.
- OAuth & Permissions → installér appen og kopiér Bot User OAuth Token (
xoxb-...). - Event Subscriptions → aktivér events og sæt Request URL til din gateway webhook-sti (standard
/slack/events). - Interactivity & Shortcuts → aktivér og sæt den samme Request URL.
- Slash Commands → sæt den samme Request URL for dine kommandoer.
Eksempel på request-URL:
https://gateway-host/slack/events
OpenClaw-konfiguration (minimal)¶
{
channels: {
slack: {
enabled: true,
mode: "http",
botToken: "xoxb-...",
signingSecret: "your-signing-secret",
webhookPath: "/slack/events",
},
},
}
Multi-konto HTTP-tilstand: sæt channels.slack.accounts.<id>.mode = "http" og angiv en unik
webhookPath pr. konto, så hver Slack app kan pege på sin egen URL.
Manifest (valgfrit)¶
Brug denne Slack app manifest til at oprette app hurtigt (justere navn/kommando, hvis du vil). Inkluder brugerens anvendelsesområder, hvis du planlægger at konfigurere et bruger-token.
{
"display_information": {
"name": "OpenClaw",
"description": "Slack connector for OpenClaw"
},
"features": {
"bot_user": {
"display_name": "OpenClaw",
"always_online": false
},
"app_home": {
"messages_tab_enabled": true,
"messages_tab_read_only_enabled": false
},
"slash_commands": [
{
"command": "/openclaw",
"description": "Send a message to OpenClaw",
"should_escape": false
}
]
},
"oauth_config": {
"scopes": {
"bot": [
"chat:write",
"channels:history",
"channels:read",
"groups:history",
"groups:read",
"groups:write",
"im:history",
"im:read",
"im:write",
"mpim:history",
"mpim:read",
"mpim:write",
"users:read",
"app_mentions:read",
"reactions:read",
"reactions:write",
"pins:read",
"pins:write",
"emoji:read",
"commands",
"files:read",
"files:write"
],
"user": [
"channels:history",
"channels:read",
"groups:history",
"groups:read",
"im:history",
"im:read",
"mpim:history",
"mpim:read",
"users:read",
"reactions:read",
"pins:read",
"emoji:read",
"search:read"
]
}
},
"settings": {
"socket_mode_enabled": true,
"event_subscriptions": {
"bot_events": [
"app_mention",
"message.channels",
"message.groups",
"message.im",
"message.mpim",
"reaction_added",
"reaction_removed",
"member_joined_channel",
"member_left_channel",
"channel_rename",
"pin_added",
"pin_removed"
]
}
}
}
Hvis du aktiverer lokale kommandoer, så tilføj en slash_commands post pr. kommando du ønsker at udsætte (matcher listen /help). Tilsidesæt med channels.slack.commands.native.
Scopes (aktuelle vs. valgfri)¶
Slack's Conversations API er type-scoped: du behøver kun scopes for de samtaletyper, du rent faktisk rører (kanaler, grupper, im, mpim). Se https://docs.slack.dev/apis/web-api/using-the-conversations-api/ for oversigten.
Bot token scopes (påkrævet)¶
chat:write(send/opdatér/slet beskeder viachat.postMessage) https://docs.slack.dev/reference/methods/chat.postMessageim:write(åbn DMs viaconversations.openfor bruger-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(brugeropslag) 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 viafiles.uploadV2) https://docs.slack.dev/messaging/working-with-files/#upload
User token scopes (valgfri, read-only som standard)¶
Tilføj disse under User Token Scopes, hvis du konfigurerer channels.slack.userToken.
channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read
Ikke nødvendige i dag (men sandsynligvis fremtid)¶
mpim:write(kun hvis vi tilføjer group-DM open/DM start viaconversations.open)groups:write(kun hvis vi tilføjer håndtering af private kanaler: opret/omdøb/invitér/arkivér)chat:write.public(kun hvis vi vil poste til kanaler, botten ikke er i) https://docs.slack.dev/reference/scopes/chat.write.publicusers:read.email(kun hvis vi har brug for e-mailfelter frausers.info) https://docs.slack.dev/changelog/2017-04-narrowing-email-accessfiles:read(kun hvis vi begynder at liste/læse filmetadata)
Konfiguration¶
Slack bruger kun Socket Mode (ingen HTTP webhook server). Giv begge tokens:
{
"slack": {
"enabled": true,
"botToken": "xoxb-...",
"appToken": "xapp-...",
"groupPolicy": "allowlist",
"dm": {
"enabled": true,
"policy": "pairing",
"allowFrom": ["U123", "U456", "*"],
"groupEnabled": false,
"groupChannels": ["G123"],
"replyToMode": "all"
},
"channels": {
"C123": { "allow": true, "requireMention": true },
"#general": {
"allow": true,
"requireMention": true,
"users": ["U123"],
"skills": ["search", "docs"],
"systemPrompt": "Keep answers short."
}
},
"reactionNotifications": "own",
"reactionAllowlist": ["U123"],
"replyToMode": "off",
"actions": {
"reactions": true,
"messages": true,
"pins": true,
"memberInfo": true,
"emojiList": true
},
"slashCommand": {
"enabled": true,
"name": "openclaw",
"sessionPrefix": "slack:slash",
"ephemeral": true
},
"textChunkLimit": 4000,
"mediaMaxMb": 20
}
}
Tokens kan også leveres via miljøvariabler:
SLACK_BOT_TOKENSLACK_APP_TOKEN
Ack reaktioner styres globalt via messages.ackReaction +
messages.ackReactionScope. Brug messages.removeAckAfterReply for at rydde
ack reaktion efter bot svar.
Grænser¶
- Udgående tekst opdeles i bidder på
channels.slack.textChunkLimit(standard 4000). - Valgfri opdeling ved linjeskift: sæt
channels.slack.chunkMode="newline"for at splitte ved tomme linjer (afsnitsgrænser) før længdeopdeling. - Medieuploads er begrænset af
channels.slack.mediaMaxMb(standard 20).
Svar-trådning¶
Som standard besvarer OpenClaw i hovedkanalen. Brug channels.slack.replyToMode til at styre automatisk gevind:
| Tilstand | Adfærd |
|---|---|
off |
Standard. Svar i hovedkanalen. Kun tråd hvis den udløsende besked allerede var i en tråd. |
first |
Første svar går til tråd (under den udløsende meddelelse), efterfølgende svar gå til hovedkanalen. Nyttigt til at holde sammenhæng synlig, samtidig undgå tråd rod. |
all |
Alle svar går til tråd. Holder samtalerne indeholdt, men kan reducere synligheden. |
Tilstanden gælder både autosvar og agent-værktøjskald (slack sendMessage).
Trådning pr. chat-type¶
Du kan konfigurere forskellig trådningsadfærd pr. chat-type ved at sætte channels.slack.replyToModeByChatType:
{
channels: {
slack: {
replyToMode: "off", // default for channels
replyToModeByChatType: {
direct: "all", // DMs always thread
group: "first", // group DMs/MPIM thread first reply
},
},
},
}
Understøttede chat-typer:
direct: 1:1 DMs (Slackim)group: gruppe-DMs / MPIMs (Slackmpim)channel: standardkanaler (offentlige/private)
Præcedens:
replyToModeByChatType.<chatType>replyToMode- Udbyder-standard (
off)
Legacy channels.slack.dm.replyToMode accepteres stadig som fallback for direct, når ingen chat-type-override er sat.
Eksempler:
Tråd kun DMs:
{
channels: {
slack: {
replyToMode: "off",
replyToModeByChatType: { direct: "all" },
},
},
}
Tråd gruppe-DMs, men behold kanaler i roden:
{
channels: {
slack: {
replyToMode: "off",
replyToModeByChatType: { group: "first" },
},
},
}
Gør kanaler til tråde, behold DMs i roden:
{
channels: {
slack: {
replyToMode: "first",
replyToModeByChatType: { direct: "off", group: "off" },
},
},
}
Manuelle trådningstags¶
Til finjusteret kontrol kan du bruge disse tags i agent-svar:
[[reply_to_current]]— svar på den udløsende besked (start/fortsæt tråd).[[reply_to:<id>]]— svar på en specifik besked-id.
Sessioner + routing¶
- DMs deler
main-sessionen (som WhatsApp/Telegram). - Kanaler kortlægges til
agent:<agentId>:slack:channel:<channelId>-sessioner. - Slash commands bruger
agent:<agentId>:slack:slash:<userId>-sessioner (præfiks konfigurerbart viachannels.slack.slashCommand.sessionPrefix). - Hvis Slack ikke leverer
channel_type, udleder OpenClaw det fra kanal-id-præfikset (D,C,G) og falder tilbage tilchannelfor at holde sessionsnøgler stabile. - Indfødte kommando registrering bruger
commands.native(global standard"auto"→ Slack off) og kan tilsidesættes per-workspace medchannels.slack.commands.native. Tekst kommandoer kræver standalone/...beskeder og kan deaktiveres medcommands.text: false. Slack skråstreg kommandoer administreres i Slack app og fjernes ikke automatisk. Brugcommands.useAccessGroups: falsefor at omgå access-group tjek for kommandoer. - Fuld kommandoliste + konfiguration: Slash commands
DM-sikkerhed (parring)¶
- Standard:
channels.slack.dm.policy="pairing"— ukendte DM-afsendere får en parringskode (udløber efter 1 time). - Godkend via:
openclaw pairing approve slack <code>. - For at tillade alle: sæt
channels.slack.dm.policy="open"ogchannels.slack.dm.allowFrom=["*"]. channels.slack.dm.allowFromaccepterer bruger-ID, @handles, eller e-mails (løst ved opstart, når tokens tillader). Guiden accepterer brugernavne og løser dem til id'er under opsætning, når tokens tillader.
Gruppepolitik¶
channels.slack.groupPolicystyrer kanalhåndtering (open|disabled|allowlist).allowlistkræver, at kanaler er listet ichannels.slack.channels.- Hvis du kun indstille
SLACK_BOT_TOKEN/SLACK_APP_TOKENog aldrig oprette enchannels.slacksektion, runtime standardgroupPolicytilopen. Tilføjchannels.slack.groupPolicy,channels.defaults.groupPolicy, eller en kanal tilladt liste for at låse det ned. - Opsætningsguiden accepterer
#channel-navne og opløser dem til id’er, når muligt (offentlige + private); hvis der findes flere match, foretrækkes den aktive kanal. - Ved opstart opløser OpenClaw kanal-/brugernavne i tilladelseslister til id’er (når tokens tillader det) og logger mappingen; uløste poster bevares som indtastet.
- For at tillade ingen kanaler, sæt
channels.slack.groupPolicy: "disabled"(eller behold en tom tilladelsesliste).
Kanalindstillinger (channels.slack.channels.<id> eller channels.slack.channels.<name>):
allow: tillad/afvis kanalen, nårgroupPolicy="allowlist".requireMention: mention-gating for kanalen.tools: valgfrie pr.-kanal værktøjspolitik-overskrivninger (allow/deny/alsoAllow).toolsBySender: valgfrie pr.-afsender værktøjspolitik-overskrivninger inden for kanalen (nøgler er afsender-id’er/@handles/e-mails;"*"jokertegn understøttes).allowBots: tillad bot-forfattede beskeder i denne kanal (standard: false).users: valgfri pr.-kanal bruger-tilladelsesliste.skills: skill-filter (udeladt = alle Skills, tom = ingen).systemPrompt: ekstra systemprompt for kanalen (kombineret med emne/formål).enabled: sætfalsefor at deaktivere kanalen.
Leveringsmål¶
Brug disse med cron/CLI-sends:
user:<id>til DMschannel:<id>til kanaler
Værktøjshandlinger¶
Slack-værktøjshandlinger kan gates med channels.slack.actions.*:
| Handlingsgruppe | Standard | Noter |
|---|---|---|
| reactions | enabled | Reagér + list reaktioner |
| messages | enabled | Læs/send/redigér/slet |
| pins | enabled | Pin/afpin/list |
| memberInfo | enabled | Medlemsinfo |
| emojiList | enabled | Brugerdefineret emoji-liste |
Sikkerhedsnoter¶
- Skrivehandlinger bruger som standard bot token, så tilstandsændrende handlinger forbliver afgrænset til appens bot-tilladelser og identitet.
- Indstilling af
userTokenReadOnly: falsetillader bruger token at blive brugt til at skrive operationer, når en bot token er utilgængelig, hvilket betyder, at handlinger kører med -installationsbrugerens adgang. Behandl brugeren token som meget privilegeret og holde handling porte og tillad lister stramt. - Hvis du aktiverer skrivninger med user token, skal du sikre, at user token inkluderer de forventede skrive-scopes
(
chat:write,reactions:write,pins:write,files:write), ellers vil disse handlinger fejle.
Fejlfinding¶
Kør først denne trappe:
openclaw status
openclaw gateway status
openclaw logs --follow
openclaw doctor
openclaw channels status --probe
Bekræft derefter DM-parringsstatus om nødvendigt:
openclaw pairing list slack
Almindelige fejl:
- Forbundet men ingen kanalsvar: kanal blokeret af
groupPolicyeller ikke ichannels.slack.channels-tilladelseslisten. - DMs ignoreres: afsender ikke godkendt, når
channels.slack.dm.policy="pairing". - API-fejl (
missing_scope,not_in_channel, auth-fejl): bot-/app-tokens eller Slack-scopes er ufuldstændige.
For triage-flow: /channels/troubleshooting.
Noter¶
- Mention-gating styres via
channels.slack.channels(sætrequireMentiontiltrue);agents.list[].groupChat.mentionPatterns(ellermessages.groupChat.mentionPatterns) tæller også som mentions. - Multi-agent-override: sæt pr.-agent-mønstre på
agents.list[].groupChat.mentionPatterns. - Reaktionsnotifikationer følger
channels.slack.reactionNotifications(brugreactionAllowlistmed tilstandallowlist). - Bot-authored messages are ignored as default; enable via
channels.slack.allowBotsorchannels.slack.channels.<id>.allowBots. - Advarsel: Hvis du tillader svar til andre bots (
channels.slack.allowBots=trueellerchannels.slack.channels.<id>.allowBots=true), forhindre bot-to-bot svar loops medrequireMention,channels.slack.channels.<id>.userstilladte og/eller klare guardrails i »AGENTS.md« og »SOUL.md«. - For Slack-værktøjet findes semantik for fjernelse af reaktioner i /tools/reactions.
- Vedhæftninger downloades til medielageret, når det er tilladt og under størrelsesgrænsen.