AutomationFlowsAI & RAG › Gpt-4.1 Mini-powered Learning Management Automation

Gpt-4.1 Mini-powered Learning Management Automation

ByCheng Siong Chin @cschin on n8n.io

Automates daily learner engagement monitoring, progress analysis, and personalized feedback delivery for training programs. Target audience: learning and development teams, corporate training managers, and online education platforms scaling instructor workload. Problem solved:…

Cron / scheduled trigger★★★★★ complexityAI-powered32 nodesHTTP RequestAgentOutput Parser StructuredOpenAI ChatGmail
AI & RAG Trigger: Cron / scheduled Nodes: 32 Complexity: ★★★★★ AI nodes: yes Added:

This workflow corresponds to n8n.io template #11864 — we link there as the canonical source.

This workflow follows the Agent → Gmail 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 →

Download .json
{
  "id": "K3mSyjQj3x80Idgz",
  "name": "GPT-4.1 mini-Powered Learning Management Automation",
  "tags": [],
  "nodes": [
    {
      "id": "33713b4d-4820-4a34-939d-563c5c50ff7c",
      "name": "Daily Learning Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1648,
        80
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "22c04729-0b3e-45f0-8a66-c3ffbe0eaff5",
      "name": "Workflow Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        -1424,
        80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "employeeApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Employee API endpoint URL__>"
            },
            {
              "id": "id-2",
              "name": "progressApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Progress tracking API endpoint__>"
            },
            {
              "id": "id-3",
              "name": "quizApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Quiz submissions API endpoint__>"
            },
            {
              "id": "id-4",
              "name": "learningPathApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Learning path storage API endpoint__>"
            },
            {
              "id": "id-5",
              "name": "managerEmail",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Manager email address__>"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "ae45f1a9-785a-45ae-9e49-cd1f1367e904",
      "name": "Get Employee Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1200,
        80
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.employeeApiUrl }}",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "85948847-51b5-43ab-96c9-e2913c0b8dd1",
      "name": "Assign Training Modules",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -976,
        80
      ],
      "parameters": {
        "text": "=Employee data: {{ $json }}",
        "options": {
          "systemMessage": "You are a learning management AI assistant that assigns training modules to employees.\n\nYour task is to:\n1. Analyze the employee data including job role, performance metrics, and compliance requirements\n2. Assign appropriate training modules based on:\n   - Job role requirements\n   - Performance gaps identified\n   - Mandatory compliance training needs\n   - Career development opportunities\n3. Return structured assignments with module IDs, priorities, and deadlines\n\nConsider both mandatory and recommended training paths."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "e96a9a24-4a99-4c2e-8402-0cc46a1b44b1",
      "name": "Training Assignment Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -848,
        304
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"employeeId\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"assignedModules\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"object\",\n\t\t\t\t\"properties\": {\n\t\t\t\t\t\"moduleId\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t},\n\t\t\t\t\t\"moduleName\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t},\n\t\t\t\t\t\"priority\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t},\n\t\t\t\t\t\"dueDate\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t},\n\t\t\t\t\t\"reason\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "620706ad-68e0-4b6a-9074-cf068ed4e49b",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -976,
        304
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "7a8d18fd-e179-4bc4-949b-f9f6341d906e",
      "name": "Save Training Assignments",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -624,
        80
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.employeeApiUrl }}/assignments",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.3
    },
    {
      "id": "fff86a2a-045e-40cd-ac42-9c69459aa834",
      "name": "Get Progress Data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -400,
        80
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.progressApiUrl }}",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "8869f697-4a67-4d39-86be-044095bf5e3a",
      "name": "Analyze Progress",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -176,
        80
      ],
      "parameters": {
        "text": "=Progress data: {{ $json }}",
        "options": {
          "systemMessage": "You are a learning progress analysis AI assistant.\n\nYour task is to:\n1. Analyze employee learning progress data\n2. Identify employees who are:\n   - Behind schedule on training modules\n   - Not engaging with assigned content\n   - At risk of missing compliance deadlines\n3. Determine who needs reminder notifications\n4. Calculate completion rates and engagement metrics\n\nReturn structured analysis with reminder flags and progress metrics."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "ed65d594-f2fe-453a-aa90-41f6359f833c",
      "name": "Progress Analysis Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        16,
        304
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"employeeId\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"needsReminder\": {\n\t\t\t\"type\": \"boolean\"\n\t\t},\n\t\t\"completionRate\": {\n\t\t\t\"type\": \"number\"\n\t\t},\n\t\t\"daysOverdue\": {\n\t\t\t\"type\": \"number\"\n\t\t},\n\t\t\"riskLevel\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "8c24dda3-d8a0-43b5-84fd-900d6b4737a3",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -176,
        304
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "8404a854-a6a5-4226-bc87-d29bef4926ef",
      "name": "Check If Reminder Needed",
      "type": "n8n-nodes-base.if",
      "position": [
        176,
        80
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "boolean",
                "operation": "equals"
              },
              "leftValue": "={{ $('Analyze Progress').item.json.needsReminder }}",
              "rightValue": "true"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "cee69204-0ab3-4129-bda5-dba31ba01520",
      "name": "Send Reminder Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        400,
        288
      ],
      "parameters": {
        "sendTo": "={{ $json.employeeEmail }}",
        "message": "=Hi {{ $json.employeeName }},\n\nThis is a friendly reminder to complete your assigned training modules. You currently have {{ $json.daysOverdue }} days overdue.\n\nYour completion rate: {{ $json.completionRate }}%\n\nPlease log in to the learning platform to continue your training.\n\nBest regards,\nLearning Management System",
        "options": {},
        "subject": "Training Reminder: Complete Your Assigned Modules"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "63d7c191-b5e4-4002-8455-450676ac7d3c",
      "name": "Get Quiz Submissions",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        656,
        96
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.quizApiUrl }}",
        "options": {}
      },
      "typeVersion": 4.3
    },
    {
      "id": "d082ff9d-cd86-4900-a367-a27a9bfe8e17",
      "name": "Evaluate Quiz Submissions",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        880,
        96
      ],
      "parameters": {
        "text": "=Quiz submissions: {{ $json }}",
        "options": {
          "systemMessage": "You are a quiz evaluation AI assistant.\n\nYour task is to:\n1. Evaluate quiz submissions from employees\n2. Grade answers based on correctness and completeness\n3. Provide constructive feedback on incorrect answers\n4. Calculate overall scores and pass/fail status\n5. Identify knowledge gaps for follow-up training\n\nReturn structured evaluation results with scores, feedback, and recommendations."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "4b695d1f-7438-4ff1-b8d7-901457986b8d",
      "name": "Quiz Evaluation Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1056,
        320
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\t\"employeeId\": \"string\",\n\t\"quizId\": \"string\",\n\t\"score\": 0,\n\t\"passed\": false,\n\t\"feedback\": \"string\",\n\t\"knowledgeGaps\": [\"string\"]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "8d8b3f92-98d5-41bd-868f-3a13e3141ae6",
      "name": "OpenAI Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        880,
        320
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "7b4d04e9-c4b1-42ec-8da7-f91da1b837e3",
      "name": "Save Quiz Results",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1232,
        96
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.quizApiUrl }}/results",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.3
    },
    {
      "id": "a9b6ad1d-bc67-4891-983d-ca5e896f22ef",
      "name": "Generate Learning Paths",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1456,
        96
      ],
      "parameters": {
        "text": "=Quiz results and employee data: {{ $json }}",
        "options": {
          "systemMessage": "You are a personalized learning path generation AI assistant.\n\nYour task is to:\n1. Analyze quiz results and knowledge gaps\n2. Review employee performance and career goals\n3. Generate personalized learning paths that:\n   - Address identified knowledge gaps\n   - Build on existing strengths\n   - Align with career development objectives\n   - Include progressive difficulty levels\n4. Recommend specific modules, courses, and resources\n5. Set realistic timelines and milestones\n\nReturn structured learning paths with clear progression steps."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 3
    },
    {
      "id": "e8e29124-378d-4b1e-a6cc-7b3cefb80bae",
      "name": "Learning Path Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1616,
        320
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"employeeId\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"learningPath\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"object\",\n\t\t\t\t\"properties\": {\n\t\t\t\t\t\"step\": {\n\t\t\t\t\t\t\"type\": \"number\"\n\t\t\t\t\t},\n\t\t\t\t\t\"moduleName\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t},\n\t\t\t\t\t\"estimatedDuration\": {\n\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t},\n\t\t\t\t\t\"prerequisites\": {\n\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"objectives\": {\n\t\t\t\t\t\t\"type\": \"array\",\n\t\t\t\t\t\t\"items\": {\n\t\t\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"totalDuration\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"milestones\": {\n\t\t\t\"type\": \"array\",\n\t\t\t\"items\": {\n\t\t\t\t\"type\": \"string\"\n\t\t\t}\n\t\t}\n\t}\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "bf9a1476-150c-4f75-963b-f2955a80f0bd",
      "name": "OpenAI Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1408,
        320
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "016dbd38-b60e-49cc-951d-58d240339a68",
      "name": "Save Learning Paths",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1808,
        96
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.learningPathApiUrl }}",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json }}",
        "sendBody": true,
        "specifyBody": "json"
      },
      "typeVersion": 4.3
    },
    {
      "id": "8502e66c-6b68-4251-9acb-3fc2abfb6cc7",
      "name": "Notify Manager",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2224,
        96
      ],
      "parameters": {
        "sendTo": "={{ $('Workflow Configuration').first().json.managerEmail }}",
        "message": "={{ $json.reportHtml }}",
        "options": {},
        "subject": "Daily Learning Management Report"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "01955e21-2189-4419-a790-b33d805c52e3",
      "name": "Prepare Manager Report",
      "type": "n8n-nodes-base.code",
      "position": [
        2032,
        96
      ],
      "parameters": {
        "jsCode": "// Aggregate all learning data and create comprehensive manager report\nconst items = $input.all();\n\n// Initialize statistics\nconst stats = {\n  totalEmployees: 0,\n  trainingAssignments: {\n    total: 0,\n    byModule: {}\n  },\n  completionRates: {\n    completed: 0,\n    inProgress: 0,\n    notStarted: 0,\n    averageCompletionRate: 0\n  },\n  quizPerformance: {\n    totalQuizzes: 0,\n    averageScore: 0,\n    passRate: 0,\n    scores: []\n  },\n  learningPaths: {\n    total: 0,\n    byType: {}\n  }\n};\n\nconst employeeDetails = [];\n\n// Process each item\nfor (const item of items) {\n  const data = item.json;\n  \n  // Count employees\n  if (data.employeeId) {\n    stats.totalEmployees++;\n    \n    // Collect employee details\n    employeeDetails.push({\n      employeeId: data.employeeId,\n      name: data.employeeName || 'Unknown',\n      trainingModules: data.trainingModules || [],\n      completionStatus: data.completionStatus || 'not_started',\n      quizScore: data.quizScore || 0,\n      learningPath: data.learningPath || 'Not assigned'\n    });\n  }\n  \n  // Training assignments\n  if (data.trainingModules && Array.isArray(data.trainingModules)) {\n    stats.trainingAssignments.total += data.trainingModules.length;\n    data.trainingModules.forEach(module => {\n      stats.trainingAssignments.byModule[module] = (stats.trainingAssignments.byModule[module] || 0) + 1;\n    });\n  }\n  \n  // Completion rates\n  if (data.completionStatus) {\n    if (data.completionStatus === 'completed') {\n      stats.completionRates.completed++;\n    } else if (data.completionStatus === 'in_progress') {\n      stats.completionRates.inProgress++;\n    } else {\n      stats.completionRates.notStarted++;\n    }\n  }\n  \n  // Quiz performance\n  if (data.quizScore !== undefined) {\n    stats.quizPerformance.totalQuizzes++;\n    stats.quizPerformance.scores.push(data.quizScore);\n  }\n  \n  // Learning paths\n  if (data.learningPath) {\n    stats.learningPaths.total++;\n    stats.learningPaths.byType[data.learningPath] = (stats.learningPaths.byType[data.learningPath] || 0) + 1;\n  }\n}\n\n// Calculate averages\nif (stats.totalEmployees > 0) {\n  stats.completionRates.averageCompletionRate = Math.round((stats.completionRates.completed / stats.totalEmployees) * 100);\n}\n\nif (stats.quizPerformance.scores.length > 0) {\n  const totalScore = stats.quizPerformance.scores.reduce((sum, score) => sum + score, 0);\n  stats.quizPerformance.averageScore = Math.round(totalScore / stats.quizPerformance.scores.length);\n  stats.quizPerformance.passRate = Math.round((stats.quizPerformance.scores.filter(score => score >= 70).length / stats.quizPerformance.scores.length) * 100);\n}\n\n// Generate report summary\nconst reportSummary = `\n=== LEARNING MANAGEMENT REPORT ===\nGenerated: ${new Date().toISOString()}\n\nOVERVIEW:\n- Total Employees: ${stats.totalEmployees}\n- Total Training Assignments: ${stats.trainingAssignments.total}\n- Total Learning Paths Created: ${stats.learningPaths.total}\n\nCOMPLETION STATUS:\n- Completed: ${stats.completionRates.completed} (${stats.completionRates.averageCompletionRate}%)\n- In Progress: ${stats.completionRates.inProgress}\n- Not Started: ${stats.completionRates.notStarted}\n\nQUIZ PERFORMANCE:\n- Total Quizzes Taken: ${stats.quizPerformance.totalQuizzes}\n- Average Score: ${stats.quizPerformance.averageScore}%\n- Pass Rate (\u226570%): ${stats.quizPerformance.passRate}%\n\nTRAINING MODULES DISTRIBUTION:\n${Object.entries(stats.trainingAssignments.byModule).map(([module, count]) => `- ${module}: ${count} assignments`).join('\\n')}\n\nLEARNING PATHS DISTRIBUTION:\n${Object.entries(stats.learningPaths.byType).map(([path, count]) => `- ${path}: ${count} employees`).join('\\n')}\n`;\n\n// Return comprehensive report\nreturn [\n  {\n    json: {\n      reportDate: new Date().toISOString(),\n      summary: reportSummary,\n      statistics: stats,\n      employeeDetails: employeeDetails,\n      recommendations: [\n        stats.completionRates.averageCompletionRate < 50 ? 'Low completion rate - consider sending additional reminders' : null,\n        stats.quizPerformance.averageScore < 70 ? 'Average quiz score below passing - review training material quality' : null,\n        stats.completionRates.notStarted > stats.totalEmployees * 0.3 ? 'High number of employees not started - increase engagement efforts' : null\n      ].filter(r => r !== null)\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "6c0446f5-e235-4899-b591-ab8826d045c8",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        240,
        -320
      ],
      "parameters": {
        "color": 6,
        "width": 432,
        "height": 224,
        "content": "## Customization\nAdjust AI analysis criteria for your curriculum. Integrate Slack for instructor alerts.  \n\n## Benefits\nReduces instructor workload by 70%, identifies at-risk learners 2 weeks early "
      },
      "typeVersion": 1
    },
    {
      "id": "8e884427-e372-4b5a-81fd-64ff8d425542",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        -320
      ],
      "parameters": {
        "color": 5,
        "width": 544,
        "height": 224,
        "content": "## Prerequisites\nLMS platform credentials, OpenAI API key, learner database, email service for notifications, manager contact lists.\n\n## Use Cases\nCorporate onboarding programs tracking employee progress, online learning platforms identifying struggling students \n"
      },
      "typeVersion": 1
    },
    {
      "id": "7b93b09a-110d-4a3e-957d-1b4d08d62016",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -304
      ],
      "parameters": {
        "color": 4,
        "width": 448,
        "height": 192,
        "content": "## Setup Steps\n1. Configure daily schedule trigger. \n2. Connect learning management system APIs (LMS). \n3. Set OpenAI keys for progress analysis. \n4. Enable Gmail for multi-recipient notifications. \n5. Map learner risk thresholds and escalation rules."
      },
      "typeVersion": 1
    },
    {
      "id": "4f2ecafd-e15b-4518-a780-0d8bd3e78e14",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1728,
        -320
      ],
      "parameters": {
        "width": 928,
        "height": 208,
        "content": "## How It Works\nAutomates daily learner engagement monitoring, progress analysis, and personalized feedback delivery for training programs. Target audience: learning and development teams, corporate training managers, and online education platforms scaling instructor workload. Problem solved: manual progress tracking consumes instructor time; AI analysis identifies struggling learners early for intervention. Workflow runs daily checks on learner activity, retrieves course data and progress, analyzes engagement with OpenAI models, evaluates quiz scores, generates performance summaries, sends progress reports to learners, emails instructors on at-risk cases, generates learning paths, and triggers manager notifications."
      },
      "typeVersion": 1
    },
    {
      "id": "ba23a743-8322-40b4-a8b9-153e52b7bc7c",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1744,
        -64
      ],
      "parameters": {
        "color": 7,
        "width": 688,
        "height": 352,
        "content": "## Data Collection\n**What:** Daily triggers fetch learner profiles, course progress, quiz results, and engagement metrics.\n**Why:** Real-time snapshots enable early identification of performance issues "
      },
      "typeVersion": 1
    },
    {
      "id": "a8b94240-4279-4181-8a96-1a06055f0834",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1760,
        -64
      ],
      "parameters": {
        "color": 7,
        "width": 672,
        "height": 688,
        "content": "## Multi-Channel Notifications\n**What:** Send progress reports to learners via email, notify instructors of at-risk cases, alert managers via summary reports.\n**Why:** Timely interventions prevent disengagement; stakeholder visibility enables proactive support."
      },
      "typeVersion": 1
    },
    {
      "id": "2f7ec9e6-0b05-4ed3-a902-f49675cbf54d",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1024,
        -64
      ],
      "parameters": {
        "color": 7,
        "width": 2368,
        "height": 528,
        "content": "\n## AI-Powered Analysis\n**What:** OpenAI models evaluate learning patterns, identify at-risk learners, and calculate performance scores.\n**Why:** Automated analysis detects subtle patterns humans miss; "
      },
      "typeVersion": 1
    },
    {
      "id": "652afc5f-9e08-4520-a078-ffd69b4bf3c3",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1360,
        -64
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 688,
        "content": "## Personalized Interventions\n**What:** Generate customized learning paths for struggling learners\n**Why:** Tailored recommendations improve retention and progression."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "49a08057-b1ab-4d70-a9c8-3e8e85afac37",
  "connections": {
    "Analyze Progress": {
      "main": [
        [
          {
            "node": "Check If Reminder Needed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Employee Data": {
      "main": [
        [
          {
            "node": "Assign Training Modules",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Progress Data": {
      "main": [
        [
          {
            "node": "Analyze Progress",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Assign Training Modules",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Save Quiz Results": {
      "main": [
        [
          {
            "node": "Generate Learning Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Analyze Progress",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Evaluate Quiz Submissions",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model3": {
      "ai_languageModel": [
        [
          {
            "node": "Generate Learning Paths",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Save Learning Paths": {
      "main": [
        [
          {
            "node": "Prepare Manager Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Reminder Email": {
      "main": [
        [
          {
            "node": "Get Quiz Submissions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Learning Check": {
      "main": [
        [
          {
            "node": "Workflow Configuration",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Quiz Submissions": {
      "main": [
        [
          {
            "node": "Evaluate Quiz Submissions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Learning Path Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Generate Learning Paths",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Manager Report": {
      "main": [
        [
          {
            "node": "Notify Manager",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Quiz Evaluation Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Evaluate Quiz Submissions",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Workflow Configuration": {
      "main": [
        [
          {
            "node": "Get Employee Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Assign Training Modules": {
      "main": [
        [
          {
            "node": "Save Training Assignments",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Learning Paths": {
      "main": [
        [
          {
            "node": "Save Learning Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check If Reminder Needed": {
      "main": [
        [
          {
            "node": "Send Reminder Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Quiz Submissions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Progress Analysis Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Analyze Progress",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Evaluate Quiz Submissions": {
      "main": [
        [
          {
            "node": "Save Quiz Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Training Assignments": {
      "main": [
        [
          {
            "node": "Get Progress Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Training Assignment Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Assign Training Modules",
            "type": "ai_outputParser",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automates daily learner engagement monitoring, progress analysis, and personalized feedback delivery for training programs. Target audience: learning and development teams, corporate training managers, and online education platforms scaling instructor workload. Problem solved:…

Source: https://n8n.io/workflows/11864/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

This n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform

Agent, OpenAI Chat, Airtable Tool +7
AI & RAG

Created by: Peyton Leveillee Last updated: October 2025

OpenAI Chat, Google Sheets, HTTP Request +5
AI & RAG

SEO Blog Article Generation Workflow. Uses outputParserStructured, httpRequest, agent, lmChatOpenAi. Scheduled trigger; 56 nodes.

Output Parser Structured, HTTP Request, Agent +4
AI & RAG

This workflow was born out of a very real problem.

Output Parser Structured, OpenAI Chat, Memory Buffer Window +11
AI & RAG

This workflow automates comprehensive real estate investment analysis by orchestrating specialized AI agents to evaluate property data, market trends, and financial metrics. Designed for real estate i

HTTP Request, Agent, OpenAI Chat +5