Automate everything!

Découvrez avec nous la magie de n8n

Florian Forestier

  • Consultant Zenika ;
  • Enseignant vacataire ISIMA ;
  • Board Clermont'ech ;

Justine Bachelard

  • Concepteur-Développeur @ BeYs Cloud ;
  • Enseignant vacataire ISIMA ;
  • Board Clermont'ech ;

n8n

  • n8n = nodemation
  • Moteur de workflow (successeur spirituel de iFTTT)
  • Le principe est simple : on branche des blocs prédéfinis les uns à la suite des autres.
  • Fourni avec des milliers de composants pour...
    • ... se connecter un peu partout (GitLab, Telegram, etc)...
    • ... et effectuer des actions (dédupliquer, envoyer une requête HTTP, etc)...
    • ... Et on peut aussi ajouter du code personnalisé (en JS).
    • n8n peut être utilisé pour automatiser des actions du quotidien, et même éviter de coder pour des cas basiques.
    • Et on va voir quelques cas concrets ensemble. 👀

Veille technologique

  • Regrouper différentes sources d'informations sans l'effort d'aller les chercher individuellement

Veille technologique

Même principe pour tous :
  1. Tous les X on déclenche un workflow
  2. On récupère le flux RSS associé à notre source
  3. On supprime les évènements qui ont déjà été process par les workflows d'avant
  4. On envoie dans Discord via un sous-workflow

Veille technologique

Workflow générique qui nous permet de résumer et envoyer dans Discord :
  1. On peut soit avoir un résumé manuel prédéfini, soit en faire faire un par Gemini
  2. On utilise le noeud Summarization Chain avec les paramètres par défaut
  3. On peut également choisir entre trier l'article automatiquement ou l'envoyer dans un channel prédéfini
  4. Pour le tri, on se sert une nouvelle fois de Gemini pour trier les articles dans une des catégories prédéfinies (hardware, software, cloud, etc.)
  5. On stocke dans une table tous les messages, et ils seront envoyés via un autre workflow

Veille technologique

Mise à jour automatique

  • Problème sur notre infra @ home : les softs ne sont jamais mis à jour
    • Car pas le temps / la motivation / l'envie, etc...
  • => Risque de sécurité majeur, car on a des softs assez critiques ! (VaultWarden, Nextcloud, etc)

Mise à jour automatique

  • Principe général :
    1. On regarde les releases sur GitHub (et pas sur DockerHub, car pas de flux RSS...)
    2. On compare les nouveaux tags, et on compare avec ceux du GitLab (bout de code JS)
    3. Si plus récent, on envoi un message de demande de validation sur Discord (pour garder le contrôle)
    4. Si oui, on déclenche une pipeline GitLab qui déploie la nouvelle version

(Et oui... n8n peut s'auto-update 👀)


Améliorations à faire

  • Vous le savez... On aime ✨Docker Swarm✨
  • Dans le futur, on veut rajouter un connecteur Swarm qui donne l'état du déploiement pour avoir un meilleur suivi
  • On tente aussi de mettre de l'IA pour détecter les breaking changes dans le changelog, sans grand succès (pour l'instant)

Remplacer... Un bout de code !

Remplacer un bout de code

  • Souvent, on a besoin d'écrire des bouts de code pour "gluer" des services entre eux
  • Dans notre cas, stocker des métriques au format Prometheus dans une base de données
  • ... Mais la giga-flemme d'installer un serveur Prometheus...
  • ... Et certains de nos agents devaient être en "push", pas "pull".
  • => n8n est la solution !

Remplacer un bout de code

  • Besoin : Analyse des places/vélos dispos sur les stations = à quelle heure il vaut mieux faire le trajet
  • Problème : les données sont sur opendata, mais pas celles passées
  • Workflow très simple :
    1. On récupère les données
    2. On sépare en items pour pouvoir les traiter individuellement
    3. On ajoute la date actuelle et on insère dans le QuestDB

Remplacer un bout de code

Remplacer un bout de code

  • Autre cas d'usage : nos capteurs de température
  • De tout bêtes DHT22 sur des Pico à la maison => On a la flemme d'installer une DMZ, exposer un service, etc...
  • Solution : Un workflow n8n qui se déclenche sur un Webhook ( = quand quelqu'un accède à une URL spécifique)
  • Le RPi Pico envoie une requête HTTP toutes les 5 minutes à n8n, qui prend la valeur en payload et la stocke dans QuestDB
  • Et ça termine dans Grafana ! 🥳

Workflow (trop) complexe

  • On met nos photos et vidéos de concerts, sorties, etc. sur nos NAS respectifs (amis, famille)
  • On a une API qui nous permet de répertorier tous les médias, leur emplacement et leur catégorie (concert, anniversaire, Disney, etc.)
  • On a des accès sur chaque NAS et donc lorsqu'on sait ce qu'on veut, on peut aller le télécharger où il est
  • Ce qu'on veut : demander - avec un message Discord - de faire la recherche et le téléchargement pour nous

Workflow (trop) complexe



















Workflow (trop) complexe

  1. Nouveaux messages de Discord : titre + catégorie
  2. Recherche sur l'API
  3. On propose les résultats de 5 en 5 triés par pertinence,
    avec les options "next", "download", "details", "giveup"
  4. Si on arrive au bout de la liste, on propose de revoir les 5 derniers
  5. Si on choisit de télécharger, c'est fait sur notre NAS et on affiche l'espace disque qu'il nous reste
  6. On traite les demandes les unes à la suite des autres en identifiant la personne à l'origine de celle-ci

Workflow (trop) complexe

Les boucles 😭😭😭
  • L'API renvoie les résultats de 25 en 25
    On a donc une boucle sur la liste, et une fois terminée on doit aller chercher la page suivante.
  • La liste qu'on envoie grâce au nœud `Discord` correspond aux 5 premiers éléments
    • soit de notre liste d'origine (`VideosApiOutput`)
    • soit de la liste mise à jour (`CodeRemoveFromList`)

Workflow (trop) complexe

  • Variables customs pour savoir si certains nœuds ont été exécuté ou non
    • "Mais pourquoi ne pas utiliser $("<node-name>").isExecuted Jammy 🤔"
    • "Parce que les boucles Fred ! 🙃"
  • Solution alternative : listener qui déclenche UN workflow lors d'un message

Workflow (trop) complexe

  • Il existe une valeur native aux nœuds pour savoir s'il a déjà été exécuté pendant le workflow, et combien de fois
  • Avec des choix qui font revenir en arrière, une boucle sur les items de 5 en 5 -> impossible de se baser sur le nombre d'exécutions
  • Solution : simuler le reset du workflow = variables customs réinitialisées lorsqu'on passe à la requête suivante

Workflow (trop) complexe

Usages futurs

Usages futurs

  • On a encore tout plein d'idées pour n8n en 2026 !
  • Utiliser les webhooks et des tags NFC pour historiser certaines actions (litières, poubelles, etc)
  • Ajouter de la télémétrie sur Trainberry (non, ce projet n'est pas mort, il dort juste !)
  • Regarder l'agenda de notre nouveau Head of AI pour trouver le moment optimum pour poser une réunion
  • ... Et bien d'autres 😁

Conclusion

  • Dès qu'un workflow est complexe :
    • C'est compliqué à débugger
    • Ça peut vite devenir illisible
    • Un workflow = une action
  • C'est pas toujours intuitif :
    • Doc peu aidante quand on ne sait pas ce qu'on cherche
    • Forum n8n est pas mal mais parfois lourd à lire
  • Pour tester on peut exécuter nœud par nœud mais ne fonctionne pas toujours comme attendu

Conclusion

  • C'est simple
  • Ça permet d'éviter plein de petits bouts de codes par-ci par-là
  • Automatiser c'est vraiment cool et n8n fait gagner pas mal de temps une fois les bases maîtrisées





Merci !