Automatisierte Lagerverwaltung

Fortgeschritten

Dies ist ein Document Extraction-Bereich Automatisierungsworkflow mit 15 Nodes. Hauptsächlich werden Code, Airtable, SendInBlue, ScheduleTrigger und andere Nodes verwendet. Automatische Verwaltung von Beständen über Erstellung von Bestellaufträgen in Airtable und automatische E-Mails an Lieferanten

Voraussetzungen
  • Airtable API Key
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "b6731f6e46273cffeac6b5188a5b3bcb0840c00108e73b48ae2b799ac6e8e081",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "fe401179-5a8b-4232-b148-9bf4d96ceb9b",
      "name": "Produkte mit niedrigem Bestand abrufen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -2340,
        -540
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apprZl1I4LgjwhSVf",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf",
          "cachedResultName": "Products Tables"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblLQxA3XuieqUIja",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf/tblLQxA3XuieqUIja",
          "cachedResultName": "Products Table"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "{stock_level} <= {reorder_threshold}"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "j2v4SdOKrSSYQlXT",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "46bfdc76-b244-41a9-a686-09c8eb140968",
      "name": "Lieferantendetails für diese Produkte abrufen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -2120,
        -540
      ],
      "parameters": {
        "id": "={{ $json.supplier_id }}",
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apprZl1I4LgjwhSVf",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf",
          "cachedResultName": "Products Tables"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbl7LUCS0MYq0Fjq6",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf/tbl7LUCS0MYq0Fjq6",
          "cachedResultName": "Supplier"
        },
        "options": {}
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "j2v4SdOKrSSYQlXT",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "836a5efb-0cad-4508-8703-911241f0b847",
      "name": "Dynamische Nachbestellmenge berechnen",
      "type": "n8n-nodes-base.code",
      "position": [
        -1900,
        -540
      ],
      "parameters": {
        "jsCode": "const safetyMargin = 1.2;\n// Process all input items\nconst outputItems = [];\nfor (const item of $input.all()) {\n  const avgDaily = item.json.average_daily_sales || 1;\n  const leadTime = item.json.lead_time_days || 7;\n  \n  // Updated logic: 2x lead time for better production inventory management\n  // First lead time: stock to last until delivery arrives\n  // Second lead time: buffer stock for next reorder cycle\n  const reorderQty = Math.ceil(avgDaily * (leadTime * 1.5) * safetyMargin);\n  \n  outputItems.push({\n    json: {\n      ...item.json,\n      reorder_qty: reorderQty\n    }\n  });\n}\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "7d04d71d-3d40-4575-b567-6e6bb8712e3a",
      "name": "Täglich um Mitternacht ausführen",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2520,
        -540
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 0 * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "50c4223b-83d7-4204-a2ad-75b390b9298b",
      "name": "Bestellungen in Tabelle erfassen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -2160,
        -280
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apprZl1I4LgjwhSVf",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf",
          "cachedResultName": "Products Tables"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbloIflYm8aNOy10m",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf/tbloIflYm8aNOy10m",
          "cachedResultName": "Purchase Orders"
        },
        "columns": {
          "value": {
            "status": "Pending",
            "quantity": "={{ $json.reorder_qty }}",
            "product_id": "={{ $json.product_id }}",
            "supplier_id": "={{ $json.supplier_id }}",
            "Product Name": "={{ $json.product_name }}",
            "Supplier Email": "={{ $json.supplier_email }}"
          },
          "schema": [
            {
              "id": "po_number",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "po_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "supplier_id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "supplier_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Supplier Email",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Supplier Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Pending",
                  "value": "Pending"
                },
                {
                  "name": "Sent",
                  "value": "Sent"
                },
                {
                  "name": "Delivered",
                  "value": "Delivered"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "date",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "product_id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "product_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Name",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Product Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "j2v4SdOKrSSYQlXT",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "87965ea3-6e2a-495d-a040-fcf15ba8bb2a",
      "name": "Datensätze durchsuchen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -2500,
        -280
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apprZl1I4LgjwhSVf",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf",
          "cachedResultName": "Products Tables"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbloIflYm8aNOy10m",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf/tbloIflYm8aNOy10m",
          "cachedResultName": "Purchase Orders"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "=AND({product_id} = '{{ $('Get Products with low stock').item.json.product_id }}', OR({status} = 'Pending', {status} = 'Sent'))"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "j2v4SdOKrSSYQlXT",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1,
      "alwaysOutputData": true
    },
    {
      "id": "18390f14-6622-4f6c-8c24-ec123c4a807e",
      "name": "Doppelte Produktbestellungen entfernen",
      "type": "n8n-nodes-base.code",
      "position": [
        -2340,
        -280
      ],
      "parameters": {
        "jsCode": "// Step 1: Get all low stock products with complete data\nconst lowStockProducts = $('Get Products with low stock').all();\nconst allProductIds = lowStockProducts.map(p => p.json.product_id);\n\n// Step 2: Get calculated reorder quantities from the first code node\nconst reorderData = $('Calculate Dynamic Re-order Quantity').all();\n\n// Step 3: Get supplier details (this should have the actual supplier info)\nconst supplierDetails = $('Get supplier Details for those low stock products').all();\n\n// Step 4: Get existing purchase orders from input\nconst existingPOs = $input.all();\nconst existingProductIds = existingPOs.map(po => po.json.product_id);\n\n// Step 5: Filter out products that already have active POs\nconst newProductIds = allProductIds.filter(pid => !existingProductIds.includes(pid));\n\n// Step 6: Build complete result with all required fields\nconst result = newProductIds.map(productId => {\n  // Find the original product data\n  const originalProduct = lowStockProducts.find(p => p.json.product_id === productId);\n  \n  // Find the calculated reorder quantity and supplier info from the first code node\n  let reorderQty = 0;\n  let supplierId = '';\n  const reorderInfo = reorderData.find(r => r.json.product_id === productId);\n  if (reorderInfo) {\n    reorderQty = reorderInfo.json.reorder_qty;\n    supplierId = reorderInfo.json.supplier_id;\n  } else {\n    // Fallback: try to match by index if product_id isn't available in reorder data\n    const productIndex = lowStockProducts.findIndex(p => p.json.product_id === productId);\n    if (productIndex >= 0 && reorderData[productIndex]) {\n      reorderQty = reorderData[productIndex].json.reorder_qty;\n      supplierId = reorderData[productIndex].json.supplier_id;\n    }\n  }\n  \n  // For supplier details, we need to match by supplier_id from the reorder data\n  // The supplier_id might be an array (linked record) or a string\n  const supplierRecordId = Array.isArray(supplierId) ? supplierId[0] : supplierId;\n  \n  // Find supplier details by matching the record ID or by product_id\n  // Try multiple ways to match supplier data\n  const supplierData = supplierDetails.find(s => \n    s.json.id === supplierRecordId || \n    s.json.supplier_id === supplierRecordId ||\n    s.json.product_id === productId\n  );\n  \n  return {\n    json: {\n      product_id: productId,\n      product_name: originalProduct?.json?.product_name || '',\n      reorder_qty: reorderQty,\n      supplier_id: supplierRecordId || '',\n      supplier_email: supplierData?.json?.email || \n                     supplierData?.json?.supplier_email || \n                     supplierData?.json?.contact_email ||\n                     supplierData?.json?.Email || ''\n    }\n  };\n});\n\nreturn result;"
      },
      "typeVersion": 2
    },
    {
      "id": "cc7b13bc-d8f8-4c26-b503-5d9a8fcfd010",
      "name": "Notizzettel",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2600,
        -980
      ],
      "parameters": {
        "width": 940,
        "height": 920,
        "content": "### 📦 **Automated Purchase Order Creation – n8n Workflow**\n\nThis n8n automation checks products with low stock every night, calculates smart reorder quantities, avoids duplicate POs, and creates fresh purchase orders automatically.\n\n**✅ Steps:**\n\n1. **Run Every Midnight** – Scheduled daily trigger.\n2. **Get Products with Low Stock** – Fetch products below reorder threshold from Airtable.\n3. **Get Supplier Details** – Fetch related supplier info.\n4. **Calculate Dynamic Reorder Quantity** – Uses average daily sales × lead time × safety margin.\n5. **Search Existing POs** – Checks if there are active pending/sent orders.\n6. **Remove Duplicate Product Orders** – Filters out products already covered by existing POs.\n7. **Create Purchase Records** – Generates new purchase order records in Airtable with supplier email, product name, reorder quantity, etc.\n\n⚙ **Fully automated daily process** — keeps your stock healthy and your suppliers notified."
      },
      "typeVersion": 1
    },
    {
      "id": "790b9e2e-63fb-4d15-b0e9-47d1ab6dfdd2",
      "name": "Zeitplan-Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1360,
        -520
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 1 * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "93b3ea8a-5b0a-41b6-863c-1c78bc6ec59d",
      "name": "Ausstehende Bestellungen abrufen",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -1120,
        -520
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apprZl1I4LgjwhSVf",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf",
          "cachedResultName": "Products Tables"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbloIflYm8aNOy10m",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf/tbloIflYm8aNOy10m",
          "cachedResultName": "Purchase Orders"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "={status} = 'Pending'"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "j2v4SdOKrSSYQlXT",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "4ba6d12d-cbe6-418e-a9bb-102f54451b03",
      "name": "Produkte nach Lieferanten gruppieren",
      "type": "n8n-nodes-base.code",
      "position": [
        -900,
        -520
      ],
      "parameters": {
        "jsCode": "// Group purchase orders by supplier\nconst groupedOrders = {};\n\nfor (const item of $input.all()) {\n  const supplierId = item.json.supplier_id;\n  const supplierEmail = item.json[\"Supplier Email\"];\n  const airtableRecordId = item.json.id; // capture Airtable record ID\n\n  if (!groupedOrders[supplierId]) {\n    groupedOrders[supplierId] = {\n      supplier_id: supplierId,\n      supplier_email: supplierEmail,\n      orders: [],\n      total_items: 0,\n      po_summary: [],\n      record_ids: [] // store PO record IDs to update later\n    };\n  }\n\n  const productName = item.json.product_name || item.json[\"Product Name\"] || item.json.product_id || \"Unknown Product\";\n\n  groupedOrders[supplierId].orders.push({\n    product_name: productName,\n    quantity: item.json.quantity,\n    product_id: item.json.product_id,\n    airtable_record_id: airtableRecordId\n  });\n\n  groupedOrders[supplierId].record_ids.push(airtableRecordId);\n  groupedOrders[supplierId].total_items += item.json.quantity;\n  groupedOrders[supplierId].po_summary.push(`${productName} (Qty: ${item.json.quantity})`);\n}\n\n// Helper function to create single-line HTML email body\nconst createHTMLBody = (supplier) => {\n  const tableRows = supplier.orders.map(order =>\n    `<tr><td style=\"padding:8px;border-bottom:1px solid #ddd;\">${order.product_name}</td><td style=\"padding:8px;border-bottom:1px solid #ddd;text-align:center;\">${order.product_id}</td><td style=\"padding:8px;border-bottom:1px solid #ddd;text-align:center;\">${order.quantity}</td></tr>`\n  ).join('');\n\n  return `<html><body style=\"font-family:Arial,sans-serif;line-height:1.6;color:#333;\"><div style=\"max-width:600px;margin:0 auto;padding:20px;\"><h2 style=\"color:#2c3e50;border-bottom:2px solid #3498db;padding-bottom:10px;\">Purchase Order Request</h2><p>Dear Supplier,</p><p>We hope this email finds you well. Please prepare the following items for delivery:</p><table style=\"width:100%;border-collapse:collapse;margin:20px 0;box-shadow:0 2px 4px rgba(0,0,0,0.1);\"><thead><tr style=\"background-color:#3498db;color:white;\"><th style=\"padding:12px;text-align:left;\">Product Name</th><th style=\"padding:12px;text-align:center;\">Product ID</th><th style=\"padding:12px;text-align:center;\">Quantity</th></tr></thead><tbody>${tableRows}</tbody></table><div style=\"background-color:#f8f9fa;padding:15px;border-radius:5px;margin:20px 0;\"><p style=\"margin:5px 0;\"><strong>📦 Total Products:</strong> ${supplier.orders.length}</p><p style=\"margin:5px 0;\"><strong>📊 Total Quantity:</strong> ${supplier.total_items}</p><p style=\"margin:5px 0;\"><strong>🏷️ Supplier ID:</strong> ${supplier.supplier_id}</p></div><p>Please confirm receipt of this order and provide an estimated delivery date.</p><p style=\"margin-top:30px;\">Thank you for your prompt attention to this order.<br><strong>Inventory Management Team</strong></p><hr style=\"border:none;border-top:1px solid #ddd;margin:30px 0;\"><p style=\"font-size:12px;color:#666;text-align:center;\">This is an automated message. Please do not reply to this email.</p></div></body></html>`;\n};\n\nreturn Object.values(groupedOrders).map(supplier => ({\n  json: {\n    supplier_id: supplier.supplier_id,\n    supplier_email: supplier.supplier_email,\n    total_products: supplier.orders.length,\n    total_quantity: supplier.total_items,\n    order_details: supplier.orders,\n    po_summary: supplier.po_summary,\n    record_ids: supplier.record_ids, // include record IDs for updating status later\n    email_subject: `🛒 Purchase Order - ${supplier.orders.length} Product${supplier.orders.length > 1 ? 's' : ''} (${supplier.total_items} items) - ${supplier.supplier_id}`,\n    email_body_html: createHTMLBody(supplier),\n    email_body_text: `Dear Supplier,\\n\\nPlease prepare the following items:\\n\\n${supplier.po_summary.join('\\n')}\\n\\nTotal Products: ${supplier.orders.length}\\nTotal Items: ${supplier.total_items}\\nSupplier ID: ${supplier.supplier_id}\\n\\nThank you!\\n\\nInventory Management Team`\n  }\n}));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "ce853473-aa77-4215-a7e2-4b584f6b5986",
      "name": "Bestellungs-ID's abrufen",
      "type": "n8n-nodes-base.code",
      "position": [
        -720,
        -400
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst updates = [];\n\nfor (const item of items) {\n  const recordIds = item.json.record_ids || [];\n  for (const id of recordIds) {\n    updates.push({\n      json: {\n        id,\n        status: 'Sent'\n      }\n    });\n  }\n}\n\nreturn updates;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "275e3674-127b-4acf-92cd-c554b61239f9",
      "name": "Bestellstatus auf 'gesendet' aktualisieren",
      "type": "n8n-nodes-base.airtable",
      "position": [
        -500,
        -540
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apprZl1I4LgjwhSVf",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf",
          "cachedResultName": "Products Tables"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbloIflYm8aNOy10m",
          "cachedResultUrl": "https://airtable.com/apprZl1I4LgjwhSVf/tbloIflYm8aNOy10m",
          "cachedResultName": "Purchase Orders"
        },
        "columns": {
          "value": {
            "id": "={{ $json.id }}",
            "status": "Sent"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "po_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "po_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "supplier_id",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "supplier_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Supplier Email",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Supplier Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Pending",
                  "value": "Pending"
                },
                {
                  "name": "Sent",
                  "value": "Sent"
                },
                {
                  "name": "Delivered",
                  "value": "Delivered"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "date",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "product_id",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "product_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product Name",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Product Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "j2v4SdOKrSSYQlXT",
          "name": "Airtable Personal Access Token account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "fd03a9df-1892-465b-9dc5-6c13cb2c1f16",
      "name": "Notizzettel1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1420,
        -980
      ],
      "parameters": {
        "width": 1140,
        "height": 920,
        "content": "## 📦 n8n Automation: Daily PO Email & Status Sync\n\n- **Runs at:** 01:00 AM every day (`0 1 * * *`)\n- **Step 1:** Fetches all `Pending` purchase orders from Airtable\n- **Step 2:** Groups orders by supplier, builds HTML emails summarizing products and quantities\n- **Step 3:** Sends emails to suppliers via Brevo (SendInBlue)\n- **Step 4:** Updates each purchase order’s status to `Sent` in Airtable\n\nKeeps your suppliers updated daily and automates your purchase order workflow.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e725f7f0-85a1-4cec-af79-fee429ff2667",
      "name": "Bestellung per E-Mail an Lieferanten senden",
      "type": "n8n-nodes-base.sendInBlue",
      "position": [
        -700,
        -700
      ],
      "parameters": {
        "sender": "abhiram.bvb@gmail.com",
        "subject": "={{ $json.email_subject }}",
        "sendHTML": true,
        "htmlContent": "={{ $json.email_body_html }}",
        "receipients": "={{ $json.supplier_email }}",
        "requestOptions": {},
        "additionalFields": {}
      },
      "credentials": {
        "sendInBlueApi": {
          "id": "ysEmyjdU0adBBOqN",
          "name": "Brevo account"
        }
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "87965ea3-6e2a-495d-a040-fcf15ba8bb2a": {
      "main": [
        [
          {
            "node": "18390f14-6622-4f6c-8c24-ec123c4a807e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "790b9e2e-63fb-4d15-b0e9-47d1ab6dfdd2": {
      "main": [
        [
          {
            "node": "93b3ea8a-5b0a-41b6-863c-1c78bc6ec59d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7d04d71d-3d40-4575-b567-6e6bb8712e3a": {
      "main": [
        [
          {
            "node": "fe401179-5a8b-4232-b148-9bf4d96ceb9b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ce853473-aa77-4215-a7e2-4b584f6b5986": {
      "main": [
        [
          {
            "node": "275e3674-127b-4acf-92cd-c554b61239f9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fe401179-5a8b-4232-b148-9bf4d96ceb9b": {
      "main": [
        [
          {
            "node": "46bfdc76-b244-41a9-a686-09c8eb140968",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4ba6d12d-cbe6-418e-a9bb-102f54451b03": {
      "main": [
        [
          {
            "node": "e725f7f0-85a1-4cec-af79-fee429ff2667",
            "type": "main",
            "index": 0
          },
          {
            "node": "ce853473-aa77-4215-a7e2-4b584f6b5986",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e725f7f0-85a1-4cec-af79-fee429ff2667": {
      "main": [
        []
      ]
    },
    "18390f14-6622-4f6c-8c24-ec123c4a807e": {
      "main": [
        [
          {
            "node": "50c4223b-83d7-4204-a2ad-75b390b9298b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "50c4223b-83d7-4204-a2ad-75b390b9298b": {
      "main": [
        []
      ]
    },
    "836a5efb-0cad-4508-8703-911241f0b847": {
      "main": [
        [
          {
            "node": "87965ea3-6e2a-495d-a040-fcf15ba8bb2a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "93b3ea8a-5b0a-41b6-863c-1c78bc6ec59d": {
      "main": [
        [
          {
            "node": "4ba6d12d-cbe6-418e-a9bb-102f54451b03",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "46bfdc76-b244-41a9-a686-09c8eb140968": {
      "main": [
        [
          {
            "node": "836a5efb-0cad-4508-8703-911241f0b847",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Fortgeschritten - Dokumentenextraktion

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Verwandte Workflows

Automatisiertes Reaktivierungssystem für Benutzer basierend auf Supabase, Google Tabellen und Gmail
Automatisiertes Benutzer-Reaktivierungssystem mit Supabase, Google Tabellen und Gmail
Set
Code
Gmail
+
Set
Code
Gmail
14 Nodesiamvaar
Soziale Medien
Echtzeit-Meldungen zur Internationalen Raumstations-Sichtbarkeit via N2YO und Telegram
Echtzeit-Warnungen zur Sichtbarkeit der internationalen Raumstation über N2YO und Telegram
If
Code
Telegram
+
If
Code
Telegram
6 Nodesiamvaar
Content-Erstellung
🚀 Automatisierter Stripe-Zahlungs-Wiederherstellungsprozess: Verfolgen fehlgeschlagener Zahlungen und Nachfass-E-Mails
🚀 Automatisierter Stripe-Zahlungseinzug: Nachverfolgung fehlgeschlagener Zahlungen und Follow-up-E-Mails
Set
Switch
Send In Blue
+
Set
Switch
Send In Blue
13 Nodesiamvaar
Rechnungsverarbeitung
Intelligente Lagerauffüllung und automatische Bestellungen
KI-gesteuerte Bestandsverwaltung basierend auf OpenAI-Prognosen und ERP-Integration
Code
Filter
Postgres
+
Code
Filter
Postgres
24 NodesOneclick AI Squad
Dokumentenextraktion
Automatisierung von Fehlerberichten mit Gemini AI: Jotform zu GitHub mit Telegram-Benachrichtigungen
Fehlerberichte mit Gemini AI automatisieren: Von Jotform zu GitHub mit Telegram-Benachrichtigungen
Code
Telegram
Github Tool
+
Code
Telegram
Github Tool
10 Nodesiamvaar
Automatisierung der internen Beschwerdebearbeitung mit Jotform, Gemini AI und Google Sheets
Automatisierung der internen Beschwerdebehandlung mit Jotform, Gemini AI und Google Sheets
If
Gmail
Google Sheets
+
If
Gmail
Google Sheets
22 Nodesiamvaar
Ticketverwaltung
Workflow-Informationen
Schwierigkeitsgrad
Fortgeschritten
Anzahl der Nodes15
Kategorie1
Node-Typen5
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34