N8n Workflow Engine
n8n ist ein Open-Source-Tool zur Workflow-Automatisierung, das man selbst hosten kann. Über eine visuelle Oberfläche baut man Workflows per Drag-and-drop aus sogenannten „Nodes“, die verschiedene Dienste und Aktionen miteinander verbinden. Es gibt Hunderte vorgefertigte Integrationen, z. B. für Slack, Mail oder MQTT. Ebenfalls gibt es eine große Auswahl an für uns relevante Community Nodes (Vikunja, Listmonk, und so weiter) sowie die Möglichkeit, eigene Nodes zu schreiben (beispielsweise Paperless oder NATS).
Inhaltsverzeichnis
- Inhaltsverzeichnis
- Workflow Übersicht
- Community Nodes
Workflow Übersicht
Workflows bestehen grundsätzlich aus einem oder mehreren Triggern und einer oder mehreren Aktionen. Im Folgenden werden nur die für die Mitgliederverwaltung relevanten Workflows beschrieben, N8n kann aber natürlich auch für andere Automatisierung verwendet werden.
Workflows für Dokumente
Document Consumed Workflow
Dieser Workflow wird durch das Paperless Post-Consume Script ausgelöst, immer dann, wenn ein QR Code mit dem korrekten Inhalt erkannt wird. Die Idee hier ist, dass ausgedruckte und handschriftliche Dokumente automatisch verarbeitet werden können.
Im Prinzip ersetzt dieser Workflow den Docuseal Webhook, der automatisch dem Backend bescheid gibt, wenn alle Parteien unterschrieben haben. Bei ausgedruckten Dokumenten passiert dies stattdessen hierüber.

Der Workflow:
- wird über ein Webhook vom Post Consume Script ausgelesen. Als Inhalt wird der Inhalt des dekodierten QR Codes übergeben
- nur handschriftlich unterschriebene Dokumente werden verarbeitet
- dem Backend wird signalisiert, dass das Dokument erfolgreich verarbeitet wurde
Als Konsequenz kann das Backend weitere automatische Aktionen ausführen, beispielsweise vorläufige oder dauerhafte Berechtigungen eintragen.
Paperless Papierkorb
In Paperless kann nur der Owner Dokumente in den Papierkorb verschieben. Dies lässt sich leider nicht anders konfigurieren, sodass wir uns hier mit einem Workaround behelfen: die Mitgliederverwaltung und/oder der Vorstand können dem Dokument ein Tag zuweisen. Dieses Tag löst einen Workflow in Paperless aus:

Dieser Workflow löst zwei Dinge aus (leider ist Dokument löschen keine verfügbare Aktion):
- er entfernt das Tag wieder, um Rekursion zu vermeiden
- und löst ein N8n Webhook aus
Der N8n Workflow löscht dann das Dokument.

Cron Jobs - Sync von Daten
Sync Tags für Einweisungen
In Paperless unterscheiden wir verschiedene Arten von Dokumente, diese sind hier im Wiki beschrieben. Es wäre aber nicht zweckmäßig, für jede Einweisung ebenfalls einen eigenen Typ zu erzeugen, daher verwenden wir Tags. Dieser Workflow liest die verfügbaren Einweisungen vom Backend der Homepage aus und erzeugt die Tags.

Dieser Workflow regelmäßig als Cronjob ausgeführt.
- liest verschiedene Informationen aus Paperless aus
- Alle Gruppe, und findet die ID der Gruppen für Mitgliederverwaltung und IT-Admins
- Alle User, und findet die ID des MV Owner Users
- Alle bestehenden Tags
- Dann werden die verfügbaren Einweisungen aus dem Backend ausgelesen
- Im Merge Node werden Tags herausgefiltert, die noch nicht in Paperless existieren
- Diese werden dann erzeugt.
Sync Document Types
ToDo
Backend Event Workflows
Bestimmte Events aus dem Backend werden über NATS als Event gepublished. Details dazu sind auf der Seite zu NATS beschrieben. Hier werden die Events beschrieben, die Paperless betreffen:
mksp.docuseal.signature.completed
Dieses Event wird ausgelöst, wenn im Backend ein Signatur-Prozess abgeschlossen ist (d.h. alle Parteien haben unterschrieben und die Unterschrift wurde im Backend erfasst). Dies kann auf zwei Arten passieren:
- Bei rein digitalen Signaturen durch einen über Docuseal ausgelösten Webhook
- Bei handschriftlich unterschrieben Zetteln durch Einscannen und den oben beschrieben "Document Consumed" N8n Workflow

Der Workflow löst nur bei digitalen Dokumenten eine Aktion aus. Bei handschriftlich unterschriebenen Dokumenten ist das Dokument bereits eingescannt. Für digital unterschriebene Signaturen:
- wird der Status der Submission aus Docuseal ausgelesen
- wird das PDF mit den Unterschriften aller Parteien runtergeladen...
- und anschließend in Docuseal hochgeladen und dort verarbeitet.
mksp.backend.user.created
Dieser Workflow wird immer dann getriggert, wenn im Backend ein neuer User angelegt wird. Die Informationen aus der NATS Nachricht werden dann verwendet, um den Korrespondenten in Paperless anzulegen.

Die folgenden Aktionen werden ausgeführt:
- Parallel werden alle Gruppen und Benutzer aus Paperless ausgelesen
- Es wird auf die relevanten Gruppen und Benutzer gefiltert. Ziel ist es, die ID der entsprechenden Gruppen und Benutzer auszulesen. Wir sind interessiert an den Gruppen für die Mitgliederverwaltung und die IT Admins sowie dem statischen MV Owner.
- Zuletzt wird der Subflow "Create Paperless Correspondent" angelegt. Dieser bekommt als Info:
- firstname - aus NATS Trigger
- lastname - aus NATS Trigger
- isGuest - true wenn membership_number in NATS Trigger = null, false otherwise
- membership_number - aus NATS Trigger
- user_id - aus NATS Trigger
- owner_id - ID des MV Data Owner Benutzers
- permissions - siehe unten
- backend_url - URL des Makerspace Backends
Der Subflow erzeugt dann den Display-Namen des Korrespondenten und speichert die Paperless-ID über die Backend-API zurück ins Backend. Der Display-Name setzt sich wie folgt zusammen:
| Nutzer-Typ | Format | Beispiel |
|---|---|---|
| Mitglied | Vorname Nachname (#Mitgliedsnummer) | Daniel Herrmann (#250) |
| Gast | Vorname Nachname (Gast #Nutzer-ID) | Daniel Herrmann (Gast #1) |
Die Berechtigungen werden dabei wie folgt gesetzt:
D.h. Owner (und damit alle Rechte) hat der statische MV Owner Nutzer. Alle Mitglieder der Gruppe "Mitgliederverwaltung" können den Korrespondenten sehen (notwendig für Zuweisung und Filterung), IT-Admins können diese verändern.
mksp.backend.user.converted_to_guest
Dieser Workflow wird dann ausgelöst, wenn ein Mitglied den Verein verlässt und daher zum Gast wird.

Alle notwendigen Daten (inklusive der Paperless Korrespondent-ID) sind im NATS Event vorhanden. Es wird also lediglich ein neuer Display-Name erzeugt (Format: siehe Tabelle oben) und der Korrespondent wird aktualisiert.
mksp.backend.user.converted_to_member
Dieser Workflow wird dann ausgelöst, wenn ein neues Mitglied dem Verein beitritt.

Alle notwendigen Daten (inklusive der Paperless Korrespondent-ID) sind im NATS Event vorhanden. Es wird also lediglich ein neuer Display-Name erzeugt (Format: siehe Tabelle oben) und der Korrespondent wird aktualisiert.
Subflows
ToDo
Community Nodes
asd