Débuter avec n8n, automatiser la publication d’un nouveau article sur X

Introduction
Dans cet article, je vous propose de découvrir comment débuter avec n8n en créant un workflow simple, mais qui met en œuvre plusieurs fonctionnalités clés de l’outil, notamment la gestion des items, la loop implicite, le merge, ainsi que l’utilisation du nœud code.
L’objectif : publier automatiquement un tweet sur X chaque fois qu’un nouvel article est publié sur mon blog. Cela aurait pu être réalisé avec un plugin WordPress, une fonction personnalisée en PHP dans mon thème, ou même via un script Python.
Mais j’ai préféré concevoir un workflow avec n8n pour monter en compétences sur cet outil que je trouve très intéressant.
Le workflow se déclenche avec un trigger de type "cron" tous les jours à 10H.
Ce workflow s’articule autour de cinq grandes étapes que je vais détailler :
- Récupération des articles du blog
- Vérification : l’article a-t-il déjà été publié sur X ?
- Décision : publier ou non
- Publication sur X et enregistrement
- Envoi d’un e-mail de synthèse
Nous aborderons également quelques bonnes pratiques pour mieux gérer les erreurs lors de l'exécution du workflow.

Récupération des Posts
Plutôt que d’interroger l’API WordPress, j’ai opté pour une méthode plus simple : utiliser le fichier rss.xml, automatiquement mis à jour à chaque nouvelle publication. Pour se faire, le nœud "RSS Feed Read" de n8n est parfait, inutile d'utiliser un nœud HTTP Request qui complexifierait le workflow.
Le flux RSS contient les 10 derniers articles, ce qui signifie que nous obtenons 10 items à la sortie du nœud. Pour ne pas traiter à chaque fois les 10 articles, j’ai ajouté un nœud Limit qui ne conserve que les 3 plus récents. Une limite suffisante dans mon cas, en effet, il est très peu probable que je publie plus de 3 articles par jour.
Un nœud Code permet de reformater les dates extraites du flux RSS, afin de les rendre compatibles avec une future insertion SQL.



Post déjà tweeté ou non
Les articles déjà publiés sont enregistrés dans une base de données MySQL, dans la table "ndl_blog_post_x". Une alternative commune serait d’utiliser Google Sheets ou même un simple fichier texte, mais une base SQL reste plus pratique pour mon cas et ca me permet de centraliser mes données.
⚠️ Astuce importante : dans le nœud MySQL, il faut activez l’option Query Batching = Independently. Sinon, une seule requête sera exécutée, même si plusieurs items sont en entrées du noeud. Grâce à cette option, pour chaque article (item) une requête SQL sera exécutée individuellement pour vérifier si son guid est déjà présent dans la base.

Un noeud code permet de créer un boolean true / false nouveau article.

Prise de Décision
La première étape est de merger notre liste d'items(nos posts) avec le boolean "nouveau" que nous venons de créer. Le merge se fait par "position" en combinant les 2 entrées.

C'est le moment de décider si il faut créer un nouveau Tweet sur X ou si il ne faut rien faire. Pour cela, on utilise un noeud IF ou on va tester le boolean.

Tweet sur X
Si nouveau est false alors les items sont dirigés vers le nœud "ne rien faire". Si nouveau est "True", les items sont envoyés dans le nœud X. L'opération a réaliser est "create" et le contenu du tweet sera une expression. Un tweet sera fait pour chaque item en entrée du nœud. Le nœud X est exécuté une fois pour chaque élément en entrée.

Une fois le Tweet sur X terminé, il faut sauvegarder l'évènement indiquant qu'on effectué le tweet. Pour cela à l'aide du noeud mysql et l'opération "execute SQL", on réalise une insertion paramétrée dans la table. Au prochain workflow, le workflow pourra ainsi savoir si oui ou non le post est déjà sur X. Ne pas oublier d'ajouter l'option "Query Batching = Independently".

Email de synthese
À des fins de suivi, un e-mail est envoyé avec un récapitulatif des actions. Si aucun nouvel article n’a été publié, aucun e-mail n’est envoyé.
💡 Le nœud Email ne s’exécute qu’une seule fois, même avec plusieurs items en entrées. Deux options sont donc envisageables :
- Envoyer un e-mail par item avec un nœud loop (peu adapté ici)
- Fusionner les items avant d’envoyer le mail (solution retenue)
Un nœud Code assemble ou fusionne les items dans une seule variable "allTitles".


Gestion des erreurs
Trop souvent négligée, la gestion des erreurs est pourtant essentielle. Voici quelques pratiques simples à mettre en place :
- Utiliser Retry on Fail, avec une limite de tentatives et un délai entre chaque essai. Très utile, par exemple, si le blog est temporairement inaccessible quelques secondes.

- Ajouter un workflow dédié aux erreurs, à déclencher via l’option Error Workflow dans les settings du workflow. Ce workflow spécial peut envoyer un e-mail, stocker l’erreur dans une base, ou encore publier une alerte sur Telegram, Slack, autres...
- Utiliser des timeouts pour éviter qu'une exécution reste bloquée. Il y aussi une limite globale dans n8n paramétrable avec une variable d'environnement.

Ci-dessous, un exemple de mon propre workflow d’alerte : je reçois un e-mail à chaque erreur, et l’erreur est enregistrée dans une table SQL.

Résumé
Ce projet m’a permis de mieux comprendre les fondamentaux de n8n et d’acquérir des réflexes utiles pour construire des workflows plus robustes.
Ce workflow permet d'explorer des concepts clés tels que la gestion des items, la loop implicite, l’usage du nœud Merge, ou encore le noeud Code. n8n m’a aussi convaincu par sa souplesse : on peut facilement combiner des sources hétérogènes (RSS, SQL, X, email…), enrichir les données et ajouter une logique avancée le tout sans complexité excessive.
Grâce à cette automatisation, chaque nouvel article publié sur mon blog est automatiquement tweeté sur X, ce qui améliore la diffusion de mon contenu, sans effort supplémentaire.
Et surtout, ce workflow est évolutif : je pourrais demain y intégrer un envoi vers LinkedIn par exemple, très facilement, sans tout refaire.
Vous trouverez sur mon github ce workflow au format json pouvant être directement importé dans n8n.