{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "9db5c8cc-2c9a-4256-94b9-b404fcfed9b8",
      "name": "Search File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -592,
        -464
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
            "cachedResultUrl": "https://drive.google.com/drive/folders/1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
            "cachedResultName": "GPT"
          }
        },
        "options": {},
        "resource": "fileFolder",
        "returnAll": true
      },
      "typeVersion": 3
    },
    {
      "id": "a011a33b-a34c-490a-a541-fa44a6d210ad",
      "name": "Get Data",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -368,
        -464
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "e9ccaf88-ef3d-4e0d-b341-20674e225c26",
      "name": "Supabase Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        96,
        -464
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "f96b0b9c-ea89-4265-a8b9-7cf7d5b8718c",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        80,
        -240
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "9fac2f4e-8fe6-408b-b2d1-4de537a51654",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        208,
        -240
      ],
      "parameters": {
        "options": {},
        "dataType": "binary"
      },
      "typeVersion": 1
    },
    {
      "id": "01ed8e12-4569-4982-b4b2-86c48c607862",
      "name": "Recursive Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        304,
        -32
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "5f82a988-cf41-4494-a6ec-ff69b880e940",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -144,
        -464
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "29b8633d-5190-48c7-a2e1-b09eb1a74585",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "disabled": true,
      "position": [
        -3472,
        -272
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "=Eres un regenerador de art\u00edculos especializado que trabaja exclusivamente con informaci\u00f3n y reglas almacenadas en la base de conocimientos \"notodoanimacion\".\nFunci\u00f3n Principal\nRegenerar art\u00edculos siguiendo estrictamente las reglas de formato, estilo y estructura definidas en el dataset RAG. No inventes reglas ni formatos propios.\nProtocolo de Trabajo\n1. Consulta Obligatoria\n\nSIEMPRE usa la herramienta \"notodoanimacion\" para buscar:\n\nReglas de formato y estructura de art\u00edculos\nGu\u00edas de estilo de escritura\nEjemplos de formato correcto\nInformaci\u00f3n relevante sobre el tema solicitado\n\n2. Cumplimiento Estricto\nSigue EXACTAMENTE las reglas de formato encontradas en el dataset\nRespeta las gu\u00edas de estilo definidas en la base de conocimientos\nAplica la estructura de art\u00edculos especificada en el RAG\nMant\u00e9n el tono y estilo establecido en las directrices\n\n3. Proceso de Regeneraci\u00f3n\nBusca las reglas de formato en la base de conocimientos\nBusca informaci\u00f3n sobre el tema solicitado\nAplica las reglas encontradas al contenido\nRegenera el art\u00edculo siguiendo exactamente esas especificaciones\n\n\nImportante\nNO crees reglas propias de formato\nNO improvises estructura de art\u00edculos\nTODO debe basarse en lo que encuentres en \"notodoanimacion\"\nSi no encuentras reglas espec\u00edficas, pregunta al usuario por m\u00e1s detalles\n\nIdioma\nTrabaja principalmente en espa\u00f1ol, adapt\u00e1ndote al tono y registro encontrado en el dataset.\nResponde siempre consultando primero la base de conocimientos para obtener las reglas correctas."
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "8fd148f9-604e-471b-b65f-4632b1b484c9",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "disabled": true,
      "position": [
        -3440,
        -48
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "11daf090-c929-4ed5-a4dc-267d0c402e1e",
      "name": "Supabase Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        -1216,
        448
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {
          "queryName": "match_documents"
        },
        "toolName": "document",
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "toolDescription": "use thisto get information about notodoanimacion"
      },
      "typeVersion": 1.1
    },
    {
      "id": "6f32182f-8acc-4468-a993-f2ba0a31f2d8",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -1120,
        656
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "2bf347a0-d2db-4b3f-b339-f82dc00245a2",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "disabled": true,
      "position": [
        -816,
        -464
      ],
      "parameters": {
        "event": "fileUpdated",
        "options": {
          "fileType": "all"
        },
        "pollTimes": {
          "item": [
            {
              "hour": 0
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
          "cachedResultName": "GPT"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "11c1c54b-6bad-4ef7-8703-7c80dc60099d",
      "name": "\ud83d\udce5 New Job Link via Telegram",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -3456,
        496
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "b8fc0c2c-93ec-4b62-b0da-0948c3dc9661",
      "name": "\ud83d\udd27 Prepare URL for Extraction",
      "type": "n8n-nodes-base.set",
      "position": [
        -3232,
        496
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "8d5bf5e7-0f91-4012-b180-4bef3f9c93cd",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text ||  $json.message.text }}"
            },
            {
              "id": "1a3739bb-d9c2-449b-929b-a1fb58196458",
              "name": "cleanUrl",
              "type": "string",
              "value": "={{ ($json.message.text && $json.message.text.includes('://')\n    ? $json.message.text.split('/').slice(0,3).join('/')\n    : 'Invalid URL'\n  ).replace(/\\r?\\n$/, '') }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "964df60e-eeeb-4c60-b4fc-dca6f083ea0d",
      "name": "\ud83e\uddee Map Job Type & Category IDs",
      "type": "n8n-nodes-base.code",
      "position": [
        -816,
        176
      ],
      "parameters": {
        "jsCode": "// 1. Ambil array kategori dari input\nconst inputCategories = $('\ud83e\udde0 Extract Job Data with GPT').first().json.choices[0].message.content.categories;\n\n// 1b. Ambil job_type sebagai satu string\nconst inputType = $('\ud83e\udde0 Extract Job Data with GPT').first().json.choices[0].message.content.job_type;\n\n// 2. Array mapping antara `category` dan `id`\nconst categoryMap = [\n  { id: 299, category: \"2d\" },\n  { id: 298, category: \"3d\" },\n  { id: 315, category: \"3DFX\" },\n  { id: 284, category: \"Animaci\u00f3n 2d\" },\n  { id: 286, category: \"Animaci\u00f3n 3d\" },\n  { id: 617, category: \"Artista de color\" },\n  { id: 312, category: \"Audio SFX\" },\n  { id: 540, category: \"character artist\" },\n  { id: 445, category: \"Character FX (CFX)\" },\n  { id: 596, category: \"Cinematic Artist\" },\n  { id: 462, category: \"Comic\" },\n  { id: 294, category: \"Compositor 3d\" },\n  { id: 487, category: \"Compositor Digital\" },\n  { id: 463, category: \"Concept Art\" },\n  { id: 300, category: \"Creativo\" },\n  { id: 537, category: \"Crowd Artist\" },\n  { id: 301, category: \"Desarrollo de Software\" },\n  { id: 316, category: \"Desarrollo Visual\" },\n  { id: 302, category: \"Dibujante\" },\n  { id: 612, category: \"Direcci\u00f3n\" },\n  { id: 292, category: \"Director de Arte\" },\n  { id: 317, category: \"Dise\u00f1o de personajes\" },\n  { id: 291, category: \"Dise\u00f1o Gr\u00e1fico\" },\n  { id: 310, category: \"Edici\u00f3n de video\" },\n  { id: 533, category: \"Environment Artist\" },\n  { id: 620, category: \"Escultura Digital\" },\n  { id: 622, category: \"Filmmaker\" },\n  { id: 304, category: \"Fotograf\u00eda\" },\n  { id: 314, category: \"Game Artist\" },\n  { id: 486, category: \"Game Designer\" },\n  { id: 506, category: \"Game developer\" },\n  { id: 482, category: \"Game Producer\" },\n  { id: 576, category: \"Gameplay Animator\" },\n  { id: 290, category: \"Generalista 3d\" },\n  { id: 452, category: \"Grooming Hair/Fur\" },\n  { id: 303, category: \"Guionista\" },\n  { id: 305, category: \"Iluminaci\u00f3n\" },\n  { id: 288, category: \"Ilustraci\u00f3n\" },\n  { id: 616, category: \"Inteligencia Artificial\" },\n  { id: 311, category: \"Layout Artist\" },\n  { id: 619, category: \"Look Development\" },\n  { id: 464, category: \"Matte Painting\" },\n  { id: 287, category: \"Modelador 3d\" },\n  { id: 524, category: \"Motion Designer\" },\n  { id: 289, category: \"Motion Graphics\" },\n  { id: 588, category: \"Pixel Art\" },\n  { id: 307, category: \"Postproducci\u00f3n\" },\n  { id: 594, category: \"Previs\" },\n  { id: 297, category: \"Producci\u00f3n\" },\n  { id: 483, category: \"Programador\" },\n  { id: 592, category: \"Realidad Virtual (VR)\" },\n  { id: 448, category: \"Render Wrangler\" },\n  { id: 313, category: \"Rigger\" },\n  { id: 459, category: \"Shading & Texturing\" },\n  { id: 295, category: \"Storyboard\" },\n  { id: 296, category: \"Storytelling\" },\n  { id: 595, category: \"Technical Artist\" },\n  { id: 485, category: \"Technical Director (TD)\" },\n  { id: 308, category: \"UI / UX\" },\n  { id: 309, category: \"VFX\" },\n  { id: 589, category: \"Videojuegos\" },\n  { id: 593, category: \"Virtual Production\" },\n  { id: 293, category: \"Visualizaci\u00f3n Arquitect\u00f3nica\" },\n  { id: 590, category: \"VR & AR\" }\n];\n\n// 2b. Array mapping antara `type` dan `id`\nconst typeMap = [\n  { \"id\": 282, \"type\": \"Freelance / Remoto / Teletrabajo\" },\n  { \"id\": 318, \"type\": \"Indiferente\" },\n  { \"id\": 283, \"type\": \"Pr\u00e1cticas\" },\n  { \"id\": 281, \"type\": \"Proyecto\" },\n  { \"id\": 279, \"type\": \"Tiempo completo\" },\n  { \"id\": 280, \"type\": \"Tiempo parcial\" }\n];\n\n// 3. Map kategori input \u2192 array ID\nconst fixCategory = Array.isArray(inputCategories)\n  ? inputCategories\n      .map(name => {\n        const match = categoryMap.find(obj => obj.category === name);\n        return match ? match.id : null;\n      })\n      .filter(id => id !== null)\n  : [];\n\n// 4. Cari ID tipe berdasarkan inputType (string), balikan sebagai array\nconst foundType = typeMap.find(obj => obj.type === inputType);\nconst fixType = foundType ? [foundType.id] : [];\n\n// 5. Kembalikan kedua array dalam satu objek JSON\nreturn [\n  {\n    json: {\n      fixCategory,\n      fixType\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "9c03e317-3ac7-4a5c-9612-02b99746a725",
      "name": "\ud83d\udce5 Download Company Logo",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -144,
        176
      ],
      "parameters": {
        "url": "={{ $json.processedIconUrl }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "609b0e95-43f2-45c2-b5a1-29636581446d",
      "name": "\u2601\ufe0f Upload Logo to WordPress",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        80,
        176
      ],
      "parameters": {
        "url": "https://yourwebsite.es/wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename=\"logo-{{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}.jpeg\""
            },
            {
              "name": "Content-Type",
              "value": "image/jpeg"
            }
          ]
        },
        "inputDataFieldName": "data",
        "nodeCredentialType": "wordpressApi"
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "51e02ad8-611e-4738-a92b-8fbde4fe9c90",
      "name": "\ud83d\udce6 Format Final Job Post Data",
      "type": "n8n-nodes-base.set",
      "position": [
        304,
        176
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "title",
              "name": "title",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.title }}"
            },
            {
              "id": "content",
              "name": "content",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.html }}\n"
            },
            {
              "id": "job_listing_type",
              "name": "job_listing_type",
              "type": "array",
              "value": "=[{{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixType[0] }}]"
            },
            {
              "id": "job_listing_category",
              "name": "job_listing_category",
              "type": "array",
              "value": "={{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixCategory }}"
            },
            {
              "id": "_job_location",
              "name": "_job_location",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.location }}"
            },
            {
              "id": "_company_name",
              "name": "_company_name",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}"
            },
            {
              "id": "_company_logo",
              "name": "_company_logo",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.logo || \"http://www.notodoanimacion.es/wp-content/uploads/2025/06/logo-Sony-Pictures-Animation-1.png\" }}"
            },
            {
              "id": "_application",
              "name": "_application",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.original_link || $('\ud83d\udd27 Prepare URL for Extraction').item.json.text }}"
            },
            {
              "id": "7df4886d-0180-4279-9bff-f8f3ebc2961c",
              "name": "companyLogo",
              "type": "string",
              "value": "={{ $json.guid.raw }}"
            },
            {
              "id": "b9a766da-8bd6-4950-a243-8005c61c3ca9",
              "name": "status",
              "type": "string",
              "value": "publish"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "591abeb6-03fd-453c-9001-aaae56976d16",
      "name": "\u2705 All Fields Available?",
      "type": "n8n-nodes-base.if",
      "onError": "continueErrorOutput",
      "position": [
        528,
        160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8f4efbe7-3fc1-4be3-b4c6-f2b7b1f8f00a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": ""
            },
            {
              "id": "8194f924-3ef7-4056-a909-3499d8c116b3",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_category }}",
              "rightValue": ""
            },
            {
              "id": "373f2081-f7ac-4313-a472-6d10770dd17a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_type }}",
              "rightValue": ""
            },
            {
              "id": "74166a2f-57e8-4fed-8bcf-cd240779543a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._job_location }}",
              "rightValue": ""
            },
            {
              "id": "bdee50a8-cdff-4570-b88a-8cf560468fa2",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._application }}",
              "rightValue": ""
            },
            {
              "id": "48ab4287-4b6c-4241-a50f-1ddb40456fb2",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.companyLogo }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "3f58a822-4aa3-411b-9e5b-ad63be12a940",
      "name": "if not valid",
      "type": "n8n-nodes-base.telegram",
      "position": [
        752,
        -144
      ],
      "parameters": {
        "text": "=Failed - Missing required fields. Please check extraction process.\n\nTrying another approach...",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "771818fd-47d1-48ab-a83a-7bc232a52ab5",
      "name": "notify: processing job",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -2560,
        400
      ],
      "parameters": {
        "text": "=hi, {{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.first_name }}\n\nprocessing job...",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5c78034b-8194-4d3b-bf81-1f524f7dcea5",
      "name": "notify: extracting",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -2112,
        400
      ],
      "parameters": {
        "text": "<i>Extracting web data... </i>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "messageId": "={{ $json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "eac3a8c7-bab1-44ad-b199-4c11b563033c",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -1664,
        320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "31d50777-6c34-4a2a-b570-8bcd32073824",
              "operator": {
                "type": "boolean",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": ""
            },
            {
              "id": "9ae85f70-c7c3-4a1a-a2c8-64c3ad388c0b",
              "operator": {
                "type": "boolean",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.description }}",
              "rightValue": ""
            },
            {
              "id": "01c42779-16f4-452b-b328-b91f0f5b9a5b",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.url }}",
              "rightValue": ""
            },
            {
              "id": "7c6414cd-9d44-45bb-b999-30a0e1cd1993",
              "operator": {
                "type": "boolean",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.content }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "9b3c64ac-49ee-4b97-8137-4b87e1a6e902",
      "name": "notify: success extract",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -1440,
        224
      ],
      "parameters": {
        "text": "Jobs Extracted! Processing input with openAI...",
        "chatId": "={{ $('notify: extracting').item.json.result.chat.id }}",
        "messageId": "={{ $('notify: extracting').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "ad03815f-6870-49da-89b9-4bfd84fe74e8",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -864,
        -512
      ],
      "parameters": {
        "width": 1400,
        "height": 620,
        "content": "## RAG DATA\n**Double click** to edit me. [Guide](https://docs.n8n.io/workflows/sticky-notes/)"
      },
      "typeVersion": 1
    },
    {
      "id": "1378e1e2-6f80-4d75-9694-5906e9df1942",
      "name": "\ud83d\udcda Load Valid Job Types & Categories",
      "type": "n8n-nodes-base.set",
      "position": [
        -3008,
        496
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5b365fce-7a88-431b-aee7-4bf5a0171a1f",
              "name": "category",
              "type": "array",
              "value": "[\n  { \"id\": 299, \"category\": \"2d\" },\n  { \"id\": 298, \"category\": \"3d\" },\n  { \"id\": 315, \"category\": \"3DFX\" },\n  { \"id\": 284, \"category\": \"Animaci\u00f3n 2d\" },\n  { \"id\": 286, \"category\": \"Animaci\u00f3n 3d\" },\n  { \"id\": 617, \"category\": \"Artista de color\" },\n  { \"id\": 312, \"category\": \"Audio SFX\" },\n  { \"id\": 540, \"category\": \"character artist\" },\n  { \"id\": 445, \"category\": \"Character FX (CFX)\" },\n  { \"id\": 596, \"category\": \"Cinematic Artist\" },\n  { \"id\": 462, \"category\": \"Comic\" },\n  { \"id\": 294, \"category\": \"Compositor 3d\" },\n  { \"id\": 487, \"category\": \"Compositor Digital\" },\n  { \"id\": 463, \"category\": \"Concept Art\" },\n  { \"id\": 300, \"category\": \"Creativo\" },\n  { \"id\": 537, \"category\": \"Crowd Artist\" },\n  { \"id\": 301, \"category\": \"Desarrollo de Software\" },\n  { \"id\": 316, \"category\": \"Desarrollo Visual\" },\n  { \"id\": 302, \"category\": \"Dibujante\" },\n  { \"id\": 612, \"category\": \"Direcci\u00f3n\" },\n  { \"id\": 292, \"category\": \"Director de Arte\" },\n  { \"id\": 317, \"category\": \"Dise\u00f1o de personajes\" },\n  { \"id\": 291, \"category\": \"Dise\u00f1o Gr\u00e1fico\" },\n  { \"id\": 310, \"category\": \"Edici\u00f3n de video\" },\n  { \"id\": 533, \"category\": \"Environment Artist\" },\n  { \"id\": 620, \"category\": \"Escultura Digital\" },\n  { \"id\": 622, \"category\": \"Filmmaker\" },\n  { \"id\": 304, \"category\": \"Fotograf\u00eda\" },\n  { \"id\": 314, \"category\": \"Game Artist\" },\n  { \"id\": 486, \"category\": \"Game Designer\" },\n  { \"id\": 506, \"category\": \"Game developer\" },\n  { \"id\": 482, \"category\": \"Game Producer\" },\n  { \"id\": 576, \"category\": \"Gameplay Animator\" },\n  { \"id\": 290, \"category\": \"Generalista 3d\" },\n  { \"id\": 452, \"category\": \"Grooming Hair/Fur\" },\n  { \"id\": 303, \"category\": \"Guionista\" },\n  { \"id\": 305, \"category\": \"Iluminaci\u00f3n\" },\n  { \"id\": 288, \"category\": \"Ilustraci\u00f3n\" },\n  { \"id\": 616, \"category\": \"Inteligencia Artificial\" },\n  { \"id\": 311, \"category\": \"Layout Artist\" },\n  { \"id\": 619, \"category\": \"Look Development\" },\n  { \"id\": 464, \"category\": \"Matte Painting\" },\n  { \"id\": 287, \"category\": \"Modelador 3d\" },\n  { \"id\": 524, \"category\": \"Motion Designer\" },\n  { \"id\": 289, \"category\": \"Motion Graphics\" },\n  { \"id\": 588, \"category\": \"Pixel Art\" },\n  { \"id\": 307, \"category\": \"Postproducci\u00f3n\" },\n  { \"id\": 594, \"category\": \"Previs\" },\n  { \"id\": 297, \"category\": \"Producci\u00f3n\" },\n  { \"id\": 483, \"category\": \"Programador\" },\n  { \"id\": 592, \"category\": \"Realidad Virtual (VR)\" },\n  { \"id\": 448, \"category\": \"Render Wrangler\" },\n  { \"id\": 313, \"category\": \"Rigger\" },\n  { \"id\": 459, \"category\": \"Shading & Texturing\" },\n  { \"id\": 295, \"category\": \"Storyboard\" },\n  { \"id\": 296, \"category\": \"Storytelling\" },\n  { \"id\": 595, \"category\": \"Technical Artist\" },\n  { \"id\": 485, \"category\": \"Technical Director (TD)\" },\n  { \"id\": 308, \"category\": \"UI / UX\" },\n  { \"id\": 309, \"category\": \"VFX\" },\n  { \"id\": 589, \"category\": \"Videojuegos\" },\n  { \"id\": 593, \"category\": \"Virtual Production\" },\n  { \"id\": 293, \"category\": \"Visualizaci\u00f3n Arquitect\u00f3nica\" },\n  { \"id\": 590, \"category\": \"VR & AR\" }\n]\n"
            },
            {
              "id": "9c795618-08e9-4ae1-a1b2-f6e45d6d5bf0",
              "name": "types",
              "type": "array",
              "value": "=[\n  { \"id\": 282, \"type\": \"Freelance / Remoto / Teletrabajo\" },\n  { \"id\": 318, \"type\": \"Indiferente\" },\n  { \"id\": 283, \"type\": \"Pr\u00e1cticas\" },\n  { \"id\": 281, \"type\": \"Proyecto\" },\n  { \"id\": 279, \"type\": \"Tiempo completo\" },\n  { \"id\": 280, \"type\": \"Tiempo parcial\" }\n]\n\n"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "fe3fedf2-e2a4-49a7-907a-ecf8d5eb4240",
      "name": "notify: error",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -816,
        528
      ],
      "parameters": {
        "text": "=Something went wrong \n\n<b>error:</b> <code>{{ $json.error.message }}</code>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "messageId": "={{ $('notify: processing job').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fdcf1297-9022-48d5-bcd1-c3a2059b60a6",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -2336,
        400
      ],
      "parameters": {
        "amount": 1.25
      },
      "typeVersion": 1.1
    },
    {
      "id": "f6853ad4-dce9-4577-aa1c-3a900cac6c1e",
      "name": "valid url?",
      "type": "n8n-nodes-base.if",
      "position": [
        -2784,
        496
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "35deee67-0d08-46f8-a0e2-2f75cda4c08e",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.cleanUrl }}",
              "rightValue": "Invalid URL"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9b25199a-31f8-4225-85ef-c122daa1fa2e",
      "name": "notify: wrong url",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -2560,
        592
      ],
      "parameters": {
        "text": "=<i> thats not a valid url, please re-check your input...</i>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f7ea2c35-ec76-4d71-a412-99359c8e151a",
      "name": "\ud83e\udde0 Extract Job Data with GPT",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "onError": "continueErrorOutput",
      "position": [
        -1216,
        224
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini-2025-04-14",
          "cachedResultName": "GPT-4.1-MINI-2025-04-14"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Title: {{ $('Extract').item.json.title }}\nurl: {{ $('Extract').item.json.url }}\ncontent: {{ $('Extract').item.json.content }}\n\nmetadata\nauthor: {{ $('Extract').item.json.metadata.author }}\n\nicon: {{ $('Extract').item.json.external.icon['https://sp-tools-website.s3-eu-west-1.amazonaws.com/media/static/favicon.gif'] }}\n\n"
            },
            {
              "role": "=system",
              "content": "=You are a specialized article regenerator who works exclusively with information and rules stored in the \"document\" knowledge base.\n\nExtract rigorously the following fields from the provided job-offer HTML:\n\t\u2022\ttitle\n\t\u2022\tjob_type\n\t\u2022\tcategories (array)\n\t\u2022\tlocation (search in text of offer (body), or put \"sin definir\")\n\t\u2022\tcompany\n\t\u2022\tlogo\n\t\u2022\toriginal_link ({{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.message.text }})\n\t\u2022\thtml (only the job description)\n\nPrimary Function\nRegenerate articles strictly following the formatting, style, and structure rules defined in the RAG dataset. Do not invent your own rules or formats.\n\nWork Protocol\n1. Mandatory Consultation\nALWAYS use the \"document\" tool to search for:\n- Article formatting and structure rules\n- Writing style guides\n- Examples of correct formatting\n- Relevant information on the requested topic\n\n2. Strict Compliance\n- Follow EXACTLY the formatting rules found in the dataset\n- Respect the style guides defined in the knowledge base\n- Apply the article structure specified in the RAG\n- Maintain the tone and style established in the guidelines\n\n3. Regeneration Process\n- Search for formatting rules in the knowledge base\n- Search for information on the requested topic\n- Apply the rules found to the content\n- Regenerate the article following those specifications exactly\n\nImportant\nDO NOT create your own formatting rules\nDO NOT improvise article structure\nEVERYTHING should be based on what you find in \"document\"\nIf you don't find specific rules, ask the user for more details\n\n**HTML (DESCRIPCI\u00d3N)**\n\n1. Al principio, escribe un resumen de dos l\u00edneas de la oferta de empleo. Menciona la disciplina, el estudio que publica la oferta, y si es remoto o presencial, incluyendo la localizaci\u00f3n. Puedes a\u00f1adir otros elementos relevantes si es necesario. **No a\u00f1adas un t\u00edtulo ni encabezado H2 para este p\u00e1rrafo** y justifica el texto de cada p\u00e1rrafo completo.\n\nIncluye solo un espacio: `<p>&nbsp;</p>`\n\n2. Despu\u00e9s, a\u00f1ade este c\u00f3digo:\n\n```html\n<p style=\"text-align: center; font-size: 14pt;\"><span style=\"font-weight: 400;\">Si quieres m\u00e1s </span><a href=\"https://www.yourwebsite.es/ofertas-de-empleo-para-artistas-digitales/\"><span style=\"font-weight: 400;\">ofertas de empleo de Animaci\u00f3n, 3D, VFX y Arte digital</span></a><span style=\"font-weight: 400;\">\ud83d\udc48 ENTRA AQU\u00cd</span></p>\n```\n\nIncluye solo un espacio: `<p>&nbsp;</p>`\n\n3. Escribe lo siguiente:\n\n```html\n<p>[divider style=\"normal\" top=\"20\" bottom=\"20\"]</p>\n<p>&nbsp;</p>\n<p style=\"text-align: center; font-size: 14pt;\">IMPORTANTE: <a href=\"https://www.documen.es/suscripcion\">Suscr\u00edbete a nuestra p\u00e1gina</a> \ud83d\udc48 Te enviaremos nuestras ofertas de empleo, todas las semanas. \u2764\ufe0f</p>\n<p>&nbsp;</p>\n<p>[divider style=\"normal\" top=\"20\" bottom=\"20\"]</p>\n```\n\nIncluye un espacio: `<p>&nbsp;</p>`\n\n4. AHORA ESCRIBE TODO EL CONTENIDO EN HTML.\n\n**CONTENIDO:**\n\n\u00b7 Escribe SIEMPRE EN TERCERA PERSONA.\n\u00b7 No traduzcas t\u00e9rminos t\u00e9cnicos como Assets, technical director, senior, rigging, VFX, CGI, Motion Graphics, pipeline, etc.\n\u00b7 No traduzcas nombres de programas o herramientas, como After Effects, Photoshop, Shotgun, etc.\n\u00b7 **\u00a1No escribas ning\u00fan tipo de informaci\u00f3n adicional!**\n\n**FORMATO:**\n\n\u00b7 Organiza el contenido utilizando encabezados H2 para cada secci\u00f3n, todos centrados.\n\u00b7 Justifica el texto de cada p\u00e1rrafo completo.\n\u00b7 **SEO**: Usa negrita para los t\u00e9rminos importantes utilizando etiquetas `<strong>` para optimizar la lectura y el SEO, siguiendo estrictamente el orden HTML.\n\u00b7 Utiliza listas con vi\u00f1etas siempre que sea adecuado.\n\u00b7 TODOS los enlaces deben abrir en una nueva ventana.\n\u00b7 Usa negrita con etiquetas `<strong>` para los t\u00e9rminos importantes y palabras clave para optimizar el SEO.\n\u00b7 Despu\u00e9s de cada t\u00edtulo, a\u00f1ade `<p>&nbsp;</p>`\n\n5. Despu\u00e9s del contenido, a\u00f1ade este c\u00f3digo:\n\n```html\n<p style=\"text-align: center; font-size: 14pt;\"><span style=\"font-weight: 400;\">Si quieres m\u00e1s </span><a href=\"https://www.yourwebsite.es/ofertas-de-empleo-para-artistas-digitales/\"><span style=\"font-weight: 400;\">ofertas de empleo de Animaci\u00f3n, 3D, VFX y Arte digital</span></a><span style=\"font-weight: 400;\">\ud83d\udc48 ENTRA AQU\u00cd</span></p>\n```\n\n6. En la \u00faltima l\u00ednea, incluye SIEMPRE un eslogan aleatorio. Usa negrita con `<strong>` y alinea el texto al centro. Elige **UNA** de estas cuatro opciones:\n\n**Bienvenido a yourwebsite.es | Tu web sobre Animaci\u00f3n, VFX y Arte Digital en habla Hispana.**\n**Bienvenidos Artistas Digitales a notodoanimacion.es | El portal de Animaci\u00f3n, 3D, VFX y Videojuegos que trabaja para ti.**\n**Bienvenido a notodoanimacion.es | El portal sobre animaci\u00f3n y arte digital en espa\u00f1ol, m\u00e1s visitado del mundo.**\n\n\n\n-----\n\n\nCategory Selection Rules:\n\t\u2022\tONLY select categories from this EXACT options: {{ $('\ud83d\udcda Load Valid Job Types & Categories').item.json.category.map(item => item.category) }}\n\t\u2022\tMaximum 3 categories allowed\n\t\u2022\tMust be CASE SENSITIVE - match exactly as written in the array\n\t\u2022\tSelect the 3 MOST RELEVANT categories that best match the extracted job\n\t\u2022\tIf fewer than 3 categories are relevant, select only the appropriate ones\n\t\u2022\tDO NOT CREATE or ADD any categories outside the provided array\n\t\u2022\tDO NOT MODIFY the spelling, capitalization, or format of categories\n\nGuidelines:\n\t\u2022\tDO NOT INVENT ANYTHING\n\t\u2022\tWrite everything in Spanish (Castilian)\n\t\u2022\tStructure the job description using H2 headings\n\t\u2022\tUse strategic bolding for SEO and relevance\n\t\u2022\tIf any field is missing, leave it empty (\u201d\u201d or [])\n\t\u2022\tReturn only valid JSON\n\nCategory Selection Process:\n\t1.\tRead the job description carefully\n\t2.\tIdentify the main job functions and requirements\n\t3.\tMatch these against the provided category array\n\t4.\tSelect maximum 3 categories that are MOST APPROPRIATE\n\t5.\tEnsure exact spelling and case matching from the array\n\njob_type Selection Rules:\n  \u2022 THIS Field is a MANDATORY\n  \u2022\tONLY select job_type from this EXACT options:{{ $('\ud83d\udcda Load Valid Job Types & Categories').item.json.types.map(item => item.type) }}\n  \u2022 Maximum 1 Job type allowed\n  \u2022 Must be CASE SENSITIVE\u2014match exactly as written in the array\n  \u2022 DO NOT CREATE or ADD any categories outside the provided array\n  \u2022 DO NOT MODIFY the spelling, capitalization, or format of categories\n  \u2022 IF there's no type directly stated, find on the body, find relevant details and pick the most appropriate\n\n"
            }
          ]
        },
        "simplify": false,
        "jsonOutput": true
      },
      "retryOnFail": true,
      "typeVersion": 1.8
    },
    {
      "id": "b92d849d-80be-42a2-aff9-3b2681f9ddbf",
      "name": "Postgres Chat Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "disabled": true,
      "position": [
        -3312,
        -48
      ],
      "parameters": {
        "sessionKey": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "sessionIdType": "customKey"
      },
      "typeVersion": 1.3
    },
    {
      "id": "55a3e64e-d45a-4c21-8c74-bfcfaf7a07a4",
      "name": "Extract",
      "type": "n8n-nodes-base.jinaAi",
      "onError": "continueErrorOutput",
      "position": [
        -1888,
        400
      ],
      "parameters": {
        "url": "={{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.message.text }}",
        "options": {},
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "3fbf0e5a-176a-4cfe-86a1-64d16e31d09f",
      "name": "Create Url",
      "type": "n8n-nodes-base.code",
      "position": [
        -368,
        176
      ],
      "parameters": {
        "jsCode": "const extractData = $('Extract').first().json;\n\n// Ekstrak icon URL dengan error handling\nlet iconUrl = null;\n\ntry {\n  // Periksa apakah external dan icon ada\n  if (extractData?.external?.icon) {\n    const iconObject = extractData.external.icon;\n    \n    // Ambil key pertama (URL) dari object icon\n    const iconKeys = Object.keys(iconObject);\n    \n    if (iconKeys.length > 0) {\n      iconUrl = iconKeys[0];\n    }\n  }\n} catch (error) {\n  console.error('Error extracting icon URL:', error);\n}\n\n// Return hasil\nreturn [\n  {\n    json: {\n      iconUrl: iconUrl || '', // Return empty string jika tidak ada icon\n      // Atau bisa juga return original data + iconUrl\n      ...extractData,\n      processedIconUrl: iconUrl\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "91f978ad-7ca1-4637-b0fe-38df1f7aa549",
      "name": "notify: openai success",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -592,
        176
      ],
      "parameters": {
        "text": "<i>OpenAI Process Success... one sec...</i>",
        "chatId": "={{ $('notify: extracting').item.json.result.chat.id }}",
        "messageId": "={{ $('notify: extracting').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "37945719-b7e1-4ae6-89d2-d5fc39f500f3",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        752,
        576
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5a72ac2f-e722-4121-91ff-d758520f7fdb",
              "name": "combine trim & false url",
              "type": "string",
              "value": "={{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.cleanUrl }}{{ $json._company_logo }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "486d3276-9a3e-4a78-8ee8-ea56cc2da643",
      "name": "\ud83d\udce5 Download Company Logo - Alt",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        976,
        576
      ],
      "parameters": {
        "url": "={{ $json['combine trim & false url'] }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7bbac7a6-8800-42c7-a72d-576f8df60aeb",
      "name": "\u2601\ufe0f Upload Logo to WordPress - Alt",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        1200,
        576
      ],
      "parameters": {
        "url": "https://yourweb.es/wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename=\"logo-{{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}.jpeg\""
            },
            {
              "name": "Content-Type",
              "value": "image/jpeg"
            }
          ]
        },
        "inputDataFieldName": "data",
        "nodeCredentialType": "wordpressApi"
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "b8b9261a-0298-4548-bf93-e8d86a2b68fb",
      "name": "\ud83d\udce6 Format Final Job Post Data - Alt",
      "type": "n8n-nodes-base.set",
      "position": [
        1424,
        576
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "title",
              "name": "title",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.title }}"
            },
            {
              "id": "content",
              "name": "content",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.html }}\n"
            },
            {
              "id": "job_listing_type",
              "name": "job_listing_type",
              "type": "array",
              "value": "=[{{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixType[0] }}]"
            },
            {
              "id": "job_listing_category",
              "name": "job_listing_category",
              "type": "array",
              "value": "={{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixCategory }}"
            },
            {
              "id": "_job_location",
              "name": "_job_location",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.location }}"
            },
            {
              "id": "_company_name",
              "name": "_company_name",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}"
            },
            {
              "id": "_company_logo",
              "name": "_company_logo",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.logo || \"http://www.notodoanimacion.es/wp-content/uploads/2025/06/logo-Sony-Pictures-Animation-1.png\" }}"
            },
            {
              "id": "_application",
              "name": "_application",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.original_link || $('\ud83d\udd27 Prepare URL for Extraction').item.json.text }}"
            },
            {
              "id": "7df4886d-0180-4279-9bff-f8f3ebc2961c",
              "name": "companyLogo",
              "type": "string",
              "value": "={{ $json.guid.raw }}"
            },
            {
              "id": "b9a766da-8bd6-4950-a243-8005c61c3ca9",
              "name": "status",
              "type": "string",
              "value": "publish"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c2d5191b-f159-4430-9c19-93996038cbf8",
      "name": "\u2705 All Fields Available? - Alt",
      "type": "n8n-nodes-base.if",
      "onError": "continueErrorOutput",
      "position": [
        1648,
        560
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8f4efbe7-3fc1-4be3-b4c6-f2b7b1f8f00a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": ""
            },
            {
              "id": "8194f924-3ef7-4056-a909-3499d8c116b3",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_category }}",
              "rightValue": ""
            },
            {
              "id": "373f2081-f7ac-4313-a472-6d10770dd17a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_type }}",
              "rightValue": ""
            },
            {
              "id": "74166a2f-57e8-4fed-8bcf-cd240779543a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._job_location }}",
              "rightValue": ""
            },
            {
              "id": "bdee50a8-cdff-4570-b88a-8cf560468fa2",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._application }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "52dc5cda-9f9e-4762-a772-f6eda4009951",
      "name": "\ud83d\udcca Did Publish Succeed?1",
      "type": "n8n-nodes-base.if",
      "position": [
        2096,
        576
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0e5d1113-a6fe-49bf-bf56-848c852875f6",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            },
            {
              "id": "d00af776-6323-4c62-84f1-30de39d256d0",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.link }}",
              "rightValue": ""
            },
            {
              "id": "0cd4f4d5-8c1c-4c98-8d7b-1995a56fcf3f",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.categories }}",
              "rightValue": ""
            },
            {
              "id": "2e8ab092-9500-44e9-a32f-99a00dbb7a28",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.date }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "734362fc-4cf0-4845-84d1-b82da537f549",
      "name": "\ud83d\udce8 Notify Success - Alt",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2320,
        576
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.from.first_name }}\nJob successfully extracted and Posted! \nmissing value has fill with default image\n\nOriginal Url: {{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.message.text.replace(/_/g, '\\\\_') }}\n\nTitle: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.title.raw.replace(/_/g, '\\\\_') }}\nCategory: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.job_listing_category }}\nJob Type: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.job_listing_types }}\nLogo: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.meta._company_logo.replace(/_/g, '\\\\_') }}\n\nPublished Post: {{ $json.guid.rendered.replace(/_/g, '\\\\_') }}",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c1387f6c-95c1-47c2-92f6-535795f8a7d8",
      "name": "\ud83d\udce8 Notify Failed - Alt",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2320,
        768
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.from.first_name }}\nJob Failed!\n\nPlease Check your workflow or contact khairul https://wa.me/6285155431253",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": true
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4c33212f-24f9-4761-98e9-2353861092df",
      "name": "\ud83d\udcca Did Publish Succeed?2",
      "type": "n8n-nodes-base.if",
      "position": [
        976,
        112
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0e5d1113-a6fe-49bf-bf56-848c852875f6",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            },
            {
              "id": "d00af776-6323-4c62-84f1-30de39d256d0",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.link }}",
              "rightValue": ""
            },
            {
              "id": "0cd4f4d5-8c1c-4c98-8d7b-1995a56fcf3f",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.categories }}",
              "rightValue": ""
            },
            {
              "id": "2e8ab092-9500-44e9-a32f-99a00dbb7a28",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.date }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "f6621fcd-cd0c-437c-850e-5aec4aced243",
      "name": "notify: failed extract",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -1440,
        432
      ],
      "parameters": {
        "text": "=Failed in extract using Jina... please inform khairul",
        "chatId": "={{ $('notify: extracting').item.json.result.chat.id }}",
        "messageId": "={{ $('notify: extracting').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "f157c006-e030-4022-af65-b31c622ffc84",
      "name": "Error",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1200,
        272
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.from.first_name }}\nJob Failed!\n\nPlease Check your workflow or contact khairul https://wa.me/6285155431253",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6850d7c9-d6c3-4238-bfba-26f1a293a2eb",
      "name": "changing method",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1200,
        -144
      ],
      "parameters": {
        "text": "=Trying Second Attempt!\n<i>Filling empty field with default value...</i>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "messageId": "={{ $json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3d7a6168-1425-4761-83a0-217df65810c0",
      "name": "Wait1",
      "type": "n8n-nodes-base.wait",
      "position": [
        1424,
        -144
      ],
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "27c05704-1592-4113-9164-3708cf95939a",
      "name": "Wait2",
      "type": "n8n-nodes-base.wait",
      "position": [
        976,
        -144
      ],
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "5cd30671-f93e-4d97-83dd-50d2cc61013e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3472,
        176
      ],
      "parameters": {
        "color": 7,
        "width": 660,
        "height": 260,
        "content": "## Monitoring - leave as it is"
      },
      "typeVersion": 1
    },
    {
      "id": "d5f5cf7f-64df-4e26-a78b-69927c65d92e",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -3408,
        272
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "3706df36-ce1e-4b6a-9c08-ab6e767f9654",
      "name": "Kirim ke Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -2960,
        272
      ],
      "parameters": {
        "text": "={{ $json.message }}",
        "chatId": "your-chat-id",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "530ec964-11ab-43e1-8411-b26eabd7c845",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -3184,
        272
      ],
      "parameters": {
        "jsCode": "// Perfect error access untuk N8N v1.99.1\nconst errorData = $input.first().json;\nconst execution = errorData.execution;\nconst workflow = errorData.workflow;\nconst error = execution.error;\n\nconst message = `\ud83d\udea8 <b>WORKFLOW ERROR</b>\\n\\n` +\n  `\ud83d\udccb Workflow: <b>${workflow.name}</b>\\n` +\n  `\u2699\ufe0f Node: <code>${error.node.name}</code>\\n` +\n  `\u274c Error: <code>${error.message}</code>\\n` +\n  `\ud83d\udcdd Description: <i>${error.description}</i>\\n` +\n  `\ud83d\udd50 Waktu: ${new Date(error.timestamp).toLocaleString('id-ID')}\\n` +\n  `\ud83d\udd0d Execution: <a href=\"${execution.url}\">${execution.id}</a>\\n` +\n  `\u26a0\ufe0f Level: ${error.level.toUpperCase()}`;\n\nreturn {\n  message: message,\n  parse_mode: 'HTML',\n  chat_id: '621412350'\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "340a435c-0f51-4136-a7d3-57a847bd490c",
      "name": "Publiched!",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1200,
        64
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.from.first_name }}\nJob successfully extracted and Posted! \n\nOriginal Url: {{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.message.text.replace(/_/g, '\\\\_') }}\n\nTitle: {{ $('\ud83d\ude80 Publish to Your web').item.json.title.rendered }}\nCategory: {{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.categories }}\nJob Type: {{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.job_type }}\nLogo: {{ $('\ud83d\ude80 Publish to Your web').item.json.meta._company_logo }}\n\nPublished Post: {{ $json.guid.rendered.replace(/_/g, '\\\\_') }}",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "80395252-aa0f-4f96-b49c-4c6a461fb2f4",
      "name": "\ud83d\ude80 Publish to Your web",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        752,
        112
      ],
      "parameters": {
        "url": "https://www.yourweb.es/wp-json/wp/v2/job-listings",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"title\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.title) }},\n  \"content\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.content) }},\n  \"status\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.status) }},\n  \"job_listing_types\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.job_listing_type) }},\n  \"job_listing_category\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.job_listing_category) }},\n  \"meta\": {\n    \"_job_location\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json._job_location) }},\n    \"_company_name\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json._company_name) }},\n    \"_company_logo\": {{ JSON.stringify($json.companyLogo) }},\n    \"_application\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json._application) }}\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "wordpressApi"
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "f7c7f5fe-fd08-43a5-a2d7-536d79ac2425",
      "name": "\ud83d\ude80 Publish to Yourweb - Alt",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1872,
        576
      ],
      "parameters": {
        "url": "https://www.yourweb.es/wp-json/wp/v2/job-listings",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"title\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.title) }},\n  \"content\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.content) }},\n  \"status\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.status) }},\n  \"job_listing_types\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.job_listing_type) }},\n  \"job_listing_category\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json.job_listing_category) }},\n  \"meta\": {\n    \"_job_location\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json._job_location) }},\n    \"_company_name\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json._company_name) }},\n    \"_company_logo\": {{ JSON.stringify($json._company_logo) }},\n    \"_application\": {{ JSON.stringify($('\ud83d\udce6 Format Final Job Post Data').item.json._application) }}\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "wordpressApi"
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "3a79707a-fb2a-4ad4-9222-48887e67f5e1",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        -32
      ],
      "parameters": {
        "color": 3,
        "width": 370,
        "height": 100,
        "content": "## \u2615 Appreciate This Workflow?\n\nSupport the creator by sending coffee:\n\n**PayPal:** [paypal.me/khmuhtadin](https://paypal.me/khmuhtadin)\n\nThank you! \ud83d\ude80"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "notify: success extract",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "notify: failed extract",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Kirim ke Telegram",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "notify: extracting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait2": {
      "main": [
        [
          {
            "node": "changing method",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "notify: error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Data": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Url": {
      "main": [
        [
          {
            "node": "\ud83d\udce5 Download Company Logo",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "valid url?": {
      "main": [
        [
          {
            "node": "notify: processing job",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "notify: wrong url",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "\ud83d\udce5 Download Company Logo - Alt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search File": {
      "main": [
        [
          {
            "node": "Get Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "if not valid": {
      "main": [
        [
          {
            "node": "Wait2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Supabase Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "changing method": {
      "main": [
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI1": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "notify: extracting": {
      "main": [
        [
          {
            "node": "Extract",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger": {
      "main": [
        [
          {
            "node": "Search File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Supabase Vector Store": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Supabase Vector Store1": {
      "ai_tool": [
        [
          {
            "node": "\ud83e\udde0 Extract Job Data with GPT",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "notify: openai success": {
      "main": [
        [
          {
            "node": "Create Url",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "notify: processing job": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "notify: success extract": {
      "main": [
        [
          {
            "node": "\ud83e\udde0 Extract Job Data with GPT",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\ude80 Publish to Your web": {
      "main": [
        [
          {
            "node": "\ud83d\udcca Did Publish Succeed?2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u2705 All Fields Available?": {
      "main": [
        [
          {
            "node": "\ud83d\ude80 Publish to Your web",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "if not valid",
            "type": "main",
            "index": 0
          },
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcca Did Publish Succeed?1": {
      "main": [
        [
          {
            "node": "\ud83d\udce8 Notify Success - Alt",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\ud83d\udce8 Notify Failed - Alt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcca Did Publish Succeed?2": {
      "main": [
        [
          {
            "node": "Publiched!",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce5 Download Company Logo": {
      "main": [
        [
          {
            "node": "\u2601\ufe0f Upload Logo to WordPress",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\ude80 Publish to Yourweb - Alt": {
      "main": [
        [
          {
            "node": "\ud83d\udcca Did Publish Succeed?1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce5 New Job Link via Telegram": {
      "main": [
        [
          {
            "node": "\ud83d\udd27 Prepare URL for Extraction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83e\udde0 Extract Job Data with GPT": {
      "main": [
        [
          {
            "node": "\ud83e\uddee Map Job Type & Category IDs",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "notify: error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u2601\ufe0f Upload Logo to WordPress": {
      "main": [
        [
          {
            "node": "\ud83d\udce6 Format Final Job Post Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u2705 All Fields Available? - Alt": {
      "main": [
        [
          {
            "node": "\ud83d\ude80 Publish to Yourweb - Alt",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\ud83d\udce8 Notify Failed - Alt",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\ud83d\udce8 Notify Failed - Alt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce6 Format Final Job Post Data": {
      "main": [
        [
          {
            "node": "\u2705 All Fields Available?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udd27 Prepare URL for Extraction": {
      "main": [
        [
          {
            "node": "\ud83d\udcda Load Valid Job Types & Categories",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce5 Download Company Logo - Alt": {
      "main": [
        [
          {
            "node": "\u2601\ufe0f Upload Logo to WordPress - Alt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83e\uddee Map Job Type & Category IDs": {
      "main": [
        [
          {
            "node": "notify: openai success",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "\u2601\ufe0f Upload Logo to WordPress - Alt": {
      "main": [
        [
          {
            "node": "\ud83d\udce6 Format Final Job Post Data - Alt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udce6 Format Final Job Post Data - Alt": {
      "main": [
        [
          {
            "node": "\u2705 All Fields Available? - Alt",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83d\udcda Load Valid Job Types & Categories": {
      "main": [
        [
          {
            "node": "valid url?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}