Angebotserstellung mit n8n für O2C

Ich bin neu bei n8n und versuche, einen Workflow zur Quotenerstellung zu erstellen.

Mein Ziel ist:

  1. Kundendetails empfangen (Name, E-Mail, Service, Menge, Preis)

  2. Summen automatisch berechnen

  3. Eine Quotennummer generieren

  4. Eine PDF-Quotation erstellen

  5. Die Quotation per E-Mail an den Kunden versenden

Derzeit bin ich verwirrt, wie ich den Set-Node konfiguriere und Daten zwischen Nodes weitergebe. Ich bin mir nicht sicher, wo ich die Kundeninformationen hinzufügen soll und wie ich die Felder korrekt zuordne.

Könnte mir jemand bei Folgendem helfen:

  • Welche Nodes sollte ich für jeden Schritt verwenden?

  • Wie sollte ich den Workflow strukturieren?

  • Wie kann ich eine PDF aus den Quotendaten generieren?

Hallo @Sifrabasayar_12

Du kannst diesen Thread als Ausgangspunkt nutzen

Der generierte Workflow sollte die meisten deiner Anforderungen erfüllen

Beginnen Sie mit der Datenstruktur, nicht mit dem PDF-Node. Erstellen Sie ein Test-Item mit den exakten Quote-Feldern, die Sie benötigen: customer_name, customer_email, service, quantity, unit_price, total und quote_number.

Sobald dieses Item existiert, muss der nächste Node nur diese Feldnamen in den PDF/Email-Schritt abbilden. Wo werden die ersten Kundendetails in n8n eingegeben: Formular, Webhook, Tabelle oder manuelles Test-Item?

Willkommen @Sifrabasayar_12! Um das zu ergänzen, was @oimrqs_ops gesagt hat – für den PDF-Schritt ist der einfachste Ansatz in n8n, einen HTML Template Node zu verwenden, um das Angebotslayout mit deinen zugeordneten Feldern zu erstellen, und das HTML dann an einen HTTP Request Node zu leiten, der eine kostenlose PDF-API wie html2pdf.it oder eine selbst gehostete Gotenberg-Instanz aufruft. Der HTML-Template-Ansatz gibt dir vollständige Kontrolle über das Angebots-Design ohne zusätzliche Lizenzkosten. Für die Angebotsnummer generierst du sie in einem Code Node mit etwas wie 'Q-' + Date.now() oder einem sequenziellen Zähler, der in einer statischen Workflow-Variablen gespeichert ist. Sobald du die PDF als Binärdaten hast, hängst du sie direkt im Attachment-Feld des Gmail Node an, indem du {{ $binary.data }} verwendest.

Hey @Sifrabasayar_12, um alles mit einer klaren Struktur zusammenzubringen:
Trigger → Form Trigger oder Webhook (erfasst Kundenname, E-Mail, Service, Menge, Preis)
Gesamtsummen berechnen → Set-Node: Feld hinzufügen total = {{ $json.quantity * $json.unit_price }}
Angebotsnummer generieren → Code-Node: return [{ json: { …$input.first().json, quote_number: ‘Q-’ + Date.now() } }]
PDF erstellen → HTML-Node zum Gestalten des Angebotslayouts mit {{ $json.customer_name }} usw., dann HTTP-Request-Node → html2pdf.it (kostenlos, keine Anmeldung erforderlich) zum Konvertieren in ein PDF-Binärdatenformat
E-Mail versenden → Gmail-Node mit To: {{ $json.customer_email }}, PDF-Binärdaten des vorherigen Nodes anhängen
Das Wichtigste beim Weitergeben von Daten zwischen Nodes: Jeder Node empfängt $json vom vorherigen Node. Nutze den Set-Node, um Felder hinzuzufügen oder umzubenennen, und sie sind in jedem nachgelagerten Node verfügbar. Sobald dein Test-Element in Schritt 1 alle Felder korrekt gesetzt hat, musst du nur noch dieselben Feldnamen durch die restlichen Nodes zuordnen.

Willkommen @Sifrabasayar_12!

Hier ist eine saubere Node-Struktur dafür:

  1. n8n Form-Trigger zum Erfassen von Kundenname, E-Mail, Service, Menge, Preis
  2. Code-Node zur Berechnung der Summen und Generierung einer Angebotsnummer: "Q-" + Date.now()
  3. Für das PDF – der einfachste anfängerfreundliche Weg ist Google Docs: Erstelle ein Template-Dokument mit Platzhaltern wie {{customer_name}}, {{total}}, nutze den Google Docs-Node (Replace Text-Operation) zum Ausfüllen, dann exportiere zu PDF über den Google Drive-Node (Download-Operation, stelle das Ausgabeformat auf PDF ein)
  4. Gmail-Node zum Versenden der E-Mail mit dem exportierten PDF als Anhang

Beginne damit, zuerst nur die Schritte 1 und 2 zu testen, um sicherzustellen, dass deine Felder korrekt strukturiert sind, bevor du den PDF-Schritt hinzufügst.