Slack
Statut : prêt pour la production pour les messages directs + canaux via les intégrations d'app Slack. Le mode par défaut est le Socket Mode ; le mode HTTP Events API est également pris en charge.
Appairage
Les messages directs Slack utilisent par défaut le mode appairage.
Commandes slash
Comportement natif des commandes et catalogue de commandes.
Dépannage des canaux
Diagnostics inter-canaux et procédures de réparation.
Installation rapide
{
channels: {
slack: {
enabled: true,
mode: "socket",
appToken: "xapp-...",
botToken: "xoxb-...",
},
},
}Modèle de jetons
botToken+appTokensont requis pour le Socket Mode.- Le mode HTTP nécessite
botToken+signingSecret. - Les jetons de configuration écrasent le fallback d'environnement.
- Le fallback d'environnement
SLACK_BOT_TOKEN/SLACK_APP_TOKENs'applique uniquement au compte par défaut. userToken(xoxp-...) est configurable uniquement (pas de fallback d'environnement) et adopte par défaut un comportement en lecture seule (userTokenReadOnly: true).- Optionnel : ajoutez
chat:write.customizesi vous souhaitez que les messages sortants utilisent l'identité de l'agent actif (personnalisation duusernameet de l'icône).icon_emojiutilise la syntaxe:nom_emoji:.
💡 Pour les actions/lectures de répertoire, le jeton utilisateur peut être préféré lorsqu'il est configuré. Pour les écritures, le jeton bot reste préféré ; les écritures avec jeton utilisateur ne sont autorisées que lorsque
userTokenReadOnly: falseet que le jeton bot n'est pas disponible.
Contrôle d'accès et routage
channels.slack.dmPolicy contrôle l'accès aux messages directs (ancienne clé : channels.slack.dm.policy) :
pairing(par défaut)allowlistopen(nécessite quechannels.slack.allowFrominclue"*"; ancienne clé :channels.slack.dm.allowFrom)disabled
Indicateurs pour les messages directs :
dm.enabled(par défaut true)channels.slack.allowFrom(préféré)dm.allowFrom(ancienne clé)dm.groupEnabled(messages directs de groupe par défaut false)dm.groupChannels(allowlist optionnelle pour les MPIM)
Précédence multi-comptes :
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.
L'appairage dans les messages directs utilise openclaw pairing approve slack <code>.
Commandes et comportement slash
- Le mode auto 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 globalementcommands.native: true). - Lorsque les commandes natives sont activées, enregistrez les commandes slash correspondantes dans Slack (noms
/<commande>), avec une exception :- enregistrez
/agentstatuspour la commande status (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 maintenant 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 de Slack, le flux revient aux boutons
- Pour les charges utiles d'options longues, les menus d'arguments des commandes slash utilisent une boîte de dialogue de confirmation avant d'envoyer une valeur sélectionnée.
Paramètres par défaut des commandes slash :
enabled: falsename: "openclaw"sessionPrefix: "slack:slash"ephemeral: true
Les sessions slash utilisent des clés isolées :
agent:<agentId>:slack:slash:<userId>
et acheminent toujours l'exécution de la commande vers la session de conversation cible (CommandTargetSessionKey).
Threading, sessions et balises de réponse
- Les messages directs sont routés en tant que
direct; les canaux en tant quechannel; les MPIM en tant quegroup. - Avec la valeur par défaut
session.dmScope=main, les messages directs Slack sont regroupés dans 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>) le cas échéant. channels.slack.thread.historyScopepar défaut estthread;thread.inheritParentpar défaut estfalse.channels.slack.thread.initialHistoryLimitcontrôle le nombre de messages de fil existants récupérés lorsqu'une nouvelle session de fil démarre (par défaut20; définissez0pour désactiver).
Contrôles du threading des réponses :
channels.slack.replyToMode:off|first|all(par défautoff)channels.slack.replyToModeByChatType: pardirect|group|channel- fallback hérité pour les discussions directes :
channels.slack.dm.replyToMode
Les balises de réponse manuelles sont prises en charge :
[[reply_to_current]][[reply_to:<id>]]
Note : replyToMode="off" désactive tous les threadings de réponse dans Slack, y compris les balises explicites [[reply_to_*]]. Cela diffère de Telegram, où les balises explicites sont toujours honorées en mode "off". La différence reflète les modèles de threading des plateformes : les fils Slack masquent les messages du canal, tandis que les réponses Telegram restent visibles dans le flux principal de la discussion.
Médias, fragmentation et livraison
Actions et portes
Les actions Slack sont contrôlées par channels.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é |
Événements et comportement opérationnel
- Les modifications/suppressions de messages et les diffusions dans les fils 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'épinglage sont mappés en événements système.
- Les mises à jour de statut des fils de l'assistant (pour les indicateurs "est en train d'écrire..." dans les fils) utilisent
assistant.threads.setStatuset nécessitent la portée botassistant:write. channel_id_changedpeut migrer les clés de configuration de canal lorsqueconfigWritesest activé.- Les métadonnées de sujet/objectif 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 structurés
Slack interaction: ...avec des champs de charge utile riches :- actions de bloc : valeurs sélectionnées, étiquettes, 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, étiquettes, valeurs de sélecteur et métadonnées
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- fallback sur l'emoji de l'identité de l'agent (
agents.list[].identity.emoji, sinon ”👀”)
Notes :
- Slack attend des codes courts (par exemple
"eyes"). - Utilisez
""pour désactiver la réaction pour le compte Slack ou globalement.
Fallback de réaction de saisie
typingReaction ajoute une réaction temporaire au message Slack entrant pendant qu'OpenClaw traite une réponse, puis la supprime lorsque l'exécution se termine. C'est un fallback utile lorsque la saisie native de l'assistant Slack n'est pas disponible, notamment dans les messages directs. Ordre de résolution :
channels.slack.accounts.<accountId>.typingReactionchannels.slack.typingReaction
Notes :
- Slack attend des codes courts (par exemple
"hourglass_flowing_sand"). - La réaction est à "best-effort" et le nettoyage est tenté automatiquement après la fin de la réponse ou du chemin d'échec.
Manifeste et checklist des portées
Dépannage
Diffusion de texte en continu
OpenClaw prend en charge la diffusion de texte native Slack via l'API Agents and AI Apps. channels.slack.streaming contrôle le comportement de prévisualisation en direct :
off: désactive la diffusion de prévisualisation en direct.partial(par défaut) : remplace le texte de prévisualisation par la dernière sortie partielle.block: ajoute des mises à jour de prévisualisation par blocs.progress: affiche un texte d'état de progression pendant la génération, puis envoie le texte final.
channels.slack.nativeStreaming contrôle l'API de diffusion native de Slack (chat.startStream / chat.appendStream / chat.stopStream) lorsque streaming est partial (par défaut : true). Désactivez la diffusion native Slack (conservez le comportement de prévisualisation brouillon) :
channels:
slack:
streaming: partial
nativeStreaming: false
Anciennes clés :
channels.slack.streamMode(replace | status_final | append) est automatiquement migré verschannels.slack.streaming.- le booléen
channels.slack.streamingest automatiquement migré verschannels.slack.nativeStreaming.
Prérequis
- Activez Agents and AI Apps dans les paramètres de votre app Slack.
- Assurez-vous que l'app a la portée
assistant:write. - Un fil de réponse doit être disponible pour ce message. La sélection du fil suit toujours
replyToMode.
Comportement
- Le premier fragment de texte démarre un flux (
chat.startStream). - Les fragments de texte suivants s'ajoutent au même flux (
chat.appendStream). - La fin de la réponse finalise le flux (
chat.stopStream). - Les médias et charges utiles non textuelles reviennent à la livraison normale.
- Si la diffusion échoue en cours de réponse, OpenClaw revient à la livraison normale pour les charges utiles restantes.
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 aux messages directs :
dm.enabled,dmPolicy,allowFrom(anciennes clés :dm.policy,dm.allowFrom),dm.groupEnabled,dm.groupChannels - bascule de compatibilité :
dangerouslyAllowNameMatching(break-glass ; gardez désactivé sauf besoin) - accès aux canaux :
groupPolicy,channels.*,channels.*.users,channels.*.requireMention - threading/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 :