N8N : Une alternative à Zapier, Make et IFTTT ? (avec installation docker et exemple d'utilisation)

/!\ Article non sponsorisé /!\

Aujourd'hui je vous présente N8N, un outil que j'utilise souvent dans le cadre de projet personnel ou professionnel qui permet d'interconnecté différentes API et d'effectuer des transformation, insertion et suppressions par le biais d'une interface facile à prendre en main. Un outil très utiliser par les "no-codeur". En NO-CODE on parle également d'outil d'automatisation.

Capture d'écran d'un exemple de Workflow sur le site de N8N

L’intérêt de N8N est qu'il s'agit d'un projet "faircode" (on reviendra après sur cette licence) souvent mis à jours et que vous pouvez avoir une version héberger chez vous.

Un marché très concurrentiel

N8N n'est pas le seul sur le marché, bien au contraire. Il existe bon nombre d'outil plus où moins cher sur le marché voici quelques exemples :

  • Zapier (0€ pour 100 tâches par mois, puis à partir de 18,26€ par mois pour 750 tâches par mois)
  • Make (0$ par mois pour 1000 ops, puis à partir de 9$ par mois pour 10 000 ops)
  • IFTTT (0€ par mois pour 2 Applets, puis à partir 2,30€ par mois)
  • Microsoft Power Automate (à partir de 15$ par mois/utilisateurs ou 0,60$ par run)
  • ....bien d'autres

Les prix qui sont notés ici sont datés de l'écriture de ce billet. Il faut également faire attention, la "tâche", "opération" ou "workflow" ce défini de façon différente selon les outils, il est important de faire différents tests d'un même workflow sur plusieurs outils pour comparer. Par exemple, une "ops" sous Make va représenter souvent simplement l'envoi d'une ligne alors que sous Zapier il s'agit d'une exécution d'un workflow (ou Zaps) en entier.

Je vais pas faire de comparaison pousser ici, mais de ce que j'ai pu voir, Zapier à plus de paramètres et il conviendra mieux aux développeurs, Make est très "user friendly" avec une interface facile à prendre en main et donc idéal pour les débutants. Pour IFTTT (ou définition), il dispose de beaucoup d'intégration disponible pour IOT, il conviendra donc mieux à ceux qui cherchent à automatiser leurs objets connectés. Pour Microsoft Power Automate, il sera forcément mieux intégré à un environnement Microsoft.

Pourquoi utiliser N8N ?

Du coup, pourquoi choisir N8N qui n'est pas dans la liste précédente ? 😄

  • Le prix est le premier argument : en hébergeant la solution moi-même avec du docker, je ne paye pas l'exécution d'un Workflow et j'ai un nombre de Workflow illimités. Par contre si vous souhaitez ne pas héberger la solution, vous pouvez toujours prendre un instance chez N8N voici les prix (selon les modèles, vous pouvez bénéficier d'autres fonctionnalités tel que le versionning, la sauvegarde des identifiants dans un vault ou le SSO pour le modèle entreprise par exemple.) :
Tarification sur le site de N8N
  • "FairCode" (pas d'open-source mais l'accès au code) : Et oui vous pouvez accéder au code source de N8N (lien vers le github). Vous pouvez contribuer, à la documentation mais également proposer vos propre node sur npm (les nodes sont les nœuds qui permettent de communiquer avec une API existante ou effectuer des transformation de données).
"Faircode licence" ? N8N est un logiciel Fair-code, c'est à dire qu'il est qu'il est libre d'utilisation, son code est généralement publique mais il peut être limité en fonctionnalité par ces auteurs. Pour plus information vous pouvez allez à la page dédié sur la documentation de N8N

Pourquoi ne pas utiliser N8N ?

Il y a aussi des mauvais côtés que j'ai noté :

  • Pas de possibilité de testé N8N sur leurs serveurs sans payer (comme noté plus haut sauf si vous utilisez du docker, l’intérêt est de l'installer sous cette configuration.)
  • Les applications de bureau sont arrivées en fin de support : avant on pouvez installer N8N directement sous Windows avec un .exe ou sur MacOS avec une application, mais N8N a arrêter le support.
  • Certains node ne dispose pas de tous les appels API et ne sont pas toujours mis à jours.
  • Il est possible d'insérer du code mais uniquement en Javascript pour le moment (le python en bêta).
  • Peut ce montrer moins "user friendly" que Make ou Zapier par moment.

Installation de N8N avec docker-compose

💡
Passer cette étape si vous souhaité utiliser la version SAAS de l'outil

Maintenant que les présentation sont fait avec N8N, on va passer à l'installation. La suite, dans le cadre où vous n'utilisez pas la version SAAS de l'outil.

Prérequis

Lancer un conteneur N8N :

docker run -it --rm --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n docker.n8n.io/n8nio/n8n

Docker-compose avec Postgres :

On peut aussi avec docker-compose relier N8N à une base de données Postgres pour plus de performance.

Voici le squelette :

Le .env va permettre de définir les mot de passes, nom d'utilisateurs et nom de la BDD :

POSTGRES_USER=changeUser
POSTGRES_PASSWORD=changePassword
POSTGRES_DB=n8n

POSTGRES_NON_ROOT_USER=changeUser
POSTGRES_NON_ROOT_PASSWORD=changePassword

On va créer une instance de N8N avec Postgres avec docker-compose :

version: '3.8'

volumes:
  db_storage:
  n8n_storage:

services:
  postgres:
    image: postgres:11
    restart: always
    environment:
      - POSTGRES_USER
      - POSTGRES_PASSWORD
      - POSTGRES_DB
      - POSTGRES_NON_ROOT_USER
      - POSTGRES_NON_ROOT_PASSWORD
    volumes:
      - db_storage:/var/lib/postgresql/data
      - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
      interval: 5s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: always
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
    ports:
      - 5678:5678
    links:
      - postgres
    volumes:
      - n8n_storage:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy

Le init-data.sh permet de crée les utilisateurs :

#!/bin/bash
set -e;


if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
	psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
		CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
		GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
	EOSQL
else
	echo "SETUP INFO: No Environment variables given!"
fi

N’oublier pas de changer les droits du fichier :

chmod 755 init-data.sh

Utilisation de N8N

Bon maintenant que l'installation de nos conteneurs docker est terminé, si on passé aux choses intéressantes ?

Un peu de vocabulaire :

  • Les workflows -> Un workflow est un ensemble nodes qui sont exécutés pour effectuer des actions qui permettent de faire des choses. Il sont exécutés par un "trigger"
  • Les triggers -> Les triggers sont des nodes permettent de déclencher des Workflows (Ex: Toutes les heures, quand un webhook est appelé ou via un autre workflow 😊)
  • Les nodes -> les nodes, c'est un peu coeur de N8N, si c'était de la programmation ce serait des fonctions. il permettent d'effectuer une action sur une API (récupérer des informations, poster un message...etc) ou une transformation (convertir une date, enlever du texte dans une phrase...etc)
  • Les credentials -> La où vous enregistrerez vos identifiants pour vous connecter aux applications.

Après que vous aillez crée votre compte et que vous vous soyez connectez. Voici l'interface d'accueil :

Interface d'accueil d'N8N

Exemple de Workflow N8N (Notion + Telegram)

Dans cette exemple "basique" de Workflow je vous montre comment envoyer une notification Telegram quand une nouvelle page est ajouté à Notion.

D'abord les credentials :

Pour Notion : rendez-vous ici pour créer votre première intégration. En cliquant sur le "+" :

Création d'une intégration dans Notion

Une fois l'intégration crée, pensez à copier l'integration secret nous en aurons besoin juste après.

Dans Notion les intégrations n'accède pas à toutes les BDD (et tant mieux 😊) il va falloir lui dire à qu'elle BDD nous souhaitons lui donner accès.

Prenons par exemple une liste des tâches simple. Vous pouvez en cliquant sur les options de la BDD ajouter une nouvelle connections vers votre integration :

Une fois ceci fait vous pouvez voir les droits que l'integration a sur votre BDD :

Ajouter le credential Notion dans N8N :

Allez dans credentials (menu à gauche) > add credentials :

Ajouter un credential dans N8N

Entrer votre secret que vous avez précédemment récupéré (vous pouvez renommer le credential pour ne pas vous y perdre quand vous en avez beaucoup) :

Une fois entrée, un test confirme la connexion.

On va tout de suite tester que notre BDD remonte bien :

Dans Workflows > add Workflow :

On va ensuite rajouter notre premier node : un trigger manually. Ceci va permettre d'executer le Workflow lors de l'appui du bouton en bas au centre.

Création du trigger "manually"

Cliquer ensuite sur le "+" à coté du node "Manually" pour relier un nouveau node et chercher les nodes Notion :

Choisir "get many database pages" pour récupérer toutes les pages d'une BDD.

Dans "credential" choisir le credential que vous venez de créer :

Choix du credential dans le node

Choisir ensuite votre BDD Notion (seul les BDD que vous avez autorisé préalablement peuvent remonter). Le "Return All" permet de remonter tous les éléments d'une BDD (par défaut 50 éléments ) :

Choix de la BDD Notion dans le node Notion

Vous pouvez quitter l'édition du node (en cliquant en dehors de celui-ci).

Il ne vous reste plus qu'à executer :

Execution du Workflow

Si vous double cliquer sur notion vous pouvez voir dans l'édition du node :

  • 1. L'entrée des données dans le node (ici rien car il s'agit d'un trigger manually)
  • 2. La sortie du node Notion avec nos différentes page de notre Base de données
  • 3. Les boutons permettant de voir les données avec différentes vue (sous format Table, sous format JSON ou sous format de schema)
Interface d'un node

Félicitation vous venez de remonter des données de Notion dans N8N ! 👏

Passons à la phase suivante -> Le bot Telegram.

La première étape est d'entamé la conversation avec le BotFather, c'est l'outil de Telegram pour créer les bots 🤠 (un bot pour crée des bot en somme).

Le BotFather

Commencé par lui demander de crée un nouveau bot avec la commande :

/newbot
création du bot

Une fois ceci fait, donner un nom à votre bot (attention celui-ci doit finir par bot à la fin). Vous obtenez alors une clé api :

Clé API pour pouvoir utiliser un bot Telegram

Copier cette clé en cliquant dessus et ajouter la aux credentials N8N :

Une fois ceci fait lancer une conversation avec votre nouveau bot :

Première échange avec notre chatbot

Ce /start que nous venons d'envoyer en débutant la conversation va nous permettre de récupérer l'id de cette conversation avec notre bot.

Pour récupérer l'id de la conversation avec notre bot, on peut utiliser N8N avec un Telegram Trigger connecté à notre credential précédemment rajouté. Il faut cliquer sur le bouton "Listen for Event" pour récupérer l'évènement du /start écris à notre bot. L'ID de la conversation sera dans la sortie

Vous allez pouvoir ensuite envoyer un message test avec un node Telegram send message comme ceci :

Envoi d'un message test dans Telegram

Si tout ce passe bien vous devriez recevoir ceci via Telegram :

Pour désactiver le "This message was sent automatically with n8n" regarder du côté des Additional Fields.

Revenons à notre but principal : envoyé une notification Telegram quand une tâche dans Notion est crée.

Pour cela on va faire un algorithme très simple avec N8N :

Algorithme de notre Workflow pour N8N
⁉️
Pourquoi décochée la notif Telegram dans Notion ? Tout simplement pour éviter de recevoir plusieurs fois la notification. Comme notre Workflow va s'executer plusieurs fois (exemple : toutes les 5 minutes) il faut empêcher le Workflow de renvoyer la même notification.

Dans Notion on va crée un nouveau champ "Notif Telegram" :

Création du nouveau champ Notif Telegram

Dans N8N on va rajouter un if juste après notre Node Notion qui permet de récupérer la BDD :

Ajout du if dans N8N

Puis dans notre "if" :

  • 1. On va mettre une condition type "Boolean" (car la case à cochée sous Notion retourne True ou False).
  • 2. On va utiliser une valeur de type "Expression" ceci pour permettre d'utiliser les variables dans N8N.
  • 3. On clique/glisse notre variable qui contient la case à cochée
  • 4. On clique sur le bouton pour l'activer, cela permet de passer la valeur qui répondra à l'opération "Equal" à "True"

En conclusion de cette étape cela permet de dire "si la case est cochée dans Notion pour notre page, alors on continu vers le prochain node".

Si "Notif Telegram" est cochée
💡
Pour l'exemple, cochée une case de la base Notion et cliquer sur "Execute Workflow"

On va ensuite relier nos différents Nodes comme ceci :

Notre Workflow qui avance

Dans le node Telegram on va faire quelques modification pour ajouter des indications 😎 :

Avec les expressions nous rajoutons des informations à notre notification

On peut exécuter pour tester :

Génial vous avez votre belle notification 👏 !!!

Il nous manque une chose pour que la notification de tâche ne s'exécute qu'une fois, pour cela rien de plus simple, on va rajouter un node pour modifier une propriété de la page :

modifier une page d'un database

Ensuite on va mettre le node de modification de notre page à la suite du "if" comme ceci :

Ensuite il suffit d'indiquer l'url de la page Notion à modifier puis de mettre notre propriété "Notif Telegram" en décochée :

Il ne vous reste plus qu'à remplacer le trigger Manually par un trigger "On a schedule" pour exécuter notre Workflow toutes les 5 minutes (par exemple, mais selon votre besoin).

Mise en place du Cron

Votre Workflow final est enfin celui-ci :

Le Workflow final

Conclusion

N8N est un outil puissant permettant d'automatiser des tâches et de transformer la donnée. Les workflow sont simple à mettre en place, mais demandes plus de base en programmation que ces concurrents (notamment pour l'utilisation des expressions). Dans les autres avantages que l'on pourra citer, la capacité d'être selfHosted et un coût mieux maîtriser que ces concurrents.


Je continuerai à faire des articles dédiés à des Workflow N8N dans les prochaines semaines pour vous montrer les possibilités de l'outil.