Catégories
Automatisation / scripts

Automatiser des tâches avec n8n

La petite histoire :

Cette semaine, madame me fait la remarque :

« J’étais en liste d’attente pour mon créneau de sport et quand j’ai reçu la notification qu’une place venait de se libérer, j’ai directement cliqué sur l’application mais [insérer un prénom familier] avait déjà réservé. C’est impossible, il va trop vite. »

Madame, un lundi du mois de novembre.

Alors que je l’écoute attentivement, un truc s’allume dans ma tête :

« Mais tu sais qu’on peut tout automatiser pour que ça (terme générique qui désigne ici un script) t’inscrive tout seul quand une place se libère ? »

Monsieur, pas peu fier de son idée, un lundi du mois de novembre.

Présentation

Et c’est parti pour remettre en service un container docker que j’avais installé lorsque IFTTT était passé payant il y a quelques temps, et que j’ai fini par désactiver, faute d’utilité réelle. Ce container, c’est n8n. Je ne ferai dans cet article que survoler le sujet. Mais je reviendrai plus en détails une autre fois si jamais cela semblait utile.

Le concept est simple : un tableau blanc (oui, il est noir) sur lequel on vient relier des blocs déjà tous prêts, ou presque. On vient ainsi enchaîner les actions et automatiser tout ce qui rentre dans le champ d’action des modules proposés. C’est du no code. Il « suffit juste » de configurer l’accès aux services dont on souhaite se servir (gmail, telegram, discord, …).

Le tableau de bord de n8n

Le Workflow, nom d’un script dans n8n, commence par un bloc « start ». Dans mon cas, je veux que ce script s’exécute à intervalle régulier, j’ajoute donc un bloc interval, que je règle sur 11 secondes. Vous aurez compris que toutes les 11s, il appellera le bloc suivant, etc. Pour en ajouter un, il suffit de cliquer sur le + en haut à droite et de rechercher dans la liste à l’aide de mots-clés.

Le « Workflow » de madame une fois finalisé

Les flèches sont les appels d’exécution d’un bloc à l’autre. L’ordre des blocs a évidemment un rôle prépondérant sur le fonctionnement du script.


Le core… du sujet

Le premier bloc de ce script est le bloc Gmail. Il nécessite un peu de configuration en amont pour pouvoir l’utiliser. Mais une fois l’accès en place, tout roule. La documentation est d’ailleurs très bien faite. Afin de ne pas réinventer la roue sur ce blog, je vous renvoie directement vers celle-ci. Je double-clique sur le bouton pour le modifier et je sélectionne ou complète les champs requis. Et chaque bloc se configure ainsi.

Afin de ne pas alourdir ce billet de blog, je vais survoler la configuration de chaque bloc et me concentrer sur l’action de chacun d’entre eux au sein du script.

Gmail – getAll : message

Ce bloc vérifie mes messages avec des critères stricts, notamment qu’il n’ai pas l’étiquette n8n_done (vous allez comprendre pourquoi par la suite).

HTML Extract

J’extrais l’URL correspondant au bouton valider dans le mail afin de le passer dans le bloc suivant

HTTP Request

Je lance la requête vers le site de réservation avec l’URL extraire du précédent bloc

HTML Extract

J’extrais la réponse su site pour savoir s’il a bien pris en compte ma réservation ou s’il y a eu un problème

HTML Extract

En parallèle, je récupère les détails du WOD contenus dans le mail : date, heure, créneau, …

Merge

J’utilise un bloc merge pour fusionner les différentes infos, tout en les gardant séparées dans des variables différentes. Cela permet de ne pas faire plusieurs appels au bloc suivant. C’est ce qui arrivait au début quand j’avais 2 flèches qui arrivaient de mes 2 tâches réalisées en parallèle sur le bloc IF qui suit.

IF

Je viens ici tester si la réservation a bien été prise en compte en fonction de la réponse à ma requête HTTP.

Gmail – send : message

Et en fonction, j’envoie un mail au contenu différent à l’utilisateur concerné. Je reprends dans ce mail les détails du WOD que j’ai transmis à la chaine d’exécution principale au travers du bloc merge.

Gmail – add : message_label

Enfin, j’applique un étiquette, un label, à mon mail, afin qu’il sorte des résultats de recherche à la prochaine boucle de lecture de mes mails.


Finalement

Voilà pour cette automatisation. Je ne suis pas arrivé au résultat final en une fois. J’ai commencé par une exécution sommaire qui comportait simplement la lecture des mail et la requête HTTP pour la réservation. Cela fonctionnait très bien mais je me suis rendu compte que je n’avais aucun retour pour m’indiquer que j’étais bien inscrit en liste principale 🙂

Finalement, la modification du script de départ a pris autant voire plus de temps que la première version. Je voulais garder un temps d’exécution très rapide. C’est pour cette raison que j’ai parallélisé les actions. Je me suis alors retrouvé avec un nouveau problème car une flèche = une exécution du bloc suivant. Et au moment de faire se rejoindre les 2 files, j’avais donc 2 exécutions du même bloc : le IF.

J’ai contourné le problème avec le bloc merge.

Résultat : le bloc interval règle le lancement du script toutes les 11 secondes. Gmail n’accepte pas moins d’après mes tests. Si vous avez une solution, je suis preneur. Mais pour l’instant, personne n’a réussi à passer devant moi en liste principale !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.