{
  "name": "Telegram - Lesvoorbereiding Generator - v2",
  "nodes": [
    {
      "parameters": {
        "chatId": "={{ $('Listen for incoming events').first().json.message.from.id }}",
        "text": "={{ $json.output }}",
        "additionalFields": {
          "appendAttribution": false,
          "parse_mode": "HTML"
        }
      },
      "id": "ba971f46-eda5-460b-8624-15fa5c035fa5",
      "name": "Correct errors",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1280,
        0
      ],
      "typeVersion": 1.1,
      "webhookId": "2135ff41-6002-4bbb-9350-c6335410bcfa",
      "credentials": {
        "telegramApi": {
          "id": "UTYfGPOvYp4Vv4vp",
          "name": "Telegram Lesvoorbereiding Generator"
        }
      }
    },
    {
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "id": "9665b941-b955-48bf-a959-7bea05b4bdbe",
      "name": "Listen for incoming events",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        0,
        0
      ],
      "webhookId": "fb4b181c-2a9d-41cf-aebc-cda443c95b00",
      "typeVersion": 1,
      "credentials": {
        "telegramApi": {
          "id": "UTYfGPOvYp4Vv4vp",
          "name": "Telegram Lesvoorbereiding Generator"
        }
      }
    },
    {
      "parameters": {
        "model": "gpt-4o",
        "options": {
          "temperature": 0.3
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "typeVersion": 1,
      "position": [
        368,
        0
      ],
      "id": "33159e6c-8ee3-4a5c-864f-aad1d33542c1",
      "name": "Azure OpenAI Chat Model",
      "credentials": {
        "azureOpenAiApi": {
          "id": "BDKXKnVBHJGFxwO5",
          "name": "Azure Open AI account"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.toolSerpApi",
      "typeVersion": 1,
      "position": [
        560,
        80
      ],
      "id": "593cc017-e14a-494a-a97c-f17d5d13443f",
      "name": "SerpAPI",
      "credentials": {
        "serpApi": {
          "id": "Izw68fBf1hYp7MGo",
          "name": "SerpAPI account"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Listen for incoming events').first().json.message.chat.id }}\n",
        "contextWindowLength": 20
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        464,
        192
      ],
      "id": "e9fae057-172a-43b0-b0d2-56eaa5305836",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "83b3780e-c206-49eb-be6f-e68786e4b525",
              "name": "email",
              "value": "={{ $node[\"AI Agent Mailer\"].json[\"output\"] }}",
              "type": "string"
            },
            {
              "id": "199090c2-b876-4821-bb1e-945a5f82b891",
              "name": "lesvoorbereiding",
              "value": "={{ $node[\"AI Agent Lesgenerator\"].json[\"lesvoorbereiding\"] }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1328,
        288
      ],
      "id": "fc3e77d9-c716-479b-8eaa-39faaeddb32d",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "resource": "mail",
        "fromEmail": "pascal@onderwijsorakel.nl",
        "fromName": "Pascal Mariany - Onderwijs Orakel",
        "toEmail": "={{ $json.email }}",
        "subject": "Nieuwe lesvoorbereiding",
        "contentType": "text/html",
        "contentValue": "=<!DOCTYPE html>\n<html lang=\"nl\">\n<head>\n  <meta charset=\"UTF-8\">\n  <style>\n    @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap');\n\n    body {\n      font-family: 'Inter', Arial, sans-serif;\n      background-color: #ffffff;\n      color: #333;\n      margin: 0;\n      padding: 0;\n    }\n\n    .container {\n      max-width: 650px;\n      margin: 40px auto;\n      background-color: #ffffff;\n      padding: 40px;\n      border-radius: 12px;\n      box-shadow: 0 0 12px rgba(0,0,0,0.06);\n      border: 1px solid #e0e0e0;\n    }\n\n    .header {\n      text-align: center;\n      margin-bottom: 30px;\n    }\n\n    .header h1 {\n      font-size: 24px;\n      color: #006e63;\n      margin: 0;\n    }\n\n    .pubdate {\n      font-size: 14px;\n      color: #666;\n      margin-top: 10px;\n    }\n\n    h2 {\n      color: #006e63;\n      font-size: 20px;\n      margin-bottom: 10px;\n      border-bottom: 2px solid #d6f5d6;\n      padding-bottom: 5px;\n    }\n\n    .section {\n      margin-bottom: 40px;\n    }\n\n    .text-content {\n      padding: 10px 0;\n      line-height: 1.8;\n      font-size: 16px;\n      color: #444;\n    }\n\n    .footer {\n      font-size: 13px;\n      color: #888;\n      text-align: center;\n      margin-top: 50px;\n      padding-top: 20px;\n      border-top: 1px solid #e0e0e0;\n    }\n\n    .footer img {\n      max-width: 180px;\n      margin-top: 10px;\n    }\n\n    .footer a {\n      color: #009688;\n      text-decoration: none;\n      font-weight: 500;\n    }\n  </style>\n</head>\n<body>\n  <div class=\"container\">\n    <div class=\"header\">\n      <h1>📘 Jouw Lesvoorbereiding is klaar!</h1>\n      <div class=\"pubdate\">\n        📅 Datum: {{ $now }}\n      </div>\n    </div>\n\n    <div class=\"section\">\n      <h2>🧠 Lesvoorbereiding</h2>\n      <div class=\"text-content\">\n        {{{ $json.lesvoorbereiding }}}\n      </div>\n    </div>\n\n    <div class=\"footer\">\n      <p>Deze lesvoorbereiding is automatisch gegenereerd via de <strong>Lesvoorbereiding Generator</strong> van:</p>\n      <img src=\"https://onderwijsorakel.nl/wp-content/uploads/2025/07/fox-logo-with-text.png\" alt=\"Onderwijsorakel logo\">\n      <p>\n        Bekijk meer op <a href=\"https://www.onderwijsorakel.nl\" target=\"_blank\">www.onderwijsorakel.nl</a>\n      </p>\n    </div>\n  </div>\n</body>\n</html>\n",
        "additionalFields": {}
      },
      "type": "n8n-nodes-base.sendGrid",
      "typeVersion": 1,
      "position": [
        1504,
        240
      ],
      "id": "158dcbf1-eece-4824-98ba-a80d86e2e189",
      "name": "Send an email",
      "credentials": {
        "sendGridApi": {
          "id": "aRGzYePUJUVrTmqY",
          "name": "SendGrid account"
        }
      }
    },
    {
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "typeVersion": 1,
      "position": [
        704,
        608
      ],
      "id": "29581c36-4159-4d1d-86db-083e2c8cccbf",
      "name": "Azure OpenAI Chat Model1",
      "credentials": {
        "azureOpenAiApi": {
          "id": "BDKXKnVBHJGFxwO5",
          "name": "Azure Open AI account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "32512683-27f6-42d7-b031-3d7404bf589f",
              "leftValue": "mail",
              "rightValue": "={{ $json.output.toLowerCase().includes(\"mail\") }}\n",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1152,
        400
      ],
      "id": "9f9ef9fe-c41a-437c-a63f-f4fd14d6fbe6",
      "name": "If"
    },
    {
      "parameters": {
        "chatId": "={{ $('Listen for incoming events').first().json.message.from.id }}",
        "text": "={{ $json.output }}",
        "additionalFields": {}
      },
      "id": "6ba3e878-5d0a-44d4-bea7-44dc717456e4",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1088,
        0
      ],
      "typeVersion": 1.1,
      "webhookId": "d3ed1ad8-1223-49f4-bcaa-c5a777c31205",
      "credentials": {
        "telegramApi": {
          "id": "UTYfGPOvYp4Vv4vp",
          "name": "Telegram Lesvoorbereiding Generator"
        }
      },
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $node[\"AI Agent Lesgenerator\"].json[\"lesvoorbereiding\"] }}\n",
        "options": {
          "systemMessage": "=Je bent een AI-assistent die vriendelijk en professioneel via Telegram communiceert. Je hebt zojuist een volledige lesvoorbereiding gegenereerd (via een andere agent) en vraagt nu aan de gebruiker naar welk e-mailadres de lesvoorbereiding verstuurd mag worden.\n\nStel deze vraag:\n\n<b>📩 Naar welk e-mailadres mag ik de lesvoorbereiding sturen?</b>\n\nGebruik Telegram-compatible HTML-formattering. Geef geen uitleg of extra output — stel alleen de e-mailvraag.\n\nZodra de gebruiker een e-mailadres opgeeft, geef dan uitsluitend deze JSON-output terug (zonder extra tekst of uitleg):\n\n```json\n{\n  \"email\": \"gebruikers@email.nl\"\n}\nGebruik exact dit JSON-formaat. Geen toevoegingen of afsluitende zinnen."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        800,
        400
      ],
      "id": "99def21a-e422-4daa-a3e0-9935c2781206",
      "name": "AI Agent Mailer",
      "retryOnFail": true
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.message.text }}",
        "options": {
          "systemMessage": "Je bent een AI-assistent die docenten helpt bij het voorbereiden van lessen. Je voert een gesprek via Telegram en stelt één voor één de juiste vragen. Je onthoudt de antwoorden met behulp van geheugen (Memory) en herhaalt geen vragen die al zijn beantwoord.\n\nGebruik geen HTML of Markdown. Geef je antwoorden in gewone platte tekst, netjes en duidelijk geformatteerd. Gebruik witregels en opsommingstekens (- of •) voor overzicht. Je mag emoji’s gebruiken om het gesprek vriendelijker of overzichtelijker te maken, zoals 📚, 🎯 of 🛠️.\n\n📋 Stel de volgende 9 vragen, elk afzonderlijk:\n\nWat is het onderwerp van de les?\n\nWat is het thema?\n\nWie is de doelgroep?\n\nWat is de beginsituatie van de leerlingen?\n\nWat zijn de leerdoelen?\n\nHeb je een persoonlijk doel voor deze les?\n\nWelke leeractiviteiten wil je opnemen?\n\nHoe lang duurt de les?\n\nWelke materialen of benodigdheden zijn nodig?\n\n⚠️ Geef pas een volledige lesvoorbereiding als alle 9 antwoorden zijn verzameld.\n\n✅ Zodra alle antwoorden beschikbaar zijn, genereer een praktische en inspirerende lesvoorbereiding in platte tekst, met de volgende structuur:\n\n\n📚 Onderwerp & Thema:\n...\n\n👥 Doelgroep:\n...\n\n📍 Beginsituatie:\n...\n\n🎯 Leerdoelen:\n- ...\n- ...\n\n🌱 Persoonlijk doel:\n...\n\n🛠️ Leeractiviteiten:\n- ...\n- ...\n\n⏰ Duur:\n...\n\n🧰 Benodigdheden:\n...\n\n🧠 Zorg dat elke sectie goed gevuld is. Geef duidelijke instructies bij de leeractiviteiten. Voeg eventueel tips of tijdsblokken toe. Gebruik geen HTML, geen Markdown, en sluit af met alleen deze nette lesvoorbereiding."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        448,
        -208
      ],
      "id": "599b264b-23d3-48c0-aa65-1721585623cd",
      "name": "AI Agent Lesgenerator",
      "retryOnFail": true
    }
  ],
  "pinData": {},
  "connections": {
    "Listen for incoming events": {
      "main": [
        [
          {
            "node": "AI Agent Lesgenerator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Azure OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent Lesgenerator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "SerpAPI": {
      "ai_tool": [
        [
          {
            "node": "AI Agent Lesgenerator",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent Lesgenerator",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Send an email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Azure OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent Mailer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Correct errors": {
      "main": [
        []
      ]
    },
    "Send a text message": {
      "main": [
        [],
        [
          {
            "node": "Correct errors",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent Mailer": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent Lesgenerator": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c6354b0f-5f5f-46a8-8acd-475fd33cd369",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "3d56967b35e96380c0ce5854b2f3aacc05a753713dd70c0e409e56629b5101b9"
  },
  "id": "To5cVorrxF6zl7MO",
  "tags": []
}