AutomationFlowsGeneral › Learn Javascript Coding with an Interactive Rpg-style Tutorial Game

Learn Javascript Coding with an Interactive Rpg-style Tutorial Game

ByDavid Olusola @dae221 on n8n.io

This tutorial is designed as a self-paced learning experience where you explore working JavaScript code examples. Unlike traditional tutorials, you learn by examining real implementations and understanding how they work. Execute first - See the workflow in action Open each node…

Event trigger★★★★☆ complexity11 nodes
General Trigger: Event Nodes: 11 Complexity: ★★★★☆ Added:

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

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": "KzoygRKiA5FU2t6W",
  "name": "interactive code tutorial",
  "tags": [],
  "nodes": [
    {
      "id": "ff379455-2bfc-4b10-86d3-34e6061e8e75",
      "name": "\ud83c\udfaf Start Game",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        240,
        280
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "342c8cd6-27af-4562-ba21-44576e76aa0a",
      "name": "Game Header",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -40,
        -60
      ],
      "parameters": {
        "width": 400,
        "height": 580,
        "content": "#  Code Challenge Adventure\n\n**Author:** David Olusola\n\n## \ud83c\udfaf Game Rules\n1. Complete coding challenges to earn points\n2. Each level teaches different n8n concepts\n3. Collect power-ups and achievements\n4. Beat the final boss with your coding skills!\n\n## \ud83d\ude80 n8n Coaching\nLevel up your n8n skills with personalized coaching!\n\ud83d\udc49 [Book Session](mailto:david@daexai.com?subject=n8n%20Coaching%20Request)\n\n## \ud83d\udd27 n8n Consulting\nNeed custom automation solutions?\n\ud83d\udce9 [Get Consulting](mailto:david@daexai.com?subject=n8n%20Consultation%20Request)"
      },
      "typeVersion": 1
    },
    {
      "id": "a64d11d1-e7e1-4f08-a130-5bca37f68e09",
      "name": "Level 1 Info",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        260,
        500
      ],
      "parameters": {
        "width": 250,
        "height": 330,
        "content": "## \ud83c\udfb2 Level 1: Data Warrior\n\n**Challenge:** Deduplicate the corrupted user database!\n\n**Skills Learned:**\n- Array filtering\n- Data deduplication\n- JSON manipulation\n\n**Reward:** 100 XP + Data Shield \ud83d\udee1\ufe0f"
      },
      "typeVersion": 1
    },
    {
      "id": "995b3576-696f-435b-a9fd-3e811e25815d",
      "name": "Level 2 Info",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        560,
        500
      ],
      "parameters": {
        "width": 250,
        "height": 290,
        "content": "## \u2694\ufe0f Level 2: API Ninja\n\n**Challenge:** Transform and validate API responses!\n\n**Skills Learned:**\n- Data transformation\n- Validation logic\n- Error handling\n\n**Reward:** 200 XP + Speed Boost \u26a1"
      },
      "typeVersion": 1
    },
    {
      "id": "f862073b-d3e5-460e-8d4f-6c6f040d2c83",
      "name": "Boss Info",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        860,
        380
      ],
      "parameters": {
        "width": 250,
        "height": 330,
        "content": "## \ud83c\udfc6 Final Boss: Automation Master\n\n**Challenge:** Build a complete workflow system!\n\n**Skills Learned:**\n- Complex logic\n- Error handling\n- Performance optimization\n\n**Reward:** 500 XP + Master Badge \ud83c\udfc5"
      },
      "typeVersion": 1
    },
    {
      "id": "00297d14-9d74-4a5e-a48c-3c2795aeda6a",
      "name": "\ud83c\udfb2 Level 1: Data Warrior",
      "type": "n8n-nodes-base.code",
      "position": [
        620,
        280
      ],
      "parameters": {
        "jsCode": "// \ud83c\udfb2 Level 1: Data Warrior Challenge\n// Challenge: Deduplicate corrupted user database\n\nconst gameData = items[0].json;\nconst player = gameData.player;\n\n// Corrupted database with duplicates (the challenge data)\nconst corruptedUsers = [\n  { id: 1, name: \"Knight Arthur\", email: \"user@example.com\", class: \"Warrior\" },\n  { id: 2, name: \"Wizard Merlin\", email: \"user@example.com\", class: \"Mage\" },\n  { id: 3, name: \"Knight Arthur\", email: \"user@example.com\", class: \"Warrior\" }, // Duplicate\n  { id: 4, name: \"Archer Robin\", email: \"user@example.com\", class: \"Ranger\" },\n  { id: 5, name: \"Rogue Shadow\", email: \"user@example.com\", class: \"Assassin\" },\n  { id: 6, name: \"Wizard Merlin\", email: \"user@example.com\", class: \"Mage\" }, // Duplicate\n  { id: 7, name: \"Paladin Grace\", email: \"user@example.com\", class: \"Healer\" },\n  { id: 8, name: \"Archer Robin\", email: \"user@example.com\", class: \"Ranger\" } // Duplicate\n];\n\n// THE CHALLENGE: Deduplicate based on email (player must implement this logic)\n// This is the solution - in a real game, the player would need to write this\nconst cleanedUsers = corruptedUsers.filter(\n  (user, index, self) => \n    index === self.findIndex(u => u.email === user.email)\n);\n\n// Calculate challenge results\nconst originalCount = corruptedUsers.length;\nconst cleanedCount = cleanedUsers.length;\nconst duplicatesRemoved = originalCount - cleanedCount;\n\n// Determine success and rewards\nconst isSuccess = duplicatesRemoved > 0;\nconst xpGained = isSuccess ? 100 : 0;\nconst powerUp = isSuccess ? \"Data Shield \ud83d\udee1\ufe0f\" : null;\n\n// Update player stats\nif (isSuccess) {\n  player.xp += xpGained;\n  player.level = Math.floor(player.xp / 100) + 1;\n  if (powerUp) player.inventory.push(powerUp);\n  player.achievements.push(\"Data Warrior\");\n}\n\nconst challengeResult = {\n  level: 1,\n  challengeName: \"Data Warrior Challenge\",\n  success: isSuccess,\n  stats: {\n    originalRecords: originalCount,\n    cleanedRecords: cleanedCount,\n    duplicatesRemoved: duplicatesRemoved\n  },\n  rewards: {\n    xp: xpGained,\n    powerUp: powerUp\n  },\n  message: isSuccess ? \n    `\ud83c\udf89 SUCCESS! You've cleaned the corrupted database and earned ${xpGained} XP!` :\n    \"\ud83d\udc80 FAILED! The database is still corrupted. Try again!\"\n};\n\nreturn [{\n  json: {\n    ...challengeResult,\n    player,\n    cleanedData: cleanedUsers,\n    nextLevel: isSuccess ? 2 : 1\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "98162e1a-8f3e-418d-b1d5-e1b03f518e1d",
      "name": "\u2694\ufe0f Level 2: API Ninja",
      "type": "n8n-nodes-base.code",
      "position": [
        900,
        280
      ],
      "parameters": {
        "jsCode": "// \u2694\ufe0f Level 2: API Ninja Challenge\n// Challenge: Transform and validate API responses\n\nconst gameData = items[0].json;\nconst player = gameData.player;\n\n// Mock API response with messy data (the challenge)\nconst apiResponse = {\n  users: [\n    { id: \"1\", full_name: \"  John Doe  \", email_address: \"user@example.com\", age: \"25\", status: \"active\" },\n    { id: \"2\", full_name: \"jane smith\", email_address: \"user@example.com\", age: \"invalid\", status: \"INACTIVE\" },\n    { id: \"3\", full_name: \"Bob Johnson\", email_address: \"user@example.com\", age: \"30\", status: \"active\" },\n    { id: \"4\", full_name: \"\", email_address: \"user@example.com\", age: \"22\", status: \"pending\" },\n    { id: \"5\", full_name: \"Alice Brown\", email_address: \"user@example.com\", age: \"28\", status: \"active\" }\n  ]\n};\n\n// THE CHALLENGE: Transform and validate the data\n// This is the solution - in a real game, player would implement this\nconst transformedUsers = apiResponse.users.map(user => {\n  const transformed = {\n    id: parseInt(user.id),\n    name: user.full_name.trim(),\n    email: user.email_address.toLowerCase(),\n    age: parseInt(user.age) || 0,\n    status: user.status.toLowerCase(),\n    isValid: true\n  };\n  \n  // Validation rules\n  if (!transformed.name || transformed.name.length < 2) {\n    transformed.isValid = false;\n    transformed.errors = (transformed.errors || []).concat(['Invalid name']);\n  }\n  \n  if (!transformed.email.includes('@')) {\n    transformed.isValid = false;\n    transformed.errors = (transformed.errors || []).concat(['Invalid email']);\n  }\n  \n  if (transformed.age < 18 || transformed.age > 120) {\n    transformed.isValid = false;\n    transformed.errors = (transformed.errors || []).concat(['Invalid age']);\n  }\n  \n  return transformed;\n});\n\n// Calculate challenge results\nconst validUsers = transformedUsers.filter(user => user.isValid);\nconst invalidUsers = transformedUsers.filter(user => !user.isValid);\n\nconst isSuccess = validUsers.length >= 3; // Need at least 3 valid users to pass\nconst xpGained = isSuccess ? 200 : 0;\nconst powerUp = isSuccess ? \"Speed Boost \u26a1\" : null;\n\n// Update player stats\nif (isSuccess) {\n  player.xp += xpGained;\n  player.level = Math.floor(player.xp / 100) + 1;\n  if (powerUp) player.inventory.push(powerUp);\n  player.achievements.push(\"API Ninja\");\n}\n\nconst challengeResult = {\n  level: 2,\n  challengeName: \"API Ninja Challenge\",\n  success: isSuccess,\n  stats: {\n    totalUsers: transformedUsers.length,\n    validUsers: validUsers.length,\n    invalidUsers: invalidUsers.length,\n    transformationAccuracy: Math.round((validUsers.length / transformedUsers.length) * 100)\n  },\n  rewards: {\n    xp: xpGained,\n    powerUp: powerUp\n  },\n  message: isSuccess ? \n    `\u26a1 SUCCESS! You've mastered data transformation and earned ${xpGained} XP!` :\n    \"\ud83e\udd77 FAILED! Your ninja skills need more practice. Try again!\"\n};\n\nreturn [{\n  json: {\n    ...challengeResult,\n    player,\n    validUsers,\n    invalidUsers,\n    nextLevel: isSuccess ? 3 : 2\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "3042b31c-2dec-45d3-8bdb-7487d8f22eaf",
      "name": "\ud83c\udfc6 Final Boss: Automation Master",
      "type": "n8n-nodes-base.code",
      "position": [
        1200,
        280
      ],
      "parameters": {
        "jsCode": "// \ud83c\udfc6 Final Boss: Automation Master Challenge\n// Challenge: Build a complete workflow system\n\nconst gameData = items[0].json;\nconst player = gameData.player;\n\n// Complex workflow challenge data\nconst workflowChallenge = {\n  tasks: [\n    { id: 1, name: \"Data Ingestion\", status: \"pending\", priority: \"high\", assignee: \"system\" },\n    { id: 2, name: \"Data Validation\", status: \"pending\", priority: \"high\", assignee: \"validator\" },\n    { id: 3, name: \"Data Transformation\", status: \"pending\", priority: \"medium\", assignee: \"transformer\" },\n    { id: 4, name: \"Error Handling\", status: \"pending\", priority: \"high\", assignee: \"error_handler\" },\n    { id: 5, name: \"Data Output\", status: \"pending\", priority: \"low\", assignee: \"output\" },\n    { id: 6, name: \"Notification\", status: \"pending\", priority: \"medium\", assignee: \"notifier\" }\n  ],\n  workflow: {\n    name: \"Master Automation Pipeline\",\n    steps: 6,\n    complexity: \"Expert\",\n    timeLimit: \"5 minutes\"\n  }\n};\n\n// THE FINAL CHALLENGE: Process tasks in correct order with error handling\n// This is the solution - the ultimate test of n8n skills\nconst processWorkflow = (tasks) => {\n  const results = [];\n  const errors = [];\n  \n  try {\n    // Step 1: Sort by priority (high -> medium -> low)\n    const priorityOrder = { 'high': 3, 'medium': 2, 'low': 1 };\n    const sortedTasks = tasks.sort((a, b) => priorityOrder[b.priority] - priorityOrder[a.priority]);\n    \n    // Step 2: Process each task with error handling\n    sortedTasks.forEach(task => {\n      try {\n        // Simulate processing\n        const processed = {\n          ...task,\n          status: 'completed',\n          completedAt: new Date().toISOString(),\n          processingTime: Math.random() * 1000 + 500 // Random processing time\n        };\n        \n        // Add some business logic\n        if (task.name.includes('Error')) {\n          processed.errorHandlingActive = true;\n        }\n        \n        if (task.priority === 'high') {\n          processed.fastTrack = true;\n        }\n        \n        results.push(processed);\n      } catch (error) {\n        errors.push({\n          taskId: task.id,\n          error: error.message,\n          timestamp: new Date().toISOString()\n        });\n      }\n    });\n    \n    // Step 3: Generate workflow summary\n    const summary = {\n      totalTasks: tasks.length,\n      completedTasks: results.length,\n      failedTasks: errors.length,\n      highPriorityTasks: results.filter(t => t.priority === 'high').length,\n      averageProcessingTime: Math.round(results.reduce((sum, t) => sum + t.processingTime, 0) / results.length),\n      workflowEfficiency: Math.round((results.length / tasks.length) * 100)\n    };\n    \n    return { results, errors, summary };\n  } catch (error) {\n    return { results: [], errors: [{ general: error.message }], summary: null };\n  }\n};\n\n// Execute the workflow\nconst workflowResult = processWorkflow(workflowChallenge.tasks);\n\n// Determine success (need 100% completion and efficiency > 80%)\nconst isSuccess = workflowResult.summary && \n                  workflowResult.summary.completedTasks === workflowChallenge.tasks.length &&\n                  workflowResult.summary.workflowEfficiency >= 80;\n\nconst xpGained = isSuccess ? 500 : 0;\nconst powerUp = isSuccess ? \"Master Badge \ud83c\udfc5\" : null;\nconst finalTitle = isSuccess ? \"\ud83c\udfc6 AUTOMATION MASTER\" : \"\ud83c\udfaf Aspiring Automator\";\n\n// Update player stats for final time\nif (isSuccess) {\n  player.xp += xpGained;\n  player.level = Math.floor(player.xp / 100) + 1;\n  if (powerUp) player.inventory.push(powerUp);\n  player.achievements.push(\"Automation Master\");\n  player.title = finalTitle;\n}\n\n// Calculate final game score\nconst finalScore = player.xp + (player.achievements.length * 50);\n\nconst bossResult = {\n  level: 3,\n  challengeName: \"Automation Master Boss Battle\",\n  success: isSuccess,\n  workflowResult,\n  rewards: {\n    xp: xpGained,\n    powerUp: powerUp,\n    title: finalTitle\n  },\n  finalStats: {\n    totalXP: player.xp,\n    finalLevel: player.level,\n    achievements: player.achievements.length,\n    finalScore: finalScore,\n    inventory: player.inventory\n  },\n  message: isSuccess ? \n    `\ud83c\udf89 VICTORY! You've become the ultimate Automation Master with ${finalScore} points!` :\n    \"\u2694\ufe0f The boss was too powerful! Train more and try again!\"\n};\n\nreturn [{\n  json: {\n    ...bossResult,\n    player,\n    gameComplete: isSuccess,\n    playAgain: \"Click 'Start Game' to play again!\"\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "858b4392-6eb0-4e2d-a5a5-bcdc31f38fa8",
      "name": "\ud83c\udf8a Game Over Screen",
      "type": "n8n-nodes-base.code",
      "position": [
        1500,
        280
      ],
      "parameters": {
        "jsCode": "// \ud83c\udf8a Game Over Screen\n// Display final results and achievements\n\nconst gameData = items[0].json;\nconst player = gameData.player;\n\n// Create achievement showcase\nconst achievementShowcase = {\n  playerName: player.name,\n  finalTitle: player.title || \"n8n Apprentice\",\n  totalXP: player.xp,\n  finalLevel: player.level,\n  achievements: player.achievements,\n  inventory: player.inventory,\n  gameComplete: gameData.gameComplete\n};\n\n// Generate performance report\nconst performanceReport = {\n  levelsCompleted: player.achievements.length,\n  totalChallenges: 3,\n  completionRate: Math.round((player.achievements.length / 3) * 100),\n  skillsLearned: [\n    \"Data Deduplication\",\n    \"API Response Transformation\",\n    \"Workflow Automation\",\n    \"Error Handling\",\n    \"JavaScript Array Methods\",\n    \"n8n Code Node Mastery\"\n  ],\n  nextSteps: [\n    \"Explore advanced n8n nodes\",\n    \"Build real-world automations\",\n    \"Learn webhook integrations\",\n    \"Master database operations\",\n    \"Implement error handling patterns\"\n  ]\n};\n\n// Create motivational message based on performance\nlet motivationalMessage = \"\";\nif (gameData.gameComplete) {\n  motivationalMessage = `\ud83c\udf1f Congratulations! You've mastered the art of automation and proven yourself worthy of the title '${player.title}'. Your journey in n8n has just begun!`;\n} else {\n  motivationalMessage = `\ud83c\udfaf Great effort! You've learned valuable skills and earned ${player.xp} XP. Keep practicing to become the ultimate Automation Master!`;\n}\n\n// Special rewards based on performance\nconst specialRewards = [];\nif (player.xp >= 800) specialRewards.push(\"\ud83c\udfc6 Perfect Score Bonus\");\nif (player.achievements.includes(\"Data Warrior\")) specialRewards.push(\"\ud83d\udee1\ufe0f Data Protection Expert\");\nif (player.achievements.includes(\"API Ninja\")) specialRewards.push(\"\u26a1 Speed Optimization Master\");\nif (player.achievements.includes(\"Automation Master\")) specialRewards.push(\"\ud83c\udf96\ufe0f Workflow Architect\");\n\n// Create final game summary\nconst gameSummary = {\n  title: \"\ud83c\udfae Code Challenge Adventure - Game Over!\",\n  subtitle: `Final Score: ${gameData.finalStats ? gameData.finalStats.finalScore : player.xp} Points`,\n  achievementShowcase,\n  performanceReport,\n  specialRewards,\n  motivationalMessage,\n  coachingOffer: {\n    message: \"Want to level up your n8n skills in real life?\",\n    coaching: \"\ud83d\udc49 Book a coaching session: user@example.com\",\n    consulting: \"\ud83d\udce9 Get custom automation help: user@example.com\"\n  },\n  playAgain: \"\ud83d\udd04 Ready for another adventure? Click 'Start Game' to play again!\"\n};\n\nreturn [{\n  json: gameSummary\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "4d626c17-abaf-40e1-bebb-37e9f0861515",
      "name": "Game Features",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        -220
      ],
      "parameters": {
        "width": 460,
        "height": 540,
        "content": "## Game Features\n\n**\ud83c\udfaf 3 Challenging Levels**\n- Progressive difficulty\n- Real n8n scenarios\n- Practical coding challenges\n\n**\ud83c\udfc6 Reward System**\n- XP and level progression\n- Power-ups and achievements\n- Performance tracking\n\n**\ud83d\udcda Learning Outcomes**\n- Data deduplication\n- API transformation\n- Error handling\n- Workflow design\n\n**\ud83c\udfaa Fun Elements**\n- RPG-style progression\n- Story-driven challenges\n- Achievement badges\n- Leaderboard scoring"
      },
      "typeVersion": 1
    },
    {
      "id": "7cba2d2f-3838-4a9f-abd0-7e4cd0686f32",
      "name": "Initialize Game",
      "type": "n8n-nodes-base.code",
      "position": [
        460,
        280
      ],
      "parameters": {
        "jsCode": "// \ud83c\udfae Game Initialization\n// Create player profile and game state\n\nconst player = {\n  name: \"n8n Apprentice\",\n  level: 1,\n  xp: 0,\n  health: 100,\n  inventory: [],\n  achievements: []\n};\n\nconst gameState = {\n  currentLevel: 1,\n  totalLevels: 3,\n  startTime: new Date().toISOString(),\n  challenges: [\n    {\n      id: 1,\n      name: \"Data Warrior Challenge\",\n      description: \"Deduplicate the corrupted database\",\n      difficulty: \"Beginner\",\n      xpReward: 100,\n      powerUp: \"Data Shield \ud83d\udee1\ufe0f\"\n    },\n    {\n      id: 2,\n      name: \"API Ninja Challenge\",\n      description: \"Transform and validate API responses\",\n      difficulty: \"Intermediate\",\n      xpReward: 200,\n      powerUp: \"Speed Boost \u26a1\"\n    },\n    {\n      id: 3,\n      name: \"Automation Master Boss\",\n      description: \"Build a complete workflow system\",\n      difficulty: \"Expert\",\n      xpReward: 500,\n      powerUp: \"Master Badge \ud83c\udfc5\"\n    }\n  ]\n};\n\n// Game introduction\nconst gameIntro = {\n  title: \"\ud83c\udfae Welcome to Code Challenge Adventure!\",\n  story: \"The n8n kingdom is under attack by chaotic data! As a brave code warrior, you must complete challenges to restore order and become the ultimate Automation Master!\",\n  objective: \"Complete all 3 levels to save the kingdom!\"\n};\n\nreturn [{\n  json: {\n    ...gameIntro,\n    player,\n    gameState,\n    message: \"Game initialized! Ready to start your adventure?\"\n  }\n}];"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "f08679b5-b4f7-4de2-ade4-aabf10ad6fe6",
  "connections": {
    "Initialize Game": {
      "main": [
        [
          {
            "node": "\ud83c\udfb2 Level 1: Data Warrior",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83c\udfaf Start Game": {
      "main": [
        [
          {
            "node": "Initialize Game",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u2694\ufe0f Level 2: API Ninja": {
      "main": [
        [
          {
            "node": "\ud83c\udfc6 Final Boss: Automation Master",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83c\udfb2 Level 1: Data Warrior": {
      "main": [
        [
          {
            "node": "\u2694\ufe0f Level 2: API Ninja",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\ud83c\udfc6 Final Boss: Automation Master": {
      "main": [
        [
          {
            "node": "\ud83c\udf8a Game Over Screen",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This tutorial is designed as a self-paced learning experience where you explore working JavaScript code examples. Unlike traditional tutorials, you learn by examining real implementations and understanding how they work. Execute first - See the workflow in action Open each node…

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

More General workflows → · Browse all categories →

Related workflows

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

General

Blotato. Uses googleSheets, @blotato/n8n-nodes-blotato. Event-driven trigger; 65 nodes.

Google Sheets, @Blotato/N8N Nodes Blotato
General

This template is a hands-on, practical exam designed to help you master n8n Expressions—the key to accessing and manipulating data in your workflows.

Stop And Error
General

This template is a hands-on, practical exam designed to test your understanding of the fundamental JSON data types. It's the perfect way to solidify your knowledge after learning the basics.

Stop And Error
General

Agendamiento. Uses n8n-nodes-evolution-api, redis, dataTable, executeWorkflowTrigger. Event-driven trigger; 60 nodes.

N8N Nodes Evolution Api, Redis, Data Table +2
General

Kv Cloudflare Key Value Database Full Api Integration Workflow. Uses stickyNote, httpRequest, manualTrigger. Event-driven trigger; 47 nodes.

HTTP Request