{"workflow":{"id":13446,"name":"Get multimodal AI dating advice on Telegram with Google Gemini and Sheets","views":106,"recentViews":1,"totalViews":106,"createdAt":"2026-02-17T03:19:43.295Z","description":"## **Rizz AI: The Multimodal Dating Assistant 💘**\n\n**Rizz AI** is not just a chatbot; it's a full-featured, AI-powered **CRM for your dating life**. \n\nBuilt entirely in n8n, this workflow turns Telegram into a powerful \"Wingman\" that helps you craft the perfect reply, remember details about your matches, and optimize your dating strategy using **Google Gemini 1.5 Pro**.\n\n![Chat Response Example](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/ChatResponse.png)\n\n### **🔥 Key Features**\n*   **👁️ Multimodal Vision:** Send a screenshot of a Tinder/Hinge profile or a WhatsApp chat, and the AI will analyze the text, subtext, and vibe to give you tactical advice.\n*   **🗣️ Audio Analysis:** Forward voice notes, and the AI will transcribe and analyze the tone to tell you if they are interested.\n*   **🧠 Long-Term Memory:** Remembers details about specific matches (e.g., \"Sofia likes sushi\") so you don't ask the same thing twice.\n*   **📊 Lead Management (CRM):** Automatically tracks matching stage, interest level, and next steps in Google Sheets.\n*   **🎨 Personalized Style:** Adapts advice to your specific \"Rizz Style\" (e.g., Mystery, Direct, Funny) defined in your profile.\n\n![Menu Response Example](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/MenuResponse.png)\n\n### **🛠️ How It Works**\n1.  **Ingest:** You send text, audio, or images to your private Telegram Bot.\n2.  **Process:** The workflow routes the input through **Gemini Vision** (for images) or **Whisper/Gemini** (for audio).\n3.  **Retrieve:** It queries your **Google Sheet** to see if this person is a new lead or an existing match.\n4.  **Reason:** The **AI Agent** (with tools) decides the best move: suggesting a reply, logging a red flag, or scheduling a date.\n5.  **Respond:** You receive 3 draft options to copy-paste directly into your dating app.\n\n### **📋 Setup Instructions**\n\n#### **1. Google Sheets (Database)**\n*   Make a copy of the **[Rizz AI Database Template](https://docs.google.com/spreadsheets/d/1JxoahgYNHc6nuWJ-VOsHlEzaKYxnksGFeYA0TKE4lWo/edit?usp=sharing)**.\n*   Share/Connect your Google Drive credential in n8n.\n*   Update the **Sheet ID** in the `Get Rizzler Profile` and other Sheet nodes.\n\n#### **2. Telegram Bot**\n*   Talk to @BotFather on Telegram to create a new bot.\n*   Copy the **API Token** into the Telegram Trigger and Send Message nodes.\n\n#### **3. Google Gemini**\n*   Get a free API Key from [Google AI Studio](https://aistudio.google.com/).\n*   Connect it to the **Google Gemini Chat Model** node.\n\n![Profile Response Example](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/ProfileResoponce.png)\n\n### **💡 Need Assistance?**\nIf you’d like help customizing or extending this workflow, feel free to reach out:\n\n*   📧 **Email:** [johnsilva11031@gmail.com](mailto:johnsilva11031@gmail.com)\n*   🔗 **LinkedIn:** [John Alejandro Silva Rodríguez](https://www.linkedin.com/in/john-alejandro-silva-rodriguez-48093526b/)\n","workflow":{"meta":{"instanceId":"f4f03bff2fcea644128ded7835e3a8cd3eaeebd8b5f3567bd2a7fe4ea7560d30","templateId":"7756","templateCredsSetupCompleted":true},"nodes":[{"id":"c142f5dd-fbeb-4b25-a0fe-f684546e6eff","name":"Download Voice Message","type":"n8n-nodes-base.telegram","position":[2144,1072],"webhookId":"d3e9d36d-6402-45d6-9f56-5886e616f9fa","parameters":{"fileId":"={{ $('Telegram Trigger').item.json.message.voice.file_id }}","resource":"file","additionalFields":{}},"credentials":{"telegramApi":{"id":"WRh7zajkRFlqzT9s","name":"Pruebas"}},"typeVersion":1.2},{"id":"68f15a08-cbe2-4ad9-9cfe-8b7a7c60787c","name":"get_message (text)","type":"n8n-nodes-base.set","position":[2144,912],"parameters":{"options":{},"assignments":{"assignments":[{"id":"801ec600-22ad-4a94-a2b4-ae72eb271df0","name":"message","type":"string","value":"={{ $('Telegram Trigger').item.json.message.text }}"},{"id":"263071fb-bcdf-42b0-bb46-71b75fa0bf2a","name":"chat_id","type":"string","value":"={{ $('Telegram Trigger').item.json.message.chat.id }}"}]}},"typeVersion":3.4},{"id":"b975dcce-68d8-4e3d-b50e-330f3f63812d","name":"Analyze image","type":"@n8n/n8n-nodes-langchain.googleGemini","maxTries":3,"position":[2368,1248],"parameters":{"text":"=You are a Dating Forensics & Social Dynamics Expert. Think like a high-end dating coach and behavioral analyst. Reason silently and do not reveal your steps. From a single screenshot (Dating App Profile or Chat Interface), identify the context, extract key data, and analyze the \"vibe\" to give a strategic summary.\n\nAnalysis method (internal only; do not output these steps)\n\n1. Identify Context: Is this a Profile (Tinder/Bumble/Hinge bio) or a Conversation (WhatsApp/iMessage/App Chat)?\n2. Extract Identity: Look for the name in the header (top center). If ambiguous, look for the name in the text.\n3. Extract Data (Profile):\n   - Age, Job, School, Distance.\n   - Bio text (OCR).\n   - Visual Cues: Analyze photos for hobbies (gym, travel, pets), style (casual, formal), and red/green flags.\n4. Extract Data (Chat):\n   - Identify the \"Other Person\" (gray bubbles/left side) vs \"Me\" (blue/green bubbles/right side).\n   - Transcribe the last 3-4 exchanges to understand the current flow.\n   - Determine Sentiment: Is it dry, flirty, angry, or eager?\n5. Formulate Strategy: Based on the data, what is the best opening line or reply?\n\nOutput rules (must follow exactly)\n\n- Plain text only.\n- Use this exact structure and field order.\n- No markdown formatting (no bolding, no italics), no JSON.\n- If a field is missing, write \"Unknown\".\n\nContext: [Profile or Chat]\nName: [Name of the match]\nDetails: [Age, Job, or Platform]\nContent: [The Bio text OR The transcript of the last few messages]\nVisuals: [Description of photos/vibe OR \"N/A\" if chat]\nSentiment: [Cold/Warm/Hot/Neutral]\nSuggested Angle: [One sentence tactical advice]","modelId":{"__rl":true,"mode":"list","value":"models/gemini-3-flash-preview","cachedResultName":"models/gemini-3-flash-preview"},"options":{},"resource":"image","inputType":"binary","operation":"analyze"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"retryOnFail":true,"typeVersion":1,"waitBetweenTries":2000},{"id":"04b43855-1600-424d-a2ae-458fb72a0525","name":"Analyze voice message","type":"@n8n/n8n-nodes-langchain.googleGemini","position":[2368,1072],"parameters":{"text":"What's in this audio message from telegram user?","modelId":{"__rl":true,"mode":"list","value":"models/gemini-3-flash-preview","cachedResultName":"models/gemini-3-flash-preview"},"options":{},"resource":"audio","inputType":"binary","operation":"analyze"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"3d5d43cc-4639-4d46-a095-b6de79d3aede","name":"get_message (Audio/Video message)","type":"n8n-nodes-base.set","position":[2544,1072],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"message","type":"string","value":"=Voice message description:{{ $json.candidates?.[0]?.content?.parts?.[0]?.text || $json.content?.parts?.[0]?.text }}"},{"id":"93f1bba1-1180-404a-93ca-c34cf1d1b7ac","name":"chat_id","type":"string","value":"={{ $('Telegram Trigger').item.json.message.chat.id }}"}]}},"typeVersion":3.4},{"id":"60e92d69-3fd6-4311-ba91-ea445adf9727","name":"get_message (Media  message)","type":"n8n-nodes-base.set","position":[2544,1248],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"message","type":"string","value":"=Content:\n{{ $json.content.parts[0].text }}"},{"id":"53e34499-7dad-4f94-aa7d-f778321f13f4","name":"chat_id","type":"string","value":"={{ $('Telegram Trigger').item.json.message.chat.id }}"}]}},"typeVersion":3.4},{"id":"563fd16d-25d2-4496-94eb-d6a8be600e92","name":"Typing…","type":"n8n-nodes-base.telegram","position":[1264,960],"webhookId":"412793ca-7cad-4a84-acea-98debbbfa2ac","parameters":{"chatId":"={{ $json.message.chat.id }}","operation":"sendChatAction"},"credentials":{"telegramApi":{"id":"WRh7zajkRFlqzT9s","name":"Pruebas"}},"typeVersion":1.2},{"id":"29051108-72c1-49da-8b51-25350affe0de","name":"get_error_message1","type":"n8n-nodes-base.set","position":[2144,1408],"parameters":{"options":{},"assignments":{"assignments":[{"id":"d8935452-fe20-469d-a68d-1aad056cb8dd","name":"message","type":"string","value":"=It was not possible to process the file.File type not supported."},{"id":"38ba2498-2141-4a04-a22a-64563fe2ee6f","name":"chat_id","type":"string","value":"={{ $('Telegram Trigger').item.json.message.chat.id }}"}]}},"typeVersion":3.4},{"id":"41cf82ed-b4f4-4224-93b2-e2c96f4c0f4c","name":"Send a text message","type":"n8n-nodes-base.telegram","position":[3600,1184],"webhookId":"a23f92f8-c4e9-44a5-8c17-e7623f18a851","parameters":{"text":"={{ $json.message }}","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"parse_mode":"MarkdownV2","appendAttribution":false}},"credentials":{"telegramApi":{"id":"WRh7zajkRFlqzT9s","name":"Pruebas"}},"typeVersion":1.2},{"id":"938dbd1b-a566-4bcf-9c9c-7abf90174f8b","name":"Google Gemini Chat Model","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[3024,1056],"parameters":{"options":{},"modelName":"models/gemini-3-flash-preview"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"ad29c874-9686-41aa-af26-5db22169f1dd","name":"Simple Memory","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[3344,1072],"parameters":{"sessionKey":"={{ $json.chat_id }}","sessionIdType":"customKey","contextWindowLength":10},"typeVersion":1.3},{"id":"dcbd0b50-3cb5-4e3e-be26-026199676bb7","name":"MarkdownV2","type":"n8n-nodes-base.code","position":[3440,1184],"parameters":{"jsCode":"/**\n * MarkdownV2-safe formatter + auto-chunker for Telegram (n8n Code node)\n * --------------------------------------------------------------------\n * - Allows: *bold*, _italic_, ||spoiler||, [label](url)\n * - Escapes everything else for Telegram MarkdownV2\n * - Validates/normalizes URLs\n * - Converts \"# Heading\" lines to bold titles\n * - Splits long messages into <= 4096-char chunks (uses a 4000-char budget)\n * - Outputs one item per chunk so the Telegram node sends all parts\n *\n * Recommended: Run this node in \"Run Once for All Items\".\n */\n\nconst MAX_TELEGRAM = 4096;\nconst SAFE_BUDGET = 4000; // small margin to avoid edge overflows\n\n// ============ MarkdownV2 helpers ============\nfunction escapeMarkdownV2(text) {\n  if (!text) return '';\n  return String(text).replace(/([\\\\_*[\\]()~`>#+\\-=|{}.!])/g, '\\\\$1');\n}\n\nfunction escapeForUrl(url) {\n  return String(url).replace(/[)\\\\]/g, '\\\\$&');\n}\n\nfunction normalizeAndValidateUrl(url) {\n  let raw = String(url || '').trim();\n  try {\n    const u = new URL(raw);\n    return u.toString();\n  } catch {}\n  // Try https:// for bare domains\n  const domainLike = /^[a-z0-9.-]+\\.[a-z]{2,}([/:?#].*)?$/i.test(raw);\n  if (domainLike) {\n    try {\n      const u2 = new URL('https://' + raw);\n      return u2.toString();\n    } catch {}\n  }\n  return null;\n}\n\nfunction normalizeHeadings(text) {\n  // Turn \"# Title\" → \"*Title*\"\n  return text.replace(/^(#{1,6})\\s+(.*)$/gm, (m, hashes, title) => `*${title.trim()}*`);\n}\n\nfunction normalizeCommonMd(text) {\n  return String(text)\n    .replace(/\\*\\*([\\s\\S]*?)\\*\\*/g, '*$1*') // **bold** → *bold*\n    .replace(/__([\\s\\S]*?)__/g, '_$1_');    // __italic__ → _italic_\n}\n\n/**\n * Convert incoming text to Telegram-safe MarkdownV2.\n */\nfunction processMarkdownV2Safe(inputText) {\n  if (!inputText) return '';\n\n  let text = normalizeCommonMd(String(inputText));\n  text = normalizeHeadings(text);\n\n  const placeholders = { links: [], bolds: [], italics: [], spoilers: [] };\n\n  // Links: keep safe via placeholders during escaping\n  text = text.replace(/\\[([^\\]\\n]+)\\]\\(([^)]+)\\)/g, (m, label, url) => {\n    const normalizedUrl = normalizeAndValidateUrl(url);\n    if (!normalizedUrl) return escapeMarkdownV2(label);\n    const idx = placeholders.links.length;\n    const ph = `⟬L${idx}⟭`;\n    const safeLabel = escapeMarkdownV2(label);\n    const safeUrl = escapeForUrl(normalizedUrl);\n    placeholders.links.push(`[${safeLabel}](${safeUrl})`);\n    return ph;\n  });\n\n  // Bold\n  text = text.replace(/\\*([\\s\\S]+?)\\*/g, (m, inner) => {\n    const idx = placeholders.bolds.length;\n    const ph = `⟬B${idx}⟭`;\n    placeholders.bolds.push(`*${escapeMarkdownV2(inner)}*`);\n    return ph;\n  });\n\n  // Italic\n  text = text.replace(/_([\\s\\S]+?)_/g, (m, inner) => {\n    const idx = placeholders.italics.length;\n    const ph = `⟬I${idx}⟭`;\n    placeholders.italics.push(`_${escapeMarkdownV2(inner)}_`);\n    return ph;\n  });\n\n  // Spoilers\n  text = text.replace(/\\|\\|([\\s\\S]+?)\\|\\|/g, (m, inner) => {\n    const idx = placeholders.spoilers.length;\n    const ph = `⟬S${idx}⟭`;\n    placeholders.spoilers.push(`||${escapeMarkdownV2(inner)}||`);\n    return ph;\n  });\n\n  // Escape everything else\n  text = escapeMarkdownV2(text);\n\n  // Restore placeholders\n  placeholders.links.forEach((md, i) => { text = text.replace(`⟬L${i}⟭`, md); });\n  placeholders.bolds.forEach((md, i) => { text = text.replace(`⟬B${i}⟭`, md); });\n  placeholders.italics.forEach((md, i) => { text = text.replace(`⟬I${i}⟭`, md); });\n  placeholders.spoilers.forEach((md, i) => { text = text.replace(`⟬S${i}⟭`, md); });\n\n  return text;\n}\n\n// ============ Chunking helpers ============\n/**\n * Split text into Telegram-safe chunks <= maxLen.\n * Prefers paragraph boundaries, then sentence boundaries, then words.\n * Falls back to hard cuts only when unavoidable (e.g., extremely long URL).\n */\nfunction chunkForTelegram(text, maxLen = SAFE_BUDGET) {\n  if (!text || text.length <= maxLen) return [text || ''];\n\n  const parts = [];\n  let buffer = '';\n\n  const flush = () => {\n    if (buffer) {\n      parts.push(buffer);\n      buffer = '';\n    }\n  };\n\n  // 1) Paragraph-level packing\n  const paragraphs = text.split(/\\n{2,}/);\n  for (const pRaw of paragraphs) {\n    const p = pRaw; // keep paragraph as-is\n    const candidate = buffer ? buffer + '\\n\\n' + p : p;\n    if (candidate.length <= maxLen) {\n      buffer = candidate;\n      continue;\n    }\n    if (p.length <= maxLen) {\n      flush();\n      buffer = p;\n      continue;\n    }\n\n    // 2) Sentence-level packing (paragraph is still too big)\n    flush();\n    const sentences = p.split(/(?<=[.!?…])\\s+(?=[^\\s])/u);\n    let sBuf = '';\n    for (const s of sentences) {\n      const sCandidate = sBuf ? sBuf + ' ' + s : s;\n      if (sCandidate.length <= maxLen) {\n        sBuf = sCandidate;\n        continue;\n      }\n      if (s.length <= maxLen) {\n        if (sBuf) parts.push(sBuf);\n        sBuf = s;\n        continue;\n      }\n\n      // 3) Word-level packing (sentence is still too big)\n      if (sBuf) { parts.push(sBuf); sBuf = ''; }\n      let wBuf = '';\n      const words = s.split(/\\s+/);\n      for (const w of words) {\n        const wCandidate = wBuf ? wBuf + ' ' + w : w;\n        if (wCandidate.length <= maxLen) {\n          wBuf = wCandidate;\n          continue;\n        }\n        if (w.length <= maxLen) {\n          if (wBuf) parts.push(wBuf);\n          wBuf = w;\n          continue;\n        }\n        // 4) Hard split (extremely long token, e.g., massive URL)\n        if (wBuf) { parts.push(wBuf); wBuf = ''; }\n        const re = new RegExp(`.{1,${maxLen}}`, 'g');\n        const hardPieces = w.match(re) || [];\n        parts.push(...hardPieces);\n      }\n      if (wBuf) parts.push(wBuf);\n    }\n    if (sBuf) parts.push(sBuf);\n  }\n  if (buffer) parts.push(buffer);\n\n  // Final safety pass: trim chunks that might still exceed MAX_TELEGRAM\n  return parts.flatMap(part => {\n    if (part.length <= MAX_TELEGRAM) return [part];\n    const re = new RegExp(`.{1,${SAFE_BUDGET}}`, 'g');\n    return part.match(re) || [];\n  });\n}\n\n// ============ Main ============\nconst inputItems = $input.all();\nconst out = [];\n\nfor (const item of inputItems) {\n  const j = item.json || {};\n  const raw =\n    j.message ?? j.output ?? j.text ?? j.content ?? '';\n\n  const formatted = processMarkdownV2Safe(raw);\n  const chunks = chunkForTelegram(formatted, SAFE_BUDGET);\n\n  chunks.forEach((chunk, idx) => {\n    out.push({\n      json: {\n        ...j,\n        message: chunk,\n        message_part_index: idx + 1,\n        message_parts_total: chunks.length,\n      },\n      binary: item.binary,\n    });\n  });\n}\n\nreturn out;\n"},"typeVersion":2},{"id":"4dc3eac9-6640-4cd8-b07d-44254df59f48","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[1040,1184],"webhookId":"8790c189-591f-4f66-8025-fa7737fd6484","parameters":{"updates":["message"],"additionalFields":{}},"credentials":{"telegramApi":{"id":"WRh7zajkRFlqzT9s","name":"Pruebas"}},"typeVersion":1.2},{"id":"6561a9a0-2d00-424d-ba86-8852dcb7e935","name":"Download Image","type":"n8n-nodes-base.telegram","position":[2144,1248],"webhookId":"b4a21f4c-e6a6-4c83-9e8e-af73cb7cc96a","parameters":{"fileId":"={{ $('Telegram Trigger').item.json.message.photo[3]?.file_id || $('Telegram Trigger').item.json.message.photo[2]?.file_id || $('Telegram Trigger').item.json.message.photo[1]?.file_id }}","resource":"file","additionalFields":{}},"credentials":{"telegramApi":{"id":"WRh7zajkRFlqzT9s","name":"Pruebas"}},"typeVersion":1.2},{"id":"53cdd022-332a-4e7f-b2a8-405a450efbe1","name":"Send a text message3","type":"n8n-nodes-base.telegram","position":[2528,2176],"webhookId":"a23f92f8-c4e9-44a5-8c17-e7623f18a851","parameters":{"text":"={{ $json.message }}","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","additionalFields":{"parse_mode":"MarkdownV2","appendAttribution":false}},"credentials":{"telegramApi":{"id":"WRh7zajkRFlqzT9s","name":"Pruebas"}},"typeVersion":1.2},{"id":"b3b521db-9919-4d51-a2f0-a8816d0f7f45","name":"Google Gemini Chat Model3","type":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","position":[2048,2032],"parameters":{"options":{},"modelName":"models/gemini-3-flash-preview"},"credentials":{"googlePalmApi":{"id":"Pr8hxThM4qMjHnbs","name":"Karen"}},"typeVersion":1},{"id":"7cd91bbb-b625-4c9c-ac03-06925fa6734e","name":"MarkdownV1","type":"n8n-nodes-base.code","position":[2368,2176],"parameters":{"jsCode":"/**\n * MarkdownV2-safe formatter + auto-chunker for Telegram (n8n Code node)\n * --------------------------------------------------------------------\n * - Allows: *bold*, _italic_, ||spoiler||, [label](url)\n * - Escapes everything else for Telegram MarkdownV2\n * - Validates/normalizes URLs\n * - Converts \"# Heading\" lines to bold titles\n * - Splits long messages into <= 4096-char chunks (uses a 4000-char budget)\n * - Outputs one item per chunk so the Telegram node sends all parts\n *\n * Recommended: Run this node in \"Run Once for All Items\".\n */\n\nconst MAX_TELEGRAM = 4096;\nconst SAFE_BUDGET = 4000; // small margin to avoid edge overflows\n\n// ============ MarkdownV2 helpers ============\nfunction escapeMarkdownV2(text) {\n  if (!text) return '';\n  return String(text).replace(/([\\\\_*[\\]()~`>#+\\-=|{}.!])/g, '\\\\$1');\n}\n\nfunction escapeForUrl(url) {\n  return String(url).replace(/[)\\\\]/g, '\\\\$&');\n}\n\nfunction normalizeAndValidateUrl(url) {\n  let raw = String(url || '').trim();\n  try {\n    const u = new URL(raw);\n    return u.toString();\n  } catch {}\n  // Try https:// for bare domains\n  const domainLike = /^[a-z0-9.-]+\\.[a-z]{2,}([/:?#].*)?$/i.test(raw);\n  if (domainLike) {\n    try {\n      const u2 = new URL('https://' + raw);\n      return u2.toString();\n    } catch {}\n  }\n  return null;\n}\n\nfunction normalizeHeadings(text) {\n  // Turn \"# Title\" → \"*Title*\"\n  return text.replace(/^(#{1,6})\\s+(.*)$/gm, (m, hashes, title) => `*${title.trim()}*`);\n}\n\nfunction normalizeCommonMd(text) {\n  return String(text)\n    .replace(/\\*\\*([\\s\\S]*?)\\*\\*/g, '*$1*') // **bold** → *bold*\n    .replace(/__([\\s\\S]*?)__/g, '_$1_');    // __italic__ → _italic_\n}\n\n/**\n * Convert incoming text to Telegram-safe MarkdownV2.\n */\nfunction processMarkdownV2Safe(inputText) {\n  if (!inputText) return '';\n\n  let text = normalizeCommonMd(String(inputText));\n  text = normalizeHeadings(text);\n\n  const placeholders = { links: [], bolds: [], italics: [], spoilers: [] };\n\n  // Links: keep safe via placeholders during escaping\n  text = text.replace(/\\[([^\\]\\n]+)\\]\\(([^)]+)\\)/g, (m, label, url) => {\n    const normalizedUrl = normalizeAndValidateUrl(url);\n    if (!normalizedUrl) return escapeMarkdownV2(label);\n    const idx = placeholders.links.length;\n    const ph = `⟬L${idx}⟭`;\n    const safeLabel = escapeMarkdownV2(label);\n    const safeUrl = escapeForUrl(normalizedUrl);\n    placeholders.links.push(`[${safeLabel}](${safeUrl})`);\n    return ph;\n  });\n\n  // Bold\n  text = text.replace(/\\*([\\s\\S]+?)\\*/g, (m, inner) => {\n    const idx = placeholders.bolds.length;\n    const ph = `⟬B${idx}⟭`;\n    placeholders.bolds.push(`*${escapeMarkdownV2(inner)}*`);\n    return ph;\n  });\n\n  // Italic\n  text = text.replace(/_([\\s\\S]+?)_/g, (m, inner) => {\n    const idx = placeholders.italics.length;\n    const ph = `⟬I${idx}⟭`;\n    placeholders.italics.push(`_${escapeMarkdownV2(inner)}_`);\n    return ph;\n  });\n\n  // Spoilers\n  text = text.replace(/\\|\\|([\\s\\S]+?)\\|\\|/g, (m, inner) => {\n    const idx = placeholders.spoilers.length;\n    const ph = `⟬S${idx}⟭`;\n    placeholders.spoilers.push(`||${escapeMarkdownV2(inner)}||`);\n    return ph;\n  });\n\n  // Escape everything else\n  text = escapeMarkdownV2(text);\n\n  // Restore placeholders\n  placeholders.links.forEach((md, i) => { text = text.replace(`⟬L${i}⟭`, md); });\n  placeholders.bolds.forEach((md, i) => { text = text.replace(`⟬B${i}⟭`, md); });\n  placeholders.italics.forEach((md, i) => { text = text.replace(`⟬I${i}⟭`, md); });\n  placeholders.spoilers.forEach((md, i) => { text = text.replace(`⟬S${i}⟭`, md); });\n\n  return text;\n}\n\n// ============ Chunking helpers ============\n/**\n * Split text into Telegram-safe chunks <= maxLen.\n * Prefers paragraph boundaries, then sentence boundaries, then words.\n * Falls back to hard cuts only when unavoidable (e.g., extremely long URL).\n */\nfunction chunkForTelegram(text, maxLen = SAFE_BUDGET) {\n  if (!text || text.length <= maxLen) return [text || ''];\n\n  const parts = [];\n  let buffer = '';\n\n  const flush = () => {\n    if (buffer) {\n      parts.push(buffer);\n      buffer = '';\n    }\n  };\n\n  // 1) Paragraph-level packing\n  const paragraphs = text.split(/\\n{2,}/);\n  for (const pRaw of paragraphs) {\n    const p = pRaw; // keep paragraph as-is\n    const candidate = buffer ? buffer + '\\n\\n' + p : p;\n    if (candidate.length <= maxLen) {\n      buffer = candidate;\n      continue;\n    }\n    if (p.length <= maxLen) {\n      flush();\n      buffer = p;\n      continue;\n    }\n\n    // 2) Sentence-level packing (paragraph is still too big)\n    flush();\n    const sentences = p.split(/(?<=[.!?…])\\s+(?=[^\\s])/u);\n    let sBuf = '';\n    for (const s of sentences) {\n      const sCandidate = sBuf ? sBuf + ' ' + s : s;\n      if (sCandidate.length <= maxLen) {\n        sBuf = sCandidate;\n        continue;\n      }\n      if (s.length <= maxLen) {\n        if (sBuf) parts.push(sBuf);\n        sBuf = s;\n        continue;\n      }\n\n      // 3) Word-level packing (sentence is still too big)\n      if (sBuf) { parts.push(sBuf); sBuf = ''; }\n      let wBuf = '';\n      const words = s.split(/\\s+/);\n      for (const w of words) {\n        const wCandidate = wBuf ? wBuf + ' ' + w : w;\n        if (wCandidate.length <= maxLen) {\n          wBuf = wCandidate;\n          continue;\n        }\n        if (w.length <= maxLen) {\n          if (wBuf) parts.push(wBuf);\n          wBuf = w;\n          continue;\n        }\n        // 4) Hard split (extremely long token, e.g., massive URL)\n        if (wBuf) { parts.push(wBuf); wBuf = ''; }\n        const re = new RegExp(`.{1,${maxLen}}`, 'g');\n        const hardPieces = w.match(re) || [];\n        parts.push(...hardPieces);\n      }\n      if (wBuf) parts.push(wBuf);\n    }\n    if (sBuf) parts.push(sBuf);\n  }\n  if (buffer) parts.push(buffer);\n\n  // Final safety pass: trim chunks that might still exceed MAX_TELEGRAM\n  return parts.flatMap(part => {\n    if (part.length <= MAX_TELEGRAM) return [part];\n    const re = new RegExp(`.{1,${SAFE_BUDGET}}`, 'g');\n    return part.match(re) || [];\n  });\n}\n\n// ============ Main ============\nconst inputItems = $input.all();\nconst out = [];\n\nfor (const item of inputItems) {\n  const j = item.json || {};\n  const raw =\n    j.message ?? j.output ?? j.text ?? j.content ?? '';\n\n  const formatted = processMarkdownV2Safe(raw);\n  const chunks = chunkForTelegram(formatted, SAFE_BUDGET);\n\n  chunks.forEach((chunk, idx) => {\n    out.push({\n      json: {\n        ...j,\n        message: chunk,\n        message_part_index: idx + 1,\n        message_parts_total: chunks.length,\n      },\n      binary: item.binary,\n    });\n  });\n}\n\nreturn out;\n"},"typeVersion":2},{"id":"e8e8f9dc-461c-4aa5-b862-de736e74ee4d","name":"Get Rizzler Profile","type":"n8n-nodes-base.googleSheets","onError":"continueRegularOutput","position":[1264,1184],"parameters":{"options":{},"filtersUI":{"values":[{"lookupValue":"={{ $('Telegram Trigger').item.json.message.chat.id }}","lookupColumn":"ID"}]},"sheetName":{"__rl":true,"mode":"list","value":1156603750,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=1156603750","cachedResultName":"Rizzler Profile"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"}},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7,"alwaysOutputData":true},{"id":"192384a8-e622-4e30-b907-30677654fb1e","name":"Registered?","type":"n8n-nodes-base.if","position":[1488,1184],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b9e63bbf-24e6-424b-ba4e-6acd3f17b57c","operator":{"type":"number","operation":"exists","singleValue":true},"leftValue":"={{ $json.ID }}","rightValue":""}]}},"typeVersion":2.2},{"id":"a2d8609c-529d-4646-9960-71c78ecd1e5e","name":"Register Agent","type":"@n8n/n8n-nodes-langchain.agent","position":[2048,2176],"parameters":{"text":"={{ $json.message }}","options":{"systemMessage":"=### IDENTITY & PERSONA\nYou are **Rizz AI**, the user's chaotic but genius Wingman.\nYou are NOT a formal assistant. You are a \"Bro\" who has read every psychology book and seen every meme.\nYour vibe is: **Based, Meme-heavy, Brutally Honest, and High IQ.**\n\n**Forbidden Emojis:** 🚀, 🤖, 👋 (Too corporate).\n**Allowed Emojis:** 💀, 🤡, 🗿, 🧢, 📉, 🚩, 🟢, 🥶, 🥵, 🤝, 🚬.\n\n### MISSION\nYour goal is to set up the User's (\"The Rizzler\") profile in the database. You need 4 pieces of info to unlock the full system.\n\n### 🔑 DATA TO COLLECT (Slot Filling)\nGather these 4 fields naturally. Do not ask for them all at once like a cop.\n\n1.  **Name:** What should I call you? (Real name or cool nickname).\n2.  **Dating_Style:** How do you text?\n    *   *If user is unsure, offer these OPTIONS:*\n        *   A) **The Comedian** 🤡 (Funny, chaotic, self-deprecating)\n        *   B) **The Mystery** 🕵️‍♂️ (Short texts, slow replies, stoic)\n        *   C) **The Lover Boy** 🌹 (Sweet, poetic, intense)\n        *   D) **The Direct** 🗿 (Bold, straight to the point, no games)\n3.  **Goals:** What are we hunting for?\n    *   *Options:* 💍 Long Term / 🥂 Casual / 👻 Just for the plot.\n4.  **Language:** English or Spanish?\n\n### 🧠 INTERACTION RULES\n- **Speak Gen Z:** Use terms like \"No cap\", \"Bet\", \"Down bad\", \"Rizz\", \"Red flag\", \"Main character energy\".\n- **Be Reactive:**\n    - If they pick a weird name: \"Weird flex but ok 💀. I'll call you [Name].\"\n    - If they pick 'Lover Boy': \"Bold choice in this economy 📉. But I respect it.\"\n- **Give Options:** Always guide them if they hesitate. \"Bro, just pick one: A) Funny, B) Serious.\"\n\n### 🛠️ TOOL USAGE (The Handoff)\nONLY when you have all 4 fields, call the tool: `create_rizzler_profile`.\n\n### ✅ THE SEAMLESS TRANSITION (Crucial)\nOnce the tool returns \"Success\", DO NOT say \"Registration complete\".\nInstead, immediately pivot to the game. Act as if the paperwork is done and the mission starts NOW.\n\n**Final Response Template:**\n\"Aight [Name], you're locked in. 🔒\nProfile: [Style] | Goal: [Goal].\n\nNow, let's cook. 🍳\n**Send me a screenshot of a chat or a profile right now.**\nOr tell me, who are we texting? The ex? The gym crush? 🤡 Give me the tea.\"\n\n### EXAMPLE CONVERSATION\n**User:** \"Hi\"\n**You:** \"Yo. Welcome to the Dojo. 🗿 Before we fix your dry texts, I need to know who I'm working with. What's your name?\"\n**User:** \"David\"\n**You:** \"Sup David. 🤝 Alright, what's your game plan?\nA) Funny/Chaotic 🤡\nB) Mysterious/Cool 🥶\nC) Direct/Bold 🗿\"\n**User:** \"B\"\n**You:** \"The strong silent type. I see you. 🕶️ And what are we looking for? Wifey material 💍 or just for the weekend 🥂?\""},"promptType":"define"},"typeVersion":2.2},{"id":"5b6d393c-dcc4-4671-87c6-ac856b45d5bb","name":"get_message (register)","type":"n8n-nodes-base.set","position":[1776,2176],"parameters":{"options":{},"assignments":{"assignments":[{"id":"801ec600-22ad-4a94-a2b4-ae72eb271df0","name":"message","type":"string","value":"={{ $('Telegram Trigger').item.json.message.text }}"},{"id":"263071fb-bcdf-42b0-bb46-71b75fa0bf2a","name":"chat_id","type":"string","value":"={{ $('Telegram Trigger').item.json.message.chat.id }}"}]}},"typeVersion":3.4},{"id":"9bf762cf-2fb1-4887-8bc1-b02d9e0917f8","name":"create_rizzler_profile","type":"n8n-nodes-base.googleSheetsTool","position":[2192,2384],"parameters":{"columns":{"value":{"ID":"={{ $json.chat_id }}","Name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Name', `he user's name or nickname (e.g., 'David', 'Big Boss').`, 'string') }}","Goals":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Goals', `What the user is looking for (e.g., 'Long Term 💍', 'Casual 🥂').`, 'string') }}","Language":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Language', `Preferred language (English or Spanish).`, 'string') }}","Daiting_Style":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Daiting_Style', `description\": \"The selected personality vibe (e.g., 'Funny 🤡', 'Direct 🗿', 'Mysterious 🕵️‍♂️').`, 'string') }}"},"schema":[{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Name","type":"string","display":true,"removed":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Daiting_Style","type":"string","display":true,"removed":false,"required":false,"displayName":"Daiting_Style","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Goals","type":"string","display":true,"removed":false,"required":false,"displayName":"Goals","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Language","type":"string","display":true,"removed":false,"required":false,"displayName":"Language","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":1156603750,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=1156603750","cachedResultName":"Rizzler Profile"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"}},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7},{"id":"50970112-2ce1-4aa9-b299-01072dc69e98","name":"search_leads","type":"n8n-nodes-base.googleSheetsTool","position":[2928,1456],"parameters":{"options":{},"filtersUI":{"values":[{"lookupValue":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('values0_Value', `The name to search for (e.g., 'Sarah', 'Jessica').`, 'string') }}","lookupColumn":"Name"},{"lookupValue":"={{ $json.chat_id }}","lookupColumn":"ID"}]},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=0","cachedResultName":"Leads"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"},"descriptionType":"manual","toolDescription":"earches the database for a lead by name. Returns the FULL lead object (ID, Name, Stage, Score, Profile Summary). Use this to get the current data before updating."},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7},{"id":"1d28fd69-f708-42ba-96b3-44838f9a6c82","name":"get_lead_history","type":"n8n-nodes-base.googleSheetsTool","position":[3072,1456],"parameters":{"options":{},"filtersUI":{"values":[{"lookupValue":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('values0_Value', `The Leads ID from the search_leads tool`, 'string') }}","lookupColumn":"Lead ID"}]},"sheetName":{"__rl":true,"mode":"list","value":1492978715,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=1492978715","cachedResultName":"Conversation Logs"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"},"descriptionType":"manual","toolDescription":"Retrieves the past conversation logs and notes for a specific Lead ID."},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7},{"id":"aaf798c4-e749-4210-ac58-dc1d4caa13b0","name":"create_new_lead","type":"n8n-nodes-base.googleSheetsTool","position":[3216,1456],"parameters":{"columns":{"value":{"ID":"={{ Math.random().toString(16).substring(8) }}","Name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Name', `The Lead's name`, 'string') }}","Stage":"=📥 New Match","Rizzler ID":"={{ $json.chat_id }}","Last Contact":"={{ $now }}","Interest Score":"=50","Profile Summary":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Profile_Summary', `Age, Job, Bio details, Visuals.`, 'string') }}"},"schema":[{"id":"ID","type":"string","display":true,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Rizzler ID","type":"string","display":true,"required":false,"displayName":"Rizzler ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Name","type":"string","display":true,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Stage","type":"string","display":true,"required":false,"displayName":"Stage","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Interest Score","type":"string","display":true,"required":false,"displayName":"Interest Score","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Profile Summary","type":"string","display":true,"required":false,"displayName":"Profile Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Next Action","type":"string","display":true,"removed":true,"required":false,"displayName":"Next Action","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Last Contact","type":"string","display":true,"removed":false,"required":false,"displayName":"Last Contact","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=0","cachedResultName":"Leads"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"},"descriptionType":"manual","toolDescription":"Registers a NEW person in the database. Only use this if search_leads returns 0 results."},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7},{"id":"ca096be1-3098-41f0-867b-e46177bf4bd3","name":"update_profile","type":"n8n-nodes-base.googleSheetsTool","position":[3632,1456],"parameters":{"columns":{"value":{"ID":"={{ $json.chat_id }}","Name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Name', `User's Name. Keep existing if not changing.`, 'string') }}","Goals":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Goals', `Goal: 'Long Term 💍', 'Casual 🥂', 'Just for the plot 👻'.`, 'string') }}","Language":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Language', `User's preferred language`, 'string') }}","Daiting_Style":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Daiting_Style', `Vibe: 'The Comedian 🤡', 'The Mystery 🕵️‍♂️', 'The Lover Boy 🌹', 'The Direct 🗿'.`, 'string') }}"},"schema":[{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Name","type":"string","display":true,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Daiting_Style","type":"string","display":true,"required":false,"displayName":"Daiting_Style","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Goals","type":"string","display":true,"required":false,"displayName":"Goals","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Language","type":"string","display":true,"required":false,"displayName":"Language","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"number","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":1156603750,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=1156603750","cachedResultName":"Rizzler Profile"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"},"descriptionType":"manual","toolDescription":"Updates the User's (Rizzler) own settings. WARNING: This performs a full row update. You MUST provide values for ALL fields. If a field (e.g., Name) is not changing, RE-SEND the existing value from the context."},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7},{"id":"c827b987-5992-41af-a5e2-b4d497bf91a2","name":"update_lead","type":"n8n-nodes-base.googleSheetsTool","position":[3504,1456],"parameters":{"columns":{"value":{"ID":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('ID__using_to_match_', `The unique ID of the lead.`, 'string') }}","Name":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Name', `The Lead's Name. RE-SEND the existing name if not changing.`, 'string') }}","Stage":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Stage', `The current stage of the relationship\n\"enum\": [\"📥 New Match\", \"🗣 Discovery\", \"🔥 Building Rapport\", \"🗓 Closing\", \"❄️ Cold\", \"✅ Won\", \"❌ Lost\"],`, 'string') }}","Rizzler ID":"={{ $json.chat_id }}","Next Action":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Next_Action', `actical suggestion for next time (e.g., 'Ask for date').`, 'string') }}","Last Contact":"={{ $now }}","Interest Score":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Interest_Score', `Interest score 1-100. Update based on sentiment.`, 'string') }}","Profile Summary":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Profile_Summary', `The Lead's Bio/Details. RE-SEND the existing summary if not changing.`, 'string') }}"},"schema":[{"id":"ID","type":"string","display":true,"removed":false,"required":false,"displayName":"ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Rizzler ID","type":"string","display":true,"removed":false,"required":false,"displayName":"Rizzler ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Name","type":"string","display":true,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Stage","type":"string","display":true,"required":false,"displayName":"Stage","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Interest Score","type":"string","display":true,"required":false,"displayName":"Interest Score","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Profile Summary","type":"string","display":true,"required":false,"displayName":"Profile Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Next Action","type":"string","display":true,"required":false,"displayName":"Next Action","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Last Contact","type":"string","display":true,"required":false,"displayName":"Last Contact","defaultMatch":false,"canBeUsedToMatch":true},{"id":"row_number","type":"number","display":true,"removed":true,"readOnly":true,"required":false,"displayName":"row_number","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":["ID"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"update","sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=0","cachedResultName":"Leads"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"},"descriptionType":"manual","toolDescription":"pdates the lead's status/score AND saves a summary of the interaction. WARNING: This performs a full row update. You MUST provide values for 'name' and 'profile_summary' even if they haven't changed (use the values from search_leads)."},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7},{"id":"e15bb617-61da-4620-936d-15b0b5cf9c59","name":"Input Message Router","type":"n8n-nodes-base.switch","position":[1776,1136],"parameters":{"rules":{"values":[{"outputKey":"Text","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"fcb767ee-565e-4b56-a54e-6f97f739fc24","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $('Telegram Trigger').item.json.message.text }}","rightValue":""}]},"renameOutput":true},{"outputKey":"Voice Message","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"c1016c40-f8f2-4e08-8ec8-5cdb88f5c87a","operator":{"type":"object","operation":"exists","singleValue":true},"leftValue":"={{ $('Telegram Trigger').item.json.message.voice }}","rightValue":""}]},"renameOutput":true},{"outputKey":"Image","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"f8150ac7-eea4-4658-8da9-f7a1c88a471d","operator":{"type":"string","operation":"exists","singleValue":true},"leftValue":"={{ $('Telegram Trigger').item.json.message.photo[0].file_id }}","rightValue":""}]},"renameOutput":true}]},"options":{"ignoreCase":false,"fallbackOutput":"extra","allMatchingOutputs":true}},"typeVersion":3.2},{"id":"5b34cd3b-168a-4e51-b096-2a8a1c4f8e6a","name":"Simple Memory2","type":"@n8n/n8n-nodes-langchain.memoryBufferWindow","position":[2208,2032],"parameters":{"sessionKey":"={{ $json.chat_id }}","sessionIdType":"customKey"},"typeVersion":1.3},{"id":"496bf2a8-3a7d-4fa6-bfcb-d985950743bb","name":"Append Log","type":"n8n-nodes-base.googleSheetsTool","position":[3376,1456],"parameters":{"columns":{"value":{"Date":"={{ $now }}","Lead ID":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Lead_ID', `The unique ID or Name of the Lead (Prospect) found in the search.`, 'string') }}","Summary":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Summary', `A concise summary of what the User said/sent, what the Match replied, and what advice Rizz AI gave. Example: 'User sent meme, Match laughed. Rizz AI suggested asking for a date.'`, 'string') }}"},"schema":[{"id":"Lead ID","type":"string","display":true,"required":false,"displayName":"Lead ID","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Summary","type":"string","display":true,"required":false,"displayName":"Summary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"Date","type":"string","display":true,"required":false,"displayName":"Date","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"defineBelow","matchingColumns":[],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"append","sheetName":{"__rl":true,"mode":"list","value":1492978715,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit#gid=1492978715","cachedResultName":"Conversation Logs"},"documentId":{"__rl":true,"mode":"list","value":"1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0","cachedResultUrl":"https://docs.google.com/spreadsheets/d/1S_ry-rSOaaaOr_xrHUHoPVeXnhtHGaBh8m7ZG6VJ7b0/edit?usp=drivesdk","cachedResultName":"Rizz_CRM"},"descriptionType":"manual","toolDescription":"Appends a critical summary of the conversation to the lead's permanent record."},"credentials":{"googleSheetsOAuth2Api":{"id":"0aQzbVvueBehk2Yy","name":"Alejandro"}},"typeVersion":4.7},{"id":"6d4404a0-3993-4719-b830-e5786e0a4ab5","name":"Rizz AI","type":"@n8n/n8n-nodes-langchain.agent","position":[3120,1184],"parameters":{"text":"={{ $json.message }}","options":{"systemMessage":"=### 👑 IDENTITY & PERSONA\nYou are **Rizz AI**, the User's Elite Dating Strategist.\n**Vibe:** Your best friend who happens to be a dating genius. Relaxed, high IQ, minimal fluff.\n**Role:** You talk naturally first, then offer tools. You are NOT a robot filling a form.\n\n### 📊 USER CONTEXT\n- **Name:** {{ $('Get Rizzler Profile').item.json.Name }}\n- **Style:** {{ $('Get Rizzler Profile').item.json.Daiting_Style }}\n- **Goal:** {{ $('Get Rizzler Profile').item.json.Goals }}\n- **Language:** {{ $('Get Rizzler Profile').item.json.Language }} (⚠️ STRICTLY REPLY IN THIS LANGUAGE)\n\n### 🧠 INTELLIGENT FLOW (The Brain)\n1.  **CONTEXT AWARENESS:**\n    *   *Did the user just ask to Register/Update?* -> Confirm the action naturally. **DO NOT** generate message options unless asked.\n    *   *Did the user send a Screenshot/Text?* -> Analyze it and provide **3 High-Value Options**.\n    *   *Is the user asking for a revision?* -> Provide the specific variation requested.\n\n2.  **LOGIC & MEMORY:**\n    *   **Smart Search:** Don't search for a name if we are already talking about her in this session.\n    *   **Log Transparency:** When the user asks to \"Log\", make the summary ultra-concise (e.g., \"User used the 'Cat' opener -> Waiting for reply\").\n\n3.  **OUTPUT STYLE:**\n    *   **Body:** Conversational. Use emojis sparingly but effectively. Talk like a bro.\n    *   **The Ammo:** Only 3 options by default (Quality > Quantity).\n    *   **The Dashboard:** Detailed and clear actions.\n\n### 🛑 HUMAN-IN-THE-LOOP RULES\n*   **NEVER** touch the database (Log, Register, Update) without the user clicking/typing a command from the Menu.\n*   **ALWAYS** finish with the **COMMAND CENTER**.\n\n---\n\n### 🚀 RESPONSE\n\n(Talk to the user naturally based on what just happened.\n*   *If analyzing:* Give a 1-sentence sharp insight.\n*   *If confirming an action:* \"Done. Mar is registered.\"\n*   *If confused:* Ask clarifying questions.)\n\n**(⚠️ ONLY Include PART 2 if the user needs reply options. Otherwise skip to PART 3)**\n\n*(Clean text. No \"Option 1\" labels inside the copy block. Just the text.)*\n\n**🧊 Chill / Low Risk**\n[Text]\n\n**🤡 Witty / Funny**\n[Text]\n\n**🦁 Bold / Direct**\n[Text]\n\n**🎮 COMMAND CENTER**\n*(Customize this menu based on the context. Be specific.)*\n\n*   **1** 📝 **Log This:** \"Save that we sent the [Insert Type] option.\"\n*   **2** 📈 **Update Stage:** \"Move her to '[Next Stage]'.\"\n*   **3** 🔄 **Reroll:** \"I don't like these. Give me 3 new vibes.\"\n*   **4** 🎨 **Remix:** \"Make Option [X] more [Adjective].\"\n*   **5** 📸 **Analyze:** \"I'm sending a new screenshot.\"\n*   **6** 🆕 **Register:** \"Add [Name] to the DB.\"\n\n---\n\n### 💡 PRO-TIPS FOR THE AI:\n*   **Dynamic Menu:** If you just gave advice, Option 1 should be \"Log This\". If you just Registered someone, Option 1 should be \"Generate Openers\". **Adapt the menu.**\n*   **Spacing:** Keep the message options with plenty of white space for easy copying.\n*   **Be Real:** If the user creates a new lead, say: *\"Bet, she's in. What's the context? Do we have a bio or a chat screenshot?\"* (Don't just guess options)."},"promptType":"define"},"typeVersion":2.2},{"id":"3930702e-db5f-436e-a447-46ad5a2da383","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[944,720],"parameters":{"color":7,"width":688,"height":768,"content":"## 🚦 Auth & User Check\n**1. Trigger:** Listens for any message (Text, Photo, Voice) from Telegram.\n**2. Check Profile:** Queries the `Users` sheet to see if the Telegram ID exists.\n**3. Gatekeeper:** \n- If **Registered** -> Proceed to Router.\n- If **New** -> Redirect to Onboarding Agent."},"typeVersion":1},{"id":"e628cb69-0597-4b1b-895c-2c11353415fe","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[1696,720],"parameters":{"color":7,"width":1056,"height":928,"content":"## 👁️ Input Processing\n**1. Router:** Detects if the message is Text, Image, or Audio.\n**2. Vision (Images):** Uses `Google Gemini` to analyze screenshots (e.g., \"Analyze this Tinder bio\") and extracts key context.\n**3. Hearing (Audio):** Downloads voice notes and transcribes them for the Agent.\n**4. Formatting:** Packages everything into a standard format for the Main Agent."},"typeVersion":1},{"id":"e00e7b1b-a5ac-4f77-93ee-ec7385ab0a63","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[1680,1808],"parameters":{"color":7,"width":1056,"height":816,"content":"## 👶 Onboarding Agent\n**Role:** Interviews new users to build their \"Rizz Profile\".\n**Tasks:**\n- Asks for Name, Dating Style (e.g., \"Mystery\", \"Funny\"), and Goals.\n- Saves the profile to `Google Sheets` using the `create_rizzler_profile` tool.\n- Welcomes the user and activates the Main Agent."},"typeVersion":1},{"id":"33b917b7-0a01-4322-a240-49305eda33ec","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[2816,720],"parameters":{"color":7,"width":1056,"height":928,"content":"## 🧠 The Rizz Agent (Brain)\n**Model:** Google Gemini (with System Instruction).\n**Capabilities:**\n- **Memory:** Remembers conversation context.\n- **Tools:**\n  - `search_leads`: Checks if a match exists in DB (Read Sheet).\n  - `get_lead_history`: Retrieves past conversation context (Read Sheet).\n  - `create_new_lead`: Registers a new match (Append Sheet).\n  - `Append Log`: Saves interaction history (Append Sheet).\n  - `update_lead`: Updates status/interest (Update Sheet).\n  - `update_profile`: Updates user settings/profile (Update Sheet).\n**Output:** Generates 3 strategic reply options and a Command Menu."},"typeVersion":1},{"id":"4a2cd6bc-1cdd-4f1f-9b77-4848796e3e72","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[272,784],"parameters":{"width":608,"height":656,"content":"### Rizz AI: Your AI Dating Assistant on Telegram 💘\n\nThis advanced AI Agent acts as your personal \"Wingman\" on Telegram. It uses **Google Gemini Vision & Audio** to analyze screenshots of chats, listen to voice notes, and generate witty, strategic replies to help you land more dates. It remembers context using **Conversation Memory** and manages your leads in **Google Sheets**.\n\n### How it works\n1.  **Send anything:** Forward a text, voice note, or screenshot of a chat to the Telegram Bot.\n2.  **AI Analysis:** The workflow processes the input (transcribing audio or analyzing images with Gemini Vision).\n3.  **Context Check:** It enables \"Rizzler Memory\" to recall previous advice and checks your `Leads` database.\n4.  **Strategic Reply:** The AI Agent generates 3 reply options (Chill, Witty, Bold) based on your dating style.\n5.  **CRM Update:** You can use command buttons to save the interaction log or update the lead's status in Google Sheets.\n\n### Setup\n- [ ] **Google Sheets:** Copy [this template sheet](https://docs.google.com/spreadsheets/d/1JxoahgYNHc6nuWJ-VOsHlEzaKYxnksGFeYA0TKE4lWo/edit?usp=sharing) and connect your Google account credential.\n- [ ] **Telegram:** Create a new bot with @BotFather and add your Access Token credential.\n- [ ] **Google Gemini:** Get your API Key from Google AI Studio and add it to the Gemini Chat Model node.\n- [ ] **Customize:** Update the `Get Rizzler Profile` node to point to your new Sheet ID.\n\n---"},"typeVersion":1},{"id":"0ce73af8-d485-414c-9ad6-6a37e4523274","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[336,1584],"parameters":{"color":7,"width":1280,"height":864,"content":"\n![Rizz AI Workflow](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/Onboarding.png)\n![Rizz AI Workflow](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/Onboarding.png)"},"typeVersion":1},{"id":"1a0772e9-8b7e-4c20-af47-afe23648a39e","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[2800,1792],"parameters":{"color":7,"width":752,"height":832,"content":"![Chat Response Example](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/ChatResponse.png)\n"},"typeVersion":1},{"id":"28082ed1-6889-49ec-869b-9e738ed2be98","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[976,192],"parameters":{"color":7,"width":608,"height":432,"content":"![Menu Response Example](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/MenuResponse.png)"},"typeVersion":1},{"id":"560ffac2-59fc-4c8d-89cd-37410ba37f35","name":"Sticky Note8","type":"n8n-nodes-base.stickyNote","position":[1856,-176],"parameters":{"color":7,"width":736,"height":864,"content":"![Profile Response Example](https://raw.githubusercontent.com/AlejandroSIlvaRodriguez/Assets/main/Assets/ProfileResoponce.png)"},"typeVersion":1},{"id":"7019c169-a465-420b-b852-acca2ef7effa","name":"Sticky Note15","type":"n8n-nodes-base.stickyNote","position":[2816,480],"parameters":{"color":2,"width":368,"height":208,"content":"## 💡 Need Assistance?\n\nIf you’d like help customizing or extending this workflow, feel free to reach out:  \n\n📧 Email: [johnsilva11031@gmail.com](mailto:johnsilva11031@gmail.com)  \n🔗 LinkedIn: [John Alejandro Silva Rodríguez](https://www.linkedin.com/in/john-alejandro-silva-rodriguez-48093526b/)"},"typeVersion":1}],"pinData":{"Telegram Trigger":[{"message":{"chat":{"id":1139828774,"type":"private","username":"AlejitoJohn","last_name":"Silva","first_name":"John"},"date":1771287807,"from":{"id":1139828774,"is_bot":false,"username":"AlejitoJohn","last_name":"Silva","first_name":"John","language_code":"en"},"photo":[{"width":40,"height":90,"file_id":"AgACAgIAAxkBAAID4GmTsY-GHR1K7UcGvxBoB5zWI6WCAALPE2sbmqyhSLn1v9MQwb5eAQADAgADcwADOgQ","file_size":969,"file_unique_id":"AQADzxNrG5qsoUh4"},{"width":144,"height":320,"file_id":"AgACAgIAAxkBAAID4GmTsY-GHR1K7UcGvxBoB5zWI6WCAALPE2sbmqyhSLn1v9MQwb5eAQADAgADbQADOgQ","file_size":11347,"file_unique_id":"AQADzxNrG5qsoUhy"},{"width":360,"height":800,"file_id":"AgACAgIAAxkBAAID4GmTsY-GHR1K7UcGvxBoB5zWI6WCAALPE2sbmqyhSLn1v9MQwb5eAQADAgADeAADOgQ","file_size":38851,"file_unique_id":"AQADzxNrG5qsoUh9"},{"width":576,"height":1280,"file_id":"AgACAgIAAxkBAAID4GmTsY-GHR1K7UcGvxBoB5zWI6WCAALPE2sbmqyhSLn1v9MQwb5eAQADAgADeQADOgQ","file_size":62883,"file_unique_id":"AQADzxNrG5qsoUh-"}],"message_id":1004},"update_id":217030680}]},"connections":{"Rizz AI":{"main":[[{"node":"MarkdownV2","type":"main","index":0}]]},"Typing…":{"main":[[]]},"Append Log":{"ai_tool":[[{"node":"Rizz AI","type":"ai_tool","index":0}]]},"MarkdownV1":{"main":[[{"node":"Send a text message3","type":"main","index":0}]]},"MarkdownV2":{"main":[[{"node":"Send a text message","type":"main","index":0}]]},"Registered?":{"main":[[{"node":"Input Message Router","type":"main","index":0}],[{"node":"get_message (register)","type":"main","index":0}]]},"update_lead":{"ai_tool":[[{"node":"Rizz AI","type":"ai_tool","index":0}]]},"search_leads":{"ai_tool":[[{"node":"Rizz AI","type":"ai_tool","index":0}]]},"Analyze image":{"main":[[{"node":"get_message (Media  message)","type":"main","index":0}]]},"Simple Memory":{"ai_memory":[[{"node":"Rizz AI","type":"ai_memory","index":0}]]},"Download Image":{"main":[[{"node":"Analyze image","type":"main","index":0}]]},"Register Agent":{"main":[[{"node":"MarkdownV1","type":"main","index":0}]]},"Simple Memory2":{"ai_memory":[[{"node":"Register Agent","type":"ai_memory","index":0}]]},"update_profile":{"ai_tool":[[{"node":"Rizz AI","type":"ai_tool","index":0}]]},"create_new_lead":{"ai_tool":[[{"node":"Rizz AI","type":"ai_tool","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Typing…","type":"main","index":0},{"node":"Get Rizzler Profile","type":"main","index":0}]]},"get_lead_history":{"ai_tool":[[{"node":"Rizz AI","type":"ai_tool","index":0}]]},"get_error_message1":{"main":[[{"node":"Rizz AI","type":"main","index":0}]]},"get_message (text)":{"main":[[{"node":"Rizz AI","type":"main","index":0}]]},"Get Rizzler Profile":{"main":[[{"node":"Registered?","type":"main","index":0}]]},"Input Message Router":{"main":[[{"node":"get_message (text)","type":"main","index":0}],[{"node":"Download Voice Message","type":"main","index":0}],[{"node":"Download Image","type":"main","index":0}],[{"node":"get_error_message1","type":"main","index":0}]]},"Analyze voice message":{"main":[[{"node":"get_message (Audio/Video message)","type":"main","index":0}]]},"Download Voice Message":{"main":[[{"node":"Analyze voice message","type":"main","index":0}]]},"create_rizzler_profile":{"ai_tool":[[{"node":"Register Agent","type":"ai_tool","index":0}]]},"get_message (register)":{"main":[[{"node":"Register Agent","type":"main","index":0}]]},"Google Gemini Chat Model":{"ai_languageModel":[[{"node":"Rizz AI","type":"ai_languageModel","index":0}]]},"Google Gemini Chat Model3":{"ai_languageModel":[[{"node":"Register Agent","type":"ai_languageModel","index":0}]]},"get_message (Media  message)":{"main":[[{"node":"Rizz AI","type":"main","index":0}]]},"get_message (Audio/Video message)":{"main":[[{"node":"Rizz AI","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":41,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.set":{"count":5},"n8n-nodes-base.code":{"count":2},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.telegram":{"count":5},"n8n-nodes-base.stickyNote":{"count":10},"n8n-nodes-base.googleSheets":{"count":1},"@n8n/n8n-nodes-langchain.agent":{"count":2},"n8n-nodes-base.telegramTrigger":{"count":1},"n8n-nodes-base.googleSheetsTool":{"count":7},"@n8n/n8n-nodes-langchain.googleGemini":{"count":2},"@n8n/n8n-nodes-langchain.lmChatGoogleGemini":{"count":2},"@n8n/n8n-nodes-langchain.memoryBufferWindow":{"count":2}}},"status":"published","readyToDemo":null,"user":{"name":"John Alejandro SIlva","username":"alejandro-silva","bio":"Detail-oriented professional with a dual degree in Systems Engineering and Business Administration and international experience in technology and process improvement. I specialize in workflow automation with n8n, API integration, programming, and data analysis. Known for strong analytical skills and clear technical documentation.","verified":true,"links":["https://www.linkedin.com/in/john-alejandro-silva-rodriguez-48093526b/"],"avatar":"https://gravatar.com/avatar/aa8238738621b087e2ccf2dd45995f8ce0d4a279dd32aac466de486d5b823ec7?r=pg&d=retro&size=200"},"nodes":[{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"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-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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"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/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"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/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"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/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-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/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.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"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":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"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/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting 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/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/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/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/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/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"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/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/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.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"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"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1163,"icon":"fa:database","name":"@n8n/n8n-nodes-langchain.memoryBufferWindow","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Memory"],"Memory":["For beginners"]}}},"group":"[\"transform\"]","defaults":{"name":"Simple Memory"},"iconData":{"icon":"database","type":"icon"},"displayName":"Simple Memory","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1262,"icon":"file:google.svg","name":"@n8n/n8n-nodes-langchain.lmChatGoogleGemini","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatgooglegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgNDggNDgiPjxkZWZzPjxwYXRoIGlkPSJhIiBkPSJNNDQuNSAyMEgyNHY4LjVoMTEuOEMzNC43IDMzLjkgMzAuMSAzNyAyNCAzN2MtNy4yIDAtMTMtNS44LTEzLTEzczUuOC0xMyAxMy0xM2MzLjEgMCA1LjkgMS4xIDguMSAyLjlsNi40LTYuNEMzNC42IDQuMSAyOS42IDIgMjQgMiAxMS44IDIgMiAxMS44IDIgMjRzOS44IDIyIDIyIDIyYzExIDAgMjEtOCAyMS0yMiAwLTEuMy0uMi0yLjctLjUtNCIvPjwvZGVmcz48Y2xpcFBhdGggaWQ9ImIiPjx1c2UgeGxpbms6aHJlZj0iI2EiIG92ZXJmbG93PSJ2aXNpYmxlIi8+PC9jbGlwUGF0aD48cGF0aCBmaWxsPSIjRkJCQzA1IiBkPSJNMCAzN1YxMWwxNyAxM3oiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im0wIDExIDE3IDEzIDctNi4xTDQ4IDE0VjBIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMzNEE4NTMiIGQ9Im0wIDM3IDMwLTIzIDcuOSAxTDQ4IDB2NDhIMHoiIGNsaXAtcGF0aD0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiM0Mjg1RjQiIGQ9Ik00OCA0OCAxNyAyNGwtNC0zIDM1LTEweiIgY2xpcC1wYXRoPSJ1cmwoI2IpIi8+PC9zdmc+"},"displayName":"Google Gemini Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1309,"icon":"file:gemini.svg","name":"@n8n/n8n-nodes-langchain.googleGemini","codex":{"data":{"alias":["LangChain","video","document","audio","transcribe","assistant"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.googlegemini/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Miscellaneous","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Google Gemini"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iX2Zvb3RlclNwYXJrXzk4dWR0XzE1MSIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiB2aWV3Qm94PSIwIDAgNjQgNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTU3LjA2NjcgMjguNjEwM0M1Mi4xMzU5IDI2LjQ4NzggNDcuODIxNyAyMy41NzYgNDQuMTIyMyAxOS44Nzg0QzQwLjQyNDcgMTYuMTgwOCAzNy41MTI4IDExLjg2NDkgMzUuMzkwMiA2LjkzNDJDMzQuNTc1NCA1LjA0NDQ5IDMzLjkyMDYgMy4xMDIwNCAzMy40MTg2IDEuMTEwNDlDMzMuMjU0OSAwLjQ1OTM2OCAzMi42NzExIDAuMDAxMDM3NiAzMiAwLjAwMTAzNzZDMzEuMzI4OCAwLjAwMTAzNzYgMzAuNzQ1IDAuNDU5MzY4IDMwLjU4MTMgMS4xMTA0OUMzMC4wNzkzIDMuMTAyMDQgMjkuNDI0NiA1LjA0MjY3IDI4LjYwOTcgNi45MzQyQzI2LjQ4NzIgMTEuODY0OSAyMy41NzUzIDE2LjE4MDggMTkuODc3NyAxOS44Nzg0QzE2LjE4IDIzLjU3NiAxMS44NjQgMjYuNDg3OCA2LjkzMzI3IDI4LjYxMDNDNS4wNDM1MyAyOS40MjUxIDMuMTAxMDUgMzAuMDc5OSAxLjEwOTQ3IDMwLjU4MTlDMC40NTgzMzggMzAuNzQ1NiAwIDMxLjMyOTQgMCAzMi4wMDA1QzAgMzIuNjcxNiAwLjQ1ODMzOCAzMy4yNTU1IDEuMTA5NDcgMzMuNDE5MUMzLjEwMTA1IDMzLjkyMTEgNS4wNDE3MiAzNC41NzU5IDYuOTMzMjcgMzUuMzkwN0MxMS44NjQgMzcuNTEzMiAxNi4xNzgyIDQwLjQyNTEgMTkuODc3NyA0NC4xMjI2QzIzLjU3NzEgNDcuODIwMiAyNi40ODcyIDUyLjEzNjEgMjguNjA5NyA1Ny4wNjY4QzI5LjQyNDYgNTguOTU2NSAzMC4wNzkzIDYwLjg5OSAzMC41ODEzIDYyLjg5MDVDMzAuNzQ1IDYzLjU0MTYgMzEuMzI4OCA2NCAzMiA2NEMzMi42NzExIDY0IDMzLjI1NDkgNjMuNTQxNiAzMy40MTg2IDYyLjg5MDVDMzMuOTIwNiA2MC44OTkgMzQuNTc1NCA1OC45NTgzIDM1LjM5MDIgNTcuMDY2OEMzNy41MTI4IDUyLjEzNjEgNDAuNDI0NyA0Ny44MjIgNDQuMTIyMyA0NC4xMjI2QzQ3LjgxOTkgNDAuNDI1MSA1Mi4xMzU5IDM3LjUxMzIgNTcuMDY2NyAzNS4zOTA3QzU4Ljk1NjQgMzQuNTc1OSA2MC44OTg5IDMzLjkyMTEgNjIuODkwNSAzMy40MTkxQzYzLjU0MTYgMzMuMjU1NSA2NCAzMi42NzE2IDY0IDMyLjAwMDVDNjQgMzEuMzI5NCA2My41NDE2IDMwLjc0NTYgNjIuODkwNSAzMC41ODE5QzYwLjg5ODkgMzAuMDc5OSA1OC45NTgyIDI5LjQyNTEgNTcuMDY2NyAyOC42MTAzWiIgZmlsbD0id2hpdGUiPjwvcGF0aD48bWFzayBpZD0ibWFzazBfMTA4NTlfNDg5NCIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0Ij48cGF0aCBkPSJNMzIgMEMzMi42NzExIDEuMTQ0ZS0wNSAzMy4yNTUzIDAuNDU4MjYzIDMzLjQxODkgMS4xMDkzOEMzMy45MjA5IDMuMTAwOTMgMzQuNTc1OCA1LjA0Mzg5IDM1LjM5MDYgNi45MzM1OUMzNy41MTMxIDExLjg2MzkgNDAuNDI0NyAxNi4xNzk2IDQ0LjEyMjEgMTkuODc3QzQ3LjgyMTUgMjMuNTc0NSA1Mi4xMzU3IDI2LjQ4NjkgNTcuMDY2NCAyOC42MDk0QzU4Ljk1OCAyOS40MjQyIDYwLjg5OSAzMC4wNzkxIDYyLjg5MDYgMzAuNTgxMUM2My41NDE1IDMwLjc0NDggNjMuOTk5OCAzMS4zMjgxIDY0IDMxLjk5OUM2NCAzMi42NzAxIDYzLjU0MTcgMzMuMjU0MiA2Mi44OTA2IDMzLjQxOEM2MC44OTkgMzMuOTE5OSA1OC45NTYxIDM0LjU3NDggNTcuMDY2NCAzNS4zODk2QzUyLjEzNTggMzcuNTEyMSA0Ny44MTk2IDQwLjQyMzcgNDQuMTIyMSA0NC4xMjExQzQwLjQyNDYgNDcuODIwNCAzNy41MTMxIDUyLjEzNDkgMzUuMzkwNiA1Ny4wNjU0QzM0LjU3NTggNTguOTU3IDMzLjkyMDkgNjAuODk4MSAzMy40MTg5IDYyLjg4OTZDMzMuMjU1MiA2My41NDA3IDMyLjY3MTEgNjMuOTk5IDMyIDYzLjk5OUMzMS4zMjg5IDYzLjk5OSAzMC43NDQ4IDYzLjU0MDcgMzAuNTgxMSA2Mi44ODk2QzMwLjA3OTEgNjAuODk4MSAyOS40MjQyIDU4Ljk1NTEgMjguNjA5NCA1Ny4wNjU0QzI2LjQ4NjkgNTIuMTM0OSAyMy41NzczIDQ3LjgxODYgMTkuODc3OSA0NC4xMjExQzE2LjE3ODYgNDAuNDIzNyAxMS44NjQyIDM3LjUxMjEgNi45MzM1OSAzNS4zODk2QzUuMDQyMDQgMzQuNTc0OCAzLjEwMDk2IDMzLjkxOTkgMS4xMDkzOCAzMy40MThDMC40NTgzMDkgMzMuMjU0MiAwIDMyLjY3MDEgMCAzMS45OTlDMC4wMDAyMDE1NDggMzEuMzI4MSAwLjQ1ODQ2MyAzMC43NDQ4IDEuMTA5MzggMzAuNTgxMUMzLjEwMDk2IDMwLjA3OTEgNS4wNDM4NiAyOS40MjQyIDYuOTMzNTkgMjguNjA5NEMxMS44NjQzIDI2LjQ4NjkgMTYuMTgwNCAyMy41NzQ1IDE5Ljg3NzkgMTkuODc3QzIzLjU3NTMgMTYuMTc5NiAyNi40ODY5IDExLjg2MzkgMjguNjA5NCA2LjkzMzU5QzI5LjQyNDIgNS4wNDIwNyAzMC4wNzkxIDMuMTAwOTMgMzAuNTgxMSAxLjEwOTM4QzMwLjc0NDggMC40NTgyNiAzMS4zMjg5IDAgMzIgMFoiIGZpbGw9ImJsYWNrIj48L3BhdGg+PHBhdGggZD0iTTMyIDBDMzIuNjcxMSAxLjE0NGUtMDUgMzMuMjU1MyAwLjQ1ODI2MyAzMy40MTg5IDEuMTA5MzhDMzMuOTIwOSAzLjEwMDkzIDM0LjU3NTggNS4wNDM4OSAzNS4zOTA2IDYuOTMzNTlDMzcuNTEzMSAxMS44NjM5IDQwLjQyNDcgMTYuMTc5NiA0NC4xMjIxIDE5Ljg3N0M0Ny44MjE1IDIzLjU3NDUgNTIuMTM1NyAyNi40ODY5IDU3LjA2NjQgMjguNjA5NEM1OC45NTggMjkuNDI0MiA2MC44OTkgMzAuMDc5MSA2Mi44OTA2IDMwLjU4MTFDNjMuNTQxNSAzMC43NDQ4IDYzLjk5OTggMzEuMzI4MSA2NCAzMS45OTlDNjQgMzIuNjcwMSA2My41NDE3IDMzLjI1NDIgNjIuODkwNiAzMy40MThDNjAuODk5IDMzLjkxOTkgNTguOTU2MSAzNC41NzQ4IDU3LjA2NjQgMzUuMzg5NkM1Mi4xMzU4IDM3LjUxMjEgNDcuODE5NiA0MC40MjM3IDQ0LjEyMjEgNDQuMTIxMUM0MC40MjQ2IDQ3LjgyMDQgMzcuNTEzMSA1Mi4xMzQ5IDM1LjM5MDYgNTcuMDY1NEMzNC41NzU4IDU4Ljk1NyAzMy45MjA5IDYwLjg5ODEgMzMuNDE4OSA2Mi44ODk2QzMzLjI1NTIgNjMuNTQwNyAzMi42NzExIDYzLjk5OSAzMiA2My45OTlDMzEuMzI4OSA2My45OTkgMzAuNzQ0OCA2My41NDA3IDMwLjU4MTEgNjIuODg5NkMzMC4wNzkxIDYwLjg5ODEgMjkuNDI0MiA1OC45NTUxIDI4LjYwOTQgNTcuMDY1NEMyNi40ODY5IDUyLjEzNDkgMjMuNTc3MyA0Ny44MTg2IDE5Ljg3NzkgNDQuMTIxMUMxNi4xNzg2IDQwLjQyMzcgMTEuODY0MiAzNy41MTIxIDYuOTMzNTkgMzUuMzg5NkM1LjA0MjA0IDM0LjU3NDggMy4xMDA5NiAzMy45MTk5IDEuMTA5MzggMzMuNDE4QzAuNDU4MzA5IDMzLjI1NDIgMCAzMi42NzAxIDAgMzEuOTk5QzAuMDAwMjAxNTQ4IDMxLjMyODEgMC40NTg0NjMgMzAuNzQ0OCAxLjEwOTM4IDMwLjU4MTFDMy4xMDA5NiAzMC4wNzkxIDUuMDQzODYgMjkuNDI0MiA2LjkzMzU5IDI4LjYwOTRDMTEuODY0MyAyNi40ODY5IDE2LjE4MDQgMjMuNTc0NSAxOS44Nzc5IDE5Ljg3N0MyMy41NzUzIDE2LjE3OTYgMjYuNDg2OSAxMS44NjM5IDI4LjYwOTQgNi45MzM1OUMyOS40MjQyIDUuMDQyMDcgMzAuMDc5MSAzLjEwMDkzIDMwLjU4MTEgMS4xMDkzOEMzMC43NDQ4IDAuNDU4MjYgMzEuMzI4OSAwIDMyIDBaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTA4NTlfNDg5NCkiPjwvcGF0aD48L21hc2s+PGcgbWFzaz0idXJsKCNtYXNrMF8xMDg1OV80ODk0KSI+PGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjBfZl8xMDg1OV80ODk0KSI+PGVsbGlwc2UgY3g9IjE0LjIwODQiIGN5PSIxNi43MTY0IiByeD0iMTQuMjA4NCIgcnk9IjE2LjcxNjQiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTQyMzQzIDAuMzM0NjQ5IC0wLjMzNDY1NiAwLjk0MjM0IC03Ljk3OSAxMy43NzM1KSIgZmlsbD0iI0ZGRTQzMiI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyMV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMjcuMDU0MyIgY3k9IjIuNTUxMTQiIHJ4PSIxOC4zOTQ0IiByeT0iMTguNzk4NSIgZmlsbD0iI0ZDNDEzRCI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyMl9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMTkuMjI0NSIgY3k9IjI0LjkwNDIiIHJ4PSIxOS4yMjQ1IiByeT0iMjQuOTA0MiIgdHJhbnNmb3JtPSJtYXRyaXgoMC45OTg4MDcgLTAuMDQ4ODI1NCAwLjA0ODgyNjYgMC45OTg4MDcgLTEuNzI3NzggMzIuNjU3MykiIGZpbGw9IiMwMEI5NUMiPjwvZWxsaXBzZT48L2c+PGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjNfZl8xMDg1OV80ODk0KSI+PGVsbGlwc2UgY3g9IjE5LjIyNDUiIGN5PSIyNC45MDQyIiByeD0iMTkuMjI0NSIgcnk9IjI0LjkwNDIiIHRyYW5zZm9ybT0ibWF0cml4KDAuOTk4ODA3IC0wLjA0ODgyNTQgMC4wNDg4MjY2IDAuOTk4ODA3IC0xLjcyNzc4IDMyLjY1NzMpIiBmaWxsPSIjMDBCOTVDIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI0X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIxOC44NDI5IiBjeT0iMjAuNzQ0MSIgcng9IjE4Ljg0MjkiIHJ5PSIyMC43NDQxIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjg1NDMwMSAtMC41MTk3NzkgMC41MTk3OSAwLjg1NDI5NCAtNy4xMzU3NCA0Ny41MDc4KSIgZmlsbD0iIzAwQjk1QyI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyNV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iNjYuNDYxNyIgY3k9IjI0Ljk3NyIgcng9IjE4LjA5MzMiIHJ5PSIxNy40MjI5IiBmaWxsPSIjMzE4NkZGIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI2X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIyMC45MjkyIiBjeT0iMjIuMDc1MiIgcng9IjIwLjkyOTIiIHJ5PSIyMi4wNzUyIiB0cmFuc2Zvcm09Im1hdHJpeCgwLjc5NTk5IDAuNjA1MzEgLTAuNjA1MzIgMC43OTU5ODIgLTIuODE4ODUgLTcuNDMzMjMpIiBmaWxsPSIjRkJCQzA0Ij48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXI3X2ZfMTA4NTlfNDg5NCkiPjxlbGxpcHNlIGN4PSIyNC4xMzExIiBjeT0iMjIuMjkxOSIgcng9IjI0LjEzMTEiIHJ5PSIyMi4yOTE5IiB0cmFuc2Zvcm09Im1hdHJpeCgwLjgyNDAzNyAwLjU2NjUzNiAtMC41NjY1NDYgMC44MjQwMyAzOS42MzM4IDAuMzEwNjA4KSIgZmlsbD0iIzMxODZGRiI+PC9lbGxpcHNlPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyOF9mXzEwODU5XzQ4OTQpIj48cGF0aCBkPSJNNTQuMjI1NSAtMi4zMDQwM0M1Ny4wMTk1IDEuNDk0NjIgNTMuNDI5NCA4Ljg4MDQgNDYuMjA2OCAxNC4xOTI2QzM4Ljk4NDIgMTkuNTA0OCAzMC44NjQyIDIwLjczMTggMjguMDcwMiAxNi45MzMxQzI1LjI3NjIgMTMuMTM0NSAyOC44NjYzIDUuNzQ4NjcgMzYuMDg4OSAwLjQzNjQ4NkM0My4zMTE1IC00Ljg3NTcgNTEuNDMxNSAtNi4xMDI2NyA1NC4yMjU1IC0yLjMwNDAzWiIgZmlsbD0iIzc0OUJGRiI+PC9wYXRoPjwvZz48ZyBmaWx0ZXI9InVybCgjZmlsdGVyOV9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMjcuNTg1MyIgY3k9IjE3LjE0NzgiIHJ4PSIyNy41ODUzIiByeT0iMTcuMTQ3OCIgdHJhbnNmb3JtPSJtYXRyaXgoMC43MzMxNjYgLTAuNjgwMDQ5IDAuNjgwMDYxIDAuNzMzMTU1IC0xMi4yNTgzIDkuNDk2OTUpIiBmaWxsPSIjRkM0MTNEIj48L2VsbGlwc2U+PC9nPjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIxMF9mXzEwODU5XzQ4OTQpIj48ZWxsaXBzZSBjeD0iMTQuNzgxOSIgY3k9IjguNTk2MzciIHJ4PSIxNC43ODE5IiByeT0iOC41OTYzNyIgdHJhbnNmb3JtPSJtYXRyaXgoMC44MTMxODYgMC41ODIwMDQgLTAuNTgyMDE2IDAuODEzMTc3IDYuMzc4NDIgMzAuNTExKSIgZmlsbD0iI0ZGRUU0OCI+PC9lbGxpcHNlPjwvZz48L2c+PGRlZnM+PGZpbHRlciBpZD0iZmlsdGVyMF9mXzEwODU5XzQ4OTQiIHg9Ii0xOS42MTgiIHk9IjEyLjkwMjciIHdpZHRoPSIzOC44NjgxIiBoZWlnaHQ9IjQyLjc1NjIiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMi40NTk2NSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyMV9mXzEwODU5XzQ4OTQiIHg9Ii0xNS4xMjIzIiB5PSItNDAuMDI5NiIgd2lkdGg9Ijg0LjM1MzMiIGhlaWdodD0iODUuMTYxNSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ij48L2ZlRmxvb2Q+PGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiPjwvZmVCbGVuZD48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxMS44OTExIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMTA4NTlfNDg5NCI+PC9mZUdhdXNzaWFuQmx1cj48L2ZpbHRlcj48ZmlsdGVyIGlkPSJmaWx0ZXIyX2ZfMTA4NTlfNDg5NCIgeD0iLTIwLjc2ODIiIHk9IjExLjQ4MzUiIHdpZHRoPSI3OC45MTYxIiBoZWlnaHQ9IjkwLjIxOTYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTAuMTA4NiIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyM19mXzEwODU5XzQ4OTQiIHg9Ii0yMC43NjgyIiB5PSIxMS40ODM1IiB3aWR0aD0iNzguOTE2MSIgaGVpZ2h0PSI5MC4yMTk2IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEwLjEwODYiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjRfZl8xMDg1OV80ODk0IiB4PSItMTkuODUiIHk9IjE0Ljk2NjQiIHdpZHRoPSI3OS4xODg2IiBoZWlnaHQ9IjgwLjkzNzgiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTAuMTA4NiIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyNV9mXzEwODU5XzQ4OTQiIHg9IjI5LjE1NjEiIHk9Ii0xMS42NTgyIiB3aWR0aD0iNzQuNjExMSIgaGVpZ2h0PSI3My4yNzAzIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjkuNjA2MTMiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjZfZl8xMDg1OV80ODk0IiB4PSItMzguMjkxIiB5PSItMTYuMjY4NyIgd2lkdGg9Ijc3LjUzOCIgaGVpZ2h0PSI3OC4xNTEzIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjguNzA1OTEiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjdfZl8xMDg1OV80ODk0IiB4PSI3Ljc4MDM4IiB5PSItNi4wOTgxIiB3aWR0aD0iNzguMjE4MSIgaGVpZ2h0PSI3Ni44OTgyIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjcuNzc0NzMiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjhfZl8xMDg1OV80ODk0IiB4PSIxMy4yMDgyIiB5PSItMTguNDI1IiB3aWR0aD0iNTUuODc5MyIgaGVpZ2h0PSI1MS40NzkxIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiPjwvZmVGbG9vZD48ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSI+PC9mZUJsZW5kPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjYuOTU2OTQiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8xMDg1OV80ODk0Ij48L2ZlR2F1c3NpYW5CbHVyPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9ImZpbHRlcjlfZl8xMDg1OV80ODk0IiB4PSItMTUuNDczOSIgeT0iLTMxLjAyNzIiIHdpZHRoPSI3MC4yMDM0IiBoZWlnaHQ9IjY4LjY3MzUiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCI+PC9mZUZsb29kPjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIj48L2ZlQmxlbmQ+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNS44NzU5OCIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzEwODU5XzQ4OTQiPjwvZmVHYXVzc2lhbkJsdXI+PC9maWx0ZXI+PGZpbHRlciBpZD0iZmlsdGVyMTBfZl8xMDg1OV80ODk0IiB4PSItMTQuMTczIiB5PSIyMC40NzQiIHdpZHRoPSI1NS4xMzczIiBoZWlnaHQ9IjUxLjI2MSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ij48L2ZlRmxvb2Q+PGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiPjwvZmVCbGVuZD48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3LjI3MjUzIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMTA4NTlfNDg5NCI+PC9mZUdhdXNzaWFuQmx1cj48L2ZpbHRlcj48bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTA4NTlfNDg5NCIgeDE9IjE4LjE5MzEiIHkxPSI0Mi44MjEiIHgyPSI1MS40MzM1IiB5Mj0iMTQuNzk1OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM0ODkzRkMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjAuMjciIHN0b3AtY29sb3I9IiM0ODkzRkMiPjwvc3RvcD48c3RvcCBvZmZzZXQ9IjAuNzc2OTgxIiBzdG9wLWNvbG9yPSIjOTY5REZGIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkQ5OUZFIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+Cg=="},"displayName":"Google Gemini","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":38,"name":"Lead Nurturing"},{"id":47,"name":"AI Chatbot"}],"image":[]}}