Zum Hauptinhalt springen

n8n

n8n-nodes-formfeed ist ein Community-Node, den n8n verifiziert hat: zwei Nodes (Formfeed und Formfeed Trigger) und ein Credential. Auf Formfeed-Seite braucht es nur einen API-Schlüssel.

Der Node ist englischsprachig; die englischen Namen von Operationen und Feldern stehen hier so, wie n8n sie anzeigt.

Installation​

Aus dem Nodes-Panel (n8n Cloud und selbst gehostetes n8n): Öffnen Sie das Nodes-Panel, suchen Sie nach Formfeed (er trägt das Verifiziert-Abzeichen von n8n), öffnen Sie ihn und klicken Sie auf Install node. Der Owner oder ein Admin der Instanz installiert ihn einmal, für alle Mitglieder. Findet die Suche ihn nicht, sind verifizierte Community-Nodes abgeschaltet: in n8n Cloud in den Instanz-Einstellungen der Cloud-Konsole, in einem selbst gehosteten n8n durch N8N_VERIFIED_PACKAGES_ENABLED=false.

Über den Paketnamen (selbst gehostetes n8n): Einstellungen → Community-Nodes → Installieren, Paketname n8n-nodes-formfeed. Alternativ führen Sie npm install n8n-nodes-formfeed im n8n-Benutzerordner (~/.n8n/nodes) aus und starten n8n neu.

Ohne den Formfeed-Node ruft der Node HTTP Request die API auf (siehe Rendern), und der AI-Agent-Node von n8n kann den gehosteten MCP-Endpunkt nutzen.

Credential​

Erstellen Sie in der App unter API-Schlüssel einen API-Schlüssel und tragen Sie ihn im Credential Formfeed API ein. Nutzen Sie beim Bauen einen ff_test_-Schlüssel: Diese Renderings sind kostenlos (im Free-Plan mit Wasserzeichen). Der Test des Credentials liest GET /account.

FeldBedeutung
API Keyff_live_… oder ff_test_…
RegionEurope (Frankfurt), die Vorgabe, oder United States. Lassen Sie Europe stehen: Jeder Workspace liegt heute in der EU
Custom Base URLLeer lassen. Eine Adresse, die Ihnen der Formfeed-Support nennt, etwa ein Staging-Gateway, mit /v1; sie geht der Region vor

Die Vorgabe-Scopes eines neuen Schlüssels (render:create, render:read, template:read, account:read) decken den Test des Credentials und jede Operation für Renderings, Vorlagen und Jobs ab. Die übrigen brauchen einen weiteren Scope, den ein neuer Schlüssel nur hat, wenn Sie ihn ankreuzen:

OperationScope
Render → Delete Outputsfile:delete
File → Uploadfile:write
File → Get Manyfile:read (in file:write enthalten)
File → Deletefile:delete
Formfeed Triggerwebhook:manage

Node „Formfeed“​

RessourceOperationen
RenderErstellen (Create, aus Vorlage, rohem HTML oder URL), E-Rechnung erstellen (Create E-Invoice), Abrufen (Get), Mehrere abrufen (Get Many), Ausgaben löschen (Delete Outputs)
TemplateMehrere abrufen (Get Many), Abrufen (Get), Schema abrufen (Get Schema)
JobAbrufen (Get: Batch-Fortschritt und Zip)
FileUpload (aus einem Binärfeld in die Dateibibliothek), Get Many (optional ein Ordner), Delete
PDFConvert Office Document (eine Word-, Excel-, PowerPoint-, OpenDocument- oder RTF-Datei aus einem Binärfeld oder das Rendering einer Word- oder PowerPoint-Vorlage als PDF; ab dem Starter-Tarif)

Die Operationen Get Many liefern bis zu Limit Ergebnisse (höchstens 100) oder mit Return All alle.

Render → Create​

Source wählt, was gerendert wird: Template, HTML (mit Engine: Jinja2, die Vorgabe, Liquid oder Handlebars) oder URL (eine öffentliche Seite).

Bei einer Vorlage ordnet Fields die Daten zu: Fügen Sie ein Feld hinzu, wählen Sie seinen Namen aus der Liste und setzen Sie den Wert. Die Liste kommt aus dem Datenschema der Vorlage oder, wenn sie keines hat, aus ihren Beispieldaten; verschachtelte Objekte erscheinen als Namen mit Punkt (invoice.number, customer.name), * markiert ein Pflichtfeld, der Typ folgt in Klammern. Eine Liste oder ein freies Objekt erscheint als ein Feld, dessen Wert aus einer Expression kommt, oder gehört in Data (JSON). Data (JSON) wird Wert für Wert über die zugeordneten Felder gelegt: Ein Objekt ergänzt die zugeordneten Felder an derselben Stelle, ein Wert ersetzt den zugeordneten, und eine Liste ersetzt die ganze Liste. Die Vorlagenliste zeigt die Vorlagen des Workspace mit Name und Art (bis zu 100); rendern lassen sich nur veröffentlichte.

Output ist voreingestellt As the Template: PDF bei einer PDF-Vorlage, ihr Bildformat bei einer Bildvorlage, die Vorgabe einer Word- oder PowerPoint-Vorlage und PDF bei HTML und URLs. Word-Vorlagen rendern DOCX oder PDF, PowerPoint-Vorlagen PPTX oder PDF.

Mit Download File (voreingestellt an) hängt der Node das Dokument als Binärdaten an, bereit für Gmail, Google Drive, S3 oder einen HTTP-Request. Sein Name folgt der Ausgabe, aus dem Dateinamen offer wird also offer.docx oder offer.pdf; ohne Dateinamen heißt es <Rendering-ID>.<Ausgabe>.

Die Options:

OptionBedeutung
FilenameName des Dokuments
LocaleErsetzt die Locale der Vorlage, etwa de-DE
ModeWait for the Document (die Vorgabe) oder Queue and Return Immediately, siehe unten
Settings (JSON)Papier, Ränder, Kopf- und Fußzeile, wie unter Einstellungen pro Anfrage überschreiben
VersionDer Release Channel, der gerendert wird (Vorgabe published), oder eine Versionsnummer als Expression
Webhook URLEine Adresse, die das Ereignis render.completed oder render.failed genau dieses Renderings erhält, siehe Webhook-URLs pro Rendering

Mode: Wait for the Document fragt das Dokument synchron an. Ein Rendering, das länger als eine Minute dauert, läuft im Hintergrund weiter, und der Node liefert es dann mit status: queued und ohne Datei. Für lange Dokumente setzen Sie Queue and Return Immediately: Der Node liefert das eingereihte Rendering sofort, und entweder der Trigger-Node oder ein späteres Get meldet das Ergebnis.

E-Rechnungen​

Render → Create E-Invoice erzeugt eine ZUGFeRD- / Factur-X-E-Rechnung: ein PDF/A-3, das die Rechnung als XML trägt und vom Validator geprüft ist, bevor der Node es erhält. Statt der Felder einer Vorlage fragt der Node die Rechnung selbst ab: Nummer, Rechnungsdatum und Währung, Verkäufer und Käufer, die Positionen, die Aufschlüsselung der Umsatzsteuer, die fünf Summen und die Zahlung. Er sendet sie als _invoice-Block, und die Vorlage druckt denselben Block, sodass jeder Wert nur einmal zugeordnet wird. Das Beispiel „E-Rechnung“ der Galerie in der App ist eine solche Vorlage.

Berechnet wird nichts: Summen und Aufschlüsselung sind die, die Ihr System angibt, und eine Rechnung, deren Summen nicht auf den Cent aufgehen, wird mit jedem Feld und der Regel abgelehnt, die es verletzt. Was die Felder nicht anbieten (die Rechnung, auf die sich eine Gutschrift bezieht, Nachlässe und Zuschläge, die Lieferung, ein Lastschriftmandat, die französischen Pflichtangaben), gehört mit den Namen der Feldreferenz in Invoice (JSON) und wird über die Felder gelegt. Die Optionen wählen das Profil (EN 16931 oder Basic), den Namen der Spezifikation (Factur-X oder ZUGFeRD; die Datei ist dieselbe), ob das XML zusätzlich als eigene Datei gespeichert wird und ob ein Wert, den das PDF nicht zeigt, das Rendering scheitern lässt, statt gemeldet zu werden.

Die Ausgabe des Nodes trägt den Bericht des Validators als einvoice. Live-E-Rechnungen setzen den Starter-Plan oder höher voraus; Test-Schlüssel erzeugen eine begrenzte Zahl am Tag, jede mit der Testmarkierung (im Free-Plan bis zu 20, siehe Tarife und Einheiten).

Wenn die API eine Anfrage ablehnt​

Ab Version 0.3.20 hält eine abgelehnte Anfrage den Node mit dem Satz der API an, der das Feld und die verletzte Regel nennt (_invoice.lines[0].tax.rate is 0: … (BR-S-05)); vorher zeigte der Node den Satz von n8n zum Statuscode („Your request is invalid or could not be processed by the service“). Mit On Error → Continue (using error output) in den Einstellungen des Nodes verlässt das Item stattdessen den Fehlerausgang, mit den Feldern, mit denen es kam, und zwei weiteren: error, diesem Satz, und details, dem ganzen Problem, mit dem die API geantwortet hat. Sein code benennt das Problem, und bei einer abgelehnten E-Rechnung listet errors jeden Befund mit path und rule, sodass ein Workflow sie dorthin zurückschreiben kann, woher die Daten kamen.

Als Tool für einen KI-Agenten​

Ab Version 0.3.11 lässt sich der Formfeed-Node mit dem Eingang Tools des AI-Agent-Nodes von n8n verbinden. Der Agent wählt dann die Operation und füllt ihre Felder aus: Er listet die Vorlagen, liest das Schema einer Vorlage und rendert sie. Ein aktuelles n8n bietet den Node ohne weitere Einstellung als Tool an (gesehen in n8n 2.42); ältere selbst gehostete Versionen taten das nur, wenn die Instanz N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true setzte. Geben Sie dem Node beim Ausprobieren ein Credential mit einem ff_test_-Schlüssel. Agenten außerhalb von n8n nutzen den MCP-Server.

Node „Formfeed Trigger“​

Registriert beim Aktivieren des Workflows einen Webhook-Endpunkt in Ihrem Workspace und entfernt ihn beim Deaktivieren wieder; solange es ihn gibt, steht er in der App unter Webhooks als n8n. Events (Pflicht, voreingestellt render.completed): render.completed, render.failed, job.completed, job.failed, quota.warning, quota.exceeded. Er löst für Renderings von Live- wie von Test-Schlüsseln aus. Der Ereignis-Body entspricht dem unter Webhooks.

Der Node prüft die Signatur der Zustellung nicht: Die Adresse, die n8n für den Webhook erzeugt, ist selbst geheim, und ein Rendering aus einem Ereignis lässt sich mit Render → Get zurücklesen, wenn ein Workflow sich darauf verlassen muss.

Beispiel​

  1. Schedule Trigger jeden Morgen.
  2. Postgres-Node: die Rechnungen von gestern.
  3. Formfeed: Render → Create, Vorlage invoice-de, invoice.number und customer.name aus der Zeile zuordnen, Positionen ins JSON-Feld, Download File an.
  4. Gmail: die Binärdatei als Anhang versenden.

Für hunderte Dokumente rufen Sie POST /renders/batch mit dem HTTP-Request-Node auf und lassen den Formfeed Trigger auf job.completed warten, statt ein Rendering pro Zeile zu erzeugen. Siehe Async und Batch.