{"workflow":{"id":13077,"name":"Send personalized job application emails with Telegram, OpenAI, and Gmail","views":167,"recentViews":0,"totalViews":167,"createdAt":"2026-01-28T22:24:07.080Z","description":"# 🔧 Setup Guide - Hiring Bot Workflow\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-Connect-0A66C2?style=flat-square&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/mosaab-yassir-lafrimi/)[![Telegram](https://img.shields.io/badge/Telegram-@joevenner-26A5E4?style=flat-square&logo=telegram&logoColor=white)](https://t.me/joevenner)\n\n## 📋 Prerequisites\n\nBefore importing this workflow, make sure you have:\n\n- ✅ **n8n Instance** (cloud or self-hosted)\n- ✅ **Telegram Bot Token** (from [@BotFather](https://t.me/botfather))\n- ✅ **OpenAI API Key** (with GPT-4 Vision access)\n- ✅ **Gmail Account** (with OAuth setup)\n- ✅ **Google Drive** (to store your resume)\n- ✅ **Redis Instance** (free tier available at [Redis Cloud](https://redis.com/try-free/))\n\n---\n\n## 🚀 Step-by-Step Setup\n\n### 1️⃣ **Upload Your Resume to OpenAI**\n\nFirst, you need to upload your resume to OpenAI's Files API:\n\n```bash\n# Upload your resume to OpenAI\ncurl https://api.openai.com/v1/files \\\n  -H \"Authorization: Bearer YOUR_OPENAI_API_KEY\" \\\n  -F purpose=\"assistants\" \\\n  -F file=\"@/path/to/your/resume.pdf\"\n```\n\n**Important:** Save the `file_id` from the response (looks like `file-xxxxxxxxxxxxx`)\n\n**Alternative:** Use OpenAI Playground or Python:\n```python\nfrom openai import OpenAI\nclient = OpenAI(api_key=\"YOUR_API_KEY\")\n\nwith open(\"resume.pdf\", \"rb\") as file:\n    response = client.files.create(file=file, purpose=\"assistants\")\n    print(f\"File ID: {response.id}\")\n```\n\n---\n\n### 2️⃣ **Upload Your Resume to Google Drive**\n\n1. Go to [Google Drive](https://drive.google.com)\n2. Upload your resume PDF\n3. Right-click → \"Get link\" → Copy the file ID from URL\n   - URL format: `https://drive.google.com/file/d/FILE_ID_HERE/view`\n   - Example ID: `1h79U8IFtI2dp_OBtnyhdGaarWpKb9qq9`\n\n---\n\n### 3️⃣ **Create a Telegram Bot**\n\n1. Open Telegram and message [@BotFather](https://t.me/botfather)\n2. Send `/newbot`\n3. Choose a name and username\n4. Save the **Bot Token** (looks like `123456789:ABCdefGHIjklMNOpqrsTUVwxyz`)\n5. (Optional) Set bot commands:\n   ```\n   /start - Start the bot\n   /help - Get help\n   ```\n\n---\n\n### 4️⃣ **Set Up Redis**\n\n**Option A: Redis Cloud (Recommended - Free)**\n1. Go to [Redis Cloud](https://redis.com/try-free/)\n2. Create a free account\n3. Create a database\n4. Note: Host, Port, Password\n\n**Option B: Local Redis**\n```bash\n# Docker\ndocker run -d -p 6379:6379 redis:latest\n\n# Or via package manager\nsudo apt-get install redis-server\n```\n\n---\n\n### 5️⃣ **Import the Workflow to n8n**\n\n1. Open n8n\n2. Click **\"+\"** → **\"Import from File\"**\n3. Select `Hiring_Bot_Anonymized.json`\n4. Workflow will import with placeholder values\n\n---\n\n### 6️⃣ **Configure Credentials**\n\n#### **A. Telegram Bot Credentials**\n1. In n8n, go to **Credentials** → **Create New**\n2. Select **\"Telegram API\"**\n3. Enter your Bot Token from Step 3\n4. Test & Save\n\n#### **B. OpenAI API Credentials**\n1. Go to **Credentials** → **Create New**\n2. Select **\"OpenAI API\"**\n3. Enter your OpenAI API Key\n4. Test & Save\n\n#### **C. Redis Credentials**\n1. Go to **Credentials** → **Create New**\n2. Select **\"Redis\"**\n3. Enter:\n   - Host: Your Redis host\n   - Port: `6379` (default)\n   - Password: Your Redis password\n4. Test & Save\n\n#### **D. Gmail Credentials**\n1. Go to **Credentials** → **Create New**\n2. Select **\"Gmail OAuth2 API\"**\n3. Follow OAuth setup flow\n4. Authorize n8n to access Gmail\n5. Test & Save\n\n#### **E. Google Drive Credentials**\n1. Go to **Credentials** → **Create New**\n2. Select **\"Google Drive OAuth2 API\"**\n3. Follow OAuth setup flow\n4. Authorize n8n to access Drive\n5. Test & Save\n\n---\n\n### 7️⃣ **Update Node Values**\n\n#### **A. Update OpenAI File ID in \"PayloadForReply\" Node**\n\n1. Double-click the **\"PayloadForReply\"** node\n2. Find this line in the code:\n   ```javascript\n   const resumeFileId = \"YOUR_OPENAI_FILE_ID_HERE\";\n   ```\n3. Replace with your actual OpenAI file ID from Step 1:\n   ```javascript\n   const resumeFileId = \"file-xxxxxxxxxxxxx\";\n   ```\n4. Save the node\n\n#### **B. Update Google Drive File ID (Both \"Download Resume\" Nodes)**\n\n**There are TWO nodes that need updating:**\n\n**Node 1: \"Download Resume\"**\n1. Double-click the node\n2. In the **\"File ID\"** field, click \"Expression\"\n3. Replace `YOUR_GOOGLE_DRIVE_FILE_ID` with your actual ID\n4. Update **\"Cached Result Name\"** to your resume filename\n5. Save\n\n**Node 2: \"Download Resume1\"** (same process)\n1. Double-click the node\n2. Update File ID\n3. Update filename\n4. Save\n\n---\n\n### 8️⃣ **Assign Credentials to Nodes**\n\nAfter importing, you need to assign your credentials to each node:\n\n**Nodes that need credentials:**\n\n| Node Name | Credential Type |\n|-----------|----------------|\n| Telegram Trigger | Telegram API |\n| Generating Reply | OpenAI API |\n| Store AI Reply | Redis |\n| GetValues | Redis |\n| Download Resume | Google Drive OAuth2 |\n| Download Resume1 | Google Drive OAuth2 |\n| Schedule Email | Gmail OAuth2 |\n| SendConfirmation | Telegram API |\n| Send a message | Telegram API |\n| Edit a text message | Telegram API |\n| Send a text message | Telegram API |\n| Send a chat action | Telegram API |\n\n**How to assign:**\n1. Click on each node\n2. In the **\"Credentials\"** section, select your saved credential\n3. Save the node\n\n---\n\n## 🧪 Testing the Workflow\n\n### 1️⃣ **Activate the Workflow**\n1. Click the **\"Active\"** toggle in the top-right\n2. Workflow should now be listening for Telegram messages\n\n### 2️⃣ **Test with a Job Post**\n1. Find a job post online (LinkedIn, Indeed, etc.)\n2. Take a screenshot\n3. Send it to your Telegram bot\n4. Bot should respond with:\n   - \"Analyzing job post...\" (typing indicator)\n   - Full email draft with confirmation button\n\n### 3️⃣ **Test Email Sending**\n1. Click **\"Send The Email\"** button\n2. Check Gmail to verify email was sent\n3. Check if resume was attached\n\n---\n\n## 🐛 Troubleshooting\n\n### **Issue: \"No binary image found\"**\n- **Solution:** Make sure you're sending an image file, not a document\n\n### **Issue: \"Invalid resume file_id\"**\n- **Solution:** \n  1. Check OpenAI file_id format (starts with `file-`)\n  2. Verify file was uploaded successfully\n  3. Make sure you updated the code in PayloadForReply node\n\n### **Issue: \"Failed to parse model JSON\"**\n- **Solution:** \n  1. Check OpenAI API quota/limits\n  2. Verify model name is correct (`gpt-5.2`)\n  3. Check if image is readable\n\n### **Issue: Gmail not sending**\n- **Solution:**\n  1. Re-authenticate Gmail OAuth\n  2. Check Gmail permissions\n  3. Verify \"attachments\" field is set to \"Resume\"\n\n### **Issue: Redis connection failed**\n- **Solution:**\n  1. Test Redis connection in credentials\n  2. Check firewall rules\n  3. Verify host/port/password\n\n### **Issue: Telegram webhook not working**\n- **Solution:**\n  1. Deactivate and reactivate workflow\n  2. Check Telegram bot token is valid\n  3. Make sure bot is not blocked\n\n---\n\n## 🔐 Security Best Practices\n\n1. **Never share your credentials** - Keep API keys private\n2. **Use environment variables** in n8n for sensitive data\n3. **Set up Redis password** - Don't use default settings\n4. **Limit OAuth scopes** - Only grant necessary permissions\n5. **Rotate API keys** regularly\n6. **Monitor usage** - Check for unexpected API calls\n\n---\n\n## 🎨 Customization Ideas\n\n### **Change AI Model**\nIn the PayloadForReply node, update:\n```javascript\nconst MODEL = \"gpt-5.2\"; // Change to gpt-4, claude-3-opus, etc.\n```\n\n### **Adjust Email Length**\nModify the system prompt:\n```javascript\n// From:\nEmail body: ~120–180 words unless INSIGHTS specify otherwise.\n\n// To:\nEmail body: ~100–150 words for concise applications.\n```\n\n### **Add More Languages**\nUpdate language detection logic in the system prompt to support more languages.\n\n### **Custom Job Filtering**\nEdit the system prompt to target specific roles:\n```javascript\n// From:\nOnly pick ONE job offer to process — the one most clearly related to Data roles\n\n// To:\nOnly pick ONE job offer to process — the one most clearly related to [YOUR FIELD]\n```\n\n### **Add Follow-up Reminders**\nAdd a \"Wait\" node after email sends to schedule a reminder after 7 days.\n\n---\n\n## 📊 Workflow Structure\n\n```\nTelegram Input\n    ↓\nSwitch (Route by type)\n    ↓\n├─ New Job Post\n│   ↓\n│   Send Chat Action (typing...)\n│   ↓\n│   PayloadForReply (Build AI request)\n│   ↓\n│   Generating Reply (Call OpenAI)\n│   ↓\n│   FormatAiReply (Parse JSON)\n│   ↓\n│   Store AI Reply (Redis cache)\n│   ↓\n│   SendConfirmation (Show preview)\n│\n└─ Callback (User clicked \"Send\")\n    ↓\n    GetValues (Fetch from Redis)\n    ↓\n    Format Response\n    ↓\n    Download Resume (from Drive)\n    ↓\n    ├─ Path A: Immediate Send\n    │   ↓\n    │   Send Confirmation Message\n    │   ↓\n    │   Edit Message (update status)\n    │\n    └─ Path B: Scheduled Send\n        ↓\n        Wait (10 seconds)\n        ↓\n        Download Resume Again\n        ↓\n        Schedule Email (Gmail)\n        ↓\n        Send Success Message\n```\n\n---\n\n## 💡 Tips for Best Results\n\n1. **High-Quality Resume:** Upload a well-formatted PDF resume\n2. **Clear Screenshots:** Take clear, readable job post screenshots\n3. **Use Captions:** Add instructions via Telegram captions\n   - Example: `\"make it more casual\"`\n   - Example: `\"send to recruiter@company.com\"`\n4. **Review Before Sending:** Always read the draft before clicking send\n5. **Update Resume Regularly:** Keep your Google Drive resume current\n6. **Test First:** Try with a few test jobs before mass applying\n\n---\n\n## 🆘 Need Help?\n\n- 📚 [n8n Documentation](https://docs.n8n.io/)\n- 💬 [n8n Community Forum](https://community.n8n.io/)\n- 📺 [n8n YouTube Channel](https://www.youtube.com/c/n8n-io)\n- 🤖 [OpenAI Documentation](https://platform.openai.com/docs)\n- 📱 [Telegram Bot API Docs](https://core.telegram.org/bots/api)\n\n---\n\n## 📝 Checklist\n\nUse this checklist to verify your setup:\n\n- [ ] OpenAI resume file uploaded (got file_id)\n- [ ] Google Drive resume uploaded (got file ID)\n- [ ] Telegram bot created (got bot token)\n- [ ] Redis instance created (got credentials)\n- [ ] All n8n credentials created and tested\n- [ ] PayloadForReply node updated with OpenAI file_id\n- [ ] Both Download Resume nodes updated with Drive file_id\n- [ ] All nodes have credentials assigned\n- [ ] Workflow activated\n- [ ] Test message sent successfully\n- [ ] Test email received successfully\n\n---\n\n**🎉 You're all set! Start applying to jobs in 10 seconds!**\n\nMade with ❤️ and n8n","workflow":{"id":"m3PR6pVKF4OpMgEr","meta":{"instanceId":"fd558899fce436cdfcffc7f5c23c949e123f05b6e2c47c14eb206a85e39b585b","templateCredsSetupCompleted":true},"name":"Send job applications with Telegram, OpenAI, and Gmail","tags":[{"id":"L1ONQkjTRkmEpb1L","name":"Prod","createdAt":"2026-01-29T09:38:03.164Z","updatedAt":"2026-01-29T09:38:03.164Z"}],"nodes":[{"id":"b07613f6-04cc-46e2-a105-11190f1c229f","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-624,320],"parameters":{"width":500,"height":520,"content":"## How it works\n\nThis workflow automates job applications through Telegram. Send a screenshot of any job posting to your Telegram bot, and AI will extract the job details, match them to your resume, and generate a personalized application email.\n\nThe bot analyzes the job requirements using OpenAI's vision API, compares them with your resume stored in OpenAI Files, then drafts a tailored email in the job's language. You review and approve the draft before it's sent via Gmail with your resume attached.\n\n## Setup steps\n\n1. Upload your resume to OpenAI Files API and note the file_id\n2. Upload your resume to Google Drive and note the file_id\n3. Create a Telegram bot via @BotFather and save the token\n4. Configure credentials in n8n: Telegram, OpenAI, Redis, Gmail, Google Drive\n5. Update the PayloadForReply node with your OpenAI resume file_id\n6. Update both Download Resume nodes with your Google Drive file_id\n7. Activate the workflow and send a job post screenshot to your bot"},"typeVersion":1},{"id":"7230dd49-f98e-4659-8562-109582963196","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-64,320],"parameters":{"color":7,"width":347,"height":220,"content":"## Input routing\n\nReceives job post images or callback confirmations from Telegram and routes to the appropriate path"},"typeVersion":1},{"id":"a0a21348-1d90-406b-bfb2-dcd1329f5121","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[432,256],"parameters":{"color":7,"width":492,"height":140,"content":"## AI analysis and email generation\n\nExtracts job details from image, matches with resume, and generates personalized application email"},"typeVersion":1},{"id":"bd5b5afa-1233-4223-b10d-f4d3b411513d","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[1104,256],"parameters":{"color":7,"width":480,"height":140,"content":"## Draft storage and user confirmation\n\nStores email draft in Redis and sends preview to user with approval button"},"typeVersion":1},{"id":"a76700c9-8fcb-46d0-8de3-4196a198f273","name":"Telegram Trigger","type":"n8n-nodes-base.telegramTrigger","position":[-48,624],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"updates":["message","callback_query"],"additionalFields":{"download":true}},"typeVersion":1.2},{"id":"68bcb3ea-c5fa-4618-b5d9-8d1438d61e6c","name":"Build AI request payload","type":"n8n-nodes-base.code","position":[624,432],"parameters":{"jsCode":"// ---------- Inputs ----------\n/**\n * Expects a Telegram update upstream.\n * - Image is in binary (first binary key)\n * - Caption (optional) at $.message.caption or $.caption\n * - Optional \"insights\" (tone/length hints) at $.insights\n * Provide your uploaded resume file_id below.\n */\nconst inputItem = $('Telegram Trigger').first();\n\n// Detect first binary (photo)\nconst firstBinaryKey = Object.keys(inputItem.binary || {})[0];\nif (!firstBinaryKey) {\n  throw new Error(\"No binary image found in input. Connect the job post image.\");\n}\nconst jobImageBinary = inputItem.binary[firstBinaryKey].data;\nconst jobImageMime   = inputItem.binary[firstBinaryKey].mimeType || \"image/jpeg\";\nconst jobImageBase64 = `data:${jobImageMime};base64,${jobImageBinary}`;\n\n// Telegram caption (pass through verbatim; do NOT parse or regex)\nconst caption =\n  inputItem.json?.message?.caption ??\n  inputItem.json?.caption ??\n  \"\";\n\n// Optional extra guidance from upstream\nconst insights = (inputItem.json?.insights ?? \"\").toString();\n\n// ---------- Config ----------\nconst MODEL = \"gpt-5.2\";\nconst resumeFileId = \"YOUR_OPENAI_FILE_ID_HERE\"; // <-- replace with your own file_id\nif (!resumeFileId?.startsWith(\"file-\")) {\n  throw new Error(\"Invalid resume file_id. Upload your resume to OpenAI and update the constant.\");\n}\n\n// ---------- Prompts ----------\nconst systemPrompt = `\nYou are a job-application assistant.\n\nOnly pick ONE job offer to process — the one most clearly related to Data roles\n(Data Engineer, Data Analyst, Data Scientist, ML/AI, Analytics, BI, etc.) and best matching the attached resume.\n\nPriority of sources:\nP1) CAPTION (if provided) — treat as highest-priority instructions/hints.\n    If CAPTION says to use a particular email (e.g., \"send to this email ...\"),\n    use that email for recruiter_email even if the image shows a different one.\nP2) Job post IMAGE content.\nP3) Resume.\n\nTasks:\n1) Read the job post IMAGE and extract fields into the provided JSON schema.\n2) Use the CAPTION (P1) to override/guide decisions, including recruiter_email selection.\n3) Read the resume and identify:\n   - The most relevant past experiences,\n   - Concrete achievements,\n   - Technical skills and tools,\n   - Business impact that aligns with the job post.\n4) Using those findings, draft a concise, professional outreach email tailored to the role.\n   - Explicitly highlight a few resume-backed experiences that match the job post.\n   - Integrate them naturally (no lists, no bullet points).\n   - Refine the language for clarity, professionalism, and human tone.\n5) Detect the job language and write the email in that language (FR post → FR email; else EN).\n\nOutput rules:\n- Be concise, warm, confident (no buzzwords, no generic AI clichés).\n- Only claim skills and experiences supported by the resume.\n- If a field is missing, return \"\" for strings or [] for arrays (no hallucination).\n- Email body: ~120–180 words unless INSIGHTS specify otherwise.\n- Emphasize relevance: relate my previous work directly to the job responsibilities.\n- Subject: ~6–10 words.\n- Plain text only (no markdown).\n`;\n\nconst userPrompt = `\nFrom the job image:\n- Extract all fields exactly as defined in the schema.\n- Recruiter email selection order:\n  1) Anything instructed in CAPTION (highest priority).\n  2) Otherwise use the recruiter/application email from the IMAGE.\n  3) Otherwise set recruiter_email to \"\".\n\nThen, using my resume:\n- Identify my most relevant past experiences and skills that match this role.\n- Incorporate those experiences naturally into the outreach email to show clear alignment.\n- Highlight achievements only if they appear in the resume.\n- Refine the email for clarity, flow, and professionalism.\n- Follow INSIGHTS (tone/length). If CAPTION and INSIGHTS conflict, CAPTION wins.\n\nReturn ONLY the JSON according to the schema (no extra text).\n`;\n\n// ---------- Build /v1/responses payload ----------\nconst payload = {\n  model: MODEL,\n  input: [\n    {\n      role: \"system\",\n      content: [{ type: \"input_text\", text: systemPrompt.trim() }]\n    },\n    {\n      role: \"user\",\n      content: [\n        { type: \"input_text\", text: userPrompt.trim() },\n\n        // Provide CAPTION and INSIGHTS verbatim (no parsing)\n        { type: \"input_text\", text: `CAPTION (P1): ${caption || \"(none)\"}` },\n        { type: \"input_text\", text: `INSIGHTS: ${insights || \"(none)\"}` },\n\n        // Image to parse\n        { type: \"input_image\", image_url: jobImageBase64 },\n\n        // Resume file reference\n        { type: \"input_file\", file_id: resumeFileId }\n      ]\n    }\n  ],\n  text: {\n    format: {\n      type: \"json_schema\",\n      name: \"job_apply_payload_v1\",\n      strict: true,\n      schema: {\n        type: \"object\",\n        additionalProperties: false,\n        properties: {\n          job_fields: {\n            type: \"object\",\n            additionalProperties: false,\n            properties: {\n              title:            { type: \"string\" },\n              company:          { type: \"string\" },\n              location:         { type: \"string\" },\n              seniority:        { type: \"string\" },\n              employment_type:  { type: \"string\" },\n              language:         { type: \"string\" },\n              requirements:     { type: \"array\", items: { type: \"string\" } },\n              nice_to_have:     { type: \"array\", items: { type: \"string\" } },\n              salary_range:     { type: \"string\" },\n              posted_date:      { type: \"string\" },\n              recruiter_email:  { type: \"string\" }\n            },\n            required: [\n              \"title\",\n              \"company\",\n              \"location\",\n              \"seniority\",\n              \"employment_type\",\n              \"language\",\n              \"requirements\",\n              \"nice_to_have\",\n              \"salary_range\",\n              \"posted_date\",\n              \"recruiter_email\"\n            ]\n          },\n          email_subject: { type: \"string\" },\n          email_body:    { type: \"string\" }\n        },\n        required: [\"job_fields\", \"email_subject\", \"email_body\"]\n      }\n    }\n  },\n  max_output_tokens: 1000\n};\n\nreturn { json: { payload } };"},"typeVersion":2},{"id":"dda0833a-5fbd-46d1-b36b-34833f30042f","name":"Call OpenAI API","type":"n8n-nodes-base.httpRequest","position":[848,432],"parameters":{"url":"https://api.openai.com/v1/responses","method":"POST","options":{},"jsonBody":"={{ $json.payload }}","sendBody":true,"sendHeaders":true,"specifyBody":"json","authentication":"predefinedCredentialType","headerParameters":{"parameters":[{"name":"Content-Type","value":"application/json"}]},"nodeCredentialType":"openAiApi"},"typeVersion":4.2},{"id":"4cc46606-de4f-402f-beb6-76ea7a433e18","name":"Parse AI response","type":"n8n-nodes-base.code","position":[1072,432],"parameters":{"jsCode":"const raw = $json.output?.[0]?.content?.[0]?.text || '{}';\nlet parsed;\ntry { parsed = JSON.parse(raw); }\ncatch (e) { throw new Error(\"Failed to parse model JSON: \" + e.message + \"\\nRaw: \" + raw); }\nreturn { json: parsed };\n// -> json.job_fields.*, json.email_subject, json.email_body"},"typeVersion":2},{"id":"993f7770-de8b-404a-91f7-8da9f28a6e66","name":"Store draft in Redis","type":"n8n-nodes-base.redis","position":[1296,432],"parameters":{"key":"={{ $json.job_fields.title.replaceAll(\" \",\"\") }}","ttl":900,"value":"={{ JSON.stringify({\n  Offer: $json.job_fields.title,\n  Subject: $json.email_subject,\n  Recruiter: $json.job_fields.recruiter_email,\n  Email: $json.email_body\n}) }}","expire":true,"keyType":"string","operation":"set"},"typeVersion":1},{"id":"1f2c1707-3320-4117-acf3-ffb0a90201b7","name":"Send preview to Telegram","type":"n8n-nodes-base.telegram","position":[1520,432],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"text":"=✨ *Confirm The Job Apply!* ✨\n\n💼 *Offer:* {{ $json.job_fields.title }}\n\n📝 *Subject:* {{ $('Parse AI response').item.json.email_subject }}\n\n📧 *Recruiter:* {{ $json.job_fields.recruiter_email }}\n\n💌 *Email Draft:* --------->\n\n\n{{ $('Parse AI response').item.json.email_body }}","chatId":"={{ $('Telegram Trigger').item.json.message.chat.id }}","replyMarkup":"inlineKeyboard","inlineKeyboard":{"rows":[{"row":{"buttons":[{"text":"Send The Email","additionalFields":{"callback_data":"={{ $('Parse AI response').item.json.job_fields.title.replaceAll(\" \",\"\") }}"}}]}}]},"additionalFields":{"parse_mode":"HTML","appendAttribution":false}},"typeVersion":1.2},{"id":"bc21e92c-3f22-4e2c-bc6d-466fe42c624f","name":"Retrieve draft from Redis","type":"n8n-nodes-base.redis","position":[400,720],"parameters":{"key":"={{ $json.callback_query.message.reply_markup.inline_keyboard[0][0].callback_data }}","options":{},"operation":"get"},"typeVersion":1},{"id":"6e490fa8-825f-4cf9-bc6d-17009186db01","name":"Parse draft data","type":"n8n-nodes-base.code","position":[624,720],"parameters":{"jsCode":"return items.map(i => {\n  const p = JSON.parse(i.json.value || i.json.propertyName);\n  return { json: { \n    offer: p.Offer, subject: p.Subject, recruiter: p.Recruiter, email: p.Email \n  }};\n});"},"typeVersion":2},{"id":"687dd808-e352-48ef-b1e6-39752e8df277","name":"Download resume from Drive","type":"n8n-nodes-base.googleDrive","position":[848,720],"parameters":{"fileId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_DRIVE_FILE_ID","cachedResultUrl":"YOUR_RESUME_URL","cachedResultName":"Your_Resume.pdf"},"options":{"fileName":"Your_Resume.pdf","binaryPropertyName":"Resume"},"operation":"download"},"typeVersion":3},{"id":"0b57006e-2e50-40dd-b03d-74f7837d89f5","name":"Notify immediate send","type":"n8n-nodes-base.telegram","position":[1072,624],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"text":"=✅ Congratulations, your Email to {{ $json.recruiter }} was sent. Good luck!","chatId":"={{ $('Telegram Trigger').item.json.callback_query.message.chat.id }}","additionalFields":{}},"typeVersion":1.2},{"id":"1e37adf5-fa37-4433-9996-2f468bf99efb","name":"Send email via Gmail","type":"n8n-nodes-base.gmail","position":[1744,816],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"sendTo":"={{ $json.recruiter }}","message":"={{ $json.email }}","options":{},"subject":"={{ $json.subject }}","emailType":"text"},"credentials":{"gmailOAuth2":{"id":"NmRALATtpFzO84x9","name":"Gmail account ylaf"}},"typeVersion":2.1},{"id":"8f5b6d41-3b35-4033-b8f4-bbfc9e19cdc7","name":"Wait before scheduled send","type":"n8n-nodes-base.wait","position":[1296,816],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"amount":10},"typeVersion":1.1},{"id":"c98f6140-35b6-4132-b08f-21a8f25ccfb9","name":"Prepare scheduled send","type":"n8n-nodes-base.code","position":[1072,816],"parameters":{"jsCode":"return $input.all();\n"},"typeVersion":2},{"id":"56eb9b23-db15-4f41-9df5-90df54e778ff","name":"Download resume for scheduled send","type":"n8n-nodes-base.googleDrive","position":[1520,816],"parameters":{"fileId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_DRIVE_FILE_ID","cachedResultUrl":"YOUR_RESUME_URL","cachedResultName":"Your_Resume.pdf"},"options":{"fileName":"Your_Resume.pdf","binaryPropertyName":"Resume"},"operation":"download"},"typeVersion":3},{"id":"51ccaa4d-c3dc-4cff-b8df-68ff9d2a7214","name":"Update Telegram status","type":"n8n-nodes-base.telegram","position":[1296,624],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"text":"=✨ *Your Email is scheduled to send in 10s...* ✨\n\n💼 *Offer:* {{ $('Parse draft data').item.json.offer }}\n\n📧 *Recruiter:* {{ $('Parse draft data').item.json.recruiter }}","chatId":"={{ $('Telegram Trigger').item.json.callback_query.message.chat.id }}","additionalFields":{"parse_mode":"HTML","appendAttribution":false}},"typeVersion":1.2},{"id":"6c21800e-3510-43e0-9d2d-48767fb61426","name":"Notify scheduled send complete","type":"n8n-nodes-base.telegram","position":[1968,816],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"text":"=✅ Congratulations, your Email to {{ $('Download resume for scheduled send').item.json.recruiter }} was sent. Good luck!","chatId":"={{ $('Telegram Trigger').item.json.callback_query.message.chat.id }}","additionalFields":{}},"typeVersion":1.2},{"id":"e4a80d39-4ec0-4230-9423-4fc5dc965e09","name":"Route by message type","type":"n8n-nodes-base.switch","position":[176,624],"parameters":{"rules":{"values":[{"outputKey":"Job_Post_Image","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"fb5bee34-5f87-4e47-8e0d-59b2e5d35c2d","operator":{"type":"array","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.message?.photo }}","rightValue":""}]},"renameOutput":true},{"outputKey":"Sending","conditions":{"options":{"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"b65f2e38-c7a3-4e05-ad2c-da10ed0d6a0a","operator":{"type":"object","operation":"notEmpty","singleValue":true},"leftValue":"={{ $json.callback_query?.message }}","rightValue":""}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2},{"id":"4ba5aaeb-8dc2-4ad4-b3ce-808faa8e16ce","name":"Show typing indicator","type":"n8n-nodes-base.telegram","position":[400,432],"webhookId":"YOUR_WEBHOOK_ID","parameters":{"chatId":"={{ $json.message.chat.id }}","operation":"sendChatAction"},"typeVersion":1.2}],"active":false,"pinData":{},"settings":{"executionOrder":"v1"},"versionId":"138a7d1b-3417-4739-a4fb-f7dede102804","connections":{"Call OpenAI API":{"main":[[{"node":"Parse AI response","type":"main","index":0}]]},"Parse draft data":{"main":[[{"node":"Download resume from Drive","type":"main","index":0}]]},"Telegram Trigger":{"main":[[{"node":"Route by message type","type":"main","index":0}]]},"Parse AI response":{"main":[[{"node":"Store draft in Redis","type":"main","index":0}]]},"Send email via Gmail":{"main":[[{"node":"Notify scheduled send complete","type":"main","index":0}]]},"Store draft in Redis":{"main":[[{"node":"Send preview to Telegram","type":"main","index":0}]]},"Notify immediate send":{"main":[[{"node":"Update Telegram status","type":"main","index":0}]]},"Route by message type":{"main":[[{"node":"Show typing indicator","type":"main","index":0}],[{"node":"Retrieve draft from Redis","type":"main","index":0}]]},"Show typing indicator":{"main":[[{"node":"Build AI request payload","type":"main","index":0}]]},"Prepare scheduled send":{"main":[[{"node":"Wait before scheduled send","type":"main","index":0}]]},"Build AI request payload":{"main":[[{"node":"Call OpenAI API","type":"main","index":0}]]},"Retrieve draft from Redis":{"main":[[{"node":"Parse draft data","type":"main","index":0}]]},"Download resume from Drive":{"main":[[{"node":"Notify immediate send","type":"main","index":0},{"node":"Prepare scheduled send","type":"main","index":0}]]},"Wait before scheduled send":{"main":[[{"node":"Download resume for scheduled send","type":"main","index":0}]]},"Download resume for scheduled send":{"main":[[{"node":"Send email via Gmail","type":"main","index":0}]]}}},"lastUpdatedBy":29,"workflowInfo":{"nodeCount":22,"nodeTypes":{"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.wait":{"count":1},"n8n-nodes-base.gmail":{"count":1},"n8n-nodes-base.redis":{"count":2},"n8n-nodes-base.switch":{"count":1},"n8n-nodes-base.telegram":{"count":5},"n8n-nodes-base.stickyNote":{"count":4},"n8n-nodes-base.googleDrive":{"count":2},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.telegramTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Joe V","username":"joevenner","bio":"I build pipelines for a living ⛏","verified":true,"links":["https://t.me/joevenner"],"avatar":"https://gravatar.com/avatar/9a8b9b1c7409d743410d0beacb744e109d23e85a50e28042e7165cafd7800fc1?r=pg&d=retro&size=200"},"nodes":[{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":33,"icon":"file:redis.svg","name":"n8n-nodes-base.redis","codex":{"data":{"resources":{"generic":[{"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"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.redis/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/redis/"}]},"categories":["Development","Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Redis"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiNBNDFFMTEiIGQ9Ik01Ny42NTYgNDMuOTljLTMuMjAxIDEuNjgzLTE5Ljc4NyA4LjU2MS0yMy4zMTggMTAuNDE3cy01LjQ5NCAxLjgzOC04LjI4My40OTRjLTIuNzktMS4zNDMtMjAuNDQ5LTguNTM1LTIzLjYyOS0xMC4wNjdDLjgzNCA0NC4wNjYuMDAyIDQzLjQyMi4wMDIgNDIuODExdi02LjExN3MyMi45OC01LjA0NSAyNi42OS02LjM4OCA0Ljk5NS0xLjM5IDguMTU0LS4yMjVjMy4xNiAxLjE2NSAyMi4wMzUgNC42MDMgMjUuMTU0IDUuNzU2djYuMDMyYzAgLjYwNS0uNzIgMS4yODMtMi4zNSAyLjEyNHoiLz48cGF0aCBmaWxsPSIjRDgyQzIwIiBkPSJNNTcuNjU2IDM3Ljg3MmMtMy4yMDEgMS42ODUtMTkuNzg3IDguNTYtMjMuMzE4IDEwLjQxN3MtNS40OTQgMS44MzgtOC4yODMuNDk0Yy0yLjc5LTEuMzQzLTIwLjQ0OS04LjUzNC0yMy42My0xMC4wNjhzLTMuMjQzLTIuNTg4LS4xMjItMy44MmwyNC4zODgtOS41MmMzLjcxLTEuMzQgNC45OTQtMS4zOSA4LjE1My0uMjI1czE5LjY0MyA3Ljc4IDIyLjc0NyA4Ljk1MWMzLjEwMyAxLjE3IDMuMjQgMi4wODYuMDM3IDMuNzg2eiIvPjxwYXRoIGZpbGw9IiNBNDFFMTEiIGQ9Ik01Ny42NTYgMzQuMDE1Yy0zLjIwMSAxLjY4My0xOS43ODcgOC41NjEtMjMuMzE4IDEwLjQxN3MtNS40OTQgMS44MzgtOC4yODMuNDk1Yy0yLjc5LTEuMzQ0LTIwLjQ0OS04LjUzNi0yMy42MjktMTAuMDY3Qy44MzQgMzQuMDkyLjAwMiAzMy40NDcuMDAyIDMyLjgzNlYyNi43MnMyMi45OC01LjA0NSAyNi42OS02LjM4N2MzLjcxMS0xLjM0MyA0Ljk5NS0xLjM5IDguMTU0LS4yMjUgMy4xNiAxLjE2NSAyMi4wMzUgNC42MDIgMjUuMTU0IDUuNzU2djYuMDMyYzAgLjYwNS0uNzIgMS4yODMtMi4zNSAyLjEyM3oiLz48cGF0aCBmaWxsPSIjRDgyQzIwIiBkPSJNNTcuNjU2IDI3Ljg5OGMtMy4yMDEgMS42ODUtMTkuNzg3IDguNTYxLTIzLjMxOCAxMC40MTdzLTUuNDk0IDEuODM4LTguMjgzLjQ5NWMtMi43OS0xLjM0NC0yMC40NDktOC41MzQtMjMuNjMtMTAuMDY3LTMuMTgtMS41MzQtMy4yNDMtMi41ODgtLjEyMi0zLjgybDI0LjM4OC05LjUyYzMuNzEtMS4zNDMgNC45OTQtMS4zOSA4LjE1My0uMjI1IDMuMTYgMS4xNjYgMTkuNjQ0IDcuNzg1IDIyLjc2NSA4LjkzNXMzLjI0IDIuMDg1LjAzOCAzLjc4NXoiLz48cGF0aCBmaWxsPSIjQTQxRTExIiBkPSJNNTcuNjU2IDIzLjY3MWMtMy4yMDEgMS42ODMtMTkuNzg3IDguNTYxLTIzLjMxOCAxMC40MTlzLTUuNDk0IDEuODM4LTguMjgzLjQ5NWMtMi43OS0xLjM0NC0yMC40NDktOC41MzUtMjMuNjI5LTEwLjA2OS0xLjU5Mi0uNzY1LTIuNDI0LTEuNDExLTIuNDI0LTIuMDJ2LTYuMTFzMjIuOTgtNS4wNDUgMjYuNjktNi4zODggNC45OTUtMS4zOSA4LjE1NC0uMjI1YzMuMTYgMS4xNjUgMjIuMDM1IDQuNTkxIDI1LjE1NCA1Ljc0NXY2LjAzMmMwIC42MDUtLjcyIDEuMjgzLTIuMzUgMi4xMjN6Ii8+PHBhdGggZmlsbD0iI0Q4MkMyMCIgZD0iTTU3LjY1NiAxNy41NTNjLTMuMjAxIDEuNjg1LTE5Ljc4NyA4LjU2MS0yMy4zMTggMTAuNDE3cy01LjQ5NCAxLjgzOC04LjI4My40OTVjLTIuNzktMS4zNDQtMjAuNDQ5LTguNTM0LTIzLjYzLTEwLjA2OHMtMy4yNDMtMi41ODctLjEyMi0zLjgybDI0LjM4OC05LjUyYzMuNzEtMS4zNDMgNC45OTQtMS4zOSA4LjE1My0uMjI2IDMuMTYgMS4xNjUgMTkuNjQzIDcuNzg1IDIyLjc2NSA4LjkzNnMzLjI0IDIuMDg1LjAzOCAzLjc4NXoiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJtMzEuNDk3IDE1LjAzMi0xLjg4LTMuMTUzLTYuMDAyLS41NDUgNC40OC0xLjYzTDI2Ljc1IDcuMmw0LjE5MiAxLjY1MyAzLjk1NS0xLjMwNS0xLjA3IDIuNTg2IDQuMDMyIDEuNTI0LTUuMTk4LjU0NnptLTEwLjAxNCA2LjI3NSAxMy45MDMtMi4xNTMtNC4yIDYuMjExem0tMTEuMTctNS4xNjdjMC0xLjYxIDMuMzE0LTIuOTA2IDcuNDMxLTIuOTA2IDQuMTE4IDAgNy40MzIgMS4yOTYgNy40MzIgMi45MDZzLTMuMzE0IDIuOTA1LTcuNDMyIDIuOTA1Yy00LjExNyAwLTcuNDMxLTEuMjk1LTcuNDMxLTIuOTA1Ii8+PHBhdGggZmlsbD0iIzdBMEMwMCIgZD0ibTUyLjIzMyAxNS43MTQtOC4yMjQgMy4yNzYtLjAwNy02LjU1NnoiLz48cGF0aCBmaWxsPSIjQUQyMTE1IiBkPSJtNDQuMDEgMTguOTkxLS44OS4zNTMtOC4yMTctMy4yNzYgOS4wOTQtMy42M3oiLz48L2c+PC9zdmc+"},"displayName":"Redis","typeVersion":1,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":5,"name":"Development"}]},{"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":58,"icon":"file:googleDrive.svg","name":"n8n-nodes-base.googleDrive","codex":{"data":{"resources":{"generic":[{"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/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/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.googledrive/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\"]","defaults":{"name":"Google Drive"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgODEgNzMiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwNjZkYSIgZD0ibTYuMDQ4IDYxLjI2IDMuNTI4IDYuMDk0Yy43MzMgMS4yODMgMS43ODcgMi4yOTEgMy4wMjQgMy4wMjRsMTIuNi0yMS44MUgwYTguMyA4LjMgMCAwIDAgMS4xIDQuMTI0eiIvPjxwYXRoIGZpbGw9IiMwMGFjNDciIGQ9Ik00MCAyMi45MSAyNy40IDEuMWMtMS4yMzcuNzMzLTIuMjkxIDEuNzQxLTMuMDI0IDMuMDI0TDEuMSA0NC40NDVBOC4zIDguMyAwIDAgMCAwIDQ4LjU2OGgyNS4yeiIvPjxwYXRoIGZpbGw9IiNlYTQzMzUiIGQ9Ik02Ny40IDcwLjM3OGMxLjIzNy0uNzMzIDIuMjkxLTEuNzQxIDMuMDI0LTMuMDI0bDEuNDY2LTIuNTIgNy4wMS0xMi4xNDJhOC4zIDguMyAwIDAgMCAxLjEtNC4xMjRINTQuNzk4bDUuMzYzIDEwLjUzOHoiLz48cGF0aCBmaWxsPSIjMDA4MzJkIiBkPSJNNDAgMjIuOTEgNTIuNiAxLjFDNTEuMzYzLjM2NyA0OS45NDMgMCA0OC40NzcgMEgzMS41MjRjLTEuNDY2IDAtMi44ODcuNDEyLTQuMTI0IDEuMXoiLz48cGF0aCBmaWxsPSIjMjY4NGZjIiBkPSJNNTQuNzk5IDQ4LjU2OEgyNS4ybC0xMi42IDIxLjgxYzEuMjM3LjczMyAyLjY1NyAxLjEgNC4xMjQgMS4xaDQ2LjU1MmMxLjQ2NiAwIDIuODg3LS40MTIgNC4xMjQtMS4xeiIvPjxwYXRoIGZpbGw9IiNmZmJhMDAiIGQ9Ik02Ny4yNjIgMjQuMjg0IDU1LjYyNCA0LjEyNEM1NC44OTEgMi44NDEgNTMuODM3IDEuODMzIDUyLjYgMS4xTDQwIDIyLjkxbDE0LjggMjUuNjU5aDI1LjE1NWE4LjMgOC4zIDAgMCAwLTEuMS00LjEyNHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Google Drive","typeVersion":3,"nodeCategories":[{"id":3,"name":"Data & Storage"}]},{"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":356,"icon":"file:gmail.svg","name":"n8n-nodes-base.gmail","codex":{"data":{"alias":["email","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/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with 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-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/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/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"transform\"]","defaults":{"name":"Gmail"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"},"displayName":"Gmail","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":514,"icon":"fa:pause-circle","name":"n8n-nodes-base.wait","codex":{"data":{"alias":["pause","sleep","delay","timeout"],"resources":{"generic":[{"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/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.wait/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Flow"]}}},"group":"[\"organization\"]","defaults":{"name":"Wait","color":"#804050"},"iconData":{"icon":"pause-circle","type":"icon"},"displayName":"Wait","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":17,"name":"HR"},{"id":47,"name":"AI Chatbot"}],"image":[]}}