{
  "name": "Excel\u6570\u636e\u81ea\u52a8\u6e05\u6d17\u4e0e\u6821\u9a8c",
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -240,
        -260
      ],
      "id": "b3b60d87-0501-4e9c-9633-37f0a169ba42",
      "name": "When clicking \u2018Test workflow\u2019"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "1eAwxlsPHp_wlMjyibUpm-Z6U-BIfF9lnvQQv4JaCefg",
          "mode": "list",
          "cachedResultName": "\u5546\u54c1\u8ba2\u5355\u8868",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eAwxlsPHp_wlMjyibUpm-Z6U-BIfF9lnvQQv4JaCefg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 1483902731,
          "mode": "list",
          "cachedResultName": "\u5de5\u4f5c\u88681\uff08\u526f\u672c\uff09 2",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eAwxlsPHp_wlMjyibUpm-Z6U-BIfF9lnvQQv4JaCefg/edit#gid=1483902731"
        },
        "combineFilters": "OR",
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        -20,
        -260
      ],
      "id": "8cfb6055-d841-4ad7-ad2e-3a4ad90470ee",
      "name": "Google Sheets",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "// \u589e\u5f3a\u7684\u683c\u5f0f\u5316\u65e5\u671f\u51fd\u6570\nfunction formatDate(dateInput) {\n  if (!dateInput) return dateInput;\n  \n  let dateStr = String(dateInput).trim();\n  \n  // \u5904\u74068\u4f4d\u6570\u5b57\u683c\u5f0f (\u5982 20240501)\n  if (/^\\d{8}$/.test(dateStr)) {\n    const year = dateStr.substring(0, 4);\n    const month = dateStr.substring(4, 6);\n    const day = dateStr.substring(6, 8);\n    return `${year}-${month}-${day}`;\n  }\n  \n  // \u5904\u74067\u4f4d\u6570\u5b57\u683c\u5f0f (\u5982 2025529 \u8868\u793a 2025-05-29)\n  if (/^\\d{7}$/.test(dateStr)) {\n    const year = dateStr.substring(0, 4);\n    const month = dateStr.substring(4, 5).padStart(2, '0');\n    const day = dateStr.substring(5, 7).padStart(2, '0');\n    return `${year}-${month}-${day}`;\n  }\n  \n  // \u5904\u74066\u4f4d\u6570\u5b57\u683c\u5f0f (\u5982 202453 \u8868\u793a 2024-05-03)\n  if (/^\\d{6}$/.test(dateStr)) {\n    const year = dateStr.substring(0, 4);\n    const month = dateStr.substring(4, 5).padStart(2, '0');\n    const day = dateStr.substring(5, 6).padStart(2, '0');\n    return `${year}-${month}-${day}`;\n  }\n  \n  // \u5904\u74065\u4f4d\u6570\u5b57\u683c\u5f0f (\u5982 24529 \u8868\u793a 2024-05-29)\n  if (/^\\d{5}$/.test(dateStr)) {\n    const year = '20' + dateStr.substring(0, 2);\n    const month = dateStr.substring(2, 3).padStart(2, '0');\n    const day = dateStr.substring(3, 5).padStart(2, '0');\n    return `${year}-${month}-${day}`;\n  }\n  \n  // \u5904\u7406\u5e26\u659c\u6760\u7684\u65e5\u671f\u683c\u5f0f (\u5982 2025/05/29 \u6216 2025/5/29)\n  const slashRegex = /^(\\d{4})[\\/\\\\](\\d{1,2})[\\/\\\\](\\d{1,2})$/;\n  if (slashRegex.test(dateStr)) {\n    const [_, year, month, day] = dateStr.match(slashRegex);\n    return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5904\u7406\u5e26\u70b9\u7684\u65e5\u671f\u683c\u5f0f (\u5982 2025.05.29 \u6216 2025.5.29)\n  const dotRegex = /^(\\d{4})\\.(\\d{1,2})\\.(\\d{1,2})$/;\n  if (dotRegex.test(dateStr)) {\n    const [_, year, month, day] = dateStr.match(dotRegex);\n    return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5904\u7406 MM-DD-YYYY \u683c\u5f0f\n  const mmddyyyyRegex = /^(\\d{1,2})-(\\d{1,2})-(\\d{4})$/;\n  if (mmddyyyyRegex.test(dateStr)) {\n    const [_, month, day, year] = dateStr.match(mmddyyyyRegex);\n    return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5904\u7406 DD/MM/YYYY \u683c\u5f0f\n  const ddmmyyyyRegex = /^(\\d{1,2})[\\/\\\\](\\d{1,2})[\\/\\\\](\\d{4})$/;\n  if (ddmmyyyyRegex.test(dateStr)) {\n    const [_, day, month, year] = dateStr.match(ddmmyyyyRegex);\n    return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5904\u7406 YYYY-MM-DD \u683c\u5f0f (\u5df2\u7ecf\u662f\u76ee\u6807\u683c\u5f0f\uff0c\u4f46\u786e\u4fdd\u6708\u548c\u65e5\u662f\u4e24\u4f4d\u6570)\n  const yyyymmddRegex = /^(\\d{4})-(\\d{1,2})-(\\d{1,2})$/;\n  if (yyyymmddRegex.test(dateStr)) {\n    const [_, year, month, day] = dateStr.match(yyyymmddRegex);\n    return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5904\u7406\u4e2d\u6587\u65e5\u671f\u683c\u5f0f (\u5982 2025\u5e7405\u670829\u65e5 \u6216 2025\u5e745\u670829\u65e5)\n  const chineseRegex = /^(\\d{4})\u5e74(\\d{1,2})\u6708(\\d{1,2})\u65e5?$/;\n  if (chineseRegex.test(dateStr)) {\n    const [_, year, month, day] = dateStr.match(chineseRegex);\n    return `${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5904\u7406\u6708\u4efd\u540d\u79f0\u7684\u65e5\u671f\u683c\u5f0f (\u5982 29 May 2025 \u6216 May 29, 2025)\n  const monthNames = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\n  const monthNamesShort = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\n  \n  // \u5c1d\u8bd5\u5339\u914d \"29 May 2025\" \u683c\u5f0f\n  const dayMonthYearRegex = new RegExp(`^(\\\\d{1,2})\\\\s+(${monthNames.join('|')}|${monthNamesShort.join('|')})\\\\s+(\\\\d{4})$`, 'i');\n  if (dayMonthYearRegex.test(dateStr)) {\n    const [_, day, monthStr, year] = dateStr.match(dayMonthYearRegex);\n    const monthLower = monthStr.toLowerCase();\n    let month;\n    if (monthNames.includes(monthLower)) {\n      month = (monthNames.indexOf(monthLower) + 1).toString().padStart(2, '0');\n    } else {\n      month = (monthNamesShort.indexOf(monthLower) + 1).toString().padStart(2, '0');\n    }\n    return `${year}-${month}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5c1d\u8bd5\u5339\u914d \"May 29, 2025\" \u683c\u5f0f\n  const monthDayYearRegex = new RegExp(`^(${monthNames.join('|')}|${monthNamesShort.join('|')})\\\\s+(\\\\d{1,2})(?:,|\\\\s)\\\\s*(\\\\d{4})$`, 'i');\n  if (monthDayYearRegex.test(dateStr)) {\n    const [_, monthStr, day, year] = dateStr.match(monthDayYearRegex);\n    const monthLower = monthStr.toLowerCase();\n    let month;\n    if (monthNames.includes(monthLower)) {\n      month = (monthNames.indexOf(monthLower) + 1).toString().padStart(2, '0');\n    } else {\n      month = (monthNamesShort.indexOf(monthLower) + 1).toString().padStart(2, '0');\n    }\n    return `${year}-${month}-${day.padStart(2, '0')}`;\n  }\n  \n  // \u5982\u679c\u4ee5\u4e0a\u683c\u5f0f\u90fd\u4e0d\u5339\u914d\uff0c\u5c1d\u8bd5\u4f7f\u7528Date\u5bf9\u8c61\u89e3\u6790\n  // \u4f46\u8981\u5c0f\u5fc3\u5904\u7406\uff0c\u907f\u514d\u610f\u5916\u7684\u89e3\u6790\u7ed3\u679c\n  try {\n    const date = new Date(dateStr);\n    if (!isNaN(date.getTime())) {\n      const year = date.getFullYear();\n      const month = (date.getMonth() + 1).toString().padStart(2, '0');\n      const day = date.getDate().toString().padStart(2, '0');\n      // \u9a8c\u8bc1\u89e3\u6790\u7ed3\u679c\u662f\u5426\u5408\u7406\n      if (year >= 1900 && year <= 2100) {\n        return `${year}-${month}-${day}`;\n      }\n    }\n  } catch (e) {\n    // \u89e3\u6790\u5931\u8d25\uff0c\u7ee7\u7eed\u4f7f\u7528\u539f\u59cb\u503c\n  }\n  \n  // \u5982\u679c\u6240\u6709\u5c1d\u8bd5\u90fd\u5931\u8d25\uff0c\u8fd4\u56de\u539f\u59cb\u503c\n  return dateStr;\n}\n\n// \u4e3b\u5904\u7406\u51fd\u6570\nfunction processData(items) {\n  return items.map(item => {\n    const data = item.json;\n    const anomalies = [];\n    \n    // 1. \u5904\u7406\u6570\u91cf\u3001\u5355\u4ef7\u3001\u603b\u91d1\u989d\n    const quantity = data.\u6570\u91cf;\n    const unitPrice = data.\u5355\u4ef7;\n    let totalAmount = data.\u603b\u91d1\u989d;\n    \n    // \u5982\u679c\u603b\u91d1\u989d\u4e3a\u7a7a\u4f46\u6709\u6570\u91cf\u548c\u5355\u4ef7\n    if ((totalAmount === \"\" || totalAmount === null || totalAmount === undefined) && quantity && unitPrice) {\n      totalAmount = quantity * unitPrice;\n      data.\u603b\u91d1\u989d = totalAmount;\n      anomalies.push(`\u603b\u91d1\u989d\u8865\u5168`);\n    }\n    // \u5982\u679c\u6570\u91cf\u4e3a\u7a7a\u4f46\u6709\u5355\u4ef7\u548c\u603b\u91d1\u989d\n    else if ((quantity === \"\" || quantity === null || quantity === undefined) && unitPrice && totalAmount) {\n      const calculatedQuantity = totalAmount / unitPrice;\n      data.\u6570\u91cf = calculatedQuantity;\n      anomalies.push(`\u6570\u91cf\u8865\u5168`);\n    }\n    // \u5982\u679c\u5355\u4ef7\u4e3a\u7a7a\u4f46\u6709\u6570\u91cf\u548c\u603b\u91d1\u989d\n    else if ((unitPrice === \"\" || unitPrice === null || unitPrice === undefined) && quantity && totalAmount) {\n      const calculatedUnitPrice = totalAmount / quantity;\n      data.\u5355\u4ef7 = calculatedUnitPrice;\n      anomalies.push(`\u5355\u4ef7\u8865\u5168`);\n    }\n    \n    // 2. \u683c\u5f0f\u5316\u65e5\u671f\n    const originalDate = data.\u4e0b\u5355\u65e5\u671f;\n    const formattedDate = formatDate(data.\u4e0b\u5355\u65e5\u671f);\n    if (String(originalDate) !== formattedDate) {\n      anomalies.push(`\u4e0b\u5355\u65e5\u671f\u8865\u5168`);\n      data.\u4e0b\u5355\u65e5\u671f = formattedDate;\n    }\n    \n    // 3. \u6dfb\u52a0\u6570\u636e\u5f02\u5e38\u5b57\u6bb5\n    data.\u6570\u636e\u5f02\u5e38 = anomalies.length > 0 ? anomalies.join('; ') : '\u65e0';\n    \n    return {\n      json: data,\n      pairedItem: item.pairedItem\n    };\n  });\n}\n\n// \u5904\u7406\u8f93\u5165\u6570\u636e\nreturn processData($input.all());\n"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        800,
        -260
      ],
      "id": "34e158d3-de28-4423-8262-00a19d02f246",
      "name": "Code"
    },
    {
      "parameters": {
        "operation": "update",
        "documentId": {
          "__rl": true,
          "value": "1eAwxlsPHp_wlMjyibUpm-Z6U-BIfF9lnvQQv4JaCefg",
          "mode": "list",
          "cachedResultName": "\u5546\u54c1\u8ba2\u5355\u8868",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eAwxlsPHp_wlMjyibUpm-Z6U-BIfF9lnvQQv4JaCefg/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": 1483902731,
          "mode": "list",
          "cachedResultName": "\u5de5\u4f5c\u88681\uff08\u526f\u672c\uff09 2",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1eAwxlsPHp_wlMjyibUpm-Z6U-BIfF9lnvQQv4JaCefg/edit#gid=1483902731"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "\u6536\u8d27\u5730\u5740": "={{ $json.output.address }}",
            "\u8ba2\u5355ID": "={{ $json[\"\u8ba2\u5355ID\"] }}",
            "\u6570\u91cf": "={{ $json[\"\u6570\u91cf\"] }}",
            "\u5355\u4ef7": "={{ $json[\"\u5355\u4ef7\"] }}",
            "\u4e0b\u5355\u65e5\u671f": "={{ $json[\"\u4e0b\u5355\u65e5\u671f\"] }}",
            "\u603b\u91d1\u989d": "={{ $json[\"\u603b\u91d1\u989d\"] }}",
            "\u5f02\u5e38\u8865\u5168": "={{ $json[\"\u6570\u636e\u5f02\u5e38\"] }}"
          },
          "matchingColumns": [
            "\u8ba2\u5355ID"
          ],
          "schema": [
            {
              "id": "\u8ba2\u5355ID",
              "displayName": "\u8ba2\u5355ID",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "\u5ba2\u6237\u59d3\u540d",
              "displayName": "\u5ba2\u6237\u59d3\u540d",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "\u8054\u7cfb\u7535\u8bdd",
              "displayName": "\u8054\u7cfb\u7535\u8bdd",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "\u6536\u8d27\u5730\u5740",
              "displayName": "\u6536\u8d27\u5730\u5740",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u5546\u54c1ID",
              "displayName": "\u5546\u54c1ID",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "\u6570\u91cf",
              "displayName": "\u6570\u91cf",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u5355\u4ef7",
              "displayName": "\u5355\u4ef7",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u603b\u91d1\u989d",
              "displayName": "\u603b\u91d1\u989d",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u4e0b\u5355\u65e5\u671f",
              "displayName": "\u4e0b\u5355\u65e5\u671f",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u9500\u552e\u5458",
              "displayName": "\u9500\u552e\u5458",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "\u8054\u7cfb\u65b9\u5f0f",
              "displayName": "\u8054\u7cfb\u65b9\u5f0f",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "\u5f02\u5e38\u8865\u5168",
              "displayName": "\u5f02\u5e38\u8865\u5168",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "displayName": "row_number",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "readOnly": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        1016,
        -260
      ],
      "id": "62211a47-e18c-455d-a1be-70d903fa06a5",
      "name": "Google Sheets1",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=\u8ba2\u5355ID:{{ $json[\"\u8ba2\u5355ID\"] }}\n\u6536\u8d27\u5730\u5740\uff1a{{ $json[\"\u6536\u8d27\u5730\u5740\"] }}",
        "hasOutputParser": true,
        "messages": {
          "messageValues": [
            {
              "message": "\u4f60\u662f\u4e00\u4e2a\u6570\u636e\u6e05\u6d17\u4e13\u5bb6\uff0c\u5e2e\u52a9\u6211\u4f18\u5316\u6536\u8d27\u5730\u5740\uff0c\u628a\u7528\u6237\u7684\u5730\u5740\u4fe1\u606f\u4fee\u6539\u6210\u6807\u51c6\u5316\u7684\u7701\u5e02\u533a\u683c\u5f0f\u663e\u793a"
            }
          ]
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.6,
      "position": [
        200,
        -140
      ],
      "id": "c117237a-10fb-42d7-a908-1486a82be81a",
      "name": "Basic LLM Chain"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatDeepSeek",
      "typeVersion": 1,
      "position": [
        180,
        100
      ],
      "id": "07a61a28-33ec-453f-be81-2f2614163da5",
      "name": "DeepSeek Chat Model",
      "credentials": {
        "deepSeekApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n    \"orderid\": \"\u8ba2\u5355ID\",\n\t\"address\": \"\u6536\u8d27\u5730\u5740\"\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.2,
      "position": [
        380,
        100
      ],
      "id": "066926df-f473-4cf9-9aa2-7c3ce5c74eea",
      "name": "Structured Output Parser"
    },
    {
      "parameters": {
        "mode": "combine",
        "advanced": true,
        "mergeByFields": {
          "values": [
            {
              "field1": "\u8ba2\u5355ID",
              "field2": "output.orderid"
            }
          ]
        },
        "joinMode": "enrichInput1",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.1,
      "position": [
        576,
        -260
      ],
      "id": "354a20ab-d96d-4342-9612-39400fa7a59c",
      "name": "Merge"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "f6f39899-7d3b-409b-88a1-894cfb76b955",
              "leftValue": "={{ $('Google Sheets').item.json[\"\u8054\u7cfb\u7535\u8bdd\"].toString() }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            },
            {
              "id": "0b90fe67-8d84-4197-9ff3-3c959e8b627a",
              "leftValue": "={{  $('Google Sheets').item.json[\"\u8054\u7cfb\u7535\u8bdd\"].toString().match(/^1[3-9]\\d{9}$/) !== null }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        1236,
        -260
      ],
      "id": "4f18b9c2-2da7-43b5-a68b-e306a3456e19",
      "name": "If"
    },
    {
      "parameters": {
        "content": "## \u89e6\u53d1\u6761\u4ef6\n- \u53ef\u4ee5\u8bbe\u7f6e\u4e3a\u5b9a\u65f6\u89e6\u53d1\n- \u4e5f\u53ef\u4ee5\u8bbe\u7f6e\u4e3a \u8868\u683c\u6570\u636e\u53d8\u52a8\u89e6\u53d1\u3002\u5f53\u65b0\u6570\u636e\u5199\u5165\uff0c\u81ea\u52a8\u89e6\u53d1\u6570\u636e\u683c\u5f0f\u5316\u5de5\u4f5c\u6d41\u7a0b\n\n## \u8868\u683c\u6570\u636e\n- \u53ef\u4ee5\u662f\u4e91\u8868\u683c\uff0c\u6216\u8005\u672c\u5730\u7684excel\u8868\u683c\uff0c\u6216\u8005notion\u8868\u683c\u90fd\u53ef\u4ee5\n\n## \u6536\u83b7\u5730\u5740\u5904\u7406\n- \u5982\u679c\u6570\u636e\u6761\u6570\u975e\u5e38\u591a\uff0c\u53ef\u4ee5\u5206\u6279\u6267\u884c\uff0c\u4f7f\u7528\u62c6\u5206\u8282\u70b9+loop\u5faa\u73af\u8282\u70b9+\u5408\u5e76\u8282\u70b9\u5b9e\u73b0\u6bcf\u6b21\u53ea\u5904\u7406\u4e00\u90e8\u5206\u5185\u5bb9\u3002\n\n",
        "height": 380,
        "width": 340,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        -20
      ],
      "typeVersion": 1,
      "id": "ea5062a7-e6d5-45e7-a24d-8d2896260300",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "chatId": "={{ $('Google Sheets').item.json[\"\u8054\u7cfb\u65b9\u5f0f\"] }}",
        "text": "=***\u8ba2\u5355\u53d1\u8d27\u901a\u77e5***\n\u8ba2\u5355\u7f16\u53f7\uff1a***{{ $('Google Sheets').item.json[\"\u8ba2\u5355ID\"] }}***\n\u5ba2\u6237\u59d3\u540d\uff1a***{{ $('Google Sheets').item.json[\"\u5ba2\u6237\u59d3\u540d\"] }}***\n\u8ba2\u5355\u6570\u636e\u6838\u5b9e\u65e0\u8bef\uff0c\u7b49\u5f85\u53d1\u8d27\uff01\n",
        "additionalFields": {
          "appendAttribution": false,
          "parse_mode": "Markdown"
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1460,
        -400
      ],
      "id": "7d83cbf0-8577-4a78-b2a9-6728eb0f5a6f",
      "name": "\u8ba2\u5355\u65e0\u8bef\u901a\u77e5",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "={{ $('Google Sheets').item.json[\"\u8054\u7cfb\u65b9\u5f0f\"] }}",
        "text": "=***\u8ba2\u5355\u6570\u636e\u5f02\u5e38\u901a\u77e5***\n\n\u4f60\u7684\u8ba2ID\uff1a***{{ $('Google Sheets').item.json[\"\u8ba2\u5355ID\"] }}***\uff0c\u5ba2\u6237\u540d\uff1a***{{ $('Google Sheets').item.json[\"\u5ba2\u6237\u59d3\u540d\"] }}***\uff1b\n\u8054\u7cfb\u65b9\u5f0f\u5b58\u5728\u5f02\u5e38\uff1b\u8bf7\u53ca\u65f6\u68c0\u67e5\u8ba2\u5355\u6570\u636e\uff0c\u4ee5\u514d\u53d1\u8d27\u5931\u8d25\uff01\n",
        "additionalFields": {
          "appendAttribution": false,
          "parse_mode": "Markdown"
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        1460,
        -160
      ],
      "id": "a6b99a5e-90b0-484f-888b-104fcde578b3",
      "name": "\u8ba2\u5355\u5f02\u5e38\u901a\u77e5",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "## \u901a\u77e5\n- \u53ef\u4ee5\u8bbe\u5b9a\u4e0d\u540c\u7684\u901a\u77e5\u65b9\u5f0f\uff0c\u5982\uff1a\u77ed\u4fe1\u3001AI\u7535\u8bdd\u3001\u9489\u9489\u3001telegram\u3001slack\u3001whatsapp\u7b49",
        "width": 340,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1420,
        80
      ],
      "typeVersion": 1,
      "id": "f1d9de59-f6ab-4261-a67e-983589624a3a",
      "name": "Sticky Note1"
    }
  ],
  "connections": {
    "When clicking \u2018Test workflow\u2019": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Google Sheets1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "DeepSeek Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets1": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "\u8ba2\u5355\u65e0\u8bef\u901a\u77e5",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u8ba2\u5355\u5f02\u5e38\u901a\u77e5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "080a5ca7-140e-4a44-a285-24f18fba6a4a",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "j79EIWruCtJxrvjE",
  "tags": []
}