Plateformes de messagerie

Discord

Statut : prêt pour les messages privés et les canaux de guilde via la passerelle officielle Discord.

Configuration rapide

Vous devrez créer une nouvelle application avec un bot, ajouter le bot à votre serveur et l'appairer à OpenClaw. Nous recommandons d'ajouter votre bot à votre propre serveur privé. Si vous n'en avez pas encore, créez-en un d'abord (choisissez Create My Own > For me and my friends).

Étape 1 : Créer une application Discord et un bot

Allez sur le Portail Développeur Discord et cliquez sur New Application. Nommez-la par exemple "OpenClaw". Cliquez sur Bot dans la barre latérale. Définissez le Username comme vous appelez votre agent OpenClaw.

Étape 2 : Activer les intents privilégiés

Toujours sur la page Bot, descendez jusqu'à Privileged Gateway Intents et activez :

  • Message Content Intent (requis)
  • Server Members Intent (recommandé ; requis pour les listes d'autorisation par rôle et la correspondance nom-vers-ID)
  • Presence Intent (optionnel ; seulement nécessaire pour les mises à jour de présence)

Étape 3 : Copier votre token de bot

Remontez sur la page Bot et cliquez sur Reset Token.

ℹ️ Malgré le nom, cela génère votre premier token — rien n'est "réinitialisé".

Copiez le token et sauvegardez-le. C'est votre Bot Token et vous en aurez besoin bientôt.

Étape 4 : Générer une URL d'invitation et 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 permissions pour ajouter le bot à votre serveur. Descendez jusqu'à OAuth2 URL Generator et activez :

  • bot
  • applications.commands

Une section Bot Permissions apparaîtra en dessous. Activez :

  • View Channels
  • Send Messages
  • Read Message History
  • Embed Links
  • Attach Files
  • Add Reactions (optionnel)

Copiez l'URL générée en bas, collez-la dans votre navigateur, sélectionnez votre serveur et cliquez sur Continue pour connecter. Vous devriez maintenant voir votre bot dans le serveur Discord.

Étape 5 : Activer le Mode Développeur et collecter vos IDs

De retour dans l'application Discord, vous devez activer le Mode Développeur pour pouvoir copier les IDs 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 avatarCopy User ID

Sauvegardez votre Server ID et votre User ID avec votre Bot Token — vous enverrez les trois à OpenClaw à l'étape suivante.

Étape 6 : Autoriser les messages privés des membres du serveur

Pour que l'appairage fonctionne, Discord doit autoriser votre bot à vous envoyer des messages privés. Faites un clic droit sur l'icône de votre serveurPrivacy Settings → activez Direct Messages. Cela permet aux membres du serveur (y compris les bots) de vous envoyer des messages privés. Gardez ceci activé si vous voulez utiliser les messages privés Discord avec OpenClaw. Si vous prévoyez uniquement d'utiliser les canaux de guilde, vous pouvez désactiver les messages privés après l'appairage.

Étape 7 : Étape 0 : Définir votre token de bot de manière sécurisée (ne l'envoyez pas dans le chat)

Votre token de bot Discord est un secret (comme un mot de passe). Définissez-le sur la machine exécutant OpenClaw avant de contacter votre agent.

openclaw config set channels.discord.token '"YOUR_BOT_TOKEN"' --json
openclaw config set channels.discord.enabled true --json
openclaw gateway

Si OpenClaw est déjà en cours d'exécution en tant que service en arrière-plan, utilisez openclaw gateway restart à la place.

Étape 8 : Configurer OpenClaw et appairer

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'interface CLI / config.

“I already set my Discord bot token in config. Please finish Discord setup with User ID <user_id> and Server ID <server_id>.”

Étape 9 : Approuver le premier appairage par message privé

Attendez que la passerelle soit en cours d'exécution, puis envoyez un message privé à votre bot sur Discord. Il répondra avec un code d'appairage.

Envoyez le code d'appairage à votre agent sur votre canal existant :

“Approve this Discord pairing code: <CODE>

Les codes d'appairage expirent après 1 heure. Vous devriez maintenant pouvoir discuter avec votre agent sur Discord via message privé.

ℹ️ La résolution des tokens tient compte du compte. Les valeurs de token dans la config l'emportent sur la valeur de repli d'environnement. DISCORD_BOT_TOKEN n'est utilisé que pour le compte par défaut.

Recommandé : Configurer un espace de travail de guilde

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. Ceci est recommandé pour les serveurs privés où il n'y a que vous et votre bot.

Étape 1 : Ajouter votre serveur à la liste d'autorisation de guilde

Cela permet à votre agent de répondre dans n'importe quel canal de votre serveur, pas seulement dans les messages privés.

“Add my Discord Server ID <server_id> to the guild allowlist”

Étape 2 : Autoriser les réponses sans @mention

Par défaut, votre agent ne répond dans les canaux de guilde que lorsqu'il est @mentionné. Pour un serveur privé, vous voulez probablement qu'il réponde à chaque message.

“Allow my agent to respond on this server without having to be @mentioned”

Étape 3 : Planifier la mémoire dans les canaux de guilde

Par défaut, la mémoire à long terme (MEMORY.md) ne se charge que dans les sessions de messages privés. Les canaux de guilde ne chargent pas automatiquement MEMORY.md.

“When I ask questions in Discord channels, use memory_search or memory_get if you need long-term context from MEMORY.md.”

Maintenant, créez 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 tout ce qui correspond à votre flux de travail.

Modèle d'exécution

  • La passerelle possède la connexion Discord.
  • Le routage des réponses est déterministe : les réponses entrantes de Discord reviennent vers Discord.
  • Par défaut (session.dmScope=main), les discussions directes partagent la session principale de l'agent (agent:main:main).
  • Les canaux de guilde ont des clés de session isolées (agent:<agentId>:discord:channel:<channelId>).
  • 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:<agentId>:discord:slash:<userId>), tout en portant CommandTargetSessionKey vers la session de conversation routée.

Canaux de forum

Les canaux de forum et média Discord n'acceptent que les publications dans les fils de discussion. OpenClaw prend en charge deux façons de les créer :

  • Envoyez un message au parent du forum (channel:<forumId>) 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 de forum.

Exemple : envoyer au parent du forum pour créer un fil

openclaw message send --channel discord --target channel:<forumId> \
  --message "Topic title\nBody of the post"

Exemple : créer un fil de forum explicitement

openclaw message thread create --channel discord --target channel:<forumId> \
  --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:<threadId>).

Composants interactifs

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 des interactions sont routés vers l'agent en tant que 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 permettent 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 permettre aux boutons, menus de sélection et formulaires d'être utilisés plusieurs fois jusqu'à expiration. Pour restreindre qui peut cliquer sur un bouton, définissez allowedUsers sur ce bouton (IDs utilisateur Discord, tags, ou *). Lorsqu'il 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 menus déroulants 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 invoquant peut l'utiliser. Pièces jointes de fichiers :

  • Les blocs file doivent pointer vers une référence de pièce jointe (attachment://<filename>)
  • 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échargement lorsqu'il doit correspondre à la référence de pièce jointe

Formulaires modaux :

  • 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 :

{
  channel: "discord",
  action: "send",
  to: "channel:123456789012345678",
  message: "Optional fallback text",
  components: {
    reusable: true,
    text: "Choose a path",
    blocks: [
      {
        type: "actions",
        buttons: [
          {
            label: "Approve",
            style: "success",
            allowedUsers: ["123456789012345678"],
          },
          { label: "Decline", style: "danger" },
        ],
      },
      {
        type: "actions",
        select: {
          type: "string",
          placeholder: "Pick an option",
          options: [
            { label: "Option A", value: "a" },
            { label: "Option B", value: "b" },
          ],
        },
      },
    ],
    modal: {
      title: "Details",
      triggerLabel: "Open form",
      fields: [
        { type: "text", label: "Requester" },
        {
          type: "select",
          label: "Priority",
          options: [
            { label: "Low", value: "low" },
            { label: "High", value: "high" },
          ],
        },
      ],
    },
  },
}

Contrôle d'accès et routage

channels.discord.dmPolicy contrôle l'accès aux messages privés (hérité : channels.discord.dm.policy) :

  • pairing (par défaut)
  • allowlist
  • open (nécessite que channels.discord.allowFrom inclue "*" ; hérité : channels.discord.dm.allowFrom)
  • disabled

Si la politique MP n'est pas ouverte, les utilisateurs inconnus sont bloqués (ou invités à s'appairer en mode pairing). Prépondérance multi-compte :

  • 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 livraison :

  • user:<id>
  • Mention <@id>

Les IDs numériques bruts sont ambigus et rejetés à moins qu'un type de cible utilisateur/canal explicite ne soit fourni.

Routage d'agent basé sur les rôles

Utilisez bindings[].match.roles pour router les membres de guilde Discord vers différents agents par ID de rôle. Les liaisons basées sur les rôles n'acceptent que les IDs de rôle et sont évaluées après les liaisons de pair ou parent-pair et avant les liaisons de guilde uniquement. Si une liaison définit également d'autres champs de correspondance (par exemple peer + guildId + roles), tous les champs configurés doivent correspondre.

{
  bindings: [
    {
      agentId: "opus",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
        roles: ["111111111111111111"],
      },
    },
    {
      agentId: "sonnet",
      match: {
        channel: "discord",
        guildId: "123456789012345678",
      },
    },
  ],
}

Configuration du Portail Développeur

Commandes natives et authentification des commandes

  • commands.native est par défaut "auto" 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 le traitement normal des messages.
  • Les commandes peuvent toujours être visibles dans l'interface Discord pour les utilisateurs non autorisés ; l'exécution applique toujours l'authentification OpenClaw et renvoie "not authorized".

Voir Commandes slash pour le catalogue de commandes et le comportement. Paramètres par défaut des commandes slash :

  • ephemeral: true

Détails des fonctionnalités

Outils et portes d'action

Sécurité et opérations

  • Traitez les jetons de bot comme des secrets (DISCORD_BOT_TOKEN préféré dans les environnements supervisés).
  • Accordez les permissions Discord de moindre privilège.
  • Si le déploiement de commande / l'état est périmé, redémarrez la passerelle et revérifiez avec openclaw channels status --probe.

Connexe