Automatisation de factures QuickBooks vers PDF personnalisé et e-mail

Avancé

Ceci est unInvoice Processingworkflow d'automatisation du domainecontenant 19 nœuds.Utilise principalement des nœuds comme Code, Html, Merge, Webhook, EmailSend. Transformer des factures QuickBooks personnalisées en PDF et envoyer par e-mail avec Gotenberg

Prérequis
  • Point de terminaison HTTP Webhook (généré automatiquement par n8n)
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "2hX0dXVASiaWn1Vg",
  "meta": {
    "instanceId": "e727f992f69a44655d3d4d5a1d4a30ca3ec1573139240bc4d84b17b8f66642c8",
    "templateCredsSetupCompleted": true
  },
  "name": "Automated QuickBooks Invoice to Custom PDF & Email",
  "tags": [],
  "nodes": [
    {
      "id": "05599a83-f5c2-46db-8864-53c9e1b45f0d",
      "name": "Écouter les nouvelles factures QuickBooks",
      "type": "n8n-nodes-base.webhook",
      "position": [
        512,
        1248
      ],
      "webhookId": "f94d4908-7ef3-42b7-aa27-d6028475d32c",
      "parameters": {
        "path": "qbo-invoice-webhook",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 1
    },
    {
      "id": "1dc144aa-6849-4e95-a4d1-1f9c80b16b63",
      "name": "Récupérer les données de facture depuis QuickBooks",
      "type": "n8n-nodes-base.quickbooks",
      "position": [
        1248,
        976
      ],
      "parameters": {
        "resource": "invoice",
        "invoiceId": "={{ $json.body.eventNotifications[0].dataChangeEvent.entities[0].id }}"
      },
      "credentials": {
        "quickBooksOAuth2Api": {
          "id": "r3A6wRAzyp859vQL",
          "name": "QuickBooks Online account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b56096d7-37cf-41b7-ab77-ebb35c176e01",
      "name": "Récupérer l'image du logo de l'entreprise",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        880,
        1248
      ],
      "parameters": {
        "url": "https://www.logomyway.com/logos_new/32474/CLEARWATER-HUDSON_497267718070.png",
        "options": {},
        "responseFormat": "file",
        "dataPropertyName": "logodata"
      },
      "typeVersion": 1
    },
    {
      "id": "97f6e4f4-82c8-4bbd-bad2-a02f69ca6150",
      "name": "Récupérer l'image de signature de l'entreprise",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        880,
        1600
      ],
      "parameters": {
        "url": "https://upload.wikimedia.org/wikipedia/commons/2/27/Narf_signature.png",
        "options": {},
        "responseFormat": "file",
        "dataPropertyName": "signaturedata"
      },
      "typeVersion": 1
    },
    {
      "id": "7b5653c7-4483-463c-a7e2-fab408ea1f91",
      "name": "Convertir le logo en Base64",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1248,
        1248
      ],
      "parameters": {
        "options": {},
        "operation": "binaryToPropery",
        "destinationKey": "logodata",
        "binaryPropertyName": "logodata"
      },
      "typeVersion": 1
    },
    {
      "id": "4fa1d59c-2ace-4251-a0db-49b62d18f62a",
      "name": "Convertir la signature en Base64",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1248,
        1424
      ],
      "parameters": {
        "options": {},
        "operation": "binaryToPropery",
        "destinationKey": "signaturedata",
        "binaryPropertyName": "signaturedata"
      },
      "typeVersion": 1
    },
    {
      "id": "38d30ac3-298c-4731-a7b3-d45ac80abb25",
      "name": "Combiner facture, logo et signature",
      "type": "n8n-nodes-base.merge",
      "position": [
        1472,
        1232
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "8539ed24-374b-4ecb-b152-ef6d76365f0b",
      "name": "Préparer toutes les données pour le modèle",
      "type": "n8n-nodes-base.code",
      "position": [
        1680,
        1248
      ],
      "parameters": {
        "jsCode": "// This is the final, production-ready code. It fixes the \"PAID\" stamp logic.\n\nconst items = $items(\"Combine Invoice, Logo & Signature\"); // Ensure this is the correct name of your Merge node\n\n// Step 1: Correctly access the data\nconst invoiceData = items[0].json;\nconst logoJson = items[1].json;\nconst signatureJson = items[2].json;\n\n// Step 2: Safety check\nif (!logoJson || !logoJson.logodata || !signatureJson || !signatureJson.signaturedata) {\n  throw new Error(\"Could not find 'logodata' or 'signaturedata' properties. Check the nodes providing the images.\");\n}\n\n// Step 3: Create the full, correct Data URI for the images\nconst logoSrc = `data:image/png;base64,${logoJson.logodata}`;\nconst signatureSrc = `data:image/png;base64,${signatureJson.signaturedata}`;\n\n// Step 4: Format dates professionally\nfunction formatDate(dateString) {\n  if (!dateString) return 'N/A';\n  const options = { year: 'numeric', month: 'long', day: 'numeric' };\n  return new Date(dateString + 'T00:00:00-00:00').toLocaleDateString('en-US', options);\n}\n\n// Step 5: Build the HTML for the line items\nlet lineItemsHtml = '';\nfor (const item of invoiceData.Line) {\n  if (item.DetailType === 'SalesItemLineDetail') {\n    // Added a subtle grey color for the description for a more refined look\n    const description = item.Description ? `<br><span style=\"color: #718096; font-size: 0.85rem;\">${item.Description}</span>` : '';\n    lineItemsHtml += `\n      <tr>\n        <td><strong>${item.SalesItemLineDetail.ItemRef.name || 'N/A'}</strong>${description}</td>\n        <td class=\"text-center\">${item.SalesItemLineDetail.Qty || 1}</td>\n        <td class=\"text-right\">$${(item.SalesItemLineDetail.UnitPrice || 0).toFixed(2)}</td>\n        <td class=\"text-right\">$${(item.Amount || 0).toFixed(2)}</td>\n      </tr>`;\n  }\n}\n\n// Step 6: THE FIX - Conditionally create the PAID stamp HTML\nlet paidStampHtml = '';\n// Only if the balance is zero or less, create the entire div. Otherwise, it's an empty string.\nif (invoiceData.Balance <= 0) {\n  paidStampHtml = '<div class=\"paid-stamp\">PAID</div>';\n}\n\n// Step 7: Return the final JSON object\nreturn [{\n  json: {\n    customerName: invoiceData.CustomerRef.name,\n    customerEmail: invoiceData.BillEmail.Address,\n    invoiceNumber: invoiceData.DocNumber,\n    invoiceDate: formatDate(invoiceData.TxnDate),\n    dueDate: formatDate(invoiceData.DueDate),\n    lineItems: lineItemsHtml,\n    subtotal: (invoiceData.TotalAmt - invoiceData.TxnTaxDetail.TotalTax).toFixed(2),\n    tax: (invoiceData.TxnTaxDetail.TotalTax).toFixed(2),\n    balanceDue: (invoiceData.Balance).toFixed(2),\n    notes: invoiceData.CustomerMemo.value,\n    paymentTerms: invoiceData.SalesTermRef.name,\n    logoSrc: logoSrc,\n    signatureSrc: signatureSrc,\n    paidStampHtml: paidStampHtml // Pass the conditional HTML to the template\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "2fdd3ef9-ef1f-42a5-8a29-64e439645e83",
      "name": "Générer la facture HTML à partir des données",
      "type": "n8n-nodes-base.html",
      "position": [
        1888,
        1248
      ],
      "parameters": {
        "html": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Invoice #{{$json.invoiceNumber}}</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n    <style>\n        @page {\n            size: A4;\n            margin: 1.5cm;\n            @bottom-center {\n                content: \"Page \" counter(page) \" of \" counter(pages);\n                font-family: 'Inter', sans-serif;\n                font-size: 9pt;\n                color: #999;\n                padding-top: 10px;\n                border-top: 1px solid #e0e0e0;\n                width: 100%;\n            }\n        }\n        body {\n            font-family: 'Inter', sans-serif;\n            color: #212529;\n            font-size: 9pt;\n            line-height: 1.5;\n        }\n        .invoice-wrapper { width: 100%; }\n        thead { display: table-header-group; }\n        tbody { display: table-row-group; }\n        tr { page-break-inside: avoid; }\n        .header {\n            display: flex;\n            justify-content: space-between;\n            align-items: flex-start;\n            padding-bottom: 20px;\n            border-bottom: 3px solid #0d2a4b;\n            margin-bottom: 40px;\n        }\n        .company-logo { max-width: 180px; max-height: 70px; }\n        .invoice-title { text-align: right; }\n        .invoice-title h1 {\n            margin: 0;\n            font-size: 26pt;\n            color: #0d2a4b;\n            font-weight: 700;\n        }\n        .invoice-title p {\n            margin: 2px 0 0 0;\n            color: #5a6a7b;\n            font-size: 10pt;\n        }\n        .meta-section {\n            display: grid;\n            grid-template-columns: 1fr 1fr 1fr;\n            gap: 30px;\n            margin-bottom: 40px;\n            font-size: 9pt;\n        }\n        .meta-section strong {\n            display: block;\n            margin-bottom: 6px;\n            color: #8898aa;\n            font-weight: 500;\n            text-transform: uppercase;\n            letter-spacing: 0.5px;\n            font-size: 8pt;\n        }\n        .meta-section span { color: #212529; }\n        .line-items-table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-bottom: 20px;\n        }\n        .line-items-table th {\n            padding: 8px 5px;\n            background-color: #f8f9fa;\n            border-bottom: 2px solid #dee2e6;\n            /* text-align: left; <-- THE BUGGY LINE IS NOW REMOVED */\n            font-size: 8pt;\n            text-transform: uppercase;\n            letter-spacing: 0.5px;\n            font-weight: 700;\n            color: #495057;\n        }\n        .line-items-table td {\n            padding: 8px 5px;\n            border-bottom: 1px solid #edf2f7;\n            vertical-align: top;\n        }\n        .item-description { font-size: 8.5pt; color: #6c757d; }\n        .text-right { text-align: right; }\n        .text-left { text-align: left; }\n        .text-center { text-align: center; }\n        .summary-section {\n            page-break-inside: avoid !important;\n        }\n        .totals-section {\n            display: flex;\n            justify-content: flex-end;\n            margin-top: 20px;\n        }\n        .totals-table {\n            width: 100%;\n            max-width: 400px;\n        }\n        .totals-table td {\n            padding: 10px 12px;\n        }\n        .totals-table .label {\n            color: #495057;\n            text-align: right;\n        }\n        .totals-table .amount {\n            font-weight: 700;\n            text-align: right;\n            font-size: 10pt;\n        }\n        .grand-total {\n            border-top: 3px solid #0d2a4b;\n            background-color: #f8f9fa;\n        }\n        .grand-total .label, .grand-total .amount {\n            color: #0d2a4b;\n            font-size: 14pt;\n            font-weight: 700;\n        }\n        .footer {\n            margin-top: 40px;\n            padding-top: 20px;\n            border-top: 1px solid #e0e0e0;\n            font-size: 9pt;\n            color: #6c757d;\n        }\n        .footer strong { color: #343a40; }\n        .signature { max-height: 40px; margin-top: 15px; }\n    </style>\n</head>\n<body>\n    <div class=\"invoice-wrapper\">\n        <header class=\"header\">\n            <div>\n                <img src=\"{{$json.logoSrc}}\" alt=\"Company Logo\" class=\"company-logo\">\n            </div>\n            <div class=\"invoice-title\">\n                <h1>INVOICE</h1>\n                <p>Invoice # {{$json.invoiceNumber}}</p>\n            </div>\n        </header>\n        \n        <section class=\"meta-section\">\n            <div>\n                <strong>Bill To</strong>\n                <span>{{$json.customerName}}</span><br>\n                <span>{{$json.customerEmail}}</span>\n            </div>\n            <div>\n                <strong>Payable To</strong>\n                <span>YOUR COMPANY NAME</span><br>\n                <span>123 Your Street, Your City, State, Postal Code</span>\n            </div>\n            <div>\n                <strong>Dates</strong>\n                <span>Date of Issue: {{$json.invoiceDate}}</span><br>\n                <span>Due Date: {{$json.dueDate}}</span>\n            </div>\n        </section>\n\n        <table class=\"line-items-table\">\n            <thead>\n                <tr>\n                    <th class=\"text-left\" style=\"width: 50%;\">Item & Description</th>\n                    <th class=\"text-center\" style=\"width: 15%;\">Quantity</th>\n                    <th class=\"text-right\" style=\"width: 15%;\">Rate</th>\n                    <th class=\"text-right\" style=\"width: 20%;\">Amount</th>\n                </tr>\n            </thead>\n            <tbody>\n                {{$json.lineItems}}\n            </tbody>\n        </table>\n        \n        <div class=\"summary-section\">\n            <section class=\"totals-section\">\n                <table class=\"totals-table\">\n                    <tr>\n                        <td class=\"label\">Subtotal</td>\n                        <td class=\"amount\">${{$json.subtotal}}</td>\n                    </tr>\n                    <tr>\n                        <td class=\"label\">Tax</td>\n                        <td class=\"amount\">${{$json.tax}}</td>\n                    </tr>\n                    <tr class=\"grand-total\">\n                        <td class=\"label\">Balance Due</td>\n                        <td class=\"amount\">${{$json.balanceDue}}</td>\n                    </tr>\n                </table>\n            </section>\n        \n            <footer class=\"footer\">\n                <strong>Payment Terms: {{$json.paymentTerms}}</strong>\n                <p>{{$json.notes}}</p>\n                <img src=\"{{$json.signatureSrc}}\" alt=\"Signature\" class=\"signature\">\n                <p>Your Name, Your Title</p>\n            </footer>\n        </div>\n    </div>\n</body>\n</html>"
      },
      "typeVersion": 1.2
    },
    {
      "id": "905e1af5-3c1d-4a57-9df6-f7d0683f486a",
      "name": "Convertir HTML en fichier binaire",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        2096,
        1248
      ],
      "parameters": {
        "options": {
          "encoding": "utf8",
          "fileName": "index.html"
        },
        "operation": "toText",
        "sourceProperty": "html"
      },
      "typeVersion": 1.1
    },
    {
      "id": "14bf3ebc-3a0f-468c-b650-6b282fe7f572",
      "name": "Générer PDF via Gotenberg",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2368,
        1248
      ],
      "parameters": {
        "url": "http://yourGotenBergInstanceURL/forms/chromium/convert/html",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "files",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "=data"
            },
            {
              "name": "scale",
              "value": "1"
            },
            {
              "name": "metadata",
              "value": "={\"Author\":\"IA2S\",\"Copyright\":\"IA2S\",\"CreateDate\":\"{{ $now.format('yyyy-MM-dd') }}\",\"Creator\":\"IA2S\",\"Keywords\":[],\"ModDate\":\"{{ $now.format('yyyy-MM-dd') }}\",\"PDFVersion\":1.7,\"Producer\":\"IA2S\",\"Subject\":\"PDF\",\"Title\":\"IA2S PDF\"}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Gotenberg-Output-Filename",
              "value": "={{ $('Prepare All Data for Template').item.json.invoiceNumber }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "fc4105a5-f50c-4ac8-8010-a0ba82ffdf11",
      "name": "Envoyer la facture PDF au client par e-mail",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2704,
        1248
      ],
      "webhookId": "c88f607c-5e1e-4f9e-aa2c-2f69df6e29cc",
      "parameters": {
        "html": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <style>\n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n            margin: 0;\n            padding: 0;\n            background-color: #f4f4f7;\n        }\n        .container {\n            max-width: 600px;\n            margin: 20px auto;\n            background-color: #ffffff;\n            border: 1px solid #e0e0e0;\n            border-radius: 8px;\n            padding: 40px;\n            line-height: 1.6;\n            color: #333333;\n        }\n        .header {\n            text-align: center;\n            margin-bottom: 30px;\n        }\n        .header h1 {\n            color: #0d2a4b;\n            margin: 0;\n        }\n        .content p {\n            font-size: 16px;\n        }\n        .invoice-details {\n            background-color: #f8f9fa;\n            padding: 20px;\n            border-radius: 5px;\n            margin: 30px 0;\n            font-size: 15px;\n        }\n        .invoice-details strong {\n            color: #0d2a4b;\n        }\n        .footer {\n            text-align: center;\n            margin-top: 40px;\n            font-size: 12px;\n            color: #888888;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container\">\n        <div class=\"header\">\n            <!-- You can optionally place your logo URL here -->\n            <!-- <img src=\"URL_TO_YOUR_LOGO\" alt=\"Your Company Name\" style=\"max-width: 180px; margin-bottom: 20px;\"> -->\n            <h1>New Invoice from YOUR COMPANY NAME</h1>\n        </div>\n\n        <div class=\"content\">\n            <p>Hi {{$node[\"Prepare All Data for Template\"].json.customerName}},</p>\n            \n            <p>We hope you are doing well.</p>\n            \n            <p>A new invoice has been generated for you. You can find a detailed PDF version of the invoice attached to this email.</p>\n            \n            <div class=\"invoice-details\">\n                <strong>Summary:</strong><br>\n                Invoice Number: {{$node[\"Prepare All Data for Template\"].json.invoiceNumber}}<br>\n                Balance Due: ${{$node[\"Prepare All Data for Template\"].json.balanceDue}}\n            </div>\n            \n            <p>If you have any questions or concerns, please don't hesitate to contact us.</p>\n            \n            <p>Thank you for your business!</p>\n            \n            <p>\n                Best regards,<br>\n                The Team at YOUR COMPANY NAME\n            </p>\n        </div>\n\n        <div class=\"footer\">\n            <p>YOUR COMPANY NAME | Your Address | Your Phone Number</p>\n        </div>\n    </div>\n</body>\n</html>",
        "options": {
          "attachments": "=data"
        },
        "subject": "=Invoice {{$node[\"Prepare All Data for Template\"].json.invoiceNumber}} from YOUR COMPANY NAME",
        "toEmail": "company.ebtech@gmail.com",
        "fromEmail": "={{$node[\"Prepare All Data for Template\"].json.customerEmail}}"
      },
      "credentials": {
        "smtp": {
          "id": "ZSjtbi8UmObTzmbO",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "af2a01c1-65a8-49a5-8b34-ce853125a5bf",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1168,
        416
      ],
      "parameters": {
        "color": 5,
        "width": 1264,
        "height": 1824,
        "content": "# Automated QuickBooks Invoice to Custom PDF & Email\n\nTired of the standard, boring invoices from QuickBooks Online? This workflow completely automates the process of creating beautiful, custom-branded PDF invoices and emailing them directly to your clients, saving you time and elevating your brand's professionalism.\n\nThe moment you create an invoice in QuickBooks, this workflow triggers, fetches all the necessary data, and generates a lavish, multi-page-aware PDF invoice complete with your company logo and signature.\n\n***\n\n## Key Features\n\n*   **Fully Automated:** Runs instantly when a new invoice is created in QuickBooks.\n*   **Custom Branding:** Automatically fetches your company logo and signature from a URL to place on the invoice.\n*   **Modern & Professional Design:** Uses a premium, multi-column HTML template that is clean, easy to read, and far superior to the default QBO templates.\n*   **Multi-Page Ready:** If an invoice has many line items, the template will intelligently create multiple pages and add a \"Page X of Y\" footer automatically.\n*   **Smart Layout:** The totals and summary block are designed to never break across pages, ensuring a professional look no matter the length.\n*   **Automatic Emailing:** The final PDF is attached to a beautifully formatted email and sent directly to the customer's email address on file.\n\n## Prerequisites\n\nBefore you start, you will need a few things:\n\n*   A running **n8n instance**.\n*   A **QuickBooks Online** account with API access.\n*   A running **Gotenberg** instance. This is a powerful, open-source tool for converting HTML to PDF. This workflow is designed to connect to its API. You can learn more about it [here](https://gotenberg.dev/).\n*   Publicly accessible URLs for your **company logo** and **signature image** (e.g., hosted on your website or a service like Imgur).\n\n## Setup Guide\n\nFollow these steps carefully to configure the workflow for your own use. Nodes that need your attention are marked with a `[!!]` prefix.\n\n### Step 1: Configure the QuickBooks Webhook\n\nThe workflow starts with a webhook. You need to tell QuickBooks to send information to this webhook.\n\n1.  Open the `[!!] Listen for New QuickBooks Invoice` node.\n2.  You will see a **Webhook URL**. Copy the **Production URL**.\n3.  Go to your QuickBooks Developer dashboard, select your app, and navigate to the **Webhooks** section.\n4.  Paste the n8n URL into the Endpoint URL field and select the **Invoice** event to subscribe to.\n\n### Step 2: Connect Your QuickBooks Account\n\n1.  Open the `[!!] Get Invoice Data from QuickBooks` node.\n2.  In the \"Credentials\" field, select your existing QuickBooks Online credentials or create a new set.\n\n### Step 3: Add Your Branding\n\n1.  Open the `[!!] Fetch Company Logo Image` node. In the **URL** field, replace the placeholder with the public URL of your company's logo.\n2.  Open the `[!!] Fetch Company Signature Image` node. In the **URL** field, replace the placeholder with the public URL of your signature image.\n\n### Step 4: Update the PDF Generation Service\n\n1.  Open the `[!!] Generate PDF via Gotenberg` node.\n2.  In the **URL** field, replace the placeholder `http://yourGotenBergInstanceURL/...` with the real URL of your running Gotenberg instance.\n\n### Step 5: Configure Your Email\n\n1.  Open the `[!!] Email PDF Invoice to Customer` node.\n2.  In the \"Credentials\" field, select your SMTP or email service credentials.\n3.  Customize the **From Email** and **Subject** fields. You can also edit the beautiful HTML email body to match your company's tone of voice.\n\n### Step 6: Activate Your Workflow\n\nYou're all set! Save the workflow and activate it using the toggle at the top-right of the screen. Now, when you create a new invoice in QuickBooks, this automation will handle the rest.\n\n***\n\n### A Note from the Creator\n\nThank you for using this workflow! I believe that professional and automated invoicing is a cornerstone of a great business. This tool was designed to save you time and help you put your best foot forward with every client interaction.\n\nIf you have any questions or need assistance, feel free to reach out.\n\n*   **Website:** [https://www.elegantbiztech.com/](https://www.elegantbiztech.com/)\n*   **Email:** [sales@elegantbiztech.com](mailto:sales@elegantbiztech.com)"
      },
      "typeVersion": 1
    },
    {
      "id": "6edf064f-44ed-449e-a597-bd1b0d71bbe2",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        1088
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 336,
        "content": "**1. Configure Webhook**\n\nCopy this node's Production URL and paste it into your QuickBooks Online app's webhook settings. Subscribe to the \"Invoice\" event."
      },
      "typeVersion": 1
    },
    {
      "id": "09597ad8-12d2-4bc6-aaf4-e4478499e5b3",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1168,
        848
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 320,
        "content": "**2. Connect QuickBooks**\n\nSelect your QuickBooks Online account credentials from the dropdown list."
      },
      "typeVersion": 1
    },
    {
      "id": "6fb09bca-2e1b-434f-8a13-054e96f45e18",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        1088
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 336,
        "content": "**3. Add Your Logo URL**\n\nReplace the placeholder URL below with a direct, public link to your company's logo file."
      },
      "typeVersion": 1
    },
    {
      "id": "269b246b-58cc-44f3-8bf2-44c30b8a5544",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        1472
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 320,
        "content": "**4. Add Your Signature URL**\n\nReplace the placeholder URL below with a direct, public link to your signature image file."
      },
      "typeVersion": 1
    },
    {
      "id": "b6cb4da6-78f6-4090-99bf-c443ee044ce3",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2288,
        1120
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 320,
        "content": "**5. Set Your Gotenberg URL**\n\nReplace the placeholder URL below with the address of your running Gotenberg instance."
      },
      "typeVersion": 1
    },
    {
      "id": "7b8bbac0-14a7-45ac-854c-84e43a5dd052",
      "name": "Note adhésive6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2624,
        1072
      ],
      "parameters": {
        "color": 5,
        "width": 256,
        "height": 368,
        "content": "**6. Configure Your Email**\n\n- Select your email credentials.\n- Customize the 'From' and 'Subject' fields.\n- The PDF is automatically attached."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8fcaea2c-adec-42a6-8dc4-1eb0ab254cee",
  "connections": {
    "7b5653c7-4483-463c-a7e2-fab408ea1f91": {
      "main": [
        [
          {
            "node": "38d30ac3-298c-4731-a7b3-d45ac80abb25",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "b56096d7-37cf-41b7-ab77-ebb35c176e01": {
      "main": [
        [
          {
            "node": "7b5653c7-4483-463c-a7e2-fab408ea1f91",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "14bf3ebc-3a0f-468c-b650-6b282fe7f572": {
      "main": [
        [
          {
            "node": "fc4105a5-f50c-4ac8-8010-a0ba82ffdf11",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "905e1af5-3c1d-4a57-9df6-f7d0683f486a": {
      "main": [
        [
          {
            "node": "14bf3ebc-3a0f-468c-b650-6b282fe7f572",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4fa1d59c-2ace-4251-a0db-49b62d18f62a": {
      "main": [
        [
          {
            "node": "38d30ac3-298c-4731-a7b3-d45ac80abb25",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "2fdd3ef9-ef1f-42a5-8a29-64e439645e83": {
      "main": [
        [
          {
            "node": "905e1af5-3c1d-4a57-9df6-f7d0683f486a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "97f6e4f4-82c8-4bbd-bad2-a02f69ca6150": {
      "main": [
        [
          {
            "node": "4fa1d59c-2ace-4251-a0db-49b62d18f62a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8539ed24-374b-4ecb-b152-ef6d76365f0b": {
      "main": [
        [
          {
            "node": "2fdd3ef9-ef1f-42a5-8a29-64e439645e83",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1dc144aa-6849-4e95-a4d1-1f9c80b16b63": {
      "main": [
        [
          {
            "node": "38d30ac3-298c-4731-a7b3-d45ac80abb25",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "38d30ac3-298c-4731-a7b3-d45ac80abb25": {
      "main": [
        [
          {
            "node": "8539ed24-374b-4ecb-b152-ef6d76365f0b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "05599a83-f5c2-46db-8864-53c9e1b45f0d": {
      "main": [
        [
          {
            "node": "1dc144aa-6849-4e95-a4d1-1f9c80b16b63",
            "type": "main",
            "index": 0
          },
          {
            "node": "b56096d7-37cf-41b7-ab77-ebb35c176e01",
            "type": "main",
            "index": 0
          },
          {
            "node": "97f6e4f4-82c8-4bbd-bad2-a02f69ca6150",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Traitement des factures

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds19
Catégorie1
Types de nœuds10
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34