Análisis ABC y de Pareto de inventario basado en Google Sheets

Avanzado

Este es unMiscellaneous, Multimodal AIflujo de automatización del dominio deautomatización que contiene 17 nodos.Utiliza principalmente nodos como If, Code, Filter, GoogleSheets, ManualTrigger. Análisis ABC y de Pareto de inventario basado en Google Sheets para la optimización de la cadena de suministro

Requisitos previos
  • Credenciales de API de Google Sheets
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": "",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "dd09796e-b4c4-43df-8401-bba895d330b3",
      "name": "Al hacer clic en 'Ejecutar flujo de trabajo'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1056,
        -400
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5f502423-b87c-4322-aac6-10d07e685087",
      "name": "Obtener fila(s) en hoja",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -832,
        -400
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Input Data"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Data Analytics"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7
    },
    {
      "id": "15e8b11a-83d9-41cb-84e4-dbfe0ddf970f",
      "name": "Filtrar ventas cero",
      "type": "n8n-nodes-base.filter",
      "position": [
        -608,
        -400
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "39ce1523-ed7e-404a-82db-099200bcb82c",
              "operator": {
                "type": "number",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.QTY }}",
              "rightValue": "={{ 0 }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2cd9b9a0-dc4f-4d99-b4c4-43f6d165cad8",
      "name": "Transponer",
      "type": "n8n-nodes-base.code",
      "position": [
        -160,
        -592
      ],
      "parameters": {
        "jsCode": "const input = $input.all().map(i => i.json);\n\n// Collect store IDs\nconst stores = input.map(row => row.STORE);\n// Collect items (from keys)\nconst items = Object.keys(input[0]).filter(k => k !== \"STORE\");\n\n// Transpose\nconst result = items.map(ITEM => {\n  let row = { ITEM };\n  for (const store of stores) {\n    const storeRow = input.find(r => r.STORE === store);\n    row[store] = storeRow[ITEM];\n  }\n  return { json: row };\n});\n\nreturn result;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "7bedeb08-f47e-4809-9936-7cdc8a9236d1",
      "name": "Ventas diarias por tienda",
      "type": "n8n-nodes-base.code",
      "position": [
        -384,
        -304
      ],
      "parameters": {
        "jsCode": "const agg = {};\nfor (const {json} of items) {\n  const k = `${json.STORE}|${json.DAY}`;\n  if (!agg[k]) agg[k] = { STORE: json.STORE, DAY: json.DAY, QTY: 0, TO: 0 };\n  agg[k].QTY += Number(json.QTY||0);\n  agg[k].TO  += Number(json.TO||0);\n}\nreturn Object.values(agg).map(r => ({ json: r }));"
      },
      "typeVersion": 2
    },
    {
      "id": "b0134581-ef21-4485-bd75-8a5d7f865ad4",
      "name": "Si",
      "type": "n8n-nodes-base.if",
      "position": [
        -160,
        -304
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "59bb6e5b-0765-4812-a842-19a3bc7a0357",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.STORE }}",
              "rightValue": "STORE-1"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "95a2efc7-9c7b-4263-aab4-c00bbe902714",
      "name": "Ventas Tienda 1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        64,
        -400
      ],
      "parameters": {
        "columns": {
          "value": {
            "TO": "={{ $json.TO }}",
            "DAY": "={{ $json.DAY }}",
            "QTY": "={{ $json.QTY }}"
          },
          "schema": [
            {
              "id": "DAY",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "DAY",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QTY",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "QTY",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "TO",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "TO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 421687347,
          "cachedResultUrl": "",
          "cachedResultName": "Daily Sales Store 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Data Analytics"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7
    },
    {
      "id": "fdffd98a-36ac-425b-861c-b3f738828fe2",
      "name": "Ventas Tienda 2",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        64,
        -208
      ],
      "parameters": {
        "columns": {
          "value": {
            "TO": "={{ $json.TO }}",
            "DAY": "={{ $json.DAY }}",
            "QTY": "={{ $json.QTY }}"
          },
          "schema": [
            {
              "id": "DAY",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "DAY",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QTY",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "QTY",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "TO",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "TO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 749936247,
          "cachedResultUrl": "",
          "cachedResultName": "Daily Sales Store 2"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Data Analytics"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7
    },
    {
      "id": "8a3afe9e-d873-4a02-9fb1-45fc9c380601",
      "name": "Análisis de Pareto",
      "type": "n8n-nodes-base.code",
      "position": [
        -160,
        -784
      ],
      "parameters": {
        "jsCode": "// Normalize + sort by turnover (TO) desc\nconst rows = items\n  .map(i => ({\n    ...i.json,\n    TO: Number(i.json.TO || 0),   // turnover = QTY x Unit Price\n    QTY: Number(i.json.QTY || 0),\n  }))\n  .sort((a, b) => b.TO - a.TO);\n\nconst n = rows.length;\nconst totalTO = rows.reduce((s, r) => s + r.TO, 0) || 1;\n\nlet cumTO = 0;\nrows.forEach((r, idx) => {\n  cumTO += r.TO;\n  r.cum_turnover = cumTO;                 // absolute cumulative TO\n  r.cum_share = +(cumTO / totalTO).toFixed(6); // 0..1\n  r.sku_rank = idx + 1;\n  r.cum_skus = +((idx + 1) / n).toFixed(6);    // 0..1\n  r.cum_skus_pct = +(r.cum_skus * 100).toFixed(2); // 0..100 for charts\n});\n\n// Return table\nreturn rows.map(r => ({ json: r }));\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "e8e1409d-b571-43b8-ae9e-bb8da228cefd",
      "name": "TO, QTY Agrupar por ITEM",
      "type": "n8n-nodes-base.code",
      "position": [
        -384,
        -784
      ],
      "parameters": {
        "jsCode": "const agg = {};\nfor (const {json} of items) {\n  const ITEM = String(json.ITEM);\n  const TO = Number(json.TO);\n  const QTY = Number(json.QTY);\n  if (!agg[ITEM]) agg[ITEM] = { ITEM, TO: 0, QTY: 0 };\n  agg[ITEM].TO += TO;\n  agg[ITEM].QTY += QTY;\n}\nconst rows = Object.values(agg).sort((a,b)=> b.TO - a.TO);\nreturn rows.map(r => ({ json: r }));"
      },
      "typeVersion": 2
    },
    {
      "id": "9e02d5cb-701d-4a40-b2bf-c2fae43af8ef",
      "name": "TO Agrupar por (TIENDA, ITEM)",
      "type": "n8n-nodes-base.code",
      "position": [
        -384,
        -592
      ],
      "parameters": {
        "jsCode": "// Build dictionaries of unique stores & skus\nconst stores = new Set();\nconst skus = new Set();\n// Append dictionnaries with values\nfor (const {json} of items) { stores.add(json.STORE); skus.add(json.ITEM); }\n// List of Unique SKU\nconst skuList = Array.from(skus).sort();\n\n// Accumulate sums\nconst mat = {}; // store_id -> sku -> sum\nfor (const {json} of items) {\n  const s = json.STORE;\n  const k = json.ITEM;\n  const v = Number(json.TO) || 0;\n  if (!mat[s]) mat[s] = {};\n  mat[s][k] = (mat[s][k] || 0) + v;\n}\n\n// Output wide rows with 0 fill\nconst rows = [];\nfor (const s of Array.from(stores).sort()) {\n  const row = { STORE: s };\n  for (const k of skuList) row[k] = mat[s][k] || 0;\n  rows.push(row);\n}\nreturn rows.map(r => ({ json: r }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "efe6f052-ff5d-4755-ae07-4a7bc480ddbb",
      "name": "Ventas multi-tienda",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        64,
        -592
      ],
      "parameters": {
        "columns": {
          "value": {
            "TO": "={{ $json.TO }}",
            "DAY": "={{ $json.DAY }}",
            "QTY": "={{ $json.QTY }}"
          },
          "schema": [
            {
              "id": "DAY",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "DAY",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QTY",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "QTY",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "TO",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "TO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 421687347,
          "cachedResultUrl": "",
          "cachedResultName": "Daily Sales Store 1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Data Analytics"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7
    },
    {
      "id": "5bd88834-9c20-4d9e-bd31-146dc31e2c18",
      "name": "Variabilidad de demanda x % Ventas",
      "type": "n8n-nodes-base.code",
      "position": [
        -384,
        -16
      ],
      "parameters": {
        "jsCode": "// INPUT items: rows with fields ITEM, DAY, QTY (others optional)\n\nfunction mean(a){ return a.reduce((s,x)=>s + x, 0) / (a.length || 1); }\nfunction stdev_samp(a){\n  if (a.length <= 1) return 0;\n  const m = mean(a);\n  const v = a.reduce((s,x)=> s + (x - m) ** 2, 0) / (a.length - 1);\n  return Math.sqrt(v);\n}\n\n// 1) build daily series per ITEM (sum across stores)\nconst series = {};            // ITEM -> { day -> qty_sum }\nlet totalQty = 0;\n\nfor (const { json } of items) {\n  const item = String(json.ITEM);\n  const day  = String(json.DAY);\n  const qty  = Number(json.QTY || 0);\n\n  if (!series[item]) series[item] = {};\n  series[item][day] = (series[item][day] || 0) + qty;\n  totalQty += qty;\n}\n\n// 2) compute metrics per ITEM\nconst out = [];\nfor (const [item, dayMap] of Object.entries(series)) {\n  const daily = Object.values(dayMap);                 // array of daily qty\n  const qty_total = daily.reduce((s,x)=>s+x, 0);\n  const m = mean(daily);\n  const sd = stdev_samp(daily);\n  const cv = m ? sd / m : null;\n  const share_qty_pct = totalQty ? (qty_total / totalQty) * 100 : 0;\n\n  out.push({\n    ITEM: item,\n    qty_total,\n    share_qty_pct: Number(share_qty_pct.toFixed(2)),\n    mean_qty: Number(m.toFixed(3)),\n    std_qty: Number(sd.toFixed(3)),\n    cv_qty: cv == null ? null : Number(cv.toFixed(3)),\n  });\n}\n\n// Optional: sort by share desc\nout.sort((a,b) => b.share_qty_pct - a.share_qty_pct);\n\n// Return as n8n items\nreturn out.map(r => ({ json: r }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "805e6a80-bb24-446e-ab9c-a0e0c68f555a",
      "name": "Análisis ABC XYZ",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        64,
        -16
      ],
      "parameters": {
        "columns": {
          "value": {
            "ABC": "={{ $json.ABC }}",
            "ITEM": "={{ $json.ITEM }}",
            "cv_qty": "={{ $json.cv_qty }}",
            "std_qty": "={{ $json.std_qty }}",
            "mean_qty": "={{ $json.mean_qty }}",
            "cum_share": "={{ $json.cum_share }}",
            "qty_total": "={{ $json.qty_total }}",
            "share_qty_pct": "={{ $json.share_qty_pct }}"
          },
          "schema": [
            {
              "id": "ITEM",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ITEM",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "qty_total",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "qty_total",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "share_qty_pct",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "share_qty_pct",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cv_qty",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cv_qty",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ABC",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ABC",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "mean_qty",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "mean_qty",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "std_qty",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "std_qty",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cum_share",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cum_share",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "limit_cov",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "limit_cov",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {
          "useAppend": false
        },
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1281688243,
          "cachedResultUrl": "",
          "cachedResultName": "ABC XYZ"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Data Analytics"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7
    },
    {
      "id": "fb1b23cb-cad9-4a75-bb41-5d87209b51c5",
      "name": "Actualizar hoja de Pareto",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        64,
        -784
      ],
      "parameters": {
        "columns": {
          "value": {
            "TO": "={{ $json.TO }}",
            "QTY": "={{ $json.QTY }}",
            "ITEM": "={{ $json.ITEM }}",
            "cum_skus": "={{ $json.cum_skus }}",
            "sku_rank": "={{ $json.sku_rank }}",
            "cum_share": "={{ $json.cum_share }}",
            "cum_skus_pct": "={{ $json.cum_skus_pct }}",
            "cum_turnover": "={{ $json.cum_turnover }}"
          },
          "schema": [
            {
              "id": "ITEM",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ITEM",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "TO",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "TO",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "QTY",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "QTY",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cum_turnover",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cum_turnover",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cum_share",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cum_share",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sku_rank",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "sku_rank",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cum_skus",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cum_skus",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cum_skus_pct",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cum_skus_pct",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1760689869,
          "cachedResultUrl": "",
          "cachedResultName": "Pareto"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Data Analytics"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "",
          "name": ""
        }
      },
      "notesInFlow": true,
      "typeVersion": 4.7
    },
    {
      "id": "82773b29-a1dc-445c-a8ea-d9c393d36eb4",
      "name": "Mapeo de clase ABC",
      "type": "n8n-nodes-base.code",
      "position": [
        -160,
        -16
      ],
      "parameters": {
        "jsCode": "// 1) Extract and sort by sales contribution\nlet rows = items.map(i => i.json);\nrows.sort((a, b) => b.share_qty_pct - a.share_qty_pct);\n\n// 2) Compute cumulative contribution\nlet cum = 0;\nfor (let r of rows) {\n  cum += r.share_qty_pct;\n\n  // 3) Assign class based on cumulative %\n  if (cum <= 5) {\n    r.ABC = 'A';   // top 5%\n  } else if (cum <= 20) {\n    r.ABC = 'B';   // next 15%\n  } else {\n    r.ABC = 'C';   // rest\n  }\n\n  r.cum_share = Number(cum.toFixed(2));\n}\n\n// 4) Return enriched rows\nreturn rows.map(r => ({ json: r }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "21867671-78aa-4580-b51f-53c34f6a1dfa",
      "name": "Nota adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1166,
        -784
      ],
      "parameters": {
        "color": 7,
        "width": 540,
        "height": 544,
        "content": "### Trigger the workflow\nThis starts by collecting the transactional sales from the spreadsheet `Input Data` from the Google Sheet.\n\n#### How to setup?\n\n- **Load records in the Google Sheet Node**:\n   1. Add your Google Sheet API credentials to access the Google Sheet file\n   2. Select the file using the list, an URL or an ID\n   3. Select the sheet `Input Data`\nination**, **distance**, **duration**, **n_steps**\n  [Learn more about the Google Sheet Node](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets)\n"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "b0134581-ef21-4485-bd75-8a5d7f865ad4": {
      "main": [
        [
          {
            "node": "95a2efc7-9c7b-4263-aab4-c00bbe902714",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "fdffd98a-36ac-425b-861c-b3f738828fe2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2cd9b9a0-dc4f-4d99-b4c4-43f6d165cad8": {
      "main": [
        [
          {
            "node": "efe6f052-ff5d-4755-ae07-4a7bc480ddbb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8a3afe9e-d873-4a02-9fb1-45fc9c380601": {
      "main": [
        [
          {
            "node": "fb1b23cb-cad9-4a75-bb41-5d87209b51c5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "82773b29-a1dc-445c-a8ea-d9c393d36eb4": {
      "main": [
        [
          {
            "node": "805e6a80-bb24-446e-ab9c-a0e0c68f555a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5f502423-b87c-4322-aac6-10d07e685087": {
      "main": [
        [
          {
            "node": "15e8b11a-83d9-41cb-84e4-dbfe0ddf970f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e8e1409d-b571-43b8-ae9e-bb8da228cefd": {
      "main": [
        [
          {
            "node": "8a3afe9e-d873-4a02-9fb1-45fc9c380601",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7bedeb08-f47e-4809-9936-7cdc8a9236d1": {
      "main": [
        [
          {
            "node": "b0134581-ef21-4485-bd75-8a5d7f865ad4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "15e8b11a-83d9-41cb-84e4-dbfe0ddf970f": {
      "main": [
        [
          {
            "node": "5bd88834-9c20-4d9e-bd31-146dc31e2c18",
            "type": "main",
            "index": 0
          },
          {
            "node": "e8e1409d-b571-43b8-ae9e-bb8da228cefd",
            "type": "main",
            "index": 0
          },
          {
            "node": "9e02d5cb-701d-4a40-b2bf-c2fae43af8ef",
            "type": "main",
            "index": 0
          },
          {
            "node": "7bedeb08-f47e-4809-9936-7cdc8a9236d1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9e02d5cb-701d-4a40-b2bf-c2fae43af8ef": {
      "main": [
        [
          {
            "node": "2cd9b9a0-dc4f-4d99-b4c4-43f6d165cad8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5bd88834-9c20-4d9e-bd31-146dc31e2c18": {
      "main": [
        [
          {
            "node": "82773b29-a1dc-445c-a8ea-d9c393d36eb4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dd09796e-b4c4-43df-8401-bba895d330b3": {
      "main": [
        [
          {
            "node": "5f502423-b87c-4322-aac6-10d07e685087",
            "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?

Avanzado - Varios, IA Multimodal

¿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.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos17
Categoría2
Tipos de nodos6
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
Samir Saci

Samir Saci

@samirsaci

Automation, AI and Analytics for Supply Chain & Business Optimization Helping businesses streamline operations using n8n, AI agents, and data science to enhance efficiency and sustainability. Linkedin: www.linkedin.com/in/samir-saci

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34