Slack
Statut : prêt pour la production pour les messages privés et les canaux via les intégrations d’app Slack. Le mode par défaut est Socket Mode ; les URL de requête HTTP sont également prises en charge.Association
Les messages privés Slack utilisent par défaut le mode d’association.
Commandes slash
Comportement natif des commandes et catalogue des commandes.
Dépannage des canaux
Diagnostics inter-canaux et guides de réparation.
Configuration rapide
- Socket Mode (par défaut)
- URL de requête HTTP
Créer une nouvelle app Slack
Dans les paramètres de l’app Slack, appuyez sur le bouton Create New App :
- choisissez from a manifest et sélectionnez un espace de travail pour votre app
- collez le manifeste d’exemple ci-dessous et continuez pour la créer
- générez un App-Level Token (
xapp-...) avecconnections:write - installez l’app et copiez le Bot Token (
xoxb-...) affiché
Liste de vérification du manifeste et des portées
- Socket Mode (par défaut)
- URL de requête HTTP
Portées d’attribution facultatives (opérations d’écriture)
Portées d’attribution facultatives (opérations d’écriture)
Ajoutez la portée bot
chat:write.customize si vous souhaitez que les messages sortants utilisent l’identité de l’agent actif (nom d’utilisateur et icône personnalisés) au lieu de l’identité par défaut de l’app Slack.Si vous utilisez une icône emoji, Slack attend une syntaxe :emoji_name:.Portées facultatives du jeton utilisateur (opérations de lecture)
Portées facultatives du jeton utilisateur (opérations de lecture)
Si vous configurez
channels.slack.userToken, les portées de lecture courantes sont :channels:history,groups:history,im:history,mpim:historychannels:read,groups:read,im:read,mpim:readusers:readreactions:readpins:reademoji:readsearch:read(si vous dépendez des lectures de recherche Slack)
Modèle de jeton
botToken+appTokensont requis pour Socket Mode.- Le mode HTTP nécessite
botToken+signingSecret. botToken,appToken,signingSecretetuserTokenacceptent des chaînes en clair ou des objets SecretRef.- Les jetons de config remplacent la variable d’environnement de secours.
- La variable d’environnement de secours
SLACK_BOT_TOKEN/SLACK_APP_TOKENs’applique uniquement au compte par défaut. userToken(xoxp-...) est uniquement configurable dans la config (pas de variable d’environnement de secours) et adopte par défaut un comportement en lecture seule (userTokenReadOnly: true).
- L’inspection du compte Slack suit, pour chaque identifiant, les champs
*Sourceet*Status(botToken,appToken,signingSecret,userToken). - L’état est
available,configured_unavailableoumissing. configured_unavailablesignifie que le compte est configuré via SecretRef ou une autre source de secret non inline, mais que le chemin de commande ou d’exécution actuel n’a pas pu résoudre la valeur réelle.- En mode HTTP,
signingSecretStatusest inclus ; en Socket Mode, la paire requise estbotTokenStatus+appTokenStatus.
Actions et garde-fous
Les actions Slack sont contrôlées parchannels.slack.actions.*.
Groupes d’actions disponibles dans l’outillage Slack actuel :
| Groupe | Par défaut |
|---|---|
| messages | activé |
| reactions | activé |
| pins | activé |
| memberInfo | activé |
| emojiList | activé |
send, upload-file, download-file, read, edit, delete, pin, unpin, list-pins, member-info et emoji-list.
Contrôle d’accès et routage
- Politique des messages privés
- Politique des canaux
- Mentions et utilisateurs de canal
channels.slack.dmPolicy contrôle l’accès aux messages privés (hérité : channels.slack.dm.policy) :pairing(par défaut)allowlistopen(nécessite quechannels.slack.allowFrominclue"*"; hérité :channels.slack.dm.allowFrom)disabled
dm.enabled(true par défaut)channels.slack.allowFrom(préféré)dm.allowFrom(hérité)dm.groupEnabled(messages privés de groupe désactivés par défaut)dm.groupChannels(liste d’autorisation MPIM facultative)
channels.slack.accounts.default.allowFroms’applique uniquement au comptedefault.- Les comptes nommés héritent de
channels.slack.allowFromlorsque leur propreallowFromn’est pas défini. - Les comptes nommés n’héritent pas de
channels.slack.accounts.default.allowFrom.
openclaw pairing approve slack <code>.Fils, sessions et balises de réponse
- Les messages privés sont routés comme
direct; les canaux commechannel; les MPIM commegroup. - Avec la valeur par défaut
session.dmScope=main, les messages privés Slack sont regroupés dans la session principale de l’agent. - Sessions de canal :
agent:<agentId>:slack:channel:<channelId>. - Les réponses dans les fils peuvent créer des suffixes de session de fil (
:thread:<threadTs>) lorsque c’est applicable. - La valeur par défaut de
channels.slack.thread.historyScopeestthread; celle dethread.inheritParentestfalse. channels.slack.thread.initialHistoryLimitcontrôle le nombre de messages existants du fil récupérés au démarrage d’une nouvelle session de fil (valeur par défaut20; définissez0pour désactiver).channels.slack.thread.requireExplicitMention(par défautfalse) : quandtrue, supprime les mentions implicites dans les fils afin que le bot ne réponde qu’aux mentions explicites@botdans les fils, même s’il a déjà participé au fil. Sans cela, les réponses dans un fil auquel le bot a participé contournent le garde-fourequireMention.
channels.slack.replyToMode:off|first|all|batched(par défautoff)channels.slack.replyToModeByChatType: pardirect|group|channel- repli hérité pour les discussions directes :
channels.slack.dm.replyToMode
[[reply_to_current]][[reply_to:<id>]]
replyToMode="off" désactive tout le fil de réponse dans Slack, y compris les balises explicites [[reply_to_*]]. Cela diffère de Telegram, où les balises explicites sont toujours respectées en mode "off". Cette différence reflète les modèles de fil propres aux plateformes : dans Slack, les fils masquent les messages du canal, tandis que dans Telegram, les réponses restent visibles dans le flux principal de discussion.
Réactions d’accusé de réception
ackReaction envoie un emoji d’accusé de réception pendant qu’OpenClaw traite un message entrant.
Ordre de résolution :
channels.slack.accounts.<accountId>.ackReactionchannels.slack.ackReactionmessages.ackReaction- repli sur l’emoji d’identité de l’agent (
agents.list[].identity.emoji, sinon ”👀”)
- Slack attend des shortcodes (par exemple
"eyes"). - Utilisez
""pour désactiver la réaction pour le compte Slack ou globalement.
Streaming de texte
channels.slack.streaming contrôle le comportement de l’aperçu en direct :
off: désactiver le streaming de l’aperçu en direct.partial(par défaut) : remplacer le texte d’aperçu par la dernière sortie partielle.block: ajouter des mises à jour d’aperçu par blocs.progress: afficher un texte de progression pendant la génération, puis envoyer le texte final.
channels.slack.streaming.nativeTransport contrôle le streaming de texte natif Slack lorsque channels.slack.streaming.mode vaut partial (par défaut : true).
- Un fil de réponse doit être disponible pour que le streaming de texte natif et l’état du fil assistant Slack s’affichent. La sélection du fil continue toutefois de suivre
replyToMode. - Les racines de canaux et de discussions de groupe peuvent toujours utiliser l’aperçu brouillon normal lorsque le streaming natif n’est pas disponible.
- Les messages privés Slack de niveau supérieur restent hors fil par défaut, ils n’affichent donc pas l’aperçu de style fil ; utilisez des réponses en fil ou
typingReactionsi vous souhaitez y afficher une progression visible. - Les médias et les charges utiles non textuelles reviennent à la livraison normale.
- Si le streaming échoue en cours de réponse, OpenClaw revient à la livraison normale pour les charges utiles restantes.
channels.slack.streamMode(replace | status_final | append) est migré automatiquement verschannels.slack.streaming.mode.- le booléen
channels.slack.streamingest migré automatiquement verschannels.slack.streaming.modeetchannels.slack.streaming.nativeTransport. - la clé héritée
channels.slack.nativeStreamingest migrée automatiquement verschannels.slack.streaming.nativeTransport.
Repli de réaction de saisie
typingReaction ajoute une réaction temporaire au message Slack entrant pendant qu’OpenClaw traite une réponse, puis la retire à la fin de l’exécution. C’est surtout utile hors des réponses en fil, qui utilisent un indicateur d’état par défaut « is typing… ».
Ordre de résolution :
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack attend des shortcodes (par exemple
"hourglass_flowing_sand"). - La réaction est appliquée au mieux et son nettoyage est tenté automatiquement une fois la réponse ou le chemin d’échec terminé.
Médias, découpage et livraison
Pièces jointes entrantes
Pièces jointes entrantes
Les pièces jointes Slack sont téléchargées depuis des URL privées hébergées par Slack (flux de requêtes authentifiées par jeton) et écrites dans le stockage média lorsque la récupération réussit et que les limites de taille le permettent.Le plafond de taille entrante à l’exécution est de
20MB par défaut, sauf remplacement par channels.slack.mediaMaxMb.Texte et fichiers sortants
Texte et fichiers sortants
- les blocs de texte utilisent
channels.slack.textChunkLimit(valeur par défaut 4000) channels.slack.chunkMode="newline"active un découpage privilégiant d’abord les paragraphes- les envois de fichiers utilisent les API d’upload Slack et peuvent inclure des réponses en fil (
thread_ts) - le plafond média sortant suit
channels.slack.mediaMaxMblorsqu’il est configuré ; sinon, les envois par canal utilisent les valeurs par défaut par type MIME du pipeline média
Cibles de livraison
Cibles de livraison
Cibles explicites préférées :
user:<id>pour les messages privéschannel:<id>pour les canaux
Commandes et comportement des slash commands
- 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 Slack natives avec
channels.slack.commands.native: true(ou globalementcommands.native: true). - Lorsque les commandes natives sont activées, enregistrez les slash commands correspondantes dans Slack (noms
/<command>), avec une exception :- enregistrez
/agentstatuspour la commande d’état (Slack réserve/status)
- enregistrez
- Si les commandes natives ne sont pas activées, vous pouvez exécuter une seule slash command 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 des gestionnaires d’options d’interactivité sont disponibles
- si les valeurs d’option encodées dépassent les limites de Slack, le flux revient aux boutons
- Pour les longues charges utiles d’options, les menus d’arguments des slash commands utilisent une boîte de dialogue de confirmation avant d’envoyer une valeur sélectionnée.
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
agent:<agentId>:slack:slash:<userId>
CommandTargetSessionKey).
Réponses interactives
Slack peut afficher des contrôles de réponse interactive rédigés par l’agent, mais cette fonctionnalité est désactivée par défaut. L’activer globalement :[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Il s’agit d’une UI spécifique à Slack. Les autres canaux ne traduisent pas les directives Slack Block Kit vers leurs propres systèmes de boutons.
- Les valeurs de rappel interactif sont des jetons opaques générés par OpenClaw, et non des valeurs brutes rédigées par l’agent.
- Si les blocs interactifs générés dépassent les limites de Slack Block Kit, OpenClaw revient à la réponse texte d’origine au lieu d’envoyer une charge utile de blocs invalide.
Approbations exec dans Slack
Slack peut agir comme client d’approbation natif avec des boutons interactifs et des interactions, au lieu de revenir à la Web UI ou au terminal.- Les approbations exec utilisent
channels.slack.execApprovals.*pour le routage natif en message privé/canal. - Les approbations de plugin peuvent toujours être résolues via la même surface de boutons native Slack lorsque la demande arrive déjà dans Slack et que le type d’ID d’approbation est
plugin:. - L’autorisation des approbateurs reste appliquée : seuls les utilisateurs identifiés comme approbateurs peuvent approuver ou refuser des demandes via Slack.
interactivity est activé dans les paramètres de votre app Slack, les invites d’approbation s’affichent directement sous forme de boutons Block Kit dans la conversation.
Lorsque ces boutons sont présents, ils constituent l’UX d’approbation principale ; OpenClaw
ne devrait inclure une commande manuelle /approve que lorsque le résultat de l’outil indique que les
approbations par discussion ne sont pas disponibles ou que l’approbation manuelle est la seule voie.
Chemin de configuration :
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(facultatif ; utilisecommands.ownerAllowFromcomme repli lorsque possible)channels.slack.execApprovals.target(dm|channel|both, valeur par défaut :dm)agentFilter,sessionFilter
enabled n’est pas défini ou vaut "auto" et qu’au moins un
approbateur est résolu. Définissez enabled: false pour désactiver explicitement Slack comme client d’approbation natif.
Définissez enabled: true pour forcer les approbations natives lorsque des approbateurs sont résolus.
Comportement par défaut sans configuration explicite d’approbation exec Slack :
approvals.exec est distinct. Utilisez-le uniquement lorsque les invites d’approbation exec doivent aussi
être routées vers d’autres discussions ou des cibles explicites hors bande. Le transfert partagé approvals.plugin est également
distinct ; les boutons natifs Slack peuvent toujours résoudre les approbations de plugin lorsque ces demandes arrivent déjà
dans Slack.
/approve dans la même discussion fonctionne aussi dans les canaux et messages privés Slack qui prennent déjà en charge les commandes. Voir Approbations exec pour le modèle complet de transfert des approbations.
Événements et comportement opérationnel
- Les modifications/suppressions de messages et les diffusions de fil sont mappées en événements système.
- Les événements d’ajout/suppression de réaction sont mappés en événements système.
- Les événements d’arrivée/départ de membre, de création/renommage de canal et d’ajout/suppression d’épingle sont mappés en événements système.
channel_id_changedpeut migrer les clés de configuration de canal lorsqueconfigWritesest activé.- Les métadonnées de sujet/objectifs de canal sont traitées comme un contexte non fiable et peuvent être injectées dans le contexte de routage.
- Le message initial du fil et l’amorçage initial du contexte d’historique du fil sont filtrés selon les listes d’autorisation d’expéditeur configurées, lorsque applicable.
- Les actions de bloc et les interactions modales émettent des événements système structurés
Slack interaction: ...avec des champs riches de charge utile :- actions de bloc : valeurs sélectionnées, libellés, valeurs du sélecteur et métadonnées
workflow_* - événements modaux
view_submissionetview_closedavec métadonnées de canal routées et entrées de formulaire
- actions de bloc : valeurs sélectionnées, libellés, valeurs du sélecteur et métadonnées
Pointeurs vers la référence de configuration
Référence principale :-
Référence de configuration - Slack
Champs Slack à fort signal :
- mode/auth :
mode,botToken,appToken,signingSecret,webhookPath,accounts.* - accès aux messages privés :
dm.enabled,dmPolicy,allowFrom(hérité :dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - option de compatibilité :
dangerouslyAllowNameMatching(dernier recours ; laissez-la désactivée sauf nécessité) - accès aux canaux :
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - fils/historique :
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - livraison :
textChunkLimit,chunkMode,mediaMaxMb,streaming,streaming.nativeTransport - opérations/fonctionnalités :
configWrites,commands.native,slashCommand.*,actions.*,userToken,userTokenReadOnly
- mode/auth :
Dépannage
Aucune réponse dans les canaux
Aucune réponse dans les canaux
Vérifiez, dans l’ordre :
groupPolicy- liste d’autorisation des canaux (
channels.slack.channels) requireMention- liste d’autorisation
userspar canal
Messages privés ignorés
Messages privés ignorés
Vérifiez :
channels.slack.dm.enabledchannels.slack.dmPolicy(ou l’héritéchannels.slack.dm.policy)- approbations d’association / entrées de liste d’autorisation
Le mode socket ne se connecte pas
Le mode socket ne se connecte pas
Validez les jetons bot + app et l’activation de Socket Mode dans les paramètres de l’app Slack.Si
openclaw channels status --probe --json affiche botTokenStatus ou
appTokenStatus: "configured_unavailable", le compte Slack est
configuré mais l’exécution actuelle n’a pas pu résoudre la valeur
fournie via SecretRef.Le mode HTTP ne reçoit pas d’événements
Le mode HTTP ne reçoit pas d’événements
Validez :
- signing secret
- chemin webhook
- URL de requête Slack (Events + Interactivity + Slash Commands)
webhookPathunique par compte HTTP
signingSecretStatus: "configured_unavailable" apparaît dans les
instantanés de compte, le compte HTTP est configuré mais l’exécution actuelle n’a pas pu
résoudre le signing secret fourni via SecretRef.Les commandes natives/slash ne se déclenchent pas
Les commandes natives/slash ne se déclenchent pas
Vérifiez ce que vous vouliez utiliser :
- le mode de commande native (
channels.slack.commands.native: true) avec les slash commands correspondantes enregistrées dans Slack - ou le mode de commande slash unique (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups et les listes d’autorisation de canaux/utilisateurs.