Plateformes de messagerie

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.

Installation rapide

{
  channels: {
    slack: {
      enabled: true,
      mode: "socket",
      appToken: "xapp-...",
      botToken: "xoxb-...",
    },
  },
}

Modèle de jetons

  • botToken + appToken sont 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_TOKEN s'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.customize si vous souhaitez que les messages sortants utilisent l'identité de l'agent actif (personnalisation du username et de l'icône). icon_emoji utilise 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: false et 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)
  • allowlist
  • open (nécessite que channels.slack.allowFrom inclue "*" ; 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.allowFrom s'applique uniquement au compte default.
  • Les comptes nommés héritent de channels.slack.allowFrom lorsque leur propre allowFrom n'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 globalement commands.native: true).
  • Lorsque les commandes natives sont activées, enregistrez les commandes slash correspondantes dans Slack (noms /<commande>), avec une exception :
    • enregistrez /agentstatus pour la commande status (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 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: false
  • name: "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 que channel ; les MPIM en tant que group.
  • 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.historyScope par défaut est thread ; thread.inheritParent par défaut est false.
  • channels.slack.thread.initialHistoryLimit contrôle le nombre de messages de fil existants récupérés lorsqu'une nouvelle session de fil démarre (par défaut 20 ; définissez 0 pour désactiver).

Contrôles du threading des réponses :

  • channels.slack.replyToMode : off|first|all (par défaut off)
  • channels.slack.replyToModeByChatType : par direct|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 :

GroupePar défaut
messagesactivé
reactionsactivé
pinsactivé
memberInfoactivé
emojiListactivé

É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.setStatus et nécessitent la portée bot assistant:write.
  • channel_id_changed peut migrer les clés de configuration de canal lorsque configWrites est 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_submission et view_closed avec métadonnées de canal routées et entrées de formulaire

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>.ackReaction
  • channels.slack.ackReaction
  • messages.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>.typingReaction
  • channels.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é vers channels.slack.streaming.
  • le booléen channels.slack.streaming est automatiquement migré vers channels.slack.nativeStreaming.

Prérequis

  1. Activez Agents and AI Apps dans les paramètres de votre app Slack.
  2. Assurez-vous que l'app a la portée assistant:write.
  3. 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

Liens connexes

Synology ChatTelegram