8
n8n 中文网amn8n.com

使用Jotform、GPT-4.1和Google Sheets的自动化客户反馈分析与回复

高级

这是一个自动化工作流,包含 21 个节点。主要使用 If, Set, Slack, EmailSend, GoogleSheets 等节点。 使用Jotform、GPT-4.1和Google Sheets的自动化客户反馈分析与回复

前置要求
  • Slack Bot Token 或 Webhook URL
  • Google Sheets API 凭证
  • OpenAI API Key

分类

-
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "7ea3ce54fff35125cef70d7d3eb237421160deacac404433c1059018e4254496",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "7d50aea5-d58c-4a01-9964-92da5fe5031d",
      "name": "Jotform — 新反馈提交",
      "type": "n8n-nodes-base.jotFormTrigger",
      "position": [
        -128,
        0
      ],
      "webhookId": "85ddb2a9-bacb-45da-a2d2-062353bb19f1",
      "parameters": {
        "form": "251411842823048",
        "onlyAnswers": false
      },
      "credentials": {
        "jotFormApi": {
          "id": "jXvtT52kwCnYtxyM",
          "name": "JotForm account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1df86418-1292-43b4-a144-1282d700f51d",
      "name": "提取关键字段(规范化输入)",
      "type": "n8n-nodes-base.set",
      "position": [
        160,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "1b8cefc9-25fd-4603-88ef-787b5582660e",
              "name": "submissionId",
              "type": "string",
              "value": "={{ $json.submissionID }}"
            },
            {
              "id": "a4f8f6b0-9eea-422a-a02c-8db49cfbb026",
              "name": "fullName",
              "type": "string",
              "value": "={{ $json.rawRequest[\"Full Name\"] }}"
            },
            {
              "id": "804e4a6e-fbae-449a-a0dd-95b3c9a1cc60",
              "name": "email",
              "type": "string",
              "value": "={{ $json.rawRequest.Email }}"
            },
            {
              "id": "59e72537-9635-473b-9d7c-9755497cbc1f",
              "name": "whatsappNumber",
              "type": "string",
              "value": "={{ $json.rawRequest[\"Whatsapp Number\"] }}"
            },
            {
              "id": "ddaddc42-b043-4643-a6c7-d46bdbb3665f",
              "name": "orderId",
              "type": "string",
              "value": "={{ $json.rawRequest[\"Order Id\"] }}"
            },
            {
              "id": "26a71509-4fe2-4111-b206-b990c1669d54",
              "name": "ratings",
              "type": "string",
              "value": "={{ $json.rawRequest.Ratings }}"
            },
            {
              "id": "73ecd764-ba3b-49f4-98f4-1d0aad049c16",
              "name": "experienceFeedback",
              "type": "string",
              "value": "={{ $json.rawRequest[\"Please describe your experience in detail.\"] }}"
            },
            {
              "id": "1badf182-58df-4832-8153-9b7e89fe928d",
              "name": "recommendUs",
              "type": "string",
              "value": "={{ $json.rawRequest[\"Would you recommend us to others?\"] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "ba3d2aca-2377-4cad-8aac-e75f7cac07bb",
      "name": "AI分析 — 情感与根本原因",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        464,
        0
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {
          "temperature": 0.7
        },
        "messages": {
          "values": [
            {
              "content": "=You are a Customer Feedback Analysis AI.\nYour job is to analyze raw customer feedback and produce structured, machine-readable insights.\n\nReturn a valid JSON object only, in the following exact format:\n\n{\n  \"Sentiment\": \"Positive | Neutral | Negative\",\n  \"RootCause\": \"short, human-readable explanation of the main reason behind the feedback\",\n  \"RecoveryDirection\": \"concise, internal note suggesting what the company should do next\",\n  \"RecoveryMessage\": \"optional draft message suggestion for the support team to consider (not to be sent automatically)\"\n}\n\nSubmission:\nRating: {{ $json.ratings }}\nExperience: {{ $json.experienceFeedback }}\nRecommendUs: {{ $json.recommendUs }}\n\nGuidelines:\n1. Be objective — classify based on sentiment and tone, not rating alone.\n2. Use \"RootCause\" to summarize the issue (e.g., “late delivery”, “rude support”, “confusing checkout”).\n3. Keep \"RecoveryDirection\" actionable (e.g., “offer compensation”, “escalate to ops”, “send apology email”).\n4. Keep \"RecoveryMessage\" short and generic (internal use only).\n5. Never include markdown, explanations, or extra text outside the JSON object."
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "DafVSGDfbwLzdqrw",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "9d427e02-2337-44eb-b074-29492fb6f5ff",
      "name": "检查反馈是否为负面或评分≤3",
      "type": "n8n-nodes-base.if",
      "position": [
        864,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "d0911e13-fee7-44ec-9c7a-dc14285d0d6b",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.message.content.Sentiment }}",
              "rightValue": "=Negative"
            },
            {
              "id": "f82433a5-15ee-46e2-bb2e-e6aaf527d2c4",
              "operator": {
                "type": "number",
                "operation": "lte"
              },
              "leftValue": "={{ $('Extract Key Fields (Normalize Input)').item.json.ratings }}",
              "rightValue": 3
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "61bad5e0-5b4c-463f-96de-688302bb62ea",
      "name": "AI生成器 — 个性化恢复消息",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1168,
        -112
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {
          "temperature": 0.7
        },
        "messages": {
          "values": [
            {
              "content": "=You are an AI Customer Experience Writer. \nYour job is to compose personalized, empathetic recovery messages for customers based on their feedback and AI analysis results for email and whatsapp both channels.\n\nReturn a valid JSON object only, in this exact format:\n\n{\n  \"Email Body\": \"string (the full customer-facing message)\",\n  \"Subject\": \"string (applicable only for email),\n  \"Tone\": \"Friendly | Professional | Empathetic\"\n}\n\nContext:\n- Customer Name: {{ $('Extract Key Fields (Normalize Input)').item.json.fullName }}\n- Brand Name: Your Brand Name\n- Sentiment: {{ $json.message.content.Sentiment }}\n- Root Cause: {{ $json.message.content.RootCause }}\n- Feedback Text: {{ $('Extract Key Fields (Normalize Input)').item.json.experienceFeedback }}\n- Recovery Direction: {{ $json.message.content.RecoveryDirection }}\n- Previous Recovery Message: {{$json[\"RecoveryMessage\"] || \"\"}}\n- Order ID: {{$json[\"order_id\"] || \"N/A\"}}\n- Rating: {{ $('Extract Key Fields (Normalize Input)').item.json.ratings }}\n- Recommend Us: {{ $('Extract Key Fields (Normalize Input)').item.json.recommendUs }}\n\nGuidelines:\n1. Be concise (60–100 words).\n2. Always start with the customer’s name and acknowledge their experience.\n3. Use empathy but maintain professionalism — no exaggerated apologies.\n4. Don’t overpromise — avoid mentioning refunds, compensation, or guarantees unless implied by context.\n5. End on a reassuring note and represent the brand positively.\n6. Return JSON only. No markdown or extra text."
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "id": "DafVSGDfbwLzdqrw",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "c43ead64-eec7-4178-875f-eff6f389a769",
      "name": "发送恢复邮件(负面路径)",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2000,
        -48
      ],
      "webhookId": "2cce16b7-f70a-48bb-8d1c-4bb428d379dd",
      "parameters": {
        "html": "={{ $json.message.content[\"Email Body\"] }}",
        "options": {},
        "subject": "={{ $json.message.content.Subject }}",
        "toEmail": "={{ $('Extract Key Fields (Normalize Input)').item.json.email }}",
        "fromEmail": "aayushmans0411@gmail.com"
      },
      "credentials": {
        "smtp": {
          "id": "29Uh9G1RUR82SFVn",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "2029a509-776a-439e-976b-e435511d9ac1",
      "name": "在Slack上通知客服团队",
      "type": "n8n-nodes-base.slack",
      "position": [
        1824,
        48
      ],
      "webhookId": "d79a277d-8d4a-4815-a974-aae0165b84d0",
      "parameters": {
        "text": "=🚨 *Negative Feedback Alert*\n*Name:* {{ $json[\"Full Name\"] }}\n*Rating:* {{ $json.Ratings }}\n*Root Cause:* {{ $json[\"Root Cause\"] }}\n*Order ID:* {{ $json[\"Order Id\"] }}\n*Recovery Msg Sent:* ✅",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "#customer_feedback"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "cf844ac0-b5fa-4051-bc26-98b6c27f6d4e",
      "name": "标记恢复消息已发送",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2256,
        -32
      ],
      "parameters": {
        "columns": {
          "value": {
            "Submission Id": "={{ $('Prepare Data for Sheet & Notifications (Negative Path)').item.json[\"Submission Id\"] }}",
            "Recovery Message Sent": "Yes"
          },
          "schema": [
            {
              "id": "Submission Id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Submission Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Whatsapp Number",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Whatsapp Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Order Id",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Order Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ratings",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Ratings",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Experience Feedback",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Experience Feedback",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recommend Us",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Recommend Us",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentiment",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Root Cause",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Root Cause",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Direction",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Recovery Direction",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Message",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Recovery Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Subject",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Email Subject",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Body",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Email Body",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Tone",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Recovery Tone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Message Sent",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Recovery Message Sent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "createdAt",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "createdAt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Submission Id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "=gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ your_google_sheet_document }}"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "FATfI7LIO9bsNKSj",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "3dae2739-cefe-44fa-962b-ea47c297d201",
      "name": "发送感谢邮件(正面路径)",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1472,
        432
      ],
      "webhookId": "64029ffa-e1a3-42dd-a9b7-0ff05356e79c",
      "parameters": {
        "html": "=<table role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#f8fafc;padding:32px 0;font-family:Helvetica,Arial,sans-serif;\">\n  <tr>\n    <td align=\"center\">\n      <table role=\"presentation\" width=\"600\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#ffffff;border-radius:10px;overflow:hidden;box-shadow:0 4px 10px rgba(0,0,0,0.05);\">\n        \n        <!-- Header -->\n        <tr>\n          <td style=\"background:#0b4a82;padding:20px 24px;color:#ffffff;font-size:20px;font-weight:600;\">\n            Your Brand Name Team\n          </td>\n        </tr>\n\n        <!-- Body -->\n        <tr>\n          <td style=\"padding:32px 40px;color:#0f172a;\">\n            <h2 style=\"margin:0 0 16px 0;font-size:22px;font-weight:600;color:#111827;\">Thank you, {{$json[\"Full Name\"]}}!</h2>\n\n            <p style=\"margin:0 0 16px 0;line-height:1.6;color:#334155;font-size:15px;\">\n              We’re so glad you enjoyed your experience with us. Your feedback keeps our team motivated to do better every day.\n            </p>\n\n            <p style=\"margin:0 0 20px 0;font-size:15px;color:#334155;\">\n              Would you mind sharing your experience publicly? It helps other customers discover us and keeps our small team growing!\n            </p>\n\n            <!-- CTA -->\n            <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin:24px 0;\">\n              <tr>\n                <td>\n                  <a href=\"Your review Page link\" style=\"background:#0b4a82;color:#ffffff;padding:12px 22px;text-decoration:none;border-radius:6px;font-size:15px;font-weight:600;display:inline-block;\">\n                    Leave a Review\n                  </a>\n                </td>\n              </tr>\n            </table>\n\n            <p style=\"margin:16px 0 0 0;font-size:13px;color:#64748b;\">\n              Thanks again for being part of the Your Brand Name community 💙  \n              <br><strong>— The Customer Experience Team</strong>\n            </p>\n          </td>\n        </tr>\n\n        <!-- Footer -->\n        <tr>\n          <td style=\"padding:16px 40px;background:#f9fafb;border-top:1px solid #e2e8f0;font-size:13px;color:#64748b;text-align:center;\">\n            © 2025 Your Brand Name • <a href=\"Unsubscribe Link\" style=\"color:#94a3b8;text-decoration:none;\">Unsubscribe</a>\n          </td>\n        </tr>\n      </table>\n    </td>\n  </tr>\n</table>\n",
        "options": {},
        "subject": "A small favor? Share your happy experience with others!",
        "toEmail": "={{ $json[\"Email\"] }}",
        "fromEmail": "aayushmans0411@gmail.com"
      },
      "credentials": {
        "smtp": {
          "id": "29Uh9G1RUR82SFVn",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6199baa6-140d-45f4-a786-e81f9c022771",
      "name": "在Google表格中记录反馈(负面路径)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1840,
        -192
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "Submission Id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Submission Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Whatsapp Number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Whatsapp Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Order Id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Order Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ratings",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Ratings",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Experience Feedback",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Experience Feedback",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recommend Us",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Recommend Us",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentiment",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Root Cause",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Root Cause",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Direction",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Recovery Direction",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Message",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Recovery Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Subject",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email Subject",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Body",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email Body",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Tone",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Recovery Tone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Message Sent",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Recovery Message Sent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "createdAt",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "createdAt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "=gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{your_google_sheet_document}}"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "FATfI7LIO9bsNKSj",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "fd15071e-5b5e-4ce1-9494-9df8623950fc",
      "name": "为表格和通知准备数据(负面路径)",
      "type": "n8n-nodes-base.set",
      "position": [
        1520,
        -112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d0ecfce6-a795-4899-b8ca-61930ca608b1",
              "name": "Submission Id",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.submissionId }}"
            },
            {
              "id": "48eb542c-26eb-4bcf-99a8-b89da94b09e6",
              "name": "Full Name",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.fullName }}"
            },
            {
              "id": "0ba76f73-c547-4878-ae0d-88082ae41ffc",
              "name": "Email",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.email }}"
            },
            {
              "id": "5cb71cf8-b6ba-4b5e-a023-77572baf7f2d",
              "name": "Whatsapp Number",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.whatsappNumber }}"
            },
            {
              "id": "dbf840c6-6c5c-4ccc-945d-c9bf2666e614",
              "name": "Order Id",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.orderId }}"
            },
            {
              "id": "e801c1b2-793b-474a-91c0-be92f3474a70",
              "name": "Ratings",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.ratings }}"
            },
            {
              "id": "4ec10cde-0678-4928-a278-d71b3f9bbe8a",
              "name": "Experience Feedback",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.experienceFeedback }}"
            },
            {
              "id": "c100a63a-0971-4a00-af92-e5b735fa1682",
              "name": "Recommend Us",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.recommendUs }}"
            },
            {
              "id": "02ff8101-ddf0-4d2e-9639-ea67e6088143",
              "name": "Sentiment",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.Sentiment }}"
            },
            {
              "id": "ff1e1c61-57f0-4877-be1d-499ad223fbf0",
              "name": "Root Cause",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.RootCause }}"
            },
            {
              "id": "829756fc-5b76-4dbb-aaba-ee7fde17eaa0",
              "name": "Recovery Direction",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.RecoveryDirection }}"
            },
            {
              "id": "f767550e-66ba-44c0-9182-7379f12e5488",
              "name": "Recovery Message",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.RecoveryMessage }}"
            },
            {
              "id": "f83ac8b4-02d2-494d-a066-5c96a5ffe9ec",
              "name": "Email Subject",
              "type": "string",
              "value": "={{ $json.message.content.Subject }}"
            },
            {
              "id": "1f142e06-ca48-4fe6-92ac-f27e871e2721",
              "name": "Email Body",
              "type": "string",
              "value": "={{ $json.message.content[\"Email Body\"] }}"
            },
            {
              "id": "17c39abf-9a2d-4d1a-91fd-afa1240678c1",
              "name": "Recovery Tone",
              "type": "string",
              "value": "={{ $json.message.content.Tone }}"
            },
            {
              "id": "6cf5fcab-5469-4583-877b-4b801835d530",
              "name": "Recovery Message Sent",
              "type": "string",
              "value": ""
            },
            {
              "id": "56b12b3c-2804-4956-98d9-4ea2e42c2e21",
              "name": "createdAt",
              "type": "string",
              "value": "={{ $now.toLocal().toMillis() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "bdcd7bb0-8d61-4bdd-b0f3-e4ff61efb4d7",
      "name": "为表格和通知准备数据(正面路径)",
      "type": "n8n-nodes-base.set",
      "position": [
        1248,
        352
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d0ecfce6-a795-4899-b8ca-61930ca608b1",
              "name": "Submission Id",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.submissionId }}"
            },
            {
              "id": "48eb542c-26eb-4bcf-99a8-b89da94b09e6",
              "name": "Full Name",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.fullName }}"
            },
            {
              "id": "0ba76f73-c547-4878-ae0d-88082ae41ffc",
              "name": "Email",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.email }}"
            },
            {
              "id": "5cb71cf8-b6ba-4b5e-a023-77572baf7f2d",
              "name": "Whatsapp Number",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.whatsappNumber }}"
            },
            {
              "id": "dbf840c6-6c5c-4ccc-945d-c9bf2666e614",
              "name": "Order Id",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.orderId }}"
            },
            {
              "id": "e801c1b2-793b-474a-91c0-be92f3474a70",
              "name": "Ratings",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.ratings }}"
            },
            {
              "id": "4ec10cde-0678-4928-a278-d71b3f9bbe8a",
              "name": "Experience Feedback",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.experienceFeedback }}"
            },
            {
              "id": "c100a63a-0971-4a00-af92-e5b735fa1682",
              "name": "Recommend Us",
              "type": "string",
              "value": "={{ $('Extract Key Fields (Normalize Input)').item.json.recommendUs }}"
            },
            {
              "id": "02ff8101-ddf0-4d2e-9639-ea67e6088143",
              "name": "Sentiment",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.Sentiment }}"
            },
            {
              "id": "ff1e1c61-57f0-4877-be1d-499ad223fbf0",
              "name": "Root Cause",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.RootCause }}"
            },
            {
              "id": "829756fc-5b76-4dbb-aaba-ee7fde17eaa0",
              "name": "Recovery Direction",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.RecoveryDirection }}"
            },
            {
              "id": "f767550e-66ba-44c0-9182-7379f12e5488",
              "name": "Recovery Message",
              "type": "string",
              "value": "={{ $('AI Analysis — Sentiment & Root Cause').item.json.message.content.RecoveryMessage }}"
            },
            {
              "id": "56b12b3c-2804-4956-98d9-4ea2e42c2e21",
              "name": "createdAt",
              "type": "string",
              "value": "={{ $now.toLocal().toMillis() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "4e18d0fb-c762-433a-9ddf-1ab13204e872",
      "name": "在Google表格中记录反馈(正面路径)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1456,
        240
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "Submission Id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Submission Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Whatsapp Number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Whatsapp Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Order Id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Order Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Ratings",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Ratings",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Experience Feedback",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Experience Feedback",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recommend Us",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Recommend Us",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentiment",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Root Cause",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Root Cause",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Direction",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Recovery Direction",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Recovery Message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Subject",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Subject",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Body",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Body",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Tone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Recovery Tone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Recovery Message Sent",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Recovery Message Sent",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "createdAt",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "createdAt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1YYmyQNTGSdBQcoHuUI1tnd081Nq-5FVcN8KWGLf0iK8/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=1YYmyQNTGSdBQcoHuUI1tnd081Nq-5FVcN8KWGLf0iK8"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "id": "FATfI7LIO9bsNKSj",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e6f586ea-130e-46a6-aedd-cf9154f7f401",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -880
      ],
      "parameters": {
        "width": 400,
        "height": 368,
        "content": "## 🧠 工作流摘要"
      },
      "typeVersion": 1
    },
    {
      "id": "fb284404-2e7a-4316-a323-5309afd80e93",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        -416
      ],
      "parameters": {
        "color": 4,
        "width": 352,
        "height": 608,
        "content": "## 清理输入数据"
      },
      "typeVersion": 1
    },
    {
      "id": "8a3a00f8-9844-49c2-ab38-567b40e64e31",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        -416
      ],
      "parameters": {
        "color": 6,
        "width": 320,
        "height": 608,
        "content": "## AI情感与根本原因检测"
      },
      "typeVersion": 1
    },
    {
      "id": "3cea0b32-e8af-463e-8846-3015815f0e9a",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        736,
        -416
      ],
      "parameters": {
        "color": 5,
        "width": 352,
        "height": 608,
        "content": "## 路径路由逻辑"
      },
      "typeVersion": 1
    },
    {
      "id": "0f039f93-f1db-42f6-836d-2172daeb01d7",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1104,
        -848
      ],
      "parameters": {
        "color": 3,
        "width": 1360,
        "height": 1040,
        "content": "## AI恢复消息撰写器"
      },
      "typeVersion": 1
    },
    {
      "id": "82cd08d7-0913-42ea-8a4f-1aaa7a5a652f",
      "name": "便签5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        208
      ],
      "parameters": {
        "width": 576,
        "height": 656,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "19b6d6fc-4ef5-421b-9048-1c8504134e1e",
      "name": "便签6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -496
      ],
      "parameters": {
        "width": 400,
        "height": 400,
        "content": "## 🔐 如何获取Jotform API凭证"
      },
      "typeVersion": 1
    },
    {
      "id": "dd336412-bf91-45fd-92db-63869ff96040",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        -880
      ],
      "parameters": {
        "width": 512,
        "height": 448,
        "content": "## ⚙️ Jotform配置指南(适用于n8n反馈工作流)"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "Jotform — New Feedback Submission": {
      "main": [
        [
          {
            "node": "Extract Key Fields (Normalize Input)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Recovery Email (Negative Path)": {
      "main": [
        [
          {
            "node": "Mark Recovery Message Sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Key Fields (Normalize Input)": {
      "main": [
        [
          {
            "node": "AI Analysis — Sentiment & Root Cause",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Analysis — Sentiment & Root Cause": {
      "main": [
        [
          {
            "node": "Check if Feedback is Negative or Rating ≤ 3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Appreciation Email (Positive Path)": {
      "main": [
        []
      ]
    },
    "Check if Feedback is Negative or Rating ≤ 3": {
      "main": [
        [
          {
            "node": "AI Generator — Personalized Recovery Message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Prepare Data for Sheet & Notifications (Positive Path)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Generator — Personalized Recovery Message": {
      "main": [
        [
          {
            "node": "Prepare Data for Sheet & Notifications (Negative Path)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Data for Sheet & Notifications (Negative Path)": {
      "main": [
        [
          {
            "node": "Log Feedback in Google Sheet (Negative Path)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Recovery Email (Negative Path)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Notify CX Team on Slack",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Data for Sheet & Notifications (Positive Path)": {
      "main": [
        [
          {
            "node": "Log Feedback in Google Sheet (Positive Path)",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Appreciation Email (Positive Path)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级

需要付费吗?

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

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

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

外部链接
在 n8n.io 查看

分享此工作流