{
  "workflow": {
    "id": 10135,
    "name": "Process testimonials with GPT-4 & auto-generate social media cards with Google Sheets",
    "views": 126,
    "recentViews": 0,
    "totalViews": 126,
    "createdAt": "2025-10-24T21:00:12.296Z",
    "description": "## **Automated AI-Powered Testimonial Processing & Social Media Workflow**\n---\n\n### **Overview:**\nThis comprehensive workflow automates the entire testimonial collection and publishing process, from submission to social media-ready content. It uses AI to enhance testimonials, generates beautiful branded cards, and implements an approval system before posting.\n\n### **Key Features:**\n- ✅ **Webhook-based submission** - Accept testimonials via API\n- 🤖 **AI Enhancement** - GPT-4 polishes grammar while maintaining authenticity\n- 🎨 **Automated Design** - Generates professional 800x600px testimonial cards\n- ☁️ **Cloud Storage** - Uploads to Google Drive with organized naming\n- 📊 **Database Logging** - Tracks all testimonials in Google Sheets\n- 🔔 **Team Notifications** - Slack alerts for new and approved testimonials\n- ✅ **Approval Workflow** - Manual review before social media posting\n- 🔄 **Scheduled Checker** - Auto-detects approved testimonials every 5 minutes\n\n### **Workflow Steps:**\n\n**Main Flow (Testimonial Processing):**\n1. Receives testimonial via webhook (POST request)\n2. Validates and cleans data (name, testimonial, photo, email)\n3. Enhances testimonial using GPT-4 Turbo\n4. Generates HTML template with customer details\n5. Converts HTML to PNG image (800x600px)\n6. Uploads image to Google Drive\n7. Logs all data to Google Sheets with \"Pending Approval\" status\n8. Sends Slack notification to review team\n\n**Approval Flow (Scheduled Check):**\n1. Runs every 5 minutes automatically\n2. Checks Google Sheets for approved testimonials\n3. Filters testimonials not yet posted\n4. Sends ready-to-post Slack notification with formatted text\n5. Marks testimonial as processed in database\n\n### **Use Cases:**\n- SaaS companies collecting customer feedback\n- Marketing agencies managing client testimonials\n- E-commerce businesses showcasing reviews\n- Course creators featuring student success stories\n- Any business automating social proof collection\n\n### **What Makes This Workflow Special:**\n- **Zero manual design work** - Beautiful cards generated automatically\n- **AI-powered quality** - Professional grammar enhancement\n- **Audit trail** - Complete tracking in Google Sheets\n- **Approval control** - Review before publishing\n- **Duplicate prevention** - Smart matching by Drive ID\n- **Flexible input** - Accepts multiple field name variations\n\n---\n\n## 🔧 **Required Integrations:**\n\n1. **OpenAI API** (GPT-4 Turbo) - AI testimonial enhancement\n2. **HTML/CSS to Image API** - Screenshot generation\n3. **Google Drive OAuth2** - Image storage\n4. **Google Sheets OAuth2** - Database management\n5. **Slack API** - Team notifications\n\n---\n\n## 📋 **Prerequisites:**\n\n- n8n instance (self-hosted or cloud)\n- OpenAI API key (https://platform.openai.com)\n- HTML/CSS to Image account (https://htmlcsstoimg.com) - Free tier available\n- Google Cloud project with Drive & Sheets API enabled\n- Slack workspace with app permissions\n\n---\n\n## 🚀 **Setup Instructions:**\n\n### **1. Import Workflow**\n- Download the JSON file\n- Import into your n8n instance\n- Replace placeholder credentials (see below)\n\n### **2. Configure Credentials**\nAdd these credentials in n8n:\n- **OpenAI API** - Your API key\n- **htmlcsstoimgApi** - User ID and API key\n- **Google Drive OAuth2** - Configure OAuth app\n- **Google Sheets OAuth2** - Same Google Cloud project\n- **Slack API** - Create Slack app with `chat:write` scope\n\n### **3. Update Configuration**\nReplace in the JSON:\n- **Google Drive Folder ID** - Your testimonial storage folder\n- **Google Sheets ID** - Your database spreadsheet\n- **Slack Channel ID** - Your notification channel\n\n### **4. Test the Workflow**\nSend a POST request to your webhook URL:\n```json\n{\n    \"name\": \"Sarah Johnson\",\n    \"designation\": \"Marketing Director\",\n    \"photo_url\": \"https://i.pravatar.cc/400?img=5\",\n    \"testimonial_text\": \"Working with this team was amazing!\",\n    \"email\": \"sample@gmail.com\"\n}\n```\n---\n\n## 📊 **Google Sheets Setup:**\n\nCreate a Google Sheet with these columns:\n- Timestamp\n- Name\n- Designation\n- Original Testimonial\n- Testimonial (Enhanced)\n- Image Link\n- Drive ID\n- Status\n- Email\n- Original Length\n- Enhanced\n- Source\n- Posted to Social\n- Posted At\n\n---\n\n## 🎨 **Customization Options:**\n\n- Modify AI prompt for different enhancement styles\n- Change HTML template colors/design\n- Add more validation rules\n- Integrate with Twitter/LinkedIn APIs for auto-posting\n- Add email notifications instead of Slack\n- Include rating/score system\n- Add custom approval fields\n\n---\n\n## 🆘 **Troubleshooting:**\n\n**Webhook not receiving data:**\n- Check webhook URL is correct\n- Verify HTTP method is POST\n- Ensure Content-Type is application/json\n\n**AI enhancement failing:**\n- Verify OpenAI API key is valid\n- Check API usage limits\n- Ensure sufficient credits\n\n**Image not generating:**\n- Confirm htmlcsstoimg credentials are correct\n- Check HTML template has no errors\n- Verify you haven't exceeded free tier limit\n\n**Google Drive upload failing:**\n- Re-authenticate OAuth2 connection\n- Check folder ID is correct\n- Verify folder permissions\n\n---\n\n## 🏆 **Perfect For:**\n\n- Marketing teams\n- Customer success teams\n- Product managers\n- Social media managers\n- Growth hackers\n- Agency owners\n\n---\n\n## ⚖️ **License:**\nFree to use and modify for personal and commercial projects.\n",
    "workflow": {
      "id": "",
      "meta": {
        "instanceId": "",
        "templateCredsSetupCompleted": false
      },
      "name": "Automated testimonial workflow",
      "tags": [],
      "nodes": [
        {
          "id": "4665148e-044d-44bc-982e-e253eb60f173",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -496,
            -64
          ],
          "parameters": {
            "color": 7,
            "width": 389,
            "height": 392,
            "content": "## 🚀 WORKFLOW START: TESTIMONIAL COLLECTION\n\n**Purpose:** Entry point for testimonial submissions\n\n**Expected Data:**\n- name or Name\n- designation/Designation/role\n- testimonial_text/testimonial/Testimonial\n- photo_url/Photo/photo (optional)\n- email/Email (optional)\n\n"
          },
          "typeVersion": 1
        },
        {
          "id": "0edf9e7e-bd71-42da-b028-2ea8b7c8439b",
          "name": "Webhook Trigger",
          "type": "n8n-nodes-base.webhook",
          "position": [
            -304,
            192
          ],
          "webhookId": "",
          "parameters": {
            "path": "testimonial-webhook",
            "options": {},
            "httpMethod": "POST",
            "responseMode": "lastNode"
          },
          "typeVersion": 1.1
        },
        {
          "id": "3d5b7bac-6955-4c7b-bfbf-525b4b01416e",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -80,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 357,
            "height": 411,
            "content": "## ✅ DATA VALIDATION & CLEANING\n\n**What it does:**\n- Extracts data from webhook payload\n- Validates required fields (name, testimonial)\n- Sets default values for missing fields\n- Generates fallback avatars using UI Avatars API\n- Removes HTML tags and extra spaces\n- Prevents XSS attacks"
          },
          "typeVersion": 1
        },
        {
          "id": "e2b98cfd-f458-491f-adf9-951daae6c164",
          "name": "Data Validation",
          "type": "n8n-nodes-base.code",
          "position": [
            64,
            192
          ],
          "parameters": {
            "jsCode": "// Data Validation Code for n8n\n// This code cleans and validates testimonial data from the webhook\n\nconst items = $input.all();\nconst cleanedItems = [];\n\nfor (const item of items) {\n  // Access the body data from webhook\n  const data = item.json.body || item.json;\n  \n  // Extract and clean fields\n  let name = (data.name || data.Name || '').trim();\n  let designation = (data.designation || data.Designation || data.role || '').trim();\n  let testimonial = (data.testimonial_text || data.testimonial || data.Testimonial || '').trim();\n  let photoUrl = (data.photo_url || data.Photo || data.photo || '').trim();\n  let email = (data.email || data.Email || '').trim();\n  \n  // Validation: Check required fields\n  if (!name || name.length < 2) {\n    name = 'Anonymous User';\n  }\n  \n  if (!testimonial || testimonial.length < 10) {\n    // Skip invalid testimonials\n    console.log('Skipping invalid testimonial - too short or empty');\n    continue;\n  }\n  \n  // Set defaults for optional fields\n  if (!designation) {\n    designation = 'Valued Customer';\n  }\n  \n  // Generate fallback avatar if no photo provided\n  if (!photoUrl || !photoUrl.startsWith('http')) {\n    photoUrl = 'https://ui-avatars.com/api/?name=' + encodeURIComponent(name) + '&size=400&background=4F46E5&color=fff&bold=true';\n  }\n  \n  // Clean testimonial text - remove extra spaces and HTML tags\n  testimonial = testimonial\n    .replace(/\\s+/g, ' ')    // Replace multiple spaces with single space\n    .replace(/[<>]/g, '')     // Remove < and > to prevent XSS\n    .trim();\n  \n  // Create clean object with all data\n  cleanedItems.push({\n    json: {\n      name: name,\n      designation: designation,\n      testimonial: testimonial,\n      photoUrl: photoUrl,\n      email: email,\n      timestamp: new Date().toISOString(),\n      originalLength: testimonial.length,\n      source: 'webhook'\n    }\n  });\n}\n\n// If no valid testimonials found, throw error\nif (cleanedItems.length === 0) {\n  throw new Error('No valid testimonials found after validation');\n}\n\nreturn cleanedItems;"
          },
          "typeVersion": 2
        },
        {
          "id": "825f049a-a2d5-47e2-83e7-57b319193a2e",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            288,
            -48
          ],
          "parameters": {
            "color": 7,
            "width": 295,
            "height": 379,
            "content": "## 🤖 AI ENHANCEMENT SETUP\n\n**AI Instructions:**\n- Fix grammar and spelling\n- Keep natural and conversational\n- Maintain enthusiasm\n- No fake details\n- Similar length to original\n"
          },
          "typeVersion": 1
        },
        {
          "id": "6f77780d-a9e7-44a3-834b-89f41fa40219",
          "name": "Set AI Prompt",
          "type": "n8n-nodes-base.set",
          "position": [
            368,
            192
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "prompt-assignment",
                  "name": "prompt",
                  "type": "string",
                  "value": "=You are a professional editor. Polish the following testimonial to be grammatically perfect while maintaining the original tone, enthusiasm, and authenticity. Keep it natural and conversational. Do not add fake details or change the meaning. Keep the length similar to the original.\n\nOriginal testimonial:\n{{ $json.testimonial }}\n\nReturn ONLY the improved testimonial text, nothing else. No quotes, no preamble."
                }
              ]
            }
          },
          "typeVersion": 3.3
        },
        {
          "id": "b9b9ee52-9122-4c55-90f3-cdfbda8bfcfc",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            608,
            -32
          ],
          "parameters": {
            "color": 7,
            "width": 327,
            "height": 347,
            "content": "## 🧠 OPENAI PROCESSING\n\n**Model:** GPT-4 Turbo Preview\n\n**What happens:**\n1. Sends prompt + testimonial to OpenAI\n2. AI improves grammar and readability\n3. Preserves original meaning and tone\n4. Returns polished testimonial\n"
          },
          "typeVersion": 1
        },
        {
          "id": "5fdf887b-e1aa-4122-8ede-1ef586072a06",
          "name": "OpenAI Enhancement",
          "type": "@n8n/n8n-nodes-langchain.openAi",
          "position": [
            640,
            192
          ],
          "parameters": {
            "modelId": {
              "__rl": true,
              "mode": "list",
              "value": "gpt-4-turbo-preview",
              "cachedResultName": "GPT-4-TURBO-PREVIEW"
            },
            "options": {
              "maxTokens": 300,
              "temperature": 0.3
            },
            "messages": {
              "values": [
                {
                  "content": "={{ $json.prompt }}"
                }
              ]
            }
          },
          "credentials": {
            "openAiApi": {
              "id": "credential-id",
              "name": "openAiApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "d3b64d7c-c54e-4eeb-bec6-9b56ac3dba07",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            944,
            -16
          ],
          "parameters": {
            "color": 7,
            "width": 343,
            "height": 331,
            "content": "## 📦 EXTRACT AI RESPONSE\n\n**What it does:**\n- Extracts enhanced text from OpenAI response\n- Handles multiple response formats\n- Merges with original data\n- Tracks enhancement metadata\n"
          },
          "typeVersion": 1
        },
        {
          "id": "2f0c7201-a5e4-4b3a-be91-0f200f8f249f",
          "name": "Extract AI Response",
          "type": "n8n-nodes-base.code",
          "position": [
            1040,
            192
          ],
          "parameters": {
            "jsCode": "// Extract AI Response Code (Updated for OpenAI format)\n// This extracts the enhanced testimonial from OpenAI and merges with previous data\n\nconst items = $input.all();\n\nreturn items.map((item) => {\n  // Get the original data from Data Validation node\n  const previousData = $('Data Validation').item.json;\n  \n  // Extract AI response from OpenAI's response format\n  // OpenAI returns: [{ message: { content: \"text\" } }]\n  let aiResponse;\n  \n  if (Array.isArray(item.json) && item.json[0]?.message?.content) {\n    // Handle array format from OpenAI\n    aiResponse = item.json[0].message.content;\n  } else if (item.json.message?.content) {\n    // Handle object format\n    aiResponse = item.json.message.content;\n  } else if (item.json.choices?.[0]?.message?.content) {\n    // Handle choices format\n    aiResponse = item.json.choices[0].message.content;\n  } else if (item.json.text) {\n    // Handle simple text format\n    aiResponse = item.json.text;\n  } else {\n    // Fallback to original testimonial if extraction fails\n    aiResponse = previousData.testimonial;\n  }\n  \n  // Return merged data with both original and enhanced testimonial\n  return {\n    json: {\n      ...previousData,                              // Keep all original data\n      originalTestimonial: previousData.testimonial,  // Save original\n      testimonial: aiResponse.trim(),                 // Use enhanced version\n      enhanced: true,                                 // Mark as enhanced\n      aiModel: 'gpt-4-turbo'                         // Track which model used\n    }\n  };\n});"
          },
          "typeVersion": 2
        },
        {
          "id": "7ec4da11-b438-4877-be02-f967719aef64",
          "name": "Sticky Note5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1296,
            -96
          ],
          "parameters": {
            "color": 7,
            "width": 272,
            "height": 427,
            "content": "## 🎨 HTML TEMPLATE GENERATION\n\n**What it does:**\n- Creates beautiful testimonial card\n- Responsive design with gradient background\n- Professional styling with Inter font\n- 5-star rating display\n- Customer photo with fallback initials\n- XSS protection"
          },
          "typeVersion": 1
        },
        {
          "id": "b57bee88-1bc0-4bd2-b6cc-73ff96b56797",
          "name": "Generate HTML Template",
          "type": "n8n-nodes-base.code",
          "position": [
            1344,
            192
          ],
          "parameters": {
            "jsCode": "// Generate HTML Template Code - FIXED VERSION\n// Creates a beautiful branded testimonial card with proper image handling\n\nconst items = $input.all();\n\nreturn items.map(item => {\n  const data = item.json;\n  \n  // Function to escape HTML special characters (prevent XSS)\n  const escapeHtml = (text) => {\n    return text\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#039;');\n  };\n  \n  // Get initials for fallback\n  const getInitials = (name) => {\n    return name\n      .split(' ')\n      .map(n => n[0])\n      .join('')\n      .toUpperCase()\n      .substring(0, 2);\n  };\n  \n  const initials = getInitials(data.name);\n  \n  // Generate the HTML testimonial card\n  const html = `<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\" rel=\"stylesheet\">\n  <style>\n    * {\n      margin: 0;\n      padding: 0;\n      box-sizing: border-box;\n    }\n    \n    body {\n      width: 800px;\n      height: 600px;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n      font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n      padding: 40px;\n    }\n    \n    .testimonial-card {\n      background: white;\n      border-radius: 24px;\n      padding: 48px;\n      max-width: 700px;\n      box-shadow: 0 20px 60px rgba(0,0,0,0.3);\n      position: relative;\n      overflow: hidden;\n    }\n    \n    .quote-icon {\n      position: absolute;\n      top: 30px;\n      left: 40px;\n      font-size: 80px;\n      color: #667eea;\n      opacity: 0.15;\n      font-family: Georgia, serif;\n      line-height: 1;\n    }\n    \n    .star-rating {\n      color: #fbbf24;\n      font-size: 24px;\n      margin-bottom: 20px;\n      position: relative;\n      z-index: 1;\n      letter-spacing: 4px;\n    }\n    \n    .testimonial-text {\n      font-size: 20px;\n      line-height: 1.7;\n      color: #2d3748;\n      margin-bottom: 32px;\n      position: relative;\n      z-index: 1;\n      font-style: italic;\n    }\n    \n    .author-section {\n      display: flex;\n      align-items: center;\n      gap: 20px;\n      position: relative;\n      z-index: 1;\n    }\n    \n    .author-photo-wrapper {\n      width: 72px;\n      height: 72px;\n      border-radius: 50%;\n      border: 4px solid #667eea;\n      box-shadow: 0 4px 12px rgba(0,0,0,0.1);\n      overflow: hidden;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n      flex-shrink: 0;\n    }\n    \n    .author-photo {\n      width: 100%;\n      height: 100%;\n      object-fit: cover;\n      display: block;\n    }\n    \n    .author-initials {\n      display: none;\n      font-size: 28px;\n      font-weight: 700;\n      color: white;\n      user-select: none;\n    }\n    \n    .author-photo-wrapper.fallback .author-photo {\n      display: none;\n    }\n    \n    .author-photo-wrapper.fallback .author-initials {\n      display: flex;\n    }\n    \n    .author-info h3 {\n      font-size: 22px;\n      color: #1a202c;\n      margin-bottom: 4px;\n      font-weight: 700;\n    }\n    \n    .author-info p {\n      font-size: 16px;\n      color: #718096;\n      font-weight: 500;\n    }\n    \n    .brand-logo {\n      position: absolute;\n      bottom: 30px;\n      right: 40px;\n      font-size: 14px;\n      color: #a0aec0;\n      font-weight: 600;\n      letter-spacing: 1px;\n      text-transform: uppercase;\n    }\n    \n    .decorative-circle {\n      position: absolute;\n      width: 200px;\n      height: 200px;\n      border-radius: 50%;\n      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n      opacity: 0.05;\n      bottom: -100px;\n      right: -100px;\n    }\n  </style>\n  <script>\n    function handleImageError(img) {\n      var wrapper = img.parentElement;\n      wrapper.classList.add('fallback');\n    }\n  </script>\n</head>\n<body>\n  <div class=\"testimonial-card\">\n    <div class=\"quote-icon\">\"</div>\n    <div class=\"decorative-circle\"></div>\n    \n    <div class=\"star-rating\">\n      ★★★★★\n    </div>\n    \n    <div class=\"testimonial-text\">\n      \"${escapeHtml(data.testimonial)}\"\n    </div>\n    \n    <div class=\"author-section\">\n      <div class=\"author-photo-wrapper\">\n        <img \n          src=\"${data.photoUrl}\" \n          alt=\"${escapeHtml(data.name)}\" \n          class=\"author-photo\" \n          onerror=\"handleImageError(this)\"\n        />\n        <div class=\"author-initials\">${initials}</div>\n      </div>\n      <div class=\"author-info\">\n        <h3>${escapeHtml(data.name)}</h3>\n        <p>${escapeHtml(data.designation)}</p>\n      </div>\n    </div>\n    \n    <div class=\"brand-logo\">\n      YOUR BRAND\n    </div>\n  </div>\n</body>\n</html>`;\n  \n  // Generate a unique filename\n  const fileName = `${data.name.replace(/\\s+/g, '_')}_Testimonial_${new Date().getTime()}.png`;\n  \n  // Return the HTML and filename\n  return {\n    json: {\n      ...data,           // Keep all previous data\n      html: html,        // Add HTML template\n      fileName: fileName // Add filename for later use\n    }\n  };\n});"
          },
          "typeVersion": 2
        },
        {
          "id": "50e726ce-705a-4bc4-a98e-f0653a26ad47",
          "name": "Sticky Note6",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1584,
            -80
          ],
          "parameters": {
            "color": 7,
            "width": 256,
            "height": 427,
            "content": "## 📸 HTML TO IMAGE CONVERSION\n\n**Service:**(https://htmlcsstoimg.com)\n\n**What it does:**\n- Converts HTML template to PNG image\n- Renders at 800x600px\n- Returns image URL"
          },
          "typeVersion": 1
        },
        {
          "id": "abad8276-3b3e-4414-ad1d-7c4105e86d03",
          "name": "HTML/CSS to Image",
          "type": "n8n-nodes-htmlcsstoimage.htmlCssToImage",
          "position": [
            1632,
            192
          ],
          "parameters": {
            "html_content": "={{ $json.html }}"
          },
          "credentials": {
            "htmlcsstoimgApi": {
              "id": "credential-id",
              "name": "htmlcsstoimgApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "1c06771d-8cb7-4870-b3a1-a6960ffd0029",
          "name": "Sticky Note7",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1856,
            -80
          ],
          "parameters": {
            "color": 7,
            "width": 288,
            "height": 411,
            "content": "## ⬇️ DOWNLOAD IMAGE\n\n**What it does:**\n- Fetches PNG from URL\n- Downloads as binary file\n- Prepares for Google Drive upload\n\n**HTTP Request Settings:**\n- Method: GET\n- URL: From previous node\n- Response: Binary file format\n"
          },
          "typeVersion": 1
        },
        {
          "id": "94929251-c783-4ede-9710-6aff9fc59ea1",
          "name": "Download Image",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            1920,
            192
          ],
          "parameters": {
            "url": "={{ $json.image_url }}",
            "options": {
              "response": {
                "response": {
                  "responseFormat": "file"
                }
              }
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "b79caf76-ec04-4a57-90d7-7ae3ff802e2e",
          "name": "Sticky Note8",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2160,
            -112
          ],
          "parameters": {
            "color": 7,
            "width": 288,
            "height": 443,
            "content": "## ☁️ GOOGLE DRIVE UPLOAD\n\n**What it does:**\n- Uploads PNG to Google Drive\n- Saves to \"testimonial data\" folder\n- Uses dynamic filename from HTML node\n- Returns shareable link and Drive ID\n\n**File Name Format:**\nCustomerName_Testimonial_Timestamp.png\n"
          },
          "typeVersion": 1
        },
        {
          "id": "e028a171-81b8-4120-b443-414fbd77dc46",
          "name": "Upload to Google Drive",
          "type": "n8n-nodes-base.googleDrive",
          "position": [
            2208,
            192
          ],
          "parameters": {
            "name": "={{ $('Generate HTML Template').item.json.fileName }}",
            "driveId": {
              "__rl": true,
              "mode": "list",
              "value": "My Drive",
              "cachedResultUrl": "https://drive.google.com/drive/my-drive",
              "cachedResultName": "My Drive"
            },
            "options": {},
            "folderId": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_GOOGLE_DRIVE_FOLDER_ID",
              "cachedResultUrl": "https://drive.google.com/drive/folders/YOUR_GOOGLE_DRIVE_FOLDER_ID",
              "cachedResultName": "testimonial data"
            }
          },
          "credentials": {
            "googleDriveOAuth2Api": {
              "id": "credential-id",
              "name": "googleDriveOAuth2Api Credential"
            }
          },
          "typeVersion": 3
        },
        {
          "id": "7990f760-83ad-483c-adea-2f9eac6020d7",
          "name": "Update Google Sheet",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            2544,
            192
          ],
          "parameters": {
            "columns": {
              "value": {
                "Name": "={{ $('Generate HTML Template').item.json.name }}",
                "Email": "={{ $('Generate HTML Template').item.json.email }}",
                "Source": "={{ $('Generate HTML Template').item.json.source }}",
                "Status": "Pending Approval",
                "Drive ID": "={{ $json.id }}",
                "Enhanced": "={{ $('Generate HTML Template').item.json.enhanced ? 'Yes' : 'No' }}",
                "Timestamp": "={{ $('Generate HTML Template').item.json.timestamp }}",
                "Image Link": "={{ $json.webViewLink }}",
                "Designation": "={{ $('Generate HTML Template').item.json.designation }}",
                "Testimonial": "={{ $('Generate HTML Template').item.json.testimonial }}",
                "Original Length": "={{ $('Generate HTML Template').item.json.originalLength }}",
                "Original Testimonial": "={{ $('Generate HTML Template').item.json.originalTestimonial }}"
              },
              "schema": [
                {
                  "id": "Timestamp",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Timestamp",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Name",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Name",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Designation",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Designation",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Testimonial",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Testimonial",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Original Testimonial",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Original Testimonial",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Image Link",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Image Link",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Drive ID",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "Drive ID",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Status",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Status",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Email",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Email",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Original Length",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Original Length",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Enhanced",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Enhanced",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Source",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Source",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Posted to Social",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "Posted to Social",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Posted At",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "Posted At",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                }
              ],
              "mappingMode": "defineBelow",
              "matchingColumns": [
                "Drive ID"
              ],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "appendOrUpdate",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 1358321955,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_ID_HERE/edit#gid=1358321955",
              "cachedResultName": "Testimonial Database"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_GOOGLE_SHEETS_ID_HERE",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_ID_HERE/edit?usp=drivesdk",
              "cachedResultName": "Feedback Log"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.4
        },
        {
          "id": "496bcc78-6f79-4719-aaf6-14f83c27e13b",
          "name": "Sticky Note10",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2768,
            -48
          ],
          "parameters": {
            "color": 7,
            "width": 272,
            "height": 395,
            "content": "## 📢 SLACK NOTIFICATION\n\n**Notification Includes:**\n✓ Customer name, role, email\n✓ Enhanced testimonial\n✓ Original testimonial (comparison)\n✓ Image preview link\n✓ Database status\n✓ Action checklist\n"
          },
          "typeVersion": 1
        },
        {
          "id": "1baf7d5d-478f-4d8c-9fe1-4b0a1947109e",
          "name": "Send Slack Notification",
          "type": "n8n-nodes-base.slack",
          "position": [
            2832,
            192
          ],
          "webhookId": "",
          "parameters": {
            "text": "=🎉 *New Testimonial Received!*\n\n*Customer Details:*\n- Name: {{ $('Generate HTML Template').item.json.name }}\n- Role: {{ $('Generate HTML Template').item.json.designation }}\n- Email: {{ $('Generate HTML Template').item.json.email }}\n\n*Testimonial:*\n_\"{{ $('Generate HTML Template').item.json.testimonial }}\"_\n\n*Original:*\n_\"{{ $('Generate HTML Template').item.json.originalTestimonial }}\"_\n\n*Image Preview:*\n{{ $('Upload to Google Drive').item.json.webViewLink }}\n\n*Database:*\nStatus: {{ $json.Status }}\nSheet: [View Testimonial Database](https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit)\n\n*Actions Required:*\n1. Review the testimonial and image\n2. Update status in Google Sheet to \"Approved\" or \"Rejected\"\n3. Approved testimonials will auto-post to social media\n\n---\n_Submitted via webhook at {{ $('Generate HTML Template').item.json.timestamp }}_",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "SLACK_CHANNEL_ID",
              "cachedResultName": "SLACK_CHANNEL_NAME"
            },
            "otherOptions": {}
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "f95c7659-6e59-468b-9a53-4047a8e2f337",
          "name": "Sticky Note11",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1184,
            512
          ],
          "parameters": {
            "color": 7,
            "width": 368,
            "height": 411,
            "content": "## ⏰ SCHEDULE TRIGGER - APPROVAL CHECKER\n\n**Purpose:** Automated approval monitoring\n\n**Trigger:** Every 5 minutes\n\n**What it does:**\n- Checks Google Sheet for approved testimonials\n- Identifies testimonials not yet posted\n- Triggers social media posting workflow"
          },
          "typeVersion": 1
        },
        {
          "id": "93107afd-1e32-4f86-928a-baf2e9c5a24c",
          "name": "Every 5 Minutes",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            1280,
            784
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "minutes"
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "75ff904f-6a28-459a-999c-f959985088ee",
          "name": "Sticky Note12",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1568,
            576
          ],
          "parameters": {
            "color": 7,
            "width": 320,
            "height": 347,
            "content": "## 📖 READ DATABASE\n\n**Data Retrieved:**\n- All testimonial records\n- Status column (Approved/Pending/Rejected)\n- Posted to Social column\n- Drive ID for matching\n"
          },
          "typeVersion": 1
        },
        {
          "id": "f5180c82-5bc1-4676-9e57-08e65ff741ae",
          "name": "Read Google Sheet",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            1616,
            784
          ],
          "parameters": {
            "options": {},
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 1358321955,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=1358321955",
              "cachedResultName": "Testimonial Database"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_GOOGLE_SHEET_ID",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit?usp=drivesdk",
              "cachedResultName": "Feedback Log"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.4
        },
        {
          "id": "2a5196a0-de9c-48cc-8e48-805c2228ddf7",
          "name": "Sticky Note13",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1904,
            528
          ],
          "parameters": {
            "color": 7,
            "width": 320,
            "height": 395,
            "content": "## ✔️ CONDITIONAL FILTER\n\n**What it does:**\n- Filters testimonials based on conditions\n- Only passes approved testimonials\n- Excludes already posted ones\n\n**Logic:**\n- TRUE path: Ready to post\n- FALSE path: Skip (not approved or already posted)\n"
          },
          "typeVersion": 1
        },
        {
          "id": "f516c987-5dac-4580-abf1-a29c111e5b5e",
          "name": "IF Approved & Not Posted",
          "type": "n8n-nodes-base.if",
          "position": [
            1984,
            784
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 1,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "status-check",
                  "operator": {
                    "type": "string",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json.Status }}",
                  "rightValue": "Approved"
                },
                {
                  "id": "not-posted",
                  "operator": {
                    "type": "string",
                    "operation": "empty",
                    "singleValue": true
                  },
                  "leftValue": "={{ $json['Posted to Social'] }}",
                  "rightValue": "Yes"
                }
              ]
            }
          },
          "typeVersion": 2
        },
        {
          "id": "96ecfaa0-9c6d-4711-941c-4cdeb8397026",
          "name": "Sticky Note14",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2240,
            432
          ],
          "parameters": {
            "color": 7,
            "width": 320,
            "height": 395,
            "content": "## 📱 SOCIAL MEDIA READY NOTIFICATION\n\n**Notification Contains:**\n✓ Customer details\n✓ Enhanced testimonial\n✓ Original testimonial\n✓ Image preview link\n✓ **Ready-to-post social media text**\n✓ Hashtags included\n"
          },
          "typeVersion": 1
        },
        {
          "id": "9284d544-2cf9-4d67-830e-ef3de1990efb",
          "name": "Notify Ready to Post",
          "type": "n8n-nodes-base.slack",
          "position": [
            2304,
            672
          ],
          "webhookId": "",
          "parameters": {
            "text": "=✅ *Testimonial Ready for Social Media!*\n\n*Customer Details:*\n- Name: {{ $json.Name }}\n- Role: {{ $json.Designation }}\n- Email: {{ $json.Email }}\n\n*Testimonial:*\n_\"{{ $json.Testimonial }}\"_\n\n*Original:*\n_\"{{ $json['Original Testimonial'] }}\"_\n\n*View Image:*\n{{ $json['Image Link'] }}\n\n---\n\n*📱 Ready-to-Post Social Media Text:*\n\n🌟 Hear what our clients say!\n\n\"{{ $json.Testimonial }}\"\n\n— {{ $json.Name }}, {{ $json.Designation }}\n\n#ClientSuccess #Testimonial #CustomerReview\n\n---\n\n*Actions Required:*\n1. Copy the text above\n2. Post to Twitter & LinkedIn manually\n3. This testimonial will be marked as processed\n\n_Automated by n8n • {{ $now.format('MMM DD, YYYY @ HH:mm') }}_",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "SLACK_CHANNEL_ID",
              "cachedResultName": "SLACK_CHANNEL_NAME"
            },
            "otherOptions": {}
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.3
        },
        {
          "id": "e63a79cc-2313-4d65-a349-b261dd17fecd",
          "name": "Sticky Note15",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2592,
            512
          ],
          "parameters": {
            "color": 7,
            "width": 336,
            "height": 315,
            "content": "## 🔄 MARK AS PROCESSED\n\n**What it does:**\n- Updates Google Sheet record\n- Marks testimonial as processed\n- Adds timestamp\n\n\n"
          },
          "typeVersion": 1
        },
        {
          "id": "6b7e87eb-7958-4bab-bde9-db1df08c3148",
          "name": "Mark as Posted",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            2656,
            672
          ],
          "parameters": {
            "columns": {
              "value": {
                "Drive ID": "={{ $('IF Approved & Not Posted').item.json[\"Drive ID\"] }}",
                "Posted At": "={{ $now.toISO() }}",
                "Posted to Social": "Ready - Manual Post Required"
              },
              "schema": [
                {
                  "id": "Timestamp",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Timestamp",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Name",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Name",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Designation",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Designation",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Testimonial",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Testimonial",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Original Testimonial",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Original Testimonial",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Image Link",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Image Link",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Drive ID",
                  "type": "string",
                  "display": true,
                  "removed": false,
                  "required": false,
                  "displayName": "Drive ID",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Status",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Status",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Email",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Email",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Original Length",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Original Length",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Enhanced",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Enhanced",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Source",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Source",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Posted to Social",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Posted to Social",
                  "defaultMatch": false,
                  "canBeUsedToMatch": true
                },
                {
                  "id": "Posted At",
                  "type": "string",
                  "display": true,
                  "required": false,
                  "displayName": "Posted At",
                  "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": [
                "Drive ID"
              ],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "update",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 1358321955,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_ID_HERE/edit#gid=1358321955",
              "cachedResultName": "Testimonial Database"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_GOOGLE_SHEETS_ID_HERE",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEETS_ID_HERE/edit?usp=drivesdk",
              "cachedResultName": "Feedback Log"
            }
          },
          "credentials": {
            "googleSheetsOAuth2Api": {
              "id": "credential-id",
              "name": "googleSheetsOAuth2Api Credential"
            }
          },
          "typeVersion": 4.4
        },
        {
          "id": "bf68641b-18b6-4fe7-ba2e-bf418f44aef8",
          "name": "Sticky Note9",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            2464,
            -32
          ],
          "parameters": {
            "color": 7,
            "width": 288,
            "height": 363,
            "content": "## 📊 DATABASE UPDATE\n\n**Data Saved:**\n✓ Timestamp, Name, Designation, Email\n✓ Original + Enhanced testimonial\n✓ Image link (shareable)\n✓ Status: \"Pending Approval\"\n✓ Enhancement metadata\n✓ Source tracking\n"
          },
          "typeVersion": 1
        },
        {
          "id": "564a5664-46e7-417c-b01c-ffc7f761184b",
          "name": "Sticky Note16",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -896,
            -128
          ],
          "parameters": {
            "color": 7,
            "width": 368,
            "height": 560,
            "content": "## 📋 **SETUP CREDENTIALS FIRST**\n\n### **Required API Credentials:**\n\n#### 1. **OpenAI API** 🤖\n- Sign up at: https://platform.openai.com\n- Get API key from dashboard\n\n#### 2. **HTML/CSS to Image API** 📸\n- Sign up at: https://htmlcsstoimg.com\n\n#### 3. **Google Drive OAuth2** ☁️\n- Enable Google Drive API in Google Cloud Console\n\n#### 4. **Google Sheets OAuth2** 📊\n- Use same Google Cloud project\n\n#### 5. **Slack API** 💬\n- Create Slack App at: https://api.slack.com/apps\n"
          },
          "typeVersion": 1
        },
        {
          "id": "4be49892-0a67-4eb2-8cc9-c18b92559a76",
          "name": "Sticky Note17",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1312,
            -48
          ],
          "parameters": {
            "color": 7,
            "width": 384,
            "height": 480,
            "content": "## 🧪 **TEST WORKFLOW**\n\n**Set Headers:**\n   - `Content-Type`: `application/json`\n**Paste this in Body (raw JSON):**\n\n```json\n{\n    \"name\": \"Sarah Johnson\",\n    \"designation\": \"Marketing Director\",\n    \"photo_url\": \"https://i.pravatar.cc/400?img=5\",\n    \"testimonial_text\": \"Working with this team was amazing!\",\n    \"email\": \"sample@gmail.com\"\n}\n```\n\n### **Expected Result:**\n✅ Testimonial processed in ~15-30 seconds\n✅ Image uploaded to Google Drive\n✅ Entry added to Google Sheets\n✅ Slack notification sent\n\n"
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "",
      "connections": {
        "Set AI Prompt": {
          "main": [
            [
              {
                "node": "OpenAI Enhancement",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Download Image": {
          "main": [
            [
              {
                "node": "Upload to Google Drive",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Data Validation": {
          "main": [
            [
              {
                "node": "Set AI Prompt",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Every 5 Minutes": {
          "main": [
            [
              {
                "node": "Read Google Sheet",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Webhook Trigger": {
          "main": [
            [
              {
                "node": "Data Validation",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "HTML/CSS to Image": {
          "main": [
            [
              {
                "node": "Download Image",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Read Google Sheet": {
          "main": [
            [
              {
                "node": "IF Approved & Not Posted",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "OpenAI Enhancement": {
          "main": [
            [
              {
                "node": "Extract AI Response",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Extract AI Response": {
          "main": [
            [
              {
                "node": "Generate HTML Template",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Update Google Sheet": {
          "main": [
            [
              {
                "node": "Send Slack Notification",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Notify Ready to Post": {
          "main": [
            [
              {
                "node": "Mark as Posted",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate HTML Template": {
          "main": [
            [
              {
                "node": "HTML/CSS to Image",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Upload to Google Drive": {
          "main": [
            [
              {
                "node": "Update Google Sheet",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "IF Approved & Not Posted": {
          "main": [
            [
              {
                "node": "Notify Ready to Post",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 34,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 1
        },
        "n8n-nodes-base.set": {
          "count": 1
        },
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.slack": {
          "count": 2
        },
        "n8n-nodes-base.webhook": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 18
        },
        "n8n-nodes-base.googleDrive": {
          "count": 1
        },
        "n8n-nodes-base.httpRequest": {
          "count": 1
        },
        "n8n-nodes-base.googleSheets": {
          "count": 3
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.openAi": {
          "count": 1
        },
        "n8n-nodes-htmlcsstoimage.htmlCssToImage": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Jitesh Dugar",
      "username": "jiteshdugar",
      "bio": "AI Automation Specialist - OpenAI, CRM & Automation Expert with a solid understanding of various tools that include Zapier, Make, Zoho CRM, Hubspot, Google Sheets, Airtable, Pipedrive, Google Analytics, and more.",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/jiteshdugar"
      ],
      "avatar": "https://gravatar.com/avatar/edaa3abb99806b0586dced559d0a5417f24a507e7c4464a63960f0638a4b1b90?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": 19,
        "icon": "file:httprequest.svg",
        "name": "n8n-nodes-base.httpRequest",
        "codex": {
          "data": {
            "alias": [
              "API",
              "Request",
              "URL",
              "Build",
              "cURL"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/",
                  "icon": "📈",
                  "label": "Automatically pulling and visualizing data with n8n"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
                  "icon": "✍️",
                  "label": "Learn how to automatically cross-post your content with n8n"
                },
                {
                  "url": "https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/",
                  "icon": "🧾",
                  "label": "Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/",
                  "icon": "🛳",
                  "label": "Running n8n on ships: An interview with Maranics"
                },
                {
                  "url": "https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/",
                  "icon": " 🪢",
                  "label": "What are APIs and how to use them with no code"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/world-poetry-day-workflow/",
                  "icon": "📜",
                  "label": "Celebrating World Poetry Day with a daily poem in Telegram"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/",
                  "icon": "🎨",
                  "label": "Automate Designs with Bannerbear and n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/",
                  "icon": "📱",
                  "label": "Building an expense tracking app in 10 minutes"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/",
                  "icon": "🧰",
                  "label": "How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/",
                  "icon": "🦄",
                  "label": "Learn how to use webhooks with Mattermost slash commands"
                },
                {
                  "url": "https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/",
                  "icon": "📈",
                  "label": "How a Membership Development Manager automates his work and investments"
                },
                {
                  "url": "https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/",
                  "icon": "📈",
                  "label": "A low-code bitcoin ticker built with QuestDB and n8n.io"
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                },
                {
                  "url": "https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/",
                  "icon": "🤟",
                  "label": "Creating scheduled text affirmations with n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "HTTP Request",
          "color": "#0004F5"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="
        },
        "displayName": "HTTP Request",
        "typeVersion": 4,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 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": 40,
        "icon": "file:slack.svg",
        "name": "n8n-nodes-base.slack",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "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/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/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/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/slack/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Slack"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Slack",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 47,
        "icon": "file:webhook.svg",
        "name": "n8n-nodes-base.webhook",
        "codex": {
          "data": {
            "alias": [
              "HTTP",
              "API",
              "Build",
              "WH"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/",
                  "icon": "✍️",
                  "label": "Learn how to automatically cross-post your content with n8n"
                },
                {
                  "url": "https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/",
                  "icon": "🛳",
                  "label": "Running n8n on ships: An interview with Maranics"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/",
                  "icon": " 🪢",
                  "label": "What are APIs and how to use them with no code"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/",
                  "icon": "💻",
                  "label": "How a digital strategist uses n8n for online marketing"
                },
                {
                  "url": "https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/",
                  "icon": "📹",
                  "label": "The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/",
                  "label": "How to automate every step of an incident response workflow"
                },
                {
                  "url": "https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/",
                  "icon": "🧰",
                  "label": "Learn to Build Powerful API Endpoints Using Webhooks"
                },
                {
                  "url": "https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/",
                  "icon": "🦄",
                  "label": "Learn how to use webhooks with Mattermost slash commands"
                },
                {
                  "url": "https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/",
                  "icon": "🛵",
                  "label": "How Goomer automated their operations with over 200 n8n workflows"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "Webhook"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"
        },
        "displayName": "Webhook",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 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": 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": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1250,
        "icon": "file:openAi.svg",
        "name": "@n8n/n8n-nodes-langchain.openAi",
        "codex": {
          "data": {
            "alias": [
              "LangChain",
              "ChatGPT",
              "Sora",
              "DallE",
              "whisper",
              "audio",
              "transcribe",
              "tts",
              "assistant"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-langchain.openai/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Agents",
                "Miscellaneous",
                "Root Nodes"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "OpenAI"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg1IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NiAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MSA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSJibGFjayIvPgo8L3N2Zz4K"
        },
        "displayName": "OpenAI",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 33,
        "name": "Social Media"
      },
      {
        "id": 51,
        "name": "Multimodal AI"
      }
    ],
    "image": []
  }
}