Gestión automatizada de inventario

Intermedio

Este es unDocument Extractionflujo de automatización del dominio deautomatización que contiene 15 nodos.Utiliza principalmente nodos como Code, Airtable, SendInBlue, ScheduleTrigger. Gestión automática de inventario mediante la creación de órdenes de compra en Airtable y correos electrónicos a proveedores

Requisitos previos
  • Clave de API de Airtable
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "b6731f6e46273cffeac6b5188a5b3bcb0840c00108e73b48ae2b799ac6e8e081",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "fe401179-5a8b-4232-b148-9bf4d96ceb9b",
      "name": "Obtener productos con stock bajo",
      "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": "Obtener detalles del proveedor para esos productos",
      "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": "Calcular cantidad dinámica de reorden",
      "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": "Ejecutar cada medianoche",
      "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": "Crear registros de compra en la tabla",
      "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": "Buscar registros",
      "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": "Eliminar órdenes de productos duplicadas",
      "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": "Nota adhesiva",
      "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": "Activador programado",
      "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": "Obtener órdenes de compra pendientes",
      "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": "Agrupar productos por proveedores",
      "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": "Obtener los ID de registro de las OC",
      "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": "Actualizar estado de la OC a 'enviada'",
      "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": "Nota adhesiva 1",
      "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": "Enviar OC a proveedores por correo",
      "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
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Intermedio - Extracción de documentos

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Flujos de trabajo relacionados recomendados

Sistema automatizado de reactivación de usuarios basado en Supabase, Google Sheets y Gmail
Sistema automatizado de reactivación de usuarios utilizando Supabase, Google Sheets y Gmail
Set
Code
Gmail
+
Set
Code
Gmail
14 Nodosiamvaar
Redes sociales
Obtener recordatorios de visibilidad en tiempo real de la Estación Espacial Internacional a través de N2YO y Telegram
Obtener recordatorios de visibilidad en tiempo real de la Estación Espacial Internacional mediante N2YO y Telegram
If
Code
Telegram
+
If
Code
Telegram
6 Nodosiamvaar
Creación de contenido
🚀 Automatización de la recuperación de pagos de Stripe: seguimiento de fallos y correos electrónicos de seguimiento
🚀 Recuperación automática de pagos Stripe: seguimiento de fallos y seguimiento de correos electrónicos
Set
Switch
Send In Blue
+
Set
Switch
Send In Blue
13 Nodosiamvaar
Procesamiento de facturas
Reabastecimiento Inteligente de Inventario y Órdenes de Compra Automáticas
Gestión de inventario impulsada por IA basada en predicciones de OpenAI e integración con ERP
Code
Filter
Postgres
+
Code
Filter
Postgres
24 NodosOneclick AI Squad
Extracción de documentos
Automatización de informes de defectos con Gemini AI: Jotform a GitHub y alertas por Telegram
Automatización de informes de defectos con Gemini AI: Jotform a GitHub y envío de recordatorios por Telegram
Code
Telegram
Github Tool
+
Code
Telegram
Github Tool
10 Nodosiamvaar
Automatización del procesamiento de quejas internas con Jotform, Gemini AI y Google Sheets
Automatizar el manejo de quejas internas con Jotform, Gemini AI y Google Sheets
If
Gmail
Google Sheets
+
If
Gmail
Google Sheets
22 Nodosiamvaar
Gestión de tickets
Información del flujo de trabajo
Nivel de dificultad
Intermedio
Número de nodos15
Categoría1
Tipos de nodos5
Descripción de la dificultad

Adecuado para usuarios con experiencia intermedia, flujos de trabajo de complejidad media con 6-15 nodos

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34