{
  "workflow": {
    "id": 10620,
    "name": "AI Qwen-Vl-Plus powered car fleet maintenance alert system",
    "views": 73,
    "recentViews": 0,
    "totalViews": 73,
    "createdAt": "2025-11-08T08:19:51.447Z",
    "description": "## How It Works\n\nDaily triggers automatically fetch fleet data and simulate key performance metrics for each vehicle. An AI agent analyzes maintenance requirements, detects potential issues, and routes alerts according to urgency levels. Fleet summaries are aggregated, logged into the database for historical tracking, and AI-enhanced insights are parsed to provide actionable information. Slack notifications are then sent to relevant teams, ensuring timely monitoring, informed decisions, and proactive fleet management.\n\n## Setup Steps\n\n1. Configure daily triggers to automatically fetch, process, and update fleet data.\n2. Connect Slack, the database, and AI APIs to enable notifications and analytical processing.\n3. Set AI parameters and provide API keys for accessing the models and ensuring proper scoring.\n4. Configure PostgreSQL to log all fleet data, summaries, and alerts for historical tracking.\n5. Define Slack channels to receive real-time alerts, summaries, and actionable insights for the team.\n\n## Prerequisites\nSlack workspace, database access, AI account (OpenRouter or compatible), fleet data source, n8n instance\n\n## Use Cases\nFleet monitoring, predictive maintenance, multi-vehicle management, cost optimization, emergency alerts, compliance tracking\n\n## Customization\nAdjust AI parameters, alert thresholds, Slack message formatting, integrate alternative data sources, add email notifications, expand logging\n\n## Benefits\nPrevent breakdowns, reduce manual monitoring, enable data-driven decisions, centralize alerts, scale across vehicles, AI-powered insights\n\n\n\n",
    "workflow": {
      "id": "UrBLBxK12gRvpi7n",
      "meta": {
        "instanceId": "b91e510ebae4127f953fd2f5f8d40d58ca1e71c746d4500c12ae86aad04c1502",
        "templateCredsSetupCompleted": true
      },
      "name": "AI Qwen-Vl-Plus Powered Car Fleet Maintenance Alert System",
      "tags": [],
      "nodes": [
        {
          "id": "aacb0955-bed0-4fcb-bea9-ec97f8108485",
          "name": "Daily Vehicle Check",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -928,
            528
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "hours",
                  "hoursInterval": 24
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "2044e05b-8b7a-4b52-a1fc-78e0ba38252c",
          "name": "Simulate Vehicle Data",
          "type": "n8n-nodes-base.set",
          "position": [
            -272,
            592
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "vehicle_id",
                  "name": "vehicle_id",
                  "type": "string",
                  "value": "={{ $json.vehicle_id }}"
                },
                {
                  "id": "make",
                  "name": "make",
                  "type": "string",
                  "value": "={{ $json.make }}"
                },
                {
                  "id": "model",
                  "name": "model",
                  "type": "string",
                  "value": "={{ $json.model }}"
                },
                {
                  "id": "year",
                  "name": "year",
                  "type": "number",
                  "value": "={{ $json.year }}"
                },
                {
                  "id": "driver",
                  "name": "driver",
                  "type": "string",
                  "value": "={{ $json.driver }}"
                },
                {
                  "id": "mileage",
                  "name": "mileage",
                  "type": "number",
                  "value": "={{ $json.mileage }}"
                },
                {
                  "id": "engine_temp",
                  "name": "engine_temp",
                  "type": "number",
                  "value": "={{ $json.engine_temp }}"
                },
                {
                  "id": "oil_pressure",
                  "name": "oil_pressure",
                  "type": "number",
                  "value": "={{ $json.oil_pressure }}"
                },
                {
                  "id": "brake_pad_thickness",
                  "name": "brake_pad_thickness",
                  "type": "number",
                  "value": "={{ $json.brake_pad_thickness }}"
                },
                {
                  "id": "tire_pressure",
                  "name": "tire_pressure",
                  "type": "number",
                  "value": "={{ $json.tire_pressure }}"
                },
                {
                  "id": "battery_voltage",
                  "name": "battery_voltage",
                  "type": "number",
                  "value": "={{ $json.battery_voltage }}"
                },
                {
                  "id": "last_service_date",
                  "name": "last_service_date",
                  "type": "string",
                  "value": "={{ $json.last_service_date }}"
                },
                {
                  "id": "last_oil_change_mileage",
                  "name": "last_oil_change_mileage",
                  "type": "number",
                  "value": "={{ $json.last_oil_change_mileage }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "3cfae0ed-c0af-4e79-a107-7cbc73a4b5ed",
          "name": "Analyze Maintenance Needs",
          "type": "n8n-nodes-base.set",
          "position": [
            -48,
            592
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "needs_oil_change",
                  "name": "needs_oil_change",
                  "type": "boolean",
                  "value": "={{ $json.last_oil_change_mileage > 5000 }}"
                },
                {
                  "id": "low_brake_pads",
                  "name": "low_brake_pads",
                  "type": "boolean",
                  "value": "={{ $json.brake_pad_thickness < 4 }}"
                },
                {
                  "id": "low_tire_pressure",
                  "name": "low_tire_pressure",
                  "type": "boolean",
                  "value": "={{ $json.tire_pressure < 30 }}"
                },
                {
                  "id": "battery_weak",
                  "name": "battery_weak",
                  "type": "boolean",
                  "value": "={{ $json.battery_voltage < 12.5 }}"
                },
                {
                  "id": "engine_overheating",
                  "name": "engine_overheating",
                  "type": "boolean",
                  "value": "={{ $json.engine_temp > 110 }}"
                },
                {
                  "id": "low_oil_pressure",
                  "name": "low_oil_pressure",
                  "type": "boolean",
                  "value": "={{ $json.oil_pressure < 30 }}"
                },
                {
                  "id": "service_overdue",
                  "name": "service_overdue",
                  "type": "boolean",
                  "value": "={{ $now.diff($json.last_service_date, 'months').months > 6 }}"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "a1f4e9fc-e96e-4d5c-bbaf-c349a4cfcc63",
          "name": "Check If Maintenance Needed",
          "type": "n8n-nodes-base.if",
          "position": [
            176,
            624
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "alert_condition",
                  "operator": {
                    "type": "boolean",
                    "operation": "equals"
                  },
                  "leftValue": "={{ $json.needs_oil_change || $json.low_brake_pads || $json.low_tire_pressure || $json.battery_weak || $json.engine_overheating || $json.low_oil_pressure || $json.service_overdue }}",
                  "rightValue": true
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "98906e58-eefb-4b4e-969d-28bca03cdc2a",
          "name": "Generate Alert Details",
          "type": "n8n-nodes-base.code",
          "position": [
            480,
            512
          ],
          "parameters": {
            "jsCode": "const items = $input.all();\nconst alerts = [];\n\nfor (const item of items) {\n  const data = item.json;\n  const vehicleInfo = {\n    vehicle_id: data.vehicle_id,\n    driver: data.driver || 'Unknown',\n    make: data.make || 'Unknown',\n    model: data.model || 'Unknown',\n    year: data.year,\n    mileage: data.mileage,\n    engine_temp: data.engine_temp,\n    oil_pressure: data.oil_pressure,\n    brake_pad_thickness: data.brake_pad_thickness,\n    tire_pressure: data.tire_pressure,\n    battery_voltage: data.battery_voltage,\n    last_service_date: data.last_service_date,\n    last_oil_change_mileage: data.last_oil_change_mileage,\n    needs_oil_change: data.needs_oil_change,\n    low_brake_pads: data.low_brake_pads,\n    low_tire_pressure: data.low_tire_pressure,\n    battery_weak: data.battery_weak,\n    engine_overheating: data.engine_overheating,\n    low_oil_pressure: data.low_oil_pressure,\n    service_overdue: data.service_overdue\n  };\n  \n  if (data.needs_oil_change || data.low_brake_pads || data.low_tire_pressure || data.battery_weak || data.engine_overheating || data.low_oil_pressure || data.service_overdue) {\n    alerts.push({\n      ...vehicleInfo,\n      severity: data.engine_overheating || data.low_oil_pressure ? 'critical' : data.low_brake_pads ? 'high' : 'medium',\n      timestamp: new Date().toISOString()\n    });\n  }\n}\n\nreturn alerts.map(alert => ({ json: alert }));"
          },
          "typeVersion": 2
        },
        {
          "id": "a7f7556d-4dbe-47c7-92b1-f4b8d0b17144",
          "name": "Send Slack Alert",
          "type": "n8n-nodes-base.slack",
          "position": [
            1232,
            512
          ],
          "webhookId": "15c0d8cb-e715-4f7e-90f9-e53c47f3332d",
          "parameters": {
            "text": "=🚗 *Vehicle Maintenance Alert*\n\n*Vehicle:* {{ $json.vehicle_id }} ({{ $json.make }} {{ $json.model }})\n*Driver:* {{ $json.driver }}\n*Current Mileage:* {{ $json.mileage }} miles\n*Timestamp:* {{ $json.timestamp }}\n\n---\n\n*{{ $json.severity.toUpperCase() }} PRIORITY*\n\n📊 *Technical Readings:*\n• Engine Temp: {{ $json.engine_temp }}°C\n• Oil Pressure: {{ $json.oil_pressure }} PSI\n• Brake Pads: {{ $json.brake_pad_thickness }}mm\n• Tire Pressure: {{ $json.tire_pressure }} PSI\n• Battery: {{ $json.battery_voltage }}V\n\n⚠️ *Issues Detected:*\n{{ $json.needs_oil_change ? '• Oil change needed ('+$json.last_oil_change_mileage+' miles)\n' : '' }}{{ $json.low_brake_pads ? '• Low brake pads ('+$json.brake_pad_thickness+'mm)\n' : '' }}{{ $json.low_tire_pressure ? '• Low tire pressure ('+$json.tire_pressure+' PSI)\n' : '' }}{{ $json.battery_weak ? '• Weak battery ('+$json.battery_voltage+'V)\n' : '' }}{{ $json.engine_overheating ? '• Engine overheating ('+$json.engine_temp+'°C)\n' : '' }}{{ $json.low_oil_pressure ? '• Low oil pressure ('+$json.oil_pressure+' PSI)\n' : '' }}{{ $json.service_overdue ? '• Service overdue\n' : '' }}\n\n---\n\n{{ $json.severity === 'critical' ? '🔴 *IMMEDIATE ATTENTION REQUIRED*' : $json.severity === 'high' ? '🟠 Action needed soon' : '🟡 Schedule maintenance' }}\n\n_AI analysis sent separately_",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "C12345678",
              "cachedResultName": "maintenance-alerts"
            },
            "otherOptions": {},
            "authentication": "oAuth2"
          },
          "typeVersion": 2.2
        },
        {
          "id": "28b9ce23-1dd6-44cc-a563-1e4923f8eba5",
          "name": "Log to Database",
          "type": "n8n-nodes-base.postgres",
          "position": [
            1360,
            832
          ],
          "parameters": {
            "table": {
              "__rl": true,
              "mode": "list",
              "value": "maintenance_alerts"
            },
            "schema": {
              "__rl": true,
              "mode": "list",
              "value": "public"
            },
            "columns": {
              "value": {
                "status": "open",
                "message": "={{ $json.message }}",
                "mileage": "={{ $json.mileage }}",
                "severity": "={{ $json.severity }}",
                "alert_type": "={{ $json.type }}",
                "vehicle_id": "={{ $json.vehicle_id }}",
                "driver_name": "={{ $json.driver }}",
                "vehicle_make": "={{ $json.make }}",
                "vehicle_model": "={{ $json.model }}",
                "action_required": "={{ $json.action }}",
                "alert_timestamp": "={{ $json.timestamp }}"
              },
              "schema": [],
              "mappingMode": "defineBelow",
              "matchingColumns": []
            },
            "options": {}
          },
          "typeVersion": 2.5
        },
        {
          "id": "bbbd4718-6b31-49d4-b78f-f1675170c647",
          "name": "No Maintenance Needed",
          "type": "n8n-nodes-base.set",
          "position": [
            400,
            688
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "vehicle_id",
                  "name": "vehicle_id",
                  "type": "string",
                  "value": "={{ $json.vehicle_id }}"
                },
                {
                  "id": "driver",
                  "name": "driver",
                  "type": "string",
                  "value": "={{ $json.driver }}"
                },
                {
                  "id": "summary",
                  "name": "summary",
                  "type": "string",
                  "value": "=No maintenance alerts for {{ $json.vehicle_id }} ({{ $json.make }} {{ $json.model }}) driven by {{ $json.driver }}. All systems normal."
                },
                {
                  "id": "status",
                  "name": "status",
                  "type": "string",
                  "value": "healthy"
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "c3230e08-0457-4830-9081-7b735eb0ff83",
          "name": "Fleet Data Source",
          "type": "n8n-nodes-base.code",
          "position": [
            -640,
            480
          ],
          "parameters": {
            "jsCode": "// Simulate fleet of 5 vehicles with different characteristics\nconst fleet = [\n  {\n    vehicle_id: 'CAR-2024-001',\n    make: 'Toyota',\n    model: 'Camry',\n    year: 2022,\n    driver: 'John Smith',\n    base_mileage: 45000\n  },\n  {\n    vehicle_id: 'TRUCK-2024-002',\n    make: 'Ford',\n    model: 'F-150',\n    year: 2021,\n    driver: 'Sarah Johnson',\n    base_mileage: 62000\n  },\n  {\n    vehicle_id: 'VAN-2024-003',\n    make: 'Mercedes',\n    model: 'Sprinter',\n    year: 2023,\n    driver: 'Mike Davis',\n    base_mileage: 28000\n  },\n  {\n    vehicle_id: 'CAR-2024-004',\n    make: 'Honda',\n    model: 'Accord',\n    year: 2020,\n    driver: 'Emily Brown',\n    base_mileage: 78000\n  },\n  {\n    vehicle_id: 'SUV-2024-005',\n    make: 'Chevrolet',\n    model: 'Tahoe',\n    year: 2022,\n    driver: 'Robert Wilson',\n    base_mileage: 51000\n  }\n];\n\nreturn fleet.map(vehicle => ({\n  json: {\n    ...vehicle,\n    mileage: vehicle.base_mileage + Math.floor(Math.random() * 5000),\n    engine_temp: Math.floor(Math.random() * 50) + 80,\n    oil_pressure: Math.floor(Math.random() * 30) + 25,\n    brake_pad_thickness: Math.floor(Math.random() * 10) + 2,\n    tire_pressure: Math.floor(Math.random() * 10) + 28,\n    battery_voltage: parseFloat((Math.random() * 2 + 12).toFixed(1)),\n    last_service_date: new Date(Date.now() - Math.floor(Math.random() * 180) * 24 * 60 * 60 * 1000).toISOString(),\n    last_oil_change_mileage: Math.floor(Math.random() * 8000) + 1000\n  }\n}));"
          },
          "typeVersion": 2
        },
        {
          "id": "24814c9c-de99-48c5-9f0e-b705cadf0c58",
          "name": "Split Fleet Data",
          "type": "n8n-nodes-base.splitInBatches",
          "position": [
            -496,
            480
          ],
          "parameters": {
            "options": {}
          },
          "typeVersion": 3
        },
        {
          "id": "c2dbab3c-00e1-469e-9ff8-901b3e046006",
          "name": "Aggregate Fleet Alerts",
          "type": "n8n-nodes-base.aggregate",
          "position": [
            768,
            432
          ],
          "parameters": {
            "options": {},
            "aggregate": "aggregateAllItemData"
          },
          "typeVersion": 1
        },
        {
          "id": "81e7dc57-1405-43a2-865f-e873a3a30b5e",
          "name": "Generate Fleet Summary",
          "type": "n8n-nodes-base.code",
          "position": [
            1024,
            432
          ],
          "parameters": {
            "jsCode": "const items = $input.all();\nconst alerts = items.map(item => item.json);\n\n// Group by severity\nconst critical = alerts.filter(a => a.severity === 'critical');\nconst high = alerts.filter(a => a.severity === 'high');\nconst medium = alerts.filter(a => a.severity === 'medium');\nconst low = alerts.filter(a => a.severity === 'low');\n\n// Group by vehicle\nconst byVehicle = {};\nalerts.forEach(alert => {\n  const vid = alert.vehicle_id;\n  if (!byVehicle[vid]) {\n    byVehicle[vid] = {\n      vehicle_id: vid,\n      driver: alert.driver,\n      make: alert.make,\n      model: alert.model,\n      alerts: []\n    };\n  }\n  byVehicle[vid].alerts.push({\n    type: alert.type,\n    severity: alert.severity,\n    message: alert.message\n  });\n});\n\nconst summary = {\n  total_alerts: alerts.length,\n  critical_count: critical.length,\n  high_count: high.length,\n  medium_count: medium.length,\n  low_count: low.length,\n  vehicles_with_alerts: Object.keys(byVehicle).length,\n  timestamp: new Date().toISOString(),\n  by_vehicle: Object.values(byVehicle),\n  critical_vehicles: critical.map(a => `${a.vehicle_id} (${a.driver})`).join(', ') || 'None'\n};\n\nreturn [{ json: summary }];"
          },
          "typeVersion": 2
        },
        {
          "id": "e01b06b0-0857-42d9-a405-487b01c9df95",
          "name": "Send Fleet Summary to Slack",
          "type": "n8n-nodes-base.slack",
          "position": [
            1424,
            400
          ],
          "webhookId": "22d46351-669a-47f9-94ce-a970dea50d56",
          "parameters": {
            "text": "=🚗 *Fleet Maintenance Dashboard*\n📅 {{ $json.timestamp }}\n\n*SUMMARY*\n━━━━━━━━━━━━━━━━━━━━\n📊 Total Alerts: {{ $json.total_alerts }}\n🚨 Critical: {{ $json.critical_count }}\n⚠️ High: {{ $json.high_count }}\nℹ️ Medium: {{ $json.medium_count }}\n📝 Low: {{ $json.low_count }}\n\n🚙 Vehicles Requiring Attention: {{ $json.vehicles_with_alerts }}\n\n{{ $json.critical_count > 0 ? '🔴 *CRITICAL VEHICLES:* ' + $json.critical_vehicles : '✅ No critical issues detected' }}\n\n---\nDetailed alerts logged to database.",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "C12345678",
              "cachedResultName": "fleet-maintenance"
            },
            "otherOptions": {},
            "authentication": "oAuth2"
          },
          "typeVersion": 2.2
        },
        {
          "id": "8167e277-6156-4b49-8610-8b1d5b188e79",
          "name": "AI Maintenance Analyzer",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            704,
            896
          ],
          "parameters": {
            "text": "=You are an expert vehicle maintenance analyst. Analyze the following vehicle data and provide:\n1. Priority assessment (critical/high/medium/low)\n2. Detailed diagnosis of issues\n3. Recommended immediate actions\n4. Cost estimate if applicable\n5. Safety risk assessment\n\nVehicle Data:\n- ID: {{ $json.vehicle_id }}\n- Make/Model: {{ $json.make }} {{ $json.model }} ({{ $json.year }})\n- Driver: {{ $json.driver }}\n- Mileage: {{ $json.mileage }}\n- Engine Temp: {{ $json.engine_temp }}°C\n- Oil Pressure: {{ $json.oil_pressure }} PSI\n- Brake Pad Thickness: {{ $json.brake_pad_thickness }}mm\n- Tire Pressure: {{ $json.tire_pressure }} PSI\n- Battery Voltage: {{ $json.battery_voltage }}V\n- Last Service: {{ $json.last_service_date }}\n- Miles Since Oil Change: {{ $json.last_oil_change_mileage }}\n\nIssues Detected:\n{{ $json.needs_oil_change ? '- Oil change needed\n' : '' }}{{ $json.low_brake_pads ? '- Low brake pads\n' : '' }}{{ $json.low_tire_pressure ? '- Low tire pressure\n' : '' }}{{ $json.battery_weak ? '- Weak battery\n' : '' }}{{ $json.engine_overheating ? '- Engine overheating\n' : '' }}{{ $json.low_oil_pressure ? '- Low oil pressure\n' : '' }}{{ $json.service_overdue ? '- Service overdue\n' : '' }}\n\nProvide a comprehensive maintenance report.",
            "options": {},
            "promptType": "define"
          },
          "typeVersion": 1.6
        },
        {
          "id": "0225bafb-bc9b-4289-809d-8d13b8042afa",
          "name": "Parse AI Analysis",
          "type": "n8n-nodes-base.code",
          "position": [
            1216,
            1152
          ],
          "parameters": {
            "jsCode": "const items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const aiAnalysis = item.json.output || item.json.text || '';\n  const originalData = item.json;\n  \n  results.push({\n    vehicle_id: originalData.vehicle_id,\n    driver: originalData.driver,\n    make: originalData.make,\n    model: originalData.model,\n    mileage: originalData.mileage,\n    ai_analysis: aiAnalysis,\n    ai_analyzed_at: new Date().toISOString(),\n    severity: originalData.engine_overheating || originalData.low_oil_pressure ? 'critical' : \n              originalData.low_brake_pads ? 'high' : \n              originalData.needs_oil_change || originalData.low_tire_pressure || originalData.battery_weak ? 'medium' : 'low',\n    raw_data: {\n      engine_temp: originalData.engine_temp,\n      oil_pressure: originalData.oil_pressure,\n      brake_pad_thickness: originalData.brake_pad_thickness,\n      tire_pressure: originalData.tire_pressure,\n      battery_voltage: originalData.battery_voltage\n    }\n  });\n}\n\nreturn results.map(r => ({ json: r }));"
          },
          "typeVersion": 2
        },
        {
          "id": "e34c4c3f-94da-4ea3-9216-717a795a9fd3",
          "name": "Enhanced Slack Alert with AI",
          "type": "n8n-nodes-base.slack",
          "position": [
            1408,
            1152
          ],
          "webhookId": "eddbd3aa-e1d9-4b6a-8541-1f64dc72c309",
          "parameters": {
            "text": "=🤖 *AI-Enhanced Vehicle Maintenance Alert*\n\n*Vehicle:* {{ $json.vehicle_id }} ({{ $json.make }} {{ $json.model }})\n*Driver:* {{ $json.driver }}\n*Mileage:* {{ $json.mileage }} miles\n*Analysis Time:* {{ $json.ai_analyzed_at }}\n\n---\n\n*{{ $json.severity.toUpperCase() }} PRIORITY*\n\n📊 *Technical Data:*\n• Engine Temp: {{ $json.raw_data.engine_temp }}°C\n• Oil Pressure: {{ $json.raw_data.oil_pressure }} PSI\n• Brake Pads: {{ $json.raw_data.brake_pad_thickness }}mm\n• Tire Pressure: {{ $json.raw_data.tire_pressure }} PSI\n• Battery: {{ $json.raw_data.battery_voltage }}V\n\n🤖 *AI Expert Analysis:*\n{{ $json.ai_analysis }}\n\n---\n\n{{ $json.severity === 'critical' ? '🔴 *IMMEDIATE ACTION REQUIRED*' : $json.severity === 'high' ? '🟠 *HIGH PRIORITY - Act Soon*' : $json.severity === 'medium' ? '🟡 *Schedule Maintenance*' : '🟢 *Monitor Situation*' }}",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "C12345678",
              "cachedResultName": "maintenance-alerts"
            },
            "otherOptions": {},
            "authentication": "oAuth2"
          },
          "typeVersion": 2.2
        },
        {
          "id": "ff349d7c-6f68-4f0f-8a60-bee4ca53b8b2",
          "name": "OpenRouter Chat Model",
          "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
          "position": [
            704,
            1088
          ],
          "parameters": {
            "model": "qwen/qwen-vl-plus",
            "options": {}
          },
          "credentials": {
            "openRouterApi": {
              "id": "credential-id",
              "name": "openRouterApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "e7e510f7-31af-4fdc-a635-f61d7a41417b",
          "name": "Sticky Note",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1024,
            48
          ],
          "parameters": {
            "width": 448,
            "height": 288,
            "content": "## How It Works\nDaily triggers automatically fetch fleet data and simulate key performance metrics for each vehicle. An AI agent analyzes maintenance requirements, detects potential issues, and routes alerts according to urgency levels. Fleet summaries are aggregated, logged into the database for historical tracking, and AI-enhanced insights are parsed to provide actionable information. Slack notifications are then sent to relevant teams, ensuring timely monitoring, informed decisions, and proactive fleet management."
          },
          "typeVersion": 1
        },
        {
          "id": "ee22f6c1-3c6e-4b14-be73-d509633e7375",
          "name": "Sticky Note1",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            288,
            48
          ],
          "parameters": {
            "color": 4,
            "width": 544,
            "height": 208,
            "content": "## Prerequisites\nSlack workspace, database access, AI account (OpenRouter or compatible), fleet data source, n8n instance\n\n## Use Cases\nFleet monitoring, predictive maintenance, multi-vehicle management, cost optimization, emergency alerts, compliance tracking\n\n"
          },
          "typeVersion": 1
        },
        {
          "id": "2f05519b-d8d3-4af3-93ba-bf5a101ac42e",
          "name": "Sticky Note3",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -160,
            48
          ],
          "parameters": {
            "color": 3,
            "width": 432,
            "height": 256,
            "content": "## Customization\nAdjust AI parameters, alert thresholds, Slack message formatting, integrate alternative data sources\n\n## Benefits\nPrevent breakdowns, reduce manual monitoring, enable data-driven decisions, centralize alerts"
          },
          "typeVersion": 1
        },
        {
          "id": "8e1e8d60-5878-43cf-9eae-7ba5fee4ba17",
          "name": "Sticky Note2",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1008,
            432
          ],
          "parameters": {
            "color": 7,
            "width": 214,
            "height": 400,
            "content": "## Daily Check Trigger\n\n\n\n\n\n\n\n\n\n\n\nLaunches workflow on a fixed schedule\nWhy: Ensures fleet data is fresh without manual intervention "
          },
          "typeVersion": 1
        },
        {
          "id": "c8a25456-bf4b-442e-a8e9-f763d9ee2144",
          "name": "Sticky Note4",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -768,
            432
          ],
          "parameters": {
            "color": 7,
            "width": 400,
            "height": 384,
            "content": "## Fetch Live Fleet Data\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nRetrieves current vehicle metrics from your data source\nWhy: Real data feeds AI analysis "
          },
          "typeVersion": 1
        },
        {
          "id": "3151a978-cb48-4950-abd2-5d47934ccdd4",
          "name": "Sticky Note5",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -336,
            384
          ],
          "parameters": {
            "color": 7,
            "width": 464,
            "height": 400,
            "content": "## Simulate & Calculate Metrics\nGenerates predicted performance metrics and maintenance indicators\nWhy: Fills gaps where live sensors may be incomplete \n\n"
          },
          "typeVersion": 1
        },
        {
          "id": "dd27cc6b-57ff-4025-9a64-c6a71f74cad3",
          "name": "Sticky Note6",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            656,
            736
          ],
          "parameters": {
            "color": 7,
            "width": 464,
            "height": 512,
            "content": "\n## AI Analyzes Maintenance Urgency\nAI evaluates all metrics against learned patterns to classify maintenance needs (critical/routine/preventive)\nWhy: Spot problems 7-14 days before they become failures"
          },
          "typeVersion": 1
        },
        {
          "id": "75787406-8c2b-4c6d-b5db-2ef03c4632a6",
          "name": "Sticky Note7",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            144,
            352
          ],
          "parameters": {
            "color": 7,
            "width": 464,
            "height": 528,
            "content": "## Route by Urgency Level\nSplits alerts into critical (immediate action), routine (scheduled), and preventive (data-driven recommendations)\nWhy: Prevents alert fatigue by prioritizing what matters "
          },
          "typeVersion": 1
        },
        {
          "id": "d6312758-13f7-4120-ace2-bacfec681ab1",
          "name": "Sticky Note8",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            656,
            320
          ],
          "parameters": {
            "color": 7,
            "width": 960,
            "height": 352,
            "content": "## Compile Fleet Summary\nAggregates individual alerts into a daily executive summary with fleet health score\nWhy: Gives dashboard view without overwhelming detail; spot trends across the entire fleet"
          },
          "typeVersion": 1
        },
        {
          "id": "4f993ddc-ddbe-43e6-a3db-276a83037175",
          "name": "Sticky Note9",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1184,
            688
          ],
          "parameters": {
            "color": 7,
            "width": 432,
            "height": 304,
            "content": "## Log to PostgreSQL\nStores all maintenance events, predictions, and outcomes in your database\nWhy: Creates historical record for compliance audits, ROI tracking"
          },
          "typeVersion": 1
        },
        {
          "id": "aa6d8836-8c75-4a5e-9fed-c40001dce8b1",
          "name": "Sticky Note10",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            1184,
            1008
          ],
          "parameters": {
            "color": 7,
            "width": 432,
            "height": 304,
            "content": "## AI Generates Insights\nAnalyzes logged data to identify patterns: \"Which vehicles need most maintenance?\" \nWhy: Transforms raw alerts into strategic intelligence for budget planning "
          },
          "typeVersion": 1
        },
        {
          "id": "88851336-c05d-4a99-93d9-67580ff6aca1",
          "name": "Sticky Note11",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -544,
            48
          ],
          "parameters": {
            "width": 352,
            "height": 320,
            "content": "## Setup Steps\n1. Configure daily triggers to automatically fetch, process, and update fleet data.\n2. Connect Slack, the database, and AI APIs to enable notifications and analytical processing.\n3. Set AI parameters and provide API keys for accessing the models and ensuring proper scoring.\n4. Configure PostgreSQL to log all fleet data, summaries, and alerts for historical tracking.\n5. Define Slack channels to receive real-time alerts, summaries, and actionable insights for the team."
          },
          "typeVersion": 1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "11744a2b-db2d-4f9a-9316-c31599d57e13",
      "connections": {
        "Split Fleet Data": {
          "main": [
            [
              {
                "node": "Simulate Vehicle Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Fleet Data Source": {
          "main": [
            [
              {
                "node": "Split Fleet Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Parse AI Analysis": {
          "main": [
            [
              {
                "node": "Enhanced Slack Alert with AI",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Daily Vehicle Check": {
          "main": [
            [
              {
                "node": "Simulate Vehicle Data",
                "type": "main",
                "index": 0
              },
              {
                "node": "Fleet Data Source",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "OpenRouter Chat Model": {
          "ai_languageModel": [
            [
              {
                "node": "AI Maintenance Analyzer",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Simulate Vehicle Data": {
          "main": [
            [
              {
                "node": "Analyze Maintenance Needs",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Aggregate Fleet Alerts": {
          "main": [
            [
              {
                "node": "Generate Fleet Summary",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Alert Details": {
          "main": [
            [
              {
                "node": "Send Slack Alert",
                "type": "main",
                "index": 0
              },
              {
                "node": "Log to Database",
                "type": "main",
                "index": 0
              },
              {
                "node": "Aggregate Fleet Alerts",
                "type": "main",
                "index": 0
              },
              {
                "node": "AI Maintenance Analyzer",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Generate Fleet Summary": {
          "main": [
            [
              {
                "node": "Send Fleet Summary to Slack",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "AI Maintenance Analyzer": {
          "main": [
            [
              {
                "node": "Parse AI Analysis",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Analyze Maintenance Needs": {
          "main": [
            [
              {
                "node": "Check If Maintenance Needed",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Check If Maintenance Needed": {
          "main": [
            [
              {
                "node": "Generate Alert Details",
                "type": "main",
                "index": 0
              }
            ],
            [
              {
                "node": "No Maintenance Needed",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 29,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 1
        },
        "n8n-nodes-base.set": {
          "count": 3
        },
        "n8n-nodes-base.code": {
          "count": 4
        },
        "n8n-nodes-base.slack": {
          "count": 3
        },
        "n8n-nodes-base.postgres": {
          "count": 1
        },
        "n8n-nodes-base.aggregate": {
          "count": 1
        },
        "n8n-nodes-base.stickyNote": {
          "count": 12
        },
        "n8n-nodes-base.splitInBatches": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.agent": {
          "count": 1
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.lmChatOpenRouter": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Cheng Siong Chin",
      "username": "cschin",
      "bio": "Dr. Cheng Siong CHIN is an n8n workflow creator specializing in AI-powered automation, agent orchestration, and intelligent system integrations. He designs and builds end-to-end workflows that combine LLMs, APIs, and data pipelines to streamline complex processes and deliver production-ready automation solutions. Contact me to discuss custom AI workflows and agent architectures.\n",
      "verified": true,
      "links": [
        "https://gravatar.com/mysticluminary9fa255f7f5"
      ],
      "avatar": "https://gravatar.com/avatar/54544f98e839bb9dd9a764ad1e6823eeddb6db5138d201e42f291a7b0a73303f?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 30,
        "icon": "file:postgres.svg",
        "name": "n8n-nodes-base.postgres",
        "codex": {
          "data": {
            "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-i-chose-n8n-over-zapier-in-2020/",
                  "icon": "😍",
                  "label": "Why I chose n8n over Zapier in 2020"
                },
                {
                  "url": "https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/",
                  "icon": "📡",
                  "label": "Database Monitoring and Alerting 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/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-honest-burgers-use-automation-to-save-100k-per-year/",
                  "icon": "🍔",
                  "label": "How Honest Burgers Use Automation to Save $100k per year"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/postgres/"
                }
              ]
            },
            "categories": [
              "Development",
              "Data & Storage"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Postgres"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNzkgODEiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMCIgZD0iTTc3LjM5MSA0Ny45MjJjLS40NjYtMS40MTItMS42ODgtMi4zOTYtMy4yNjgtMi42MzItLjc0NS0uMTExLTEuNTk4LS4wNjQtMi42MDguMTQ0LTEuNzYuMzYzLTMuMDY1LjUwMS00LjAxOC41MjggMy41OTYtNi4wNzIgNi41MjEtMTIuOTk3IDguMjA0LTE5LjUxNSAyLjcyMi0xMC41NCAxLjI2OC0xNS4zNDEtLjQzMi0xNy41MTNDNzAuNzcgMy4xODUgNjQuMjA2LjA5NyA1Ni4yODcuMDAyYy00LjIyNC0uMDUyLTcuOTMzLjc4Mi05Ljg2NyAxLjM4MmEzNyAzNyAwIDAgMC01Ljc3LS41MjhjLTMuODA5LS4wNjEtNy4xNzQuNzctMTAuMDUgMi40NzZhNDYgNDYgMCAwIDAtNy4wOTgtMS43ODJDMTYuNTYxLjQxMSAxMC45NjggMS4yOTkgNi44NzYgNC4xOSAxLjkyMiA3LjY4OS0uMzc1IDEzLjc3LjA1IDIyLjI2MmMuMTM1IDIuNjk2IDEuNjQzIDEwLjkgNC4wMTggMTguNjggMS4zNjUgNC40NzIgMi44MiA4LjE4NSA0LjMyNiAxMS4wMzggMi4xMzUgNC4wNDYgNC40MTkgNi40MjggNi45ODQgNy4yODQgMS40MzguNDc5IDQuMDQ5LjgxNCA2Ljc5Ny0xLjQ3M2E2IDYgMCAwIDAgMS40MjkgMS4yM2MuNzgzLjQ5NCAxLjc0Ljg5NyAyLjY5NiAxLjEzNiAzLjQ0Ni44NjIgNi42NzQuNjQ2IDkuNDI3LS41NjFsLjA0MSAxLjM2Mi4wNiAxLjg5OWMuMTYzIDQuMDY0LjQ0IDcuMjIzIDEuMjU5IDkuNDM0LjA0NS4xMjIuMTA1LjMwNy4xNjkuNTAzLjQwOSAxLjI1MSAxLjA5MiAzLjM0NiAyLjgzIDQuOTg3IDEuOCAxLjY5OSAzLjk3OCAyLjIyIDUuOTcyIDIuMjIgMSAwIDEuOTU1LS4xMzEgMi43OTItLjMxMSAyLjk4NC0uNjM5IDYuMzczLTEuNjE0IDguODI0LTUuMTA0IDIuMzE4LTMuMyAzLjQ0NC04LjI3IDMuNjQ4LTE2LjEwMWwuMDc0LS42MzQuMDQ4LS40MTQuNTQ2LjA0OC4xNDEuMDFjMy4wMzkuMTM4IDYuNzU1LS41MDYgOS4wMzctMS41NjYgMS44MDMtLjgzNyA3LjU4Mi0zLjg4OCA2LjIyMS04LjAwNyIvPjxwYXRoIGZpbGw9IiMzMzY3OTEiIGQ9Ik03Mi4xOTUgNDguNzIzYy05LjAzNiAxLjg2NC05LjY1Ny0xLjE5NS05LjY1Ny0xLjE5NSA5LjU0MS0xNC4xNTcgMTMuNTI5LTMyLjEyNyAxMC4wODctMzYuNTI1QzYzLjIzNS0uOTk0IDQ2Ljk4MSA0LjY4IDQ2LjcxIDQuODI3bC0uMDg3LjAxNmMtMS43ODUtLjM3MS0zLjc4My0uNTkxLTYuMDI5LS42MjgtNC4wODktLjA2Ny03LjE5IDEuMDcyLTkuNTQ0IDIuODU3IDAgMC0yOC45OTUtMTEuOTQ1LTI3LjY0NyAxNS4wMjMuMjg3IDUuNzM3IDguMjIzIDQzLjQxIDE3LjY4OSAzMi4wMzEgMy40Ni00LjE2MSA2LjgwMy03LjY3OSA2LjgwMy03LjY3OSAxLjY2IDEuMTAzIDMuNjQ4IDEuNjY2IDUuNzMyIDEuNDYzbC4xNjItLjEzN2E2LjMgNi4zIDAgMCAwIC4wNjUgMS42MmMtMi40MzkgMi43MjUtMS43MjIgMy4yMDMtNi41OTcgNC4yMDYtNC45MzMgMS4wMTctMi4wMzUgMi44MjYtLjE0MyAzLjI5OSAyLjI5NC41NzQgNy42IDEuMzg2IDExLjE4NS0zLjYzM2wtLjE0My41NzNjLjk1Ni43NjUgMS42MjYgNC45NzggMS41MTQgOC43OTdzLS4xODggNi40NDEuNTY1IDguNDg5IDEuNTAzIDYuNjU2IDcuOTEyIDUuMjgyYzUuMzU1LTEuMTQ4IDguMTMtNC4xMjEgOC41MTYtOS4wODEuMjc0LTMuNTI2Ljg5NC0zLjAwNS45MzMtNi4xNThsLjQ5Ny0xLjQ5M2MuNTczLTQuNzguMDkxLTYuMzIyIDMuMzktNS42MDVsLjgwMi4wN2MyLjQyOC4xMSA1LjYwNi0uMzkxIDcuNDcxLTEuMjU3IDQuMDE2LTEuODY0IDYuMzk4LTQuOTc2IDIuNDM4LTQuMTU4Ii8+PHBhdGggZD0iTTMyLjc0NyAyNC42NmMtLjgxNC0uMTEzLTEuNTUyLS4wMDgtMS45MjUuMjc0YS43LjcgMCAwIDAtLjI5Mi40N2MtLjA0Ny4zMzYuMTg4LjcwNy4zMzMuODk4LjQwOS41NDIgMS4wMDYuOTE1IDEuNTk4Ljk5N2EyIDIgMCAwIDAgLjI1Ni4wMThjLjk4NiAwIDEuODgzLS43NjggMS45NjItMS4zMzUuMDk5LS43MS0uOTMyLTEuMTgzLTEuOTMxLTEuMzIybTI2Ljk3NS4wMjJjLS4wNzgtLjU1Ni0xLjA2OC0uNzE1LTIuMDA3LS41ODRzLTEuODQ4LjU1NC0xLjc3MiAxLjExMmMuMDYxLjQzNC44NDQgMS4xNzQgMS43NzEgMS4xNzRxLjExNyAwIC4yMzctLjAxNmMuNjE5LS4wODYgMS4wNzMtLjQ3OSAxLjI4OC0uNzA1LjMyOS0uMzQ1LjUxOC0uNzMuNDg0LS45OG0xNS40NzcgMjMuODI4Yy0uMzQ1LTEuMDQyLTEuNDUzLTEuMzc3LTMuMjk2LS45OTctNS40NzEgMS4xMjktNy40My4zNDctOC4wNzMtLjEyNyA0LjI1Mi02LjQ3OCA3Ljc1LTE0LjMwOCA5LjYzNy0yMS42MTQuODk0LTMuNDYxIDEuMzg4LTYuNjc1IDEuNDI4LTkuMjk0LjA0NS0yLjg3Ni0uNDQ1LTQuOTg4LTEuNDU1LTYuMjc5LTQuMDcyLTUuMjAzLTEwLjA0OC03Ljk5NC0xNy4yODMtOC4wNy00Ljk3My0uMDU2LTkuMTc1IDEuMjE3LTkuOTkgMS41NzVhMjUgMjUgMCAwIDAtNS42MjItLjcyMmMtMy43MzQtLjA2LTYuOTYxLjgzNC05LjYzMyAyLjY1NWE0MyA0MyAwIDAgMC03LjgyOC0yLjA1MmMtNi4zNDItMS4wMjEtMTEuMzgxLS4yNDgtMTQuOTc4IDIuMy00LjI5MSAzLjA0LTYuMjcyIDguNDc1LTUuODg4IDE2LjE1Mi4xMjkgMi41ODMgMS42MDEgMTAuNTI5IDMuOTIzIDE4LjEzOSAzLjA1NyAxMC4wMTYgNi4zOCAxNS42ODYgOS44NzcgMTYuODUyYTQuNCA0LjQgMCAwIDAgMS40MDIuMjMyYzEuMjc2IDAgMi44MzktLjU3NSA0LjQ2Ni0yLjUzMWExNjEgMTYxIDAgMCAxIDYuMTU2LTYuOTY2IDkuOSA5LjkgMCAwIDAgNC40MjkgMS4xOTFsLjAxLjEyMWMtLjMxLjM2OC0uNTY0LjY5LS43ODEuOTY1LTEuMDcgMS4zNTgtMS4yOTMgMS42NDEtNC43MzggMi4zNTEtLjk4LjIwMi0zLjU4Mi43MzgtMy42MiAyLjU2My0uMDQxIDEuOTkzIDMuMDc2IDIuODMgMy40MzEgMi45MTkgMS4yMzguMzEgMi40My40NjMgMy41NjguNDYzIDIuNzY2IDAgNS4yLS45MDkgNy4xNDUtMi42NjgtLjA2IDcuMTA2LjIzNiAxNC4xMDcgMS4wODkgMTYuMjQxLjY5OSAxLjc0NiAyLjQwNiA2LjAxNCA3Ljc5OCA2LjAxNC43OTEgMCAxLjY2Mi0uMDkyIDIuNjItLjI5NyA1LjYyNy0xLjIwNyA4LjA3MS0zLjY5NCA5LjAxNi05LjE3Ny41MDYtMi45MyAxLjM3NC05LjkyOCAxLjc4Mi0xMy42ODIuODYyLjI2OSAxLjk3MS4zOTIgMy4xNy4zOTIgMi41MDEgMCA1LjM4Ny0uNTMxIDcuMTk3LTEuMzcyIDIuMDMzLS45NDQgNS43MDItMy4yNjEgNS4wMzctNS4yNzR6TTYxLjggMjMuMTQ3Yy0uMDE5IDEuMTA4LS4xNzEgMi4xMTQtLjMzMyAzLjE2NC0uMTc0IDEuMTI5LS4zNTQgMi4yOTctLjM5OSAzLjcxNS0uMDQ1IDEuMzc5LjEyOCAyLjgxNC4yOTQgNC4yLjMzNyAyLjgwMS42ODIgNS42ODUtLjY1NSA4LjUzMWExMSAxMSAwIDAgMS0uNTkyLTEuMjE4Yy0uMTY2LS40MDMtLjUyNy0xLjA1LTEuMDI3LTEuOTQ2LTEuOTQ0LTMuNDg3LTYuNDk3LTExLjY1Mi00LjE2Ny0xNC45ODQuNjk0LS45OTIgMi40NTYtMi4wMTEgNi44NzktMS40NjN6TTU2LjQzOSA0LjM3NGM2LjQ4Mi4xNDMgMTEuNjA5IDIuNTY4IDE1LjI0IDcuMjA3IDIuNzg0IDMuNTU4LS4yODIgMTkuNzQ5LTkuMTU4IDMzLjcxNmwtLjI2OS0uMzM5LS4xMTItLjE0YzIuMjk0LTMuNzg4IDEuODQ1LTcuNTM2IDEuNDQ2LTEwLjg1OS0uMTY0LTEuMzY0LS4zMTktMi42NTItLjI4LTMuODYxLjA0MS0xLjI4My4yMS0yLjM4Mi4zNzQtMy40NDYuMjAyLTEuMzExLjQwNy0yLjY2Ny4zNS00LjI2NWExLjggMS44IDAgMCAwIC4wMzctLjYwMWMtLjE0NC0xLjUzMy0xLjg5NC02LjEyLTUuNDYyLTEwLjI3My0xLjk1MS0yLjI3MS00Ljc5Ny00LjgxMy04LjY4Mi02LjUyN2EyOS4zIDI5LjMgMCAwIDEgNi41MTUtLjYxMnpNMjAuMTY3IDUzLjI5OGMtMS43OTMgMi4xNTUtMy4wMzEgMS43NDItMy40MzggMS42MDctMi42NTMtLjg4NS01LjczLTYuNDkxLTguNDQ0LTE1LjM4Mi0yLjM0OC03LjY5My0zLjcyLTE1LjQyOC0zLjgyOS0xNy41OTctLjM0My02Ljg2IDEuMzItMTEuNjQxIDQuOTQzLTE0LjIxIDUuODk2LTQuMTgxIDE1LjU4OS0xLjY3OSAxOS40ODQtLjQwOWwtLjE3LjE2M2MtNi4zOTEgNi40NTUtNi4yNCAxNy40ODMtNi4yMjQgMTguMTU3YTIyIDIyIDAgMCAwIC4wNTEgMS4xMzVjLjExIDEuODU1LjMxNSA1LjMwNy0uMjMyIDkuMjE3LS41MDggMy42MzMuNjEyIDcuMTg5IDMuMDcyIDkuNzU2cS4zODMuMzk4Ljc5NS43NWExNjQgMTY0IDAgMCAwLTYuMDA4IDYuODE0em02LjgzLTkuMTEzYy0xLjk4My0yLjA2OS0yLjg4NC00Ljk0Ny0yLjQ3MS03Ljg5Ni41NzctNC4xMy4zNjQtNy43MjcuMjUtOS42NTlsLS4wMzktLjY5NGMuOTM0LS44MjggNS4yNjEtMy4xNDYgOC4zNDYtMi40MzkgMS40MDguMzIzIDIuMjY2IDEuMjgxIDIuNjIzIDIuOTMxIDEuODQ2IDguNTM5LjI0NCAxMi4wOTgtMS4wNDMgMTQuOTU3LS4yNjUuNTg5LS41MTYgMS4xNDYtLjczIDEuNzIybC0uMTY2LjQ0NWMtLjQyIDEuMTI2LS44MTEgMi4xNzMtMS4wNTMgMy4xNjctMi4xMDgtLjAwNi00LjE1OS0uOTA3LTUuNzE4LTIuNTM0em0uMzI0IDExLjUxNmE1IDUgMCAwIDEtMS40OTQtLjY0MmMuMjcxLS4xMjguNzU0LS4zMDEgMS41OTEtLjQ3NCA0LjA1Mi0uODM0IDQuNjc4LTEuNDIzIDYuMDQ1LTMuMTU4LjMxMy0uMzk4LjY2OS0uODQ5IDEuMTYtMS4zOTguNzMzLS44MjEgMS4wNjgtLjY4MiAxLjY3Ni0uNDMuNDkzLjIwNC45NzIuODIxIDEuMTY3IDEuNTAxLjA5Mi4zMjEuMTk1LjkzLS4xNDMgMS40MDQtMi44NTUgMy45OTctNy4wMTUgMy45NDYtMTAuMDAzIDMuMTk4em0yMS4yMDcgMTkuNzM1Yy00Ljk1NyAxLjA2Mi02LjcxMy0xLjQ2Ny03Ljg2OS00LjM1OS0uNzQ3LTEuODY3LTEuMTEzLTEwLjI4NS0uODUzLTE5LjU4MmExLjEgMS4xIDAgMCAwLS4wNDgtLjM1NiA1IDUgMCAwIDAtLjEzOS0uNjU3Yy0uMzg3LTEuMzUzLTEuMzMxLTIuNDg0LTIuNDYyLTIuOTUzLS40NS0uMTg2LTEuMjc1LS41MjgtMi4yNjctLjI3NC4yMTItLjg3MS41NzgtMS44NTUuOTc2LTIuOTIxbC4xNjctLjQ0OGMuMTg4LS41MDUuNDIzLTEuMDI5LjY3My0xLjU4MyAxLjM0Ny0yLjk5MiAzLjE5Mi03LjA5MSAxLjE5LTE2LjM1LS43NS0zLjQ2OC0zLjI1NC01LjE2MS03LjA1LTQuNzY4LTIuMjc2LjIzNS00LjM1OCAxLjE1NC01LjM5NiAxLjY4cS0uMzM0LjE2OS0uNjE4LjMyOWMuMjktMy40OTQgMS4zODUtMTAuMDI0IDUuNDgxLTE0LjE1NiAyLjU3OS0yLjYwMSA2LjAxNC0zLjg4NiAxMC4xOTktMy44MTcgOC4yNDYuMTM1IDEzLjUzNCA0LjM2NyAxNi41MTggNy44OTMgMi41NzEgMy4wMzkgMy45NjQgNi4xIDQuNTIgNy43NTEtNC4xNzktLjQyNS03LjAyMi40LTguNDYzIDIuNDYtMy4xMzUgNC40ODEgMS43MTUgMTMuMTc4IDQuMDQ2IDE3LjM1OC40MjcuNzY2Ljc5NiAxLjQyOC45MTIgMS43MDkuNzU5IDEuODM5IDEuNzQyIDMuMDY3IDIuNDU5IDMuOTY0LjIyLjI3NS40MzMuNTQxLjU5Ni43NzQtMS4yNjYuMzY1LTMuNTM5IDEuMjA4LTMuMzMyIDUuNDIyLS4xNjcgMi4xMTUtMS4zNTYgMTIuMDE2LTEuOTU5IDE1LjUxNC0uNzk3IDQuNjIxLTIuNDk3IDYuMzQzLTcuMjc5IDcuMzY4em0yMC42OTMtMjMuNjhjLTEuMjk0LjYwMS0zLjQ2IDEuMDUyLTUuNTE4IDEuMTQ4LTIuMjczLjEwNy0zLjQzLS4yNTUtMy43MDItLjQ3Ny0uMTI4LTIuNjI2Ljg1LTIuOTAxIDEuODg0LTMuMTkxLjE2My0uMDQ2LjMyMS0uMDkuNDc0LS4xNDRhNCA0IDAgMCAwIC4zMTMuMjNjMS44MjcgMS4yMDYgNS4wODUgMS4zMzYgOS42ODUuMzg2bC4wNS0uMDFjLS42Mi41OC0xLjY4MiAxLjM1OS0zLjE4NyAyLjA1OHoiLz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Postgres",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 3,
            "name": "Data & Storage"
          },
          {
            "id": 5,
            "name": "Development"
          }
        ]
      },
      {
        "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": 39,
        "icon": "fa:sync",
        "name": "n8n-nodes-base.splitInBatches",
        "codex": {
          "data": {
            "alias": [
              "Loop",
              "Concatenate",
              "Batch",
              "Split",
              "Split In Batches"
            ],
            "resources": {
              "generic": [
                {
                  "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/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"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"organization\"]",
        "defaults": {
          "name": "Loop Over Items",
          "color": "#007755"
        },
        "iconData": {
          "icon": "sync",
          "type": "icon"
        },
        "displayName": "Loop Over Items (Split in Batches)",
        "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": 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": 1119,
        "icon": "fa:robot",
        "name": "@n8n/n8n-nodes-langchain.agent",
        "codex": {
          "data": {
            "alias": [
              "LangChain",
              "Chat",
              "Conversational",
              "Plan and Execute",
              "ReAct",
              "Tools"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Agents",
                "Root Nodes"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "AI Agent",
          "color": "#404040"
        },
        "iconData": {
          "icon": "robot",
          "type": "icon"
        },
        "displayName": "AI Agent",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1236,
        "icon": "file:aggregate.svg",
        "name": "n8n-nodes-base.aggregate",
        "codex": {
          "data": {
            "alias": [
              "Aggregate",
              "Combine",
              "Flatten",
              "Transform",
              "Array",
              "List",
              "Item"
            ],
            "details": "",
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.aggregate/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Aggregate"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJub25lIj48ZyBmaWxsPSIjRkY2RDVBIiBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMyIDE0OGMwLTYuNjI3IDUuMzczLTEyIDEyLTEyaDE0NmM2LjYyNyAwIDEyIDUuMzczIDEyIDEydjI0YzAgNi42MjctNS4zNzMgMTItMTIgMTJINDRjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6bTAgOTZjMC02LjYyNyA1LjM3My0xMiAxMi0xMmgxNDZjNi42MjcgMCAxMiA1LjM3MyAxMiAxMnYyNGMwIDYuNjI3LTUuMzczIDEyLTEyIDEySDQ0Yy02LjYyNyAwLTEyLTUuMzczLTEyLTEyem0wIDk2YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTQ2YzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkg0NGMtNi42MjcgMC0xMi01LjM3My0xMi0xMnoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGQ9Ik03NCA3NmMwIDYuNjI3IDUuMzczIDEyIDEyIDEyaDExNi4yMTdjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMydjU2YzAgMjYuOTc4IDEwLjI3MiA1MS41NTcgMjcuMTE5IDcwLjAzOSA1LjA1NSA1LjU0NSA1LjA1NSAxNC4zNzcgMCAxOS45MjItMTYuODQ3IDE4LjQ4Mi0yNy4xMTkgNDMuMDYxLTI3LjExOSA3MC4wMzl2NTZjMCAxNy42NzMtMTQuMzI3IDMyLTMyIDMySDg2Yy02LjYyNyAwLTEyIDUuMzczLTEyIDEydjI0YzAgNi42MjcgNS4zNzMgMTIgMTIgMTJoMTE2LjIxN2M0NC4xODMgMCA4MC0zNS44MTcgODAtODB2LTU2YzAtMzAuOTI4IDI1LjA3Mi01NiA1Ni01NmE1Ljc4MyA1Ljc4MyAwIDAgMCA1Ljc4My01Ljc4M3YtMzYuNDM0YTUuNzgzIDUuNzgzIDAgMCAwLTUuNzgzLTUuNzgzYy0zMC45MjggMC01Ni0yNS4wNzItNTYtNTZ2LTU2YzAtNDQuMTgzLTM1LjgxNy04MC04MC04MEg4NmMtNi42MjcgMC0xMiA1LjM3My0xMiAxMnoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zNzYgMjQ0YzAtNi42MjcgNS4zNzMtMTIgMTItMTJoMTEyYzYuNjI3IDAgMTIgNS4zNzMgMTIgMTJ2MjRjMCA2LjYyNy01LjM3MyAxMi0xMiAxMkgzODhjLTYuNjI3IDAtMTItNS4zNzMtMTItMTJ6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L2c+PGRlZnM+PGNsaXBQYXRoIGlkPSJhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDUxMnY1MTJIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="
        },
        "displayName": "Aggregate",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1281,
        "icon": "file:openrouter.svg",
        "name": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenrouter/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Language Models",
                "Root Nodes"
              ],
              "Language Models": [
                "Chat Models (Recommended)"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "OpenRouter Chat Model"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOTRBM0I4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDI0IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5PcGVuUm91dGVyPC90aXRsZT48cGF0aCBkPSJNMTYuODA0IDEuOTU3bDcuMjIgNC4xMDV2LjA4N0wxNi43MyAxMC4yMWwuMDE3LTIuMTE3LS44MjEtLjAzYy0xLjA1OS0uMDI4LTEuNjExLjAwMi0yLjI2OC4xMS0xLjA2NC4xNzUtMi4wMzguNTc3LTMuMTQ3IDEuMzUyTDguMzQ1IDExLjAzYy0uMjg0LjE5NS0uNDk1LjMzNi0uNjguNDU1bC0uNTE1LjMyMi0uMzk3LjIzNC4zODUuMjMuNTMuMzM4Yy40NzYuMzE0IDEuMTcuNzk2IDIuNzAxIDEuODY2IDEuMTEuNzc1IDIuMDgzIDEuMTc3IDMuMTQ3IDEuMzUybC4zLjA0NWMuNjk0LjA5MSAxLjM3NS4wOTQgMi44MjUuMDMzbC4wMjItMi4xNTkgNy4yMiA0LjEwNXYuMDg3TDE2LjU4OSAyMmwuMDE0LTEuODYyLS42MzUuMDIyYy0xLjM4Ni4wNDItMi4xMzcuMDAyLTMuMTM4LS4xNjItMS42OTQtLjI4LTMuMjYtLjkyNi00Ljg4MS0yLjA1OWwtMi4xNTgtMS41YTIxLjk5NyAyMS45OTcgMCAwMC0uNzU1LS40OThsLS40NjctLjI4YTU1LjkyNyA1NS45MjcgMCAwMC0uNzYtLjQzQzIuOTA4IDE0LjczLjU2MyAxNC4xMTYgMCAxNC4xMTZWOS44ODhsLjE0LjAwNGMuNTY0LS4wMDcgMi45MS0uNjIyIDMuODA5LTEuMTI0bDEuMDE2LS41OC40MzgtLjI3NGMuNDI4LS4yOCAxLjA3Mi0uNzI2IDIuNjg2LTEuODUzIDEuNjIxLTEuMTMzIDMuMTg2LTEuNzggNC44ODEtMi4wNTkgMS4xNTItLjE5IDEuOTc0LS4yMTMgMy44MTQtLjEzOGwuMDItMS45MDd6Ij48L3BhdGg+PC9zdmc+Cg=="
        },
        "displayName": "OpenRouter Chat Model",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 5,
        "name": "Engineering"
      },
      {
        "id": 49,
        "name": "AI Summarization"
      }
    ],
    "image": []
  }
}