diff --git a/docs/fr/channels/discord.md b/docs/fr/channels/discord.md index e19c9a294..41a45ebdd 100644 --- a/docs/fr/channels/discord.md +++ b/docs/fr/channels/discord.md @@ -1,24 +1,24 @@ --- read_when: - Travail sur les fonctionnalités du canal Discord -summary: Statut de prise en charge, capacités et configuration du bot Discord +summary: Statut de prise en charge du bot Discord, capacités et configuration title: Discord x-i18n: - generated_at: "2026-04-08T06:52:59Z" + generated_at: "2026-04-21T17:45:41Z" model: gpt-5.4 provider: openai - source_hash: 3cd2886fad941ae2129e681911309539e9a65a2352b777b538d7f4686a68f73f + source_hash: 1681315a6c246c4b68347f5e22319e132f30ea4e29a19e7d1da9e83dce7b68d0 source_path: channels/discord.md workflow: 15 --- # Discord (API Bot) -Statut : prêt pour les MP et les canaux de serveur via la passerelle Discord officielle. +Statut : prêt pour les messages privés et les canaux de serveur via la passerelle Discord officielle. - - Les MP Discord sont en mode d'appairage par défaut. + + Les messages privés Discord passent par défaut en mode d’association. Comportement natif des commandes et catalogue de commandes. @@ -30,21 +30,21 @@ Statut : prêt pour les MP et les canaux de serveur via la passerelle Discord of ## Configuration rapide -Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre serveur et l'appairer à OpenClaw. Nous vous recommandons d'ajouter votre bot à votre propre serveur privé. Si vous n'en avez pas encore, [créez-en un d'abord](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (choisissez **Create My Own > For me and my friends**). +Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre serveur, puis l’associer à OpenClaw. Nous vous recommandons d’ajouter votre bot à votre propre serveur privé. Si vous n’en avez pas encore, [créez-en un d’abord](https://support.discord.com/hc/en-us/articles/204849977-How-do-I-create-a-server) (choisissez **Create My Own > For me and my friends**). - Accédez au [Portail développeur Discord](https://discord.com/developers/applications) et cliquez sur **New Application**. Donnez-lui un nom comme « OpenClaw ». + Accédez au [Portail Développeur Discord](https://discord.com/developers/applications) et cliquez sur **New Application**. Donnez-lui un nom comme « OpenClaw ». Cliquez sur **Bot** dans la barre latérale. Définissez le **Username** sur le nom que vous donnez à votre agent OpenClaw. - Toujours sur la page **Bot**, faites défiler jusqu'à **Privileged Gateway Intents** et activez : + Toujours sur la page **Bot**, faites défiler jusqu’à **Privileged Gateway Intents** et activez : - - **Message Content Intent** (requis) - - **Server Members Intent** (recommandé ; requis pour les listes d'autorisation de rôles et la correspondance nom-vers-ID) + - **Message Content Intent** (obligatoire) + - **Server Members Intent** (recommandé ; obligatoire pour les listes d’autorisation par rôle et la correspondance nom-vers-ID) - **Presence Intent** (facultatif ; nécessaire uniquement pour les mises à jour de présence) @@ -53,17 +53,17 @@ Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre Revenez en haut de la page **Bot** et cliquez sur **Reset Token**. - Malgré son nom, cela génère votre premier jeton — rien n'est réellement « réinitialisé ». + Malgré son nom, cela génère votre premier jeton — rien n’est réellement « réinitialisé ». - Copiez le jeton et enregistrez-le quelque part. C'est votre **Bot Token** et vous en aurez besoin dans un instant. + Copiez le jeton et enregistrez-le quelque part. C’est votre **Bot Token** et vous en aurez besoin dans un instant. - - Cliquez sur **OAuth2** dans la barre latérale. Vous allez générer une URL d'invitation avec les bonnes autorisations pour ajouter le bot à votre serveur. + + Cliquez sur **OAuth2** dans la barre latérale. Vous allez générer une URL d’invitation avec les bonnes autorisations pour ajouter le bot à votre serveur. - Faites défiler jusqu'à **OAuth2 URL Generator** et activez : + Faites défiler jusqu’à **OAuth2 URL Generator** et activez : - `bot` - `applications.commands` @@ -77,30 +77,30 @@ Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre - Attach Files - Add Reactions (facultatif) - Copiez l'URL générée en bas, collez-la dans votre navigateur, sélectionnez votre serveur, puis cliquez sur **Continue** pour vous connecter. Vous devriez maintenant voir votre bot dans le serveur Discord. + Copiez l’URL générée en bas, collez-la dans votre navigateur, sélectionnez votre serveur, puis cliquez sur **Continue** pour vous connecter. Vous devriez maintenant voir votre bot dans le serveur Discord. - De retour dans l'application Discord, vous devez activer le mode développeur pour pouvoir copier les ID internes. + De retour dans l’application Discord, vous devez activer le mode développeur pour pouvoir copier les ID internes. - 1. Cliquez sur **User Settings** (icône d'engrenage à côté de votre avatar) → **Advanced** → activez **Developer Mode** - 2. Faites un clic droit sur l'**icône de votre serveur** dans la barre latérale → **Copy Server ID** - 3. Faites un clic droit sur **votre propre avatar** → **Copy User ID** + 1. Cliquez sur **User Settings** (icône d’engrenage à côté de votre avatar) → **Advanced** → activez **Developer Mode** + 2. Faites un clic droit sur l’**icône de votre serveur** dans la barre latérale → **Copy Server ID** + 3. Faites un clic droit sur votre **propre avatar** → **Copy User ID** - Enregistrez votre **Server ID** et votre **User ID** avec votre Bot Token — vous enverrez les trois à OpenClaw à l'étape suivante. + Enregistrez votre **Server ID** et votre **User ID** avec votre Bot Token — vous enverrez les trois à OpenClaw à l’étape suivante. - - Pour que l'appairage fonctionne, Discord doit autoriser votre bot à vous envoyer des MP. Faites un clic droit sur l'**icône de votre serveur** → **Privacy Settings** → activez **Direct Messages**. + + Pour que l’association fonctionne, Discord doit autoriser votre bot à vous envoyer des messages privés. Faites un clic droit sur l’**icône de votre serveur** → **Privacy Settings** → activez **Direct Messages**. - Cela permet aux membres du serveur (y compris les bots) de vous envoyer des MP. Gardez cette option activée si vous voulez utiliser les MP Discord avec OpenClaw. Si vous prévoyez uniquement d'utiliser des canaux de serveur, vous pouvez désactiver les MP après l'appairage. + Cela permet aux membres du serveur (y compris les bots) de vous envoyer des messages privés. Laissez cette option activée si vous voulez utiliser les messages privés Discord avec OpenClaw. Si vous prévoyez d’utiliser uniquement des canaux de serveur, vous pouvez désactiver les messages privés après l’association. - - Le jeton de votre bot Discord est un secret (comme un mot de passe). Définissez-le sur la machine qui exécute OpenClaw avant d'envoyer un message à votre agent. + + Le jeton de votre bot Discord est un secret (comme un mot de passe). Définissez-le sur la machine qui exécute OpenClaw avant d’envoyer un message à votre agent. ```bash export DISCORD_BOT_TOKEN="YOUR_BOT_TOKEN" @@ -110,20 +110,20 @@ openclaw config set channels.discord.enabled true --strict-json openclaw gateway ``` - Si OpenClaw s'exécute déjà comme service en arrière-plan, redémarrez-le via l'app Mac OpenClaw ou en arrêtant puis redémarrant le processus `openclaw gateway run`. + Si OpenClaw s’exécute déjà comme service en arrière-plan, redémarrez-le via l’application Mac OpenClaw ou en arrêtant puis en redémarrant le processus `openclaw gateway run`. - + - Discutez avec votre agent OpenClaw sur n'importe quel canal existant (par ex. Telegram) et dites-lui. Si Discord est votre premier canal, utilisez plutôt l'onglet CLI / config. + Discutez avec votre agent OpenClaw sur n’importe quel canal existant (par ex. Telegram) et dites-lui. Si Discord est votre premier canal, utilisez plutôt l’onglet CLI / config. - > « J'ai déjà défini le jeton de mon bot Discord dans la configuration. Merci de terminer la configuration de Discord avec l'ID utilisateur `` et l'ID serveur ``. » + > "J’ai déjà configuré mon jeton de bot Discord dans la config. Merci de terminer la configuration de Discord avec l’User ID `` et le Server ID ``." - Si vous préférez une configuration basée sur un fichier, définissez : + Si vous préférez une config basée sur un fichier, définissez : ```json5 { @@ -140,7 +140,7 @@ openclaw gateway } ``` - Repli env pour le compte par défaut : + Solution de repli d’environnement pour le compte par défaut : ```bash DISCORD_BOT_TOKEN=... @@ -153,14 +153,14 @@ DISCORD_BOT_TOKEN=... - - Attendez que la passerelle soit en cours d'exécution, puis envoyez un MP à votre bot dans Discord. Il répondra avec un code d'appairage. + + Attendez que la passerelle soit en cours d’exécution, puis envoyez un message privé à votre bot dans Discord. Il répondra avec un code d’association. - Envoyez le code d'appairage à votre agent sur votre canal existant : + Envoyez le code d’association à votre agent sur votre canal existant : - > « Approuve ce code d'appairage Discord : `` » + > "Approuve ce code d’association Discord : ``" @@ -172,29 +172,29 @@ openclaw pairing approve discord - Les codes d'appairage expirent après 1 heure. + Les codes d’association expirent après 1 heure. - Vous devriez maintenant pouvoir discuter avec votre agent sur Discord via MP. + Vous devriez maintenant pouvoir discuter avec votre agent en message privé dans Discord. -La résolution des jetons tient compte du compte. Les valeurs de jeton de configuration priment sur le repli env. `DISCORD_BOT_TOKEN` n'est utilisé que pour le compte par défaut. -Pour les appels sortants avancés (outil de message/actions de canal), un `token` explicite par appel est utilisé pour cet appel. Cela s'applique aux actions de type envoi et lecture/sondage (par exemple read/search/fetch/thread/pins/permissions). Les paramètres de politique de compte et de nouvelle tentative proviennent toujours du compte sélectionné dans l'instantané d'exécution actif. +La résolution des jetons tient compte du compte. Les valeurs de jeton dans la config ont priorité sur la solution de repli via les variables d’environnement. `DISCORD_BOT_TOKEN` est utilisé uniquement pour le compte par défaut. +Pour les appels sortants avancés (outil de message/actions de canal), un `token` explicite par appel est utilisé pour cet appel. Cela s’applique aux actions d’envoi et aux actions de type lecture/sondage (par exemple read/search/fetch/thread/pins/permissions). Les paramètres de politique de compte et de nouvelle tentative proviennent toujours du compte sélectionné dans l’instantané d’exécution actif. ## Recommandé : configurer un espace de travail de serveur -Une fois que les MP fonctionnent, vous pouvez configurer votre serveur Discord comme un espace de travail complet où chaque canal obtient sa propre session d'agent avec son propre contexte. C'est recommandé pour les serveurs privés où il n'y a que vous et votre bot. +Une fois que les messages privés fonctionnent, vous pouvez configurer votre serveur Discord comme un espace de travail complet où chaque canal obtient sa propre session d’agent avec son propre contexte. C’est recommandé pour les serveurs privés où il n’y a que vous et votre bot. - - Cela permet à votre agent de répondre dans n'importe quel canal de votre serveur, pas seulement dans les MP. + + Cela permet à votre agent de répondre dans n’importe quel canal de votre serveur, pas seulement dans les messages privés. - > « Ajoute mon ID de serveur Discord `` à la liste d'autorisation des serveurs » + > "Ajoute mon Server ID Discord `` à la liste d’autorisation des serveurs" @@ -220,14 +220,14 @@ Une fois que les MP fonctionnent, vous pouvez configurer votre serveur Discord c - Par défaut, votre agent ne répond dans les canaux de serveur que lorsqu'il est @mentionné. Pour un serveur privé, vous voudrez probablement qu'il réponde à chaque message. + Par défaut, votre agent ne répond dans les canaux de serveur que lorsqu’il est mentionné avec @. Pour un serveur privé, vous voudrez probablement qu’il réponde à chaque message. - > « Autorise mon agent à répondre sur ce serveur sans avoir besoin d'être @mentionné » + > "Autorise mon agent à répondre sur ce serveur sans devoir être @mentionné" - Définissez `requireMention: false` dans votre configuration de serveur : + Définissez `requireMention: false` dans la config de votre serveur : ```json5 { @@ -249,37 +249,37 @@ Une fois que les MP fonctionnent, vous pouvez configurer votre serveur Discord c - Par défaut, la mémoire à long terme (MEMORY.md) n'est chargée que dans les sessions MP. Les canaux de serveur ne chargent pas automatiquement MEMORY.md. + Par défaut, la mémoire à long terme (`MEMORY.md`) n’est chargée que dans les sessions de message privé. Les canaux de serveur ne chargent pas automatiquement `MEMORY.md`. - > « Quand je pose des questions dans des canaux Discord, utilise memory_search ou memory_get si tu as besoin de contexte à long terme depuis MEMORY.md. » + > "Quand je pose des questions dans les canaux Discord, utilise memory_search ou memory_get si tu as besoin de contexte à long terme depuis `MEMORY.md`." - Si vous avez besoin d'un contexte partagé dans chaque canal, placez les instructions stables dans `AGENTS.md` ou `USER.md` (elles sont injectées pour chaque session). Gardez les notes à long terme dans `MEMORY.md` et accédez-y à la demande avec les outils de mémoire. + Si vous avez besoin d’un contexte partagé dans chaque canal, placez les instructions stables dans `AGENTS.md` ou `USER.md` (ils sont injectés dans chaque session). Conservez les notes à long terme dans `MEMORY.md` et accédez-y à la demande avec les outils de mémoire. -Créez maintenant quelques canaux sur votre serveur Discord et commencez à discuter. Votre agent peut voir le nom du canal, et chaque canal obtient sa propre session isolée — vous pouvez donc configurer `#coding`, `#home`, `#research`, ou ce qui convient à votre flux de travail. +Créez maintenant quelques canaux sur votre serveur Discord et commencez à discuter. Votre agent peut voir le nom du canal, et chaque canal reçoit sa propre session isolée — vous pouvez donc configurer `#coding`, `#home`, `#research`, ou tout autre nom adapté à votre flux de travail. -## Modèle d'exécution +## Modèle d’exécution -- La passerelle gère la connexion Discord. +- La Gateway gère la connexion Discord. - Le routage des réponses est déterministe : les réponses entrantes Discord repartent vers Discord. -- Par défaut (`session.dmScope=main`), les discussions directes partagent la session principale de l'agent (`agent:main:main`). +- Par défaut (`session.dmScope=main`), les discussions privées partagent la session principale de l’agent (`agent:main:main`). - Les canaux de serveur utilisent des clés de session isolées (`agent::discord:channel:`). -- Les MP de groupe sont ignorés par défaut (`channels.discord.dm.groupEnabled=false`). -- Les commandes slash natives s'exécutent dans des sessions de commande isolées (`agent::discord:slash:`), tout en transportant `CommandTargetSessionKey` vers la session de conversation routée. +- Les messages privés de groupe sont ignorés par défaut (`channels.discord.dm.groupEnabled=false`). +- Les commandes slash natives s’exécutent dans des sessions de commande isolées (`agent::discord:slash:`), tout en transportant `CommandTargetSessionKey` vers la session de conversation routée. ## Canaux forum -Les canaux forum et média Discord n'acceptent que les publications dans des fils. OpenClaw prend en charge deux façons de les créer : +Les canaux forum et média Discord n’acceptent que les publications dans des fils. OpenClaw prend en charge deux façons de les créer : -- Envoyer un message au parent du forum (`channel:`) pour créer automatiquement un fil. Le titre du fil utilise la première ligne non vide de votre message. -- Utiliser `openclaw message thread create` pour créer un fil directement. Ne passez pas `--message-id` pour les canaux forum. +- Envoyez un message au parent du forum (`channel:`) pour créer automatiquement un fil. Le titre du fil utilise la première ligne non vide de votre message. +- Utilisez `openclaw message thread create` pour créer un fil directement. Ne passez pas `--message-id` pour les canaux forum. Exemple : envoyer au parent du forum pour créer un fil @@ -295,34 +295,34 @@ openclaw message thread create --channel discord --target channel: \ --thread-name "Topic title" --message "Body of the post" ``` -Les parents de forum n'acceptent pas les composants Discord. Si vous avez besoin de composants, envoyez au fil lui-même (`channel:`). +Les parents de forum n’acceptent pas les composants Discord. Si vous avez besoin de composants, envoyez vers le fil lui-même (`channel:`). ## Composants interactifs -OpenClaw prend en charge les conteneurs Discord components v2 pour les messages d'agent. Utilisez l'outil de message avec une charge utile `components`. Les résultats d'interaction sont renvoyés à l'agent comme des messages entrants normaux et suivent les paramètres Discord `replyToMode` existants. +OpenClaw prend en charge les conteneurs de composants Discord v2 pour les messages de l’agent. Utilisez l’outil de message avec une charge utile `components`. Les résultats d’interaction sont renvoyés à l’agent comme des messages entrants normaux et suivent les paramètres Discord `replyToMode` existants. Blocs pris en charge : - `text`, `section`, `separator`, `actions`, `media-gallery`, `file` -- Les rangées d'actions autorisent jusqu'à 5 boutons ou un seul menu de sélection +- Les lignes d’actions autorisent jusqu’à 5 boutons ou un seul menu de sélection - Types de sélection : `string`, `user`, `role`, `mentionable`, `channel` -Par défaut, les composants sont à usage unique. Définissez `components.reusable=true` pour autoriser l'utilisation multiple des boutons, sélections et formulaires jusqu'à leur expiration. +Par défaut, les composants sont à usage unique. Définissez `components.reusable=true` pour permettre aux boutons, sélections et formulaires d’être utilisés plusieurs fois jusqu’à leur expiration. -Pour restreindre qui peut cliquer sur un bouton, définissez `allowedUsers` sur ce bouton (ID utilisateur Discord, tags, ou `*`). Lorsque cette option est configurée, les utilisateurs sans correspondance reçoivent un refus éphémère. +Pour limiter qui peut cliquer sur un bouton, définissez `allowedUsers` sur ce bouton (ID d’utilisateurs Discord, tags, ou `*`). Lorsque c’est configuré, les utilisateurs non correspondants reçoivent un refus éphémère. -Les commandes slash `/model` et `/models` ouvrent un sélecteur de modèle interactif avec des listes déroulantes de fournisseur et de modèle ainsi qu'une étape Submit. La réponse du sélecteur est éphémère et seul l'utilisateur qui l'a invoqué peut l'utiliser. +Les commandes slash `/model` et `/models` ouvrent un sélecteur de modèle interactif avec des listes déroulantes de fournisseur et de modèle, plus une étape Submit. La réponse du sélecteur est éphémère et seul l’utilisateur qui l’a invoqué peut l’utiliser. -Pièces jointes de fichier : +Pièces jointes : -- les blocs `file` doivent pointer vers une référence de pièce jointe (`attachment://`) -- fournissez la pièce jointe via `media`/`path`/`filePath` (fichier unique) ; utilisez `media-gallery` pour plusieurs fichiers -- utilisez `filename` pour remplacer le nom de téléversement lorsqu'il doit correspondre à la référence de pièce jointe +- Les blocs `file` doivent pointer vers une référence de pièce jointe (`attachment://`) +- Fournissez la pièce jointe via `media`/`path`/`filePath` (fichier unique) ; utilisez `media-gallery` pour plusieurs fichiers +- Utilisez `filename` pour remplacer le nom d’envoi lorsqu’il doit correspondre à la référence de pièce jointe Formulaires modaux : -- ajoutez `components.modal` avec jusqu'à 5 champs -- types de champ : `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` +- Ajoutez `components.modal` avec jusqu’à 5 champs +- Types de champs : `text`, `checkbox`, `radio`, `select`, `role-select`, `user-select` - OpenClaw ajoute automatiquement un bouton de déclenchement Exemple : @@ -332,27 +332,27 @@ Exemple : channel: "discord", action: "send", to: "channel:123456789012345678", - message: "Optional fallback text", + message: "Texte de secours facultatif", components: { reusable: true, - text: "Choose a path", + text: "Choisissez un chemin", blocks: [ { type: "actions", buttons: [ { - label: "Approve", + label: "Approuver", style: "success", allowedUsers: ["123456789012345678"], }, - { label: "Decline", style: "danger" }, + { label: "Refuser", style: "danger" }, ], }, { type: "actions", select: { type: "string", - placeholder: "Pick an option", + placeholder: "Choisissez une option", options: [ { label: "Option A", value: "a" }, { label: "Option B", value: "b" }, @@ -361,16 +361,16 @@ Exemple : }, ], modal: { - title: "Details", - triggerLabel: "Open form", + title: "Détails", + triggerLabel: "Ouvrir le formulaire", fields: [ - { type: "text", label: "Requester" }, + { type: "text", label: "Demandeur" }, { type: "select", - label: "Priority", + label: "Priorité", options: [ - { label: "Low", value: "low" }, - { label: "High", value: "high" }, + { label: "Faible", value: "low" }, + { label: "Élevée", value: "high" }, ], }, ], @@ -379,51 +379,51 @@ Exemple : } ``` -## Contrôle d'accès et routage +## Contrôle d’accès et routage - - `channels.discord.dmPolicy` contrôle l'accès aux MP (hérité : `channels.discord.dm.policy`) : + + `channels.discord.dmPolicy` contrôle l’accès aux messages privés (héritage : `channels.discord.dm.policy`) : - `pairing` (par défaut) - `allowlist` - - `open` (nécessite que `channels.discord.allowFrom` inclue `"*"` ; hérité : `channels.discord.dm.allowFrom`) + - `open` (nécessite que `channels.discord.allowFrom` inclue `"*"` ; héritage : `channels.discord.dm.allowFrom`) - `disabled` - Si la politique de MP n'est pas ouverte, les utilisateurs inconnus sont bloqués (ou invités à s'appairer en mode `pairing`). + Si la politique des messages privés n’est pas ouverte, les utilisateurs inconnus sont bloqués (ou invités à s’associer en mode `pairing`). Priorité multi-comptes : - - `channels.discord.accounts.default.allowFrom` s'applique uniquement au compte `default`. - - Les comptes nommés héritent de `channels.discord.allowFrom` lorsque leur propre `allowFrom` n'est pas défini. - - Les comptes nommés n'héritent pas de `channels.discord.accounts.default.allowFrom`. + - `channels.discord.accounts.default.allowFrom` s’applique uniquement au compte `default`. + - Les comptes nommés héritent de `channels.discord.allowFrom` lorsque leur propre `allowFrom` n’est pas défini. + - Les comptes nommés n’héritent pas de `channels.discord.accounts.default.allowFrom`. - Format de cible MP pour la remise : + Format de cible de message privé pour la distribution : - `user:` - mention `<@id>` - Les ID numériques bruts sont ambigus et rejetés sauf si un type de cible utilisateur/canal explicite est fourni. + Les ID numériques seuls sont ambigus et rejetés, sauf si un type de cible utilisateur/canal explicite est fourni. - + La gestion des serveurs est contrôlée par `channels.discord.groupPolicy` : - `open` - `allowlist` - `disabled` - La base sécurisée quand `channels.discord` existe est `allowlist`. + La base sécurisée lorsque `channels.discord` existe est `allowlist`. Comportement de `allowlist` : - le serveur doit correspondre à `channels.discord.guilds` (`id` préféré, slug accepté) - - listes d'autorisation facultatives d'expéditeur : `users` (ID stables recommandés) et `roles` (ID de rôle uniquement) ; si l'une ou l'autre est configurée, les expéditeurs sont autorisés lorsqu'ils correspondent à `users` OU `roles` - - la correspondance directe par nom/tag est désactivée par défaut ; activez `channels.discord.dangerouslyAllowNameMatching: true` uniquement comme mode de compatibilité de secours - - les noms/tags sont pris en charge pour `users`, mais les ID sont plus sûrs ; `openclaw security audit` avertit lorsque des entrées de nom/tag sont utilisées + - listes d’autorisation facultatives pour les expéditeurs : `users` (ID stables recommandés) et `roles` (ID de rôles uniquement) ; si l’un ou l’autre est configuré, les expéditeurs sont autorisés lorsqu’ils correspondent à `users` OU `roles` + - la correspondance directe par nom/tag est désactivée par défaut ; activez `channels.discord.dangerouslyAllowNameMatching: true` uniquement comme mode de compatibilité de dernier recours + - les noms/tags sont pris en charge pour `users`, mais les ID sont plus sûrs ; `openclaw security audit` émet un avertissement lorsque des entrées nom/tag sont utilisées - si un serveur a `channels` configuré, les canaux non listés sont refusés - - si un serveur n'a pas de bloc `channels`, tous les canaux de ce serveur autorisé sont autorisés + - si un serveur n’a pas de bloc `channels`, tous les canaux de ce serveur présent dans la liste d’autorisation sont autorisés Exemple : @@ -449,33 +449,33 @@ Exemple : } ``` - Si vous définissez uniquement `DISCORD_BOT_TOKEN` et ne créez pas de bloc `channels.discord`, le comportement de repli à l'exécution est `groupPolicy="allowlist"` (avec un avertissement dans les journaux), même si `channels.defaults.groupPolicy` est `open`. + Si vous définissez seulement `DISCORD_BOT_TOKEN` sans créer de bloc `channels.discord`, la valeur de repli à l’exécution est `groupPolicy="allowlist"` (avec un avertissement dans les journaux), même si `channels.defaults.groupPolicy` est `open`. - - Les messages de serveur sont soumis aux mentions par défaut. + + Les messages de serveur sont filtrés par mention par défaut. - La détection de mention inclut : + La détection des mentions inclut : - mention explicite du bot - - motifs de mention configurés (`agents.list[].groupChat.mentionPatterns`, repli `messages.groupChat.mentionPatterns`) - - comportement implicite de réponse-au-bot dans les cas pris en charge + - motifs de mention configurés (`agents.list[].groupChat.mentionPatterns`, repli sur `messages.groupChat.mentionPatterns`) + - comportement implicite de réponse au bot dans les cas pris en charge `requireMention` est configuré par serveur/canal (`channels.discord.guilds...`). - `ignoreOtherMentions` ignore éventuellement les messages qui mentionnent un autre utilisateur/rôle mais pas le bot (hors @everyone/@here). + `ignoreOtherMentions` supprime facultativement les messages qui mentionnent un autre utilisateur/rôle mais pas le bot (hors @everyone/@here). - MP de groupe : + Messages privés de groupe : - par défaut : ignorés (`dm.groupEnabled=false`) - - liste d'autorisation facultative via `dm.groupChannels` (ID de canal ou slugs) + - liste d’autorisation facultative via `dm.groupChannels` (ID ou slugs de canaux) -### Routage d'agent basé sur les rôles +### Routage d’agent basé sur les rôles -Utilisez `bindings[].match.roles` pour router les membres d'un serveur Discord vers différents agents par ID de rôle. Les liaisons basées sur les rôles acceptent uniquement les ID de rôle et sont évaluées après les liaisons pair ou pair parent, et avant les liaisons serveur seules. Si une liaison définit aussi d'autres champs de correspondance (par exemple `peer` + `guildId` + `roles`), tous les champs configurés doivent correspondre. +Utilisez `bindings[].match.roles` pour router les membres d’un serveur Discord vers différents agents selon l’ID de rôle. Les liaisons basées sur les rôles acceptent uniquement les ID de rôle et sont évaluées après les liaisons pair ou parent-peer et avant les liaisons serveur seules. Si une liaison définit aussi d’autres champs de correspondance (par exemple `peer` + `guildId` + `roles`), tous les champs configurés doivent correspondre. ```json5 { @@ -499,12 +499,12 @@ Utilisez `bindings[].match.roles` pour router les membres d'un serveur Discord v } ``` -## Configuration du Portail développeur +## Configuration du Portail Développeur - + - 1. Portail développeur Discord -> **Applications** -> **New Application** + 1. Portail Développeur Discord -> **Applications** -> **New Application** 2. **Bot** -> **Add Bot** 3. Copiez le jeton du bot @@ -516,12 +516,12 @@ Utilisez `bindings[].match.roles` pour router les membres d'un serveur Discord v - Message Content Intent - Server Members Intent (recommandé) - L'intent de présence est facultatif et uniquement requis si vous voulez recevoir des mises à jour de présence. Définir la présence du bot (`setPresence`) ne nécessite pas d'activer les mises à jour de présence pour les membres. + L’intent de présence est facultatif et n’est requis que si vous voulez recevoir des mises à jour de présence. Définir la présence du bot (`setPresence`) ne nécessite pas d’activer les mises à jour de présence pour les membres. - Générateur d'URL OAuth : + Générateur d’URL OAuth : - scopes : `bot`, `applications.commands` @@ -543,20 +543,20 @@ Utilisez `bindings[].match.roles` pour router les membres d'un serveur Discord v - ID du serveur - ID du canal - - ID de l'utilisateur + - ID de l’utilisateur - Préférez les ID numériques dans la configuration OpenClaw pour des audits et sondages fiables. + Préférez les ID numériques dans la config OpenClaw pour des audits et des sondages fiables. ## Commandes natives et authentification des commandes -- `commands.native` vaut par défaut `"auto"` et est activé pour Discord. +- `commands.native` vaut `"auto"` par défaut et est activé pour Discord. - Remplacement par canal : `channels.discord.commands.native`. - `commands.native=false` efface explicitement les commandes natives Discord précédemment enregistrées. -- L'authentification des commandes natives utilise les mêmes listes d'autorisation/politiques Discord que la gestion normale des messages. -- Les commandes peuvent quand même être visibles dans l'interface Discord pour les utilisateurs non autorisés ; l'exécution applique toujours l'authentification OpenClaw et renvoie « non autorisé ». +- L’authentification des commandes natives utilise les mêmes listes d’autorisation/politiques Discord que le traitement normal des messages. +- Les commandes peuvent tout de même être visibles dans l’interface Discord pour les utilisateurs non autorisés ; l’exécution applique toujours l’authentification OpenClaw et renvoie « non autorisé ». Voir [Commandes slash](/fr/tools/slash-commands) pour le catalogue et le comportement des commandes. @@ -568,7 +568,7 @@ Paramètres par défaut des commandes slash : - Discord prend en charge les balises de réponse dans la sortie de l'agent : + Discord prend en charge les balises de réponse dans la sortie de l’agent : - `[[reply_to_current]]` - `[[reply_to:]]` @@ -580,26 +580,27 @@ Paramètres par défaut des commandes slash : - `all` - `batched` - Remarque : `off` désactive le threading implicite des réponses. Les balises explicites `[[reply_to_*]]` sont toujours respectées. + Remarque : `off` désactive l’enchaînement implicite des réponses. Les balises explicites `[[reply_to_*]]` sont toujours respectées. `first` attache toujours la référence de réponse native implicite au premier message Discord sortant du tour. - `batched` attache uniquement la référence de réponse native implicite de Discord lorsque le - tour entrant était un lot temporisé de plusieurs messages. Cela est utile - si vous voulez des réponses natives surtout pour les discussions ambiguës et chargées, pas pour chaque - tour à message unique. + `batched` n’attache la référence de réponse native implicite de Discord que lorsque le + tour entrant était un lot débouncé de plusieurs messages. C’est utile + lorsque vous voulez des réponses natives principalement pour les discussions + ambiguës et soudaines, pas pour chaque tour composé d’un seul message. - Les ID de message sont exposés dans le contexte/l'historique afin que les agents puissent cibler des messages spécifiques. + Les ID de message sont exposés dans le contexte/l’historique afin que les agents puissent cibler des messages précis. - OpenClaw peut diffuser des brouillons de réponse en envoyant un message temporaire puis en le modifiant à mesure que le texte arrive. + OpenClaw peut diffuser les brouillons de réponse en envoyant un message temporaire et en le modifiant à mesure que le texte arrive. - - `channels.discord.streaming` contrôle la diffusion d'aperçu (`off` | `partial` | `block` | `progress`, par défaut : `off`). - - La valeur par défaut reste `off` car les modifications d'aperçu Discord peuvent rapidement atteindre les limites de débit, surtout lorsque plusieurs bots ou passerelles partagent le même compte ou trafic de serveur. - - `progress` est accepté pour la cohérence inter-canaux et est mappé vers `partial` sur Discord. + - `channels.discord.streaming` contrôle la diffusion d’aperçu (`off` | `partial` | `block` | `progress`, par défaut : `off`). + - La valeur par défaut reste `off` car les modifications d’aperçu Discord peuvent rapidement atteindre les limites de débit, en particulier lorsque plusieurs bots ou passerelles partagent le même compte ou le même trafic de serveur. + - `progress` est accepté pour cohérence inter-canaux et correspond à `partial` sur Discord. - `channels.discord.streamMode` est un alias hérité et est migré automatiquement. - - `partial` modifie un seul message d'aperçu à mesure que les jetons arrivent. - - `block` émet des morceaux de taille brouillon (utilisez `draftChunk` pour ajuster la taille et les points de coupure). + - `partial` modifie un seul message d’aperçu à mesure que les jetons arrivent. + - `block` émet des segments de taille brouillon (utilisez `draftChunk` pour ajuster la taille et les points de coupure). + - `streaming.preview.toolProgress` contrôle si les mises à jour d’outil/progression réutilisent le même message d’aperçu de brouillon (par défaut : `true`). Définissez `false` pour conserver des messages séparés pour l’outil/la progression. Exemple : @@ -613,7 +614,7 @@ Paramètres par défaut des commandes slash : } ``` - Valeurs par défaut de découpage en mode `block` (bornées par `channels.discord.textChunkLimit`) : + Valeurs par défaut de segmentation du mode `block` (bornées par `channels.discord.textChunkLimit`) : ```json5 { @@ -630,21 +631,21 @@ Paramètres par défaut des commandes slash : } ``` - La diffusion d'aperçu est uniquement textuelle ; les réponses média reviennent à la remise normale. + La diffusion d’aperçu est réservée au texte ; les réponses média reviennent au mode de distribution normal. - Remarque : la diffusion d'aperçu est distincte de la diffusion par blocs. Lorsque la diffusion par blocs est explicitement - activée pour Discord, OpenClaw ignore le flux d'aperçu pour éviter une double diffusion. + Remarque : la diffusion d’aperçu est distincte de la diffusion par blocs. Lorsque la diffusion par blocs est explicitement + activée pour Discord, OpenClaw ignore le flux d’aperçu pour éviter une double diffusion. - Contexte d'historique de serveur : + Contexte d’historique des serveurs : - `channels.discord.historyLimit` par défaut `20` - repli : `messages.groupChat.historyLimit` - `0` désactive - Contrôles d'historique des MP : + Contrôles d’historique des messages privés : - `channels.discord.dmHistoryLimit` - `channels.discord.dms[""].historyLimit` @@ -652,25 +653,25 @@ Paramètres par défaut des commandes slash : Comportement des fils : - les fils Discord sont routés comme des sessions de canal - - les métadonnées du fil parent peuvent être utilisées pour le lien vers la session parente - - la configuration du fil hérite de la configuration du canal parent sauf si une entrée spécifique au fil existe + - les métadonnées du fil parent peuvent être utilisées pour la liaison à la session parent + - la config du fil hérite de la config du canal parent sauf si une entrée spécifique au fil existe - Les sujets de canal sont injectés comme contexte **non fiable** (pas comme prompt système). - Le contexte des réponses et messages cités reste actuellement tel que reçu. - Les listes d'autorisation Discord servent principalement à contrôler qui peut déclencher l'agent, et non comme frontière complète de masquage de contexte supplémentaire. + Les sujets de canal sont injectés comme contexte **non fiable** (et non comme prompt système). + Le contexte des réponses et des messages cités reste actuellement tel qu’il a été reçu. + Les listes d’autorisation Discord servent principalement à filtrer qui peut déclencher l’agent, et non comme frontière complète de masquage du contexte supplémentaire. - - Discord peut lier un fil à une cible de session afin que les messages de suivi dans ce fil continuent d'être routés vers la même session (y compris les sessions de sous-agent). + + Discord peut lier un fil à une cible de session afin que les messages de suivi dans ce fil continuent d’être routés vers la même session (y compris les sessions de sous-agents). Commandes : - `/focus ` lie le fil actuel/nouveau à une cible de sous-agent/session - `/unfocus` supprime la liaison du fil actuel - - `/agents` affiche les exécutions actives et l'état des liaisons - - `/session idle ` inspecte/met à jour la suppression automatique de liaison par inactivité pour les liaisons focalisées - - `/session max-age ` inspecte/met à jour l'âge maximal strict pour les liaisons focalisées + - `/agents` affiche les exécutions actives et l’état des liaisons + - `/session idle ` inspecte/met à jour la suppression automatique du focus après inactivité pour les liaisons focalisées + - `/session max-age ` inspecte/met à jour l’âge maximal strict pour les liaisons focalisées Config : @@ -698,24 +699,24 @@ Paramètres par défaut des commandes slash : Remarques : - - `session.threadBindings.*` définit les valeurs par défaut globales. - - `channels.discord.threadBindings.*` remplace le comportement de Discord. - - `spawnSubagentSessions` doit être true pour créer/lier automatiquement des fils pour `sessions_spawn({ thread: true })`. - - `spawnAcpSessions` doit être true pour créer/lier automatiquement des fils pour ACP (`/acp spawn ... --thread ...` ou `sessions_spawn({ runtime: "acp", thread: true })`). - - Si les liaisons de fils sont désactivées pour un compte, `/focus` et les opérations liées aux liaisons de fils ne sont pas disponibles. + - `session.threadBindings.*` définit les valeurs globales par défaut. + - `channels.discord.threadBindings.*` remplace le comportement Discord. + - `spawnSubagentSessions` doit être à true pour créer/lier automatiquement des fils pour `sessions_spawn({ thread: true })`. + - `spawnAcpSessions` doit être à true pour créer/lier automatiquement des fils pour ACP (`/acp spawn ... --thread ...` ou `sessions_spawn({ runtime: "acp", thread: true })`). + - Si les liaisons de fil sont désactivées pour un compte, `/focus` et les opérations liées aux liaisons de fil ne sont pas disponibles. Voir [Sous-agents](/fr/tools/subagents), [Agents ACP](/fr/tools/acp-agents) et [Référence de configuration](/fr/gateway/configuration-reference). - - Pour des espaces de travail ACP stables « toujours actifs », configurez des liaisons ACP typées de niveau supérieur ciblant des conversations Discord. + + Pour des espaces de travail ACP stables « toujours actifs », configurez des liaisons ACP typées de niveau supérieur ciblant les conversations Discord. Chemin de configuration : - - `bindings[]` avec `type: "acp"` et `match.channel: "discord"` +- `bindings[]` avec `type: "acp"` et `match.channel: "discord"` - Exemple : +Exemple : ```json5 { @@ -765,43 +766,43 @@ Paramètres par défaut des commandes slash : Remarques : - - `/acp spawn codex --bind here` lie le canal ou fil Discord actuel sur place et garde les messages futurs routés vers la même session ACP. - - Cela peut quand même signifier « démarrer une nouvelle session ACP Codex », mais cela ne crée pas de nouveau fil Discord à lui seul. Le canal existant reste la surface de discussion. - - Codex peut toujours s'exécuter dans son propre `cwd` ou espace de travail backend sur disque. Cet espace de travail est un état d'exécution, pas un fil Discord. - - Les messages de fil peuvent hériter de la liaison ACP du canal parent. + - `/acp spawn codex --bind here` lie le canal ou le fil Discord actuel sur place et conserve le routage des messages futurs vers la même session ACP. + - Cela peut toujours signifier « démarrer une nouvelle session ACP Codex », mais cela ne crée pas en soi un nouveau fil Discord. Le canal existant reste la surface de discussion. + - Codex peut néanmoins s’exécuter dans son propre `cwd` ou espace de travail de backend sur disque. Cet espace de travail est un état d’exécution, pas un fil Discord. + - Les messages du fil peuvent hériter de la liaison ACP du canal parent. - Dans un canal ou fil lié, `/new` et `/reset` réinitialisent la même session ACP sur place. - - Les liaisons temporaires de fils fonctionnent toujours et peuvent remplacer la résolution de la cible tant qu'elles sont actives. - - `spawnAcpSessions` n'est requis que lorsque OpenClaw doit créer/lier un fil enfant via `--thread auto|here`. Ce n'est pas requis pour `/acp spawn ... --bind here` dans le canal actuel. + - Les liaisons temporaires de fil fonctionnent toujours et peuvent remplacer la résolution de la cible tant qu’elles sont actives. + - `spawnAcpSessions` n’est requis que lorsque OpenClaw doit créer/lier un fil enfant via `--thread auto|here`. Il n’est pas requis pour `/acp spawn ... --bind here` dans le canal actuel. - Voir [Agents ACP](/fr/tools/acp-agents) pour les détails du comportement des liaisons. + Voir [Agents ACP](/fr/tools/acp-agents) pour les détails du comportement de liaison. - Mode de notification des réactions par serveur : + Mode de notification de réaction par serveur : - `off` - `own` (par défaut) - `all` - `allowlist` (utilise `guilds..users`) - Les événements de réaction sont transformés en événements système et joints à la session Discord routée. + Les événements de réaction sont transformés en événements système et attachés à la session Discord routée. - - `ackReaction` envoie un emoji d'accusé de réception pendant que OpenClaw traite un message entrant. + + `ackReaction` envoie un emoji d’accusé de réception pendant qu’OpenClaw traite un message entrant. Ordre de résolution : - `channels.discord.accounts..ackReaction` - `channels.discord.ackReaction` - `messages.ackReaction` - - repli sur l'emoji d'identité de l'agent (`agents.list[].identity.emoji`, sinon "👀") + - solution de repli sur l’emoji d’identité de l’agent (`agents.list[].identity.emoji`, sinon "👀") Remarques : - - Discord accepte les emoji unicode ou les noms d'emoji personnalisés. + - Discord accepte les emoji Unicode ou les noms d’emoji personnalisés. - Utilisez `""` pour désactiver la réaction pour un canal ou un compte. @@ -825,8 +826,8 @@ Paramètres par défaut des commandes slash : - - Routez le trafic WebSocket de la passerelle Discord et les recherches REST de démarrage (ID d'application + résolution de liste d'autorisation) via un proxy HTTP(S) avec `channels.discord.proxy`. + + Routez le trafic WebSocket de la Gateway Discord et les recherches REST au démarrage (ID d’application + résolution de liste d’autorisation) via un proxy HTTP(S) avec `channels.discord.proxy`. ```json5 { @@ -857,7 +858,7 @@ Paramètres par défaut des commandes slash : - Activez la résolution PluralKit pour mapper les messages relayés à l'identité du membre du système : + Activez la résolution PluralKit pour mapper les messages relayés à l’identité d’un membre du système : ```json5 { @@ -865,7 +866,7 @@ Paramètres par défaut des commandes slash : discord: { pluralkit: { enabled: true, - token: "pk_live_...", // optional; needed for private systems + token: "pk_live_...", // facultatif ; nécessaire pour les systèmes privés }, }, }, @@ -874,17 +875,17 @@ Paramètres par défaut des commandes slash : Remarques : - - les listes d'autorisation peuvent utiliser `pk:` - - les noms d'affichage des membres sont mis en correspondance par nom/slug uniquement lorsque `channels.discord.dangerouslyAllowNameMatching: true` - - les recherches utilisent l'ID du message d'origine et sont limitées par fenêtre temporelle + - les listes d’autorisation peuvent utiliser `pk:` + - les noms d’affichage des membres sont mis en correspondance par nom/slug uniquement lorsque `channels.discord.dangerouslyAllowNameMatching: true` + - les recherches utilisent l’ID du message d’origine et sont limitées à une fenêtre de temps - si la recherche échoue, les messages relayés sont traités comme des messages de bot et ignorés sauf si `allowBots=true` - Les mises à jour de présence sont appliquées lorsque vous définissez un champ d'état ou d'activité, ou lorsque vous activez la présence automatique. + Les mises à jour de présence sont appliquées lorsque vous définissez un champ de statut ou d’activité, ou lorsque vous activez la présence automatique. - Exemple état uniquement : + Exemple avec statut uniquement : ```json5 { @@ -896,26 +897,26 @@ Paramètres par défaut des commandes slash : } ``` - Exemple d'activité (le statut personnalisé est le type d'activité par défaut) : + Exemple d’activité (le statut personnalisé est le type d’activité par défaut) : ```json5 { channels: { discord: { - activity: "Focus time", + activity: "Temps de concentration", activityType: 4, }, }, } ``` - Exemple de streaming : + Exemple de diffusion : ```json5 { channels: { discord: { - activity: "Live coding", + activity: "Codage en direct", activityType: 1, activityUrl: "https://twitch.tv/openclaw", }, @@ -923,16 +924,16 @@ Paramètres par défaut des commandes slash : } ``` - Correspondance des types d'activité : + Correspondance des types d’activité : - 0 : Playing - 1 : Streaming (nécessite `activityUrl`) - 2 : Listening - 3 : Watching - - 4 : Custom (utilise le texte d'activité comme état du statut ; emoji facultatif) + - 4 : Custom (utilise le texte d’activité comme état du statut ; l’emoji est facultatif) - 5 : Competing - Exemple de présence automatique (signal d'état d'exécution) : + Exemple de présence automatique (signal de santé d’exécution) : ```json5 { @@ -942,14 +943,14 @@ Paramètres par défaut des commandes slash : enabled: true, intervalMs: 30000, minUpdateIntervalMs: 15000, - exhaustedText: "token exhausted", + exhaustedText: "jeton épuisé", }, }, }, } ``` - La présence automatique mappe la disponibilité d'exécution vers l'état Discord : sain => online, dégradé ou inconnu => idle, épuisé ou indisponible => dnd. Remplacements de texte facultatifs : + La présence automatique mappe la disponibilité d’exécution au statut Discord : sain => online, dégradé ou inconnu => idle, épuisé ou indisponible => dnd. Remplacements de texte facultatifs : - `autoPresence.healthyText` - `autoPresence.degradedText` @@ -958,50 +959,50 @@ Paramètres par défaut des commandes slash : - Discord prend en charge le traitement des approbations via boutons en MP et peut éventuellement publier les invites d'approbation dans le canal d'origine. + Discord prend en charge la gestion des approbations via boutons dans les messages privés et peut éventuellement publier les demandes d’approbation dans le canal d’origine. Chemin de configuration : - `channels.discord.execApprovals.enabled` - - `channels.discord.execApprovals.approvers` (facultatif ; utilise `commands.ownerAllowFrom` comme repli lorsque possible) + - `channels.discord.execApprovals.approvers` (facultatif ; revient à `commands.ownerAllowFrom` lorsque possible) - `channels.discord.execApprovals.target` (`dm` | `channel` | `both`, par défaut : `dm`) - `agentFilter`, `sessionFilter`, `cleanupAfterResolve` - Discord active automatiquement les approbations d'exécution natives lorsque `enabled` n'est pas défini ou vaut `"auto"` et qu'au moins un approbateur peut être résolu, soit depuis `execApprovals.approvers`, soit depuis `commands.ownerAllowFrom`. Discord ne déduit pas les approbateurs d'exécution à partir de `allowFrom` du canal, de `dm.allowFrom` hérité, ni de `defaultTo` des messages directs. Définissez `enabled: false` pour désactiver explicitement Discord comme client d'approbation natif. + Discord active automatiquement les approbations d’exécution natives lorsque `enabled` n’est pas défini ou vaut `"auto"` et qu’au moins un approbateur peut être résolu, soit depuis `execApprovals.approvers`, soit depuis `commands.ownerAllowFrom`. Discord ne déduit pas les approbateurs d’exécution à partir de `allowFrom` du canal, de l’ancien `dm.allowFrom`, ni de `defaultTo` des messages privés. Définissez `enabled: false` pour désactiver explicitement Discord comme client d’approbation natif. - Lorsque `target` vaut `channel` ou `both`, l'invite d'approbation est visible dans le canal. Seuls les approbateurs résolus peuvent utiliser les boutons ; les autres utilisateurs reçoivent un refus éphémère. Les invites d'approbation incluent le texte de la commande, donc n'activez la remise dans le canal que dans des canaux de confiance. Si l'ID du canal ne peut pas être dérivé de la clé de session, OpenClaw revient à la remise par MP. + Lorsque `target` vaut `channel` ou `both`, la demande d’approbation est visible dans le canal. Seuls les approbateurs résolus peuvent utiliser les boutons ; les autres utilisateurs reçoivent un refus éphémère. Les demandes d’approbation incluent le texte de la commande, donc n’activez la distribution dans le canal que dans des canaux de confiance. Si l’ID du canal ne peut pas être dérivé de la clé de session, OpenClaw revient à la distribution par message privé. - Discord affiche également les boutons d'approbation partagés utilisés par d'autres canaux de chat. L'adaptateur Discord natif ajoute principalement le routage des MP d'approbateur et la diffusion en éventail vers les canaux. - Lorsque ces boutons sont présents, ils constituent l'expérience 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 sont indisponibles ou que l'approbation manuelle est la seule voie possible. + Discord affiche également les boutons d’approbation partagés utilisés par d’autres canaux de discussion. L’adaptateur Discord natif ajoute principalement le routage DM vers les approbateurs et la diffusion dans le canal. + Lorsque ces boutons sont présents, ils constituent l’expérience 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. - L'authentification de la passerelle pour ce gestionnaire utilise le même contrat partagé de résolution des identifiants que les autres clients de la passerelle : + L’authentification Gateway pour ce gestionnaire utilise le même contrat partagé de résolution des identifiants que les autres clients Gateway : - - authentification locale env-first (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` puis `gateway.auth.*`) - - en mode local, `gateway.remote.*` peut être utilisé comme repli uniquement lorsque `gateway.auth.*` n'est pas défini ; les SecretRef locaux configurés mais non résolus échouent en mode fermé - - prise en charge du mode distant via `gateway.remote.*` le cas échéant - - les remplacements d'URL sont sûrs vis-à-vis des remplacements : les remplacements CLI ne réutilisent pas d'identifiants implicites, et les remplacements env utilisent uniquement des identifiants env + - authentification locale prioritaire via env (`OPENCLAW_GATEWAY_TOKEN` / `OPENCLAW_GATEWAY_PASSWORD` puis `gateway.auth.*`) + - en mode local, `gateway.remote.*` peut être utilisé comme solution de repli uniquement lorsque `gateway.auth.*` n’est pas défini ; les SecretRef locaux configurés mais non résolus échouent en fermeture + - prise en charge du mode distant via `gateway.remote.*` lorsque applicable + - les remplacements d’URL sont sûrs vis-à-vis des remplacements : les remplacements CLI ne réutilisent pas d’identifiants implicites, et les remplacements env utilisent uniquement les identifiants d’environnement Comportement de résolution des approbations : - - Les ID préfixés par `plugin:` sont résolus via `plugin.approval.resolve`. - - Les autres ID sont résolus via `exec.approval.resolve`. - - Discord n'effectue pas ici de saut de repli supplémentaire exec-vers-plugin ; le préfixe - de l'ID décide de la méthode de passerelle qu'il appelle. + - les ID préfixés par `plugin:` sont résolus via `plugin.approval.resolve`. + - les autres ID sont résolus via `exec.approval.resolve`. + - Discord n’effectue pas ici de saut de repli supplémentaire d’exec vers plugin ; le + préfixe de l’ID décide de la méthode Gateway appelée. - Les approbations d'exécution expirent après 30 minutes par défaut. Si les approbations échouent avec - des ID d'approbation inconnus, vérifiez la résolution des approbateurs, l'activation de la fonctionnalité, et - que le type d'ID d'approbation remis correspond bien à la demande en attente. + Les approbations d’exécution expirent après 30 minutes par défaut. Si les approbations échouent avec + des ID d’approbation inconnus, vérifiez la résolution des approbateurs, l’activation de la fonctionnalité et + que le type d’ID d’approbation distribué correspond à la demande en attente. - Documentation associée : [Approbations d'exécution](/fr/tools/exec-approvals) + Documentation associée : [Approbations d’exécution](/fr/tools/exec-approvals) -## Outils et contrôles d'actions +## Outils et barrières d’actions -Les actions de message Discord incluent la messagerie, l'administration de canal, la modération, la présence et les actions de métadonnées. +Les actions de message Discord incluent la messagerie, l’administration des canaux, la modération, la présence et les actions sur les métadonnées. Exemples principaux : @@ -1010,26 +1011,26 @@ Exemples principaux : - modération : `timeout`, `kick`, `ban` - présence : `setPresence` -L'action `event-create` accepte un paramètre `image` facultatif (URL ou chemin de fichier local) pour définir l'image de couverture de l'événement planifié. +L’action `event-create` accepte un paramètre `image` facultatif (URL ou chemin de fichier local) pour définir l’image de couverture de l’événement planifié. -Les contrôles d'actions se trouvent sous `channels.discord.actions.*`. +Les barrières d’actions se trouvent sous `channels.discord.actions.*`. -Comportement par défaut des contrôles : +Comportement par défaut des barrières : -| Groupe d'actions | Par défaut | +| Groupe d’actions | Par défaut | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | | reactions, messages, threads, pins, polls, search, memberInfo, roleInfo, channelInfo, channels, voiceStatus, events, stickers, emojiUploads, stickerUploads, permissions | activé | | roles | désactivé | | moderation | désactivé | | presence | désactivé | -## UI Components v2 +## Interface composants v2 -OpenClaw utilise Discord components v2 pour les approbations d'exécution et les marqueurs inter-contexte. Les actions de message Discord peuvent également accepter `components` pour une UI personnalisée (avancé ; nécessite la construction d'une charge utile de composant via l'outil discord), tandis que les `embeds` hérités restent disponibles mais ne sont pas recommandés. +OpenClaw utilise les composants Discord v2 pour les approbations d’exécution et les marqueurs inter-contexte. Les actions de message Discord peuvent également accepter `components` pour une interface personnalisée (avancé ; nécessite de construire une charge utile de composant via l’outil discord), tandis que les `embeds` hérités restent disponibles mais ne sont pas recommandés. -- `channels.discord.ui.components.accentColor` définit la couleur d'accent utilisée par les conteneurs de composants Discord (hex). +- `channels.discord.ui.components.accentColor` définit la couleur d’accent utilisée par les conteneurs de composants Discord (hex). - Définissez-la par compte avec `channels.discord.accounts..ui.components.accentColor`. -- `embeds` sont ignorés lorsque des components v2 sont présents. +- `embeds` sont ignorés lorsque des composants v2 sont présents. Exemple : @@ -1049,17 +1050,17 @@ Exemple : ## Canaux vocaux -OpenClaw peut rejoindre des canaux vocaux Discord pour des conversations continues en temps réel. Cela est distinct des pièces jointes de message vocal. +OpenClaw peut rejoindre des canaux vocaux Discord pour des conversations continues en temps réel. Cela est distinct des pièces jointes de messages vocaux. Exigences : - Activez les commandes natives (`commands.native` ou `channels.discord.commands.native`). - Configurez `channels.discord.voice`. -- Le bot a besoin des autorisations Connect + Speak dans le canal vocal cible. +- Le bot doit disposer des autorisations Connect + Speak dans le canal vocal cible. -Utilisez la commande native Discord uniquement `/vc join|leave|status` pour contrôler les sessions. La commande utilise l'agent par défaut du compte et suit les mêmes règles de liste d'autorisation et de politique de groupe que les autres commandes Discord. +Utilisez la commande native réservée à Discord `/vc join|leave|status` pour contrôler les sessions. La commande utilise l’agent par défaut du compte et suit les mêmes règles de liste d’autorisation et de politique de serveur que les autres commandes Discord. -Exemple de jonction automatique : +Exemple d’auto-rejoint : ```json5 { @@ -1088,21 +1089,21 @@ Exemple de jonction automatique : Remarques : - `voice.tts` remplace `messages.tts` uniquement pour la lecture vocale. -- Les tours de transcription vocale dérivent le statut de propriétaire à partir de Discord `allowFrom` (ou `dm.allowFrom`) ; les intervenants non propriétaires ne peuvent pas accéder aux outils réservés au propriétaire (par exemple `gateway` et `cron`). +- Les tours de transcription vocale dérivent le statut de propriétaire depuis `allowFrom` de Discord (ou `dm.allowFrom`) ; les locuteurs non propriétaires ne peuvent pas accéder aux outils réservés au propriétaire (par exemple `gateway` et `cron`). - La voix est activée par défaut ; définissez `channels.discord.voice.enabled=false` pour la désactiver. -- `voice.daveEncryption` et `voice.decryptionFailureTolerance` sont transmis aux options de jonction `@discordjs/voice`. +- `voice.daveEncryption` et `voice.decryptionFailureTolerance` sont transmis aux options de jonction de `@discordjs/voice`. - Les valeurs par défaut de `@discordjs/voice` sont `daveEncryption=true` et `decryptionFailureTolerance=24` si elles ne sont pas définies. - OpenClaw surveille également les échecs de déchiffrement à la réception et récupère automatiquement en quittant puis en rejoignant à nouveau le canal vocal après des échecs répétés dans une courte fenêtre. -- Si les journaux de réception affichent de façon répétée `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, il peut s'agir du bug de réception amont `@discordjs/voice` suivi dans [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). +- Si les journaux de réception affichent de manière répétée `DecryptionFailed(UnencryptedWhenPassthroughDisabled)`, il peut s’agir du bug de réception `@discordjs/voice` en amont suivi dans [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419). ## Messages vocaux -Les messages vocaux Discord affichent un aperçu de forme d'onde et nécessitent de l'audio OGG/Opus ainsi que des métadonnées. OpenClaw génère automatiquement la forme d'onde, mais il a besoin de `ffmpeg` et `ffprobe` disponibles sur l'hôte de la passerelle pour inspecter et convertir les fichiers audio. +Les messages vocaux Discord affichent un aperçu de forme d’onde et nécessitent de l’audio OGG/Opus ainsi que des métadonnées. OpenClaw génère automatiquement la forme d’onde, mais a besoin de `ffmpeg` et `ffprobe` disponibles sur l’hôte de la Gateway pour inspecter et convertir les fichiers audio. Exigences et contraintes : -- Fournissez un **chemin de fichier local** (les URL sont refusées). -- Omettez le contenu texte (Discord n'autorise pas le texte + message vocal dans la même charge utile). +- Fournissez un **chemin de fichier local** (les URL sont rejetées). +- Omettez le contenu texte (Discord n’autorise pas le texte + message vocal dans la même charge utile). - Tout format audio est accepté ; OpenClaw convertit en OGG/Opus si nécessaire. Exemple : @@ -1114,20 +1115,20 @@ message(action="send", channel="discord", target="channel:123", path="/path/to/a ## Dépannage - + - activez Message Content Intent - activez Server Members Intent lorsque vous dépendez de la résolution utilisateur/membre - - redémarrez la passerelle après avoir modifié les intents + - redémarrez la Gateway après avoir modifié les intents - vérifiez `groupPolicy` - - vérifiez la liste d'autorisation du serveur sous `channels.discord.guilds` + - vérifiez la liste d’autorisation des serveurs sous `channels.discord.guilds` - si la map `channels` du serveur existe, seuls les canaux listés sont autorisés - - vérifiez le comportement `requireMention` et les motifs de mention + - vérifiez le comportement de `requireMention` et les motifs de mention Vérifications utiles : @@ -1139,16 +1140,16 @@ openclaw logs --follow - - Causes fréquentes : + + Causes courantes : - - `groupPolicy="allowlist"` sans liste d'autorisation correspondante de serveur/canal - - `requireMention` configuré au mauvais endroit (doit se trouver sous `channels.discord.guilds` ou dans l'entrée du canal) - - expéditeur bloqué par la liste d'autorisation `users` du serveur/canal + - `groupPolicy="allowlist"` sans liste d’autorisation serveur/canal correspondante + - `requireMention` configuré au mauvais endroit (doit être sous `channels.discord.guilds` ou dans l’entrée du canal) + - expéditeur bloqué par la liste d’autorisation `users` du serveur/canal - + Journaux typiques : @@ -1161,7 +1162,7 @@ openclaw logs --follow - compte unique : `channels.discord.eventQueue.listenerTimeout` - multi-comptes : `channels.discord.accounts..eventQueue.listenerTimeout` - Paramètre de délai d'expiration d'exécution du worker : + Paramètre de délai d’expiration d’exécution du worker : - compte unique : `channels.discord.inboundWorker.runTimeoutMs` - multi-comptes : `channels.discord.accounts..inboundWorker.runTimeoutMs` @@ -1188,82 +1189,82 @@ openclaw logs --follow } ``` - Utilisez `eventQueue.listenerTimeout` pour les initialisations de listener lentes et `inboundWorker.runTimeoutMs` - uniquement si vous voulez une soupape de sécurité distincte pour les tours d'agent en file d'attente. + Utilisez `eventQueue.listenerTimeout` pour une initialisation lente du listener et `inboundWorker.runTimeoutMs` + uniquement si vous voulez une soupape de sécurité distincte pour les tours d’agent mis en file d’attente. - - Les vérifications d'autorisations `channels status --probe` ne fonctionnent que pour les ID de canal numériques. + + Les vérifications d’autorisations de `channels status --probe` ne fonctionnent que pour les ID numériques de canaux. - Si vous utilisez des clés slug, la correspondance à l'exécution peut toujours fonctionner, mais le sondage ne peut pas vérifier complètement les autorisations. + Si vous utilisez des clés slug, la correspondance à l’exécution peut toujours fonctionner, mais la sonde ne peut pas vérifier complètement les autorisations. - + - - MP désactivés : `channels.discord.dm.enabled=false` - - politique MP désactivée : `channels.discord.dmPolicy="disabled"` (hérité : `channels.discord.dm.policy`) - - en attente d'approbation d'appairage en mode `pairing` + - messages privés désactivés : `channels.discord.dm.enabled=false` + - politique des messages privés désactivée : `channels.discord.dmPolicy="disabled"` (héritage : `channels.discord.dm.policy`) + - en attente d’approbation d’association en mode `pairing` - + Par défaut, les messages rédigés par des bots sont ignorés. - Si vous définissez `channels.discord.allowBots=true`, utilisez des règles strictes de mention et de liste d'autorisation pour éviter les comportements de boucle. - Préférez `channels.discord.allowBots="mentions"` pour n'accepter que les messages de bots qui mentionnent le bot. + Si vous définissez `channels.discord.allowBots=true`, utilisez des règles strictes de mention et de liste d’autorisation pour éviter un comportement en boucle. + Préférez `channels.discord.allowBots="mentions"` pour n’accepter que les messages de bots qui mentionnent le bot. - + - gardez OpenClaw à jour (`openclaw update`) afin que la logique de récupération de réception vocale Discord soit présente - confirmez `channels.discord.voice.daveEncryption=true` (par défaut) - - partez de `channels.discord.voice.decryptionFailureTolerance=24` (valeur par défaut amont) et ajustez uniquement si nécessaire + - partez de `channels.discord.voice.decryptionFailureTolerance=24` (valeur par défaut en amont) et ajustez uniquement si nécessaire - surveillez les journaux pour : - `discord voice: DAVE decrypt failures detected` - `discord voice: repeated decrypt failures; attempting rejoin` - - si les échecs continuent après la reconnexion automatique, collectez les journaux et comparez-les à [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) + - si les échecs persistent après la reconnexion automatique, collectez les journaux et comparez avec [discord.js #11419](https://github.com/discordjs/discord.js/issues/11419) -## Indications de référence de configuration +## Pointeurs vers la référence de configuration Référence principale : - [Référence de configuration - Discord](/fr/gateway/configuration-reference#discord) -Champs Discord à fort signal : +Champs Discord à fort impact : - démarrage/auth : `enabled`, `token`, `accounts.*`, `allowBots` - politique : `groupPolicy`, `dm.*`, `guilds.*`, `guilds.*.channels.*` - commande : `commands.native`, `commands.useAccessGroups`, `configWrites`, `slashCommand.*` -- file d'événements : `eventQueue.listenerTimeout` (budget du listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` +- file d’événements : `eventQueue.listenerTimeout` (budget du listener), `eventQueue.maxQueueSize`, `eventQueue.maxConcurrency` - worker entrant : `inboundWorker.runTimeoutMs` - réponse/historique : `replyToMode`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit` -- remise : `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` -- streaming : `streaming` (alias hérité : `streamMode`), `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` +- distribution : `textChunkLimit`, `chunkMode`, `maxLinesPerMessage` +- diffusion : `streaming` (alias hérité : `streamMode`), `streaming.preview.toolProgress`, `draftChunk`, `blockStreaming`, `blockStreamingCoalesce` - média/nouvelle tentative : `mediaMaxMb`, `retry` - - `mediaMaxMb` plafonne les téléversements Discord sortants (par défaut : `100MB`) + - `mediaMaxMb` limite les téléversements Discord sortants (par défaut : `100MB`) - actions : `actions.*` - présence : `activity`, `status`, `activityType`, `activityUrl` -- UI : `ui.components.accentColor` +- interface : `ui.components.accentColor` - fonctionnalités : `threadBindings`, `bindings[]` de niveau supérieur (`type: "acp"`), `pluralkit`, `execApprovals`, `intents`, `agentComponents`, `heartbeat`, `responsePrefix` ## Sécurité et opérations - Traitez les jetons de bot comme des secrets (`DISCORD_BOT_TOKEN` de préférence dans les environnements supervisés). -- Accordez le minimum d'autorisations Discord nécessaire. -- Si le déploiement/l'état des commandes est obsolète, redémarrez la passerelle et revérifiez avec `openclaw channels status --probe`. +- Accordez le minimum d’autorisations Discord nécessaires. +- Si le déploiement/l’état des commandes est obsolète, redémarrez la Gateway et revérifiez avec `openclaw channels status --probe`. -## Liens associés +## Liens connexes -- [Appairage](/fr/channels/pairing) +- [Association](/fr/channels/pairing) - [Groupes](/fr/channels/groups) - [Routage des canaux](/fr/channels/channel-routing) - [Sécurité](/fr/gateway/security) -- [Routage multi-agent](/fr/concepts/multi-agent) +- [Routage multi-agents](/fr/concepts/multi-agent) - [Dépannage](/fr/channels/troubleshooting) - [Commandes slash](/fr/tools/slash-commands) diff --git a/docs/fr/channels/slack.md b/docs/fr/channels/slack.md index 8ae3d70e4..56431ee81 100644 --- a/docs/fr/channels/slack.md +++ b/docs/fr/channels/slack.md @@ -4,17 +4,17 @@ read_when: summary: Configuration de Slack et comportement à l’exécution (Socket Mode + URL de requête HTTP) title: Slack x-i18n: - generated_at: "2026-04-21T13:35:21Z" + generated_at: "2026-04-21T17:45:44Z" model: gpt-5.4 provider: openai - source_hash: 2fe3c3c344e1c20c09b29773f4f68d2790751e76d8bbaa3c6157e3ff75978acf + source_hash: f30b372a3ae10b7b649532181306e42792aca76b41422516e9633eb79f73f009 source_path: channels/slack.md workflow: 15 --- # Slack -Statut : prêt pour la production pour les messages privés et les canaux via les intégrations d’application Slack. Le mode par défaut est Socket Mode ; les URL de requête HTTP sont également prises en charge. +Statut : prêt pour la production pour les messages privés + canaux via les intégrations d’application Slack. Le mode par défaut est Socket Mode ; les URL de requête HTTP sont également prises en charge. @@ -24,7 +24,7 @@ Statut : prêt pour la production pour les messages privés et les canaux via l Comportement natif des commandes et catalogue des commandes. - Diagnostics inter-canaux et guides de réparation. + Diagnostics inter-canaux et procédures de réparation. @@ -34,12 +34,12 @@ Statut : prêt pour la production pour les messages privés et les canaux via l - Dans les paramètres de l’application Slack, appuyez sur le bouton **[Create New App](https://api.slack.com/apps/new)** : + Dans les paramètres de l’application Slack, appuyez sur le bouton **[Create New App](https://api.slack.com/apps/new)** : - choisissez **from a manifest** et sélectionnez un espace de travail pour votre application - - collez le [manifeste d’exemple](#manifest-and-scope-checklist) ci-dessous et continuez pour créer - - générez un **jeton de niveau application** (`xapp-...`) avec `connections:write` - - installez l’application et copiez le **jeton du bot** (`xoxb-...`) affiché + - collez le [manifeste d’exemple](#manifest-and-scope-checklist) ci-dessous et continuez pour créer l’application + - générez un **App-Level Token** (`xapp-...`) avec `connections:write` + - installez l’application et copiez le **Bot Token** (`xoxb-...`) affiché @@ -57,7 +57,7 @@ Statut : prêt pour la production pour les messages privés et les canaux via l } ``` - Solution de repli via les variables d’environnement (compte par défaut uniquement) : + Variable d’environnement de secours (compte par défaut uniquement) : ```bash SLACK_APP_TOKEN=xapp-... @@ -80,12 +80,12 @@ openclaw gateway - Dans les paramètres de l’application Slack, appuyez sur le bouton **[Create New App](https://api.slack.com/apps/new)** : + Dans les paramètres de l’application Slack, appuyez sur le bouton **[Create New App](https://api.slack.com/apps/new)** : - choisissez **from a manifest** et sélectionnez un espace de travail pour votre application - - collez le [manifeste d’exemple](#manifest-and-scope-checklist) et mettez à jour les URL avant de créer - - enregistrez le **secret de signature** pour la vérification des requêtes - - installez l’application et copiez le **jeton du bot** (`xoxb-...`) affiché + - collez le [manifeste d’exemple](#manifest-and-scope-checklist) et mettez à jour les URL avant de créer l’application + - enregistrez le **Signing Secret** pour la vérification des requêtes + - installez l’application et copiez le **Bot Token** (`xoxb-...`) affiché @@ -106,9 +106,9 @@ openclaw gateway ``` - Utilisez des chemins de Webhook uniques pour le HTTP multi-compte + Utilisez des chemins de Webhook uniques pour le mode HTTP multi-comptes - Attribuez à chaque compte un `webhookPath` distinct (par défaut `/slack/events`) afin que les enregistrements n’entrent pas en collision. + Donnez à chaque compte un `webhookPath` distinct (par défaut `/slack/events`) afin que les enregistrements n’entrent pas en conflit. @@ -125,7 +125,7 @@ openclaw gateway -## Liste de vérification du manifeste et des portées +## Liste de vérification du manifeste et des scopes @@ -289,19 +289,19 @@ openclaw gateway -### Paramètres de manifeste supplémentaires +### Paramètres supplémentaires du manifeste Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-dessus. - Plusieurs [commandes slash natives](#commands-and-slash-behavior) peuvent être utilisées au lieu d’une seule commande configurée, avec quelques nuances : + Plusieurs [commandes slash natives](#commands-and-slash-behavior) peuvent être utilisées à la place d’une seule commande configurée, avec quelques nuances : - Utilisez `/agentstatus` au lieu de `/status`, car la commande `/status` est réservée. - - Il n’est pas possible de rendre plus de 25 commandes slash disponibles en même temps. + - Il n’est pas possible de rendre disponibles plus de 25 commandes slash à la fois. - Remplacez votre section existante `features.slash_commands` par un sous-ensemble des [commandes disponibles](/fr/tools/slash-commands#command-list) : + Remplacez votre section `features.slash_commands` existante par un sous-ensemble des [commandes disponibles](/fr/tools/slash-commands#command-list) : @@ -338,7 +338,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/verbose", - "description": "Activer ou désactiver la sortie verbeuse", + "description": "Activer ou désactiver la sortie détaillée", "usage_hint": "on|off|full" }, { @@ -358,7 +358,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/exec", - "description": "Afficher ou définir les valeurs par défaut d’exécution", + "description": "Afficher ou définir les valeurs par défaut d’exec", "usage_hint": "host= security= ask= node=" }, { @@ -386,7 +386,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/agentstatus", - "description": "Afficher l’état d’exécution, y compris l’utilisation/le quota du fournisseur lorsque disponible" + "description": "Afficher l’état d’exécution, y compris l’utilisation/le quota du fournisseur lorsqu’il est disponible" }, { "command": "/tasks", @@ -403,7 +403,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/skill", - "description": "Exécuter une Skills par nom", + "description": "Exécuter une skill par nom", "usage_hint": " [input]" }, { @@ -413,7 +413,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/usage", - "description": "Contrôler le pied de page d’utilisation ou afficher le récapitulatif des coûts", + "description": "Contrôler le pied de page d’utilisation ou afficher le résumé des coûts", "usage_hint": "off|tokens|full|cost" } ] @@ -460,7 +460,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/verbose", - "description": "Activer ou désactiver la sortie verbeuse", + "description": "Activer ou désactiver la sortie détaillée", "usage_hint": "on|off|full", "url": "https://gateway-host.example.com/slack/events" }, @@ -484,7 +484,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/exec", - "description": "Afficher ou définir les valeurs par défaut d’exécution", + "description": "Afficher ou définir les valeurs par défaut d’exec", "usage_hint": "host= security= ask= node=", "url": "https://gateway-host.example.com/slack/events" }, @@ -518,7 +518,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/agentstatus", - "description": "Afficher l’état d’exécution, y compris l’utilisation/le quota du fournisseur lorsque disponible", + "description": "Afficher l’état d’exécution, y compris l’utilisation/le quota du fournisseur lorsqu’il est disponible", "url": "https://gateway-host.example.com/slack/events" }, { @@ -539,7 +539,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/skill", - "description": "Exécuter une Skills par nom", + "description": "Exécuter une skill par nom", "usage_hint": " [input]", "url": "https://gateway-host.example.com/slack/events" }, @@ -551,7 +551,7 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d }, { "command": "/usage", - "description": "Contrôler le pied de page d’utilisation ou afficher le récapitulatif des coûts", + "description": "Contrôler le pied de page d’utilisation ou afficher le résumé des coûts", "usage_hint": "off|tokens|full|cost", "url": "https://gateway-host.example.com/slack/events" } @@ -562,14 +562,14 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d - - Ajoutez la portée de 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’application Slack. + + Ajoutez le scope bot `chat:write.customize` si vous voulez 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’application Slack. - Si vous utilisez une icône emoji, Slack attend la syntaxe `:nom_emoji:`. + Si vous utilisez une icône emoji, Slack attend la syntaxe `:emoji_name:`. - - Si vous configurez `channels.slack.userToken`, les portées de lecture habituelles sont : + + Si vous configurez `channels.slack.userToken`, les scopes de lecture typiques sont : - `channels:history`, `groups:history`, `im:history`, `mpim:history` - `channels:read`, `groups:read`, `im:read`, `mpim:read` @@ -585,64 +585,64 @@ Exposez différentes fonctionnalités qui étendent les valeurs par défaut ci-d ## Modèle de jeton - `botToken` + `appToken` sont requis pour Socket Mode. -- Le mode HTTP requiert `botToken` + `signingSecret`. -- `botToken`, `appToken`, `signingSecret` et `userToken` acceptent des chaînes en clair - ou des objets SecretRef. -- Les jetons de configuration remplacent la solution de repli via les variables d’environnement. -- La solution de repli via `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` ne s’applique qu’au compte par défaut. -- `userToken` (`xoxp-...`) est uniquement configurable dans la configuration (pas de solution de repli via variable d’environnement) et utilise par défaut un comportement en lecture seule (`userTokenReadOnly: true`). +- Le mode HTTP nécessite `botToken` + `signingSecret`. +- `botToken`, `appToken`, `signingSecret` et `userToken` acceptent des chaînes + en clair ou des objets SecretRef. +- Les jetons de configuration remplacent la variable d’environnement de secours. +- La variable d’environnement de secours `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` s’applique uniquement au compte par défaut. +- `userToken` (`xoxp-...`) est uniquement configurable dans la configuration (pas de variable d’environnement de secours) et utilise par défaut un comportement en lecture seule (`userTokenReadOnly: true`). -Comportement de l’instantané d’état : +Comportement de l’instantané d’état : - L’inspection du compte Slack suit les champs `*Source` et `*Status` par identifiant (`botToken`, `appToken`, `signingSecret`, `userToken`). - L’état est `available`, `configured_unavailable` ou `missing`. - `configured_unavailable` signifie que le compte est configuré via SecretRef - ou une autre source de secret non inline, mais que le chemin actuel de commande/d’exécution - n’a pas pu résoudre la valeur réelle. -- En mode HTTP, `signingSecretStatus` est inclus ; en Socket Mode, la + ou une autre source de secret non inline, mais que la commande/le chemin + d’exécution actuel n’a pas pu résoudre la valeur réelle. +- En mode HTTP, `signingSecretStatus` est inclus ; en Socket Mode, la paire requise est `botTokenStatus` + `appTokenStatus`. -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 prioritaire ; les écritures avec jeton utilisateur ne sont autorisées que lorsque `userTokenReadOnly: false` et que le jeton bot est indisponible. +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 prioritaire ; les écritures avec jeton utilisateur ne sont autorisées que lorsque `userTokenReadOnly: false` et que le jeton bot n’est pas disponible. ## Actions et contrôles Les actions Slack sont contrôlées par `channels.slack.actions.*`. -Groupes d’actions disponibles dans les outils Slack actuels : +Groupes d’actions disponibles dans l’outillage Slack actuel : -| Group | Default | -| ---------- | ------- | -| messages | enabled | -| reactions | enabled | -| pins | enabled | -| memberInfo | enabled | -| emojiList | enabled | +| Groupe | Par défaut | +| ---------- | ---------- | +| messages | activé | +| reactions | activé | +| pins | activé | +| memberInfo | activé | +| emojiList | activé | -Les actions actuelles sur les messages Slack comprennent `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` et `emoji-list`. +Les actions de message Slack actuelles incluent `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info` et `emoji-list`. ## Contrôle d’accès et routage - - `channels.slack.dmPolicy` contrôle l’accès aux messages privés (hérité : `channels.slack.dm.policy`) : + + `channels.slack.dmPolicy` contrôle l’accès aux messages privés (hérité : `channels.slack.dm.policy`) : - `pairing` (par défaut) - `allowlist` - - `open` (nécessite que `channels.slack.allowFrom` inclue `"*"` ; hérité : `channels.slack.dm.allowFrom`) + - `open` (nécessite que `channels.slack.allowFrom` inclue `"*"` ; hérité : `channels.slack.dm.allowFrom`) - `disabled` - Indicateurs des messages privés : + Drapeaux de message privé : - `dm.enabled` (par défaut true) - `channels.slack.allowFrom` (préféré) - `dm.allowFrom` (hérité) - - `dm.groupEnabled` (messages privés de groupe par défaut à false) + - `dm.groupEnabled` (messages privés de groupe désactivés par défaut) - `dm.groupChannels` (liste d’autorisation MPIM facultative) - Priorité multi-compte : + Priorité 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. @@ -652,35 +652,35 @@ Les actions actuelles sur les messages Slack comprennent `send`, `upload-file`, - - `channels.slack.groupPolicy` contrôle la gestion des canaux : + + `channels.slack.groupPolicy` contrôle la gestion des canaux : - `open` - `allowlist` - `disabled` - La liste d’autorisation des canaux se trouve sous `channels.slack.channels` et doit utiliser des identifiants de canal stables. + La liste d’autorisation des canaux se trouve sous `channels.slack.channels` et doit utiliser des ID de canal stables. - Note d’exécution : si `channels.slack` est complètement absent (configuration uniquement via variables d’environnement), l’exécution revient à `groupPolicy="allowlist"` et consigne un avertissement (même si `channels.defaults.groupPolicy` est défini). + Remarque d’exécution : si `channels.slack` est complètement absent (configuration via variables d’environnement uniquement), l’exécution revient à `groupPolicy="allowlist"` et journalise un avertissement (même si `channels.defaults.groupPolicy` est défini). - Résolution nom/ID : + Résolution nom/ID : - - les entrées de liste d’autorisation de canal et de message privé sont résolues au démarrage lorsque l’accès par jeton le permet - - les entrées non résolues par nom de canal sont conservées telles que configurées mais ignorées pour le routage par défaut - - l’autorisation entrante et le routage des canaux utilisent par défaut les ID d’abord ; la correspondance directe par nom d’utilisateur/slug nécessite `channels.slack.dangerouslyAllowNameMatching: true` + - les entrées de liste d’autorisation de canaux et de messages privés sont résolues au démarrage lorsque l’accès au jeton le permet + - les entrées de nom de canal non résolues sont conservées telles que configurées mais ignorées pour le routage par défaut + - l’autorisation entrante et le routage des canaux utilisent les ID en priorité par défaut ; la correspondance directe par nom d’utilisateur/slug nécessite `channels.slack.dangerouslyAllowNameMatching: true` Les messages de canal sont filtrés par mention par défaut. - Sources de mention : + Sources de mention : - mention explicite de l’application (`<@botId>`) - motifs regex de mention (`agents.list[].groupChat.mentionPatterns`, repli `messages.groupChat.mentionPatterns`) - - comportement implicite de réponse au bot dans un fil (désactivé lorsque `thread.requireExplicitMention` vaut `true`) + - comportement implicite de réponse dans un fil au bot (désactivé lorsque `thread.requireExplicitMention` vaut `true`) - Contrôles par canal (`channels.slack.channels.` ; noms uniquement via résolution au démarrage ou `dangerouslyAllowNameMatching`) : + Contrôles par canal (`channels.slack.channels.` ; noms uniquement via résolution au démarrage ou `dangerouslyAllowNameMatching`) : - `requireMention` - `users` (liste d’autorisation) @@ -688,69 +688,70 @@ Les actions actuelles sur les messages Slack comprennent `send`, `upload-file`, - `skills` - `systemPrompt` - `tools`, `toolsBySender` - - format des clés `toolsBySender` : `id:`, `e164:`, `username:`, `name:` ou wildcard `"*"` - (les clés héritées sans préfixe sont toujours mappées vers `id:` uniquement) + - format de clé `toolsBySender` : `id:`, `e164:`, `username:`, `name:` ou joker `"*"` + (les clés héritées sans préfixe correspondent toujours uniquement à `id:`) ## Fils, sessions et balises de réponse -- Les messages privés sont routés comme `direct` ; les canaux comme `channel` ; les MPIM comme `group`. +- Les messages privés sont routés comme `direct` ; les canaux comme `channel` ; les MPIM comme `group`. - 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::slack:channel:`. +- Sessions de canal : `agent::slack:channel:`. - Les réponses dans un fil peuvent créer des suffixes de session de fil (`:thread:`) lorsque cela s’applique. -- `channels.slack.thread.historyScope` vaut par défaut `thread` ; `thread.inheritParent` vaut par défaut `false`. -- `channels.slack.thread.initialHistoryLimit` contrôle le nombre de messages existants du fil récupérés au démarrage d’une nouvelle session de fil (par défaut `20` ; définissez `0` pour désactiver). -- `channels.slack.thread.requireExplicitMention` (par défaut `false`) : lorsque défini à `true`, supprime les mentions implicites dans le fil afin que le bot ne réponde qu’aux mentions explicites `@bot` à l’intérieur des fils, même si le bot a déjà participé au fil. Sans cela, les réponses dans un fil auquel le bot a participé contournent le filtrage `requireMention`. +- La valeur par défaut de `channels.slack.thread.historyScope` est `thread` ; la valeur par défaut de `thread.inheritParent` est `false`. +- `channels.slack.thread.initialHistoryLimit` contrôle combien de messages existants du fil sont récupérés lorsqu’une nouvelle session de fil démarre (valeur par défaut `20` ; définissez `0` pour désactiver). +- `channels.slack.thread.requireExplicitMention` (par défaut `false`) : lorsque défini à `true`, supprime les mentions implicites dans les fils afin que le bot ne réponde qu’aux mentions explicites `@bot` dans 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 filtrage `requireMention`. -Contrôles de réponse en fil : +Contrôles du fil de réponse : - `channels.slack.replyToMode`: `off|first|all|batched` (par défaut `off`) -- `channels.slack.replyToModeByChatType` : par `direct|group|channel` -- solution de repli héritée pour les chats directs : `channels.slack.dm.replyToMode` +- `channels.slack.replyToModeByChatType`: par `direct|group|channel` +- repli hérité pour les discussions directes : `channels.slack.dm.replyToMode` -Les balises de réponse manuelles sont prises en charge : +Les balises de réponse manuelles sont prises en charge : - `[[reply_to_current]]` - `[[reply_to:]]` -Remarque : `replyToMode="off"` désactive **tout** le threading 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 fil des plateformes : les fils Slack masquent les messages du canal, tandis que les réponses Telegram restent visibles dans le flux principal de la conversation. +Remarque : `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. +`ackReaction` envoie un emoji d’accusé de réception pendant que OpenClaw traite un message entrant. -Ordre de résolution : +Ordre de résolution : - `channels.slack.accounts..ackReaction` - `channels.slack.ackReaction` - `messages.ackReaction` -- repli vers l’emoji de l’identité de l’agent (`agents.list[].identity.emoji`, sinon `"👀"`) +- repli vers l’emoji d’identité de l’agent (`agents.list[].identity.emoji`, sinon `"👀"`) -Remarques : +Remarques : - 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 prévisualisation en direct : +`channels.slack.streaming` contrôle le comportement d’aperçu en direct : -- `off` : désactiver le streaming de prévisualisation en direct. -- `partial` (par défaut) : remplacer le texte de prévisualisation par la dernière sortie partielle. -- `block` : ajouter des mises à jour de prévisualisation par blocs. -- `progress` : afficher un texte d’état de progression pendant la génération, puis envoyer le texte final. +- `off` : désactive le streaming d’aperçu en direct. +- `partial` (par défaut) : remplace le texte d’aperçu par la dernière sortie partielle. +- `block` : ajoute des mises à jour d’aperçu par blocs. +- `progress` : affiche un texte d’état de progression pendant la génération, puis envoie le texte final. +- `streaming.preview.toolProgress` : lorsque l’aperçu de brouillon est actif, route les mises à jour d’outil/progression dans le même message d’aperçu modifié (par défaut : `true`). Définissez `false` pour conserver des messages d’outil/progression séparés. -`channels.slack.streaming.nativeTransport` contrôle le streaming de texte natif de Slack lorsque `channels.slack.streaming.mode` est `partial` (par défaut : `true`). +`channels.slack.streaming.nativeTransport` contrôle le streaming de texte natif de Slack lorsque `channels.slack.streaming.mode` est `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 apparaissent. La sélection du fil suit toujours `replyToMode`. -- Les racines de canaux et de discussions de groupe peuvent toujours utiliser la prévisualisation de brouillon normale lorsque le streaming natif n’est pas disponible. -- Les messages privés Slack de niveau supérieur restent hors fil par défaut, donc ils n’affichent pas la prévisualisation de style fil ; utilisez des réponses dans un fil ou `typingReaction` si vous voulez une progression visible à cet endroit. -- Les médias et les charges utiles non textuelles reviennent à la livraison normale. +- Un fil de réponse doit être disponible pour que le streaming de texte natif et l’état de fil assistant Slack apparaissent. La sélection du fil continue néanmoins de suivre `replyToMode`. +- Les racines de canal et de discussion de groupe peuvent toujours utiliser l’aperçu de 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 dans un fil ou `typingReaction` si vous voulez y afficher une progression visible. +- Les médias et les charges utiles non textuelles reviennent au mode de livraison normal. - Si le streaming échoue en cours de réponse, OpenClaw revient à la livraison normale pour les charges utiles restantes. -Utiliser la prévisualisation de brouillon au lieu du streaming de texte natif de Slack : +Utilisez l’aperçu de brouillon au lieu du streaming de texte natif de Slack : ```json5 { @@ -765,45 +766,45 @@ Utiliser la prévisualisation de brouillon au lieu du streaming de texte natif d } ``` -Clés héritées : +Clés héritées : - `channels.slack.streamMode` (`replace | status_final | append`) est migré automatiquement vers `channels.slack.streaming.mode`. - le booléen `channels.slack.streaming` est migré automatiquement vers `channels.slack.streaming.mode` et `channels.slack.streaming.nativeTransport`. - l’ancienne clé `channels.slack.nativeStreaming` est migrée automatiquement vers `channels.slack.streaming.nativeTransport`. -## Repli via réaction de saisie +## Repli via réaction de frappe -`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. Cela est surtout utile en dehors des réponses dans un fil, qui utilisent un indicateur d’état par défaut « is typing... ». +`typingReaction` ajoute une réaction temporaire au message Slack entrant pendant que OpenClaw traite une réponse, puis la supprime une fois l’exécution terminée. Cela est particulièrement utile en dehors des réponses dans un fil, qui utilisent un indicateur d’état par défaut « est en train d’écrire... ». -Ordre de résolution : +Ordre de résolution : - `channels.slack.accounts..typingReaction` - `channels.slack.typingReaction` -Remarques : +Remarques : - Slack attend des shortcodes (par exemple `"hourglass_flowing_sand"`). -- La réaction est effectuée au mieux, et le nettoyage est tenté automatiquement après la réponse ou une fois le chemin d’échec terminé. +- La réaction est fournie en mode best-effort et le nettoyage est tenté automatiquement une fois la réponse ou le chemin d’échec terminé. ## Médias, segmentation et livraison - 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. + 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ête authentifié 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 entrant à l’exécution est de `20MB` par défaut, sauf remplacement par `channels.slack.mediaMaxMb`. + La limite de taille entrante à l’exécution est de `20MB` par défaut, sauf remplacement par `channels.slack.mediaMaxMb`. - + - les segments de texte utilisent `channels.slack.textChunkLimit` (par défaut 4000) - - `channels.slack.chunkMode="newline"` active le découpage prioritaire par paragraphe - - les envois de fichiers utilisent les API de téléversement Slack et peuvent inclure des réponses dans un fil (`thread_ts`) - - le plafond des médias sortants suit `channels.slack.mediaMaxMb` lorsqu’il est configuré ; sinon, les envois du canal utilisent les valeurs par défaut par type MIME du pipeline média + - `channels.slack.chunkMode="newline"` active un découpage prioritairement par paragraphe + - les envois de fichiers utilisent les API de téléversement de Slack et peuvent inclure des réponses dans un fil (`thread_ts`) + - la limite de média sortant suit `channels.slack.mediaMaxMb` lorsqu’elle est configurée ; sinon, les envois de canal utilisent les valeurs par défaut par type MIME du pipeline média - Cibles explicites préférées : + Cibles explicites préférées : - `user:` pour les messages privés - `channel:` pour les canaux @@ -813,9 +814,9 @@ Remarques : -## Commandes et comportement des slash commands +## Commandes et comportement des commandes slash -Les commandes slash apparaissent dans Slack soit comme une seule commande configurée, soit comme plusieurs commandes natives. Configurez `channels.slack.slashCommand` pour modifier les valeurs par défaut des commandes : +Les commandes slash apparaissent dans Slack soit comme une seule commande configurée, soit comme plusieurs commandes natives. Configurez `channels.slack.slashCommand` pour modifier les valeurs par défaut des commandes : - `enabled: false` - `name: "openclaw"` @@ -826,7 +827,7 @@ Les commandes slash apparaissent dans Slack soit comme une seule commande config /openclaw /help ``` -Les commandes natives nécessitent des [paramètres de manifeste supplémentaires](#additional-manifest-settings) dans votre application Slack et sont activées avec `channels.slack.commands.native: true` ou `commands.native: true` dans les configurations globales à la place. +Les commandes natives nécessitent des [paramètres supplémentaires du manifeste](#additional-manifest-settings) dans votre application Slack et sont activées avec `channels.slack.commands.native: true` ou `commands.native: true` dans les configurations globales à la place. - Le mode automatique des commandes natives est **désactivé** pour Slack, donc `commands.native: "auto"` n’active pas les commandes natives Slack. @@ -834,12 +835,12 @@ Les commandes natives nécessitent des [paramètres de manifeste supplémentaire /help ``` -Les menus d’arguments natifs utilisent une stratégie de rendu adaptative qui affiche une fenêtre modale de confirmation avant d’envoyer la valeur d’option sélectionnée : +Les menus d’arguments natifs utilisent une stratégie de rendu adaptative qui affiche une modale de confirmation avant d’envoyer la valeur d’option sélectionnée : -- 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 -- limites Slack dépassées : les valeurs d’options encodées reviennent à des boutons +- 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 +- limites Slack dépassées : les valeurs d’option encodées reviennent à des boutons ```txt /think @@ -849,9 +850,9 @@ Les sessions slash utilisent des clés isolées comme `agent::slack:sla ## Réponses interactives -Slack peut afficher des contrôles de réponse interactive créés par l’agent, mais cette fonctionnalité est désactivée par défaut. +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 : +Activez-la globalement : ```json5 { @@ -865,7 +866,7 @@ Activez-la globalement : } ``` -Ou activez-la uniquement pour un compte Slack : +Ou activez-la pour un seul compte Slack : ```json5 { @@ -883,44 +884,44 @@ Ou activez-la uniquement pour un compte Slack : } ``` -Lorsqu’elle est activée, les agents peuvent émettre des directives de réponse propres à Slack : +Lorsqu’elle est activée, les agents peuvent émettre des directives de réponse réservées à Slack : - `[[slack_buttons: Approve:approve, Reject:reject]]` - `[[slack_select: Choose a target | Canary:canary, Production:production]]` -Ces directives sont compilées en Slack Block Kit et routent les clics ou les sélections via le chemin d’événement d’interaction Slack existant. +Ces directives sont compilées en Slack Block Kit et routent les clics ou sélections via le chemin existant des événements d’interaction Slack. -Remarques : +Remarques : - Il s’agit d’une interface spécifique à Slack. Les autres canaux ne traduisent pas les directives Slack Block Kit dans 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 créé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. +- Les valeurs de rappel interactives 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 `blocks` invalide. -## Approbations Exec dans Slack +## Approbations exec dans Slack -Slack peut agir comme client d’approbation natif avec des boutons et des interactions interactifs, au lieu de revenir à l’interface Web ou au terminal. +Slack peut agir comme client d’approbation natif avec boutons et interactions interactifs, au lieu de revenir à l’interface Web ou au terminal. -- Les approbations Exec utilisent `channels.slack.execApprovals.*` pour le routage natif vers 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’identifiant 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. +- 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 requête arrive déjà dans Slack et que le type d’identifiant d’approbation est `plugin:`. +- L’autorisation des approbateurs est toujours appliquée : seuls les utilisateurs identifiés comme approbateurs peuvent approuver ou refuser des requêtes via Slack. -Cela utilise la même surface de boutons d’approbation partagée que les autres canaux. Lorsque `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’expérience principale d’approbation ; OpenClaw +Cela utilise la même surface partagée de boutons d’approbation que les autres canaux. Lorsque `interactivity` est activé dans les paramètres de votre application Slack, les invites d’approbation s’affichent comme boutons Block Kit directement dans la conversation. +Lorsque ces boutons sont présents, ils constituent l’expérience utilisateur principale pour l’approbation ; 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. +approbations par discussion ne sont pas disponibles ou que l’approbation manuelle est la seule voie. -Chemin de configuration : +Chemin de configuration : - `channels.slack.execApprovals.enabled` -- `channels.slack.execApprovals.approvers` (facultatif ; revient à `commands.ownerAllowFrom` lorsque possible) -- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, par défaut : `dm`) +- `channels.slack.execApprovals.approvers` (facultatif ; revient à `commands.ownerAllowFrom` lorsque possible) +- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, par défaut : `dm`) - `agentFilter`, `sessionFilter` -Slack active automatiquement les approbations Exec natives lorsque `enabled` n’est pas défini ou vaut `"auto"` et qu’au moins un +Slack active automatiquement les approbations exec natives lorsque `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 : +Comportement par défaut sans configuration explicite des approbations exec Slack : ```json5 { @@ -931,7 +932,7 @@ Comportement par défaut sans configuration explicite des approbations Exec Slac ``` Une configuration native Slack explicite n’est nécessaire que si vous voulez remplacer les approbateurs, ajouter des filtres ou -opter pour une livraison dans le chat d’origine : +opter pour une livraison dans la discussion d’origine : ```json5 { @@ -947,52 +948,52 @@ opter pour une livraison dans le chat d’origine : } ``` -Le transfert partagé `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à +Le transfert partagé `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 lui aussi +distinct ; les boutons natifs Slack peuvent toujours résoudre les approbations de Plugin lorsque ces requêtes arrivent déjà dans Slack. -La commande `/approve` dans le même chat fonctionne également dans les canaux et messages privés Slack qui prennent déjà en charge les commandes. Voir [Approbations Exec](/fr/tools/exec-approvals) pour le modèle complet de transfert des approbations. +La commande `/approve` dans la même discussion fonctionne également dans les canaux et messages privés Slack qui prennent déjà en charge les commandes. Voir [Approbations exec](/fr/tools/exec-approvals) pour le modèle complet de transfert d’approbation. ## Événements et comportement opérationnel - Les modifications/suppressions de messages et les diffusions de fil sont mappées vers des événements système. - Les événements d’ajout/suppression de réaction sont mappés vers des événements système. - Les événements d’entrée/sortie de membre, de création/renommage de canal et d’ajout/suppression d’épingle sont mappés vers des événements système. -- `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 amorçages de contexte du message de départ du fil et de l’historique initial du fil sont filtrés par les listes d’autorisation d’expéditeur 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 enrichis : - - actions de bloc : valeurs sélectionnées, libellés, 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 +- `channel_id_changed` peut migrer les clés de configuration du canal lorsque `configWrites` est activé. +- Les métadonnées de sujet/description 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’initialisation du contexte d’historique du fil sont filtrés par les listes d’autorisation d’expéditeur configurées, le cas échéant. +- Les actions de bloc et interactions de modale émettent des événements système structurés `Slack interaction: ...` avec des champs de charge utile enrichis : + - actions de bloc : valeurs sélectionnées, libellés, valeurs de sélecteur et métadonnées `workflow_*` + - événements de modale `view_submission` et `view_closed` avec métadonnées de canal routées et entrées de formulaire -## Pointeurs de référence de configuration +## Pointeurs vers la référence de configuration -Référence principale : +Référence principale : - [Référence de configuration - Slack](/fr/gateway/configuration-reference#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` - - bascule de compatibilité : `dangerouslyAllowNameMatching` (solution de dernier recours ; laissez désactivé 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` + 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` + - option de compatibilité : `dangerouslyAllowNameMatching` (mesure d’urgence ; 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`, `streaming.nativeTransport`, `streaming.preview.toolProgress` + - opérations/fonctionnalités : `configWrites`, `commands.native`, `slashCommand.*`, `actions.*`, `userToken`, `userTokenReadOnly` ## Dépannage - Vérifiez, dans l’ordre : + Vérifiez, dans cet ordre : - `groupPolicy` - liste d’autorisation des canaux (`channels.slack.channels`) - `requireMention` - liste d’autorisation `users` par canal - Commandes utiles : + Commandes utiles : ```bash openclaw channels status --probe @@ -1003,7 +1004,7 @@ openclaw doctor - Vérifiez : + Vérifiez : - `channels.slack.dm.enabled` - `channels.slack.dmPolicy` (ou l’ancienne clé `channels.slack.dm.policy`) @@ -1016,41 +1017,41 @@ openclaw pairing list slack - Validez les jetons bot + application et l’activation de Socket Mode dans les paramètres de l’application Slack. + Validez les jetons bot + app ainsi que 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 l’exécution actuelle n’a pas pu résoudre la - valeur adossée à SecretRef. + configuré mais l’exécution actuelle n’a pas pu résoudre la valeur + soutenue par SecretRef. - Validez : + Validez : - - secret de signature - - chemin du Webhook - - URL de requête Slack (Events + Interactivity + Slash Commands) + - signing secret + - chemin de Webhook + - URL de requête Slack (événements + interactivité + commandes slash) - `webhookPath` unique par compte HTTP - Si `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 secret de signature adossé à SecretRef. + Si `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 soutenu par SecretRef. - Vérifiez si votre intention était : + Vérifiez si vous vouliez : - le mode de commande native (`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`) - Vérifiez aussi `commands.useAccessGroups` ainsi que les listes d’autorisation des canaux/utilisateurs. + Vérifiez également `commands.useAccessGroups` ainsi que les listes d’autorisation de canal/utilisateur. -## Lié +## Liens associés - [Appairage](/fr/channels/pairing) - [Groupes](/fr/channels/groups) diff --git a/docs/fr/channels/telegram.md b/docs/fr/channels/telegram.md index b248094db..46e444d79 100644 --- a/docs/fr/channels/telegram.md +++ b/docs/fr/channels/telegram.md @@ -1,30 +1,30 @@ --- read_when: - - Travaille sur les fonctionnalités Telegram ou les Webhook + - Travail sur les fonctionnalités de Telegram ou les Webhooks summary: Statut de prise en charge du bot Telegram, capacités et configuration title: Telegram x-i18n: - generated_at: "2026-04-21T06:57:37Z" + generated_at: "2026-04-21T17:45:42Z" model: gpt-5.4 provider: openai - source_hash: b5c70775b55d4923a31ad8bae7f4c6e7cbae754c05c3a578180d63db2b59e39a + source_hash: 816238b53942b319a300843db62ec1d4bf8d84bc11094010926ac9ad457c6d3d source_path: channels/telegram.md workflow: 15 --- # Telegram (API Bot) -Statut : prêt pour la production pour les messages privés des bots et les groupes via grammY. Le long polling est le mode par défaut ; le mode Webhook est optionnel. +Statut : prêt pour la production pour les MP de bot + groupes via grammY. Le long polling est le mode par défaut ; le mode Webhook est facultatif. - La politique DM par défaut pour Telegram est l’association. + La politique de MP par défaut pour Telegram est l’association. - - Diagnostics inter-canaux et guides de réparation. + + Diagnostics inter-canaux et procédures de réparation. - Modèles complets de configuration des canaux et exemples. + Modèles et exemples complets de configuration de canal. @@ -34,11 +34,11 @@ Statut : prêt pour la production pour les messages privés des bots et les grou Ouvrez Telegram et discutez avec **@BotFather** (vérifiez que l’identifiant est exactement `@BotFather`). - Exécutez `/newbot`, suivez les invites et enregistrez le jeton. + Exécutez `/newbot`, suivez les instructions, puis enregistrez le jeton. - + ```json5 { @@ -58,7 +58,7 @@ Statut : prêt pour la production pour les messages privés des bots et les grou - + ```bash openclaw gateway @@ -71,24 +71,24 @@ openclaw pairing approve telegram - Ajoutez le bot à votre groupe, puis définissez `channels.telegram.groups` et `groupPolicy` pour qu’ils correspondent à votre modèle d’accès. + Ajoutez le bot à votre groupe, puis définissez `channels.telegram.groups` et `groupPolicy` en fonction de votre modèle d’accès. -L’ordre de résolution du jeton dépend du compte. En pratique, les valeurs de configuration priment sur la variable d’environnement de secours, et `TELEGRAM_BOT_TOKEN` ne s’applique qu’au compte par défaut. +L’ordre de résolution du jeton tient compte du compte. En pratique, les valeurs de configuration priment sur la variable d’environnement de secours, et `TELEGRAM_BOT_TOKEN` ne s’applique qu’au compte par défaut. ## Paramètres côté Telegram - Par défaut, les bots Telegram utilisent le **Mode confidentialité**, ce qui limite les messages de groupe qu’ils reçoivent. + Par défaut, les bots Telegram sont en **mode confidentialité**, ce qui limite les messages de groupe qu’ils reçoivent. - Si le bot doit voir tous les messages du groupe, soit : + Si le bot doit voir tous les messages du groupe, faites soit : - - désactivez le mode confidentialité via `/setprivacy`, soit - - faites du bot un administrateur du groupe. + - désactiver le mode confidentialité via `/setprivacy`, ou + - faire du bot un administrateur du groupe. Lorsque vous modifiez le mode confidentialité, retirez puis rajoutez le bot dans chaque groupe afin que Telegram applique le changement. @@ -101,9 +101,9 @@ L’ordre de résolution du jeton dépend du compte. En pratique, les valeurs de - + - - `/setjoingroups` pour autoriser/interdire l’ajout à des groupes + - `/setjoingroups` pour autoriser/interdire l’ajout aux groupes - `/setprivacy` pour le comportement de visibilité dans les groupes @@ -112,7 +112,7 @@ L’ordre de résolution du jeton dépend du compte. En pratique, les valeurs de ## Contrôle d’accès et activation - + `channels.telegram.dmPolicy` contrôle l’accès aux messages directs : - `pairing` (par défaut) @@ -121,22 +121,22 @@ L’ordre de résolution du jeton dépend du compte. En pratique, les valeurs de - `disabled` `channels.telegram.allowFrom` accepte des ID utilisateur Telegram numériques. Les préfixes `telegram:` / `tg:` sont acceptés et normalisés. - `dmPolicy: "allowlist"` avec un `allowFrom` vide bloque tous les DM et est rejeté par la validation de la configuration. + `dmPolicy: "allowlist"` avec un `allowFrom` vide bloque tous les MP et est rejeté par la validation de configuration. La configuration demande uniquement des ID utilisateur numériques. - Si vous avez effectué une mise à niveau et que votre configuration contient des entrées de liste d’autorisation `@username`, exécutez `openclaw doctor --fix` pour les résoudre (au mieux ; nécessite un jeton de bot Telegram). - Si vous vous appuyiez auparavant sur des fichiers de liste d’autorisation du magasin d’association, `openclaw doctor --fix` peut récupérer les entrées dans `channels.telegram.allowFrom` dans les flux `allowlist` (par exemple lorsque `dmPolicy: "allowlist"` n’a encore aucun ID explicite). + Si vous avez fait une mise à niveau et que votre configuration contient des entrées de liste d’autorisation `@username`, exécutez `openclaw doctor --fix` pour les résoudre (au mieux ; nécessite un jeton de bot Telegram). + Si vous utilisiez auparavant des fichiers de liste d’autorisation du magasin d’association, `openclaw doctor --fix` peut récupérer les entrées dans `channels.telegram.allowFrom` dans les flux allowlist (par exemple lorsque `dmPolicy: "allowlist"` n’a pas encore d’ID explicites). - Pour les bots à propriétaire unique, préférez `dmPolicy: "allowlist"` avec des ID `allowFrom` numériques explicites afin de conserver une politique d’accès durable dans la configuration (au lieu de dépendre des approbations d’association précédentes). + Pour les bots à propriétaire unique, préférez `dmPolicy: "allowlist"` avec des ID `allowFrom` numériques explicites afin de garder une politique d’accès durable dans la configuration (au lieu de dépendre des approbations d’association précédentes). - Confusion fréquente : l’approbation de l’association DM ne signifie pas « cet expéditeur est autorisé partout ». - L’association accorde uniquement l’accès en DM. L’autorisation des expéditeurs dans les groupes provient toujours de listes d’autorisation explicites dans la configuration. - Si vous voulez dire « je suis autorisé une fois et les DM comme les commandes de groupe fonctionnent », placez votre ID utilisateur Telegram numérique dans `channels.telegram.allowFrom`. + Confusion fréquente : l’approbation d’association en MP ne signifie pas « cet expéditeur est autorisé partout ». + L’association n’accorde l’accès qu’aux MP. L’autorisation des expéditeurs dans les groupes provient toujours de listes d’autorisation explicites dans la configuration. + Si vous voulez « je suis autorisé une seule fois et les MP comme les commandes de groupe fonctionnent », placez votre ID utilisateur Telegram numérique dans `channels.telegram.allowFrom`. ### Trouver votre ID utilisateur Telegram Plus sûr (sans bot tiers) : - 1. Envoyez un DM à votre bot. + 1. Envoyez un MP à votre bot. 2. Exécutez `openclaw logs --follow`. 3. Lisez `from.id`. @@ -164,15 +164,15 @@ curl "https://api.telegram.org/bot/getUpdates" - `allowlist` (par défaut) - `disabled` - `groupAllowFrom` est utilisé pour le filtrage des expéditeurs dans les groupes. S’il n’est pas défini, Telegram retombe sur `allowFrom`. + `groupAllowFrom` est utilisé pour le filtrage des expéditeurs en groupe. S’il n’est pas défini, Telegram se rabat sur `allowFrom`. Les entrées `groupAllowFrom` doivent être des ID utilisateur Telegram numériques (les préfixes `telegram:` / `tg:` sont normalisés). - Ne mettez pas d’ID de discussion de groupe ou de supergroupe Telegram dans `groupAllowFrom`. Les ID de discussion négatifs doivent être placés sous `channels.telegram.groups`. + Ne placez pas d’ID de chat de groupe ou supergroupe Telegram dans `groupAllowFrom`. Les ID de chat négatifs doivent être placés sous `channels.telegram.groups`. Les entrées non numériques sont ignorées pour l’autorisation des expéditeurs. - Limite de sécurité (`2026.2.25+`) : l’authentification des expéditeurs de groupe n’hérite **pas** des approbations du magasin d’association DM. - L’association reste limitée aux DM. Pour les groupes, définissez `groupAllowFrom` ou `allowFrom` par groupe/par sujet. - Si `groupAllowFrom` n’est pas défini, Telegram retombe sur `allowFrom` de la configuration, pas sur le magasin d’association. - Modèle pratique pour les bots à propriétaire unique : définissez votre ID utilisateur dans `channels.telegram.allowFrom`, laissez `groupAllowFrom` non défini, et autorisez les groupes cibles sous `channels.telegram.groups`. - Remarque d’exécution : si `channels.telegram` est complètement absent, les valeurs par défaut à l’exécution sont fail-closed avec `groupPolicy="allowlist"` sauf si `channels.defaults.groupPolicy` est explicitement défini. + Limite de sécurité (`2026.2.25+`) : l’autorisation des expéditeurs en groupe **n’hérite pas** des approbations du magasin d’association pour les MP. + L’association reste limitée aux MP. Pour les groupes, définissez `groupAllowFrom` ou `allowFrom` par groupe/par sujet. + Si `groupAllowFrom` n’est pas défini, Telegram se rabat sur `allowFrom` dans la configuration, pas sur le magasin d’association. + Modèle pratique pour les bots à propriétaire unique : définissez votre ID utilisateur dans `channels.telegram.allowFrom`, laissez `groupAllowFrom` non défini et autorisez les groupes cibles sous `channels.telegram.groups`. + Note d’exécution : si `channels.telegram` est totalement absent, les valeurs par défaut d’exécution utilisent le mode fail-closed avec `groupPolicy="allowlist"` sauf si `channels.defaults.groupPolicy` est explicitement défini. Exemple : autoriser n’importe quel membre dans un groupe spécifique : @@ -191,7 +191,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - Exemple : autoriser uniquement des utilisateurs spécifiques dans un groupe spécifique : + Exemple : autoriser seulement des utilisateurs spécifiques dans un groupe spécifique : ```json5 { @@ -211,29 +211,29 @@ curl "https://api.telegram.org/bot/getUpdates" Erreur fréquente : `groupAllowFrom` n’est pas une liste d’autorisation de groupes Telegram. - - Placez les ID négatifs de groupe ou de supergroupe Telegram comme `-1001234567890` sous `channels.telegram.groups`. - - Placez les ID utilisateur Telegram comme `8734062810` sous `groupAllowFrom` lorsque vous voulez limiter quelles personnes à l’intérieur d’un groupe autorisé peuvent déclencher le bot. + - Placez les ID négatifs de groupe ou supergroupe Telegram comme `-1001234567890` sous `channels.telegram.groups`. + - Placez les ID utilisateur Telegram comme `8734062810` sous `groupAllowFrom` lorsque vous voulez limiter quelles personnes dans un groupe autorisé peuvent déclencher le bot. - Utilisez `groupAllowFrom: ["*"]` uniquement lorsque vous voulez que n’importe quel membre d’un groupe autorisé puisse parler au bot. - - Par défaut, les réponses dans les groupes exigent une mention. + + Les réponses en groupe nécessitent une mention par défaut. - La mention peut venir de : + La mention peut provenir de : - la mention native `@botusername`, ou - les modèles de mention dans : - `agents.list[].groupChat.mentionPatterns` - `messages.groupChat.mentionPatterns` - Options de commande au niveau de la session : + Basculements de commande au niveau de la session : - `/activation always` - `/activation mention` - Celles-ci mettent à jour uniquement l’état de la session. Utilisez la configuration pour la persistance. + Ceux-ci mettent à jour uniquement l’état de la session. Utilisez la configuration pour une persistance. Exemple de configuration persistante : @@ -249,11 +249,11 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - Obtenir l’ID de discussion du groupe : + Obtenir l’ID du chat de groupe : - - transférez un message du groupe à `@userinfobot` / `@getidsbot` - - ou lisez `chat.id` depuis `openclaw logs --follow` - - ou inspectez `getUpdates` de l’API Bot + - transférer un message du groupe à `@userinfobot` / `@getidsbot` + - ou lire `chat.id` depuis `openclaw logs --follow` + - ou inspecter `getUpdates` de l’API Bot @@ -262,12 +262,12 @@ curl "https://api.telegram.org/bot/getUpdates" - Telegram est géré par le processus Gateway. - Le routage est déterministe : les réponses entrantes de Telegram repartent vers Telegram (le modèle ne choisit pas les canaux). -- Les messages entrants sont normalisés dans l’enveloppe de canal partagée avec métadonnées de réponse et espaces réservés pour les médias. +- Les messages entrants sont normalisés dans l’enveloppe de canal partagée avec les métadonnées de réponse et des espaces réservés pour les médias. - Les sessions de groupe sont isolées par ID de groupe. Les sujets de forum ajoutent `:topic:` pour garder les sujets isolés. -- Les messages DM peuvent transporter `message_thread_id` ; OpenClaw les route avec des clés de session sensibles aux fils et préserve l’ID de fil pour les réponses. -- Le long polling utilise le runner grammY avec séquencement par discussion/par fil. La concurrence globale du récepteur du runner utilise `agents.defaults.maxConcurrent`. -- Les redémarrages du watchdog de long polling se déclenchent après 120 secondes sans activité `getUpdates` terminée par défaut. Augmentez `channels.telegram.pollingStallThresholdMs` uniquement si votre déploiement voit encore de faux redémarrages pour blocage de polling pendant des traitements longs. La valeur est en millisecondes et est autorisée de `30000` à `600000` ; les surcharges par compte sont prises en charge. -- L’API Bot Telegram ne prend pas en charge les accusés de lecture (`sendReadReceipts` ne s’applique pas). +- Les messages MP peuvent transporter `message_thread_id` ; OpenClaw les route avec des clés de session tenant compte des fils et préserve l’ID de fil pour les réponses. +- Le long polling utilise grammY runner avec un séquencement par chat/par fil. La concurrence globale du puits runner utilise `agents.defaults.maxConcurrent`. +- Les redémarrages du watchdog de long polling se déclenchent par défaut après 120 secondes sans activité `getUpdates` terminée. Augmentez `channels.telegram.pollingStallThresholdMs` uniquement si votre déploiement observe encore de faux redémarrages pour blocage de polling pendant des traitements longs. La valeur est en millisecondes et autorisée de `30000` à `600000` ; des surcharges par compte sont prises en charge. +- L’API Bot Telegram n’a pas de prise en charge des accusés de lecture (`sendReadReceipts` ne s’applique pas). ## Référence des fonctionnalités @@ -280,20 +280,21 @@ curl "https://api.telegram.org/bot/getUpdates" Exigence : - - `channels.telegram.streaming` est `off | partial | block | progress` (par défaut : `partial`) + - `channels.telegram.streaming` vaut `off | partial | block | progress` (par défaut : `partial`) - `progress` correspond à `partial` sur Telegram (compatibilité avec la dénomination inter-canaux) - - les anciennes valeurs `channels.telegram.streamMode` et booléennes `streaming` sont mappées automatiquement + - `streaming.preview.toolProgress` contrôle si les mises à jour d’outil/progression réutilisent le même message d’aperçu modifié (par défaut : `true`). Définissez `false` pour conserver des messages d’outil/progression séparés. + - l’ancien `channels.telegram.streamMode` et les valeurs booléennes `streaming` sont mappés automatiquement Pour les réponses texte uniquement : - - DM : OpenClaw conserve le même message d’aperçu et effectue une modification finale sur place (pas de second message) + - MP : OpenClaw conserve le même message d’aperçu et effectue une modification finale sur place (pas de second message) - groupe/sujet : OpenClaw conserve le même message d’aperçu et effectue une modification finale sur place (pas de second message) - Pour les réponses complexes (par exemple des charges utiles média), OpenClaw retombe sur une livraison finale normale puis nettoie le message d’aperçu. + Pour les réponses complexes (par exemple des charges utiles multimédias), OpenClaw se rabat sur la livraison finale normale puis nettoie le message d’aperçu. - La diffusion d’aperçu est distincte de la diffusion par blocs. Lorsque la diffusion par blocs est explicitement activée pour Telegram, OpenClaw ignore le flux d’aperçu afin d’éviter une double diffusion. + Le flux d’aperçu est distinct du flux par blocs. Lorsque le flux par blocs est explicitement activé pour Telegram, OpenClaw ignore le flux d’aperçu pour éviter un double flux. - Si le transport natif de brouillon n’est pas disponible ou est rejeté, OpenClaw retombe automatiquement sur `sendMessage` + `editMessageText`. + Si le transport de brouillon natif n’est pas disponible/rejeté, OpenClaw se rabat automatiquement sur `sendMessage` + `editMessageText`. Flux de raisonnement propre à Telegram : @@ -302,10 +303,10 @@ curl "https://api.telegram.org/bot/getUpdates" - + Le texte sortant utilise Telegram `parse_mode: "HTML"`. - - Le texte de type Markdown est rendu en HTML sûr pour Telegram. + - Le texte de style Markdown est rendu en HTML sûr pour Telegram. - Le HTML brut du modèle est échappé pour réduire les échecs d’analyse Telegram. - Si Telegram rejette le HTML analysé, OpenClaw réessaie en texte brut. @@ -320,7 +321,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `commands.native: "auto"` active les commandes natives pour Telegram - Ajouter des entrées de menu de commandes personnalisées : + Ajouter des entrées de menu de commande personnalisées : ```json5 { @@ -337,45 +338,45 @@ curl "https://api.telegram.org/bot/getUpdates" Règles : - - les noms sont normalisés (suppression du `/` initial, minuscules) + - les noms sont normalisés (supprime le `/` initial, minuscules) - modèle valide : `a-z`, `0-9`, `_`, longueur `1..32` - les commandes personnalisées ne peuvent pas remplacer les commandes natives - - les conflits/doublons sont ignorés et journalisés + - les conflits/doublons sont ignorés et consignés Remarques : - les commandes personnalisées sont uniquement des entrées de menu ; elles n’implémentent pas automatiquement un comportement - - les commandes de Plugin/Skills peuvent quand même fonctionner lorsqu’elles sont saisies même si elles ne sont pas affichées dans le menu Telegram + - les commandes de plugin/Skills peuvent toujours fonctionner lorsqu’elles sont saisies, même si elles ne sont pas affichées dans le menu Telegram - Si les commandes natives sont désactivées, les commandes intégrées sont supprimées. Les commandes personnalisées/de Plugin peuvent quand même s’enregistrer si elles sont configurées. + Si les commandes natives sont désactivées, les commandes intégrées sont supprimées. Les commandes personnalisées/de plugin peuvent toujours s’enregistrer si elles sont configurées. - Échecs fréquents de configuration : + Échecs de configuration fréquents : - - `setMyCommands failed` avec `BOT_COMMANDS_TOO_MUCH` signifie que le menu Telegram déborde encore après réduction ; réduisez les commandes de Plugin/Skills/personnalisées ou désactivez `channels.telegram.commands.native`. + - `setMyCommands failed` avec `BOT_COMMANDS_TOO_MUCH` signifie que le menu Telegram déborde encore après réduction ; réduisez les commandes de plugin/Skills/personnalisées ou désactivez `channels.telegram.commands.native`. - `setMyCommands failed` avec des erreurs réseau/fetch signifie généralement que le DNS/HTTPS sortant vers `api.telegram.org` est bloqué. - ### Commandes d’association d’appareil (Plugin `device-pair`) + ### Commandes d’association d’appareil (plugin `device-pair`) - Lorsque le Plugin `device-pair` est installé : + Lorsque le plugin `device-pair` est installé : 1. `/pair` génère un code de configuration 2. collez le code dans l’app iOS - 3. `/pair pending` liste les requêtes en attente (y compris rôle/portées) - 4. approuvez la requête : + 3. `/pair pending` liste les demandes en attente (y compris le rôle/les scopes) + 4. approuvez la demande : - `/pair approve ` pour une approbation explicite - - `/pair approve` lorsqu’il n’y a qu’une seule requête en attente + - `/pair approve` lorsqu’il n’y a qu’une seule demande en attente - `/pair approve latest` pour la plus récente - Le code de configuration transporte un jeton d’amorçage de courte durée. Le transfert d’amorçage intégré conserve le jeton du nœud principal à `scopes: []` ; tout jeton opérateur transféré reste limité à `operator.approvals`, `operator.read`, `operator.talk.secrets` et `operator.write`. Les vérifications de portée d’amorçage sont préfixées par rôle, de sorte que cette liste d’autorisation opérateur ne satisfait que les requêtes opérateur ; les rôles non opérateur nécessitent toujours des portées sous leur propre préfixe de rôle. + Le code de configuration transporte un jeton bootstrap de courte durée. Le transfert bootstrap intégré conserve le jeton du nœud principal à `scopes: []` ; tout jeton opérateur transmis reste limité à `operator.approvals`, `operator.read`, `operator.talk.secrets` et `operator.write`. Les vérifications de scope bootstrap sont préfixées par rôle ; ainsi, cette liste d’autorisation d’opérateur ne satisfait que les demandes d’opérateur ; les rôles non opérateur nécessitent toujours des scopes sous leur propre préfixe de rôle. - Si un appareil réessaie avec des détails d’authentification modifiés (par exemple rôle/portées/clé publique), la requête en attente précédente est remplacée et la nouvelle requête utilise un `requestId` différent. Réexécutez `/pair pending` avant d’approuver. + Si un appareil réessaie avec des détails d’authentification modifiés (par exemple rôle/scopes/clé publique), la demande en attente précédente est remplacée et la nouvelle demande utilise un `requestId` différent. Relancez `/pair pending` avant d’approuver. Plus de détails : [Association](/fr/channels/pairing#pair-via-telegram-recommended-for-ios). - - Configurez la portée du clavier intégré : + + Configurer la portée du clavier inline : ```json5 { @@ -424,18 +425,18 @@ curl "https://api.telegram.org/bot/getUpdates" action: "send", channel: "telegram", to: "123456789", - message: "Choisissez une option :", + message: "Choose an option:", buttons: [ [ - { text: "Oui", callback_data: "yes" }, - { text: "Non", callback_data: "no" }, + { text: "Yes", callback_data: "yes" }, + { text: "No", callback_data: "no" }, ], - [{ text: "Annuler", callback_data: "cancel" }], + [{ text: "Cancel", callback_data: "cancel" }], ], } ``` - Les clics sur les callbacks sont transmis à l’agent sous forme de texte : + Les clics de callback sont transmis à l’agent sous forme de texte : `callback_data: ` @@ -443,23 +444,23 @@ curl "https://api.telegram.org/bot/getUpdates" Les actions d’outil Telegram incluent : - - `sendMessage` (`to`, `content`, `mediaUrl`, `replyToMessageId`, `messageThreadId` optionnels) + - `sendMessage` (`to`, `content`, `mediaUrl`, `replyToMessageId`, `messageThreadId` facultatifs) - `react` (`chatId`, `messageId`, `emoji`) - `deleteMessage` (`chatId`, `messageId`) - `editMessage` (`chatId`, `messageId`, `content`) - - `createForumTopic` (`chatId`, `name`, `iconColor`, `iconCustomEmojiId` optionnels) + - `createForumTopic` (`chatId`, `name`, `iconColor`, `iconCustomEmojiId` facultatifs) - Les actions de message du canal exposent des alias ergonomiques (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`). + Les actions de message de canal exposent des alias ergonomiques (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`). - Contrôles de limitation : + Contrôles de restriction : - `channels.telegram.actions.sendMessage` - `channels.telegram.actions.deleteMessage` - `channels.telegram.actions.reactions` - `channels.telegram.actions.sticker` (par défaut : désactivé) - Remarque : `edit` et `topic-create` sont actuellement activés par défaut et n’ont pas de commutateurs `channels.telegram.actions.*` séparés. - Les envois à l’exécution utilisent l’instantané actif de la configuration/secrets (démarrage/rechargement), de sorte que les chemins d’action n’effectuent pas de nouvelle résolution ad hoc de SecretRef à chaque envoi. + Remarque : `edit` et `topic-create` sont actuellement activés par défaut et n’ont pas de bascules `channels.telegram.actions.*` séparées. + Les envois à l’exécution utilisent l’instantané actif de config/secrets (démarrage/rechargement), donc les chemins d’action n’effectuent pas de re-résolution ad hoc de SecretRef à chaque envoi. Sémantique de suppression des réactions : [/tools/reactions](/fr/tools/reactions) @@ -477,7 +478,7 @@ curl "https://api.telegram.org/bot/getUpdates" - `first` - `all` - Remarque : `off` désactive le fil de réponse implicite. Les balises explicites `[[reply_to_*]]` restent honorées. + Remarque : `off` désactive le fil de réponse implicite. Les balises explicites `[[reply_to_*]]` sont toujours respectées. @@ -491,7 +492,7 @@ curl "https://api.telegram.org/bot/getUpdates" Cas particulier du sujet général (`threadId=1`) : - - les envois de message omettent `message_thread_id` (Telegram rejette `sendMessage(...thread_id=1)`) + - les envois de messages omettent `message_thread_id` (Telegram rejette `sendMessage(...thread_id=1)`) - les actions de saisie incluent toujours `message_thread_id` Héritage des sujets : les entrées de sujet héritent des paramètres du groupe sauf surcharge (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`). @@ -575,18 +576,18 @@ curl "https://api.telegram.org/bot/getUpdates" **Lancement ACP lié au fil depuis le chat** : - `/acp spawn --thread here|auto` peut lier le sujet Telegram actuel à une nouvelle session ACP. - - Les messages suivants dans le sujet sont routés directement vers la session ACP liée (aucun `/acp steer` requis). - - OpenClaw épingle le message de confirmation du lancement dans le sujet après une liaison réussie. + - Les messages suivants dans le sujet sont routés directement vers la session ACP liée (pas de `/acp steer` requis). + - OpenClaw épingle dans le sujet le message de confirmation du lancement après une liaison réussie. - Nécessite `channels.telegram.threadBindings.spawnAcpSessions=true`. - Le contexte du modèle inclut : + Le contexte de modèle inclut : - `MessageThreadId` - `IsForum` - Comportement des fils en DM : + Comportement des fils en MP : - - les discussions privées avec `message_thread_id` conservent le routage DM mais utilisent des clés de session et des cibles de réponse sensibles aux fils. + - les discussions privées avec `message_thread_id` conservent le routage MP mais utilisent des clés de session et des cibles de réponse tenant compte des fils. @@ -596,7 +597,7 @@ curl "https://api.telegram.org/bot/getUpdates" Telegram distingue les notes vocales des fichiers audio. - par défaut : comportement de fichier audio - - balise `[[audio_as_voice]]` dans la réponse de l’agent pour forcer l’envoi comme note vocale + - balise `[[audio_as_voice]]` dans la réponse de l’agent pour forcer l’envoi en note vocale Exemple d’action de message : @@ -626,7 +627,7 @@ curl "https://api.telegram.org/bot/getUpdates" } ``` - Les notes vidéo ne prennent pas en charge les légendes ; le texte du message fourni est envoyé séparément. + Les notes vidéo ne prennent pas en charge les légendes ; le texte de message fourni est envoyé séparément. ### Stickers @@ -636,7 +637,7 @@ curl "https://api.telegram.org/bot/getUpdates" - TGS animé : ignoré - WEBM vidéo : ignoré - Champs de contexte du sticker : + Champs de contexte des stickers : - `Sticker.emoji` - `Sticker.setName` @@ -648,9 +649,9 @@ curl "https://api.telegram.org/bot/getUpdates" - `~/.openclaw/telegram/sticker-cache.json` - Les stickers sont décrits une fois (quand c’est possible) puis mis en cache afin de réduire les appels répétés à la vision. + Les stickers sont décrits une seule fois (lorsque possible) puis mis en cache afin de réduire les appels de vision répétés. - Activer les actions de stickers : + Activer les actions de sticker : ```json5 { @@ -681,7 +682,7 @@ curl "https://api.telegram.org/bot/getUpdates" { action: "sticker-search", channel: "telegram", - query: "chat qui fait coucou", + query: "cat waving", limit: 5, } ``` @@ -691,9 +692,9 @@ curl "https://api.telegram.org/bot/getUpdates" Les réactions Telegram arrivent sous forme de mises à jour `message_reaction` (séparées des charges utiles de message). - Lorsqu’elles sont activées, OpenClaw met en file d’attente des événements système comme : + Lorsqu’elles sont activées, OpenClaw met en file d’attente des événements système tels que : - - `Réaction Telegram ajoutée : 👍 par Alice (@alice) sur le msg 42` + - `Réaction Telegram ajoutée : 👍 par Alice (@alice) sur msg 42` Configuration : @@ -705,8 +706,8 @@ curl "https://api.telegram.org/bot/getUpdates" - `own` signifie uniquement les réactions des utilisateurs aux messages envoyés par le bot (au mieux via le cache des messages envoyés). - Les événements de réaction respectent toujours les contrôles d’accès Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`) ; les expéditeurs non autorisés sont ignorés. - Telegram ne fournit pas d’ID de fil dans les mises à jour de réaction. - - les groupes non forum sont routés vers la session de discussion de groupe - - les groupes forum sont routés vers la session du sujet général du groupe (`:topic:1`), et non vers le sujet d’origine exact + - les groupes non forum sont routés vers la session de chat de groupe + - les groupes forum sont routés vers la session du sujet général du groupe (`:topic:1`), pas vers le sujet d’origine exact `allowed_updates` pour le polling/Webhook inclut automatiquement `message_reaction`. @@ -729,8 +730,8 @@ curl "https://api.telegram.org/bot/getUpdates" - - Les écritures de configuration du canal sont activées par défaut (`configWrites !== false`). + + Les écritures de configuration de canal sont activées par défaut (`configWrites !== false`). Les écritures déclenchées par Telegram incluent : @@ -757,31 +758,31 @@ curl "https://api.telegram.org/bot/getUpdates" Mode Webhook : - définir `channels.telegram.webhookUrl` - - définir `channels.telegram.webhookSecret` (obligatoire lorsque l’URL Webhook est définie) - - `channels.telegram.webhookPath` optionnel (par défaut `/telegram-webhook`) - - `channels.telegram.webhookHost` optionnel (par défaut `127.0.0.1`) - - `channels.telegram.webhookPort` optionnel (par défaut `8787`) + - définir `channels.telegram.webhookSecret` (requis lorsqu’une URL Webhook est définie) + - `channels.telegram.webhookPath` facultatif (par défaut `/telegram-webhook`) + - `channels.telegram.webhookHost` facultatif (par défaut `127.0.0.1`) + - `channels.telegram.webhookPort` facultatif (par défaut `8787`) - L’écouteur local par défaut pour le mode Webhook est lié à `127.0.0.1:8787`. + L’écouteur local par défaut pour le mode Webhook se lie à `127.0.0.1:8787`. - Si votre point de terminaison public diffère, placez un proxy inverse devant et pointez `webhookUrl` vers l’URL publique. - Définissez `webhookHost` (par exemple `0.0.0.0`) lorsque vous avez intentionnellement besoin d’un trafic entrant externe. + Si votre point de terminaison public est différent, placez un proxy inverse devant et faites pointer `webhookUrl` vers l’URL publique. + Définissez `webhookHost` (par exemple `0.0.0.0`) lorsque vous avez intentionnellement besoin d’un ingress externe. - - `channels.telegram.textChunkLimit` vaut `4000` par défaut. - - `channels.telegram.chunkMode="newline"` privilégie les limites de paragraphe (lignes vides) avant la découpe par longueur. - - `channels.telegram.mediaMaxMb` (par défaut `100`) plafonne la taille des médias Telegram entrants et sortants. + - `channels.telegram.textChunkLimit` a pour valeur par défaut 4000. + - `channels.telegram.chunkMode="newline"` privilégie les limites de paragraphe (lignes vides) avant le découpage par longueur. + - `channels.telegram.mediaMaxMb` (par défaut 100) limite la taille des médias Telegram entrants et sortants. - `channels.telegram.timeoutSeconds` remplace le délai d’expiration du client API Telegram (si non défini, la valeur par défaut de grammY s’applique). - - `channels.telegram.pollingStallThresholdMs` vaut `120000` par défaut ; ajustez-le entre `30000` et `600000` uniquement pour les redémarrages par faux positifs de blocage du polling. - - l’historique du contexte de groupe utilise `channels.telegram.historyLimit` ou `messages.groupChat.historyLimit` (par défaut `50`) ; `0` désactive. + - `channels.telegram.pollingStallThresholdMs` vaut par défaut `120000` ; ajustez entre `30000` et `600000` uniquement pour les redémarrages de polling bloqué faux positifs. + - l’historique du contexte de groupe utilise `channels.telegram.historyLimit` ou `messages.groupChat.historyLimit` (par défaut 50) ; `0` le désactive. - le contexte supplémentaire de réponse/citation/transfert est actuellement transmis tel que reçu. - - les listes d’autorisation Telegram limitent principalement qui peut déclencher l’agent, et non une limite complète de masquage du contexte supplémentaire. - - contrôles d’historique DM : + - les listes d’autorisation Telegram contrôlent principalement qui peut déclencher l’agent, pas une limite complète de masquage du contexte supplémentaire. + - contrôles de l’historique des MP : - `channels.telegram.dmHistoryLimit` - `channels.telegram.dms[""].historyLimit` - - la configuration `channels.telegram.retry` s’applique aux assistants d’envoi Telegram (CLI/outils/actions) pour les erreurs d’API sortantes récupérables. + - la configuration `channels.telegram.retry` s’applique aux aides d’envoi Telegram (CLI/outils/actions) pour les erreurs récupérables de l’API sortante. La cible d’envoi CLI peut être un ID de chat numérique ou un nom d’utilisateur : @@ -800,63 +801,63 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \ --poll-duration-seconds 300 --poll-public ``` - Options de sondage propres à Telegram : + Indicateurs de sondage propres à Telegram : - - `--poll-duration-seconds` (`5-600`) + - `--poll-duration-seconds` (5-600) - `--poll-anonymous` - `--poll-public` - `--thread-id` pour les sujets de forum (ou utilisez une cible `:topic:`) L’envoi Telegram prend aussi en charge : - - `--buttons` pour les claviers intégrés lorsque `channels.telegram.capabilities.inlineButtons` l’autorise - - `--force-document` pour envoyer les images et GIF sortants comme documents au lieu d’envois de photo compressée ou de média animé + - `--buttons` pour les claviers inline lorsque `channels.telegram.capabilities.inlineButtons` l’autorise + - `--force-document` pour envoyer les images et GIF sortants comme documents au lieu de téléversements compressés de photo ou de média animé - Limitation des actions : + Restriction des actions : - `channels.telegram.actions.sendMessage=false` désactive les messages Telegram sortants, y compris les sondages - - `channels.telegram.actions.poll=false` désactive la création de sondages Telegram tout en laissant les envois réguliers activés + - `channels.telegram.actions.poll=false` désactive la création de sondages Telegram tout en laissant les envois normaux activés - Telegram prend en charge les approbations exec dans les DM des approbateurs et peut facultativement publier les invites d’approbation dans le chat ou le sujet d’origine. + Telegram prend en charge les approbations exec dans les MP des approbateurs et peut facultativement publier les invites d’approbation dans le chat ou le sujet d’origine. Chemin de configuration : - `channels.telegram.execApprovals.enabled` - - `channels.telegram.execApprovals.approvers` (optionnel ; retombe sur les ID propriétaires numériques déduits de `allowFrom` et de `defaultTo` direct lorsque possible) + - `channels.telegram.execApprovals.approvers` (facultatif ; se rabat sur les ID propriétaires numériques déduits de `allowFrom` et de `defaultTo` en message direct lorsque possible) - `channels.telegram.execApprovals.target` (`dm` | `channel` | `both`, par défaut : `dm`) - `agentFilter`, `sessionFilter` - Les approbateurs doivent être des ID utilisateur Telegram numériques. Telegram active automatiquement les approbations exec natives lorsque `enabled` n’est pas défini ou vaut `"auto"` et qu’au moins un approbateur peut être résolu, soit depuis `execApprovals.approvers`, soit depuis la configuration du propriétaire numérique du compte (`allowFrom` et `defaultTo` en message direct). Définissez `enabled: false` pour désactiver explicitement Telegram comme client d’approbation natif. Les demandes d’approbation retombent sinon sur d’autres routes d’approbation configurées ou sur la politique de repli des approbations exec. + Les approbateurs doivent être des ID utilisateur Telegram numériques. Telegram active automatiquement les approbations exec natives lorsque `enabled` n’est pas défini ou vaut `"auto"` et qu’au moins un approbateur peut être résolu, soit depuis `execApprovals.approvers`, soit depuis la configuration numérique du propriétaire du compte (`allowFrom` et `defaultTo` en message direct). Définissez `enabled: false` pour désactiver explicitement Telegram comme client d’approbation natif. Sinon, les demandes d’approbation se rabattent sur d’autres routes d’approbation configurées ou sur la politique de repli d’approbation exec. - Telegram affiche aussi les boutons d’approbation partagés utilisés par les autres canaux de chat. L’adaptateur Telegram natif ajoute surtout le routage vers les DM des approbateurs, la diffusion vers le canal/sujet et les indices de saisie avant livraison. - Lorsque ces boutons sont présents, ils constituent l’UX principale d’approbation ; 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. + Telegram affiche également les boutons d’approbation partagés utilisés par les autres canaux de chat. L’adaptateur natif Telegram ajoute principalement le routage des MP d’approbateur, la diffusion vers le canal/sujet et les indications de saisie avant la livraison. + 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 chat sont indisponibles ou que l’approbation manuelle est la seule voie. Règles de livraison : - - `target: "dm"` envoie les invites d’approbation uniquement aux DM des approbateurs résolus - - `target: "channel"` renvoie l’invite dans le chat/sujet Telegram d’origine - - `target: "both"` envoie aux DM des approbateurs et au chat/sujet d’origine + - `target: "dm"` envoie les invites d’approbation uniquement aux MP des approbateurs résolus + - `target: "channel"` renvoie l’invite vers le chat/sujet Telegram d’origine + - `target: "both"` envoie aux MP des approbateurs et au chat/sujet d’origine - Seuls les approbateurs résolus peuvent approuver ou refuser. Les non-approbateurs ne peuvent pas utiliser `/approve` et ne peuvent pas utiliser les boutons d’approbation Telegram. + Seuls les approbateurs résolus peuvent approuver ou refuser. Les non-approbateurs ne peuvent pas utiliser `/approve` ni les boutons d’approbation Telegram. Comportement de résolution des approbations : - - Les ID préfixés par `plugin:` sont toujours résolus via les approbations de Plugin. - - Les autres ID essaient d’abord `exec.approval.resolve`. - - Si Telegram est aussi autorisé pour les approbations de Plugin et que Gateway indique + - les ID préfixés par `plugin:` sont toujours résolus via les approbations de plugin. + - les autres ID essaient d’abord `exec.approval.resolve`. + - si Telegram est aussi autorisé pour les approbations de plugin et que la gateway indique que l’approbation exec est inconnue/expirée, Telegram réessaie une fois via `plugin.approval.resolve`. - - Les refus/erreurs réels d’approbation exec ne retombent pas silencieusement vers la résolution - d’approbation de Plugin. + - les refus/erreurs réels d’approbation exec ne basculent pas silencieusement vers la + résolution d’approbation de plugin. - La livraison dans le canal affiche le texte de la commande dans le chat ; activez donc `channel` ou `both` uniquement dans des groupes/sujets de confiance. Lorsque l’invite arrive dans un sujet de forum, OpenClaw préserve le sujet à la fois pour l’invite d’approbation et pour le suivi après approbation. Les approbations exec expirent après 30 minutes par défaut. + La livraison dans le canal affiche le texte de la commande dans le chat ; n’activez donc `channel` ou `both` que dans des groupes/sujets de confiance. Lorsque l’invite arrive dans un sujet de forum, OpenClaw préserve le sujet à la fois pour l’invite d’approbation et pour le suivi après approbation. Les approbations exec expirent après 30 minutes par défaut. - Les boutons d’approbation intégrés dépendent également de `channels.telegram.capabilities.inlineButtons` autorisant la surface cible (`dm`, `group` ou `all`). + Les boutons d’approbation inline dépendent également du fait que `channels.telegram.capabilities.inlineButtons` autorise la surface cible (`dm`, `group` ou `all`). Documentation associée : [Approbations exec](/fr/tools/exec-approvals) @@ -870,9 +871,9 @@ Lorsque l’agent rencontre une erreur de livraison ou de fournisseur, Telegram | Key | Values | Default | Description | | ----------------------------------- | ----------------- | ------- | ----------------------------------------------------------------------------------------------- | | `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` envoie un message d’erreur convivial dans le chat. `silent` supprime entièrement les réponses d’erreur. | -| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Temps minimal entre les réponses d’erreur au même chat. Évite le spam d’erreurs pendant les pannes. | +| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Délai minimal entre deux réponses d’erreur dans le même chat. Empêche le spam d’erreurs pendant les pannes. | -Les surcharges par compte, par groupe et par sujet sont prises en charge (même héritage que les autres clés de configuration Telegram). +Des surcharges par compte, par groupe et par sujet sont prises en charge (même héritage que les autres clés de configuration Telegram). ```json5 { @@ -895,40 +896,40 @@ Les surcharges par compte, par groupe et par sujet sont prises en charge (même - - Si `requireMention=false`, le mode confidentialité de Telegram doit autoriser une visibilité complète. - - BotFather : `/setprivacy` -> Désactiver + - Si `requireMention=false`, le mode confidentialité de Telegram doit autoriser la visibilité complète. + - BotFather : `/setprivacy` -> Disable - puis retirer + rajouter le bot au groupe - `openclaw channels status` avertit lorsque la configuration attend des messages de groupe sans mention. - `openclaw channels status --probe` peut vérifier des ID de groupe numériques explicites ; le joker `"*"` ne peut pas être sondé pour l’appartenance. - - test de session rapide : `/activation always`. + - test rapide de session : `/activation always`. - + - lorsque `channels.telegram.groups` existe, le groupe doit être listé (ou inclure `"*"`) - - vérifiez l’appartenance du bot au groupe - - consultez les journaux : `openclaw logs --follow` pour les raisons d’ignorance + - vérifier l’appartenance du bot au groupe + - consulter les journaux : `openclaw logs --follow` pour les raisons d’ignorance - - autorisez l’identité de votre expéditeur (association et/ou `allowFrom` numérique) + - autorisez votre identité d’expéditeur (association et/ou `allowFrom` numérique) - l’autorisation des commandes s’applique toujours même lorsque la politique de groupe est `open` - - `setMyCommands failed` avec `BOT_COMMANDS_TOO_MUCH` signifie que le menu natif contient trop d’entrées ; réduisez les commandes de Plugin/Skills/personnalisées ou désactivez les menus natifs - - `setMyCommands failed` avec des erreurs réseau/fetch indique généralement des problèmes d’accessibilité DNS/HTTPS vers `api.telegram.org` + - `setMyCommands failed` avec `BOT_COMMANDS_TOO_MUCH` signifie que le menu natif contient trop d’entrées ; réduisez les commandes de plugin/Skills/personnalisées ou désactivez les menus natifs + - `setMyCommands failed` avec des erreurs réseau/fetch indique généralement des problèmes de connectivité DNS/HTTPS vers `api.telegram.org` - - Node 22+ + fetch/proxy personnalisé peut déclencher un comportement d’abandon immédiat si les types `AbortSignal` ne correspondent pas. - - Certains hôtes résolvent d’abord `api.telegram.org` en IPv6 ; une sortie IPv6 défaillante peut provoquer des échecs intermittents de l’API Telegram. - - Si les journaux incluent `TypeError: fetch failed` ou `Network request for 'getUpdates' failed!`, OpenClaw les réessaie désormais comme erreurs réseau récupérables. + - Node 22+ + fetch/proxy personnalisé peuvent déclencher un comportement d’abandon immédiat si les types AbortSignal ne correspondent pas. + - Certains hôtes résolvent `api.telegram.org` en IPv6 en premier ; un trafic sortant IPv6 défectueux peut provoquer des défaillances intermittentes de l’API Telegram. + - Si les journaux incluent `TypeError: fetch failed` ou `Network request for 'getUpdates' failed!`, OpenClaw réessaie désormais ces erreurs comme des erreurs réseau récupérables. - Si les journaux incluent `Polling stall detected`, OpenClaw redémarre le polling et reconstruit le transport Telegram après 120 secondes sans activité de long polling terminée par défaut. - - Augmentez `channels.telegram.pollingStallThresholdMs` uniquement lorsque les appels `getUpdates` longs fonctionnent correctement mais que votre hôte signale quand même de faux redémarrages pour blocage du polling. Les blocages persistants pointent généralement vers des problèmes de proxy, DNS, IPv6 ou de sortie TLS entre l’hôte et `api.telegram.org`. - - Sur les hôtes VPS avec sortie directe/TLS instable, faites passer les appels API Telegram via `channels.telegram.proxy` : + - Augmentez `channels.telegram.pollingStallThresholdMs` uniquement lorsque les appels `getUpdates` de longue durée sont sains mais que votre hôte signale encore de faux redémarrages de polling bloqué. Les blocages persistants indiquent généralement des problèmes de proxy, DNS, IPv6 ou de sortie TLS entre l’hôte et `api.telegram.org`. + - Sur les hôtes VPS avec une sortie directe/TLS instable, faites passer les appels API Telegram via `channels.telegram.proxy` : ```yaml channels: @@ -937,7 +938,7 @@ channels: ``` - Node 22+ utilise par défaut `autoSelectFamily=true` (sauf WSL2) et `dnsResultOrder=ipv4first`. - - Si votre hôte est WSL2 ou fonctionne explicitement mieux avec un comportement IPv4 uniquement, forcez la sélection de famille : + - Si votre hôte est WSL2 ou fonctionne explicitement mieux en IPv4 uniquement, forcez la sélection de famille : ```yaml channels: @@ -949,8 +950,8 @@ channels: - Les réponses de plage de benchmark RFC 2544 (`198.18.0.0/15`) sont déjà autorisées par défaut pour les téléchargements de médias Telegram. Si une fausse IP de confiance ou un proxy transparent réécrit `api.telegram.org` vers une autre - adresse privée/interne/à usage spécial pendant les téléchargements de médias, vous pouvez activer - le contournement propre à Telegram : + adresse privée/interne/à usage spécial pendant les téléchargements de médias, vous pouvez + activer le contournement réservé à Telegram : ```yaml channels: @@ -959,17 +960,16 @@ channels: dangerouslyAllowPrivateNetwork: true ``` - - Le même opt-in est disponible par compte à + - La même activation facultative est disponible par compte dans `channels.telegram.accounts..network.dangerouslyAllowPrivateNetwork`. - - Si votre proxy résout les hôtes média Telegram en `198.18.x.x`, laissez d’abord - l’option dangereuse désactivée. Les médias Telegram autorisent déjà par défaut la plage de benchmark RFC 2544. + - Si votre proxy résout les hôtes média Telegram en `198.18.x.x`, laissez d’abord le + drapeau dangereux désactivé. Les médias Telegram autorisent déjà par défaut la plage de benchmark RFC 2544. `channels.telegram.network.dangerouslyAllowPrivateNetwork` affaiblit les protections SSRF - des médias Telegram. Utilisez-le uniquement pour des environnements de proxy de confiance contrôlés par l’opérateur - tels que le routage fake-IP de Clash, Mihomo ou Surge lorsqu’ils - synthétisent des réponses privées ou à usage spécial hors de la plage de benchmark RFC 2544. - Laissez-le désactivé pour un accès Telegram normal sur l’internet public. + des médias Telegram. Utilisez-le uniquement pour des environnements de proxy de confiance + contrôlés par l’opérateur tels que le routage fake-IP de Clash, Mihomo ou Surge lorsqu’ils + synthétisent des réponses privées ou à usage spécial en dehors de la plage de benchmark RFC 2544. Laissez-le désactivé pour un accès Telegram normal sur internet public. - Surcharges d’environnement (temporaires) : @@ -986,9 +986,9 @@ dig +short api.telegram.org AAAA -Plus d’aide : [Dépannage du canal](/fr/channels/troubleshooting). +Aide supplémentaire : [Dépannage des canaux](/fr/channels/troubleshooting). -## Pointeurs vers la référence de configuration Telegram +## Pointeurs de référence de configuration Telegram Référence principale : @@ -996,63 +996,64 @@ Référence principale : - `channels.telegram.botToken` : jeton du bot (BotFather). - `channels.telegram.tokenFile` : lit le jeton depuis le chemin d’un fichier ordinaire. Les liens symboliques sont rejetés. - `channels.telegram.dmPolicy` : `pairing | allowlist | open | disabled` (par défaut : pairing). -- `channels.telegram.allowFrom` : liste d’autorisation DM (ID utilisateur Telegram numériques). `allowlist` nécessite au moins un ID d’expéditeur. `open` nécessite `"*"`. `openclaw doctor --fix` peut résoudre les anciennes entrées `@username` en ID et peut récupérer les entrées de liste d’autorisation depuis les fichiers du magasin d’association dans les flux de migration `allowlist`. +- `channels.telegram.allowFrom` : liste d’autorisation des MP (ID utilisateur Telegram numériques). `allowlist` nécessite au moins un ID d’expéditeur. `open` nécessite `"*"`. `openclaw doctor --fix` peut résoudre les anciennes entrées `@username` en ID et peut récupérer des entrées de liste d’autorisation depuis des fichiers du magasin d’association dans les flux de migration allowlist. - `channels.telegram.actions.poll` : active ou désactive la création de sondages Telegram (activé par défaut ; nécessite toujours `sendMessage`). - `channels.telegram.defaultTo` : cible Telegram par défaut utilisée par le CLI `--deliver` lorsqu’aucun `--reply-to` explicite n’est fourni. - `channels.telegram.groupPolicy` : `open | allowlist | disabled` (par défaut : allowlist). -- `channels.telegram.groupAllowFrom` : liste d’autorisation des expéditeurs de groupe (ID utilisateur Telegram numériques). `openclaw doctor --fix` peut résoudre les anciennes entrées `@username` en ID. Les entrées non numériques sont ignorées au moment de l’authentification. L’authentification de groupe n’utilise pas le repli vers le magasin d’association DM (`2026.2.25+`). +- `channels.telegram.groupAllowFrom` : liste d’autorisation des expéditeurs de groupe (ID utilisateur Telegram numériques). `openclaw doctor --fix` peut résoudre les anciennes entrées `@username` en ID. Les entrées non numériques sont ignorées au moment de l’authentification. L’authentification de groupe n’utilise pas le repli vers le magasin d’association des MP (`2026.2.25+`). - Priorité multi-comptes : - Lorsque deux ID de compte ou plus sont configurés, définissez `channels.telegram.defaultAccount` (ou incluez `channels.telegram.accounts.default`) pour rendre le routage par défaut explicite. - - Si aucun n’est défini, OpenClaw retombe sur le premier ID de compte normalisé et `openclaw doctor` émet un avertissement. + - Si aucun n’est défini, OpenClaw se rabat sur le premier ID de compte normalisé et `openclaw doctor` affiche un avertissement. - `channels.telegram.accounts.default.allowFrom` et `channels.telegram.accounts.default.groupAllowFrom` s’appliquent uniquement au compte `default`. - Les comptes nommés héritent de `channels.telegram.allowFrom` et `channels.telegram.groupAllowFrom` lorsque les valeurs au niveau du compte ne sont pas définies. - Les comptes nommés n’héritent pas de `channels.telegram.accounts.default.allowFrom` / `groupAllowFrom`. - `channels.telegram.groups` : valeurs par défaut par groupe + liste d’autorisation (utilisez `"*"` pour les valeurs par défaut globales). - `channels.telegram.groups..groupPolicy` : surcharge par groupe pour groupPolicy (`open | allowlist | disabled`). - - `channels.telegram.groups..requireMention` : valeur par défaut de limitation par mention. - - `channels.telegram.groups..skills` : filtre Skills (omis = tous les Skills, vide = aucun). + - `channels.telegram.groups..requireMention` : valeur par défaut de restriction par mention. + - `channels.telegram.groups..skills` : filtre de Skills (omis = toutes les Skills, vide = aucune). - `channels.telegram.groups..allowFrom` : surcharge par groupe de la liste d’autorisation des expéditeurs. - `channels.telegram.groups..systemPrompt` : prompt système supplémentaire pour le groupe. - - `channels.telegram.groups..enabled` : désactive le groupe si `false`. + - `channels.telegram.groups..enabled` : désactive le groupe lorsque la valeur est `false`. - `channels.telegram.groups..topics..*` : surcharges par sujet (champs de groupe + `agentId` propre au sujet). - - `channels.telegram.groups..topics..agentId` : route ce sujet vers un agent spécifique (remplace le routage au niveau du groupe et par liaison). + - `channels.telegram.groups..topics..agentId` : route ce sujet vers un agent spécifique (remplace le routage au niveau du groupe et des liaisons). - `channels.telegram.groups..topics..groupPolicy` : surcharge par sujet pour groupPolicy (`open | allowlist | disabled`). -- `channels.telegram.groups..topics..requireMention` : surcharge par sujet de la limitation par mention. -- `bindings[]` de niveau supérieur avec `type: "acp"` et l’ID canonique du sujet `chatId:topic:topicId` dans `match.peer.id` : champs de liaison persistante de sujet ACP (voir [Agents ACP](/fr/tools/acp-agents#channel-specific-settings)). -- `channels.telegram.direct..topics..agentId` : route les sujets DM vers un agent spécifique (même comportement que les sujets de forum). -- `channels.telegram.execApprovals.enabled` : active Telegram comme client natif d’approbation exec basé sur le chat pour ce compte. -- `channels.telegram.execApprovals.approvers` : ID utilisateur Telegram autorisés à approuver ou refuser les requêtes exec. Optionnel lorsque `channels.telegram.allowFrom` ou un `channels.telegram.defaultTo` direct identifie déjà le propriétaire. +- `channels.telegram.groups..topics..requireMention` : surcharge par sujet de la restriction par mention. +- `bindings[]` de niveau supérieur avec `type: "acp"` et l’ID canonique de sujet `chatId:topic:topicId` dans `match.peer.id` : champs de liaison persistante de sujet ACP (voir [Agents ACP](/fr/tools/acp-agents#channel-specific-settings)). +- `channels.telegram.direct..topics..agentId` : route les sujets de MP vers un agent spécifique (même comportement que pour les sujets de forum). +- `channels.telegram.execApprovals.enabled` : active Telegram comme client d’approbation exec par chat pour ce compte. +- `channels.telegram.execApprovals.approvers` : ID utilisateur Telegram autorisés à approuver ou refuser des demandes exec. Facultatif lorsque `channels.telegram.allowFrom` ou un `channels.telegram.defaultTo` direct identifie déjà le propriétaire. - `channels.telegram.execApprovals.target` : `dm | channel | both` (par défaut : `dm`). `channel` et `both` préservent le sujet Telegram d’origine lorsqu’il est présent. -- `channels.telegram.execApprovals.agentFilter` : filtre d’ID d’agent optionnel pour les invites d’approbation transférées. -- `channels.telegram.execApprovals.sessionFilter` : filtre optionnel de clé de session (sous-chaîne ou regex) pour les invites d’approbation transférées. +- `channels.telegram.execApprovals.agentFilter` : filtre facultatif par ID d’agent pour les invites d’approbation transférées. +- `channels.telegram.execApprovals.sessionFilter` : filtre facultatif par clé de session (sous-chaîne ou regex) pour les invites d’approbation transférées. - `channels.telegram.accounts..execApprovals` : surcharge par compte pour le routage des approbations exec Telegram et l’autorisation des approbateurs. - `channels.telegram.capabilities.inlineButtons` : `off | dm | group | all | allowlist` (par défaut : allowlist). - `channels.telegram.accounts..capabilities.inlineButtons` : surcharge par compte. -- `channels.telegram.commands.nativeSkills` : active/désactive les commandes natives Skills de Telegram. +- `channels.telegram.commands.nativeSkills` : active/désactive les commandes Telegram natives de Skills. - `channels.telegram.replyToMode` : `off | first | all` (par défaut : `off`). - `channels.telegram.textChunkLimit` : taille des segments sortants (caractères). - `channels.telegram.chunkMode` : `length` (par défaut) ou `newline` pour découper sur les lignes vides (limites de paragraphe) avant le découpage par longueur. - `channels.telegram.linkPreview` : active/désactive les aperçus de liens pour les messages sortants (par défaut : true). -- `channels.telegram.streaming` : `off | partial | block | progress` (aperçu du flux en direct ; par défaut : `partial` ; `progress` correspond à `partial` ; `block` est une compatibilité héritée du mode aperçu). Le flux d’aperçu Telegram utilise un seul message d’aperçu modifié sur place. -- `channels.telegram.mediaMaxMb` : plafond de médias Telegram entrants/sortants (Mo, par défaut : 100). -- `channels.telegram.retry` : politique de nouvelle tentative pour les assistants d’envoi Telegram (CLI/outils/actions) sur les erreurs d’API sortantes récupérables (tentatives, `minDelayMs`, `maxDelayMs`, `jitter`). -- `channels.telegram.network.autoSelectFamily` : remplace `autoSelectFamily` de Node (`true`=activer, `false`=désactiver). Activé par défaut sur Node 22+, avec WSL2 désactivé par défaut. -- `channels.telegram.network.dnsResultOrder` : remplace l’ordre des résultats DNS (`ipv4first` ou `verbatim`). `ipv4first` par défaut sur Node 22+. -- `channels.telegram.network.dangerouslyAllowPrivateNetwork` : opt-in dangereux pour les environnements de fausse IP ou de proxy transparent de confiance où les téléchargements de médias Telegram résolvent `api.telegram.org` vers des adresses privées/internes/à usage spécial hors de l’autorisation par défaut de la plage de benchmark RFC 2544. -- `channels.telegram.proxy` : URL de proxy pour les appels Bot API (SOCKS/HTTP). +- `channels.telegram.streaming` : `off | partial | block | progress` (aperçu de flux en direct ; par défaut : `partial` ; `progress` correspond à `partial` ; `block` est une compatibilité avec l’ancien mode d’aperçu). L’aperçu de flux Telegram utilise un seul message d’aperçu modifié sur place. +- `channels.telegram.streaming.preview.toolProgress` : réutilise le message d’aperçu en direct pour les mises à jour d’outil/progression lorsque l’aperçu de flux est actif (par défaut : `true`). Définissez `false` pour conserver des messages d’outil/progression séparés. +- `channels.telegram.mediaMaxMb` : limite des médias Telegram entrants/sortants (Mo, par défaut : 100). +- `channels.telegram.retry` : politique de nouvelle tentative pour les aides d’envoi Telegram (CLI/outils/actions) lors d’erreurs récupérables de l’API sortante (`attempts`, `minDelayMs`, `maxDelayMs`, `jitter`). +- `channels.telegram.network.autoSelectFamily` : remplace Node autoSelectFamily (true=activé, false=désactivé). Activé par défaut sur Node 22+, avec WSL2 désactivé par défaut. +- `channels.telegram.network.dnsResultOrder` : remplace l’ordre des résultats DNS (`ipv4first` ou `verbatim`). Par défaut : `ipv4first` sur Node 22+. +- `channels.telegram.network.dangerouslyAllowPrivateNetwork` : activation dangereuse pour les environnements de fausse IP de confiance ou de proxy transparent où les téléchargements de médias Telegram résolvent `api.telegram.org` vers des adresses privées/internes/à usage spécial en dehors de la plage de benchmark RFC 2544 autorisée par défaut. +- `channels.telegram.proxy` : URL de proxy pour les appels à l’API Bot (SOCKS/HTTP). - `channels.telegram.webhookUrl` : active le mode Webhook (nécessite `channels.telegram.webhookSecret`). -- `channels.telegram.webhookSecret` : secret Webhook (obligatoire lorsque `webhookUrl` est défini). -- `channels.telegram.webhookPath` : chemin local du Webhook (par défaut `/telegram-webhook`). -- `channels.telegram.webhookHost` : hôte de liaison local du Webhook (par défaut `127.0.0.1`). -- `channels.telegram.webhookPort` : port de liaison local du Webhook (par défaut `8787`). -- `channels.telegram.actions.reactions` : limite les réactions de l’outil Telegram. -- `channels.telegram.actions.sendMessage` : limite les envois de message de l’outil Telegram. -- `channels.telegram.actions.deleteMessage` : limite les suppressions de message de l’outil Telegram. -- `channels.telegram.actions.sticker` : limite les actions de sticker Telegram — envoi et recherche (par défaut : false). +- `channels.telegram.webhookSecret` : secret Webhook (requis lorsque webhookUrl est défini). +- `channels.telegram.webhookPath` : chemin local Webhook (par défaut `/telegram-webhook`). +- `channels.telegram.webhookHost` : hôte local de liaison Webhook (par défaut `127.0.0.1`). +- `channels.telegram.webhookPort` : port local de liaison Webhook (par défaut `8787`). +- `channels.telegram.actions.reactions` : restreint les réactions d’outil Telegram. +- `channels.telegram.actions.sendMessage` : restreint les envois de messages d’outil Telegram. +- `channels.telegram.actions.deleteMessage` : restreint les suppressions de messages d’outil Telegram. +- `channels.telegram.actions.sticker` : restreint les actions de sticker Telegram — envoi et recherche (par défaut : false). - `channels.telegram.reactionNotifications` : `off | own | all` — contrôle quelles réactions déclenchent des événements système (par défaut : `own` si non défini). - `channels.telegram.reactionLevel` : `off | ack | minimal | extensive` — contrôle la capacité de réaction de l’agent (par défaut : `minimal` si non défini). - `channels.telegram.errorPolicy` : `reply | silent` — contrôle le comportement des réponses d’erreur (par défaut : `reply`). Surcharges par compte/groupe/sujet prises en charge. -- `channels.telegram.errorCooldownMs` : minimum en ms entre les réponses d’erreur au même chat (par défaut : `60000`). Évite le spam d’erreurs pendant les pannes. +- `channels.telegram.errorCooldownMs` : nombre minimal de ms entre deux réponses d’erreur dans le même chat (par défaut : `60000`). Empêche le spam d’erreurs pendant les pannes. - [Référence de configuration - Telegram](/fr/gateway/configuration-reference#telegram) @@ -1063,8 +1064,8 @@ Champs Telegram spécifiques à fort signal : - approbations exec : `execApprovals`, `accounts.*.execApprovals` - commande/menu : `commands.native`, `commands.nativeSkills`, `customCommands` - fils/réponses : `replyToMode` -- streaming : `streaming` (aperçu), `blockStreaming` -- mise en forme/livraison : `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix` +- flux : `streaming` (aperçu), `streaming.preview.toolProgress`, `blockStreaming` +- formatage/livraison : `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix` - média/réseau : `mediaMaxMb`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy` - Webhook : `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost` - actions/capacités : `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker` @@ -1078,5 +1079,5 @@ Champs Telegram spécifiques à fort signal : - [Groupes](/fr/channels/groups) - [Sécurité](/fr/gateway/security) - [Routage des canaux](/fr/channels/channel-routing) -- [Routage multi-agents](/fr/concepts/multi-agent) +- [Routage multi-agent](/fr/concepts/multi-agent) - [Dépannage](/fr/channels/troubleshooting) diff --git a/docs/fr/gateway/multiple-gateways.md b/docs/fr/gateway/multiple-gateways.md index e8c7c66b0..c9f4d1421 100644 --- a/docs/fr/gateway/multiple-gateways.md +++ b/docs/fr/gateway/multiple-gateways.md @@ -1,108 +1,144 @@ --- read_when: - - Exécution de plusieurs passerelles sur la même machine - - Vous avez besoin d’une config/d’un état/de ports isolés par passerelle -summary: Exécuter plusieurs passerelles OpenClaw sur un même hôte (isolation, ports et profils) -title: Passerelles multiples + - Exécution de plusieurs Gateway sur la même machine + - Vous avez besoin d’une configuration, d’un état et de ports isolés pour chaque Gateway +summary: Exécuter plusieurs Gateway OpenClaw sur un même hôte (isolation, ports et profils) +title: Plusieurs Gateway x-i18n: - generated_at: "2026-04-05T12:42:19Z" + generated_at: "2026-04-21T17:45:42Z" model: gpt-5.4 provider: openai - source_hash: 061f204bf56b28c6bd0e2c9aee6c561a8a162ca219060117fea4d3a007f01899 + source_hash: 8c3fcb921bc6596040e9249467964bd9dcd40ea7c16e958bb378247b0f994a7b source_path: gateway/multiple-gateways.md workflow: 15 --- -# Passerelles multiples (même hôte) +# Plusieurs Gateway (même hôte) -La plupart des configurations devraient utiliser une seule passerelle, car une seule passerelle peut gérer plusieurs connexions de messagerie et agents. Si vous avez besoin d’une isolation ou d’une redondance plus forte (par ex. un bot de secours), exécutez des passerelles distinctes avec des profils/ports isolés. +La plupart des configurations devraient utiliser un seul Gateway, car un Gateway unique peut gérer plusieurs connexions de messagerie et agents. Si vous avez besoin d’une isolation plus forte ou de redondance (par exemple, un bot de secours), exécutez des Gateway distincts avec des profils et des ports isolés. -## Checklist d’isolation (obligatoire) +## Liste de contrôle d’isolation (obligatoire) - `OPENCLAW_CONFIG_PATH` — fichier de configuration par instance -- `OPENCLAW_STATE_DIR` — sessions, identifiants, caches par instance -- `agents.defaults.workspace` — racine de workspace par instance +- `OPENCLAW_STATE_DIR` — sessions, identifiants et caches par instance +- `agents.defaults.workspace` — racine d’espace de travail par instance - `gateway.port` (ou `--port`) — unique par instance - Les ports dérivés (browser/canvas) ne doivent pas se chevaucher -Si ces éléments sont partagés, vous rencontrerez des courses de configuration et des conflits de port. +Si ces éléments sont partagés, vous rencontrerez des conflits de configuration et de ports. -## Recommandé : profils (`--profile`) +## Recommandé : utilisez le profil par défaut pour le principal, un profil nommé pour le secours -Les profils limitent automatiquement `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` et suffixent les noms de service. +Les profils appliquent automatiquement un périmètre à `OPENCLAW_STATE_DIR` + `OPENCLAW_CONFIG_PATH` et ajoutent un suffixe aux noms de service. Pour +la plupart des configurations de bot de secours, gardez le bot principal sur le profil par défaut et attribuez uniquement +au bot de secours un profil nommé tel que `rescue`. ```bash -# principal -openclaw --profile main setup -openclaw --profile main gateway --port 18789 +# principal (profil par défaut) +openclaw setup +openclaw gateway --port 18789 # secours openclaw --profile rescue setup openclaw --profile rescue gateway --port 19001 ``` -Services par profil : +Services : ```bash -openclaw --profile main gateway install +openclaw gateway install openclaw --profile rescue gateway install ``` +Si vous souhaitez que les deux Gateway utilisent des profils nommés, cela fonctionne aussi, mais ce n’est pas +obligatoire. + ## Guide du bot de secours -Exécutez une seconde passerelle sur le même hôte avec ses propres : +Configuration recommandée : -- profil/configuration -- répertoire d’état -- workspace -- port de base (plus les ports dérivés) +- gardez le bot principal sur le profil par défaut +- exécutez le bot de secours avec `--profile rescue` +- utilisez un bot Telegram complètement distinct pour le compte de secours +- gardez le bot de secours sur un port de base différent, par exemple `19001` -Cela maintient le bot de secours isolé du bot principal afin qu’il puisse déboguer ou appliquer des changements de configuration si le bot principal est hors service. +Cela permet d’isoler le bot de secours du bot principal afin qu’il puisse déboguer ou appliquer +des modifications de configuration si le bot principal est indisponible. Laissez au moins 20 ports entre les +ports de base afin que les ports dérivés browser/canvas/CDP n’entrent jamais en collision. -Espacement des ports : laissez au moins 20 ports entre les ports de base afin que les ports dérivés browser/canvas/CDP n’entrent jamais en collision. +### Canal/compte de secours recommandé -### Comment installer (bot de secours) +Pour la plupart des configurations, utilisez un bot Telegram complètement distinct pour le profil de secours. + +Pourquoi Telegram : + +- facile à réserver aux opérateurs uniquement +- jeton de bot et identité distincts +- indépendant de l’installation du canal/de l’application du bot principal +- chemin de récupération simple basé sur les messages privés lorsque le bot principal est défaillant + +L’élément important est l’indépendance complète : compte de bot distinct, identifiants distincts, profil OpenClaw distinct, espace de travail distinct et port distinct. + +### Flux d’installation recommandé + +Utilisez ceci comme configuration par défaut, sauf si vous avez une raison solide de faire autrement : ```bash -# Bot principal (existant ou nouveau, sans paramètre --profile) -# S’exécute sur le port 18789 + ports Chrome CDC/Canvas/... +# Bot principal (profil par défaut, port 18789) openclaw onboard openclaw gateway install -# Bot de secours (profil + ports isolés) +# Bot de secours (bot Telegram distinct, profil distinct, port 19001) openclaw --profile rescue onboard -# Remarques : -# - le nom du workspace recevra par défaut le suffixe -rescue -# - le port doit être au moins 18789 + 20 ports, -# il est préférable de choisir un port de base complètement différent, comme 19789, -# - le reste de l’intégration guidée est identique à la normale - -# Pour installer le service (si cela n’a pas eu lieu automatiquement pendant la configuration) openclaw --profile rescue gateway install ``` +Pendant `openclaw --profile rescue onboard` : + +- utilisez le jeton du bot Telegram distinct +- conservez le profil `rescue` +- utilisez un port de base au moins 20 plus élevé que celui du bot principal +- acceptez l’espace de travail de secours par défaut, sauf si vous en gérez déjà un vous-même + +Si l’onboarding a déjà installé le service de secours pour vous, le +`gateway install` final n’est pas nécessaire. + +### Ce que l’onboarding modifie + +`openclaw --profile rescue onboard` utilise le flux d’onboarding normal, mais +écrit tout dans un profil distinct. + +En pratique, cela signifie que le bot de secours obtient son propre : + +- fichier de configuration +- répertoire d’état +- espace de travail (par défaut `~/.openclaw/workspace-rescue`) +- nom de service géré + +Les invites sont par ailleurs les mêmes que pour un onboarding normal. + ## Mappage des ports (dérivés) Port de base = `gateway.port` (ou `OPENCLAW_GATEWAY_PORT` / `--port`). -- port du service de contrôle browser = base + 2 (loopback uniquement) -- l’hôte canvas est servi sur le serveur HTTP de la passerelle (même port que `gateway.port`) -- les ports CDP des profils browser sont alloués automatiquement depuis `browser.controlPort + 9 .. + 108` +- port du service de contrôle du browser = base + 2 (loopback uniquement) +- l’hôte canvas est servi sur le serveur HTTP Gateway (même port que `gateway.port`) +- les ports CDP du profil Browser sont alloués automatiquement à partir de `browser.controlPort + 9 .. + 108` -Si vous remplacez l’un de ces paramètres dans la config ou l’environnement, vous devez les garder uniques par instance. +Si vous remplacez l’un de ces paramètres dans la configuration ou l’environnement, vous devez les garder uniques par instance. -## Remarques sur Browser/CDP (piège courant) +## Notes browser/CDP (piège fréquent) -- **Ne fixez pas** `browser.cdpUrl` aux mêmes valeurs sur plusieurs instances. -- Chaque instance a besoin de son propre port de contrôle browser et de sa propre plage CDP (dérivés de son port de passerelle). +- **N’épinglez pas** `browser.cdpUrl` aux mêmes valeurs sur plusieurs instances. +- Chaque instance a besoin de son propre port de contrôle browser et de sa propre plage CDP (dérivée de son port Gateway). - Si vous avez besoin de ports CDP explicites, définissez `browser.profiles..cdpPort` par instance. - Chrome distant : utilisez `browser.profiles..cdpUrl` (par profil, par instance). -## Exemple manuel avec env +## Exemple manuel avec variables d’environnement ```bash OPENCLAW_CONFIG_PATH=~/.openclaw/main.json \ -OPENCLAW_STATE_DIR=~/.openclaw-main \ +OPENCLAW_STATE_DIR=~/.openclaw \ openclaw gateway --port 18789 OPENCLAW_CONFIG_PATH=~/.openclaw/rescue.json \ @@ -113,15 +149,15 @@ openclaw gateway --port 19001 ## Vérifications rapides ```bash -openclaw --profile main gateway status --deep +openclaw gateway status --deep openclaw --profile rescue gateway status --deep openclaw --profile rescue gateway probe -openclaw --profile main status +openclaw status openclaw --profile rescue status openclaw --profile rescue browser status ``` Interprétation : -- `gateway status --deep` aide à détecter les services launchd/systemd/schtasks obsolètes issus d’installations plus anciennes. -- Un texte d’avertissement de `gateway probe` tel que `multiple reachable gateways detected` n’est attendu que lorsque vous exécutez intentionnellement plusieurs passerelles isolées. +- `gateway status --deep` aide à détecter les services launchd/systemd/schtasks obsolètes issus d’anciennes installations. +- Le texte d’avertissement de `gateway probe`, tel que `multiple reachable gateways detected`, n’est attendu que lorsque vous exécutez intentionnellement plus d’un gateway isolé. diff --git a/docs/fr/tools/slash-commands.md b/docs/fr/tools/slash-commands.md index fbd116933..df0296f52 100644 --- a/docs/fr/tools/slash-commands.md +++ b/docs/fr/tools/slash-commands.md @@ -1,36 +1,36 @@ --- read_when: - Utiliser ou configurer les commandes de chat - - Débogage du routage des commandes ou des autorisations -summary: 'Commandes slash : texte vs natives, configuration et commandes prises en charge' + - Déboguer le routage des commandes ou les autorisations +summary: 'Commandes slash : texte ou natives, configuration et commandes prises en charge' title: Commandes slash x-i18n: - generated_at: "2026-04-21T13:36:58Z" + generated_at: "2026-04-21T17:45:42Z" model: gpt-5.4 provider: openai - source_hash: d90ddee54af7c05b7fdf486590561084581d750e42cd14674d43bbdc0984df5d + source_hash: 26923608329ba2aeece2d4bc8edfa40ae86e03719a9f590f26ff79f57d97521d source_path: tools/slash-commands.md workflow: 15 --- # Commandes slash -Les commandes sont gérées par la Gateway. La plupart des commandes doivent être envoyées comme un message **autonome** commençant par `/`. +Les commandes sont gérées par la Gateway. La plupart des commandes doivent être envoyées comme un message **autonome** qui commence par `/`. La commande de chat bash réservée à l’hôte utilise `! ` (avec `/bash ` comme alias). -Il existe deux systèmes liés : +Il existe deux systèmes liés : -- **Commandes** : messages autonomes `/...`. -- **Directives** : `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`. +- **Commandes** : messages autonomes `/...`. +- **Directives** : `/think`, `/fast`, `/verbose`, `/trace`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`. - Les directives sont retirées du message avant que le modèle ne le voie. - - Dans les messages de chat normaux (pas uniquement composés de directives), elles sont traitées comme des « indications inline » et ne persistent **pas** les paramètres de session. + - Dans les messages de chat normaux (pas uniquement des directives), elles sont traitées comme des « indications en ligne » et ne rendent **pas** persistants les paramètres de session. - Dans les messages composés uniquement de directives (le message ne contient que des directives), elles persistent dans la session et répondent avec un accusé de réception. - Les directives ne sont appliquées que pour les **expéditeurs autorisés**. Si `commands.allowFrom` est défini, c’est la seule - liste d’autorisation utilisée ; sinon, l’autorisation provient des listes d’autorisation/appairages du canal plus `commands.useAccessGroups`. + liste d’autorisation utilisée ; sinon, l’autorisation provient des listes d’autorisation/d’association du canal ainsi que de `commands.useAccessGroups`. Les expéditeurs non autorisés voient les directives traitées comme du texte brut. -Il existe aussi quelques **raccourcis inline** (expéditeurs autorisés/listés uniquement) : `/help`, `/commands`, `/status`, `/whoami` (`/id`). -Ils s’exécutent immédiatement, sont retirés avant que le modèle ne voie le message, et le texte restant continue dans le flux normal. +Il existe aussi quelques **raccourcis en ligne** (expéditeurs autorisés/sur liste d’autorisation uniquement) : `/help`, `/commands`, `/status`, `/whoami` (`/id`). +Ils s’exécutent immédiatement, sont retirés avant que le modèle ne voie le message, et le texte restant suit le flux normal. ## Configuration @@ -60,107 +60,109 @@ Ils s’exécutent immédiatement, sont retirés avant que le modèle ne voie le ``` - `commands.text` (par défaut `true`) active l’analyse de `/...` dans les messages de chat. - - Sur les surfaces sans commandes natives (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), les commandes texte continuent de fonctionner même si vous définissez cette valeur sur `false`. + - Sur les surfaces sans commandes natives (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), les commandes textuelles fonctionnent quand même, même si vous définissez cette option sur `false`. - `commands.native` (par défaut `"auto"`) enregistre les commandes natives. - - Auto : activé pour Discord/Telegram ; désactivé pour Slack (jusqu’à ce que vous ajoutiez des commandes slash) ; ignoré pour les fournisseurs sans prise en charge native. - - Définissez `channels.discord.commands.native`, `channels.telegram.commands.native` ou `channels.slack.commands.native` pour remplacer par fournisseur (booléen ou `"auto"`). + - Auto : activé pour Discord/Telegram ; désactivé pour Slack (jusqu’à ce que vous ajoutiez des commandes slash) ; ignoré pour les fournisseurs sans prise en charge native. + - Définissez `channels.discord.commands.native`, `channels.telegram.commands.native` ou `channels.slack.commands.native` pour remplacer le comportement par fournisseur (booléen ou `"auto"`). - `false` efface les commandes précédemment enregistrées sur Discord/Telegram au démarrage. Les commandes Slack sont gérées dans l’application Slack et ne sont pas supprimées automatiquement. -- `commands.nativeSkills` (par défaut `"auto"`) enregistre les commandes de **Skills** nativement lorsqu’elles sont prises en charge. - - Auto : activé pour Discord/Telegram ; désactivé pour Slack (Slack exige la création d’une commande slash par Skill). - - Définissez `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` ou `channels.slack.commands.nativeSkills` pour remplacer par fournisseur (booléen ou `"auto"`). -- `commands.bash` (par défaut `false`) active `! ` pour exécuter des commandes shell de l’hôte (`/bash ` est un alias ; nécessite les listes d’autorisation `tools.elevated`). -- `commands.bashForegroundMs` (par défaut `2000`) contrôle combien de temps bash attend avant de passer en mode arrière-plan (`0` le place immédiatement en arrière-plan). -- `commands.config` (par défaut `false`) active `/config` (lecture/écriture de `openclaw.json`). -- `commands.mcp` (par défaut `false`) active `/mcp` (lecture/écriture de la configuration MCP gérée par OpenClaw sous `mcp.servers`). -- `commands.plugins` (par défaut `false`) active `/plugins` (découverte/statut des plugins plus installation et contrôles d’activation/désactivation). -- `commands.debug` (par défaut `false`) active `/debug` (remplacements en exécution uniquement). -- `commands.restart` (par défaut `true`) active `/restart` ainsi que les actions d’outil de redémarrage de la Gateway. -- `commands.ownerAllowFrom` (facultatif) définit la liste d’autorisation explicite du propriétaire pour les surfaces de commandes/outils réservées au propriétaire. Elle est distincte de `commands.allowFrom`. -- `commands.ownerDisplay` contrôle la manière dont les identifiants du propriétaire apparaissent dans le prompt système : `raw` ou `hash`. -- `commands.ownerDisplaySecret` définit facultativement le secret HMAC utilisé lorsque `commands.ownerDisplay="hash"`. +- `commands.nativeSkills` (par défaut `"auto"`) enregistre les commandes de **Skills** de manière native lorsque c’est pris en charge. + - Auto : activé pour Discord/Telegram ; désactivé pour Slack (Slack exige la création d’une commande slash par skill). + - Définissez `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills` ou `channels.slack.commands.nativeSkills` pour remplacer le comportement par fournisseur (booléen ou `"auto"`). +- `commands.bash` (par défaut `false`) active `! ` pour exécuter des commandes shell sur l’hôte (`/bash ` est un alias ; nécessite les listes d’autorisation `tools.elevated`). +- `commands.bashForegroundMs` (par défaut `2000`) contrôle combien de temps bash attend avant de passer en mode arrière-plan (`0` envoie immédiatement en arrière-plan). +- `commands.config` (par défaut `false`) active `/config` (lit/écrit `openclaw.json`). +- `commands.mcp` (par défaut `false`) active `/mcp` (lit/écrit la configuration MCP gérée par OpenClaw sous `mcp.servers`). +- `commands.plugins` (par défaut `false`) active `/plugins` (découverte/état des plugins ainsi que contrôles d’installation + activation/désactivation). +- `commands.debug` (par défaut `false`) active `/debug` (remplacements réservés à l’exécution). +- `commands.restart` (par défaut `true`) active `/restart` ainsi que les actions d’outil de redémarrage de la gateway. +- `commands.ownerAllowFrom` (facultatif) définit la liste d’autorisation explicite du propriétaire pour les surfaces de commande/d’outil réservées au propriétaire. Elle est distincte de `commands.allowFrom`. +- `commands.ownerDisplay` contrôle la façon dont les ID propriétaire apparaissent dans le prompt système : `raw` ou `hash`. +- `commands.ownerDisplaySecret` définit éventuellement le secret HMAC utilisé lorsque `commands.ownerDisplay="hash"`. - `commands.allowFrom` (facultatif) définit une liste d’autorisation par fournisseur pour l’autorisation des commandes. Lorsqu’elle est configurée, c’est la - seule source d’autorisation pour les commandes et directives (`commands.useAccessGroups` ainsi que les listes d’autorisation/appairages du canal sont ignorés). Utilisez `"*"` pour une valeur globale par défaut ; les clés spécifiques à un fournisseur remplacent cette valeur. -- `commands.useAccessGroups` (par défaut `true`) applique les listes d’autorisation/politiques pour les commandes lorsque `commands.allowFrom` n’est pas défini. + seule source d’autorisation pour les commandes et directives (`commands.useAccessGroups` ainsi que les listes d’autorisation/l’association du canal + sont ignorés). Utilisez `"*"` comme valeur globale par défaut ; les clés spécifiques à un fournisseur la remplacent. +- `commands.useAccessGroups` (par défaut `true`) applique les listes d’autorisation/politiques aux commandes lorsque `commands.allowFrom` n’est pas défini. ## Liste des commandes -Source de vérité actuelle : +Source de référence actuelle : -- les intégrées core proviennent de `src/auto-reply/commands-registry.shared.ts` +- les commandes intégrées du cœur proviennent de `src/auto-reply/commands-registry.shared.ts` - les commandes dock générées proviennent de `src/auto-reply/commands-registry.data.ts` -- les commandes de plugin proviennent des appels plugin `registerCommand()` -- la disponibilité réelle sur votre Gateway dépend toujours des drapeaux de configuration, de la surface du canal et des plugins installés/activés +- les commandes de plugin proviennent des appels `registerCommand()` des plugins +- la disponibilité réelle sur votre gateway dépend toujours des indicateurs de configuration, de la surface du canal et des plugins installés/activés -### Commandes intégrées core +### Commandes intégrées du cœur -Commandes intégrées disponibles aujourd’hui : +Commandes intégrées disponibles aujourd’hui : -- `/new [model]` démarre une nouvelle session ; `/reset` est l’alias de réinitialisation. +- `/new [model]` démarre une nouvelle session ; `/reset` est l’alias de réinitialisation. +- `/reset soft [message]` conserve la transcription actuelle, supprime les ID de session backend CLI réutilisés et relance en place le chargement du démarrage/du prompt système. - `/compact [instructions]` compacte le contexte de session. Voir [/concepts/compaction](/fr/concepts/compaction). - `/stop` interrompt l’exécution en cours. -- `/session idle ` et `/session max-age ` gèrent l’expiration de liaison au fil. -- `/think ` définit le niveau de réflexion. Les options proviennent du profil fournisseur du modèle actif ; les niveaux courants sont `off`, `minimal`, `low`, `medium` et `high`, avec des niveaux personnalisés tels que `xhigh`, `adaptive`, `max`, ou le binaire `on` uniquement lorsqu’ils sont pris en charge. Alias : `/thinking`, `/t`. -- `/verbose on|off|full` active/désactive la sortie détaillée. Alias : `/v`. -- `/trace on|off` active/désactive la sortie de trace Plugin pour la session en cours. +- `/session idle ` et `/session max-age ` gèrent l’expiration de la liaison de fil. +- `/think ` définit le niveau de réflexion. Les options proviennent du profil fournisseur du modèle actif ; les niveaux courants sont `off`, `minimal`, `low`, `medium` et `high`, avec des niveaux personnalisés comme `xhigh`, `adaptive`, `max`, ou le mode binaire `on` uniquement lorsqu’ils sont pris en charge. Alias : `/thinking`, `/t`. +- `/verbose on|off|full` active ou désactive la sortie verbeuse. Alias : `/v`. +- `/trace on|off` active ou désactive la sortie de trace des plugins pour la session actuelle. - `/fast [status|on|off]` affiche ou définit le mode rapide. -- `/reasoning [on|off|stream]` active/désactive la visibilité du raisonnement. Alias : `/reason`. -- `/elevated [on|off|ask|full]` active/désactive le mode elevated. Alias : `/elev`. +- `/reasoning [on|off|stream]` active ou désactive la visibilité du raisonnement. Alias : `/reason`. +- `/elevated [on|off|ask|full]` active ou désactive le mode élevé. Alias : `/elev`. - `/exec host= security= ask= node=` affiche ou définit les valeurs par défaut d’exécution. - `/model [name|#|status]` affiche ou définit le modèle. - `/models [provider] [page] [limit=|size=|all]` liste les fournisseurs ou les modèles d’un fournisseur. -- `/queue ` gère le comportement de la file (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) plus des options comme `debounce:2s cap:25 drop:summarize`. +- `/queue ` gère le comportement de la file (`steer`, `interrupt`, `followup`, `collect`, `steer-backlog`) ainsi que des options comme `debounce:2s cap:25 drop:summarize`. - `/help` affiche le résumé d’aide court. - `/commands` affiche le catalogue de commandes généré. - `/tools [compact|verbose]` affiche ce que l’agent actuel peut utiliser maintenant. -- `/status` affiche l’état d’exécution, y compris l’usage/quota du fournisseur lorsqu’il est disponible. -- `/tasks` liste les tâches d’arrière-plan actives/récentes pour la session en cours. +- `/status` affiche l’état d’exécution, y compris l’utilisation/le quota du fournisseur lorsqu’ils sont disponibles. +- `/tasks` liste les tâches d’arrière-plan actives/récentes pour la session actuelle. - `/context [list|detail|json]` explique comment le contexte est assemblé. -- `/export-session [path]` exporte la session en cours au format HTML. Alias : `/export`. -- `/whoami` affiche votre identifiant d’expéditeur. Alias : `/id`. -- `/skill [input]` exécute une Skill par son nom. +- `/export-session [path]` exporte la session actuelle en HTML. Alias : `/export`. +- `/whoami` affiche votre ID expéditeur. Alias : `/id`. +- `/skill [input]` exécute un skill par son nom. - `/allowlist [list|add|remove] ...` gère les entrées de la liste d’autorisation. Texte uniquement. -- `/approve ` résout les demandes d’approbation d’exécution. -- `/btw ` pose une question latérale sans modifier le contexte futur de la session. Voir [/tools/btw](/fr/tools/btw). -- `/subagents list|kill|log|info|send|steer|spawn` gère les exécutions de sous-agents pour la session en cours. +- `/approve ` résout les invites d’approbation d’exécution. +- `/btw ` pose une question annexe sans modifier le contexte futur de la session. Voir [/tools/btw](/fr/tools/btw). +- `/subagents list|kill|log|info|send|steer|spawn` gère les exécutions de sous-agents pour la session actuelle. - `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` gère les sessions ACP et les options d’exécution. -- `/focus ` lie le fil Discord ou le topic/conversation Telegram actuel à une cible de session. +- `/focus ` lie le fil Discord actuel ou le sujet/conversation Telegram à une cible de session. - `/unfocus` supprime la liaison actuelle. -- `/agents` liste les agents liés à un fil pour la session en cours. -- `/kill ` interrompt un ou tous les sous-agents en cours. -- `/steer ` envoie un pilotage à un sous-agent en cours. Alias : `/tell`. +- `/agents` liste les agents liés au fil pour la session actuelle. +- `/kill ` interrompt un ou tous les sous-agents en cours d’exécution. +- `/steer ` envoie une instruction à un sous-agent en cours d’exécution. Alias : `/tell`. - `/config show|get|set|unset` lit ou écrit `openclaw.json`. Réservé au propriétaire. Nécessite `commands.config: true`. -- `/mcp show|get|set|unset` lit ou écrit la configuration de serveur MCP gérée par OpenClaw sous `mcp.servers`. Réservé au propriétaire. Nécessite `commands.mcp: true`. +- `/mcp show|get|set|unset` lit ou écrit la configuration du serveur MCP gérée par OpenClaw sous `mcp.servers`. Réservé au propriétaire. Nécessite `commands.mcp: true`. - `/plugins list|inspect|show|get|install|enable|disable` inspecte ou modifie l’état des plugins. `/plugin` est un alias. Écriture réservée au propriétaire. Nécessite `commands.plugins: true`. -- `/debug show|set|unset|reset` gère les remplacements de configuration en exécution uniquement. Réservé au propriétaire. Nécessite `commands.debug: true`. -- `/usage off|tokens|full|cost` contrôle le pied de page d’usage par réponse ou affiche un résumé local des coûts. +- `/debug show|set|unset|reset` gère les remplacements de configuration réservés à l’exécution. Réservé au propriétaire. Nécessite `commands.debug: true`. +- `/usage off|tokens|full|cost` contrôle le pied de page d’utilisation par réponse ou affiche un résumé local des coûts. - `/tts on|off|status|provider|limit|summary|audio|help` contrôle le TTS. Voir [/tools/tts](/fr/tools/tts). -- `/restart` redémarre OpenClaw lorsqu’il est activé. Par défaut : activé ; définissez `commands.restart: false` pour le désactiver. +- `/restart` redémarre OpenClaw lorsque cette commande est activée. Par défaut : activée ; définissez `commands.restart: false` pour la désactiver. - `/activation mention|always` définit le mode d’activation de groupe. - `/send on|off|inherit` définit la politique d’envoi. Réservé au propriétaire. -- `/bash ` exécute une commande shell sur l’hôte. Texte uniquement. Alias : `! `. Nécessite `commands.bash: true` plus les listes d’autorisation `tools.elevated`. -- `!poll [sessionId]` vérifie un travail bash en arrière-plan. -- `!stop [sessionId]` arrête un travail bash en arrière-plan. +- `/bash ` exécute une commande shell sur l’hôte. Texte uniquement. Alias : `! `. Nécessite `commands.bash: true` ainsi que les listes d’autorisation `tools.elevated`. +- `!poll [sessionId]` vérifie un job bash en arrière-plan. +- `!stop [sessionId]` arrête un job bash en arrière-plan. ### Commandes dock générées -Les commandes dock sont générées à partir des plugins de canal avec prise en charge des commandes natives. Ensemble intégré actuel : +Les commandes dock sont générées à partir de plugins de canal prenant en charge les commandes natives. Ensemble intégré actuel : -- `/dock-discord` (alias : `/dock_discord`) -- `/dock-mattermost` (alias : `/dock_mattermost`) -- `/dock-slack` (alias : `/dock_slack`) -- `/dock-telegram` (alias : `/dock_telegram`) +- `/dock-discord` (alias : `/dock_discord`) +- `/dock-mattermost` (alias : `/dock_mattermost`) +- `/dock-slack` (alias : `/dock_slack`) +- `/dock-telegram` (alias : `/dock_telegram`) -### Commandes des plugins intégrés +### Commandes de plugins intégrés -Les plugins intégrés peuvent ajouter d’autres commandes slash. Commandes intégrées actuelles dans ce dépôt : +Les plugins intégrés peuvent ajouter d’autres commandes slash. Commandes intégrées actuelles dans ce dépôt : -- `/dreaming [on|off|status|help]` active/désactive Dreaming de la mémoire. Voir [Dreaming](/fr/concepts/dreaming). -- `/pair [qr|status|pending|approve|cleanup|notify]` gère le flux d’appairage/configuration de l’appareil. Voir [Appairage](/fr/channels/pairing). -- `/phone status|arm [duration]|disarm` arme temporairement les commandes de Node de téléphone à haut risque. +- `/dreaming [on|off|status|help]` active ou désactive Dreaming de mémoire. Voir [Dreaming](/fr/concepts/dreaming). +- `/pair [qr|status|pending|approve|cleanup|notify]` gère le flux d’association/de configuration d’appareil. Voir [Pairing](/fr/channels/pairing). +- `/phone status|arm [duration]|disarm` arme temporairement les commandes de nœud téléphonique à haut risque. - `/voice status|list [limit]|set ` gère la configuration de voix Talk. Sur Discord, le nom de la commande native est `/talkvoice`. - `/card ...` envoie des préréglages de carte enrichie LINE. Voir [LINE](/fr/channels/line). -- `/codex status|models|threads|resume|compact|review|account|mcp|skills` inspecte et contrôle le harnais app-server Codex intégré. Voir [Harnais Codex](/fr/plugins/codex-harness). -- Commandes réservées à QQBot : +- `/codex status|models|threads|resume|compact|review|account|mcp|skills` inspecte et contrôle le harnais app-server Codex intégré. Voir [Codex Harness](/fr/plugins/codex-harness). +- Commandes réservées à QQBot : - `/bot-ping` - `/bot-version` - `/bot-help` @@ -169,77 +171,76 @@ Les plugins intégrés peuvent ajouter d’autres commandes slash. Commandes int ### Commandes de Skills dynamiques -Les Skills invocables par l’utilisateur sont également exposées comme commandes slash : +Les Skills invocables par l’utilisateur sont également exposées comme commandes slash : - `/skill [input]` fonctionne toujours comme point d’entrée générique. -- les Skills peuvent aussi apparaître comme commandes directes telles que `/prose` lorsque la Skill/le plugin les enregistre. +- les skills peuvent aussi apparaître comme commandes directes telles que `/prose` lorsque le skill/plugin les enregistre. - l’enregistrement natif des commandes de Skills est contrôlé par `commands.nativeSkills` et `channels..commands.nativeSkills`. -Remarques : +Remarques : -- Les commandes acceptent un `:` facultatif entre la commande et les arguments (par ex. `/think: high`, `/send: on`, `/help:`). -- `/new ` accepte un alias de modèle, `provider/model` ou un nom de fournisseur (correspondance approximative) ; sans correspondance, le texte est traité comme corps du message. -- Pour le détail complet de l’usage par fournisseur, utilisez `openclaw status --usage`. +- Les commandes acceptent un `:` facultatif entre la commande et les arguments (par exemple `/think: high`, `/send: on`, `/help:`). +- `/new ` accepte un alias de modèle, `provider/model`, ou un nom de fournisseur (correspondance approximative) ; s’il n’y a aucune correspondance, le texte est traité comme corps du message. +- Pour le détail complet de l’utilisation par fournisseur, utilisez `openclaw status --usage`. - `/allowlist add|remove` nécessite `commands.config=true` et respecte `configWrites` du canal. -- Dans les canaux multi-comptes, `/allowlist --account ` ciblé configuration et `/config set channels..accounts....` respectent aussi `configWrites` du compte cible. -- `/usage` contrôle le pied de page d’usage par réponse ; `/usage cost` affiche un résumé local des coûts à partir des journaux de session OpenClaw. -- `/restart` est activé par défaut ; définissez `commands.restart: false` pour le désactiver. -- `/plugins install ` accepte les mêmes spécifications de plugin que `openclaw plugins install` : chemin/archive local, paquet npm ou `clawhub:`. +- Dans les canaux à plusieurs comptes, `/allowlist --account ` ciblé sur la configuration et `/config set channels..accounts....` respectent aussi `configWrites` du compte cible. +- `/usage` contrôle le pied de page d’utilisation par réponse ; `/usage cost` affiche un résumé local des coûts à partir des journaux de session OpenClaw. +- `/restart` est activé par défaut ; définissez `commands.restart: false` pour le désactiver. +- `/plugins install ` accepte les mêmes spécifications de plugin que `openclaw plugins install` : chemin/archive local, package npm ou `clawhub:`. - `/plugins enable|disable` met à jour la configuration du plugin et peut demander un redémarrage. -- Commande native réservée à Discord : `/vc join|leave|status` contrôle les canaux vocaux (nécessite `channels.discord.voice` et les commandes natives ; non disponible en texte). -- Les commandes de liaison de fil Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) nécessitent que les liaisons de fil effectives soient activées (`session.threadBindings.enabled` et/ou `channels.discord.threadBindings.enabled`). -- Référence des commandes ACP et comportement d’exécution : [Agents ACP](/fr/tools/acp-agents). -- `/verbose` est destiné au débogage et à une visibilité accrue ; laissez-le **désactivé** en usage normal. -- `/trace` est plus ciblé que `/verbose` : il révèle uniquement les lignes de trace/débogage possédées par les plugins et garde désactivé le bavardage détaillé normal des outils. -- `/fast on|off` persiste un remplacement de session. Utilisez l’option `inherit` de l’UI Sessions pour l’effacer et revenir aux valeurs par défaut de la configuration. -- `/fast` est spécifique au fournisseur : OpenAI/OpenAI Codex le mappe sur `service_tier=priority` sur les points de terminaison Responses natifs, tandis que les requêtes publiques directes Anthropic, y compris le trafic authentifié par OAuth envoyé à `api.anthropic.com`, le mappent sur `service_tier=auto` ou `standard_only`. Voir [OpenAI](/fr/providers/openai) et [Anthropic](/fr/providers/anthropic). -- Les résumés d’échec d’outil restent affichés lorsqu’ils sont pertinents, mais le texte d’échec détaillé n’est inclus que lorsque `/verbose` est `on` ou `full`. -- `/reasoning`, `/verbose` et `/trace` sont risqués dans les contextes de groupe : ils peuvent révéler un raisonnement interne, une sortie d’outil ou des diagnostics de plugin que vous n’aviez pas l’intention d’exposer. Il est préférable de les laisser désactivés, surtout dans les discussions de groupe. -- `/model` persiste immédiatement le nouveau modèle de session. +- Commande native réservée à Discord : `/vc join|leave|status` contrôle les canaux vocaux (nécessite `channels.discord.voice` et les commandes natives ; indisponible en texte). +- Les commandes de liaison de fil Discord (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) exigent que les liaisons de fil effectives soient activées (`session.threadBindings.enabled` et/ou `channels.discord.threadBindings.enabled`). +- Référence de la commande ACP et comportement à l’exécution : [ACP Agents](/fr/tools/acp-agents). +- `/verbose` est destiné au débogage et à une visibilité supplémentaire ; laissez-le **désactivé** en usage normal. +- `/trace` est plus ciblé que `/verbose` : il révèle uniquement les lignes de trace/de débogage appartenant aux plugins et laisse désactivé le bavardage verbeux normal des outils. +- `/fast on|off` rend persistant un remplacement de session. Utilisez l’option `inherit` de l’interface Sessions pour l’effacer et revenir aux valeurs par défaut de la configuration. +- `/fast` dépend du fournisseur : OpenAI/OpenAI Codex le mappent à `service_tier=priority` sur les endpoints Responses natifs, tandis que les requêtes Anthropic publiques directes, y compris le trafic authentifié par OAuth envoyé à `api.anthropic.com`, le mappent à `service_tier=auto` ou `standard_only`. Voir [OpenAI](/fr/providers/openai) et [Anthropic](/fr/providers/anthropic). +- Les résumés d’échec d’outil sont toujours affichés quand c’est pertinent, mais le texte détaillé de l’échec n’est inclus que lorsque `/verbose` est `on` ou `full`. +- `/reasoning`, `/verbose` et `/trace` sont risqués dans les contextes de groupe : ils peuvent révéler un raisonnement interne, une sortie d’outil ou des diagnostics de plugin que vous n’aviez pas l’intention d’exposer. Il vaut mieux les laisser désactivés, surtout dans les discussions de groupe. +- `/model` rend immédiatement persistant le nouveau modèle de session. - Si l’agent est inactif, l’exécution suivante l’utilise immédiatement. -- Si une exécution est déjà active, OpenClaw marque un changement à chaud comme en attente et ne redémarre sur le nouveau modèle qu’à un point de reprise propre. -- Si l’activité d’outil ou la sortie de réponse a déjà commencé, le changement en attente peut rester en file jusqu’à une opportunité de reprise ultérieure ou au tour utilisateur suivant. -- **Chemin rapide :** les messages composés uniquement de commandes provenant d’expéditeurs autorisés sont traités immédiatement (contournent file + modèle). -- **Filtrage par mention de groupe :** les messages composés uniquement de commandes provenant d’expéditeurs autorisés contournent les exigences de mention. -- **Raccourcis inline (expéditeurs autorisés uniquement) :** certaines commandes fonctionnent également lorsqu’elles sont intégrées dans un message normal et sont retirées avant que le modèle ne voie le texte restant. - - Exemple : `hey /status` déclenche une réponse d’état, et le texte restant continue dans le flux normal. -- Actuellement : `/help`, `/commands`, `/status`, `/whoami` (`/id`). -- Les messages composés uniquement de commandes non autorisés sont ignorés silencieusement, et les jetons inline `/...` sont traités comme du texte brut. -- **Commandes de Skills :** les Skills `user-invocable` sont exposées comme commandes slash. Les noms sont normalisés en `a-z0-9_` (32 caractères max) ; les collisions reçoivent des suffixes numériques (par ex. `_2`). - - `/skill [input]` exécute une Skill par son nom (utile lorsque les limites de commandes natives empêchent les commandes par Skill). - - Par défaut, les commandes de Skills sont transmises au modèle comme une requête normale. - - Les Skills peuvent facultativement déclarer `command-dispatch: tool` pour acheminer la commande directement vers un outil (déterministe, sans modèle). - - Exemple : `/prose` (plugin OpenProse) — voir [OpenProse](/fr/prose). -- **Arguments des commandes natives :** Discord utilise l’autocomplétion pour les options dynamiques (et des menus à boutons lorsque vous omettez des arguments requis). Telegram et Slack affichent un menu à boutons lorsqu’une commande prend en charge des choix et que vous omettez l’argument. +- Si une exécution est déjà active, OpenClaw marque un basculement à chaud comme en attente et ne redémarre avec le nouveau modèle qu’à un point de nouvelle tentative propre. +- Si l’activité des outils ou la sortie de réponse a déjà commencé, le basculement en attente peut rester en file jusqu’à une opportunité de nouvelle tentative ultérieure ou jusqu’au prochain tour utilisateur. +- **Voie rapide :** les messages contenant uniquement une commande provenant d’expéditeurs sur liste d’autorisation sont traités immédiatement (contournent la file + le modèle). +- **Contrôle par mention de groupe :** les messages contenant uniquement une commande provenant d’expéditeurs sur liste d’autorisation contournent les exigences de mention. +- **Raccourcis en ligne (expéditeurs sur liste d’autorisation uniquement) :** certaines commandes fonctionnent aussi lorsqu’elles sont intégrées dans un message normal et sont retirées avant que le modèle ne voie le texte restant. + - Exemple : `hey /status` déclenche une réponse de statut, et le texte restant continue dans le flux normal. +- Actuellement : `/help`, `/commands`, `/status`, `/whoami` (`/id`). +- Les messages contenant uniquement une commande et provenant d’expéditeurs non autorisés sont ignorés silencieusement, et les jetons `/...` en ligne sont traités comme du texte brut. +- **Commandes de Skills :** les skills `user-invocable` sont exposés comme commandes slash. Les noms sont assainis en `a-z0-9_` (32 caractères max) ; les collisions reçoivent des suffixes numériques (par ex. `_2`). + - `/skill [input]` exécute un skill par son nom (utile lorsque les limites des commandes natives empêchent les commandes par skill). + - Par défaut, les commandes de skill sont transmises au modèle comme une requête normale. + - Les skills peuvent déclarer facultativement `command-dispatch: tool` pour router la commande directement vers un outil (déterministe, sans modèle). + - Exemple : `/prose` (plugin OpenProse) — voir [OpenProse](/fr/prose). +- **Arguments de commandes natives :** Discord utilise l’autocomplétion pour les options dynamiques (et des menus à boutons lorsque vous omettez des arguments obligatoires). Telegram et Slack affichent un menu à boutons lorsqu’une commande prend en charge des choix et que vous omettez l’argument. ## `/tools` -`/tools` répond à une question d’exécution, pas à une question de configuration : **ce que cet agent peut utiliser maintenant dans +`/tools` répond à une question d’exécution, pas à une question de configuration : **ce que cet agent peut utiliser maintenant dans cette conversation**. -- `/tools` par défaut est compact et optimisé pour un balayage rapide. +- Par défaut, `/tools` est compact et optimisé pour une lecture rapide. - `/tools verbose` ajoute de courtes descriptions. -- Les surfaces à commandes natives qui prennent en charge les arguments exposent le même changement de mode que `compact|verbose`. -- Les résultats sont limités à la session, donc changer l’agent, le canal, le fil, l’autorisation de l’expéditeur ou le modèle peut +- Les surfaces à commandes natives qui prennent en charge les arguments exposent le même changement de mode avec `compact|verbose`. +- Les résultats sont limités à la session ; changer d’agent, de canal, de fil, d’autorisation d’expéditeur ou de modèle peut donc modifier la sortie. -- `/tools` inclut les outils réellement accessibles à l’exécution, y compris les outils core, les outils de plugin - connectés et les outils possédés par le canal. +- `/tools` inclut les outils réellement accessibles à l’exécution, y compris les outils du cœur, les outils de plugins connectés et les outils appartenant au canal. -Pour modifier les profils et remplacements, utilisez le panneau Outils de l’UI Control ou les surfaces de configuration/catalogue au lieu +Pour l’édition du profil et des remplacements, utilisez le panneau Outils de l’interface Control ou les surfaces de configuration/catalogue au lieu de traiter `/tools` comme un catalogue statique. -## Surfaces d’usage (ce qui s’affiche où) +## Surfaces d’utilisation (ce qui s’affiche où) -- **Usage/quota du fournisseur** (exemple : « Claude 80 % restants ») s’affiche dans `/status` pour le fournisseur du modèle actuel lorsque le suivi d’usage est activé. OpenClaw normalise les fenêtres de fournisseur en `% restants` ; pour MiniMax, les champs de pourcentage restant seuls sont inversés avant affichage, et les réponses `model_remains` privilégient l’entrée du modèle de chat plus une étiquette de plan marquée par modèle. -- Les **lignes tokens/cache** dans `/status` peuvent revenir à la dernière entrée d’usage de transcript lorsque l’instantané de session en direct est peu fourni. Les valeurs en direct non nulles existantes restent prioritaires, et le repli sur le transcript peut aussi récupérer l’étiquette du modèle d’exécution actif ainsi qu’un total plus important orienté prompt lorsque les totaux stockés sont absents ou plus faibles. -- Le contrôle des **tokens/coût par réponse** se fait via `/usage off|tokens|full` (ajoutés aux réponses normales). -- `/model status` concerne les **modèles/auth/points de terminaison**, pas l’usage. +- **Utilisation/quota du fournisseur** (exemple : « Claude 80% left ») s’affiche dans `/status` pour le fournisseur du modèle actuel lorsque le suivi d’utilisation est activé. OpenClaw normalise les fenêtres fournisseur en `% left` ; pour MiniMax, les champs de pourcentage « restant uniquement » sont inversés avant affichage, et les réponses `model_remains` privilégient l’entrée du modèle de chat ainsi qu’une étiquette de plan balisée par modèle. +- Les **lignes jetons/cache** dans `/status` peuvent se rabattre sur la dernière entrée d’utilisation de la transcription lorsque l’instantané de session en direct est trop pauvre. Les valeurs en direct non nulles existantes restent prioritaires, et ce repli sur la transcription peut aussi récupérer l’étiquette du modèle actif à l’exécution ainsi qu’un total davantage orienté prompt lorsque les totaux enregistrés sont absents ou plus faibles. +- Le **coût/les jetons par réponse** est contrôlé par `/usage off|tokens|full` (ajouté aux réponses normales). +- `/model status` concerne les **modèles/l’authentification/les endpoints**, pas l’utilisation. ## Sélection du modèle (`/model`) -`/model` est implémenté comme une directive. +`/model` est implémenté comme directive. -Exemples : +Exemples : ``` /model @@ -250,18 +251,18 @@ Exemples : /model status ``` -Remarques : +Remarques : - `/model` et `/model list` affichent un sélecteur compact numéroté (famille de modèles + fournisseurs disponibles). -- Sur Discord, `/model` et `/models` ouvrent un sélecteur interactif avec listes déroulantes de fournisseur et de modèle, puis une étape Submit. +- Sur Discord, `/model` et `/models` ouvrent un sélecteur interactif avec listes déroulantes de fournisseur et de modèle, ainsi qu’une étape Submit. - `/model <#>` sélectionne à partir de ce sélecteur (et préfère le fournisseur actuel lorsque c’est possible). -- `/model status` affiche la vue détaillée, y compris le point de terminaison fournisseur configuré (`baseUrl`) et le mode API (`api`) lorsqu’ils sont disponibles. +- `/model status` affiche la vue détaillée, y compris l’endpoint fournisseur configuré (`baseUrl`) et le mode API (`api`) lorsqu’ils sont disponibles. ## Remplacements de débogage -`/debug` vous permet de définir des remplacements de configuration **uniquement en exécution** (en mémoire, pas sur disque). Réservé au propriétaire. Désactivé par défaut ; activez-le avec `commands.debug: true`. +`/debug` vous permet de définir des remplacements de configuration **réservés à l’exécution** (en mémoire, pas sur disque). Réservé au propriétaire. Désactivé par défaut ; activez-le avec `commands.debug: true`. -Exemples : +Exemples : ``` /debug show @@ -271,16 +272,16 @@ Exemples : /debug reset ``` -Remarques : +Remarques : -- Les remplacements s’appliquent immédiatement aux nouvelles lectures de configuration, mais n’écrivent **pas** dans `openclaw.json`. +- Les remplacements s’appliquent immédiatement aux nouvelles lectures de configuration, mais n’écrivent pas dans `openclaw.json`. - Utilisez `/debug reset` pour effacer tous les remplacements et revenir à la configuration sur disque. -## Sortie de trace Plugin +## Sortie de trace des plugins -`/trace` vous permet d’activer/désactiver les **lignes de trace/débogage Plugin limitées à la session** sans activer le mode verbose complet. +`/trace` vous permet d’activer ou de désactiver les **lignes de trace/de débogage des plugins limitées à la session** sans activer le mode verbeux complet. -Exemples : +Exemples : ```text /trace @@ -288,20 +289,20 @@ Exemples : /trace off ``` -Remarques : +Remarques : - `/trace` sans argument affiche l’état actuel de la trace pour la session. -- `/trace on` active les lignes de trace Plugin pour la session en cours. +- `/trace on` active les lignes de trace de plugin pour la session actuelle. - `/trace off` les désactive à nouveau. -- Les lignes de trace Plugin peuvent apparaître dans `/status` et comme message de diagnostic de suivi après la réponse normale de l’assistant. -- `/trace` ne remplace pas `/debug` ; `/debug` continue de gérer les remplacements de configuration uniquement en exécution. -- `/trace` ne remplace pas `/verbose` ; la sortie verbose normale des outils/statuts reste du ressort de `/verbose`. +- Les lignes de trace de plugin peuvent apparaître dans `/status` et comme message de diagnostic de suivi après la réponse normale de l’assistant. +- `/trace` ne remplace pas `/debug` ; `/debug` continue de gérer les remplacements de configuration réservés à l’exécution. +- `/trace` ne remplace pas `/verbose` ; la sortie verbeuse normale des outils/statuts relève toujours de `/verbose`. ## Mises à jour de configuration -`/config` écrit dans votre configuration sur disque (`openclaw.json`). Réservé au propriétaire. Désactivé par défaut ; activez-le avec `commands.config: true`. +`/config` écrit dans votre configuration sur disque (`openclaw.json`). Réservé au propriétaire. Désactivé par défaut ; activez-le avec `commands.config: true`. -Exemples : +Exemples : ``` /config show @@ -311,16 +312,16 @@ Exemples : /config unset messages.responsePrefix ``` -Remarques : +Remarques : -- La configuration est validée avant l’écriture ; les changements invalides sont rejetés. +- La configuration est validée avant écriture ; les modifications invalides sont rejetées. - Les mises à jour `/config` persistent après redémarrage. ## Mises à jour MCP -`/mcp` écrit les définitions de serveur MCP gérées par OpenClaw sous `mcp.servers`. Réservé au propriétaire. Désactivé par défaut ; activez-le avec `commands.mcp: true`. +`/mcp` écrit les définitions de serveur MCP gérées par OpenClaw sous `mcp.servers`. Réservé au propriétaire. Désactivé par défaut ; activez-le avec `commands.mcp: true`. -Exemples : +Exemples : ```text /mcp show @@ -329,16 +330,16 @@ Exemples : /mcp unset context7 ``` -Remarques : +Remarques : -- `/mcp` stocke la configuration dans la configuration OpenClaw, pas dans les paramètres de projet possédés par Pi. +- `/mcp` stocke la configuration dans la configuration OpenClaw, pas dans les paramètres de projet appartenant à Pi. - Les adaptateurs d’exécution décident quels transports sont réellement exécutables. -## Mises à jour des plugins +## Mises à jour de plugins -`/plugins` permet aux opérateurs d’inspecter les plugins découverts et de basculer leur activation dans la configuration. Les flux en lecture seule peuvent utiliser `/plugin` comme alias. Désactivé par défaut ; activez-le avec `commands.plugins: true`. +`/plugins` permet aux opérateurs d’inspecter les plugins découverts et d’activer/de désactiver leur état dans la configuration. Les flux en lecture seule peuvent utiliser `/plugin` comme alias. Désactivé par défaut ; activez-le avec `commands.plugins: true`. -Exemples : +Exemples : ```text /plugins @@ -348,43 +349,43 @@ Exemples : /plugins disable context7 ``` -Remarques : +Remarques : -- `/plugins list` et `/plugins show` utilisent la découverte réelle des plugins sur l’espace de travail actuel plus la configuration sur disque. -- `/plugins enable|disable` met uniquement à jour la configuration du plugin ; cela n’installe ni ne désinstalle les plugins. -- Après des changements d’activation/désactivation, redémarrez la Gateway pour les appliquer. +- `/plugins list` et `/plugins show` utilisent la découverte réelle des plugins par rapport à l’espace de travail actuel ainsi qu’à la configuration sur disque. +- `/plugins enable|disable` met uniquement à jour la configuration du plugin ; cela n’installe ni ne désinstalle les plugins. +- Après des changements d’activation/désactivation, redémarrez la gateway pour les appliquer. ## Remarques sur les surfaces -- **Les commandes texte** s’exécutent dans la session de chat normale (les DM partagent `main`, les groupes ont leur propre session). -- **Les commandes natives** utilisent des sessions isolées : - - Discord : `agent::discord:slash:` - - Slack : `agent::slack:slash:` (préfixe configurable via `channels.slack.slashCommand.sessionPrefix`) - - Telegram : `telegram:slash:` (cible la session du chat via `CommandTargetSessionKey`) +- **Les commandes texte** s’exécutent dans la session de chat normale (les messages privés partagent `main`, les groupes ont leur propre session). +- **Les commandes natives** utilisent des sessions isolées : + - Discord : `agent::discord:slash:` + - Slack : `agent::slack:slash:` (préfixe configurable via `channels.slack.slashCommand.sessionPrefix`) + - Telegram : `telegram:slash:` (cible la session de chat via `CommandTargetSessionKey`) - **`/stop`** cible la session de chat active afin de pouvoir interrompre l’exécution en cours. -- **Slack :** `channels.slack.slashCommand` reste pris en charge pour une seule commande de type `/openclaw`. Si vous activez `commands.native`, vous devez créer une commande slash Slack par commande intégrée (mêmes noms que `/help`). Les menus d’arguments de commande pour Slack sont livrés comme boutons Block Kit éphémères. - - Exception native Slack : enregistrez `/agentstatus` (pas `/status`) parce que Slack réserve `/status`. Le texte `/status` continue de fonctionner dans les messages Slack. +- **Slack :** `channels.slack.slashCommand` reste pris en charge pour une seule commande de style `/openclaw`. Si vous activez `commands.native`, vous devez créer une commande slash Slack par commande intégrée (mêmes noms que `/help`). Les menus d’arguments de commande pour Slack sont fournis sous forme de boutons Block Kit éphémères. + - Exception native Slack : enregistrez `/agentstatus` (pas `/status`) parce que Slack réserve `/status`. Le texte `/status` continue de fonctionner dans les messages Slack. -## Questions latérales BTW +## Questions annexes BTW -`/btw` est une **question latérale** rapide à propos de la session en cours. +`/btw` est une **question annexe** rapide sur la session actuelle. -Contrairement au chat normal : +Contrairement au chat normal : -- il utilise la session en cours comme contexte d’arrière-plan, -- il s’exécute comme un appel ponctuel séparé **sans outils**, +- il utilise la session actuelle comme contexte d’arrière-plan, +- il s’exécute comme un appel one-shot séparé **sans outils**, - il ne modifie pas le contexte futur de la session, -- il n’est pas écrit dans l’historique du transcript, -- il est livré comme résultat latéral en direct au lieu d’un message assistant normal. +- il n’est pas écrit dans l’historique de transcription, +- il est livré comme résultat annexe en direct au lieu d’un message normal de l’assistant. Cela rend `/btw` utile lorsque vous voulez une clarification temporaire pendant que la tâche principale continue. -Exemple : +Exemple : ```text -/btw que sommes-nous en train de faire en ce moment ? +/btw what are we doing right now? ``` -Voir [Questions latérales BTW](/fr/tools/btw) pour le comportement complet et les -détails UX client. +Voir [BTW Side Questions](/fr/tools/btw) pour le comportement complet et les détails +d’expérience utilisateur côté client.