Slack
Stato: pronto per la produzione per DM + canali tramite integrazioni dell’app Slack. La modalità predefinita è Socket Mode; è supportata anche la modalità HTTP Events API.Abbinamento
Le DM di Slack usano per impostazione predefinita la modalità di abbinamento.
Comandi slash
Comportamento nativo dei comandi e catalogo dei comandi.
Risoluzione dei problemi del canale
Diagnostica tra canali e procedure di riparazione.
Configurazione rapida
- Socket Mode (predefinita)
- Modalità HTTP Events API
Crea l'app Slack e i token
Nelle impostazioni dell’app Slack:
- abilita Socket Mode
- crea App Token (
xapp-...) conconnections:write - installa l’app e copia Bot Token (
xoxb-...)
Iscriviti agli eventi dell'app
Iscrivi gli eventi bot per:
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Checklist del manifest e degli scope
Esempio di manifest dell'app Slack
Esempio di manifest dell'app Slack
Scope facoltativi del token utente (operazioni di lettura)
Scope facoltativi del token utente (operazioni di lettura)
Se configuri
channels.slack.userToken, gli scope di lettura tipici sono:channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(se dipendi dalle letture della ricerca Slack)
Modello dei token
botToken+appTokensono richiesti per Socket Mode.- La modalità HTTP richiede
botToken+signingSecret. botToken,appToken,signingSecreteuserTokenaccettano stringhe in chiaro o oggetti SecretRef.- I token di configurazione hanno la precedenza sul fallback env.
- Il fallback env
SLACK_BOT_TOKEN/SLACK_APP_TOKENsi applica solo all’account predefinito. userToken(xoxp-...) è solo di configurazione (nessun fallback env) e usa per impostazione predefinita il comportamento di sola lettura (userTokenReadOnly: true).- Facoltativo: aggiungi
chat:write.customizese vuoi che i messaggi in uscita usino l’identità dell’agente attivo (campiusernamee icona personalizzati).icon_emojiusa la sintassi:emoji_name:.
- L’ispezione dell’account Slack tiene traccia dei campi
*Sourcee*Statusper credenziale (botToken,appToken,signingSecret,userToken). - Lo stato è
available,configured_unavailableomissing. configured_unavailablesignifica che l’account è configurato tramite SecretRef o un’altra origine di segreti non inline, ma il percorso di comando/runtime corrente non ha potuto risolvere il valore effettivo.- In modalità HTTP, è incluso
signingSecretStatus; in Socket Mode, la coppia richiesta èbotTokenStatus+appTokenStatus.
Azioni e controlli
Le azioni Slack sono controllate dachannels.slack.actions.*.
Gruppi di azioni disponibili negli strumenti Slack correnti:
| Gruppo | Predefinito |
|---|---|
| messages | abilitato |
| reactions | abilitato |
| pins | abilitato |
| memberInfo | abilitato |
| emojiList | abilitato |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info ed emoji-list.
Controllo degli accessi e instradamento
- Criteri DM
- Criteri canale
- Menzioni e utenti del canale
channels.slack.dmPolicy controlla l’accesso alle DM (legacy: channels.slack.dm.policy):pairing(predefinito)allowlistopen(richiede chechannels.slack.allowFromincluda"*"; legacy:channels.slack.dm.allowFrom)disabled
dm.enabled(predefinito true)channels.slack.allowFrom(preferito)dm.allowFrom(legacy)dm.groupEnabled(DM di gruppo predefinite su false)dm.groupChannels(allowlist MPIM facoltativa)
channels.slack.accounts.default.allowFromsi applica solo all’accountdefault.- Gli account con nome ereditano
channels.slack.allowFromquando il proprioallowFromnon è impostato. - Gli account con nome non ereditano
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Threading, sessioni e tag di risposta
- Le DM vengono instradate come
direct; i canali comechannel; gli MPIM comegroup. - Con il valore predefinito
session.dmScope=main, le DM di Slack confluiscono nella sessione principale dell’agente. - Sessioni canale:
agent:<agentId>:slack:channel:<channelId>. - Le risposte nei thread possono creare suffissi di sessione del thread (
:thread:<threadTs>) quando applicabile. - Il valore predefinito di
channels.slack.thread.historyScopeèthread; il valore predefinito dithread.inheritParentèfalse. channels.slack.thread.initialHistoryLimitcontrolla quanti messaggi esistenti del thread vengono recuperati quando inizia una nuova sessione thread (predefinito20; imposta0per disabilitare).
channels.slack.replyToMode:off|first|all(predefinitooff)channels.slack.replyToModeByChatType: perdirect|group|channel- fallback legacy per chat dirette:
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" disabilita tutto il threading delle risposte in Slack, inclusi i tag espliciti [[reply_to_*]]. Questo è diverso da Telegram, dove i tag espliciti vengono comunque rispettati in modalità "off". La differenza riflette i modelli di threading delle piattaforme: i thread di Slack nascondono i messaggi dal canale, mentre le risposte di Telegram restano visibili nel flusso principale della chat.
Reazioni di conferma
ackReaction invia un’emoji di conferma mentre OpenClaw elabora un messaggio in ingresso.
Ordine di risoluzione:
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- fallback all’emoji dell’identità dell’agente (
agents.list[].identity.emoji, altrimenti ”👀”)
- Slack si aspetta shortcode (ad esempio
"eyes"). - Usa
""per disabilitare la reazione per l’account Slack o globalmente.
Streaming del testo
channels.slack.streaming controlla il comportamento dell’anteprima live:
off: disabilita lo streaming dell’anteprima live.partial(predefinito): sostituisce il testo di anteprima con l’output parziale più recente.block: aggiunge aggiornamenti di anteprima in blocchi.progress: mostra un testo di stato di avanzamento durante la generazione, quindi invia il testo finale.
channels.slack.nativeStreaming controlla lo streaming di testo nativo di Slack quando streaming è partial (predefinito: true).
- Perché lo streaming di testo nativo venga visualizzato, deve essere disponibile un thread di risposta. La selezione del thread continua comunque a seguire
replyToMode. Senza di esso, viene usata la normale anteprima bozza. - I contenuti multimediali e i payload non testuali tornano alla consegna normale.
- Se lo streaming fallisce a metà risposta, OpenClaw torna alla consegna normale per i payload rimanenti.
channels.slack.streamMode(replace | status_final | append) viene migrato automaticamente achannels.slack.streaming.- il booleano
channels.slack.streamingviene migrato automaticamente achannels.slack.nativeStreaming.
Fallback della reazione di digitazione
typingReaction aggiunge una reazione temporanea al messaggio Slack in ingresso mentre OpenClaw elabora una risposta, quindi la rimuove quando l’esecuzione termina. Questo è particolarmente utile al di fuori delle risposte nei thread, che usano un indicatore di stato predefinito “sta scrivendo…”.
Ordine di risoluzione:
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack si aspetta shortcode (ad esempio
"hourglass_flowing_sand"). - La reazione è best-effort e la pulizia viene tentata automaticamente dopo la risposta o dopo il completamento del percorso di errore.
Media, suddivisione e consegna
Allegati in ingresso
Allegati in ingresso
Gli allegati dei file Slack vengono scaricati da URL privati ospitati da Slack (flusso di richiesta autenticato tramite token) e scritti nell’archivio media quando il recupero riesce e i limiti di dimensione lo consentono.Il limite di dimensione in ingresso in runtime è per impostazione predefinita
20MB, a meno che non venga sostituito da channels.slack.mediaMaxMb.Testo e file in uscita
Testo e file in uscita
- i blocchi di testo usano
channels.slack.textChunkLimit(predefinito 4000) channels.slack.chunkMode="newline"abilita la suddivisione con priorità ai paragrafi- gli invii di file usano le API di upload di Slack e possono includere risposte in thread (
thread_ts) - il limite dei media in uscita segue
channels.slack.mediaMaxMbquando configurato; altrimenti gli invii del canale usano i valori predefiniti del tipo MIME dalla pipeline media
Destinazioni di consegna
Destinazioni di consegna
Destinazioni esplicite preferite:
user:<id>per le DMchannel:<id>per i canali
Comandi e comportamento slash
- La modalità automatica dei comandi nativi è disattivata per Slack (
commands.native: "auto"non abilita i comandi nativi di Slack). - Abilita gli handler dei comandi Slack nativi con
channels.slack.commands.native: true(o globalecommands.native: true). - Quando i comandi nativi sono abilitati, registra i comandi slash corrispondenti in Slack (nomi
/<command>), con un’eccezione:- registra
/agentstatusper il comando di stato (Slack riserva/status)
- registra
- Se i comandi nativi non sono abilitati, puoi eseguire un singolo comando slash configurato tramite
channels.slack.slashCommand. - I menu argomenti nativi ora adattano la propria strategia di rendering:
- fino a 5 opzioni: blocchi di pulsanti
- 6-100 opzioni: menu di selezione statico
- più di 100 opzioni: selezione esterna con filtro asincrono delle opzioni quando sono disponibili gli handler delle opzioni di interattività
- se i valori delle opzioni codificati superano i limiti di Slack, il flusso torna ai pulsanti
- Per payload di opzioni lunghi, i menu degli argomenti dei comandi slash usano una finestra di conferma prima di inviare un valore selezionato.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
Risposte interattive
Slack può visualizzare controlli di risposta interattivi creati dall’agente, ma questa funzionalità è disabilitata per impostazione predefinita. Abilitala globalmente:[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Questa è un’interfaccia specifica di Slack. Gli altri canali non traducono le direttive Slack Block Kit nei propri sistemi di pulsanti.
- I valori di callback interattivi sono token opachi generati da OpenClaw, non valori grezzi creati dall’agente.
- Se i blocchi interattivi generati superano i limiti di Slack Block Kit, OpenClaw torna alla risposta testuale originale invece di inviare un payload blocks non valido.
Approvazioni exec in Slack
Slack può agire come client di approvazione nativo con pulsanti e interazioni interattive, invece di tornare alla Web UI o al terminale.- Le approvazioni exec usano
channels.slack.execApprovals.*per l’instradamento nativo DM/canale. - Le approvazioni dei plugin possono comunque essere risolte tramite la stessa superficie di pulsanti nativa di Slack quando la richiesta arriva già in Slack e il tipo di id approvazione è
plugin:. - L’autorizzazione degli approvatori continua a essere applicata: solo gli utenti identificati come approvatori possono approvare o negare richieste tramite Slack.
interactivity è abilitato nelle impostazioni della tua app Slack, i prompt di approvazione vengono visualizzati come pulsanti Block Kit direttamente nella conversazione.
Quando questi pulsanti sono presenti, rappresentano l’esperienza utente primaria per l’approvazione; OpenClaw
dovrebbe includere un comando manuale /approve solo quando il risultato dello strumento indica che le
approvazioni in chat non sono disponibili o che l’approvazione manuale è l’unico percorso.
Percorso di configurazione:
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(facoltativo; usacommands.ownerAllowFromcome fallback quando possibile)channels.slack.execApprovals.target(dm|channel|both, predefinito:dm)agentFilter,sessionFilter
enabled non è impostato o è "auto" e viene risolto almeno un
approvatore. Imposta enabled: false per disabilitare esplicitamente Slack come client di approvazione nativo.
Imposta enabled: true per forzare le approvazioni native quando gli approvatori vengono risolti.
Comportamento predefinito senza configurazione esplicita delle approvazioni exec di Slack:
approvals.exec è separato. Usalo solo quando i prompt di approvazione exec devono anche
essere instradati ad altre chat o a destinazioni esplicite fuori banda. Anche l’inoltro condiviso approvals.plugin è
separato; i pulsanti nativi di Slack possono comunque risolvere le approvazioni dei plugin quando tali richieste arrivano già
in Slack.
Lo stesso /approve nella stessa chat funziona anche nei canali e nelle DM di Slack che supportano già i comandi. Vedi Approvazioni exec per il modello completo di inoltro delle approvazioni.
Eventi e comportamento operativo
- Le modifiche/eliminazioni dei messaggi e le trasmissioni di thread vengono mappate in eventi di sistema.
- Gli eventi di aggiunta/rimozione delle reazioni vengono mappati in eventi di sistema.
- Gli eventi di entrata/uscita dei membri, creazione/rinomina del canale e aggiunta/rimozione dei pin vengono mappati in eventi di sistema.
channel_id_changedpuò migrare le chiavi di configurazione del canale quandoconfigWritesè abilitato.- I metadati di topic/purpose del canale vengono trattati come contesto non attendibile e possono essere iniettati nel contesto di instradamento.
- Il thread starter e il seeding iniziale del contesto della cronologia del thread vengono filtrati dalle allowlist dei mittenti configurate quando applicabile.
- Le azioni dei blocchi e le interazioni modali emettono eventi di sistema strutturati
Slack interaction: ...con campi payload avanzati:- azioni dei blocchi: valori selezionati, etichette, valori dei selettori e metadati
workflow_* - eventi modali
view_submissioneview_closedcon metadati del canale instradati e input del modulo
- azioni dei blocchi: valori selezionati, etichette, valori dei selettori e metadati
Riferimenti alla configurazione
Riferimento principale:-
Riferimento della configurazione - Slack
Campi Slack ad alto segnale:
- modalità/autenticazione:
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - accesso DM:
dm.enabled,dmPolicy,allowFrom(legacy:dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - interruttore di compatibilità:
dangerouslyAllowNameMatching(solo emergenza; tienilo disattivato se non necessario) - accesso ai canali:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - threading/cronologia:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - consegna:
textChunkLimit,chunkMode,mediaMaxMb,streaming,nativeStreaming - operazioni/funzionalità:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- modalità/autenticazione:
Risoluzione dei problemi
Nessuna risposta nei canali
Nessuna risposta nei canali
Controlla, nell’ordine:
groupPolicy- allowlist dei canali (
channels.slack.channels) requireMention- allowlist
usersper canale
Messaggi DM ignorati
Messaggi DM ignorati
Controlla:
channels.slack.dm.enabledchannels.slack.dmPolicy(o legacychannels.slack.dm.policy)- approvazioni di abbinamento / voci allowlist
La modalità socket non si connette
La modalità socket non si connette
Convalida i token bot + app e l’abilitazione di Socket Mode nelle impostazioni dell’app Slack.Se
openclaw channels status --probe --json mostra botTokenStatus o
appTokenStatus: "configured_unavailable", l’account Slack è
configurato ma il runtime corrente non ha potuto risolvere il valore
supportato da SecretRef.La modalità HTTP non riceve eventi
La modalità HTTP non riceve eventi
Convalida:
- signing secret
- percorso webhook
- URL di richiesta Slack (Events + Interactivity + Slash Commands)
webhookPathunivoco per ogni account HTTP
signingSecretStatus: "configured_unavailable" appare nelle
istantanee dell’account, l’account HTTP è configurato ma il runtime corrente non ha potuto
risolvere il signing secret supportato da SecretRef.I comandi nativi/slash non si attivano
I comandi nativi/slash non si attivano
Verifica se intendevi usare:
- modalità comandi nativi (
channels.slack.commands.native: true) con i corrispondenti comandi slash registrati in Slack - oppure modalità comando slash singolo (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups e le allowlist di canali/utenti.