État : prêt pour la production pour les MDs + les canaux via les intégrations d’applications Slack. Le mode par défaut est le Mode Socket ; le mode API d’événements HTTP est également pris en charge.
botToken + appToken sont requis pour le mode Socket.
Le mode HTTP nécessite botToken + signingSecret.
Les jetons de configuration prévalent sur le repli d’environnement.
Le repli d’environnement SLACK_BOT_TOKEN / SLACK_APP_TOKEN s’applique uniquement au compte par défaut.
userToken (xoxp-...) est en configuration uniquement (pas de repli d’environnement) et par défaut à un comportement en lecture seule (userTokenReadOnly: true).
Optionnel : ajoutez chat:write.customize si vous voulez que les messages sortants utilisent l’identité de l’agent actif (username personnalisé et icône). icon_emoji utilise la syntaxe :emoji_name:.
Le mode automatique des commandes natives est désactivé pour Slack (commands.native: "auto" n’active pas les commandes natives Slack).
Activez les gestionnaires de commandes natives Slack avec channels.slack.commands.native: true (ou commands.native: true global).
Lorsque les commandes natives sont activées, enregistrez les commandes slash correspondantes dans Slack (noms `/
`), avec une exception :
enregistrez /agentstatus pour la commande de statut (Slack réserve /status)
Si les commandes natives ne sont pas activées, vous pouvez exécuter une seule commande slash configurée via channels.slack.slashCommand.
Les menus d’arguments natifs adaptent désormais leur stratégie de rendu :
jusqu’à 5 options : blocs de boutons
6-100 options : menu de sélection statique
plus de 100 options : sélection externe avec filtrage asynchrone des options lorsque les gestionnaires d’options d’interactivité sont disponibles
si les valeurs d’option encodées dépassent les limites Slack, le flux revient aux boutons
Pour les payloads d’option longs, les menus d’arguments de commande Slash utilisent une boîte de dialogue de confirmation avant d’envoyer une valeur sélectionnée.
Slack peut restituer des contrôles de réponse interactifs créés par l’agent, mais cette fonctionnalité est désactivée par défaut.
Activez-la globalement :
{
channels: {
slack: {
capabilities: {
interactiveReplies: true,
},
},
},
}
Ou activez-la pour un seul compte Slack :
{
channels: {
slack: {
accounts: {
ops: {
capabilities: {
interactiveReplies: true,
},
},
},
},
},
}
Lorsqu’elle est activée, les agents peuvent émettre des directives de réponse exclusives à Slack :
[[slack_buttons: Approve:approve, Reject:reject]]
[[slack_select: Choose a target | Canary:canary, Production:production]]
Ces directives sont compilées en Slack Block Kit et acheminent les clics ou les sélections via le chemin d’événement d’interaction Slack existant.
Remarques :
Il s’agit d’une interface utilisateur spécifique à Slack. Les autres canaux ne traduisent pas les directives Slack Block Kit dans leurs propres systèmes de boutons.
Les valeurs de rappel interactives sont des jetons opaques générés par OpenClaw, et non des valeurs brutes créées par l’agent.
Si les blocs interactifs générés dépassaient les limites de Slack Block Kit, OpenClaw reviendrait à la réponse textuelle d’origine au lieu d’envoyer un payload de blocs non valide.
Paramètres par défaut des commandes Slash :
enabled: false
name: "openclaw"
sessionPrefix: "slack:slash"
ephemeral: true
Les sessions Slash utilisent des clés isolées :
`agent:
:slack:slash:
`
et toujours router l’exécution de la commande vers la session de conversation cible (CommandTargetSessionKey).
Fils de discussion, sessions et balises de réponse
Les DMs routent en tant que direct ; les canaux en tant que channel ; les MPIM en tant que group.
Avec session.dmScope=main par défaut, les Slack DMs sont réduits à la session principale de l’agent.
Sessions de channel : `agent:
:slack:channel:
`.
Les réponses aux fils peuvent créer des suffixes de session de fil (`:thread:
`) le cas échéant.
La valeur par défaut de channels.slack.thread.historyScope est thread ; la valeur par défaut de thread.inheritParent est false.
channels.slack.thread.initialHistoryLimit contrôle combien de messages de fil existants sont récupérés lorsqu’une nouvelle session de fil commence (par défaut 20 ; définir 0 pour désactiver).
channels.slack.replyToModeByChatType : par direct|group|channel
solution de repli héritée pour les chats directs : channels.slack.dm.replyToMode
Les balises de réponse manuelles sont prises en charge :
[[reply_to_current]]
`[[reply_to:
]]`
Remarque : replyToMode="off" désactive tous les fils de réponse dans Slack, y compris les balises [[reply_to_*]] explicites. Cela diffère de Telegram, où les balises explicites sont toujours respectées en mode "off". La différence reflète les modèles de fils de discussion des plateformes : les fils de Slack masquent les messages du channel, tandis que les réponses Telegram restent visibles dans le flux de chat principal.
Les pièces jointes de fichiers Slack sont téléchargées depuis des URL privées hébergées par Slack (flux de requêtes authentifiées par token) et écrites dans le média store lorsque la récupération réussit et que les limites de taille le permettent.
La limite de taille entrante à l’exécution est 20MB par défaut, sauf si elle est remplacée par channels.slack.mediaMaxMb.
Texte et fichiers sortants
les segments de texte utilisent channels.slack.textChunkLimit (par défaut 4000) - channels.slack.chunkMode="newline" active le découpage prioritaire par paragraphe - les envois de fichiers utilisent les API de téléchargement Slack et peuvent inclure des réponses de fil (thread_ts) - la limite des médias sortants suit channels.slack.mediaMaxMb lorsqu’elle est configurée ; sinon, les
envois vers le channel utilisent les valeurs par défaut de type MIME du pipeline média
Cibles de livraison
Cibles explicites préférées :
`user:
pour les DMs -channel:
` pour les channels
Les DMs Slack sont ouverts via les API de conversation Slack lors de l'envoi vers des cibles utilisateur.
Les modifications/suppressions de messages et les diffusions de fils de discussion sont mappées sur des événements système.
Les événements d’ajout et de suppression de réactions sont mappés sur des événements système.
Les événements d’arrivée/départ de membres, de création/de renommage de canal et d’ajout/suppression d’épingles sont mappés sur des événements système.
Les mises à jour de statut de fil de l’assistant (pour les indicateurs “est en train d’écrire…” dans les fils) utilisent assistant.threads.setStatus et nécessitent la portée de bot assistant:write.
channel_id_changed peut migrer les clés de configuration du channel lorsque configWrites est activé.
Les métadonnées de sujet/d’objet du canal sont traitées comme un contexte non fiable et peuvent être injectées dans le contexte de routage.
Les actions de bloc et les interactions modales émettent des événements système Slack interaction: ... structurés avec des champs de payload riches :
actions de bloc : valeurs sélectionnées, étiquettes, valeurs du sélecteur et métadonnées workflow_*
événements modaux view_submission et view_closed avec des métadonnées de channel routées et des entrées de formulaire
typingReaction ajoute une réaction temporaire au message entrant Slack pendant que OpenClaw traite une réponse, puis la supprime une fois l’exécution terminée. Il s’agit d’un mécanisme de secours utile lorsque la frappe native de l’assistant Slack n’est pas disponible, surtout dans les DMs.
Ordre de résolution :
`channels.slack.accounts.
.typingReaction`
channels.slack.typingReaction
Notes :
Slack attend des shortcodes (par exemple "hourglass_flowing_sand").
La réaction est effectuée sur la base du meilleur effort et le nettoyage est tenté automatiquement après l’achèvement de la réponse ou du chemin d’échec.
Les invites d’approbation Exec peuvent être acheminées nativement via Slack en utilisant des boutons interactifs et des interactions, au lieu de revenir à l’interface Web ou au terminal. L’autorisation de l’approbateur est appliquée : seuls les utilisateurs identifiés comme approbateurs peuvent approuver ou refuser les demandes via Slack.
Cela utilise la même surface de bouton d’approbation partagée que les autres canaux. Lorsque interactivity est activé dans les paramètres de votre application Slack, les invites d’approbation s’affichent sous forme de boutons Block Kit directement dans la conversation.
La configuration utilise la configuration partagée approvals.exec avec les cibles Slack :
{
approvals: {
exec: {
enabled: true,
targets: [{ channel: "slack", to: "U12345678" }],
},
},
}
Le /approve dans le même chat fonctionne également dans les canaux Slack et les DMs qui prennent déjà en charge les commandes. Voir Approbations Exec pour le modèle complet de transfert d’approbation.