Configuration
Événements ambiants de la pièce
Les événements ambiants de salon permettent à OpenClaw de traiter les conversations de groupe ou de canal sans mention comme un contexte discret. L’agent peut mettre à jour la mémoire et l’état de la session, mais le salon reste silencieux sauf si l’agent appelle explicitement l’outil message.
Pour les discussions de groupe toujours actives, combinez messages.groupChat.unmentionedInbound: "room_event" avec messages.groupChat.visibleReplies: "message_tool". L’agent écoute, décide quand une réponse est utile et n’a jamais besoin de l’ancien modèle d’invite consistant à répondre NO_REPLY.
Pris en charge actuellement : les canaux de serveur Discord, les canaux publics et privés Slack, les messages privés Slack à plusieurs participants ainsi que les groupes et supergroupes Telegram. Les autres canaux de groupe conservent leur comportement existant, sauf si leur page indique qu’ils prennent en charge les événements ambiants de salon.
Configuration recommandée
Définissez le comportement global des discussions de groupe :
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, },}Rendez ensuite le salon toujours actif en désactivant l’obligation de mention pour ce salon. Le salon doit toujours respecter sa groupPolicy habituelle, la liste d’autorisation des salons et celle des expéditeurs.
Après l’enregistrement de la configuration, le Gateway applique à chaud les paramètres messages. Redémarrez uniquement lorsque la surveillance des fichiers ou le rechargement de la configuration est désactivé (gateway.reload.mode: "off").
Ce qui change
Avec messages.groupChat.unmentionedInbound: "room_event" :
- les messages de groupe ou de canal autorisés sans mention deviennent des événements de salon discrets
- les messages avec mention restent des requêtes utilisateur
- les commandes de contrôle textuelles et les commandes natives restent des requêtes utilisateur
- les demandes d’abandon ou d’arrêt restent des requêtes utilisateur
- les messages privés restent des requêtes utilisateur
Les événements de salon utilisent une diffusion visible stricte. Le texte final de l’assistant reste privé. L’agent doit appeler message(action=send) pour publier dans le salon.
Les indications de saisie et les réactions d’état du cycle de vie restent supprimées pour les événements de salon. L’unique exception explicite d’accusé de réception est messages.ackReactionScope: "all", qui envoie la réaction d’accusé de réception configurée ; utilisez une portée plus restreinte ou "off" lorsque le salon doit rester totalement silencieux.
Exemple Discord
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, }, channels: { discord: { groupPolicy: "allowlist", guilds: { "<DISCORD_SERVER_ID>": { requireMention: false, users: ["<YOUR_DISCORD_USER_ID>"], }, }, }, },}Utilisez une configuration Discord par canal lorsqu’un seul canal doit être ambiant. Avec groupPolicy: "allowlist", l’inscription du canal dans la liste l’autorise (enabled: false désactive une entrée) :
{ channels: { discord: { groupPolicy: "allowlist", guilds: { "<DISCORD_SERVER_ID>": { channels: { "<DISCORD_CHANNEL_ID_OR_NAME>": { requireMention: false, }, }, }, }, }, },}Exemple Slack
Les listes d’autorisation des canaux Slack utilisent en priorité les identifiants. Utilisez des identifiants de canal comme C12345678, et non #channel-name. L’inscription du canal sous channels.slack.channels l’autorise (enabled: false désactive une entrée) :
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, }, channels: { slack: { groupPolicy: "allowlist", channels: { "<SLACK_CHANNEL_ID>": { requireMention: false, }, }, }, },}Exemple Telegram
Pour les groupes Telegram, le bot doit pouvoir voir les messages de groupe ordinaires. Si requireMention: false, désactivez le mode de confidentialité de BotFather ou utilisez une autre configuration Telegram qui transmet l’intégralité du trafic du groupe au bot.
{ messages: { groupChat: { unmentionedInbound: "room_event", visibleReplies: "message_tool", historyLimit: 50, }, }, channels: { telegram: { groups: { "<TELEGRAM_GROUP_CHAT_ID>": { groupPolicy: "open", requireMention: false, }, }, }, },}Les identifiants de groupe Telegram sont généralement des nombres négatifs comme -1001234567890. Lisez chat.id dans openclaw logs --follow, transférez un message du groupe à un bot d’aide fournissant les identifiants ou examinez getUpdates de la Bot API.
Politique propre à un agent
Utilisez une substitution propre à l’agent lorsque plusieurs agents partagent le même salon, mais qu’un seul doit traiter les conversations sans mention comme un contexte ambiant :
{ messages: { groupChat: { visibleReplies: "message_tool", }, }, agents: { list: [ { id: "main", groupChat: { unmentionedInbound: "room_event", mentionPatterns: ["@openclaw", "openclaw"], }, }, ], },}La valeur agents.list[].groupChat.unmentionedInbound propre à l’agent remplace messages.groupChat.unmentionedInbound pour cet agent.
Modes de réponse visible
Par défaut, messages.groupChat.visibleReplies vaut "automatic" pour les requêtes utilisateur ordinaires de groupe ou de canal. Conservez cette valeur par défaut lorsque le texte final de l’assistant doit être publié de manière visible sans appel explicite à l’outil de messagerie.
Pour les salons ambiants toujours actifs, messages.groupChat.visibleReplies: "message_tool" reste recommandé, en particulier avec les modèles de dernière génération utilisant les outils de manière fiable, comme GPT-5.6 Sol. Cela permet à l’agent de décider quand intervenir en appelant l’outil de messagerie. Si le modèle renvoie un texte final sans appeler l’outil, OpenClaw conserve ce texte final en privé et journalise les métadonnées de diffusion supprimée.
Les événements de salon restent stricts même lorsque les autres requêtes de groupe utilisent des réponses automatiques. Les événements ambiants de salon sans mention nécessitent toujours message(action=send) pour produire une sortie visible.
Historique
messages.groupChat.historyLimit définit la valeur globale par défaut de l’historique des groupes (50 lorsqu’elle n’est pas définie ; elle doit être un entier positif). Les canaux peuvent la remplacer avec channels.<channel>.historyLimit, et certains canaux prennent également en charge des limites d’historique par compte. Définissez historyLimit: 0 au niveau du canal pour désactiver le contexte de l’historique des groupes pour ce canal.
Les canaux prenant en charge les événements de salon conservent les messages ambiants récents du salon comme contexte. Telegram maintient pour chaque groupe une fenêtre glissante toujours active, limitée par historyLimit ; les tours correspondant à des requêtes utilisateur sélectionnent les entrées postérieures à la dernière réponse enregistrée du bot, tandis que les tours d’événements de salon reçoivent l’intégralité de la fenêtre récente afin que le modèle puisse voir ses propres publications récentes. L’ancienne clé de mode Telegram includeGroupHistoryContext est supprimée par openclaw doctor --fix.
Dépannage
Si le salon affiche une indication de saisie ou une consommation de jetons, mais aucun message visible :
- Vérifiez que le salon est autorisé par la liste d’autorisation du canal et celle des expéditeurs.
- Vérifiez que
requireMention: falseest défini au niveau du salon attendu. - Vérifiez si
messages.groupChat.unmentionedInboundou la substitution de l’agent vaut"room_event". - Examinez les journaux à la recherche de métadonnées de charge utile finale supprimée ou de
didSendViaMessagingTool: false. - Pour les requêtes de groupe ordinaires, conservez ou rétablissez
messages.groupChat.visibleReplies: "automatic"si vous souhaitez publier automatiquement les réponses finales. Pour les salons ambiants utilisantmessage_tool, utilisez un modèle ou un environnement d’exécution qui appelle les outils de manière fiable.
Si les salons ambiants Telegram ne se déclenchent pas du tout, vérifiez le mode de confidentialité de BotFather et assurez-vous que le Gateway reçoit les messages de groupe ordinaires.
Si les salons ambiants Slack ne se déclenchent pas, vérifiez que la clé du canal correspond à l’identifiant du canal Slack et que l’application dispose de la portée d’historique adaptée au type de salon : channels:history (public), groups:history (privé) ou mpim:history (messages privés à plusieurs participants).