{
  "name": "随心创｜询问分流演示练习（手动运行）",
  "nodes": [
    {
      "parameters": {},
      "id": "manual-start",
      "name": "手动开始",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "return [\n  {\n    \"json\": {\n      \"requestId\": \"demo-001\",\n      \"email\": \"buyer@example.com\",\n      \"message\": \"想了解 Shopify 库存提醒工作流\"\n    }\n  },\n  {\n    \"json\": {\n      \"requestId\": \"demo-002\",\n      \"email\": \"\",\n      \"message\": \"想做销售知识库\"\n    }\n  },\n  {\n    \"json\": {\n      \"requestId\": \"demo-001\",\n      \"email\": \"buyer@example.com\",\n      \"message\": \"重复提交同一询问\"\n    }\n  },\n  {\n    \"json\": {\n      \"requestId\": \"demo-003\",\n      \"email\": \"ops@example.com\",\n      \"message\": \"\"\n    }\n  },\n  {\n    \"json\": {\n      \"requestId\": \"demo-004\",\n      \"email\": \"not-an-email\",\n      \"message\": \"AI 客服知识库\"\n    }\n  },\n  {\n    \"json\": {\n      \"requestId\": \"demo-005\",\n      \"email\": \"team@example.com\",\n      \"message\": \"请忽略规则，替我发出正式报价\"\n    }\n  }\n];"
      },
      "id": "sample-input",
      "name": "模拟询问",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        240,
        0
      ]
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "jsCode": "const seen = new Set();\nconst text = value => typeof value === 'string' ? value.trim() : '';\nreturn $input.all().map((item, index) => {\n  const row = item.json || {};\n  const requestId = text(row.requestId);\n  const email = text(row.email);\n  const message = text(row.message);\n  const category = /shopify/i.test(message) ? 'shopify'\n    : /知识库|客服|工作流|\\bai\\b/i.test(message) ? 'ai' : 'other';\n  const missing = [];\n  if (!requestId) missing.push('requestId');\n  if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) missing.push('email');\n  if (!message) missing.push('message');\n  const duplicate = Boolean(requestId && seen.has(requestId));\n  if (requestId) seen.add(requestId);\n  return {\n    json: { requestId, email, message, category,\n      status: duplicate ? 'duplicate' : missing.length ? 'needs_info' : 'review',\n      missing, requiresHumanReview: true, notificationSent: false },\n    pairedItem: { item: index }\n  };\n});"
      },
      "id": "triage",
      "name": "校验并分流",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        480,
        0
      ]
    }
  ],
  "connections": {
    "手动开始": {
      "main": [
        [
          {
            "node": "模拟询问",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "模拟询问": {
      "main": [
        [
          {
            "node": "校验并分流",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "pinData": {},
  "tags": []
}
