This workflow corresponds to n8n.io template #10620 — we link there as the canonical source.
This workflow follows the Agent → OpenRouter Chat recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "UrBLBxK12gRvpi7n",
"meta": {
"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
],
"parameters": {
"text": "=\ud83d\ude97 *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\ud83d\udcca *Technical Readings:*\n\u2022 Engine Temp: {{ $json.engine_temp }}\u00b0C\n\u2022 Oil Pressure: {{ $json.oil_pressure }} PSI\n\u2022 Brake Pads: {{ $json.brake_pad_thickness }}mm\n\u2022 Tire Pressure: {{ $json.tire_pressure }} PSI\n\u2022 Battery: {{ $json.battery_voltage }}V\n\n\u26a0\ufe0f *Issues Detected:*\n{{ $json.needs_oil_change ? '\u2022 Oil change needed ('+$json.last_oil_change_mileage+' miles)\n' : '' }}{{ $json.low_brake_pads ? '\u2022 Low brake pads ('+$json.brake_pad_thickness+'mm)\n' : '' }}{{ $json.low_tire_pressure ? '\u2022 Low tire pressure ('+$json.tire_pressure+' PSI)\n' : '' }}{{ $json.battery_weak ? '\u2022 Weak battery ('+$json.battery_voltage+'V)\n' : '' }}{{ $json.engine_overheating ? '\u2022 Engine overheating ('+$json.engine_temp+'\u00b0C)\n' : '' }}{{ $json.low_oil_pressure ? '\u2022 Low oil pressure ('+$json.oil_pressure+' PSI)\n' : '' }}{{ $json.service_overdue ? '\u2022 Service overdue\n' : '' }}\n\n---\n\n{{ $json.severity === 'critical' ? '\ud83d\udd34 *IMMEDIATE ATTENTION REQUIRED*' : $json.severity === 'high' ? '\ud83d\udfe0 Action needed soon' : '\ud83d\udfe1 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
],
"parameters": {
"text": "=\ud83d\ude97 *Fleet Maintenance Dashboard*\n\ud83d\udcc5 {{ $json.timestamp }}\n\n*SUMMARY*\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\ud83d\udcca Total Alerts: {{ $json.total_alerts }}\n\ud83d\udea8 Critical: {{ $json.critical_count }}\n\u26a0\ufe0f High: {{ $json.high_count }}\n\u2139\ufe0f Medium: {{ $json.medium_count }}\n\ud83d\udcdd Low: {{ $json.low_count }}\n\n\ud83d\ude99 Vehicles Requiring Attention: {{ $json.vehicles_with_alerts }}\n\n{{ $json.critical_count > 0 ? '\ud83d\udd34 *CRITICAL VEHICLES:* ' + $json.critical_vehicles : '\u2705 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 }}\u00b0C\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
],
"parameters": {
"text": "=\ud83e\udd16 *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\ud83d\udcca *Technical Data:*\n\u2022 Engine Temp: {{ $json.raw_data.engine_temp }}\u00b0C\n\u2022 Oil Pressure: {{ $json.raw_data.oil_pressure }} PSI\n\u2022 Brake Pads: {{ $json.raw_data.brake_pad_thickness }}mm\n\u2022 Tire Pressure: {{ $json.raw_data.tire_pressure }} PSI\n\u2022 Battery: {{ $json.raw_data.battery_voltage }}V\n\n\ud83e\udd16 *AI Expert Analysis:*\n{{ $json.ai_analysis }}\n\n---\n\n{{ $json.severity === 'critical' ? '\ud83d\udd34 *IMMEDIATE ACTION REQUIRED*' : $json.severity === 'high' ? '\ud83d\udfe0 *HIGH PRIORITY - Act Soon*' : $json.severity === 'medium' ? '\ud83d\udfe1 *Schedule Maintenance*' : '\ud83d\udfe2 *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": {
"name": "<your 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,
"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
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
openRouterApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Daily 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…
Source: https://n8n.io/workflows/10620/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Scheduled runs collect data from oil markets, global shipping movements, news sources, and official reports. The system performs statistical checks to detect anomalies and volatility shifts. An AI-dri
Complete PostgreSQL-backed system: Keyword scoring → AI research → Multi-part content generation → fal.ai Nano Banana image generation → WordPress publishing
This n8n template builds an automated daily news digest powered by Claude AI.
This workflow automates end-to-end carbon emissions monitoring, strategy optimisation, and ESG reporting using a multi-agent AI supervisor architecture in n8n. Designed for sustainability managers, ES
This n8n template transforms your daily meeting preparation by automatically researching attendees and generating comprehensive briefing documents. Every weekday morning, it analyzes your calendar eve