{"workflow":{"id":13599,"name":"Generate structured exams from PDFs with OpenAI GPT-4o and HTML to PDF","views":212,"recentViews":1,"totalViews":212,"createdAt":"2026-02-22T16:26:41.483Z","description":"# 🚀 ExamForge AI\n### Automated PDF to Structured Exam Generator (MCQ + Essay + Answer Key)\n\nGenerate structured exams automatically from text-based PDF materials using AI.\n\nExamForge AI is a production-ready n8n workflow that transforms educational content into multiple-choice and essay questions with customizable difficulty and automatic answer key generation.\n\n---\n\n# ✨ Features\n\n- 📄 Upload PDF via Webhook\n- ✅ File size validation (default: max 5MB)\n- 🧹 Automatic text cleaning\n- 📏 Token length estimation & safety control\n- 🎯 Customizable MCQ & Essay count\n- 🧠 Difficulty selection (easy / medium / hard)\n- 🌍 Language selection\n- 📦 Structured JSON AI output\n- 📝 Separate Exam PDF & Answer Key PDF\n- 📲 Telegram delivery support (optional)\n- 🔒 Parameter validation with structured error responses\n\n---\n\n# 🧠 What This Workflow Does\n\n1. Accepts PDF upload via Webhook\n2. Validates file size\n3. Extracts and cleans text content\n4. Estimates text length to prevent token overflow\n5. Validates required parameters:\n   - `mcq_count`\n   - `essay_count`\n   - `difficulty`\n   - `language`\n6. Sends structured prompt to OpenAI\n7. Parses JSON response\n8. Formats exam and answer key separately\n9. Converts both into PDF\n10. Sends results via Telegram or Webhook response\n\n---\n\n# ⚙️ Requirements\n\n## Accounts Required\n\n- OpenAI account (API key required)\n- Telegram Bot (optional)\n- PDF Munk (API key required)\n\n## Environment\n\n- n8n (self-hosted or cloud)\n- Node version compatible with your n8n installation\n\n---\n\n# 🔑 Credentials Setup\n\n## 1️⃣ OpenAI\n\n- Add OpenAI credentials inside n8n\n- Insert your API key\n- Select preferred model (e.g., GPT-4o / GPT-4)\n\n## 2️⃣ Telegram (Optional)\n\n- Create a Telegram Bot via BotFather\n- Insert Bot Token into Telegram node\n- Add your Chat ID\n\n---\n\n# 🛠 Webhook Configuration\n\n**Method:** POST  \n**Content-Type:** multipart/form-data  \n\n## Required Parameters\n\n| Parameter     | Type   | Required | Description |\n|--------------|--------|----------|-------------|\n| file         | File   | Yes      | PDF document |\n| mcq_count    | Number | Yes      | Number of multiple-choice questions |\n| essay_count  | Number | Yes      | Number of essay questions |\n| difficulty   | String | Yes      | easy / medium / hard |\n| language     | String | Yes      | Output language |\n\n---\n\n# 📥 Example Request\n\n```bash\ncurl -X POST https://your-n8n-domain/webhook/examforge \\\n  -F \"file=@document.pdf\" \\\n  -F \"mcq_count=20\" \\\n  -F \"essay_count=5\" \\\n  -F \"difficulty=medium\" \\\n  -F \"language=Indonesian\"","workflow":{"id":"E4rYEKgHQnMvf69J","meta":{"instanceId":"6cc986a902b3f0ff9240ae3d0468a1ce9791fa6b4506fb60ba160c17b5ef243b","templateCredsSetupCompleted":true},"name":"ExamForge AI – PDF to Structured Exam Generator (n8n Workflow)","tags":[],"nodes":[{"id":"cffb63a4-8e42-437e-bd9c-1d6a16e5eeee","name":"Webhook","type":"n8n-nodes-base.webhook","position":[-160,64],"webhookId":"cd37ea38-9ff5-4518-a17d-5f443ef4ad3b","parameters":{"path":"cd37ea38-9ff5-4518-a17d-5f443ef4ad3b","options":{},"httpMethod":"POST","responseMode":"responseNode"},"typeVersion":2.1},{"id":"0ba4e4b7-a5da-46cf-aeb9-07567ed28be2","name":"Extract from File","type":"n8n-nodes-base.extractFromFile","position":[496,48],"parameters":{"options":{},"operation":"pdf","binaryPropertyName":"={{ $json.data }}"},"typeVersion":1.1},{"id":"8c9dc848-766e-4e10-8bcb-f873a2b6812a","name":"Message a model","type":"@n8n/n8n-nodes-langchain.openAi","position":[96,656],"parameters":{"modelId":{"__rl":true,"mode":"list","value":"gpt-4o-mini","cachedResultName":"GPT-4O-MINI"},"options":{},"responses":{"values":[{"content":"=You are an expert assessment designer.\nGenerate structured exam questions based strictly on the provided material.\nReturn ONLY valid JSON with this format:\n\n{\n“mcq”: [\n{\n“question”: “”,\n“options”: {\n“A”: “”,\n“B”: “”,\n“C”: “”,\n“D”: “”\n},\n“answer”: “A”,\n“difficulty”: “”\n}\n],\n“essay”: [\n{\n“question”: “”,\n“expected_points”: “”,\n“difficulty”: “”\n}\n]\n}\n\nRules:\n\t•\tQuestions must strictly follow the requested difficulty level.\n\t•\tAvoid generic or vague questions.\n\t•\tDo not include explanations outside JSON.\n\n⸻\n\nUSER PROMPT dynamic:\n\nMaterial:\n{{ $json.cleaned_text }}\nGenerate:\n\t•\t{{ $('Webhook').item.json.body.mcq_count }} multiple choice questions\n\t•\t{{ $('Webhook').item.json.body.essay_count }} essay questions\nDifficulty: {{ $('Webhook').item.json.body.difficulty }}\nLanguage: {{ $('Webhook').item.json.body.language }}"}]},"builtInTools":{}},"credentials":{"openAiApi":{"id":"credential-id","name":"OpenAi account"}},"typeVersion":2.1},{"id":"fed1bbb3-7548-47eb-8f1b-da99de9be2b6","name":"Parse JSON","type":"n8n-nodes-base.code","position":[480,656],"parameters":{"jsCode":"\nlet raw = $input.first().json.output[0].content[0].text\n//let raw = $json.choices?.[0]?.message?.content || \"\";\n\n// Hapus markdown code block jika ada\nraw = raw.replace(/```json/g, \"\")\n         .replace(/```/g, \"\")\n         .trim();\n\nlet parsed;\n\ntry {\n  parsed = JSON.parse(raw);\n} catch (error) {\n  throw new Error(\"Invalid JSON from OpenAI. Please check prompt structure.\");\n}\n\nreturn [\n  {\n    json: parsed\n  }\n];"},"typeVersion":2},{"id":"273dfa0f-5e1c-47b1-985c-235da64a6463","name":"Clean Text","type":"n8n-nodes-base.code","position":[672,48],"parameters":{"jsCode":"// Ambil text hasil extract PDF\nlet text = $json.text || $json.data || \"\";\n\n// Pastikan string\ntext = String(text);\n\n// Hilangkan karakter aneh non-printable\ntext = text.replace(/[^\\x20-\\x7E\\n\\r]/g, \"\");\n\n// Hilangkan newline berlebihan\ntext = text.replace(/\\n\\s*\\n/g, \"\\n\");\n\n// Hilangkan spasi ganda\ntext = text.replace(/\\s+/g, \" \");\n\n// Trim\ntext = text.trim();\n\n// Batasi panjang (misal 15.000 karakter untuk safety)\nconst MAX_LENGTH = 15000;\n\nif (text.length > MAX_LENGTH) {\n  text = text.substring(0, MAX_LENGTH);\n}\n\nreturn [\n  {\n    json: {\n      cleaned_text: text\n    }\n  }\n];"},"typeVersion":2},{"id":"0e4eb4a7-25d6-49eb-9106-af82daf5209c","name":"Convert HTML to PDF - Exam","type":"n8n-nodes-htmlcsstopdf.htmlcsstopdf","position":[-112,1264],"parameters":{"html_content":"={{ $json.exam_html }}"},"credentials":{"htmlcsstopdfApi":{"id":"credential-id","name":"HTML to PDF account"}},"typeVersion":1},{"id":"8cd1950a-7eba-42e5-8903-d3becd42f2bc","name":"Convert HTML to PDF - Answer","type":"n8n-nodes-htmlcsstopdf.htmlcsstopdf","position":[-112,1072],"parameters":{"html_content":"={{ $json.answer_key_html }}"},"credentials":{"htmlcsstopdfApi":{"id":"credential-id","name":"HTML to PDF account"}},"typeVersion":1},{"id":"c8dabac7-0bfc-411b-97c7-0f6c21dcc379","name":"Send a text message","type":"n8n-nodes-base.telegram","position":[128,1264],"webhookId":"55c1d2b0-729e-492c-be73-8eb4f1bb68fc","parameters":{"text":"=Download Exam Here : {{ $json.pdf_url }}","chatId":"123456789","additionalFields":{}},"credentials":{"telegramApi":{"id":"credential-id","name":"EngineN8N"}},"typeVersion":1.2},{"id":"5216e3ac-c362-41f1-94a8-e497ae747183","name":"Send a text message1","type":"n8n-nodes-base.telegram","position":[128,1072],"webhookId":"38f12abf-19da-4247-8b80-eb2725b04220","parameters":{"text":"=Download Answer Here : {{ $json.pdf_url }}","chatId":"123456789","additionalFields":{}},"credentials":{"telegramApi":{"id":"credential-id","name":"EngineN8N"}},"typeVersion":1.2},{"id":"ba6d1641-7c82-4cc7-a89d-b4438b6e8c53","name":"Length Estimation Layer","type":"n8n-nodes-base.code","position":[880,48],"parameters":{"jsCode":"const text = $input.first().json.cleaned_text;\n\nconst estimatedTokens = Math.ceil(text.length / 4);\n\nconst MAX_TOKENS = 8000; // batas aman V1\n\nif (estimatedTokens > MAX_TOKENS) {\n  return [\n    {\n      json: {\n        error: true,\n        message: \"Document too long. Please upload a shorter PDF (recommended max 15–20 pages).\",\n        estimated_tokens: estimatedTokens\n      }\n    }\n  ];\n}\n\nreturn [\n  {\n    json: {\n      error : false,\n      cleaned_text: text,\n      estimated_tokens: estimatedTokens\n    }\n  }\n];"},"typeVersion":2},{"id":"67befabc-06a2-4518-a83a-f7c628c2f645","name":"Validate Token > 8.000","type":"n8n-nodes-base.if","position":[1104,48],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"150959fd-bbc5-4a83-a84d-45ece3122634","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.error }}","rightValue":true}]}},"typeVersion":2.2},{"id":"fdc5097a-d54c-4960-b95e-906a58b11405","name":"Format Exam Text","type":"n8n-nodes-base.code","position":[736,656],"parameters":{"jsCode":"const mcq = $input.first().json.mcq || [];\nconst essay = $input.first().json.essay || [];\n\nlet examText = \"\";\nlet answerKey = \"\";\n\nexamText += \"<h1>Exam Paper</h1><hr>\";\n\n/* =======================\n   MULTIPLE CHOICE\n======================= */\n\nif (mcq.length > 0) {\n  examText += \"<h2>Multiple Choice Questions</h2>\";\n\n  mcq.forEach((q, index) => {\n    examText += `<p><strong>${index + 1}. ${q.question}</strong></p>`;\n    examText += `<p>A. ${q.options?.A || \"\"}</p>`;\n    examText += `<p>B. ${q.options?.B || \"\"}</p>`;\n    examText += `<p>C. ${q.options?.C || \"\"}</p>`;\n    examText += `<p>D. ${q.options?.D || \"\"}</p>`;\n  });\n\n  answerKey += \"<h2>Answer Key - MCQ</h2>\";\n  mcq.forEach((q, index) => {\n    answerKey += `<p>${index + 1}. ${q.answer}</p>`;\n  });\n}\n\n/* =======================\n   ESSAY\n======================= */\n\nif (essay.length > 0) {\n  examText += \"<hr><h2>Essay Questions</h2>\";\n\n  essay.forEach((q, index) => {\n    examText += `<p><strong>${index + 1}. ${q.question}</strong></p>`;\n  });\n\n  answerKey += \"<hr><h2>Answer Guide - Essay</h2>\";\n  essay.forEach((q, index) => {\n    answerKey += `<p><strong>${index + 1}.</strong> ${q.expected_points || \"\"}</p>`;\n  });\n}\n\nreturn [\n  {\n    json: {\n      exam_html: examText,\n      answer_key_html: answerKey\n    }\n  }\n];"},"typeVersion":2},{"id":"c6bb4cc0-c14e-4ccb-baa4-ab9048546cbb","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-1040,-448],"parameters":{"width":784,"height":2496,"content":"# 🚀 ExamForge AI\n### Automated PDF to Structured Exam Generator (MCQ + Essay + Answer Key)\n\nGenerate structured exams automatically from text-based PDF materials using AI.\n\nExamForge AI is a production-ready n8n workflow that transforms educational content into multiple-choice and essay questions with customizable difficulty and automatic answer key generation.\n---\n# ✨ Features\n\n- 📄 Upload PDF via Webhook\n- ✅ File size validation (default: max 5MB)\n- 🧹 Automatic text cleaning\n- 📏 Token length estimation & safety control\n- 🎯 Customizable MCQ & Essay count\n- 🧠 Difficulty selection (easy / medium / hard)\n- 🌍 Language selection\n- 📦 Structured JSON AI output\n- 📝 Separate Exam PDF & Answer Key PDF\n- 📲 Telegram delivery support (optional)\n- 🔒 Parameter validation with structured error responses\n---\n# 🧠 What This Workflow Does\n\n1. Accepts PDF upload via Webhook\n2. Validates file size\n3. Extracts and cleans text content\n4. Estimates text length to prevent token overflow\n5. Validates required parameters:\n   - `mcq_count`\n   - `essay_count`\n   - `difficulty`\n   - `language`\n6. Sends structured prompt to OpenAI\n7. Parses JSON response\n8. Formats exam and answer key separately\n9. Converts both into PDF\n10. Sends results via Telegram or Webhook response\n\n---\n\n# ⚙️ Requirements\n\n## Accounts Required\n\n- OpenAI account (API key required)\n- Telegram Bot (optional)\n- PDF Munk (API key required)\n\n## Environment\n\n- n8n (self-hosted or cloud)\n- Node version compatible with your n8n installation\n\n---\n\n# 🔑 Credentials Setup\n\n## 1️⃣ OpenAI\n\n- Add OpenAI credentials inside n8n\n- Insert your API key\n- Select preferred model (e.g., GPT-4o / GPT-4)\n\n## 2️⃣ Telegram (Optional)\n\n- Create a Telegram Bot via BotFather\n- Insert Bot Token into Telegram node\n- Add your Chat ID\n\n---\n\n# 🛠 Webhook Configuration\n\n**Method:** POST  \n**Content-Type:** multipart/form-data  \n\n## Required Parameters\n\n| Parameter     | Type   | Required | Description |\n|--------------|--------|----------|-------------|\n| file         | File   | Yes      | PDF document |\n| mcq_count    | Number | Yes      | Number of multiple-choice questions |\n| essay_count  | Number | Yes      | Number of essay questions |\n| difficulty   | String | Yes      | easy / medium / hard |\n| language     | String | Yes      | Output language |\n\n---\n\n# 📥 Example Request\n\n```bash\ncurl -X POST https://your-n8n-domain/webhook/examforge \\\n  -F \"file=@document.pdf\" \\\n  -F \"mcq_count=20\" \\\n  -F \"essay_count=5\" \\\n  -F \"difficulty=medium\" \\\n  -F \"language=Indonesian\""},"typeVersion":1},{"id":"9583f719-e279-4e99-8a1b-ba67556f3609","name":"Respond Valid Parameter","type":"n8n-nodes-base.respondToWebhook","position":[496,272],"parameters":{"options":{},"respondWith":"json","responseBody":"={\n  \"status\": \"error\",\n  \"message\": \"Invalid parameters\",\n  \"details\":\"{{ $json.errors }}\"\n} "},"typeVersion":1.4},{"id":"7e297b7a-6cb0-480c-9c4b-2184b7338c9b","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-208,-112],"parameters":{"color":7,"width":1712,"height":528,"content":"## Step 1 : Get File, Parsing and Validation file PDF\n"},"typeVersion":1},{"id":"d66457fe-5bc6-45f1-8418-bc24157d9f21","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[1296,32],"parameters":{"options":{},"respondWith":"json","responseBody":"{\n  \"status\": \"error\",\n  \"message\": \"Invalid size upload\",\n  \"details\":\"Document too long. Please upload a shorter PDF (recommended max 15–20 pages).\"\n} "},"typeVersion":1.4},{"id":"de840513-497b-433a-9323-6823780e16dd","name":"Condition Valid","type":"n8n-nodes-base.if","position":[256,64],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"87665a50-4cd9-4cdd-a009-5eda14975f4f","operator":{"type":"boolean","operation":"equals"},"leftValue":"={{ $json.isValid }}","rightValue":true}]}},"typeVersion":2.2},{"id":"2e4212dd-5dd0-4ccc-b5d2-f72b88d0714c","name":"Validate Parameter & PDF","type":"n8n-nodes-base.code","position":[48,64],"parameters":{"jsCode":"const errors = [];\n\nconst mcq = $input.first().json.body.mcq_count\nconst essay = $input.first().json.body.essay_count;\nconst difficulty = $input.first().json.body.difficulty;\nconst language = $input.first().json.body.language;\n\nlet fileSize = $input.first().binary.data.fileSize\nlet size = String(fileSize).toLowerCase();\nlet fileSizeInBytes = parseInt(\n  size.includes('mb')\n    ? parseFloat(size) * 1024 * 1024\n    : size.includes('kb')\n      ? parseFloat(size) * 1024\n      : parseFloat(size)\n);\n\nif(fileSizeInBytes >=5242880){\n  errors.push(\"Files cannot be more than 5MB\");\n}\n\n// Check required fields\nif (!mcq) {\n  errors.push(\"mcq_count is required\");\n}\n\nif (!essay) {\n  errors.push(\"essay_count is required\");\n}\n\nif (!difficulty) {\n  errors.push(\"difficulty is required (easy | medium | hard)\");\n}\n\nif (!language) {\n  errors.push(\"language is required\");\n}\n\n// Validate numeric\nif (mcq && isNaN(mcq)) {\n  errors.push(\"mcq_count must be a number\");\n}\n\nif (essay && isNaN(essay)) {\n  errors.push(\"essay_count must be a number\");\n}\n\n// Validate difficulty value\nconst allowedDifficulty = [\"easy\", \"medium\", \"hard\"];\nif (difficulty && !allowedDifficulty.includes(difficulty)) {\n  errors.push(\"difficulty must be: easy, medium, or hard\");\n}\n\nif (mcq && mcq > 50) {\n  errors.push(\"mcq_count maximum is 50\");\n}\n\nif (essay && essay > 50) {\n  errors.push(\"essay_count maximum is 20\");\n}\n\nreturn [{\n  json: {\n    isValid: errors.length === 0,\n    errors: errors,\n    mcq_count: mcq,\n    essay_count: essay,\n    difficulty: difficulty,\n    language: language,\n    data : $input.first().binary.data\n  }\n}];"},"typeVersion":2},{"id":"21c3c2a2-3946-4af1-a440-7949234949fc","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-208,432],"parameters":{"color":7,"width":1712,"height":528,"content":"## Step 2: Generate Exam and Answer\n"},"typeVersion":1},{"id":"b3207d61-69a1-41ec-ad30-7bb936b858b9","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[-208,992],"parameters":{"color":7,"width":1712,"height":528,"content":"## Step 3: Convert HTML to PDF and Send Telegram\n"},"typeVersion":1}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"ad5f5885-5354-47d3-84e4-2231777429f5","connections":{"Webhook":{"main":[[{"node":"Validate Parameter & PDF","type":"main","index":0}]]},"Clean Text":{"main":[[{"node":"Length Estimation Layer","type":"main","index":0}]]},"Parse JSON":{"main":[[{"node":"Format Exam Text","type":"main","index":0}]]},"Condition Valid":{"main":[[{"node":"Extract from File","type":"main","index":0}],[{"node":"Respond Valid Parameter","type":"main","index":0}]]},"Message a model":{"main":[[{"node":"Parse JSON","type":"main","index":0}]]},"Format Exam Text":{"main":[[{"node":"Convert HTML to PDF - Exam","type":"main","index":0},{"node":"Convert HTML to PDF - Answer","type":"main","index":0}]]},"Extract from File":{"main":[[{"node":"Clean Text","type":"main","index":0}]]},"Respond to Webhook":{"main":[[]]},"Validate Token > 8.000":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}],[{"node":"Message a model","type":"main","index":0}]]},"Length Estimation Layer":{"main":[[{"node":"Validate Token > 8.000","type":"main","index":0}]]},"Validate Parameter & PDF":{"main":[[{"node":"Condition Valid","type":"main","index":0}]]},"Convert HTML to PDF - Exam":{"main":[[{"node":"Send a text message","type":"main","index":0}]]},"Convert HTML to PDF - Answer":{"main":[[{"node":"Send a text message1","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":20,"nodeTypes":{"n8n-nodes-base.if":{"count":2},"n8n-nodes-base.code":{"count":5},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.telegram":{"count":2},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.extractFromFile":{"count":1},"@n8n/n8n-nodes-langchain.openAi":{"count":1},"n8n-nodes-base.respondToWebhook":{"count":2},"n8n-nodes-htmlcsstopdf.htmlcsstopdf":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"Ramdoni","username":"ramdoni","bio":"Automation engineer and backend developer specializing in workflow automation, API integrations, and scalable backend systems.\n\nI build practical automation solutions using n8n, focusing on real-world business use cases such as data processing, notifications, reporting, and approval workflows. My background in PHP, Laravel, and system architecture allows me to design workflows that are reliable, maintainable, and production-ready.","verified":true,"links":["https://www.linkedin.com/in/ram-doni-0554584a/"],"avatar":"https://gravatar.com/avatar/752716fd15bce611db203b00d64b395032b568b162c46f95ac359e5b46c6ada7?r=pg&d=retro&size=200"},"nodes":[{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":1235,"icon":"file:extractFromFile.svg","name":"n8n-nodes-base.extractFromFile","codex":{"data":{"alias":["CSV","Spreadsheet","Excel","xls","xlsx","ods","tabular","decode","decoding","Move Binary Data","Binary","File","PDF","JSON","HTML","ICS","iCal","txt","Text","RTF","XML","64","Base64","Convert"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.extractfromfile/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Files","Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Extract from File"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTAuOTM3NSAyQzAuNDE5NzMzIDIgMCAyLjQxOTczIDAgMi45Mzc1VjM3LjMyMjFDMCAzNy44Mzk5IDAuNDE5NzMzIDM4LjI1OTYgMC45Mzc1IDM4LjI1OTZIMjYuMjE1NEMyNi43MzMyIDM4LjI1OTYgMjcuMTUyOSAzNy44Mzk5IDI3LjE1MjkgMzcuMzIyMUwyNy4xNTI5IDMwLjY3MTlMMTYuNzk2OSAzMC42NzE5QzE0Ljg5ODQgMzAuNjcxOSAxMy4zNTk0IDI5LjEzMjkgMTMuMzU5NCAyNy4yMzQ0VjI1LjM1OTRDMTMuMzU5NCAyMy40NjA5IDE0Ljg5ODQgMjEuOTIxOSAxNi43OTY5IDIxLjkyMTlIMjcuMTUyOUwyNy4xNTI5IDE1Ljc4MjFIMTQuMzA4M0MxMy43OTA2IDE1Ljc4MjEgMTMuMzcwOCAxNS4zNjI0IDEzLjM3MDggMTQuODQ0NlYySDAuOTM3NVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTE2LjAyNzEgMkMxNS45NDA4IDIgMTUuODcwOCAyLjA2OTk2IDE1Ljg3MDggMi4xNTYyNVYxMi44MTM0QzE1Ljg3MDggMTMuMDcyMyAxNi4wODA3IDEzLjI4MjEgMTYuMzM5NiAxMy4yODIxSDI2Ljk5NjdDMjcuMDgzIDEzLjI4MjEgMjcuMTUyOSAxMy4yMTIyIDI3LjE1MjkgMTMuMTI1OUwyNy4xNTI5IDEyLjYxNzFDMjcuMTUyOSAxMi4zNjg4IDI3LjA1NDUgMTIuMTMwNyAyNi44NzkxIDExLjk1NUwxNy4yMjI1IDIuMjc1MzhDMTcuMDQ2NiAyLjA5OTA4IDE2LjgwNzkgMiAxNi41NTg4IDJIMTYuMDI3MVoiIGZpbGw9IiMzNTNGNkUiLz4KPHBhdGggZD0iTTI5Ljc2NDIgMzQuNjUwM0MyOS4wMzQgMzMuOTE2IDI5LjAzNzQgMzIuNzI4OCAyOS43NzE2IDMxLjk5ODZMMzMuNjE5NyAyOC4xNzE5TDE2Ljc5NjkgMjguMTcxOUMxNi4yNzkxIDI4LjE3MTkgMTUuODU5NCAyNy43NTIxIDE1Ljg1OTQgMjcuMjM0NFYyNS4zNTk0QzE1Ljg1OTQgMjQuODQxNiAxNi4yNzkxIDI0LjQyMTkgMTYuNzk2OSAyNC40MjE5TDMzLjU0MTIgMjQuNDIxOUwyOS43NzE2IDIwLjY3MzNDMjkuMDM3NCAxOS45NDMxIDI5LjAzNCAxOC43NTU5IDI5Ljc2NDIgMTguMDIxNkMzMC40OTQ0IDE3LjI4NzQgMzEuNjgxNiAxNy4yODQgMzIuNDE1OSAxOC4wMTQyTDM5LjQ0NzEgMjUuMDA2NEMzOS44MDEgMjUuMzU4MyA0MCAyNS44MzY4IDQwIDI2LjMzNTlDNDAgMjYuODM1IDM5LjgwMSAyNy4zMTM1IDM5LjQ0NzEgMjcuNjY1NUwzMi40MTU5IDM0LjY1NzZDMzEuNjgxNiAzNS4zODc4IDMwLjQ5NDQgMzUuMzg0NSAyOS43NjQyIDM0LjY1MDNaIiBmaWxsPSIjMzUzRjZFIi8+Cjwvc3ZnPgo="},"displayName":"Extract from File","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1250,"icon":"file:openAi.svg","name":"@n8n/n8n-nodes-langchain.openAi","codex":{"data":{"alias":["LangChain","ChatGPT","Sora","DallE","whisper","audio","transcribe","tts","assistant"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenAI"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg1IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NiAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MSA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K"},"displayName":"OpenAI","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":35,"name":"Document Extraction"},{"id":49,"name":"AI Summarization"}],"image":[]}}