Discourse AI : Guide d'intégration du bot Discord

Comment cela fonctionne (Architecture)

Avant de configurer ceci, il est important de comprendre que vous n’avez pas besoin d’héberger une application de bot séparée ou d’exécuter un script de « bot » (comme un bot Node.js ou Python) sur votre serveur.

Cette intégration utilise les Interactions Discord (Webhooks) combinées avec des Éditions Progressives pour simuler une expérience d'IA en streaming :
  1. Action de l’utilisateur : Un utilisateur tape /ask dans votre serveur Discord.
  2. Webhook : Discord envoie une requête HTTP POST directement à votre serveur Discourse.
  3. Accusé de réception immédiat : Discourse répond instantanément avec un statut « Recherche en cours… ». Cela empêche le délai d’expiration « Interaction Échouée » de Discord.
  4. Réponse en streaming : Un travail d’arrière-plan commence à générer la réponse de l’IA. Au fur et à mesure que l’IA produit du texte, Discourse envoie de fréquentes requêtes HTTP PATCH pour modifier le message Discord en temps réel.

Résultat : Les utilisateurs voient la réponse s’écrire en direct, tout comme ChatGPT, au lieu d’attendre un seul bloc de texte statique.

Avantage clé : Puisque Discourse gère la logique en interne, il n’y a aucune infrastructure supplémentaire à maintenir. Si votre forum est en ligne, votre bot est en ligne.

Ce guide détaille le processus complet pour intégrer le bot d’IA Discourse à un serveur Discord. Il comprend des instructions spécifiques pour l’enregistrement manuel des commandes slash via l’API, ce qui est actuellement nécessaire pour contourner les problèmes de synchronisation automatique dans le plugin.

Prérequis

  • Accès Administrateur Discourse : Vous devez être administrateur de votre instance Discourse auto-hébergée.
  • Accès Administrateur Discord : Vous devez disposer des permissions « Gérer le serveur » sur le serveur Discord cible.
  • Accès au Terminal : Vous aurez besoin d’un terminal pour exécuter des commandes curl.

1. Créer l’Application Discord

  1. Accédez au Portail des Développeurs Discord.
  2. Cliquez sur Nouvelle Application dans le coin supérieur droit.
  3. Donnez un nom à votre application (par exemple, « Aide Discourse ») et cliquez sur Créer.
  4. Copier les informations d’identification : Sur la page Informations Générales, localisez et sauvegardez les éléments suivants pour plus tard :

2. Configurer l’Utilisateur Bot

  1. Dans le menu de la barre latérale gauche, cliquez sur Bot.

  2. Cliquez sur Réinitialiser le jeton.

  3. Activer les Intentions Privilégiées :

    • Faites défiler jusqu’à la section « Intentions de passerelle privilégiées ».
    • Activez Intention de contenu de message en le passant à ACTIVÉ. (Ceci permet au bot de lire les messages auxquels il doit répondre).
  4. Cliquez sur Enregistrer les modifications.

3. Configurer les Paramètres Discourse

  1. Connectez-vous à votre panneau d’administration Discourse.

  2. Accédez à AdminPluginsIAFonctionnalités.

  3. Recherchez « discord » et cliquez sur modifier :

  4. Remplissez les détails

    • AI Discord app ID : Collez =ApplicationId=
    • AI Discord app public key : Collez =PublicKey=
  5. Autoriser votre serveur Discord :

    • Ouvrez votre application Discord et activez le Mode Développeur (Paramètres Utilisateur → Avancé → Mode Développeur).
    • Faites un clic droit sur l’icône de votre serveur dans la barre latérale et sélectionnez Copier l’ID du serveur.
    • Dans les paramètres Discourse, collez cet ID dans le champ AI Discord allowed guilds.

4. Définir le Point de Terminaison des Interactions

  1. Construisez votre URL de point de terminaison : https://=ForumUrl=/discourse-ai/discord/interactions
  2. Retournez au Portail des Développeurs Discord.
  3. Sur la page Informations Générales, faites défiler jusqu’à URL du point de terminaison des interactions.
  4. Collez votre URL et cliquez sur Enregistrer les modifications.
    • Succès : Discord enverra un signal de test. S’il est enregistré sans erreur, votre instance Discourse a vérifié avec succès la signature.
    • Échec : Si vous obtenez une erreur, assurez-vous que AI Discord app ID et AI Discord app public key sont correctement enregistrés dans les paramètres Discourse.

5. Inviter le Bot

  1. Dans le Portail des Développeurs, cliquez sur Installation dans la barre latérale.
  2. Scopes : Cochez les cases bot et applications.commands.
  3. Permissions du Bot : Cochez les éléments suivants :
    • Envoyer des messages
    • Intégrer des liens
    • Joindre des fichiers
    • Lire l’historique des messages
  4. Copiez l’URL d’installation en haut de la page.
  5. Ouvrez cette URL dans un onglet de navigateur et autorisez le bot à rejoindre votre serveur.

6. Enregistrer la Commande Slash (Appel API Manuel)

Important : Le nom du paramètre de la commande DOIT être query.

Pour Mac / Linux (Bash)

curl -X POST "https://discord.com/api/v10/applications/=ApplicationId=/commands" \
  -H "Authorization: Bot =BotToken=" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ask",
    "description": "Posez une question à l'IA",
    "options": [
        {
            "name": "query",
            "description": "Quelle est votre question ?",
            "type": 3,
            "required": true
        }
    ]
}'
  • Réponse de succès : Vous devriez recevoir une réponse JSON contenant l’ID de la nouvelle commande.
  • Erreur 401 ? Assurez-vous d’avoir conservé le mot Bot (avec un espace) avant votre jeton dans l’en-tête Authorization.

7. Vérification

  1. Ouvrez votre serveur Discord.
  2. Tapez /ask dans un canal de discussion.
  3. Le menu des commandes devrait apparaître. Sélectionnez /ask et tapez une question dans le champ query.
  4. Comportement attendu :
    • Immédiat : Le bot répond « Recherche en cours… »
    • Après quelques secondes : Le message se met à jour avec la réponse de l’IA.

Dépannage

Erreur Cause Solution
401 Non autorisé (dans Curl) Mauvais format de jeton Assurez-vous que l’en-tête est Authorization: Bot =BotToken=. Utilisez le jeton de l’onglet Bot, pas de l’onglet Général.
Exception Job : le contexte doit être une instance de BotContext Mauvais Payload Assurez-vous d’être à jour, cela a été corrigé sur FIX: Discord Bot crash due to missing BotContext in PersonaReplier by devtekve · Pull Request #36429 · discourse/discourse · GitHub