Aller au contenu

n8n auto-hébergé · Discord · SMTP

Support d’une communauté en ligne : tri et routage automatiques

Chaque demande devait être lue, triée puis transmise à la main. Elle traverse maintenant un système.

Projet personnel

Les demandes arrivent par e-mail et par formulaire ; chacune est analysée, classée, envoyée dans le bon salon Discord, et l’expéditeur reçoit un accusé de réception.

01 · Avant

Comment cela se passait

  • Chaque message lu par une personne avant d’être compris.
  • Transfert manuel à la bonne personne, réponse à l’expéditeur à la main.
  • Deux canaux d’entrée à surveiller séparément.

02 · Problème

Le problème et ses contraintes

Les demandes de support d’une communauté en ligne arrivaient par e-mail et par formulaire, en texte libre. Quelqu’un devait lire chaque message, comprendre de quoi il s’agissait, le transmettre à la bonne personne et répondre à l’expéditeur.

  • Texte libre : aucun format imposé à l’expéditeur.
  • Deux canaux d’entrée (e-mail et formulaire) pour un seul traitement.
  • L’équipe travaille dans Discord : c’est là que les demandes doivent arriver.
  • Serveur auto-hébergé : identifiants et mises à jour sous contrôle.
  • Aucune demande ne doit se perdre, même mal formée.

03 · Rôle

Ce qui a été conçu et construit ici

  • Conception et construction du workflow n8n de bout en bout : les deux déclencheurs (webhook du formulaire, boîte e-mail), l’extraction par expressions régulières, le schéma JSON commun, les règles de classification, la publication Discord et l’accusé de réception SMTP.
  • Installation et exploitation du serveur n8n auto-hébergé : identifiants dans son gestionnaire, mises à jour.
  • Ce qui vient d’ailleurs : n8n lui-même (outil d’orchestration), Discord et le serveur SMTP (services existants). Aucune bibliothèque ni contribution externe n’a été écrite pour ce projet.

04 · Architecture

La chaîne, étape par étape

  1. RéceptionWebhook · e-mail
  2. AnalyseRegex
  3. NormalisationJSON
  4. ClassificationLogique conditionnelle
  5. RoutageWebhook Discord
  6. Accusé de réceptionSMTP
  1. 01 · Webhook · e-mail

    Réception

    Deux déclencheurs n8n : un webhook pour le formulaire, la boîte e-mail pour les messages. Les deux produisent le même objet d’entrée.

    De : joueur.exemple@exemple.org
    Objet : Impossible de me connecter
    
    Bonjour, depuis hier je n’arrive plus à me connecter à mon compte (pseudo : Orion_42). Merci.
  2. 02 · Regex

    Analyse

    Des expressions régulières extraient les champs utiles du texte libre : pseudo, sujet, mots-clés. Un champ absent ne bloque rien : il est marqué comme manquant.

    {
      "canal": "email",
      "expediteur": "joueur.exemple@exemple.org",
      "pseudo": "Orion_42",
      "sujet": "Impossible de me connecter",
      "motsCles": ["connecter", "compte"]
    }
  3. 03 · JSON

    Normalisation

    Les deux canaux sont ramenés au même schéma JSON. C’est ce schéma, et lui seul, que les étapes suivantes connaissent.

    {
      "id": "TCK-0193",
      "source": "email",
      "pseudo": "Orion_42",
      "texte": "depuis hier je n’arrive plus à me connecter…",
      "recuLe": "2026-10-02T09:14:03Z"
    }
  4. 04 · Logique conditionnelle

    Classification

    Des règles écrites décident de la catégorie et de la priorité. Une demande qu’aucune règle ne reconnaît part dans « À trier », jamais à la poubelle.

    {
      "id": "TCK-0193",
      "categorie": "compte",
      "priorite": "normale",
      "regle": "motsCles ∋ connecter | mot de passe"
    }
  5. 05 · Webhook Discord

    Routage

    Chaque catégorie correspond à un salon. Le message est publié par un webhook Discord dédié, qui ne peut rien faire d’autre que publier.

    POST → salon #support-comptes
    {
      "titre": "TCK-0193 · compte",
      "auteur": "Orion_42",
      "resume": "Connexion impossible depuis hier"
    }
  6. 06 · SMTP

    Accusé de réception

    L’expéditeur reçoit aussitôt un accusé de réception avec son numéro de ticket : il sait que sa demande est prise en compte.

    À : joueur.exemple@exemple.org
    Objet : [TCK-0193] Demande bien reçue
    
    Bonjour, votre demande a été transmise à l’équipe. Référence : TCK-0193.

05 · Automatisation

Ce qui se fait seul

  • Tri et routage sans intervention manuelle.
  • Accusé de réception immédiat avec numéro de ticket.
  • Historique d’exécution consultable pour chaque demande.

Un schéma unique

Le formulaire et l’e-mail sont convertis vers le même objet JSON dès l’entrée. Le reste du workflow ignore d’où vient la demande.

Des règles lisibles

La classification repose sur des conditions explicites, faciles à relire et à faire évoluer, plutôt que sur une boîte noire.

Une voie de secours

Ce qui n’est reconnu par aucune règle est routé vers une catégorie « À trier » : rien ne disparaît en silence.

Des sorties découplées

Discord et SMTP sont deux branches indépendantes : si l’une échoue, l’autre continue, et l’échec est visible dans l’historique d’exécution.

06 · Choix techniques

Pourquoi ces choix, et pas d’autres

n8n auto-hébergé plutôt qu’un service en ligne

Les données et les identifiants restent sur une machine maîtrisée. Contrepartie assumée : les mises à jour de sécurité sont à suivre soi-même.

Des règles explicites plutôt qu’un modèle de langage

Les messages étaient assez réguliers pour des règles lisibles et testables. Un modèle n’aurait de sens que si les demandes devenaient trop variées, avec une validation humaine sur les cas incertains.

Des webhooks Discord plutôt qu’un bot

Un webhook ne peut que publier dans un salon : moindre privilège, et rien à maintenir côté Discord.

Un schéma JSON unique dès l’entrée

Les étapes suivantes ignorent le canal d’origine : ajouter un troisième canal ne touche qu’une étape.

07 · IA

La place de l’IA

Aucune IA dans ce projet : des règles explicites suffisaient à classer les demandes, et elles restent lisibles et vérifiables. Un modèle de langage n’aurait de sens que si les messages devenaient trop variés pour des règles, avec une validation humaine sur les cas incertains.

08 · Sécurité

Ce qui protège le système

  • Identifiants (boîte e-mail, SMTP, webhooks) rangés dans le gestionnaire d’identifiants de n8n, jamais dans les nœuds.
  • Webhooks Discord : par nature, ils ne peuvent que publier dans un salon.
  • Texte reçu traité comme une donnée : extrait par expressions régulières, jamais exécuté.
  • Serveur n8n auto-hébergé : les données restent sur une machine maîtrisée.

Ce que nous ajouterions pour une mise en production chez un client

  • Secret obligatoire sur le webhook du formulaire, et limite de débit.
  • Alerte quand une exécution échoue ou qu’une demande reste « À trier ».
  • Sauvegarde chiffrée de la base n8n et de sa clé de chiffrement.
  • Mises à jour de sécurité de n8n suivies et appliquées rapidement.

09 · Fiabilité

Quand quelque chose échoue

  • File « À trier » pour toute demande non reconnue : rien ne se perd.
  • Branches Discord et SMTP indépendantes : l’échec de l’une n’arrête pas l’autre.
  • Historique d’exécution n8n consultable pour chaque demande.

Limites connues

  • Règles écrites pour des messages réguliers : un message inhabituel finit dans la file « À trier » et attend une personne.
  • Un seul serveur, sans redondance ni alerte en cas d’arrêt (voir ce que nous ajouterions).
  • Pas de tests automatisés sur le workflow : pour un client, nous ajouterions un jeu de messages de référence rejoué après chaque modification.
  • Aucune mesure de volume ni de délai.

10 · Résultat

Le résultat

  • Chaque demande est triée et transmise au bon salon sans que personne ait à la lire d’abord.
  • L’expéditeur sait immédiatement que sa demande est prise en compte.
  • Les demandes non reconnues restent visibles dans une file dédiée.

n8nWebhooksRegexJSONDiscordSMTP

Projet réalisé. Les messages, pseudonymes et numéros affichés ici sont des exemples synthétiques. Aucun chiffre de gain n’est publié tant qu’il n’a pas été mesuré.

11 · Documentation

Ce qui documente ce projet

  • Le schéma de la chaîne et les charges JSON de chaque étape sont ceux affichés ci-dessus, sur données synthétiques.
  • L’export du workflow n8n (JSON) peut être partagé sur demande, sans ses identifiants.
  • Aucun délai de traitement ni volume n’est publié : rien n’a été mesuré sur ce projet, et nous ne publierons un chiffre que mesuré.