Slack
Statut : prêt pour la production pour les DMs + canaux via des intégrations d’application Slack. Le mode par défaut est Socket Mode ; le mode HTTP Events API est également pris en charge.Pairage
Les DMs Slack utilisent le mode de pairage par défaut.
Commandes slash
Comportement natif des commandes et catalogue des commandes.
Dépannage des canaux
Diagnostics inter-canaux et procédures de réparation.
Configuration rapide
- Socket Mode (par défaut)
- Mode HTTP Events API
Créer l’application Slack et les jetons
Dans les paramètres de l’application Slack :
- activez Socket Mode
- créez un App Token (
xapp-...) avecconnections:write - installez l’application et copiez le Bot Token (
xoxb-...)
S’abonner aux événements de l’application
Abonnez les événements bot pour :
app_mentionmessage.channels,message.groups,message.im,message.mpimreaction_added,reaction_removedmember_joined_channel,member_left_channelchannel_renamepin_added,pin_removed
Checklist du manifeste et des portées
Exemple de manifeste d’application Slack
Exemple de manifeste d’application Slack
Portées optionnelles du jeton utilisateur (opérations de lecture)
Portées optionnelles du jeton utilisateur (opérations de lecture)
Si vous configurez
channels.slack.userToken, les portées de lecture typiques 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 configuration remplacent le repli env.
- Le repli env
SLACK_BOT_TOKEN/SLACK_APP_TOKENs’applique uniquement au compte par défaut. userToken(xoxp-...) est uniquement configurable dans la configuration (pas de repli env) et utilise par défaut un comportement en lecture seule (userTokenReadOnly: true).- Facultatif : ajoutez
chat:write.customizesi vous souhaitez que les messages sortants utilisent l’identité active de l’agent (champusernameet icône personnalisés).icon_emojiutilise la syntaxe:emoji_name:.
- L’inspection de compte Slack suit des champs
*Sourceet*Statuspar identifiant (botToken,appToken,signingSecret,userToken). - Le statut vaut
available,configured_unavailableoumissing. configured_unavailablesignifie que le compte est configuré via SecretRef ou une autre source secrète non inline, mais que le chemin de commande/runtime 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 contrôles
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 DM
- Politique des canaux
- Mentions et utilisateurs des canaux
channels.slack.dmPolicy contrôle l’accès DM (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(par défaut true)channels.slack.allowFrom(préféré)dm.allowFrom(hérité)dm.groupEnabled(par défaut false pour les DMs de groupe)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 DMs sont routés comme
direct; les canaux commechannel; les MPIMs commegroup. - Avec la valeur par défaut
session.dmScope=main, les DMs Slack se replient sur la session principale de l’agent. - Sessions de canal :
agent:<agentId>:slack:channel:<channelId>. - Les réponses dans un fil 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 lorsqu’une nouvelle session de fil démarre (par défaut20; définissez0pour désactiver).
channels.slack.replyToMode:off|first|all(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 des plateformes : les fils Slack masquent les messages du canal, tandis que les réponses Telegram 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 d’aperçu en direct :
off: désactiver le streaming d’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 d’état de progression pendant la génération, puis envoyer le texte final.
channels.slack.nativeStreaming contrôle le streaming de texte natif Slack lorsque streaming vaut partial (par défaut : true).
- Un fil de réponse doit être disponible pour que le streaming de texte natif apparaisse. La sélection du fil suit toujours
replyToMode. Sans cela, l’aperçu de brouillon normal est utilisé. - Les médias et 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.- le booléen
channels.slack.streamingest migré automatiquement verschannels.slack.nativeStreaming.
Repli par réaction de frappe
typingReaction ajoute une réaction temporaire au message Slack entrant pendant qu’OpenClaw traite une réponse, puis la supprime à la fin de l’exécution. C’est surtout utile en dehors des réponses dans un fil, qui utilisent un indicateur par défaut « est en train d’écrire… ».
Ordre de résolution :
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
- Slack attend des shortcodes (par exemple
"hourglass_flowing_sand"). - La réaction est envoyée en meilleur effort et le 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 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 jeton) et écrites dans le magasin de médias lorsque la récupération réussit et que les limites de taille le permettent.La limite de taille entrante du runtime 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(par défaut 4000) channels.slack.chunkMode="newline"active le découpage prioritaire par paragraphes- les envois de fichiers utilisent les API de téléversement Slack et peuvent inclure des réponses dans un fil (
thread_ts) - la limite de médias sortants suit
channels.slack.mediaMaxMblorsqu’elle est configurée ; sinon, les envois de 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 DMschannel:<id>pour les canaux
Commandes et comportement slash
- 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 commandes slash correspondantes dans Slack (noms
/<command>), avec une exception :- enregistrez
/agentstatuspour la commande de statut (Slack réserve/status)
- enregistrez
- 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
- de 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 longues charges utiles d’option, les menus d’arguments des commandes slash 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. Activez-la globalement :[[slack_buttons: Approve:approve, Reject:reject]][[slack_select: Choose a target | Canary:canary, Production:production]]
- Il s’agit d’une interface 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 boutons interactifs et interactions, au lieu de revenir à l’interface Web ou au terminal.- Les approbations exec utilisent
channels.slack.execApprovals.*pour le routage DM/canal natif. - 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 application Slack, les invites d’approbation s’affichent comme des boutons Block Kit directement dans la conversation.
Lorsque ces boutons sont présents, ils constituent l’UX d’approbation principale ; OpenClaw ne doit inclure une commande manuelle /approve que lorsque le résultat de l’outil indique que les approbations par chat ne sont pas disponibles ou que l’approbation manuelle est la seule voie possible.
Chemin de configuration :
channels.slack.execApprovals.enabledchannels.slack.execApprovals.approvers(facultatif ; repli verscommands.ownerAllowFromlorsque possible)channels.slack.execApprovals.target(dm|channel|both, 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 l’activation des approbations natives lorsque des approbateurs sont résolus.
Comportement par défaut sans configuration explicite des approbations exec Slack :
approvals.exec est distinct. Utilisez-le uniquement lorsque les invites d’approbation exec doivent aussi être routées vers d’autres chats 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.
Le /approve dans le même chat fonctionne également dans les canaux et DMs Slack qui prennent déjà en charge les commandes. Consultez Exec approvals pour le modèle complet de transfert des approbations.
Événements et comportement opérationnel
- Les modifications/suppressions de messages et diffusions de fils sont mappées vers des événements système.
- Les événements d’ajout/suppression de réactions sont mappés vers des événements système.
- Les événements d’arrivée/départ de membres, de création/renommage de canal et d’ajout/suppression d’épingles sont mappés vers des é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 de départ d’un fil et l’initialisation du contexte d’historique de fil sont filtrés par les listes d’autorisation d’expéditeurs configurées lorsque cela s’applique.
- Les actions de bloc et interactions modales émettent des événements système structurés
Slack interaction: ...avec des champs de charge utile riches :- actions de bloc : valeurs sélectionnées, libellés, valeurs de 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 de sélecteur et métadonnées
Pointeurs de 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 DM :
dm.enabled,dmPolicy,allowFrom(hérité :dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - bascule de compatibilité :
dangerouslyAllowNameMatching(à n’utiliser qu’en dernier recours ; laissez désactivé sauf nécessité) - accès canal :
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - fils/historique :
replyToMode,replyToModeByChatType,thread.*,historyLimit,dmHistoryLimit,dms.*.historyLimit - livraison :
textChunkLimit,chunkMode,mediaMaxMb,streaming,nativeStreaming - 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 DM ignorés
Messages DM ignorés
Vérifiez :
channels.slack.dm.enabledchannels.slack.dmPolicy(ou l’héritéchannels.slack.dm.policy)- approbations de pairage / 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’application Slack.Si
openclaw channels status --probe --json affiche botTokenStatus ou
appTokenStatus: "configured_unavailable", le compte Slack est
configuré mais le runtime actuel n’a pas pu résoudre la valeur
adossée à SecretRef.Le mode HTTP ne reçoit pas les événements
Le mode HTTP ne reçoit pas les événements
Validez :
- signing secret
- chemin du webhook
- URLs 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 le runtime
actuel n’a pas pu résoudre le signing secret adossé à SecretRef.Les commandes natives/slash ne se déclenchent pas
Les commandes natives/slash ne se déclenchent pas
Vérifiez si vous vouliez :
- le mode de commandes natives (
channels.slack.commands.native: true) avec les commandes slash correspondantes enregistrées dans Slack - ou le mode de commande slash unique (
channels.slack.slashCommand.enabled: true)
commands.useAccessGroups et les listes d’autorisation canal/utilisateur.