8
n8n 中文网amn8n.com

从Monday.com和Jira到Outlook的AI驱动反馈分类与报告

高级

这是一个自动化工作流,包含 27 个节点。主要使用 Set, Code, Jira, Gmail, Merge 等节点。 使用Azure GPT-4、Jira任务和Outlook报告分析来自Monday.com的客户反馈

前置要求
  • Google 账号和 Gmail API 凭证
  • Google Sheets API 凭证
  • OpenAI API Key

分类

-
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "lgj2XcZly50vMqKU",
  "meta": {
    "instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177",
    "templateCredsSetupCompleted": true
  },
  "name": "从 Monday.com 和 Jira 到 Outlook 的 AI 驱动反馈分类与报告",
  "tags": [],
  "nodes": [
    {
      "id": "74675c08-9d89-4a2d-a36d-59c167bb42e1",
      "name": "工作流概览",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2448,
        -528
      ],
      "parameters": {
        "color": 4,
        "width": 450,
        "height": 661,
        "content": "## 📊 客户反馈智能工作流"
      },
      "typeVersion": 1
    },
    {
      "id": "47e27d91-6cc5-44cd-9374-f4b0c10188b1",
      "name": "设置:数据源",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1792,
        32
      ],
      "parameters": {
        "width": 344,
        "height": 259,
        "content": "## 步骤 1:获取反馈数据"
      },
      "typeVersion": 1
    },
    {
      "id": "553ce617-8fcc-4f94-a7b1-b5d76ebdd215",
      "name": "获取 Monday.com 反馈",
      "type": "n8n-nodes-base.mondayCom",
      "position": [
        -1648,
        -160
      ],
      "parameters": {
        "boardId": "YOUR_BOARD_ID",
        "groupId": "topics",
        "resource": "boardItem",
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "mondayComApi": {
          "id": "v9QkK1x0MHK2ULvk",
          "name": "Monday.com account ch"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c9de6225-3282-49ca-9db4-8bb10fd80aab",
      "name": "设置:数据规范化",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1552,
        -496
      ],
      "parameters": {
        "width": 344,
        "height": 312,
        "content": "## 步骤 2:规范化数据"
      },
      "typeVersion": 1
    },
    {
      "id": "73233e74-bcb5-47d7-87d1-4848d10e0268",
      "name": "规范化反馈字段",
      "type": "n8n-nodes-base.set",
      "position": [
        -1424,
        -160
      ],
      "parameters": {
        "fields": {
          "values": [
            {
              "name": "Title",
              "stringValue": "={{ $json.name }}"
            },
            {
              "name": "Account Name",
              "stringValue": "={{ $json.column_values[1].text }}"
            },
            {
              "name": "ARR(USD)",
              "stringValue": "={{ $json.column_values[2].text }}"
            },
            {
              "name": "NPS Before",
              "stringValue": "={{ $json.column_values[3].text }}"
            },
            {
              "name": "NPS After",
              "stringValue": "={{ $json.column_values[4].text }}"
            },
            {
              "name": "FeedBack Type",
              "stringValue": "={{ $json.column_values[5].text }}"
            },
            {
              "name": "Contact Email",
              "stringValue": "={{ $json.column_values[6].text }}"
            },
            {
              "name": "Submitted On",
              "stringValue": "={{ $json.column_values[7].text }}"
            }
          ]
        },
        "include": "selected",
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "c101c93b-0b00-4734-8247-27f90ef3297f",
      "name": "设置:AI 分析",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1120,
        -656
      ],
      "parameters": {
        "width": 344,
        "height": 355,
        "content": "## 步骤 3:AI 主题分类"
      },
      "typeVersion": 1
    },
    {
      "id": "cbd79e63-6ef3-4de3-8e93-5d3825865ac0",
      "name": "合并 AI 结果与反馈",
      "type": "n8n-nodes-base.merge",
      "position": [
        -848,
        -160
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combinationMode": "mergeByPosition"
      },
      "typeVersion": 2.1
    },
    {
      "id": "7fa77a1a-b1e4-4c0b-803f-41688c7662ea",
      "name": "设置:Jira 集成",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        -544
      ],
      "parameters": {
        "width": 343.81788385280146,
        "height": 308.6359741062274,
        "content": "## 步骤 4:创建 Jira 问题"
      },
      "typeVersion": 1
    },
    {
      "id": "22662502-fdce-4ab1-85e5-32196d570fda",
      "name": "为反馈创建 Jira 任务",
      "type": "n8n-nodes-base.jira",
      "position": [
        -176,
        -352
      ],
      "parameters": {
        "project": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_PROJECT_ID",
          "cachedResultName": "Your Project Name"
        },
        "summary": "=Theme: {{$json[\"theme_label\"]}} ({{$json[\"theme_key\"]}})",
        "issueType": {
          "__rl": true,
          "mode": "list",
          "value": "10006",
          "cachedResultName": "Task"
        },
        "additionalFields": {
          "description": "=💬 Feedback: {{$json[\"feedback\"]}}\n\n💰 ARR Impact: ${{$json[\"arr_usd\"]}}\n😐 Sentiment: {{$json[\"sentiment\"]}}\n📊 NPS Before → {{$json[\"nps_before\"]}} | After → {{$json[\"nps_after\"]}}\n⚡ Impact Score: {{$json[\"impact_score\"]}}\n\nLabels: feedback, {{$json[\"theme_key\"]}}\n"
        }
      },
      "credentials": {
        "jiraSoftwareCloudApi": {
          "id": "Q6d7sLBVOfGWmaLw",
          "name": "Jira SW Cloud account vivek"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d0084ad1-e8ad-4802-b560-74f997c365cb",
      "name": "设置:数据记录",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -208
      ],
      "parameters": {
        "width": 343.81788385280146,
        "height": 288.6362189310366,
        "content": "## 步骤 5:记录到 Google Sheets"
      },
      "typeVersion": 1
    },
    {
      "id": "f95ddd6f-e581-4a8a-8321-74b50c183ebf",
      "name": "记录到Google表格",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -176,
        -160
      ],
      "parameters": {
        "columns": {
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "theme_key"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultName": "Customer Feedback"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_SHEET_ID",
          "cachedResultName": "Your Feedback Sheet"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "kpPEOLCGn963qpoh",
          "name": "automations@techdome.ai"
        }
      },
      "typeVersion": 4.4
    },
    {
      "id": "2abb077d-0419-4693-a3bf-782d9f0e92b1",
      "name": "设置:错误警报",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2240,
        304
      ],
      "parameters": {
        "width": 344,
        "height": 369,
        "content": "## 错误处理"
      },
      "typeVersion": 1
    },
    {
      "id": "1dc8d357-370c-4db4-bf62-c0fc90a03300",
      "name": "工作流出错时",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -1872,
        464
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "022da409-d000-44e8-85a1-21bce519482d",
      "name": "发送错误警报邮件",
      "type": "n8n-nodes-base.gmail",
      "position": [
        -1648,
        464
      ],
      "webhookId": "f19b5216-ea1f-4483-acbd-3d46469a6d5f",
      "parameters": {
        "sendTo": "={{ $env.ERROR_ALERT_EMAIL }}",
        "message": "=Workflow Execution Failed\n\nWorkflow: {{ $workflow.name }}\nExecution ID: {{ $execution.id }}\nFailed Node: {{ $json.node?.name || 'Unknown' }}\nError: {{ $json.error?.message || 'No error message' }}\nTimestamp: {{ $now.toISO() }}",
        "options": {},
        "subject": "=n8n Workflow Error: {{ $workflow.name }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "70f5n8rPahCANHs7",
          "name": "jyothi"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "a037a368-1d36-4771-993f-7770ce89ba17",
      "name": "每周计划触发器",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1872,
        -160
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 * * 1"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "4018a5de-0860-49f3-8db0-d97bf7bf88c8",
      "name": "设置:计划",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1984,
        -448
      ],
      "parameters": {
        "width": 343.8178838528013,
        "height": 280,
        "content": "## 触发器:每周计划"
      },
      "typeVersion": 1
    },
    {
      "id": "640ed7b7-7acf-4a89-9f7f-da1a0747e0c6",
      "name": "结构化 JSON 输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -976,
        -16
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"theme_key\": \"\",\n  \"theme_label\": \"\",\n  \"sentiment\": \"\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "b2997445-aefe-4bfa-ad21-7754b2c6d498",
      "name": "AI 主题分类器",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -1200,
        -284
      ],
      "parameters": {
        "text": "=Analyze the following customer feedback record and return structured JSON.\n\nFeedback data:\n{{ JSON.stringify($json) }}\n\nReturn JSON in this exact schema:\n{\n  \"theme_key\": \"short-keyword-style category (lowercase, kebab-case)\",\n  \"theme_label\": \"concise readable label (2-5 words)\",\n  \"sentiment\": \"positive | neutral | negative\"\n}\n\nExamples:\nInput: \"App crashes when submitting reports.\"\nOutput: {\"theme_key\":\"app-crash\",\"theme_label\":\"App Stability\",\"sentiment\":\"negative\"}\n\nInput: \"Love the new dashboard design!\"\nOutput: {\"theme_key\":\"ui-design\",\"theme_label\":\"Dashboard Design\",\"sentiment\":\"positive\"}\n\nNow analyze this feedback and respond only with JSON.",
        "options": {
          "systemMessage": "=You are an intelligent product feedback classifier. \nYour job is to analyze each feedback text and extract structured insights.\n\nFollow these strict rules:\n- Output must be valid JSON only (no markdown, no explanations).\n- Identify the underlying theme or category of the feedback.\n- Create a short, human-readable label for that theme.\n- Detect overall sentiment (positive, neutral, negative).\n- Do not repeat the full feedback text in output."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "ae2b52c2-9be1-4d8e-9b72-6dcff9b948f4",
      "name": "对话记忆缓冲区",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -1104,
        -80
      ],
      "parameters": {
        "sessionKey": "=\"feedback_classification_\" + $now.format('yyyy-MM-dd')",
        "sessionIdType": "customKey",
        "contextWindowLength": 7
      },
      "typeVersion": 1.3
    },
    {
      "id": "78abb932-8eb0-407f-b059-ed2285778f71",
      "name": "设置:数据结构化",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -848,
        32
      ],
      "parameters": {
        "width": 343.81788385280146,
        "height": 270.78228621783586,
        "content": "## 步骤 3b:结构化 AI 输出"
      },
      "typeVersion": 1
    },
    {
      "id": "f90ec364-b556-47f3-8250-e93938a4455b",
      "name": "结构化 AI 分类输出",
      "type": "n8n-nodes-base.set",
      "position": [
        -624,
        -160
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={\n  \"arr_usd\": {{ Number($json['ARR(USD)']) }},\n  \"nps_before\": {{ Number($json['NPS Before']) }},\n  \"nps_after\": {{ Number($json['NPS After']) }},\n  \"theme_key\": \"{{ $json.output.theme_key }}\",\n  \"theme_label\": \"{{ $json.output.theme_label }}\",\n  \"sentiment\": \"{{ $json.output.sentiment }}\",\n  \"feedback\": \"{{ $json['Title'] }}\"\n}"
      },
      "typeVersion": 3.4
    },
    {
      "id": "9395692c-3e78-4266-b45f-4ce4eba5739d",
      "name": "设置:影响评分",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -672,
        -432
      ],
      "parameters": {
        "width": 343.81788385280146,
        "height": 250.78228621783586,
        "content": "## 步骤 3c:计算影响分数"
      },
      "typeVersion": 1
    },
    {
      "id": "ceceb3a5-ba7a-4b90-a4d8-248ac18abe4f",
      "name": "计算业务影响分数",
      "type": "n8n-nodes-base.set",
      "position": [
        -400,
        -160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "impact-score-calc",
              "name": "impact_score",
              "type": "number",
              "value": "={{ (0.5 * ($json.arr_usd / 50000)) + (0.3 * ((10 - Math.abs($json.nps_after - $json.nps_before)) / 10)) + (0.2 * ($json.sentiment === 'negative' ? 1 : $json.sentiment === 'neutral' ? 0.5 : 0.2)) }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "be4e3188-2f09-4490-ac95-c32a372b2ec5",
      "name": "设置:邮件报告",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        192
      ],
      "parameters": {
        "width": 343.81788385280146,
        "height": 310.78228621783586,
        "content": "## 步骤 6:每周邮件报告"
      },
      "typeVersion": 1
    },
    {
      "id": "08498f99-f113-4b02-8716-0091a04f7b2b",
      "name": "生成HTML报告",
      "type": "n8n-nodes-base.code",
      "position": [
        -176,
        32
      ],
      "parameters": {
        "jsCode": "// Weekly Feedback Report Formatter\n// Generates Outlook-compatible HTML email\n\nconst feedbackData = $input.all();\n\n// Calculate summary metrics\nlet totalARR = 0;\nlet positiveCount = 0;\nlet negativeCount = 0;\nlet neutralCount = 0;\nlet npsImproved = 0;\nlet npsDeclined = 0;\nlet totalNPSChange = 0;\n\nconst criticalIssues = [];\nconst wins = [];\n\nfeedbackData.forEach(item => {\n  const arr = parseFloat(item.json.arr_usd) || 0;\n  const npsBefore = parseFloat(item.json.nps_before) || 0;\n  const npsAfter = parseFloat(item.json.nps_after) || 0;\n  const npsChange = npsAfter - npsBefore;\n  \n  totalARR += arr;\n  totalNPSChange += npsChange;\n  \n  // Count sentiments\n  if (item.json.sentiment === 'positive') positiveCount++;\n  else if (item.json.sentiment === 'negative') negativeCount++;\n  else neutralCount++;\n  \n  // Track NPS changes\n  if (npsChange > 0) npsImproved++;\n  else if (npsChange < 0) npsDeclined++;\n  \n  // Identify critical issues\n  if (item.json.sentiment === 'negative' && (arr > 20000 || npsChange <= -2)) {\n    criticalIssues.push({ ...item.json, arr, npsChange });\n  }\n  \n  // Identify wins\n  if (item.json.sentiment === 'positive' && npsChange > 0) {\n    wins.push({ ...item.json, arr, npsChange });\n  }\n});\n\ncriticalIssues.sort((a, b) => b.arr - a.arr);\nwins.sort((a, b) => b.npsChange - a.npsChange);\n\nconst today = new Date();\nconst weekStart = new Date(today);\nweekStart.setDate(today.getDate() - 7);\n\nconst formatDate = (date) => {\n  return date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n};\n\nconst subject = `Customer Feedback Weekly Report - ${formatDate(weekStart)} to ${formatDate(today)}`;\n\nconst htmlBody = `<!DOCTYPE html>\n<html>\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n</head>\n<body style=\"margin: 0; padding: 0; background-color: #f4f4f4; font-family: Arial, sans-serif;\">\n  <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #f4f4f4;\">\n    <tr>\n      <td style=\"padding: 20px 0;\">\n        <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"600\" style=\"margin: 0 auto; background-color: #ffffff; border-radius: 8px;\">\n          <tr>\n            <td style=\"padding: 30px;\">\n              <h1 style=\"margin: 0 0 10px 0; font-size: 24px; color: #2c3e50; border-bottom: 3px solid #3498db; padding-bottom: 10px;\">📊 Customer Feedback Weekly Report</h1>\n              <p style=\"margin: 0; color: #7f8c8d; font-size: 14px;\">Report Period: <strong>${formatDate(weekStart)}</strong> to <strong>${formatDate(today)}</strong></p>\n            </td>\n          </tr>\n          <tr>\n            <td style=\"padding: 0 30px 20px 30px;\">\n              <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #e8f4f8; border-radius: 6px;\">\n                <tr>\n                  <td style=\"padding: 20px;\">\n                    <h2 style=\"margin: 0 0 12px 0; font-size: 18px; color: #34495e;\">📈 Executive Summary</h2>\n                    <p style=\"margin: 0; color: #555555; font-size: 14px; line-height: 1.6;\">\n                      This week we collected <strong>${feedbackData.length} feedback responses</strong> from customers representing \n                      <strong>$${totalARR.toLocaleString()}</strong> in total ARR. Overall NPS movement shows \n                      <strong>${npsImproved} accounts improved</strong> and <strong>${npsDeclined} declined</strong>.\n                    </p>\n                  </td>\n                </tr>\n              </table>\n            </td>\n          </tr>\n          <tr>\n            <td style=\"padding: 0 30px 20px 30px;\">\n              <h2 style=\"margin: 0 0 15px 0; font-size: 18px; color: #34495e;\">🎯 Key Metrics</h2>\n              <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\">\n                <tr>\n                  <td width=\"33%\" style=\"padding: 5px;\">\n                    <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #667eea; border-radius: 6px;\">\n                      <tr>\n                        <td style=\"padding: 20px; text-align: center;\">\n                          <div style=\"font-size: 11px; color: #ffffff; text-transform: uppercase; margin-bottom: 5px;\">Total Feedback</div>\n                          <div style=\"font-size: 32px; font-weight: bold; color: #ffffff;\">${feedbackData.length}</div>\n                        </td>\n                      </tr>\n                    </table>\n                  </td>\n                  <td width=\"33%\" style=\"padding: 5px;\">\n                    <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #2ecc71; border-radius: 6px;\">\n                      <tr>\n                        <td style=\"padding: 20px; text-align: center;\">\n                          <div style=\"font-size: 11px; color: #ffffff; text-transform: uppercase; margin-bottom: 5px;\">Positive</div>\n                          <div style=\"font-size: 32px; font-weight: bold; color: #ffffff;\">${positiveCount}</div>\n                        </td>\n                      </tr>\n                    </table>\n                  </td>\n                  <td width=\"33%\" style=\"padding: 5px;\">\n                    <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #e74c3c; border-radius: 6px;\">\n                      <tr>\n                        <td style=\"padding: 20px; text-align: center;\">\n                          <div style=\"font-size: 11px; color: #ffffff; text-transform: uppercase; margin-bottom: 5px;\">Negative</div>\n                          <div style=\"font-size: 32px; font-weight: bold; color: #ffffff;\">${negativeCount}</div>\n                        </td>\n                      </tr>\n                    </table>\n                  </td>\n                </tr>\n              </table>\n            </td>\n          </tr>\n          ${criticalIssues.length > 0 ? `\n          <tr>\n            <td style=\"padding: 0 30px 20px 30px;\">\n              <h2 style=\"margin: 0 0 10px 0; font-size: 18px; color: #34495e;\">🚨 Critical Issues</h2>\n              ${criticalIssues.slice(0, 5).map(issue => `\n                <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #fee; border-left: 4px solid #e74c3c; border-radius: 4px; margin-bottom: 10px;\">\n                  <tr>\n                    <td style=\"padding: 15px;\">\n                      <strong style=\"color: #2c3e50;\">${issue.theme_label}</strong>\n                      <span style=\"background-color: #e74c3c; color: #fff; padding: 2px 6px; border-radius: 3px; font-size: 10px; margin-left: 8px;\">CRITICAL</span>\n                      <br>\n                      <span style=\"font-size: 12px; color: #666;\">ARR: ${issue.arr.toLocaleString()} | NPS: ${issue.nps_before} → ${issue.nps_after}</span>\n                      <p style=\"margin: 8px 0 0 0; color: #555; font-style: italic; font-size: 13px;\">${issue.feedback}</p>\n                    </td>\n                  </tr>\n                </table>\n              `).join('')}\n            </td>\n          </tr>\n          ` : ''}\n          ${wins.length > 0 ? `\n          <tr>\n            <td style=\"padding: 0 30px 20px 30px;\">\n              <h2 style=\"margin: 0 0 10px 0; font-size: 18px; color: #34495e;\">🎉 Customer Wins</h2>\n              ${wins.slice(0, 5).map(win => `\n                <table role=\"presentation\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\" width=\"100%\" style=\"background-color: #efe; border-left: 4px solid #2ecc71; border-radius: 4px; margin-bottom: 10px;\">\n                  <tr>\n                    <td style=\"padding: 15px;\">\n                      <strong style=\"color: #2c3e50;\">${win.theme_label}</strong>\n                      <span style=\"background-color: #2ecc71; color: #fff; padding: 2px 6px; border-radius: 3px; font-size: 10px; margin-left: 8px;\">WIN</span>\n                      <br>\n                      <span style=\"font-size: 12px; color: #666;\">ARR: ${win.arr.toLocaleString()} | NPS: ${win.nps_before} → ${win.nps_after}</span>\n                      <p style=\"margin: 8px 0 0 0; color: #555; font-style: italic; font-size: 13px;\">${win.feedback}</p>\n                    </td>\n                  </tr>\n                </table>\n              `).join('')}\n            </td>\n          </tr>\n          ` : ''}\n          <tr>\n            <td style=\"padding: 20px 30px; border-top: 1px solid #ddd;\">\n              <p style=\"margin: 0; text-align: center; color: #7f8c8d; font-size: 12px;\">\n                Automated by n8n | Generated on ${formatDate(today)}\n              </p>\n            </td>\n          </tr>\n        </table>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>`;\n\nreturn [{\n  json: {\n    subject: subject,\n    body: htmlBody,\n    summary: {\n      total_feedback: feedbackData.length,\n      total_arr: totalARR,\n      positive_count: positiveCount,\n      negative_count: negativeCount,\n      neutral_count: neutralCount,\n      nps_improved: npsImproved,\n      nps_declined: npsDeclined,\n      critical_issues_count: criticalIssues.length,\n      wins_count: wins.length\n    }\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "9856c766-0c69-4720-835d-a485927fbb69",
      "name": "发送消息",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        48,
        32
      ],
      "webhookId": "bac58a25-de50-4bca-a6cc-5d35012c67cb",
      "parameters": {
        "subject": "={{ $json.subject }}",
        "bodyContent": "={{ $json.body }}",
        "toRecipients": "YOUR_EMAIL@example.com",
        "additionalFields": {
          "bodyContentType": "html"
        }
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "id": "dVY4LPJeMsLJMtJZ",
          "name": "Microsoft Outlook account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "836e0820-15a8-4938-a4ff-d59fd0c93050",
      "name": "Azure OpenAI 聊天模型1",
      "type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi",
      "position": [
        -1248,
        32
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "azureOpenAiApi": {
          "id": "C3WzT18XqF8OdVM6",
          "name": "Azure Open AI account"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "c7cc5d75-cfd8-430e-b300-69f53c5881b3",
  "connections": {
    "On Workflow Error": {
      "main": [
        [
          {
            "node": "Send Error Alert Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Theme Classifier": {
      "main": [
        [
          {
            "node": "Merge AI Results with Feedback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate HTML Report": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Weekly Schedule Trigger": {
      "main": [
        [
          {
            "node": "Fetch Monday.com Feedback",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Azure OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Theme Classifier",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Monday.com Feedback": {
      "main": [
        [
          {
            "node": "Normalize Feedback Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Normalize Feedback Fields": {
      "main": [
        [
          {
            "node": "AI Theme Classifier",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge AI Results with Feedback",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Conversation Memory Buffer": {
      "ai_memory": [
        [
          {
            "node": "AI Theme Classifier",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Structured JSON Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Theme Classifier",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Merge AI Results with Feedback": {
      "main": [
        [
          {
            "node": "Structure AI Classification Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Business Impact Score": {
      "main": [
        [
          {
            "node": "Create Jira Task for Feedback",
            "type": "main",
            "index": 0
          },
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          },
          {
            "node": "Generate HTML Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structure AI Classification Output": {
      "main": [
        [
          {
            "node": "Calculate Business Impact Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量27
分类-
节点类型15
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Rahul Joshi

Rahul Joshi

@rahul08

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.

外部链接
在 n8n.io 查看

分享此工作流