{"workflow":{"id":14252,"name":"Extract Indonesian stock (IDX) trades from Telegram invoices with Gemini AI","views":3,"recentViews":0,"totalViews":3,"createdAt":"2026-03-22T20:44:49.198Z","description":"Automatically extract stock transactions from Indonesian broker trade confirmation documents sent via Telegram using AI vision.\n\nHow it works:\n\nSend a PDF or image of your broker trade confirmation to the bot. The workflow downloads the file, encodes it, and sends it to OpenRouter (Gemini) for AI extraction. All detected transactions are displayed in a single confirmation message with ✅ Save All / ❌ Cancel buttons. The extracted data is stored temporarily using workflow static data, ready to be forwarded to any destination on confirm.\n\nFeatures:\n\nSupports PDF and image (JPG, PNG, screenshot)\nHandles multi-transaction documents — all shown in one batch confirmation\nIndonesian market aware — quantity in lots (1 lot = 100 shares)\nExtracts: ticker, company name, type, quantity, price, fee, total, date, broker, confidence score\nLow-confidence extractions handled gracefully\nModular — connect the confirm output to any node (HTTP Request, Google Sheets, Airtable, Notion, database, etc.)\nRequired credentials:\n\nTelegram account — your bot token from BotFather\nOpenRouter API — Header Auth credential (Authorization: Bearer sk-or-v1-...)\nSetup:\n\nImport workflow\nAdd credentials\nExpose n8n via HTTPS (Cloudflare Tunnel, ngrok, or public server)\nActivate workflow — webhook registers automatically\nSend a broker PDF to your bot\nDefault model: google/gemini-2.5-flash-lite via OpenRouter (free tier available)","workflow":{"id":"lclnPF994zvSrslv","meta":{"instanceId":"83b5b39af94774f715a74e64f0e68127b8319c739fedf49c33f86ac54f3c7fc2","templateCredsSetupCompleted":true},"name":"Indonesian Stock (IDX) Invoice Reader","tags":[],"nodes":[{"id":"fbb15b1c-2856-480e-b324-1bda0624c0a3","name":"Sticky Note - Overview","type":"n8n-nodes-base.stickyNote","position":[-400,352],"parameters":{"width":460,"height":724,"content":"## 🇮🇩 Indonesian Stock (IDX) Invoice Reader\n\nAutomatically extract stock transactions from Indonesian broker trade confirmations sent via Telegram.\n\n### How it works\n1. Send a broker PDF or image to your Telegram bot\n2. The file is downloaded and encoded as base64\n3. OpenRouter (Gemini) extracts all transactions as structured JSON\n4. A single batch confirmation is sent with ✅ / ❌ buttons\n5. On confirm, the structured data is output — connect to any destination node\n\n### Setup\n1. Create a bot via BotFather → add **Telegram account** credential\n2. Get an OpenRouter API key → add **Header Auth** credential named **OpenRouter API** with value `Authorization: Bearer sk-or-...`\n3. Expose n8n via HTTPS (Cloudflare Tunnel, ngrok, or a public server)\n4. Activate the workflow — Telegram webhook registers automatically\n\n### Customization\nSwap the **Send Confirmation** output to any destination (HTTP Request, Google Sheets, Airtable, etc.). Change the model in **Build Request** — default is `google/gemini-2.5-flash-lite`."},"typeVersion":1},{"id":"2ce04cd4-03ed-4d90-97f4-c40460b2e9d1","name":"Sticky Note - Message Intake","type":"n8n-nodes-base.stickyNote","position":[112,400],"parameters":{"color":7,"width":680,"height":320,"content":"## 📨 Message Intake\nReceives all Telegram updates (messages and button callbacks), parses the incoming data, and routes file uploads to the processing branch."},"typeVersion":1},{"id":"d200c299-1aca-4de9-b1ac-358629c16d36","name":"Sticky Note - File Processing","type":"n8n-nodes-base.stickyNote","position":[768,768],"parameters":{"color":7,"width":660,"height":304,"content":"## 📁 File Processing\nDownloads the file from Telegram servers, reads the binary data, and encodes it as base64 ready for the AI request."},"typeVersion":1},{"id":"d8110936-d046-41fc-bb9c-9e0c7e13b594","name":"Sticky Note - AI Extraction","type":"n8n-nodes-base.stickyNote","position":[1344,416],"parameters":{"color":7,"width":660,"height":304,"content":"## 🤖 AI Extraction\nBuilds the OpenRouter request (PDF or image format), calls Gemini, and parses the JSON array of transactions from the response."},"typeVersion":1},{"id":"064977ba-9df1-417d-b95d-b6b1a6bd81f4","name":"Sticky Note - Confirmation","type":"n8n-nodes-base.stickyNote","position":[2048,768],"parameters":{"color":7,"width":660,"height":476,"content":"## ✅ Confirmation\nGroups all extracted transactions into a batch, stores them temporarily in workflow static data, and sends a confirmation message with Save All / Cancel buttons."},"typeVersion":1},{"id":"e5b0a373-003c-4cb8-90b4-d58eaf3b66f0","name":"Route Type1","type":"n8n-nodes-base.switch","position":[592,544],"parameters":{"rules":{"values":[{"outputKey":"callback","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"1a3a40ba-e140-46bd-b339-f26348495875","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.is_callback }}"}]},"renameOutput":true},{"outputKey":"file","conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"4dff4173-e945-44ee-a450-4e01bd94eee2","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.has_file }}"}]},"renameOutput":true}]},"options":{"fallbackOutput":"extra"}},"typeVersion":3},{"id":"387a2288-194f-43eb-80a4-461ffe675758","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[176,560],"webhookId":"2708bf4c-d9cd-4b7c-8e4a-651fe2a09686","parameters":{"updates":["message","callback_query"],"additionalFields":{}},"typeVersion":1.1},{"id":"abdc6eac-5b1b-44f1-8da9-5a78eb56a5fc","name":"Parse Message","type":"n8n-nodes-base.code","position":[384,560],"parameters":{"jsCode":"const update = $input.first().json;\n\n// Handle callback_query (button tap)\nif (update.callback_query) {\n  const cq = update.callback_query;\n  return {\n    json: {\n      is_callback: true,\n      has_file: false,\n      command: '',\n      callback_id: cq.id,\n      callback_data: cq.data || '',\n      chat_id: cq.message.chat.id,\n      message_id: cq.message.message_id,\n      username: cq.from.first_name || cq.from.username || 'there'\n    }\n  };\n}\n\n// Handle regular message\nconst msg = update.message;\nconst hasFile = msg.document !== undefined || msg.photo !== undefined;\nconst text = (msg.text || '').trim();\nconst chatId = msg.chat.id;\nconst username = msg.from.first_name || msg.from.username || 'there';\n\nlet command = '';\nlet args = '';\n\nif (!hasFile && text.startsWith('/')) {\n  const parts = text.split(' ');\n  command = parts[0].toLowerCase().replace(/@.*$/, '');\n  args = parts.slice(1).join(' ').trim();\n}\n\nreturn {\n  json: {\n    is_callback: false,\n    has_file: hasFile,\n    command,\n    args,\n    text,\n    chat_id: chatId,\n    username,\n    file_id: msg.document?.file_id || (msg.photo ? msg.photo[msg.photo.length - 1].file_id : null),\n    filename: msg.document?.file_name || 'invoice.pdf',\n    mime_type: msg.document?.mime_type || 'image/jpeg'\n  }\n};"},"typeVersion":2},{"id":"f48db73a-00ea-42f4-80b9-09e6fddbea52","name":"Extract File Info","type":"n8n-nodes-base.code","position":[832,928],"parameters":{"jsCode":"const data = $input.first().json;\nreturn {\n  json: {\n    file_id: data.file_id,\n    filename: data.filename,\n    mime_type: data.mime_type,\n    chat_id: data.chat_id,\n    username: data.username\n  }\n};"},"typeVersion":2},{"id":"ed99dc61-6ff0-4d91-92a5-4c2747906d7e","name":"Download File","type":"n8n-nodes-base.telegram","position":[1024,928],"webhookId":"e7d2e437-a458-41d9-bbec-78ff2d49c66d","parameters":{"fileId":"={{ $json.file_id }}","resource":"file","additionalFields":{}},"typeVersion":1.2},{"id":"0c36dfa0-859a-4fc6-a5ed-3a9004402752","name":"Prepare File","type":"n8n-nodes-base.code","position":[1232,928],"parameters":{"jsCode":"const fileInfo = $('Extract File Info').first().json;\n\n// Read binary from filesystem (binaryDataMode: filesystem)\nconst binaryBuffer = await this.helpers.getBinaryDataBuffer(0, 'data');\nconst base64Data = binaryBuffer.toString('base64');\n\nreturn {\n  json: {\n    file_base64: base64Data,\n    mime_type: fileInfo.mime_type,\n    filename: fileInfo.filename,\n    chat_id: fileInfo.chat_id,\n    username: fileInfo.username,\n    received_at: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"a8e8d7f4-aa6b-4809-9c2c-0b46a3572134","name":"Build Request","type":"n8n-nodes-base.code","position":[1392,560],"parameters":{"jsCode":"const d = $input.first().json;\nconst isPdf = d.mime_type === 'application/pdf';\n\nconst fileContent = isPdf\n  ? {\n      type: 'file',\n      file: {\n        filename: d.filename,\n        file_data: `data:${d.mime_type};base64,${d.file_base64}`\n      }\n    }\n  : {\n      type: 'image_url',\n      image_url: { url: `data:${d.mime_type};base64,${d.file_base64}` }\n    };\n\nconst prompt = [\n  'You are a financial document parser for Indonesian stock broker trade confirmations.',\n  '',\n  'Extract ALL transactions. Return ONLY a raw JSON array — no markdown, no code blocks, no commentary.',\n  '',\n  'Output format (always an array):',\n  '[{\"ticker\":\"BBCA\",\"company_name\":\"Bank Central Asia\",\"type\":\"buy\",\"quantity\":10,\"price\":8950,\"fee\":25000,\"total_amount\":8950000,\"transaction_date\":\"2024-02-15\",\"broker\":\"Mandiri Sekuritas\",\"confidence\":0.95}]',\n  '',\n  'Rules:',\n  '- ticker: uppercase, no .JK suffix',\n  '- company_name: full company name as printed in the document. If not found, use \"unknown\"',\n  '- type: \"buy\" (pembelian/beli) or \"sell\" (penjualan/jual)',\n  '- quantity: LOTS only. 1 lot = 100 shares (lembar).',\n  '  If document has a lot column → use it directly.',\n  '  If document shows only shares → divide by 100.',\n  '  Example: \"308 lot\" → 308 | \"30.800 lembar\" → 308. NEVER return share count.',\n  '- price: price per share in IDR',\n  '- fee: broker commission in IDR',\n  '- total_amount: shares × price in IDR (before fee)',\n  '- transaction_date: YYYY-MM-DD',\n  '- confidence: 0.0–1.0 (below 0.7 if uncertain)',\n  '',\n  `Document: ${d.filename}`\n].join('\\n');\n\nconst payload = {\n  model: 'google/gemini-2.5-flash-lite',\n  temperature: 0,\n  max_tokens: 2048,\n  messages: [{\n    role: 'user',\n    content: [{ type: 'text', text: prompt }, fileContent]\n  }]\n};\n\nif (isPdf) {\n  payload.plugins = [{ id: 'file-parser', pdf: { engine: 'mistral-ocr' } }];\n}\n\nreturn {\n  json: {\n    chat_id: d.chat_id,\n    filename: d.filename,\n    mime_type: d.mime_type,\n    payload\n  }\n};"},"typeVersion":2},{"id":"9e925f68-de8f-43b0-87b4-2fa26ee6fea3","name":"OpenRouter Extract","type":"n8n-nodes-base.httpRequest","position":[1616,560],"parameters":{"url":"https://openrouter.ai/api/v1/chat/completions","method":"POST","options":{"timeout":30000},"jsonBody":"={{ $json.payload }}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","headerParameters":{"parameters":[{"name":"HTTP-Referer","value":"https://n8n.io"},{"name":"X-Title","value":"IDX Invoice Reader"}]}},"typeVersion":4.2},{"id":"0b0040e2-0827-44ad-947e-da4717ddf159","name":"Parse Invoice","type":"n8n-nodes-base.code","position":[1824,560],"parameters":{"jsCode":"const resp = $input.first().json;\nconst chatId = $('Build Request').first().json.chat_id;\nconst filename = $('Build Request').first().json.filename;\n\nlet raw = '';\ntry {\n  raw = resp.choices[0].message.content.trim();\n} catch(e) {\n  return [{ json: { error: true, error_message: 'No response from LLM', chat_id: chatId, filename } }];\n}\n\n// Strip markdown code blocks if present\nraw = raw.replace(/^```json\\s*/i, '').replace(/^```\\s*/i, '').replace(/\\s*```$/i, '').trim();\n\nlet parsed;\ntry {\n  parsed = JSON.parse(raw);\n} catch(e) {\n  return [{ json: { error: true, error_message: e.message, raw_response: raw, chat_id: chatId, filename } }];\n}\n\n// Normalize to array\nconst transactions = Array.isArray(parsed) ? parsed : [parsed];\n\n// Return one item per transaction so Format Confirmation receives all\nreturn transactions.map(t => ({\n  json: {\n    ticker: (t.ticker || '').toUpperCase().replace(/\\.JK$/i, ''),\n    company_name: t.company_name || 'unknown',\n    type: t.type || 'buy',\n    quantity: parseInt(t.quantity) || 0,\n    price: parseFloat(t.price) || 0,\n    fee: parseFloat(t.fee) || 0,\n    total_amount: parseFloat(t.total_amount) || 0,\n    transaction_date: t.transaction_date || '',\n    broker: t.broker || '',\n    confidence: parseFloat(t.confidence) || 0,\n    chat_id: chatId,\n    filename,\n    total_in_batch: transactions.length\n  }\n}));"},"typeVersion":2},{"id":"8f1b3f27-178c-475f-9878-5b4aaf0a48a1","name":"Invoice Error?","type":"n8n-nodes-base.if","position":[2096,992],"parameters":{"options":{},"conditions":{"options":{"version":1,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"a6faeb5d-74a6-4560-b020-3d1d50997cec","operator":{"type":"boolean","operation":"exists","singleValue":true},"leftValue":"={{ $json.error }}","rightValue":true}]}},"typeVersion":2},{"id":"04cd428b-e315-4d3a-91e0-3097e5c956e9","name":"Format Confirmation","type":"n8n-nodes-base.code","position":[2320,896],"parameters":{"jsCode":"const items = $input.all();\nconst chatId = items[0].json.chat_id;\nconst filename = items[0].json.filename;\nconst broker = items[0].json.broker || 'Broker';\nconst date = items[0].json.transaction_date || '';\n\n// Store batch in workflow static data (persists between executions)\nconst staticData = $getWorkflowStaticData('global');\nconst batchId = Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\nstaticData[`batch_${batchId}`] = items.map(i => i.json);\n\n// Build transaction lines\nlet totalAmount = 0;\nlet totalFee = 0;\nconst lines = items.map((item, idx) => {\n  const t = item.json;\n  const lots = t.quantity;\n  const typeEmoji = t.type === 'buy' ? '🟢' : '🔴';\n  const amount = t.total_amount || (lots * 100 * t.price);\n  totalAmount += amount;\n  totalFee += t.fee || 0;\n  return `${idx + 1}. ${typeEmoji} *${t.ticker}* (${t.company_name}) ${lots} lots @ Rp ${Number(t.price).toLocaleString('id-ID')} = Rp ${Number(amount).toLocaleString('id-ID')}`;\n});\n\nconst confirmData = `confirm_batch|${batchId}`;\nconst cancelData  = `cancel_batch|${batchId}`;\n\nreturn [{\n  json: {\n    chat_id: chatId,\n    text: `📄 *Trade Confirmation — ${date}*\\n🏦 ${broker}\\n📁 ${filename}\\n\\n${lines.join('\\n')}\\n\\n💸 Total: Rp ${Number(totalAmount).toLocaleString('id-ID')}\\n💳 Fee: Rp ${Number(totalFee).toLocaleString('id-ID')}\\n\\n*Save all ${items.length} transactions?*`,\n    reply_markup: [\n      { text: `✅ Save All (${items.length})`, callback_data: confirmData },\n      { text: '❌ Cancel',                     callback_data: cancelData  }\n    ]\n  }\n}];"},"typeVersion":2},{"id":"b951be47-0a1d-4efc-b396-1906b9383a87","name":"Send Confirmation","type":"n8n-nodes-base.telegram","position":[2560,896],"webhookId":"c75a1951-8467-4292-96c6-992c915f2c6d","parameters":{"text":"={{ $json.text }}","chatId":"={{ $json.chat_id }}","additionalFields":{}},"typeVersion":1.2},{"id":"1a01e12b-4e49-4ccf-abcd-e56bbc892059","name":"Reply Invoice Error","type":"n8n-nodes-base.telegram","position":[2336,1088],"webhookId":"6a89afae-0b3f-4a3d-b990-d0555c940e80","parameters":{"text":"=❌ Failed to read invoice: {{ $json.error_message }}\n\nPlease try again with a clearer PDF or image.","chatId":"={{ $json.chat_id }}","additionalFields":{}},"typeVersion":1.2}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","executionOrder":"v1"},"versionId":"f2d57045-290d-412e-8f4c-fc9a881c07e2","connections":{"Route Type1":{"main":[[],[{"node":"Extract File Info","type":"main","index":0}]]},"Prepare File":{"main":[[{"node":"Build Request","type":"main","index":0}]]},"Build Request":{"main":[[{"node":"OpenRouter Extract","type":"main","index":0}]]},"Download File":{"main":[[{"node":"Prepare File","type":"main","index":0}]]},"Parse Invoice":{"main":[[{"node":"Invoice Error?","type":"main","index":0}]]},"Parse Message":{"main":[[{"node":"Route Type1","type":"main","index":0}]]},"Invoice Error?":{"main":[[{"node":"Reply Invoice Error","type":"main","index":0}],[{"node":"Format Confirmation","type":"main","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Parse Message","type":"main","index":0}]]},"Extract File Info":{"main":[[{"node":"Download File","type":"main","index":0}]]},"OpenRouter Extract":{"main":[[{"node":"Parse Invoice","type":"main","index":0}]]},"Format Confirmation":{"main":[[{"node":"Send Confirmation","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":18,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":6},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.telegram":{"count":3},"n8n-nodes-base.stickyNote":{"count":5},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.telegramTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Andri Darnius","username":"drean95","bio":"","verified":false,"links":[""],"avatar":"https://gravatar.com/avatar/435a60540f9c954159ba1c293f8c168cf5a934940bdab3343bd7682dfb81b8e6?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"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/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"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/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/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"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/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"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/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"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/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"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/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"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-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"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/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"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"},{"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.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core 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":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":50,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegramTrigger","codex":{"data":{"resources":{"generic":[{"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/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-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/trigger-nodes/n8n-nodes-base.telegramtrigger/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\"]","defaults":{"name":"Telegram Trigger"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram Trigger","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"}]},{"id":112,"icon":"fa:map-signs","name":"n8n-nodes-base.switch","codex":{"data":{"alias":["Router","If","Path","Filter","Condition","Logic","Branch","Case"],"resources":{"generic":[{"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/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/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.switch/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"Switch","color":"#506000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"Switch","typeVersion":3,"nodeCategories":[{"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"}]}],"categories":[{"id":34,"name":"Invoice Processing"},{"id":49,"name":"AI Summarization"}],"image":[]}}