Slack
Stato: pronto per la produzione per DM + canali tramite integrazioni dell’app Slack. La modalità predefinita è Socket Mode; sono supportate anche le URL di richiesta HTTP.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 playbook di riparazione.
Configurazione rapida
- Socket Mode (predefinita)
- URL di richiesta HTTP
Crea una nuova app Slack
Nelle impostazioni dell’app Slack premi il pulsante Create New App:
- scegli from a manifest e seleziona uno spazio di lavoro per la tua app
- incolla il manifesto di esempio qui sotto e continua con la creazione
- genera un App-Level Token (
xapp-...) conconnections:write - installa l’app e copia il Bot Token (
xoxb-...) mostrato
Checklist di manifesto e ambiti
- Socket Mode (predefinita)
- URL di richiesta HTTP
Impostazioni aggiuntive del manifesto
Espongono diverse funzionalità che estendono i valori predefiniti sopra indicati.Comandi slash nativi facoltativi
Comandi slash nativi facoltativi
È possibile usare più comandi slash nativi invece di un singolo comando configurato, con alcune sfumature:
- Usa
/agentstatusinvece di/statusperché il comando/statusè riservato. - Non è possibile rendere disponibili più di 25 comandi slash contemporaneamente.
features.slash_commands con un sottoinsieme dei comandi disponibili:- Socket Mode (predefinita)
- URL di richiesta HTTP
Ambiti di attribuzione facoltativi (operazioni di scrittura)
Ambiti di attribuzione facoltativi (operazioni di scrittura)
Aggiungi l’ambito bot
chat:write.customize se vuoi che i messaggi in uscita usino l’identità dell’agente attivo (nome utente e icona personalizzati) invece dell’identità predefinita dell’app Slack.Se usi un’icona emoji, Slack si aspetta la sintassi :emoji_name:.Ambiti facoltativi del token utente (operazioni di lettura)
Ambiti facoltativi del token utente (operazioni di lettura)
Se configuri
channels.slack.userToken, gli ambiti 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 di ricerca di 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 per impostazione predefinita usa un comportamento di sola lettura (userTokenReadOnly: true).
- L’ispezione dell’account Slack traccia i 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 segreto non inline, ma il percorso corrente di comando/runtime 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 attuali:
| Group | Default |
|---|---|
| messaggi | abilitato |
| reazioni | abilitato |
| pin | abilitato |
| infoMembro | abilitato |
| elencoEmoji | abilitato |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info ed emoji-list.
Controllo degli accessi e instradamento
- Criterio DM
- Criterio del canale
- Menzioni e utenti del canale
channels.slack.dmPolicy controlla l’accesso ai 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 predefiniti false)dm.groupChannels(allowlist MPIM facoltativa)
channels.slack.accounts.default.allowFromsi applica solo all’accountdefault.- Gli account con nome ereditano
channels.slack.allowFromquando il loroallowFromnon è impostato. - Gli account con nome non ereditano
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Thread, sessioni e tag di risposta
- I DM vengono instradati come
direct; i canali comechannel; gli MPIM comegroup. - Con il valore predefinito
session.dmScope=main, i DM di Slack confluiscono nella sessione principale dell’agente. - Sessioni del 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; quello dithread.inheritParentèfalse. channels.slack.thread.initialHistoryLimitcontrolla quanti messaggi esistenti del thread vengono recuperati quando inizia una nuova sessione del thread (predefinito20; imposta0per disabilitare).channels.slack.thread.requireExplicitMention(predefinitofalse): quando ètrue, sopprime le menzioni implicite nei thread, così il bot risponde solo a menzioni esplicite@botall’interno dei thread, anche quando il bot ha già partecipato al thread. Senza questo, le risposte in un thread a cui il bot ha partecipato bypassano il controllorequireMention.
channels.slack.replyToMode:off|first|all|batched(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 differisce 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 ack
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 a blocchi.progress: mostra il testo di stato dell’avanzamento durante la generazione, quindi invia il testo finale.
channels.slack.streaming.nativeTransport controlla lo streaming nativo del testo di Slack quando channels.slack.streaming.mode è partial (predefinito: true).
- Per visualizzare lo streaming nativo del testo e lo stato del thread assistant di Slack deve essere disponibile un thread di risposta. La selezione del thread continua comunque a seguire
replyToMode. - Le radici di canali e chat di gruppo possono comunque usare la normale anteprima bozza quando lo streaming nativo non è disponibile.
- Le DM Slack di primo livello restano fuori thread per impostazione predefinita, quindi non mostrano l’anteprima in stile thread; usa risposte nei thread o
typingReactionse vuoi un avanzamento visibile lì. - I contenuti multimediali e i payload non testuali usano il fallback alla consegna normale.
- Se lo streaming fallisce a metà risposta, OpenClaw usa il fallback alla consegna normale per i payload rimanenti.
channels.slack.streamMode(replace | status_final | append) viene migrato automaticamente inchannels.slack.streaming.mode.- il booleano
channels.slack.streamingviene migrato automaticamente inchannels.slack.streaming.modeechannels.slack.streaming.nativeTransport. - la chiave legacy
channels.slack.nativeStreamingviene migrata automaticamente inchannels.slack.streaming.nativeTransport.
Fallback della reazione di digitazione
typingReaction aggiunge una reazione temporanea al messaggio Slack in ingresso mentre OpenClaw elabora una risposta, quindi la rimuove al termine dell’esecuzione. 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 il completamento della risposta o del percorso di errore.
Media, suddivisione in blocchi e consegna
Allegati in ingresso
Allegati in ingresso
Gli allegati file di Slack vengono scaricati da URL private ospitate da Slack (flusso di richiesta autenticato tramite token) e scritti nell’archivio media quando il recupero ha esito positivo e i limiti di dimensione lo consentono.Il limite di dimensione in ingresso a runtime è per impostazione predefinita
20MB, salvo override con 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 nei thread (
thread_ts) - il limite dei media in uscita segue
channels.slack.mediaMaxMbquando configurato; altrimenti gli invii del canale usano i valori predefiniti per tipo MIME dalla pipeline media
Destinazioni di consegna
Destinazioni di consegna
Destinazioni esplicite preferite:
user:<id>per i DMchannel:<id>per i canali
Comandi e comportamento slash
I comandi slash appaiono in Slack come un singolo comando configurato o come più comandi nativi. Configurachannels.slack.slashCommand per modificare i valori predefiniti del comando:
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
channels.slack.commands.native: true o commands.native: true nelle configurazioni globali.
- La modalità automatica dei comandi nativi è disattivata per Slack, quindi
commands.native: "auto"non abilita i comandi nativi di Slack.
- fino a 5 opzioni: blocchi di pulsanti
- 6-100 opzioni: menu statico di selezione
- più di 100 opzioni: selezione esterna con filtro asincrono delle opzioni quando sono disponibili gestori per le opzioni di interattività
- superati i limiti di Slack: i valori di opzione codificati usano il fallback ai pulsanti
agent:<agentId>:slack:slash:<userId> e continuano comunque a instradare le esecuzioni dei comandi verso la sessione della conversazione di destinazione usando CommandTargetSessionKey.
Risposte interattive
Slack può renderizzare 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]]
- Si tratta di UI 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 usa il fallback 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 interattivi, invece di usare il fallback alla Web UI o al terminale.- Le approvazioni exec usano
channels.slack.execApprovals.*per l’instradamento nativo in DM/canale. - Le approvazioni Plugin possono comunque essere risolte tramite la stessa superficie nativa di pulsanti Slack quando la richiesta arriva già in Slack e il tipo di id di 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 renderizzati come pulsanti Block Kit direttamente nella conversazione.
Quando questi pulsanti sono presenti, rappresentano la UX di approvazione primaria; 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; usa il fallback acommands.ownerAllowFromquando 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 l’attivazione delle approvazioni native quando gli approvatori vengono risolti.
Comportamento predefinito senza configurazione esplicita delle approvazioni exec Slack:
approvals.exec è separato. Usalo solo quando i prompt di approvazione exec devono essere instradati anche
verso altre chat o destinazioni esplicite fuori banda. Anche l’inoltro condiviso approvals.plugin è
separato; i pulsanti nativi di Slack possono comunque risolvere le approvazioni Plugin quando tali richieste arrivano già
in Slack.
Anche /approve nella stessa chat funziona in canali e DM 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 i broadcast dei thread vengono mappati in eventi di sistema.
- Gli eventi di aggiunta/rimozione di reazioni vengono mappati in eventi di sistema.
- Gli eventi di ingresso/uscita membri, creazione/rinomina canale e aggiunta/rimozione 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 tramite le allowlist di mittenti configurate quando applicabile.
- Le azioni sui blocchi e le interazioni con i modal emettono eventi di sistema strutturati
Slack interaction: ...con campi payload avanzati:- azioni sui blocchi: valori selezionati, etichette, valori dei picker e metadati
workflow_* - eventi modal
view_submissioneview_closedcon metadati del canale instradato e input del modulo
- azioni sui blocchi: valori selezionati, etichette, valori dei picker e metadati
Puntatori al riferimento della configurazione
Riferimento principale:-
Riferimento della configurazione - Slack
Campi Slack ad alto segnale:
- modalità/auth:
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; lascialo disattivato salvo necessità) - accesso canale:
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - threading/cronologia:
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - consegna:
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport - operazioni/funzionalità:
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- modalità/auth:
Risoluzione dei problemi
Nessuna risposta nei canali
Nessuna risposta nei canali
Controlla, in ordine:
groupPolicy- allowlist del canale (
channels.slack.channels) requireMention- allowlist
usersper canale
Messaggi DM ignorati
Messaggi DM ignorati
Controlla:
channels.slack.dm.enabledchannels.slack.dmPolicy(o il legacychannels.slack.dm.policy)- approvazioni di abbinamento / voci allowlist
Socket mode non si connette
Socket mode non si connette
Verifica 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 è riuscito a risolvere il valore
supportato da SecretRef.La modalità HTTP non riceve eventi
La modalità HTTP non riceve eventi
Verifica:
- signing secret
- percorso webhook
- URL di richiesta Slack (Eventi + Interattività + comandi slash)
webhookPathunivoco per ogni account HTTP
signingSecretStatus: "configured_unavailable" appare nelle istantanee
dell’account, l’account HTTP è configurato ma il runtime corrente non è riuscito
a 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.