Gestión automatizada de inventario
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
- •Clave de API de Airtable
Nodos utilizados (15)
Categoría
{
"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
}
]
]
}
}
}¿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
iamvaar
@iamvaarCompartir este flujo de trabajo