Kennst du das? Eine Abwesenheit hier, eine Vertretung dort – und irgendwo dazwischen geht die Info verloren. Der Kalender ist nicht aktuell, die E-Mails stapeln sich und am Ende weiß keiner mehr so genau, wer eigentlich wann nicht da ist.
Dabei könnte alles so einfach sein.
Mit einem kleinen HTML-Formular und einem n8n-Webhook kannst du Abwesenheiten komplett automatisch erfassen, bestätigen und in deinen Kalender eintragen lassen – ohne Stress, ohne Chaos, ohne Extraarbeit.
Inhaltsverzeichnis
- Kurz & wichtig: Datenschutz
- Was wird für den Workflow benötigt?
- Das HTML-Formular als Basis für den Workflow
- Der n8n-Workflow mit Webhook
- Was man noch automatisieren könnte
- Fazit
- FAQ – Häufige Fragen zum n8n-Webhooks & Abwesenheitsworkflow
Kurz & wichtig: Datenschutz
In unserem Beispiel schicken wir ein paar persönliche Daten (Name, E-Mail, Abwesenheitszeiten) an n8n und den Google Kalender.
Damit alles sauber bleibt, solltest du:
- eine Datenschutzerklärung verlinken,
- eine Checkbox zur Einwilligung einbauen
- und das Formular über HTTPS laufen lassen.
Wenn du auf Nummer sicher gehen willst, kannst du n8n auch einfach auf deinem eigenen Server laufen lassen – dann bleibt alles bei dir.
Was wird für den Workflow benötigt?
Für dieses kleine Automationsprojekt brauchst du tatsächlich gar nicht viel. Die Zutatenliste ist überschaubar – fast wie beim Kuchenrezept ohne Rosinen:
n8n (Standard-Plan)
Ich verwende hier die gehostete Cloud-Version von n8n im Standard-Plan.
Damit bekommst du Webhooks, ausreichende Ausführungen und musst dich nicht mit Serverkram herumschlagen.
Google Kalender
Hier landen später alle Abwesenheiten automatisch als Termine.
Ob privater Kalender oder Workspace – beides funktioniert.
Eine kleine Webseite
Für das HTML-Formular reicht eine simple Unterseite auf deiner Domain.
Bei mir läuft sie auf einer Subdomain, abgesichert durch ein Wildcard-SSL-Zertifikat.
→ Wichtig ist nur: HTTPS muss aktiv sein (sonst motzt der Browser, und die DSGVO auch ein bisschen).
Und das war’s auch schon.
Mehr brauchst du nicht, um Abwesenheiten völlig automatisch zu verarbeiten und sauber im Kalender abzulegen.
Das HTML-Formular als Basis für den Workflow
Damit der n8n-Workflow überhaupt Daten verarbeiten kann, brauchen wir zunächst ein kleines HTML-Formular. Dieses liegt später auf meiner Subdomain automation.draeger-it.blog und dient als Einstiegspunkt für alle Abwesenheitsmeldungen.
Ich stelle dir das komplette Formular als Download zur Verfügung – so musst du nicht selbst Code kopieren oder zusammenbauen.
Der wichtigste Punkt bei der Anpassung:
Im Formular findest du einen Platzhalter namens DEINE_N8N_WEBHOOK_URL_HIER.
Dort trägst du später die Webhook-URL aus deinem n8n-Workflow ein.
Diese URL bekommt n8n automatisch zugewiesen, sobald du den Webhook-Node angelegt hast.
Außerdem gibt es im Formular einen Link zur Datenschutzerklärung.
Diesen kannst du problemlos auf deine eigene Seite anpassen – im Beispiel verweise ich auf:
https://draeger-it.blog/datenschutz
Mehr musst du an dem Formular nicht ändern. Nach dem Einfügen deiner Webhook-Adresse kannst du die Datei einfach auf deine Subdomain hochladen und sofort verwenden.
Download: HTML-Formular (ZIP / HTML-Datei)
Um die Seite nicht komplett öffentlich zugänglich zu machen, habe ich die Subdomain zusätzlich mit einem einfachen Basic-Auth-Schutz versehen. Das ist sicherheitstechnisch keine Hochsicherheitslösung, aber für interne Tools und Demo-Formulare völlig ausreichend. So kann nicht jede zufällige Person auf das Formular zugreifen, aber ich komme trotzdem bequem von überall aus dran.
Der n8n-Workflow mit Webhook
Jetzt wird’s spannend: Wir bauen den eigentlichen n8n-Workflow, der das HTML-Formular verarbeitet und später automatisch einen Termin im Google Kalender erzeugt.
Der Workflow im Überblick
Bevor wir in die Details einsteigen, hier einmal der komplette Ablauf in Kurzform:
- Formular ausfüllen
Der Nutzer trägt Name, Zeitraum und Grund der Abwesenheit ein. - Webhook auslösen
Beim Absenden wird das HTML-Formular direkt an n8n übermittelt. - Daten prüfen & formatieren
n8n validiert die Eingaben, formatiert Daten und bereitet alles für den Kalender vor. - Kalendereintrag erstellen
Die Abwesenheit wird automatisch als Termin im Google Kalender hinterlegt. - Benachrichtigung senden
Zum Schluss erhält der Nutzer eine Bestätigung oder – falls etwas nicht stimmt – eine Fehlermeldung.
Der Workflow im Detail
Der Einstiegspunkt für den gesamten Prozess ist ein Webhook.
Dieser Webhook nimmt die Daten aus deinem Formular entgegen und leitet sie an die nachfolgenden Nodes weiter – ganz ohne eigenen Server, PHP, Backend oder API-Kenntnisse.
Der Workflow beginnt mit einem Webhook, der jedes Mal ausgelöst wird, wenn jemand unser HTML-Formular absendet. Dafür musst du in n8n lediglich einen Webhook-Node hinzufügen. Sobald der Node gespeichert ist, stellt dir n8n automatisch eine eindeutige Webhook-URL bereit.
Diese URL ersetzt später im Formular den Platzhalter DEINE_N8N_WEBHOOK_URL_HIER – und schon ist dein Formular direkt mit dem Workflow verbunden.
Im HTML-Formular stellen wir bereits sicher, dass alle Pflichtfelder ausgefüllt sind – inklusive der Zustimmung zur Datenschutzerklärung. Das reicht für normale Nutzer vollkommen aus.
Allerdings kann unser Workflow theoretisch auch direkt über die Webhook-URL angesteuert werden. Diese ist nicht geheim und könnte zum Beispiel von einem Angreifer genutzt werden, um den Workflow mit ungültigen oder unvollständigen Daten zu fluten.
Deshalb lohnt es sich, im Workflow selbst eine zusätzliche Prüfung einzubauen.
Dafür eignet sich eine IF-Node, mit der wir nochmals kontrollieren können, ob alle wichtigen Felder im JSON vorhanden sind und sinnvolle Werte enthalten.
So stellen wir sicher, dass nur valide Formulare weiterverarbeitet werden – und alles andere direkt abgebrochen wird. Das schützt den Workflow vor unnötiger Last und verhindert, dass unvollständige oder manipulierte Daten in den Kalender oder die Datenbank wandern.
Sobald das Formular abgesendet wurde, landen die Daten im Webhook-Node unseres n8n-Workflows. Dort können wir sie bequem weiterverarbeiten und – für mehr Übersichtlichkeit – in ein sauberes JSON-Objekt umwandeln.
Dazu verwenden wir im nächsten Node eine kleine Expression, die alle Felder aus dem Request bündelt:
{{ JSON.stringify({
name: $json.body.name,
email: $json.body.email,
reason: $json.body.reason,
date_from: $json.body.date_from,
date_to: $json.body.date_to,
comment: $json.body.comment,
privacy: $json.body.privacy
}) }}
Damit haben wir alle relevanten Angaben aus dem Formular ordentlich strukturiert und können sie im weiteren Verlauf des Workflows – etwa für den Google Kalender oder die Datenbank – problemlos weiterverwenden.
Im nächsten Schritt ermitteln wir zunächst den aktuellen Zeitstempel und bringen ihn direkt in ein gut lesbares Format – hier verwende ich dd.MM.yy – HH:mm:ss.
Gleichzeitig formatieren wir auch die vom Formular empfangenen Datumswerte für die Abwesenheit.
Der Grund dafür ist ganz simpel:
Diese Felder werden später in einer Bestätigungs-E-Mail benötigt und sollen dort natürlich sauber und verständlich angezeigt werden. Durch die Formatierung an dieser Stelle müssen wir uns später im Workflow nicht mehr darum kümmern.
Nachdem wir jetzt alle Daten gesammelt und formatiert haben, folgt eine weitere sinnvolle Prüfung: Wir stellen sicher, dass das Von-Datum tatsächlich vor dem Bis-Datum liegt.
Theoretisch ließe sich das bereits im HTML-Formular mit etwas JavaScript abfangen – aber da wir hier bewusst einen Low-Code / No-Code-Ansatz verfolgen, erledigen wir diese Logik direkt in n8n.
Dafür fügen wir eine IF-Node ein, die prüft, ob beide Datumswerte in der richtigen Reihenfolge liegen.
Wenn die Prüfung erfolgreich ist, geht es weiter mit dem nächsten Schritt: dem Eintrag in den Google Kalender.
Sollte das Datum jedoch ungültig sein, wird der Workflow nicht fortgesetzt – stattdessen versenden wir eine kurze Fehlermeldung per E-Mail, damit der Benutzer weiß, was schiefgelaufen ist.
Im Fehlerfall – also wenn die Datumsprüfung fehlschlägt – senden wir wie erwähnt eine E-Mail an den Ersteller des Formulars. In dieser Nachricht erklären wir nicht nur, dass die Abwesenheit nicht gespeichert wurde, sondern geben auch einen kurzen Hinweis darauf, welche Prüfung nicht bestanden wurde. So weiß der Nutzer sofort, was zu korrigieren ist.
Für den Versand nutze ich einen ganz normalen GMail-Account. Das hat den Vorteil, dass die Einrichtung in n8n extrem unkompliziert ist: Einmal verbinden, die Autorisierung bestätigen – und schon kann n8n E-Mails über das eigene Google-Konto versenden.
Die Nachricht selbst verschicke ich im HTML-Format. Dadurch können im Inhalt problemlos HTML-Tags verwendet werden, z. B. für fett formatierten Text, Absätze oder farblich hervorgehobene Hinweise. Das sorgt dafür, dass die Mail deutlich übersichtlicher und angenehmer zu lesen ist als ein reiner Textblock.
Der Abwesenheitsantrag vom {{ $json.timestamp }}
für {{ $('Create Abwesenheit Object').item.json.abwesenheit.name }}
konnte <b>nicht</b> angelegt werden!<br/><br/>
<b>Von:</b> {{ $('Date & Time - format from Date').item.json.formattedDateFrom }}<br/>
<b>Bis:</b> {{ $('Date & Time - format to Date').item.json.formattedDateTo }}<br/>
<b>Grund:</b> {{ $('Create Abwesenheit Object').item.json.abwesenheit.reason }}<br/>
<b>Kommentar:</b><br/>
{{ $('Create Abwesenheit Object').item.json.abwesenheit.comment }}<br/>
<br/>
<b style="color: red">Hinweis:</b><br/>
Das Datum von muss vor dem Datum bis liegen!<br/>
Der Datenschutzbestimmung zu zugestimmt werden!<br/>
Wenn die Prüfung ergibt, dass alle Daten korrekt sind, geht es weiter mit dem nächsten Schritt: der Erstellung des Kalendereintrags. Damit der Eintrag im Google Kalender richtig abgebildet wird, müssen wir beim Bis-Datum einen Tag hinzufügen. Hintergrund: Google Calendar interpretiert Ganztagstermine so, dass das Enddatum exklusiv ist – der Termin endet also einen Tag vorher, wenn wir nichts anpassen.
Diese kleine Korrektur lässt sich ganz einfach mit einer Date & Time Node in n8n erledigen. Dort addieren wir zum date_to einfach einen weiteren Tag, bevor die Daten an den Google-Calendar-Node weitergegeben werden. Damit wird die Abwesenheit im Kalender exakt so angezeigt, wie man es erwartet.
Mit den aufbereiteten Daten können wir jetzt den eigentlichen Kalendereintrag erstellen. Im Google-Calendar-Node müssen wir dafür nichts weiter tun, als die entsprechenden Werte per Drag & Drop in die vorgesehenen Felder zu ziehen – n8n macht uns das hier wirklich leicht.


In meinem Fall fülle ich zusätzlich die Description des Termins. Dort liste ich alle relevanten Informationen wie Name, Zeitraum, Grund der Abwesenheit und den optionalen Kommentar aus dem Formular noch einmal übersichtlich auf. So steht später im Kalender alles genau so drin, wie man es erwartet, und die Abwesenheit bleibt eindeutig nachvollziehbar.
{{ $('Create Abwesenheit Object').item.json.abwesenheit.name }} ist vom {{ $('Date & Time - format from Date').item.json.formattedDateFrom }} bis einschließlich {{ $('Date & Time - format to Date').item.json.formattedDateTo }} nicht anwesend.<br/><br/>
Kommentar:<br/> {{ $('Create Abwesenheit Object').item.json.abwesenheit.comment }}
Am Ende des Workflows sende ich noch eine kurze Bestätigungsmail, die darüber informiert, dass der Abwesenheitseintrag erfolgreich übernommen wurde. So bekommt der Nutzer direkt eine Rückmeldung, dass alles funktioniert hat.
Der Abwesenheitsantrag vom {{ $('Date & Time').item.json.timestamp }} für {{ $('Create Abwesenheit Object').item.json.abwesenheit.name }} wurde <b>erfolgreich</b> mit den nachfolgenden Daten angelegt:<br/><br/>
<b>Von:</b> {{ $('Date & Time - format from Date').item.json.formattedDateFrom }}<br/>
<b>Bis:</b> {{ $('Date & Time - format to Date').item.json.formattedDateTo }}<br/>
<b>Grund:</b> {{ $('Create Abwesenheit Object').item.json.abwesenheit.reason }}<br/>
<b>Kommentar:</b><br/>
{{ $('Create Abwesenheit Object').item.json.abwesenheit.comment }}<br/>
Was man noch automatisieren könnte
Der Workflow funktioniert bereits zuverlässig – aber natürlich lässt sich das Ganze noch deutlich weiter ausbauen.
Aktuell wird jede Abwesenheit eingetragen, ohne dass der Nutzer später die Möglichkeit hat, den Eintrag selbst zu stornieren oder zu bearbeiten. Genau hier kann n8n seine Stärken ausspielen.
Eine Idee wäre, die Daten jedes Kalendereintrags zusätzlich in einer n8n DataTable abzulegen. Dort könnte man einen eindeutigen Hash oder Token speichern, der den Datensatz eindeutig identifiziert. Diesen Hash könnte man dem Nutzer direkt in der Bestätigungsmail als speziellen Link mitgeben.
Über diesen Link würden wir anschließend einen weiteren Webhook ansteuern – zum Beispiel zum Löschen oder Anpassen eines Eintrags.
Alternativ könnte man auch ein eigenes kleines „Abwesenheit bearbeiten“-Formular bereitstellen, das über einen separaten Webhook läuft und die bestehenden Daten aktualisiert.
Damit ließe sich der Workflow zu einem kleinen, aber vollständigen Abwesenheits-Managementsystem erweitern – ganz ohne eigene Serverlogik und komplett mit Low-Code-Mitteln.
Fazit
Mit nur wenigen Nodes lässt sich aus einem einfachen HTML-Formular ein vollautomatischer Abwesenheitsworkflow bauen – ganz ohne eigenes Backend und komplett im Low-Code-Stil. n8n übernimmt dabei nicht nur die Verarbeitung der Formulardaten, sondern kümmert sich auch um Validierung, Datumshandling, Kalendereinträge und E-Mail-Benachrichtigungen.
Das Ergebnis ist ein schlanker, zuverlässiger Prozess, der im Alltag spürbar Zeit spart und gleichzeitig Fehler reduziert. Und das Beste: Der Workflow ist erst der Anfang. Mit ein paar Erweiterungen – wie z. B. einer Bearbeiten- oder Stornieren-Funktion – lässt sich daraus problemlos ein kleines Abwesenheitsmanagement-System entwickeln.
Wenn du noch tiefer einsteigen möchtest oder den Workflow Schritt für Schritt nachbauen willst, findest du alle Details dazu im begleitenden YouTube-Video. Viel Spaß beim Automatisieren!
FAQ – Häufige Fragen zum n8n-Webhooks & Abwesenheitsworkflow
Wie sicher ist ein n8n-Webhook?
Ein Webhook ist grundsätzlich öffentlich erreichbar, daher solltest du ihn absichern.
Das geht z. B. über:
- ein Webhook-Secret
- einen Custom-Header
- IP-Restriktion
- oder Basic Auth vor dem Formular
Für interne Tools reicht meist eine einfache Schutzmaßnahme. Mehr dazu zeige ich im Video.
Kann ich den Workflow auch ohne Google-Konto nutzen?
Ja! Google Calendar ist nur ein Beispiel.
Du kannst stattdessen auch:
- Outlook / Microsoft 365
- iCloud-Kalender
- CalDAV
- oder jede andere Kalender-API
einbinden — n8n unterstützt zahlreiche Dienste.
Kann ich das HTML-Formular anpassen?
Ja, beliebig!
Du kannst weitere Felder ergänzen, Styling ändern oder das Formular in eine bestehende Webseite integrieren.
Wichtig ist nur, dass die Feldnamen mit den Feldern im Workflow übereinstimmen.
Kann ich Abwesenheiten später ändern oder löschen?
Im aktuellen Beispiel nicht.
Aber du kannst ganz einfach:
- Daten in einer n8n DataTable speichern
- einen eindeutigen Token erzeugen
- einen „Stornieren“- oder „Bearbeiten“-Webhook bauen
- oder ein zweites Formular einrichten
Damit lässt sich ein richtiges Abwesenheitsmanagement aufbauen.
Brauche ich Programmierkenntnisse, um das nachzubauen?
Nein.
Der komplette Workflow basiert auf Low-Code bzw. No-Code.
Ein bisschen JSON-Verständnis hilft, ist aber nicht zwingend notwendig.
Kann ich den Workflow selbst hosten?
Ja, absolut.
Du kannst n8n:
- in der Cloud nutzen
- lokal installieren
- auf einem vServer laufen lassen
- oder sogar auf einem Raspberry Pi betreiben
Self-Hosting bietet mehr Kontrolle über Datenschutz und Datenflüsse.
Welche Kosten entstehen bei der Nutzung?
Für einfache Flows reicht meist der n8n Standard-Plan.
Alternativ kannst du n8n auch kostenlos selbst hosten.
Google Calendar und Gmail sind ebenfalls kostenlos nutzbar.
Funktioniert das auch mobil?
Ja!
Das HTML-Formular ist vollständig responsiv und kann problemlos vom Smartphone oder Tablet ausgefüllt werden.
Warum wird beim Bis-Datum ein Tag hinzugefügt?
Google Calendar interpretiert ganztägige Termine so, dass das Enddatum exklusiv ist.
Wenn du also „bis 30.11.“ angibst, endet der Termin technisch am 29.11.
Durch das automatische +1 Tag wird die Abwesenheit korrekt dargestellt.
Kann ich neben Abwesenheiten auch andere Prozesse automatisieren?
Definitiv!
Der Aufbau eignet sich auch für:
- Urlaubsanträge
- Krankmeldungen
- Schichtplanung
- Anmeldungen / Formulare aller Art
- Genehmigungsprozesse
- interne Workflows im Team
Mit n8n sind die Möglichkeiten praktisch unbegrenzt.
Letzte Aktualisierung am: 28. November 2025










