{
  "workflow": {
    "id": 9410,
    "name": "Generate AI-powered morning briefs from ClickUp to Slack and Gmail with GPT-4o",
    "views": 117,
    "recentViews": 0,
    "totalViews": 117,
    "createdAt": "2025-10-09T11:15:19.306Z",
    "description": "## Description\nAutomate your team's daily stand-ups with AI-powered morning briefs, directly pulled from ClickUp tasks and shared via Slack and Gmail every morning. ☀️📋💬\n\n## What This Template Does\n- Triggers automatically at 9:15 AM each morning via cron. ⏰\n- Fetches the latest sprint and all active or due-today tasks from ClickUp.\n- Categorizes tasks by status, priority, and assignee for clear visibility.\n- Uses Azure OpenAI GPT-4o to generate a detailed, structured morning summary.\n- Formats the AI summary into a clean HTML email and a Slack post.\n- Sends automated updates to Gmail and Slack channels.\n- Includes real-time error detection and Slack alerts for quick debugging.\n\n## Key Benefits\n✅ Eliminates manual stand-up prep by generating AI-driven daily reports.\n ✅ Keeps teams aligned with clear task summaries and blocker tracking.\n ✅ Automatically distributes updates across Slack and Gmail.\n ✅ Provides HTML-formatted emails and Slack markdown summaries.\n ✅ Reduces time spent on daily check-ins and sprint reviews.\n\n## Features\n- Fully automated daily scheduling using cron triggers.\n- Real-time task fetching and categorization from ClickUp.\n- GPT-4-powered summarization for executive-style briefs.\n- Responsive HTML email builder for beautiful reports.\n- Slack integration for quick, shareable updates.\n- Error handling with dedicated Slack notifications.\n\n## Requirements\n- ClickUp OAuth2 credentials for task access.\n- Azure OpenAI GPT-4o API credentials for summary generation.\n- Slack API credentials for channel posting.\n- Gmail OAuth2 credentials for sending email reports.\n\n## Target Audience\n- Project managers and team leads needing automated daily briefings 👩‍💼\n- Development teams using ClickUp for sprint and task tracking 💻\n- Agencies or operations teams coordinating across tools 🔄\n- Remote teams seeking quick alignment and productivity boosts 🌍\n\n## Step-by-Step Setup Instructions\n- Connect your ClickUp account via OAuth2 and update Team, Space, and Folder IDs. ⚙️\n- Add Azure OpenAI GPT-4o credentials for AI summary generation. 🤖\n- Configure Slack OAuth2 credentials and set the target channel ID. 💬\n- Connect Gmail OAuth2 and define recipient email addresses. 📧\n- Customize the schedule trigger time (default: 9:15 AM). 🕒\n- Test the workflow to verify proper data retrieval and message delivery. 🚀",
    "workflow": {
      "id": "GUsJXoE0d02fP7ii",
      "meta": {
        "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
        "templateCredsSetupCompleted": true
      },
      "name": "Automate Daily Morning Brief Generation from ClickUp to Slack and Gmail using GPT-4",
      "tags": [],
      "nodes": [
        {
          "id": "2bf648b3-58dc-4003-b682-9d35749f3c9f",
          "name": "Note: Workflow Overview",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -4032,
            -384
          ],
          "parameters": {
            "color": 4,
            "width": 454,
            "height": 794,
            "content": "## 🌅 Automate Daily Morning Brief Generation from ClickUp to Slack and Gmail using GPT-4\nThis workflow automatically generates a comprehensive morning brief from your ClickUp tasks and sends it to Slack and Email every morning.\n\n### **What it does:**\n- Fetches the latest active sprint from ClickUp\n- Retrieves all tasks due today and in-progress items\n- Uses AI to generate an executive summary\n- Sends formatted briefs to Slack and Gmail\n- Handles errors with notifications\n\n### **Use Case:**\nPerfect for teams using ClickUp for sprint management who want automated daily stand-up reports with:\n- Today's priorities and due tasks\n- In-progress work status\n- Team member assignments\n- Blockers and issues\n\n### **Setup Requirements:**\n1. ClickUp OAuth2 credentials\n2. Slack API credentials\n3. Gmail OAuth2 credentials  \n4. Azure OpenAI API credentials\n5. Update Team ID, Space ID, and Folder ID in ClickUp nodes\n6. Configure Slack channel IDs\n7. Set recipient email address\n\n### **Schedule:**\nRuns daily at 9:15 AM (customizable in Schedule Trigger node)\n\n"
          },
          "typeVersion": 1
        },
        {
          "id": "92a7dff2-bade-4ad8-884c-c6d6d78276c8",
          "name": "Note: Schedule Trigger",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -3488,
            -512
          ],
          "parameters": {
            "width": 276,
            "height": 362,
            "content": "## ⏰ Schedule Trigger\n\n**Purpose:** Triggers the workflow every morning at 9:15 AM\n\n**Configuration:**\n- Uses cron expression: `15 9 * * *`\n- Runs Monday through Sunday\n- Timezone: Server default\n\n**To Customize:**\n- Change hour/minute in cron expression\n- Add day-of-week restrictions if needed"
          },
          "typeVersion": 1
        },
        {
          "id": "351c23ff-37f5-4305-888b-9d41cd6af400",
          "name": "Trigger: Morning Schedule",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -3344,
            -80
          ],
          "parameters": {
            "rule": {
              "interval": [
                {
                  "field": "cronExpression",
                  "expression": "15 9 * * *"
                }
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "788b9c85-c74a-4533-8552-7f1b6523516b",
          "name": "Note: Fetch Sprints",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -3168,
            -576
          ],
          "parameters": {
            "width": 285,
            "height": 451,
            "content": "## 📋 Fetch Sprint Lists\n\n**Purpose:** Retrieves all sprint lists from ClickUp\n\n**Configuration Required:**\n- **Team ID:** Replace `9016683627` with your team ID\n- **Space ID:** Replace `90162844741` with your space ID  \n- **Folder ID:** Replace `90164394824` with your folder ID\n\n**How to find IDs:**\n1. Open ClickUp in browser\n2. Navigate to your space/folder\n3. Copy IDs from URL\n\n**Output:** List of all sprints with metadata"
          },
          "typeVersion": 1
        },
        {
          "id": "22bc18f9-01ab-4674-ba53-c72f7c71685c",
          "name": "Get All Lists (Sprints)",
          "type": "n8n-nodes-base.clickUp",
          "position": [
            -3120,
            -80
          ],
          "parameters": {
            "team": "YOUR_TEAM_ID",
            "limit": 100,
            "space": "YOUR_SPACE_ID",
            "folder": "YOUR_FOLDER_ID",
            "filters": {},
            "resource": "list",
            "operation": "getAll",
            "authentication": "oAuth2"
          },
          "credentials": {
            "clickUpOAuth2Api": {
              "id": "credential-id",
              "name": "clickUpOAuth2Api Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "cfc16d55-b75a-4801-8620-cc5aab3acf46",
          "name": "Note: Validate Data",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2816,
            -512
          ],
          "parameters": {
            "width": 249,
            "height": 367,
            "content": "## ✅ Validation Check\n\n**Purpose:** Ensures sprint lists were retrieved successfully\n\n**Logic:**\n- Checks if response is not empty\n- Only proceeds if lists exist\n\n**Error Handling:**\n- If no lists found, workflow stops\n- Prevents downstream errors"
          },
          "typeVersion": 1
        },
        {
          "id": "ff0eb47a-246d-4aed-8760-a09020487bbb",
          "name": "Check Lists Exist",
          "type": "n8n-nodes-base.if",
          "position": [
            -2896,
            -80
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 1,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "condition1",
                  "operator": {
                    "type": "boolean",
                    "operation": "notEmpty",
                    "singleValue": true
                  },
                  "leftValue": "={{ $json.isNotEmpty() }}",
                  "rightValue": 0
                }
              ]
            }
          },
          "typeVersion": 2
        },
        {
          "id": "4c9545e5-eda5-444e-bceb-6d61d7f06648",
          "name": "Note: Sprint Logic",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2736,
            96
          ],
          "parameters": {
            "width": 263,
            "height": 388,
            "content": "## 🔍 Find Active Sprint\n\n**Purpose:** Identifies the current active sprint or most recent one\n\n**Logic:**\n1. Checks for sprints where current time falls between start and due dates\n2. If active sprint exists, selects it\n3. If no active sprint, selects most recent by start date\n\n**Output:**\n- Sprint ID, name, dates\n- Active status flag\n- Total sprint count"
          },
          "typeVersion": 1
        },
        {
          "id": "997dcb26-240f-4ed0-86bb-9bcb302aaa47",
          "name": "Find Latest Sprint",
          "type": "n8n-nodes-base.code",
          "position": [
            -2672,
            -80
          ],
          "parameters": {
            "jsCode": "// Get currently active sprint or the latest one\nconst lists = $input.all();\nconst now = Date.now();\n\n// First, try to find active sprints (current time between start and due date)\nconst activeSprints = lists.filter(list => {\n  const startDate = parseInt(list.json.start_date);\n  const dueDate = parseInt(list.json.due_date);\n  return startDate <= now && now <= dueDate;\n});\n\nlet latestSprint;\n\nif (activeSprints.length > 0) {\n  // If we have active sprints, get the most recent one by start date\n  latestSprint = activeSprints.sort((a, b) => \n    parseInt(b.json.start_date) - parseInt(a.json.start_date)\n  )[0];\n} else {\n  // No active sprints, get the most recent by start date (could be future sprint)\n  latestSprint = lists.sort((a, b) => \n    parseInt(b.json.start_date) - parseInt(a.json.start_date)\n  )[0];\n}\n\nreturn {\n  json: {\n    latest_sprint_id: latestSprint.json.id,\n    latest_sprint_name: latestSprint.json.name,\n    latest_sprint_start_date: latestSprint.json.start_date,\n    latest_sprint_due_date: latestSprint.json.due_date,\n    is_currently_active: activeSprints.length > 0,\n    total_sprints_found: lists.length\n  }\n};"
          },
          "typeVersion": 2
        },
        {
          "id": "46cc6963-ea8a-4bb5-ac09-de10816754e9",
          "name": "Note: Task Retrieval",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2544,
            -560
          ],
          "parameters": {
            "width": 259,
            "height": 390,
            "content": "## 📥 Get Sprint Tasks\n\n**Purpose:** Fetches all tasks from the active sprint\n\n**Filters Applied:**\n- Tasks due today (midnight to 11:59 PM)\n- Includes subtasks and checklist items\n\n**Note:** Team/Space/Folder IDs are dynamically pulled from previous node\n\n**Output:** Complete task data with assignees, status, priorities, and subtasks"
          },
          "typeVersion": 1
        },
        {
          "id": "18dd7a8f-caad-4a73-b334-6d6140638834",
          "name": "Get Task From Latest Sprint",
          "type": "n8n-nodes-base.clickUp",
          "position": [
            -2448,
            -80
          ],
          "parameters": {
            "list": "={{ $json.latest_sprint_id }}",
            "team": "YOUR_TEAM_ID",
            "space": "YOUR_SPACE_ID",
            "folder": "={{ $json.latest_sprint_name }}",
            "filters": {
              "subtasks": true,
              "dueDateGt": "={{ new Date().setHours(0, 0, 0, 0) }}",
              "dueDateLt": "={{ new Date().setHours(23, 59, 59, 999) }}"
            },
            "operation": "getAll",
            "authentication": "oAuth2"
          },
          "credentials": {
            "clickUpOAuth2Api": {
              "id": "credential-id",
              "name": "clickUpOAuth2Api Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "2d279459-7101-408e-8a79-10030d627705",
          "name": "Note: Data Processing",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2304,
            96
          ],
          "parameters": {
            "width": 264,
            "height": 313,
            "content": "## 📊 Format Task Data\n\n**Purpose:** Transforms raw ClickUp data into structured format for AI processing\n\n**Processing:**\n- Extracts checklist items as subtasks\n- Categorizes tasks by status and priority\n- Groups in-progress, urgent, high, and normal priority tasks\n- Identifies blockers\n- Calculates status summaries\n\n**Output:** Structured JSON with task categorizations and metadata"
          },
          "typeVersion": 1
        },
        {
          "id": "d76873cc-ba60-4cbe-9163-05e7b90baf26",
          "name": "Format: Compose Brief Data",
          "type": "n8n-nodes-base.code",
          "position": [
            -2224,
            -80
          ],
          "parameters": {
            "jsCode": "// Get all inputs dynamically\nconst allInputs = $input.all();\n\n// Extract ClickUp data from all items\nconst clickupData = allInputs.map(item => item.json).filter(item => item && item.id);\n\nconst highPriority = [];\nconst normalPriority = [];\nconst blockers = [];\nconst urgentTasks = [];\nconst inProgress = [];\n\nclickupData.forEach(task => {\n  // Extract checklist items as subtasks\n  const subtasks = [];\n  if (task.checklists && task.checklists.length > 0) {\n    task.checklists.forEach(checklist => {\n      if (checklist.items && checklist.items.length > 0) {\n        checklist.items.forEach(item => {\n          subtasks.push({\n            name: item.name,\n            resolved: item.resolved,\n            assignee: item.assignee ? 'Assigned' : 'Unassigned'\n          });\n        });\n      }\n    });\n  }\n\n  const taskInfo = {\n    name: task.name || 'Untitled',\n    status: task.status?.status || 'Unknown',\n    statusType: task.status?.type || 'unknown',\n    priority: task.priority?.priority || 'normal',\n    url: task.url || '',\n    assignees: task.assignees?.map(a => a.username).join(', ') || 'Unassigned',\n    list: task.list?.name || '',\n    folder: task.folder?.name || task.project?.name || '',\n    dueDate: task.due_date ? new Date(parseInt(task.due_date)).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) : 'No due date',\n    timeSpent: task.time_spent ? `${Math.floor(task.time_spent / 60000)} min` : null,\n    description: task.description ? (task.description.length > 100 ? task.description.substring(0, 100) + '...' : task.description) : null,\n    subtasks: subtasks,\n    subtasksSummary: subtasks.length > 0 ? `${subtasks.filter(s => s.resolved).length}/${subtasks.length} completed` : null\n  };\n  \n  // Categorize by status first (in progress)\n  if (task.status?.status?.toLowerCase().includes('progress')) {\n    inProgress.push(taskInfo);\n  }\n  // Check for blockers\n  else if (task.status?.status?.toLowerCase().includes('block')) {\n    blockers.push(taskInfo);\n  } \n  // Then by priority\n  else if (task.priority?.priority === 'urgent') {\n    urgentTasks.push(taskInfo);\n  } \n  else if (task.priority?.priority === 'high') {\n    highPriority.push(taskInfo);\n  } \n  else {\n    normalPriority.push(taskInfo);\n  }\n});\n\n// Dynamically get board URL from first task\nconst firstTask = clickupData[0];\nconst boardUrl = firstTask?.list?.id \n  ? `https://app.clickup.com/${firstTask.team_id}/v/li/${firstTask.list.id}`\n  : firstTask?.space?.id \n  ? `https://app.clickup.com/${firstTask.team_id}/v/s/${firstTask.space.id}`\n  : 'https://app.clickup.com';\n\n// Count status types\nconst statusSummary = {\n  backlogs: clickupData.filter(t => t.status?.status === 'backlogs').length,\n  inProgress: clickupData.filter(t => t.status?.status?.toLowerCase().includes('progress')).length,\n  completed: clickupData.filter(t => t.status?.type === 'closed').length\n};\n\nconst summary = {\n  date: new Date().toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }),\n  inProgressTasks: inProgress,\n  urgentTasks: urgentTasks,\n  highPriorityTasks: highPriority,\n  normalPriorityTasks: normalPriority,\n  blockers: blockers,\n  clickupBoardUrl: boardUrl,\n  totalTasks: clickupData.length,\n  listName: firstTask?.list?.name || 'Tasks',\n  folderName: firstTask?.folder?.name || firstTask?.project?.name || 'Board',\n  statusSummary: statusSummary,\n  teamId: firstTask?.team_id || null\n};\n\nreturn { json: summary };"
          },
          "typeVersion": 2
        },
        {
          "id": "d1a1920b-f54d-4172-9b8c-b17054b3a39d",
          "name": "Note: AI Processing",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -2080,
            -480
          ],
          "parameters": {
            "width": 385,
            "height": 396,
            "content": "## 🤖 AI Brief Generation\n\n**Purpose:** Uses Azure OpenAI to generate executive summary\n\n**Components:**\n- **LLM:** GPT-4o model\n- **Memory:** Buffer window for context\n- **Parser:** Structured JSON output\n\n**Input:** Formatted task data\n**Output:** Executive summary with priorities, team focus, and blockers\n\n**Setup Required:**\n- Configure Azure OpenAI credentials\n- Model should be GPT-4o or equivalent"
          },
          "typeVersion": 1
        },
        {
          "id": "e5fae6c6-9533-46b3-be91-0441dc52ad08",
          "name": "OpenAI: Generate Brief",
          "type": "@n8n/n8n-nodes-langchain.agent",
          "position": [
            -1936,
            -80
          ],
          "parameters": {
            "text": "=Create a comprehensive Morning Brief for {{ $json.date }}.\n\n## CURRENT DATE\n{{ $json.date }}\n\n## SPRINT OVERVIEW\n- **List:** {{ $json.listName }}\n- **Total Tasks:** {{ $json.totalTasks }}\n- **Status Breakdown:** {{ $json.statusSummary.backlogs }} Backlogs | {{ $json.statusSummary.inProgress }} In Progress | {{ $json.statusSummary.completed }} Completed\n\n## IN PROGRESS TASKS ({{ $json.inProgressTasks.length }})\n{{ $json.inProgressTasks.map(t => `- **${t.name}** (${t.assignees}) - Due: ${t.dueDate}${t.timeSpent ? ' | Time Spent: ' + t.timeSpent : ''}${t.subtasksSummary ? ' | Subtasks: ' + t.subtasksSummary : ''}`).join('\\n') || 'None' }}\n\n## HIGH PRIORITY TASKS\n{{ $json.highPriorityTasks.map(t => `- **${t.name}** (${t.assignees}) - Due: ${t.dueDate} - ${t.priority.toUpperCase()}`).join('\\n') || 'None' }}\n\n## NORMAL PRIORITY TASKS\n{{ $json.normalPriorityTasks.map(t => `- **${t.name}** (${t.assignees}) - Due: ${t.dueDate}${t.subtasksSummary ? ' | ' + t.subtasksSummary : ''}`).join('\\n') || 'None' }}\n\n## BLOCKERS ({{ $json.blockers.length }})\n{{ $json.blockers.map(t => `- **${t.name}** (${t.assignees}) - Status: ${t.status}`).join('\\n') || 'None - All Clear!' }}\n\n## ALL TEAM MEMBERS\n{{ [...new Set([...$json.inProgressTasks, ...$json.highPriorityTasks, ...$json.normalPriorityTasks].map(t => t.assignees).join(', ').split(', '))].join(', ') }}\n\n---\n\n**Instructions:**\nToday's date is: {{ $json.date }}\n\nAnalyze the tasks above and identify which ones are due TODAY based on the dueDate field.\n\nReturn ONLY valid JSON with this exact structure:\n{\n  \"title\": \"Morning Brief - {{ $json.date }}\",\n  \"executiveSummary\": \"2-3 sentence overview highlighting key priorities and team focus for TODAY\",\n  \"inProgressHighlights\": \"Brief summary of active in-progress tasks and their status\",\n  \"todaysPriorities\": \"List ALL tasks due TODAY. Format as bullet points with task name and assignee. If no tasks due today, state 'No tasks due today - focus on in-progress items'\",\n  \"teamFocus\": \"For each team member, list what they are working on TODAY. Focus on tasks due today or in-progress tasks. Group by person name.\",\n  \"blockers\": \"{{ $json.blockers.length > 0 ? 'List blockers' : 'All Clear' }}\",\n  \"clickupBoardUrl\": \"{{ $json.clickupBoardUrl }}\",\n  \"metrics\": {\n    \"totalTasks\": {{ $json.totalTasks }},\n    \"dueToday\": \"COUNT how many tasks are due today\",\n    \"inProgress\": {{ $json.statusSummary.inProgress }},\n    \"backlogs\": {{ $json.statusSummary.backlogs }}\n  }\n}\n\nCRITICAL: \n- Look at the dueDate field for each task\n- In \"todaysPriorities\", list ONLY tasks due today\n- In \"teamFocus\", mention what each person is working on\n- Be specific and actionable",
            "options": {
              "systemMessage": "=You are a professional executive assistant creating detailed morning briefs for a team.\nYour response must:\n- Be structured, actionable, and team-focused\n- Highlight in-progress tasks and blockers prominently\n- Group tasks by assignee/team member\n- Show clear priorities with due dates\n- Include subtask progress where available\n- Be concise but comprehensive\n- Focus on TODAY's tasks and priorities\n- Use the exact date provided in the input data\n\nAlways output valid JSON matching the exact schema provided.\nNever add markdown fences, code blocks, or explanatory text."
            },
            "promptType": "define",
            "hasOutputParser": true
          },
          "typeVersion": 2.1
        },
        {
          "id": "357b93df-c039-4fde-90f3-6fec91193d32",
          "name": "Structured Output Parser",
          "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
          "position": [
            -1744,
            160
          ],
          "parameters": {
            "jsonSchemaExample": "{\n  \"title\": \"\",\n  \"executiveSummary\": \"\",\n  \"inProgressHighlights\": \"\",\n  \"todaysPriorities\": \"\",\n  \"teamFocus\": \"\",\n  \"blockers\": \"\",\n  \"clickupBoardUrl\": \"\"\n}"
          },
          "typeVersion": 1.3
        },
        {
          "id": "d1af24e4-dd4f-4e6b-bca7-340f1280624c",
          "name": "Azure OpenAI Chat Model",
          "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
          "position": [
            -2000,
            160
          ],
          "parameters": {
            "model": "gpt-4o",
            "options": {}
          },
          "credentials": {
            "azureOpenAiApi": {
              "id": "credential-id",
              "name": "azureOpenAiApi Credential"
            }
          },
          "typeVersion": 1
        },
        {
          "id": "f336c158-207b-4ec0-8bf9-917a1ad7aabc",
          "name": "Simple Memory",
          "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
          "position": [
            -1872,
            160
          ],
          "parameters": {
            "sessionKey": "\"lead_intent_classifier\"",
            "sessionIdType": "customKey",
            "contextWindowLength": 7
          },
          "typeVersion": 1.3
        },
        {
          "id": "1d5d6d60-31ef-4cb8-bee0-c781bf54a0ca",
          "name": "Note: Email Builder",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1584,
            192
          ],
          "parameters": {
            "width": 256,
            "height": 349,
            "content": "## 📧 Email Formatting\n\n**Purpose:** Converts AI output to beautiful HTML email\n\n**Features:**\n- Professional gradient header\n- Responsive table design\n- Priority task numbering\n- Team member cards\n- Blocker status indicators\n- Mobile-friendly layout\n\n**Output:** HTML and plain text versions"
          },
          "typeVersion": 1
        },
        {
          "id": "0a16b85f-c088-48f4-a4a5-4f236a0a875b",
          "name": "Note: Slack Integration",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1488,
            -480
          ],
          "parameters": {
            "width": 246,
            "height": 299,
            "content": "## 💬 Slack Notification\n\n**Purpose:** Posts brief summary to Slack channel\n\n**Configuration Required:**\n- **Channel ID:** Replace `C09GNB90TED` with your channel ID\n- Get channel ID from Slack channel details\n\n**Features:**\n- Markdown formatting\n- Clickable ClickUp board link\n- Concise summary format\n\n**Setup:** Configure Slack OAuth2 credentials"
          },
          "typeVersion": 1
        },
        {
          "id": "e62daaeb-4688-42d1-92d1-663418816d80",
          "name": "Slack: Post Brief",
          "type": "n8n-nodes-base.slack",
          "position": [
            -1536,
            -176
          ],
          "webhookId": "f9ae2b0d-06b5-46e2-9e4f-6133473fc6e4",
          "parameters": {
            "text": "=**Morning Brief** - {{ $('Format: Compose Brief Data').item.json.date }}**\n\n**Summary** - {{ $json.output.executiveSummary }}\n\n**Today's Priority** - {{ $json.output.todaysPriorities }} \n\n**Team's Focus** - {{ $json.output.teamFocus }}\n\nlink: <{{ $('Format: Compose Brief Data').item.json.clickupBoardUrl }}|View ClickUp Today Board>",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_SLACK_CHANNEL_ID"
            },
            "otherOptions": {
              "mrkdwn": true
            }
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "03f81896-e5e6-42a5-9b1f-cd7102b0091c",
          "name": "Note: Email Delivery",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -1168,
            48
          ],
          "parameters": {
            "width": 256,
            "height": 421,
            "content": "## 📨 Gmail Delivery\n\n**Purpose:** Sends formatted HTML email via Gmail\n\n**Configuration Required:**\n- **Recipient Email:** Replace `herevivekpatidar@gmail.com` with recipient\n- Can send to multiple recipients (comma-separated)\n\n**Email Content:**\n- HTML version with styling\n- Plain text fallback\n- Dynamic subject line\n\n**Setup:** Configure Gmail OAuth2 credentials"
          },
          "typeVersion": 1
        },
        {
          "id": "518dbe59-a863-444c-b34f-fa15529ade86",
          "name": "Note: Error Management",
          "type": "n8n-nodes-base.stickyNote",
          "position": [
            -3472,
            416
          ],
          "parameters": {
            "width": 379,
            "height": 329,
            "content": "## 🚨 Error Handling System\n\n**Purpose:** Catches workflow failures and sends alerts\n\n**Error Trigger:**\n- Activates when any node fails\n- Captures error details and context\n\n**Slack Alert:**\n- Posts to dedicated error channel\n- Includes error message, failed node name, and timestamp\n- Allows quick debugging"
          },
          "typeVersion": 1
        },
        {
          "id": "6213ae5c-d856-4db2-9dd2-fece957df490",
          "name": "Error Trigger: Catch Failures",
          "type": "n8n-nodes-base.errorTrigger",
          "position": [
            -3344,
            256
          ],
          "parameters": {},
          "typeVersion": 1
        },
        {
          "id": "865225c0-7954-4202-b893-f798b465d889",
          "name": "Slack: Error Alert",
          "type": "n8n-nodes-base.slack",
          "position": [
            -3120,
            256
          ],
          "webhookId": "9625246c-14d5-41a7-a11f-3162e1ad650b",
          "parameters": {
            "text": "=🚨 **Morning Brief Workflow Failed**\n\n*Error:* {{ $json.error.message }}\n*Node:* {{ $json.error.node.name }}\n*Time:* {{ $json.error.timestamp }}\n\nPlease check the workflow and retry manually.",
            "select": "channel",
            "channelId": {
              "__rl": true,
              "mode": "list",
              "value": "YOUR_ERROR_CHANNEL_ID",
              "cachedResultName": "errors"
            },
            "otherOptions": {
              "mrkdwn": true
            }
          },
          "credentials": {
            "slackApi": {
              "id": "credential-id",
              "name": "slackApi Credential"
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "952212b7-d531-4d9e-ba24-49101e309aaa",
          "name": "Format Data For Email",
          "type": "n8n-nodes-base.code",
          "position": [
            -1536,
            32
          ],
          "parameters": {
            "jsCode": "// N8N Code Node - Enhanced Morning Brief HTML Email Formatter\nconst inputData = $input.all()[0].json.output;\n\n// Helper function to parse priorities into structured data\nfunction parsePriorities(text) {\n    const lines = text.split('\\n').filter(line => line.trim().startsWith('-'));\n    return lines.map(line => {\n        const cleanLine = line.replace(/^-\\s*/, '').trim();\n        const match = cleanLine.match(/^(.+?)\\s*\\(([^)]+)\\)$/);\n        if (match) {\n            return { task: match[1].trim(), assignee: match[2].trim() };\n        }\n        return { task: cleanLine, assignee: '' };\n    });\n}\n\n// Helper function to parse team focus by person\nfunction parseTeamFocus(text) {\n    const sections = text.split(/(?=[A-Z][a-z]+\\s+[A-Z][a-z]+:)/);\n    return sections.filter(s => s.trim()).map(section => {\n        const [name, ...tasks] = section.split(':');\n        return {\n            name: name.trim(),\n            tasks: tasks.join(':').trim()\n        };\n    });\n}\n\nconst priorities = parsePriorities(inputData.todaysPriorities);\nconst teamMembers = parseTeamFocus(inputData.teamFocus);\n\nconst html = `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>${inputData.title}</title>\n    <!--[if mso]>\n    <style type=\"text/css\">\n        body, table, td {font-family: Arial, sans-serif !important;}\n    </style>\n    <![endif]-->\n</head>\n<body style=\"margin: 0; padding: 0; background-color: #f4f4f4;\">\n    <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #f4f4f4;\">\n        <tr>\n            <td align=\"center\" style=\"padding: 20px 0;\">\n                \n                <!-- Main Container -->\n                <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"700\" style=\"background-color: #ffffff; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);\">\n                    \n                    <!-- Header Section -->\n                    <tr>\n                        <td style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 30px; border-radius: 8px 8px 0 0;\">\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">\n                                <tr>\n                                    <td>\n                                        <h1 style=\"margin: 0; color: #ffffff; font-size: 28px; font-weight: bold; font-family: Arial, sans-serif; text-shadow: 0 2px 4px rgba(0,0,0,0.2);\">\n                                            📋 ${inputData.title}\n                                        </h1>\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- Executive Summary Section -->\n                    <tr>\n                        <td style=\"padding: 30px 30px 20px 30px;\">\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"border-left: 4px solid #667eea; background-color: #f8f9ff; border-radius: 4px;\">\n                                <tr>\n                                    <td style=\"padding: 20px;\">\n                                        <h2 style=\"margin: 0 0 12px 0; color: #667eea; font-size: 16px; font-weight: bold; font-family: Arial, sans-serif; text-transform: uppercase; letter-spacing: 0.5px;\">\n                                            📊 EXECUTIVE SUMMARY\n                                        </h2>\n                                        <p style=\"margin: 0; color: #2d3748; font-size: 14px; line-height: 1.7; font-family: Arial, sans-serif;\">\n                                            ${inputData.executiveSummary}\n                                        </p>\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- Today's Priorities Section -->\n                    <tr>\n                        <td style=\"padding: 10px 30px 20px 30px;\">\n                            <h2 style=\"margin: 0 0 15px 0; color: #2d3748; font-size: 18px; font-weight: bold; font-family: Arial, sans-serif; border-bottom: 3px solid #f56565; padding-bottom: 10px;\">\n                                🎯 TODAY'S PRIORITIES (${priorities.length} Tasks)\n                            </h2>\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"border-collapse: collapse; border: 1px solid #e2e8f0; border-radius: 4px; overflow: hidden;\">\n                                <tr>\n                                    <td width=\"60\" align=\"center\" style=\"background-color: #f56565; color: #ffffff; font-weight: bold; padding: 12px 8px; font-family: Arial, sans-serif; font-size: 13px;\">\n                                        #\n                                    </td>\n                                    <td style=\"background-color: #f56565; color: #ffffff; font-weight: bold; padding: 12px 15px; font-family: Arial, sans-serif; font-size: 13px;\">\n                                        Task Description\n                                    </td>\n                                    <td width=\"150\" style=\"background-color: #f56565; color: #ffffff; font-weight: bold; padding: 12px 15px; font-family: Arial, sans-serif; font-size: 13px;\">\n                                        Assigned To\n                                    </td>\n                                </tr>\n                                ${priorities.map((priority, index) => `\n                                <tr>\n                                    <td align=\"center\" style=\"background-color: ${index % 2 === 0 ? '#ffffff' : '#f7fafc'}; padding: 14px 8px; font-family: Arial, sans-serif; font-size: 14px; border-top: 1px solid #e2e8f0; font-weight: bold; color: #f56565;\">\n                                        ${index + 1}\n                                    </td>\n                                    <td style=\"background-color: ${index % 2 === 0 ? '#ffffff' : '#f7fafc'}; padding: 14px 15px; font-family: Arial, sans-serif; font-size: 13px; line-height: 1.5; border-top: 1px solid #e2e8f0; color: #2d3748;\">\n                                        ${priority.task}\n                                    </td>\n                                    <td style=\"background-color: ${index % 2 === 0 ? '#ffffff' : '#f7fafc'}; padding: 14px 15px; font-family: Arial, sans-serif; font-size: 13px; border-top: 1px solid #e2e8f0; color: #4a5568; font-weight: 600;\">\n                                        ${priority.assignee}\n                                    </td>\n                                </tr>\n                                `).join('')}\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- In Progress Highlights Section -->\n                    <tr>\n                        <td style=\"padding: 10px 30px 20px 30px;\">\n                            <h2 style=\"margin: 0 0 15px 0; color: #2d3748; font-size: 18px; font-weight: bold; font-family: Arial, sans-serif; border-bottom: 3px solid #ed8936; padding-bottom: 10px;\">\n                                ⚡ IN PROGRESS HIGHLIGHTS\n                            </h2>\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"border-left: 4px solid #ed8936; background-color: #fffaf0; border-radius: 4px;\">\n                                <tr>\n                                    <td style=\"padding: 18px;\">\n                                        <p style=\"margin: 0; color: #2d3748; font-size: 14px; line-height: 1.7; font-family: Arial, sans-serif;\">\n                                            ${inputData.inProgressHighlights}\n                                        </p>\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- Team Focus Section -->\n                    <tr>\n                        <td style=\"padding: 10px 30px 20px 30px;\">\n                            <h2 style=\"margin: 0 0 15px 0; color: #2d3748; font-size: 18px; font-weight: bold; font-family: Arial, sans-serif; border-bottom: 3px solid #48bb78; padding-bottom: 10px;\">\n                                👥 TEAM FOCUS & ASSIGNMENTS\n                            </h2>\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"border-collapse: collapse;\">\n                                ${teamMembers.map((member, index) => `\n                                <tr>\n                                    <td style=\"padding: ${index > 0 ? '15' : '0'}px 0 0 0;\">\n                                        <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"border: 2px solid #48bb78; border-radius: 6px; overflow: hidden; background-color: #f0fff4;\">\n                                            <tr>\n                                                <td style=\"background-color: #48bb78; padding: 12px 18px;\">\n                                                    <p style=\"margin: 0; color: #ffffff; font-size: 14px; font-weight: bold; font-family: Arial, sans-serif;\">\n                                                        👤 ${member.name}\n                                                    </p>\n                                                </td>\n                                            </tr>\n                                            <tr>\n                                                <td style=\"padding: 15px 18px;\">\n                                                    <p style=\"margin: 0; color: #2d3748; font-size: 13px; line-height: 1.7; font-family: Arial, sans-serif;\">\n                                                        ${member.tasks}\n                                                    </p>\n                                                </td>\n                                            </tr>\n                                        </table>\n                                    </td>\n                                </tr>\n                                `).join('')}\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- Blockers Section -->\n                    <tr>\n                        <td style=\"padding: 10px 30px 20px 30px;\">\n                            <h2 style=\"margin: 0 0 15px 0; color: #2d3748; font-size: 18px; font-weight: bold; font-family: Arial, sans-serif; border-bottom: 3px solid ${inputData.blockers.toLowerCase().includes('all clear') ? '#48bb78' : '#f56565'}; padding-bottom: 10px;\">\n                                ${inputData.blockers.toLowerCase().includes('all clear') ? '✅' : '⚠️'} BLOCKERS & ISSUES\n                            </h2>\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"border-left: 4px solid ${inputData.blockers.toLowerCase().includes('all clear') ? '#48bb78' : '#f56565'}; background-color: ${inputData.blockers.toLowerCase().includes('all clear') ? '#f0fff4' : '#fff5f5'}; border-radius: 4px;\">\n                                <tr>\n                                    <td style=\"padding: 18px;\">\n                                        <p style=\"margin: 0; color: #2d3748; font-size: 15px; font-weight: ${inputData.blockers.toLowerCase().includes('all clear') ? 'bold' : 'normal'}; font-family: Arial, sans-serif; line-height: 1.6;\">\n                                            ${inputData.blockers}\n                                        </p>\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- Action Button -->\n                    <tr>\n                        <td align=\"center\" style=\"padding: 25px 30px 35px 30px;\">\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n                                <tr>\n                                    <td align=\"center\" style=\"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); padding: 16px 45px; border-radius: 6px; box-shadow: 0 4px 6px rgba(0,0,0,0.1);\">\n                                        <a href=\"${inputData.clickupBoardUrl}\" style=\"color: #ffffff; text-decoration: none; font-weight: bold; font-size: 14px; font-family: Arial, sans-serif; display: block; letter-spacing: 0.5px;\">\n                                            🔗 VIEW FULL BOARD ON CLICKUP\n                                        </a>\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                    \n                    <!-- Footer -->\n                    <tr>\n                        <td style=\"background-color: #f7fafc; padding: 25px 30px; border-top: 1px solid #e2e8f0; border-radius: 0 0 8px 8px;\">\n                            <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">\n                                <tr>\n                                    <td align=\"center\">\n                                        <p style=\"margin: 0; color: #718096; font-size: 12px; line-height: 1.6; font-family: Arial, sans-serif;\">\n                                            🤖 This brief was automatically generated by N8N Automation<br>\n                                            <strong style=\"color: #4a5568;\">Have a productive day! 🚀</strong>\n                                        </p>\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n                    \n                </table>\n                \n            </td>\n        </tr>\n    </table>\n</body>\n</html>\n`;\n\n// Enhanced plain text version\nconst plainText = `${inputData.title}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📊 EXECUTIVE SUMMARY\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n${inputData.executiveSummary}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n🎯 TODAY'S PRIORITIES (${priorities.length} Tasks)\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n${priorities.map((p, i) => `${i + 1}. ${p.task} → ${p.assignee}`).join('\\n')}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n⚡ IN PROGRESS HIGHLIGHTS\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n${inputData.inProgressHighlights}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n👥 TEAM FOCUS & ASSIGNMENTS\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n${teamMembers.map(m => `👤 ${m.name}\\n   ${m.tasks}`).join('\\n\\n')}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n${inputData.blockers.toLowerCase().includes('all clear') ? '✅' : '⚠️'} BLOCKERS & ISSUES\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n${inputData.blockers}\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nView Full Board: ${inputData.clickupBoardUrl}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`;\n\nreturn {\n  json: {\n    html: html,\n    subject: `📋 ${inputData.title}`,\n    plainText: plainText\n  }\n};"
          },
          "typeVersion": 2
        },
        {
          "id": "78494f7e-40da-4c02-aa89-62dc1a3783e4",
          "name": "Send Morning Brief Email",
          "type": "n8n-nodes-base.gmail",
          "position": [
            -1312,
            32
          ],
          "webhookId": "9e36fe20-bb0c-4c0a-8421-2f57096e79d7",
          "parameters": {
            "sendTo": "user@example.com",
            "message": "={{ $json.html }}",
            "options": {},
            "subject": "={{ $json.subject }}"
          },
          "credentials": {
            "gmailOAuth2": {
              "id": "credential-id",
              "name": "gmailOAuth2 Credential"
            }
          },
          "typeVersion": 2.1
        }
      ],
      "active": false,
      "pinData": {},
      "settings": {
        "executionOrder": "v1"
      },
      "versionId": "36a5ec42-fd1c-4215-9a66-eb98c6bc60c3",
      "connections": {
        "Simple Memory": {
          "ai_memory": [
            [
              {
                "node": "OpenAI: Generate Brief",
                "type": "ai_memory",
                "index": 0
              }
            ]
          ]
        },
        "Check Lists Exist": {
          "main": [
            [
              {
                "node": "Find Latest Sprint",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Find Latest Sprint": {
          "main": [
            [
              {
                "node": "Get Task From Latest Sprint",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Format Data For Email": {
          "main": [
            [
              {
                "node": "Send Morning Brief Email",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "OpenAI: Generate Brief": {
          "main": [
            [
              {
                "node": "Slack: Post Brief",
                "type": "main",
                "index": 0
              },
              {
                "node": "Format Data For Email",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Azure OpenAI Chat Model": {
          "ai_languageModel": [
            [
              {
                "node": "OpenAI: Generate Brief",
                "type": "ai_languageModel",
                "index": 0
              }
            ]
          ]
        },
        "Get All Lists (Sprints)": {
          "main": [
            [
              {
                "node": "Check Lists Exist",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Structured Output Parser": {
          "ai_outputParser": [
            [
              {
                "node": "OpenAI: Generate Brief",
                "type": "ai_outputParser",
                "index": 0
              }
            ]
          ]
        },
        "Trigger: Morning Schedule": {
          "main": [
            [
              {
                "node": "Get All Lists (Sprints)",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Format: Compose Brief Data": {
          "main": [
            [
              {
                "node": "OpenAI: Generate Brief",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Get Task From Latest Sprint": {
          "main": [
            [
              {
                "node": "Format: Compose Brief Data",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Error Trigger: Catch Failures": {
          "main": [
            [
              {
                "node": "Slack: Error Alert",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    },
    "lastUpdatedBy": 1,
    "workflowInfo": {
      "nodeCount": 27,
      "nodeTypes": {
        "n8n-nodes-base.if": {
          "count": 1
        },
        "n8n-nodes-base.code": {
          "count": 3
        },
        "n8n-nodes-base.gmail": {
          "count": 1
        },
        "n8n-nodes-base.slack": {
          "count": 2
        },
        "n8n-nodes-base.clickUp": {
          "count": 2
        },
        "n8n-nodes-base.stickyNote": {
          "count": 12
        },
        "n8n-nodes-base.errorTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.agent": {
          "count": 1
        },
        "n8n-nodes-base.scheduleTrigger": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.memoryBufferWindow": {
          "count": 1
        },
        "@n8n/n8n-nodes-langchain.outputParserStructured": {
          "count": 1
        }
      }
    },
    "status": "published",
    "user": {
      "name": "Rahul Joshi",
      "username": "rahul08",
      "bio": "Rahul Joshi is a seasoned technology leader specializing in the n8n automation tool and AI-driven workflow automation. With deep expertise in building open-source workflow automation and self-hosted automation platforms, he helps organizations eliminate manual processes through intelligent n8n ai agent automation solutions.\n\n",
      "verified": true,
      "links": [
        "https://www.linkedin.com/in/callrahul/"
      ],
      "avatar": "https://gravatar.com/avatar/b6cf57822463143589b36ada06fbf6cb1509223a740fae3160b28f1ce41ccc12?r=pg&d=retro&size=200"
    },
    "nodes": [
      {
        "id": 12,
        "icon": "fa:bug",
        "name": "n8n-nodes-base.errorTrigger",
        "codex": {
          "data": {
            "details": "In n8n, when a workflow execution fails, it can start another workflow. This second workflow can be any arbitrary workflow on your n8n instance. Use the Error Trigger node as your Trigger in the Error workflow.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/creating-error-workflows-in-n8n/",
                  "icon": "🌪",
                  "label": "Creating Error Workflows in n8n"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.errortrigger/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Other Trigger Nodes"
              ]
            }
          }
        },
        "group": "[\"trigger\"]",
        "defaults": {
          "name": "Error Trigger",
          "color": "#0000FF"
        },
        "iconData": {
          "icon": "bug",
          "type": "icon"
        },
        "displayName": "Error Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 20,
        "icon": "fa:map-signs",
        "name": "n8n-nodes-base.if",
        "codex": {
          "data": {
            "alias": [
              "Router",
              "Filter",
              "Condition",
              "Logic",
              "Boolean",
              "Branch"
            ],
            "details": "The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.",
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/",
                  "icon": "🏭",
                  "label": "Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"
                },
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/",
                  "icon": "🤬",
                  "label": "Create a toxic language detector for Telegram in 4 step"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/",
                  "icon": "🔗",
                  "label": "How to build a low-code, self-hosted URL shortener in 3 steps"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/",
                  "icon": "🏷️",
                  "label": "How to automatically manage contributions to open-source projects"
                },
                {
                  "url": "https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/",
                  "icon": " 🕸️",
                  "label": "How uProc scraped a multi-page website with a low-code workflow"
                },
                {
                  "url": "https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/",
                  "icon": "🤖",
                  "label": "5 workflow automations for Mattermost that we love at n8n"
                },
                {
                  "url": "https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/",
                  "icon": "🧠",
                  "label": "Why this Product Manager loves workflow automation with n8n"
                },
                {
                  "url": "https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/",
                  "icon": "🙌",
                  "label": "Sending Automated Congratulations with Google Sheets, Twilio, and n8n "
                },
                {
                  "url": "https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/",
                  "icon": "🎡",
                  "label": "How to set up a no-code CI/CD pipeline with GitHub and TravisCI"
                },
                {
                  "url": "https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/",
                  "icon": "🎖",
                  "label": "Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"
                },
                {
                  "url": "https://n8n.io/blog/aws-workflow-automation/",
                  "label": "7 no-code workflow automations for Amazon Web Services"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Flow"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "If",
          "color": "#408000"
        },
        "iconData": {
          "icon": "map-signs",
          "type": "icon"
        },
        "displayName": "If",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 40,
        "icon": "file:slack.svg",
        "name": "n8n-nodes-base.slack",
        "codex": {
          "data": {
            "alias": [
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/",
                  "icon": "⚙️",
                  "label": "Automate your data processing pipeline in 9 steps"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/",
                  "icon": "⚡️",
                  "label": "5 tasks you can automate with the new Notion API "
                },
                {
                  "url": "https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/",
                  "icon": "👦",
                  "label": "Build your own virtual assistant with n8n: A step by step guide"
                },
                {
                  "url": "https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/",
                  "icon": "👏",
                  "label": "How to automatically give kudos to contributors with GitHub, Slack, and n8n"
                },
                {
                  "url": "https://n8n.io/blog/automations-for-activists/",
                  "icon": "✨",
                  "label": "How Common Knowledge use workflow automation for activism"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/slack/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "Slack"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgMTUwLjg1MiAxNTAuODUyIj48dXNlIHhsaW5rOmhyZWY9IiNhIiB4PSIuOTI2IiB5PSIuOTI2Ii8+PHN5bWJvbCBpZD0iYSIgb3ZlcmZsb3c9InZpc2libGUiPjxnIHN0cm9rZS13aWR0aD0iMS44NTIiPjxwYXRoIGZpbGw9IiNlMDFlNWEiIHN0cm9rZT0iI2UwMWU1YSIgZD0iTTQwLjc0MSA5My41NWMwLTguNzM1IDYuNjA3LTE1Ljc3MiAxNC44MTUtMTUuNzcyczE0LjgxNSA3LjAzNyAxNC44MTUgMTUuNzcydjM4LjgyNGMwIDguNzM3LTYuNjA3IDE1Ljc3NC0xNC44MTUgMTUuNzc0cy0xNC44MTUtNy4wMzctMTQuODE1LTE1Ljc3MnoiLz48cGF0aCBmaWxsPSIjZWNiMjJkIiBzdHJva2U9IiNlY2IyMmQiIGQ9Ik05My41NSAxMDcuNDA4Yy04LjczNSAwLTE1Ljc3Mi02LjYwNy0xNS43NzItMTQuODE1czcuMDM3LTE0LjgxNSAxNS43NzItMTQuODE1aDM4LjgyNmM4LjczNSAwIDE1Ljc3MiA2LjYwNyAxNS43NzIgMTQuODE1cy03LjAzNyAxNC44MTUtMTUuNzcyIDE0LjgxNXoiLz48cGF0aCBmaWxsPSIjMmZiNjdjIiBzdHJva2U9IiMyZmI2N2MiIGQ9Ik03Ny43NzggMTUuNzcyQzc3Ljc3OCA3LjAzNyA4NC4zODUgMCA5Mi41OTMgMHMxNC44MTUgNy4wMzcgMTQuODE1IDE1Ljc3MnYzOC44MjZjMCA4LjczNS02LjYwNyAxNS43NzItMTQuODE1IDE1Ljc3MnMtMTQuODE1LTcuMDM3LTE0LjgxNS0xNS43NzJ6Ii8+PHBhdGggZmlsbD0iIzM2YzVmMSIgc3Ryb2tlPSIjMzZjNWYxIiBkPSJNMTUuNzcyIDcwLjM3MUM3LjAzNyA3MC4zNzEgMCA2My43NjMgMCA1NS41NTZzNy4wMzctMTQuODE1IDE1Ljc3Mi0xNC44MTVoMzguODI2YzguNzM1IDAgMTUuNzcyIDYuNjA3IDE1Ljc3MiAxNC44MTVzLTcuMDM3IDE0LjgxNS0xNS43NzIgMTQuODE1eiIvPjxnIHN0cm9rZS1saW5lam9pbj0ibWl0ZXIiPjxwYXRoIGZpbGw9IiNlY2IyMmQiIHN0cm9rZT0iI2VjYjIyZCIgZD0iTTc3Ljc3OCAxMzMuMzMzYzAgOC4yMDggNi42MDcgMTQuODE1IDE0LjgxNSAxNC44MTVzMTQuODE1LTYuNjA3IDE0LjgxNS0xNC44MTUtNi42MDctMTQuODE1LTE0LjgxNS0xNC44MTVINzcuNzc4eiIvPjxwYXRoIGZpbGw9IiMyZmI2N2MiIHN0cm9rZT0iIzJmYjY3YyIgZD0iTTEzMy4zMzQgNzAuMzcxaC0xNC44MTVWNTUuNTU2YzAtOC4yMDcgNi42MDctMTQuODE1IDE0LjgxNS0xNC44MTVzMTQuODE1IDYuNjA3IDE0LjgxNSAxNC44MTUtNi42MDcgMTQuODE1LTE0LjgxNSAxNC44MTV6Ii8+PHBhdGggZmlsbD0iI2UwMWU1YSIgc3Ryb2tlPSIjZTAxZTVhIiBkPSJNMTQuODE1IDc3Ljc3OEgyOS42M3YxNC44MTVjMCA4LjIwNy02LjYwNyAxNC44MTUtMTQuODE1IDE0LjgxNVMwIDEwMC44IDAgOTIuNTkzczYuNjA3LTE0LjgxNSAxNC44MTUtMTQuODE1eiIvPjxwYXRoIGZpbGw9IiMzNmM1ZjEiIHN0cm9rZT0iIzM2YzVmMSIgZD0iTTcwLjM3MSAxNC44MTVWMjkuNjNINTUuNTU2Yy04LjIwNyAwLTE0LjgxNS02LjYwNy0xNC44MTUtMTQuODE1UzQ3LjM0OCAwIDU1LjU1NiAwczE0LjgxNSA2LjYwNyAxNC44MTUgMTQuODE1eiIvPjwvZz48L2c+PC9zeW1ib2w+PC9zdmc+"
        },
        "displayName": "Slack",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 129,
        "icon": "file:clickup.svg",
        "name": "n8n-nodes-base.clickUp",
        "codex": {
          "data": {
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/",
                  "icon": "☀️",
                  "label": "2021: The Year to Automate the New You with n8n"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.clickup/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/clickup/"
                }
              ]
            },
            "categories": [
              "Productivity",
              "Communication"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"output\"]",
        "defaults": {
          "name": "ClickUp"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0xMCAwIDE1NSAxNTUiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjAlIiB5MT0iNjguMDElIiB5Mj0iNjguMDElIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjODkzMEZEIi8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjNDlDQ0Y5Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImIiIHgxPSIwJSIgeTE9IjY4LjAxJSIgeTI9IjY4LjAxJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI0ZGMDJGMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI0ZGQzgwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxnIGZpbGw9Im5vbmUiPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Im0uNCAxMTkuMTIgMjMuODEtMTguMjRDMzYuODYgMTE3LjM5IDUwLjMgMTI1IDY1LjI2IDEyNWMxNC44OCAwIDI3Ljk0LTcuNTIgNDAuMDItMjMuOWwyNC4xNSAxNy44QzExMiAxNDIuNTIgOTAuMzQgMTU1IDY1LjI2IDE1NWMtMjUgMC00Ni44Ny0xMi40LTY0Ljg2LTM1Ljg4Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTY1LjE4IDM5Ljg0IDIyLjggNzYuMzYgMy4yMSA1My42NCA2NS4yNy4xNmw2MS41NyA1My41Mi0xOS42OCAyMi42NHoiLz48L2c+PC9zdmc+"
        },
        "displayName": "ClickUp",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 4,
            "name": "Productivity"
          },
          {
            "id": 6,
            "name": "Communication"
          }
        ]
      },
      {
        "id": 356,
        "icon": "file:gmail.svg",
        "name": "n8n-nodes-base.gmail",
        "codex": {
          "data": {
            "alias": [
              "email",
              "human",
              "form",
              "wait",
              "hitl",
              "approval"
            ],
            "resources": {
              "generic": [
                {
                  "url": "https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/",
                  "icon": "🧬",
                  "label": "Why business process automation with n8n can change your daily life"
                },
                {
                  "url": "https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/",
                  "icon": "🎫",
                  "label": "Supercharging your conference registration process with n8n"
                },
                {
                  "url": "https://n8n.io/blog/no-code-ecommerce-workflow-automations/",
                  "icon": "store",
                  "label": "6 e-commerce workflows to power up your Shopify s"
                },
                {
                  "url": "https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/",
                  "icon": "👥",
                  "label": "How to get started with CRM automation (with 3 no-code workflow ideas"
                },
                {
                  "url": "https://n8n.io/blog/automate-google-apps-for-productivity/",
                  "icon": "💡",
                  "label": "15 Google apps you can combine and automate to increase productivity"
                },
                {
                  "url": "https://n8n.io/blog/your-business-doesnt-need-you-to-operate/",
                  "icon": " 🖥️",
                  "label": "Hey founders! Your business doesn't need you to operate"
                },
                {
                  "url": "https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/",
                  "icon": "💪",
                  "label": "Using Automation to Boost Productivity in the Workplace"
                }
              ],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/"
                }
              ],
              "credentialDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"
                }
              ]
            },
            "categories": [
              "Communication",
              "HITL"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "HITL": [
                "Human in the Loop"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Gmail"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMTkzIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PHBhdGggZmlsbD0iIzQyODVGNCIgZD0iTTU4LjE4MiAxOTIuMDVWOTMuMTRMMjcuNTA3IDY1LjA3NyAwIDQ5LjUwNHYxMjUuMDkxYzAgOS42NTggNy44MjUgMTcuNDU1IDE3LjQ1NSAxNy40NTV6Ii8+PHBhdGggZmlsbD0iIzM0QTg1MyIgZD0iTTE5Ny44MTggMTkyLjA1aDQwLjcyN2M5LjY1OSAwIDE3LjQ1NS03LjgyNiAxNy40NTUtMTcuNDU1VjQ5LjUwNWwtMzEuMTU2IDE3LjgzNy0yNy4wMjYgMjUuNzk4eiIvPjxwYXRoIGZpbGw9IiNFQTQzMzUiIGQ9Im01OC4xODIgOTMuMTQtNC4xNzQtMzguNjQ3IDQuMTc0LTM2Ljk4OUwxMjggNjkuODY4bDY5LjgxOC01Mi4zNjQgNC42NyAzNC45OTItNC42NyA0MC42NDRMMTI4IDE0NS41MDR6Ii8+PHBhdGggZmlsbD0iI0ZCQkMwNCIgZD0iTTE5Ny44MTggMTcuNTA0VjkzLjE0TDI1NiA0OS41MDRWMjYuMjMxYzAtMjEuNTg1LTI0LjY0LTMzLjg5LTQxLjg5LTIwLjk0NXoiLz48cGF0aCBmaWxsPSIjQzUyMjFGIiBkPSJtMCA0OS41MDQgMjYuNzU5IDIwLjA3TDU4LjE4MiA5My4xNFYxNy41MDRMNDEuODkgNS4yODZDMjQuNjEtNy42NiAwIDQuNjQ2IDAgMjYuMjN6Ii8+PC9zdmc+"
        },
        "displayName": "Gmail",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 6,
            "name": "Communication"
          },
          {
            "id": 28,
            "name": "HITL"
          }
        ]
      },
      {
        "id": 565,
        "icon": "fa:sticky-note",
        "name": "n8n-nodes-base.stickyNote",
        "codex": {
          "data": {
            "alias": [
              "Comments",
              "Notes",
              "Sticky"
            ],
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers"
              ]
            }
          }
        },
        "group": "[\"input\"]",
        "defaults": {
          "name": "Sticky Note",
          "color": "#FFD233"
        },
        "iconData": {
          "icon": "sticky-note",
          "type": "icon"
        },
        "displayName": "Sticky Note",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 834,
        "icon": "file:code.svg",
        "name": "n8n-nodes-base.code",
        "codex": {
          "data": {
            "alias": [
              "cpde",
              "Javascript",
              "JS",
              "Python",
              "Script",
              "Custom Code",
              "Function"
            ],
            "details": "The Code node allows you to execute JavaScript in your workflow.",
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"
                }
              ]
            },
            "categories": [
              "Development",
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0",
            "subcategories": {
              "Core Nodes": [
                "Helpers",
                "Data Transformation"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Code"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="
        },
        "displayName": "Code",
        "typeVersion": 2,
        "nodeCategories": [
          {
            "id": 5,
            "name": "Development"
          },
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 839,
        "icon": "fa:clock",
        "name": "n8n-nodes-base.scheduleTrigger",
        "codex": {
          "data": {
            "alias": [
              "Time",
              "Scheduler",
              "Polling",
              "Cron",
              "Interval"
            ],
            "resources": {
              "generic": [],
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"
                }
              ]
            },
            "categories": [
              "Core Nodes"
            ],
            "nodeVersion": "1.0",
            "codexVersion": "1.0"
          }
        },
        "group": "[\"trigger\",\"schedule\"]",
        "defaults": {
          "name": "Schedule Trigger",
          "color": "#31C49F"
        },
        "iconData": {
          "icon": "clock",
          "type": "icon"
        },
        "displayName": "Schedule Trigger",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 9,
            "name": "Core Nodes"
          }
        ]
      },
      {
        "id": 1119,
        "icon": "fa:robot",
        "name": "@n8n/n8n-nodes-langchain.agent",
        "codex": {
          "data": {
            "alias": [
              "LangChain",
              "Chat",
              "Conversational",
              "Plan and Execute",
              "ReAct",
              "Tools"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Agents",
                "Root Nodes"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "AI Agent",
          "color": "#404040"
        },
        "iconData": {
          "icon": "robot",
          "type": "icon"
        },
        "displayName": "AI Agent",
        "typeVersion": 3,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1163,
        "icon": "fa:database",
        "name": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Memory"
              ],
              "Memory": [
                "For beginners"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Simple Memory"
        },
        "iconData": {
          "icon": "database",
          "type": "icon"
        },
        "displayName": "Simple Memory",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1179,
        "icon": "fa:code",
        "name": "@n8n/n8n-nodes-langchain.outputParserStructured",
        "codex": {
          "data": {
            "alias": [
              "json",
              "zod"
            ],
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Output Parsers"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Structured Output Parser"
        },
        "iconData": {
          "icon": "code",
          "type": "icon"
        },
        "displayName": "Structured Output Parser",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      },
      {
        "id": 1253,
        "icon": "file:azure.svg",
        "name": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
        "codex": {
          "data": {
            "resources": {
              "primaryDocumentation": [
                {
                  "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatazureopenai/"
                }
              ]
            },
            "categories": [
              "AI",
              "Langchain"
            ],
            "subcategories": {
              "AI": [
                "Language Models",
                "Root Nodes"
              ],
              "Language Models": [
                "Chat Models (Recommended)"
              ]
            }
          }
        },
        "group": "[\"transform\"]",
        "defaults": {
          "name": "Azure OpenAI Chat Model"
        },
        "iconData": {
          "type": "file",
          "fileBuffer": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNTYiIGhlaWdodD0iMjQyIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNTguOTcyJSIgeDI9IjM3LjE5MSUiIHkxPSI3LjQxMSUiIHkyPSIxMDMuNzYyJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzExNEE4QiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzA2NjlCQyIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iNTkuNzE5JSIgeDI9IjUyLjY5MSUiIHkxPSI1Mi4zMTMlIiB5Mj0iNTQuODY0JSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1vcGFjaXR5PSIuMyIvPjxzdG9wIG9mZnNldD0iNy4xJSIgc3RvcC1vcGFjaXR5PSIuMiIvPjxzdG9wIG9mZnNldD0iMzIuMSUiIHN0b3Atb3BhY2l0eT0iLjEiLz48c3RvcCBvZmZzZXQ9IjYyLjMlIiBzdG9wLW9wYWNpdHk9Ii4wNSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImMiIHgxPSIzNy4yNzklIiB4Mj0iNjIuNDczJSIgeTE9IjQuNiUiIHkyPSI5OS45NzklIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjM0NDQkY0Ii8+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMjg5MkRGIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZmlsbD0idXJsKCNhKSIgZD0iTTg1LjM0My4wMDNoNzUuNzUzTDgyLjQ1NyAyMzNhMTIuMDggMTIuMDggMCAwIDEtMTEuNDQyIDguMjE2SDEyLjA2QTEyLjA2IDEyLjA2IDAgMCAxIC42MzMgMjI1LjMwM0w3My44OTggOC4yMTlBMTIuMDggMTIuMDggMCAwIDEgODUuMzQzIDB6Ii8+PHBhdGggZmlsbD0iIzAwNzhENCIgZD0iTTE5NS40MjMgMTU2LjI4Mkg3NS4yOTdhNS41NiA1LjU2IDAgMCAwLTMuNzk2IDkuNjI3bDc3LjE5IDcyLjA0N2ExMi4xNCAxMi4xNCAwIDAgMCA4LjI4IDMuMjZoNjguMDJ6Ii8+PHBhdGggZmlsbD0idXJsKCNiKSIgZD0iTTg1LjM0My4wMDNhMTEuOTggMTEuOTggMCAwIDAtMTEuNDcxIDguMzc2TC43MjMgMjI1LjEwNWExMi4wNDUgMTIuMDQ1IDAgMCAwIDExLjM3IDE2LjExMmg2MC40NzVhMTIuOTMgMTIuOTMgMCAwIDAgOS45MjEtOC40MzdsMTQuNTg4LTQyLjk5MSA1Mi4xMDUgNDguNmExMi4zMyAxMi4zMyAwIDAgMCA3Ljc1NyAyLjgyOGg2Ny43NjZsLTI5LjcyMS04NC45MzUtODYuNjQzLjAyTDE2MS4zNy4wMDN6Ii8+PHBhdGggZmlsbD0idXJsKCNjKSIgZD0iTTE4Mi4wOTggOC4yMDdBMTIuMDYgMTIuMDYgMCAwIDAgMTcwLjY3LjAwM0g4Ni4yNDVjNS4xNzUgMCA5Ljc3MyAzLjMwMSAxMS40MjggOC4yMDRMMTcwLjk0IDIyNS4zYTEyLjA2MiAxMi4wNjIgMCAwIDEtMTEuNDI4IDE1LjkyaDg0LjQyOWExMi4wNjIgMTIuMDYyIDAgMCAwIDExLjQyNS0xNS45MnoiLz48L3N2Zz4="
        },
        "displayName": "Azure OpenAI Chat Model",
        "typeVersion": 1,
        "nodeCategories": [
          {
            "id": 25,
            "name": "AI"
          },
          {
            "id": 26,
            "name": "Langchain"
          }
        ]
      }
    ],
    "categories": [
      {
        "id": 46,
        "name": "Project Management"
      },
      {
        "id": 47,
        "name": "AI Chatbot"
      }
    ],
    "image": []
  }
}