Automatiseren met n8n

Door: Gertjan Groen | 23 maart 2021 06:08

Automatiseren
How To

Er zijn volop handige diensten op internet, maar ze werken niet altijd met elkaar samen. Met een tool als n8n kun je ze op een logische manier met elkaar verbinden, zonder dat je hoeft te programmeren. Ideaal om steeds terugkerende handelingen te automatiseren. In tegenstelling tot diensten als Zapier en IFTTT kun je het op je eigen systeem installeren en gebruiken zonder abonnementskosten. In dit artikel laten we zien hoe het werkt!

Je hebt misschien weleens gehoord van Zapier of IFTTT. Hiermee kun je allerlei diensten aan elkaar koppelen die standaard niet met elkaar overweg kunnen. Zo kun je vervelende of steeds terugkerende handelingen automatiseren, waarna je er vrijwel geen omkijken meer naar hebt. Zapier was deels al een betaalde en meer op zakelijke gebruikers gerichte dienst, maar zelfs IFTTT vereist tegenwoordig een abonnement zodra je er meer mee gaat doen. Met n8n is er nu een vrij te gebruiken alternatief dat heel flexibel blijkt, al moet je er even wat tijd in steken om ermee te leren werken.

01 Wat is n8n?

De automatiseringstool n8n (spreek uit: ‘n eight n’ of ‘nodemation’) is gemaakt door een start-up uit Berlijn. Het bestaan werd in oktober 2019 bekend gemaakt via Product Hunt, waar het meteen het populairste nieuwe product was. Voor verdere uitbreiding kreeg n8n in maart 2020 steun van een grote Amerikaanse investeerder. Typerend voor n8n is dat het onder ‘fair code’ wordt geschaard, wat verwant is aan opensource, maar niet hetzelfde. Je kunt wel de broncode inzien, de software vrij installeren en gebruiken (ook op je eigen systemen) en verder verspreiden, maar niet inzetten om er zelf geld aan te verdienen. Dat recht is voorbehouden aan n8n, dat bijvoorbeeld komt met een gehoste versie, of advies en ondersteuning wil bieden en – op termijn – mogelijk licentiekosten introduceert voor de echte grootgebruikers. Het is ontwikkeld in de voor server-side-toepassingen hippe programmeertaal Node.js. Het werkt volledig via een browser en je hoeft dus nergens zelf te programmeren.

01 Met n8n kun je uiteenlopende handelingen automatiseren.

02 Mogelijk integraties

Het nut van een automatiseringstool zoals n8n valt of staat met het aantal beschikbare integraties. Met integraties bedoelen we diensten van derden die je kunt gebruiken in je automatiseringen. Als je op de website van n8n kijkt zie je uiteenlopende integraties, met veel diensten waar je als enthousiaste pc-gebruiker vast van hebt gehoord of zelfs mee werkt. Voorbeelden zijn Philips Hue, Spotify, WordPress, PayPal, Google Sheets, Microsoft Excel en Dropbox. Ook zijn er enkele meer algemeen toepasbare integraties, zoals RSS Feed, Send Email, HTML Extract, Execute Command en Cron. Bij deze masterclass beginnen we bij het begin: de installatie van n8n. Daarna gaan we stap voor stap een uitgebreidere workflow opbouwen.

02 Er zijn al talloze integraties voor n8n beschikbaar.

03 Installatie via npm

Een van de manieren om n8n te installeren is via Node.js, waar het voor is ontwikkeld. Hiervoor heb je Node.js en de pakketbeheerder npm nodig. We gebruiken een Linux-server met Ubuntu 20.04, maar een Raspberry Pi is ook een prima optie. Op de meeste systemen kun je ook voor Docker kiezen en daarbij eventueel vooraf een uitgebreidere configuratie maken met Docker Compose. We voeren de onderstaande stappen op de server uit als root-gebruiker maar je kunt ook het commando sudo gebruiken. Als eerste installeren we enkele vereisten:

apt-get install -y build-essential python curl

Daarna voegen we de pakketbronnen van NodeSource toe zodat we in de volgende stap de laatste LTS-versie van Node.js kunnen installeren (momenteel 14.x):

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -

Hierna kunnen we daadwerkelijk de bewuste versie van Node.js installeren.

apt-get install -y nodejs

De pakketbeheerder npm is daarbij inbegrepen, dus het geeft ons alles wat we nodig hebben om n8n te kunnen installeren. Met deze twee commando’s kun je controleren of Node.js en npm daadwerkelijk zijn geïnstalleerd en in welke versies:

node -v

npm -v

We installeren vervolgens n8n globaal met de volgende opdracht:

npm install n8n -g --unsafe-perm --allow-root

03 Installatie via de pakketbeheerder van Node.js.

04 Beginnen met n8n

Na de installatie kun je n8n starten via de opdrachtregel met n8n start. Als alternatief gebruik je deze opdracht om een tunnel op te zetten:

n8n start --tunnel

Via de tunnel maak je de n8n-installatie bereikbaar via internet. Dat is op een lokaal systeem in je thuisnetwerk nodig om bijvoorbeeld zogenoemde webhooks te laten werken. Na het starten lees je het poortnummer af, standaard 5678. Je kunt de n8n-omgeving met een browser vanaf een willekeurige pc (in hetzelfde netwerk) benaderen op het ip-adres van die server en het poortnummer, in de vorm http://IPADRES:5678. Je kunt dan direct met je (nu nog lege) workflow beginnen. Het wordt overigens aanbevolen de tunnel alleen voor jezelf of voor testdoeleinden te gebruiken. Wil je n8n in een praktijksituatie verder gaan gebruiken, dan kun je bijvoorbeeld een poort open zetten of een server in de cloud gebruiken.

04 Nadat je n8n hebt gestart, is het scherm met je workflow nog leeg.

05 Uitleg voor workflow

De workflow die we in dit artikel maken, werkt samen met een chatbot in Telegram die we straks ook op zullen zetten. De opzet is dat je via een opdracht aan deze bot informatie over het weer op kunt vragen. Als de opdracht aan de bot wordt gegeven, zal n8n in actie komen door een zogenoemde webhook, waarvoor we de Telegram Trigger-node gebruiken. Zo’n trigger zorgt dat de workflow wordt gestart. Er zijn (veel) meer integraties die als zo’n trigger kunnen dienen (zie kader ‘Trigger voor het starten van je workflow’).

Om de weersinformatie op te vragen, maken we in de workflow gebruik van OpenWeatherMap, waar ook een node voor beschikbaar is. Om OpenWeatherMap te gebruiken, maken we een account en api-sleutel bij deze weersdienst. Er zijn overigens nergens kosten aan verbonden.

Trigger voor het starten van je workflow

Een zogenaamde trigger zorgt dat je workflow wordt gestart. Een vaak gebruikte trigger is Cron waarmee je op vaste tijden of periodiek een bepaalde workflow kunt starten. Veel meer voorbeelden van triggers vind je als je naar https://n8n.io/integrations en dan het tabblad Trigger gaat. Als je voor een dienst geen trigger vindt, kun je soms een algemene Webhook gebruiken.

Een workflow kan via een zogenoemde trigger worden gestart.

06 Toegang tot OpenWeatherMap

Voor toegang tot OpenWeatherMap maak je eerst een gratis account bij deze weersdienst. Log hiermee in en ga onder je account naar API keys. Voer een herkenbare naam voor je api-sleutel in (bijvoorbeeld n8n) en klik op Generate. Er wordt nu een api-sleutel gemaakt. Noteer de sleutel voor later gebruik. Let erop dat je een sleutel niet altijd direct kunt gebruiken, dit kost zo’n tien minuten tot twee uur. Je mag meerdere sleutels maken, maar de gebruikslimieten gelden altijd per account en niet per sleutel. Om een idee te krijgen hoe je de dienst normaal via de api kunt gebruiken, ga je via het hoofdmenu naar API en volg je bij Current Weather Data de link naar API doc. Je ziet dan voorbeelden hoe een aanroep eruit ziet. In n8n wordt het meeste werk voor je uit handen genomen.

06 Voor toegang tot weersinformatie is een api-sleutel bij OpenWeatherMap nodig.

07 Telegram-bot maken

Zoals aangegeven gaan we een Telegram-chatbot gebruiken. Alle berichten die de bot verstuurt en ontvangt, lopen dan via Telegram. Een gratis Telegram-account volstaat om zo’n bot te maken en gebruiken. Heb je nog geen Telegram? Installeer dan eerst de app op je smartphone en doorloop de registratie. Je kunt de verdere stappen ook in de app doorlopen, maar via een browser op je pc is handiger. Meld je aan door je mobiele telefoonnummer op te geven. In de app ontvang je dan een code die je in de browser kunt overnemen om in te loggen. Voor het maken van de bot start je een conversatie met BotFather door deze in het zoekvak op naam op te zoeken. Klik dan onder de uitleg op Begin en geef de opdracht /newbot. Voer daarna een naam in voor je bot, bijvoorbeeld n8nbot, gevolgd door een unieke gebruikersnaam. Het is soms even zoeken naar een vrije naam. Voor dit voorbeeld kiezen we n8n_workflow_bot. Je ontvangt hierna meteen een bevestiging met een token die je moet noteren. Deze heb je straks nodig in de workflow.

07 Via de BotFather maken we een nieuwe Telegram-chatbot.

08 Opdracht voor bot

We hebben nu een Telegram-bot opgezet, maar willen aan onze bot nog een opdracht toevoegen waarmee het weerbericht kan worden opgevraagd. Open daarvoor opnieuw een gesprek met de BotFather en geef de opdracht /setcommands. Klik nu op de zojuist gemaakte bot. Voer vervolgens de opdracht en omschrijving in gescheiden door een streepje, bijvoorbeeld: weer - geef informatie over het weer.

Start nu een gesprek met je bot, door deze op naam op te zoeken. Je ziet nu als je begint met / alle mogelijke opdrachten. Je kunt hier later andere opdrachten aan toevoegen. Merk op dat het voor je workflow eigenlijk niet uitmaakt welke opdrachten je voor de bot hebt gedefinieerd. De workflow in n8n luistert namelijk naar álle berichten. Je kunt in de workflow op ieder bericht inhaken of (als je wat logica toevoegt) alleen op bepaalde opdrachten zoals /weer. Voor een gebruiker van de bot is het wél praktisch te weten welke opdrachten mogelijk is.

08 Via de BotFather voegen we ook een opdracht voor onze bot toe.

09 Toevoegen Telegram Trigger

We hebben nu alle vereisten om onze workflow te maken. De eerste stap is het toevoegen van de Telegram Trigger. Start daarvoor n8n met de tunneloptie:

n8n start --tunnel

Open dan n8n in je browser. Klik rechts op het plusteken. Hiermee kun je een zogenoemde node toevoegen. Ga naar het tabje Trigger en kies Telegram Trigger. Hierna kun je parameters voor de trigger opgeven. Onder Credentials kies je achter Telegram API voor Create New. Dit zijn de toegangsgegevens voor de bot. Achter Credentials Name voer je een beschrijvende naam in (bijvoorbeeld Telegram) en bij Access Token de token van je bot. Achter Nodes with access zet je in het linker gedeelte (onder No Access) een vinkje bij Telegram en klik je op het pijltje naar rechts. Zo geef je alvast de Telegram-node die we later toevoegen toegang via dezelfde toegangsgegevens. Klik dan op Create. Je keert terug op het scherm met parameters. Kies achter Updates de optie message. Zo zorg je dat de trigger actief wordt bij elk inkomend bericht. Sluit het venster.

09 De Telegram Trigger voegen we als eerste node toe.

10 Bewaar en test trigger

Voordat we de trigger kunnen testen, moeten we eerst de workflow opslaan. Ga daarvoor in het menu links naar Workflow (het bovenste icoontje) en kies Save As. Voer een beschrijvende naam in, bijvoorbeeld weerupdates. Het is verstandig ook tussentijds op te slaan na veranderingen.

Nu kunnen we de trigger testen. Dubbelklik op Telegram Trigger en klik rechtsboven op Execute Node. Er wordt nu gewacht op input van Telegram. Stuur via Telegram een bericht naar je bot. Vrijwel direct zul je in het venster van je Telegram Trigger de response zien met alle JSON-data voor het bericht. Het is niet alleen handig tussentijds te testen, in enkele gevallen is het zelfs noodzakelijk: je kunt pas gegevens in n8n aanwijzen in Output Data als er minimaal één bericht is ontvangen. Bij de Telegram Trigger bijvoorbeeld, moeten we verderop in deze masterclass de ID van de chat aanwijzen om berichten naar dezelfde chat terug te kunnen sturen. Als de test is gelukt, kun je het venster sluiten en je volgende node toevoegen.

10 De Telegram Trigger laat de details van het ontvangen testbericht zien.

11 Toevoegen OpenWeatherMap-node

We gaan nu de OpenWeatherMap-node toevoegen voor actuele weersinformatie. Deze node komt achter de Telegram Trigger. Selecteer daarom eerst de Telegram Trigger-node door er zodanig op te klikken dat deze wordt uitgelicht. Klik daarna op het plusteken en kies OpenWeatherMap. Ze zijn dan meteen verbonden (al kun je ook handmatig verbindingen maken door lijntjes te trekken!). Ook deze node vraagt weer enkele parameters. Om te beginnen kies je onder Credentials achter OpenWeatherMap API voor Create New. Voer een naam in en Access Token de eerder gemaakte api-sleutel, gevolgd door Create. Op het scherm met parameters vul je bij City de plaatsnaam met landcode in waarvoor je het weerbericht wilt weten, bijvoorbeeld Amsterdam,nl. Bij Language vul je nl in. Als laatste kiezen we weer Execute Node. Je ziet nu direct de weersinformatie met bijvoorbeeld de temperatuur, gevoelstemperatuur en windsnelheid. Je kunt het venster sluiten.

12 Telegram-integratie toevoegen

Als laatste voegen we de Telegram-node toe waarmee we een bericht naar de chat kunnen sturen met informatie over het weer. Selecteer daarvoor eerst de OpenWeatherMode-node, klik op het plusteken en kies onder het tabje Regular voor Telegram. Dit is dus een andere integratie dan Telegram Trigger!

Je kunt nu de parameters invullen. Bij Credentials kun je de eerder gemaakte configuratie kiezen, waarvoor we ook de toegangsrechten al hadden ingesteld. Alleen de velden Chat ID en Text hoef je nog te configureren. Klik achter Chat ID op het instellingenicoontje en dan Add Expression. Selecteer daarna achtereenvolgens Nodes / Telegram Trigger / Output Data / JSON / message / chat en klik op ID. Hiermee zorg je dat de juiste chat is geselecteerd. Onder Result zie je dat ook al de laatst bekende waarde is ingevuld. Sluit het venster. Klik dan achter het veld Text op het instellingenicoontje en kies dan weer Add Expression. Blader nu naar Nodes / OpenWeatherMap / Output Data / JSON / main en klik op temp. Ook hier is onder Result een waarde ingevuld. Dit is in feite het bericht dat naar de chat wordt verstuurd. Sluit het venster. Klik dan op Execute Node. In je Telegram-chat zie je dat nu de temperatuur wordt gemeld. We gaan dit later mooier opmaken. Je kunt het venster sluiten.

12 De Telegram-node zal met deze instellingen de temperatuur naar de chat sturen.

13 Bericht opmaken

Het is natuurlijk mooier om een eigen bericht op te stellen en niet gewoon de temperatuur in het bericht te zetten. Dat kan eenvoudig. Dubbelklik op de Telegram-node en klik op het veld achter Text. Onder Expression kun je zelf het bericht invullen met tekst waar je allerlei waardes tussen kunt zetten. De waarde voor de temperatuur staat er al in. Om extra waardes toe te voegen vouw je Nodes / OpenWeatherMap / Output Data / JSON uit. Zoek dan de waarde op die in het bericht moet komen te staan en klik deze aan. Het kan er dan bijvoorbeeld als volgt uit komen te zien:

We hebben op het moment {{$node["OpenWeatherMap"].json["weather"][0]["description"]}}. De temperatuur is {{$node["OpenWeatherMap"].json["main"]["temp"]}}°C met een luchtvochtigheid van {{$node["OpenWeatherMap"].json["main"]["humidity"]}}%, maar het voelt als {{$node["OpenWeatherMap"].json["main"]["feels_like"]}}°C. De windsnelheid is {{$node["OpenWeatherMap"].json["wind"]["speed"]}} m/s.

Het is overigens handig de beschrijving van de api op https://openweathermap.org/current erbij te nemen, zodat je ziet wat alle velden in de JSON-data betekenen.

13 Je kunt het bericht opmaken door tekst te schrijven en waardes in te voegen.

14 Conditie toevoegen

De workflow zal op het moment bij elk bericht in actie komen en de weersinformatie doorgeven. De opzet is echter dat het alleen reageert op het commando /weer. Om dat te bereiken, kunnen we direct na de Telegram Trigger-node een IF toevoegen die de inhoud van het bericht controleert. Selecteer hiervoor de Telegram Trigger-node door er op te klikken en voeg IF toe via het plusteken. Kies dan Add Condition / String. Achter Value 1 klik je op het instellingenicoontje en dan Add Expression. Blader naar Telegram Trigger / Output Data / JSON / message en klik op text. Staat de optie er niet bij? Dan zijn er geen gegevens om mee te werken. Sluit het venster, kies Execute Workflow, stuur een bericht naar de bot en probeer het opnieuw. Sluit vervolgens het venster. Maak nu de vergelijking verder af: kies achter Operation voor Equal en vul bij Value 2 de waarde /weer in. Wat dit aangeeft, is dat de vergelijking alleen geldig (ofwel true) is als het bericht precies /weer bevat.

Als je het venster sluit, zie je dat IF als het goed is tussen Telegram Trigger en OpenWeatherMap staat. Voor een beter overzicht kun je ze herschikken door ze te verslepen. Bij de tekst /weer wordt uiteraard de route via true gevolgd waarin daadwerkelijk het weerbericht wordt opgevraagd en verstuurd via Telegram. Probeer het maar eens door op Execute Workflow te klikken en de opdracht /weer naar de bot te sturen. Of bewaar de workflow en zet het vinkje bij Active zodat deze steeds actief is.

14 Door een conditie toe te voegen, kunnen we de opdracht controleren.

Meer logica voor je toepassing

In dit artikel gebruiken we IF om de inhoud van het bericht te testen voordat de verdere workflow wordt afgehandeld. Wil je meerdere opdrachten afvangen, dan is een Switch gepaster. Deze kun je op dezelfde manier toevoegen. Verwijder eventueel IF door deze te selecteren en op Del te klikken. Selecteer de Telegram Trigger, klik op het plusteken en voeg Switch toe. Bij de parameters selecteer je bij Value 1 weer de tekst van de chat in de Output Data zoals we in de masterclass deden. Daaronder geef je via regels op onder welke condities welke uitgang moet worden gevolgd. Let op dat de uitgangen zijn genummerd van 0 t/m 3.

Een Switch werkt ongeveer als een IF, maar geeft meerdere uitgangen.

15 Voorbeeld statusmelding

Het is betrekkelijk eenvoudig om je workflow uit te breiden met andere opdrachten. Stel dat je via de opdracht /status de temperatuur van de processor door wilt geven. Bij de meeste Linux-systemen en Raspberry Pi kun je die achterhalen met:

cat /sys/class/thermal/thermal_zone0/temp

Hierna moet je deze uitkomst nog wel delen door duizend. Dat kan ook in één keer met de volgende opdracht:

echo $(($(cat /sys/class/thermal/thermal_zone0/temp)/1000))

Om de waarde met n8n uit te lezen, kun je een node genaamd Execute Command toevoegen en daarin bovenstaande opdracht zetten. Als je dan op Execute Node klikt, kun je direct het resultaat aflezen. Dit kun je dan weer gebruiken in bijvoorbeeld een bericht in Telegram.

15 Je kunt opdrachten op de server uitvoeren en het resultaat daarvan gebruiken.

16 Meer mogelijkheden

We hebben nu een werkende workflow en belangrijke mogelijkheden toegelicht, maar je kunt natuurlijk je fantasie de vrije loop laten. Zo kun je onder andere gegevens manipuleren of zelfs een andere workflow starten vanuit je workflow. Om inspiratie op te doen, bekijk je de kant-en-klare workflows en deze zelfs importeren door de code te kopiëren en plakken. Hoewel we in de masterclass Telegram gebruiken, zijn er ook andere methodes voor berichtenuitwisseling. Denk aan het versturen van sms-berichten met MessageBird of Twilio, e-mailberichten via smtp of pushnotificaties met diensten als Pushbullet. Het gaat dan in principe om eenrichtingsverkeer, zoals bepaalde statusmeldingen vanuit een workflow. De meeste kun je niet – zoals Telegram – als een trigger gebruiken voor het starten van je workflow. Er zijn ook nog wat aanpassingen wenselijk als je de automatisering(en) in de praktijk gaat gebruiken. Om te beginnen zul je er voor willen zorgen dat n8n altijd actief is, met een opstartscript of -tool, en beter beveiligd. Je vermijdt de tunneloptie dan liever, om in plaats daarvan bijvoorbeeld een poort open te zetten of reverse proxy te gebruiken.

16 Je kunt kant-en-klare workflows overnemen, en aanpassen of gebruiken.

0 Reactie(s) op: Automatiseren met n8n

  • Om te reageren moet je ingelogd zijn. Nog geen account? Registreer je dan en praat mee!
  • Er zijn nog geen reacties op dit artikel.

Wanneer je een reactie plaatst ga je akoord
met onze voorwaarden voor reacties.