8
n8n 中文网amn8n.com

使用BrowserAct实现电商店铺新品自动监控

高级

这是一个Market Research领域的自动化工作流,包含 24 个节点。主要使用 If, Code, Merge, Slack, GoogleSheets 等节点。 使用BrowserAct和Slack警报监控Shopify店铺新品

前置要求
  • Slack Bot Token 或 Webhook URL
  • Google Sheets API 凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "jSHygjNuZdSzA83e",
  "meta": {
    "instanceId": "88804d8e264d231c18413147cc92e4245b20ae7b97d774bad847556f645c8192",
    "templateCredsSetupCompleted": true
  },
  "name": "使用 BrowserAct 实现电商店铺新品自动监控",
  "tags": [],
  "nodes": [
    {
      "id": "4a57ae79-3420-41de-8712-3bfb0638ee44",
      "name": "计划触发器",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -544,
        -128
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ae8004bb-cbc4-463d-bfa1-f4e0025f89a3",
      "name": "获取表格中的行",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -416,
        -128
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=0",
          "cachedResultName": "Competitor Store List"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
          "cachedResultName": "Shopify New Product Monitor"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "wAMAqU43zjVjlpuA",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "a4c4d616-994b-47f7-a480-d7b25df1678e",
      "name": "创建表格",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        0,
        -112
      ],
      "parameters": {
        "title": "={{ $json.Name }}",
        "options": {},
        "operation": "create",
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
          "cachedResultName": "Shopify New Product Monitor"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "wAMAqU43zjVjlpuA",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "96c17b4b-81fc-4367-a1f5-48f6df2012e8",
      "name": "发送消息",
      "type": "n8n-nodes-base.slack",
      "position": [
        1280,
        -112
      ],
      "webhookId": "81bd3bf5-c72c-4329-a71f-356d8e418601",
      "parameters": {
        "text": "=New Product Added to {{ $('Loop Over Items').first().json.Name }}\nWebsite Please Check it out\n------------------------------------------------------\n{{ $('Schedule Trigger').first().json['Readable date']}}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09LWT82KHN",
          "cachedResultName": "new_product_added"
        },
        "otherOptions": {},
        "authentication": "oAuth2"
      },
      "credentials": {
        "slackOAuth2Api": {
          "id": "5rQCkyObBqbHIbZA",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "09378204-fcb5-4ab3-bc55-d152ced637ff",
      "name": "合并",
      "type": "n8n-nodes-base.merge",
      "position": [
        832,
        -128
      ],
      "parameters": {
        "mode": "chooseBranch",
        "useDataOfInput": 2
      },
      "typeVersion": 3.2
    },
    {
      "id": "e02d1d99-71f7-4f28-b32c-cf87350b6f6c",
      "name": "便利贴 - 介绍",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1104,
        -512
      ],
      "parameters": {
        "width": 544,
        "height": 460,
        "content": "## 立即试用!"
      },
      "typeVersion": 1
    },
    {
      "id": "84f37a3b-9084-42c1-9a7c-10cf3dcbce2f",
      "name": "便利贴 - 使用方法",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1104,
        -32
      ],
      "parameters": {
        "width": 544,
        "height": 212,
        "content": "## 使用方法"
      },
      "typeVersion": 1
    },
    {
      "id": "26e56a85-706b-47cf-8c4f-744ff76ba4ec",
      "name": "便利贴 - 需要帮助",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1104,
        192
      ],
      "parameters": {
        "width": 544,
        "height": 152,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "4f57eeca-65ca-4d2d-85f9-c3ac2a121caa",
      "name": "便签 - 输入与循环",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        -368
      ],
      "parameters": {
        "color": 6,
        "width": 368,
        "height": 216,
        "content": "### 📋 1. 设置与循环"
      },
      "typeVersion": 1
    },
    {
      "id": "ba28c483-2847-4942-919b-2fda4f7ca43e",
      "name": "便签 - 抓取与存储",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -368
      ],
      "parameters": {
        "color": 5,
        "width": 560,
        "height": 208,
        "content": "### 🤖 2. 抓取与存储数据"
      },
      "typeVersion": 1
    },
    {
      "id": "4eee11df-f0aa-48e3-8b32-0612749612b4",
      "name": "便签 - 比较与警报",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        816,
        -368
      ],
      "parameters": {
        "color": 3,
        "width": 624,
        "height": 208,
        "content": "### 🧠 3. 比较与警报"
      },
      "typeVersion": 1
    },
    {
      "id": "8e99c2b5-ef85-491b-ab56-9888208054f6",
      "name": "获取用于比较的行",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        608,
        -256
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1605316777,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=1605316777",
          "cachedResultName": "hiutdenim - Men"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
          "cachedResultName": "Shopify New Product Monitor"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "wAMAqU43zjVjlpuA",
          "name": "Google Sheets account"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "b520b61b-025e-4c40-9495-f719c5978d87",
      "name": "比较数据",
      "type": "n8n-nodes-base.code",
      "position": [
        960,
        -128
      ],
      "parameters": {
        "jsCode": "// The 'items' variable is an array of objects, where each object\n// corresponds to an input item and has a 'json' property containing its data.\n// In the Function node, items[0] will be the first input (e.g., from Google Sheets Get Row 1)\n// and items[1] will be the second input (e.g., from Google Sheets Get Row 2) if you connect two nodes.\n\nconst list1 = $input.all(); // Assuming your first input is a list of maps/items under a 'data' key\nconst list2 = $('Get row(s) for Compare').all(); // Assuming your second input is a list of maps/items under a 'data' key\n\n// ----------------------------------------------------------------------\n// 1. Create a Set of all 'Name' values from the second list for quick lookup\n// ----------------------------------------------------------------------\nconst namesInList2 = new Set(list2.map(item => item.json.Name).filter(name => name != null));\n\n// ----------------------------------------------------------------------\n// 2. Check if ANY name from list1 is missing in list2\n//    The .some() method will stop and return true the moment the condition is met.\n// ----------------------------------------------------------------------\nconst isMissingName = list1.some(item1 => {\n    const nameToCheck = item1.json.Name;\n    \n    // Condition: Is the name NOT null AND is it NOT present in the namesInList2 Set?\n    return nameToCheck != null && !namesInList2.has(nameToCheck);\n});\n\n// ----------------------------------------------------------------------\n// 3. Output a SINGLE item with the Alert status\n// ----------------------------------------------------------------------\nif (isMissingName) {\n    return [{\n        json: {\n            \"Alert\": true,\n            \"Message\": \"One or more names from the first list are missing in the second list.\"\n        }\n    }];\n} else {\n    return [{\n        json: {\n            \"Alert\": false,\n            \"Message\": \"All names from the first list are present in the second list.\"\n        }\n    }];\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "ed459d93-efe4-4b7f-a66c-5a3d8e8cb721",
      "name": "解析 JSON",
      "type": "n8n-nodes-base.code",
      "position": [
        336,
        -112
      ],
      "parameters": {
        "jsCode": "// Get the JSON string using the exact path provided by the user.\nconst jsonString = $input.first().json.output.string;\n\nlet parsedData;\n\n// Check if the string exists before attempting to parse\nif (!jsonString) {\n    // Return an empty array or throw an error if no string is found\n    // Throwing an error is usually better to stop the workflow if data is missing.\n    throw new Error(\"Input string is empty or missing at the specified path: $input.first().json.output.string\");\n}\n\ntry {\n    // 1. Parse the JSON string into a JavaScript array of objects\n    parsedData = JSON.parse(jsonString);\n} catch (error) {\n    // Handle JSON parsing errors (e.g., if the string is malformed)\n    throw new Error(`Failed to parse JSON string: ${error.message}`);\n}\n\n// 2. Ensure the parsed data is an array\nif (!Array.isArray(parsedData)) {\n    throw new Error('Parsed data is not an array. It cannot be split into multiple items.');\n}\n\n// 3. Map the array of objects into the n8n item format { json: object }\n// Each element in this array will be treated as a new item by n8n, achieving the split.\nconst outputItems = parsedData.map(item => ({\n    json: item,\n}));\n\n// 4. Return the new array of items\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "530fc448-8f83-4c49-8c29-60b3bac8eb05",
      "name": "获取工作流数据",
      "type": "n8n-nodes-browseract-workflows.browserAct",
      "position": [
        224,
        -112
      ],
      "parameters": {
        "taskId": "={{ $json.id }}",
        "operation": "getTask",
        "waitForFinish": true
      },
      "credentials": {
        "browserActApi": {
          "id": "AzKMhR2eAlOjzDiJ",
          "name": "BrowserAct account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e3833253-d698-4144-8999-a638c6999977",
      "name": "运行工作流",
      "type": "n8n-nodes-browseract-workflows.browserAct",
      "position": [
        112,
        -112
      ],
      "parameters": {
        "workflowId": "57142458383023994",
        "inputParameters": {
          "parameters": [
            {
              "name": "Competitor_Store_Link",
              "value": "={{ $('Loop Over Items').item.json.Link }}"
            },
            {
              "name": "Pagination_Type",
              "value": "={{ $('Loop Over Items').item.json[\"Pagination Type\"] }}"
            },
            {
              "name": "Total_Product",
              "value": "10"
            }
          ]
        },
        "additionalFields": {}
      },
      "credentials": {
        "browserActApi": {
          "id": "AzKMhR2eAlOjzDiJ",
          "name": "BrowserAct account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "127198eb-8387-45e9-b4f1-ce70c01fbb7c",
      "name": "存储数据",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        544,
        -112
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Price",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "Name"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1605316777,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=1605316777",
          "cachedResultName": "hiutdenim - Men"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
          "cachedResultName": "Shopify New Product Monitor"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "wAMAqU43zjVjlpuA",
          "name": "Google Sheets account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "b637be2d-8c78-4517-a9bc-68fb12eb2019",
      "name": "获取用于比较的数据",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        672,
        -112
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1605316777,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit#gid=1605316777",
          "cachedResultName": "hiutdenim - Men"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1A_SG0aNjbRs9Sdc2uowXyNCI0-h3W4uEpPogD_B3ZM4/edit?usp=drivesdk",
          "cachedResultName": "Shopify New Product Monitor"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "wAMAqU43zjVjlpuA",
          "name": "Google Sheets account"
        }
      },
      "executeOnce": true,
      "typeVersion": 4.7,
      "alwaysOutputData": true
    },
    {
      "id": "db5e7117-f9bf-4cad-8d22-eb2ca4a9e07c",
      "name": "检查新产品",
      "type": "n8n-nodes-base.if",
      "position": [
        1088,
        -128
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "db0940fb-0954-4792-8065-eb7147e8068e",
              "operator": {
                "type": "boolean",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.Alert }}",
              "rightValue": ""
            },
            {
              "id": "03a29ec0-3f86-4d9b-8834-c08b3ddf8953",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Alert }}",
              "rightValue": "=true"
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "a7712d64-c968-4131-b6d6-eea600699e86",
      "name": "遍历项目",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -240,
        -128
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "d3e295c7-249c-4c09-bb66-828b1335c23e",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -432,
        -144
      ],
      "parameters": {
        "color": 6,
        "width": 368,
        "height": 240,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "d34cb56d-dabe-4f4e-ae84-605893f7fafb",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -144
      ],
      "parameters": {
        "color": 5,
        "width": 560,
        "height": 240,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "17fdf64a-8c47-4661-9a32-43be26c24938",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        528,
        -368
      ],
      "parameters": {
        "color": 5,
        "width": 272,
        "height": 464,
        "content": ""
      },
      "typeVersion": 1
    },
    {
      "id": "9e96b86b-3615-4c14-be2f-555c7ba386de",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        816,
        -144
      ],
      "parameters": {
        "color": 3,
        "width": 624,
        "height": 240,
        "content": ""
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8b998d65-770d-4218-a6cb-11815c365e72",
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Compare Datas",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Json": {
      "main": [
        [
          {
            "node": "Get row(s) for Compare",
            "type": "main",
            "index": 0
          },
          {
            "node": "Store Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Store Data": {
      "main": [
        [
          {
            "node": "Get Data For Compare",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create sheet": {
      "main": [
        [
          {
            "node": "Run a workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Compare Datas": {
      "main": [
        [
          {
            "node": "Check New Product",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run a workflow": {
      "main": [
        [
          {
            "node": "Get workflow Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Create sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check New Product": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get workflow Data": {
      "main": [
        [
          {
            "node": "Parse Json",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Data For Compare": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Get row(s) for Compare": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 市场调研

需要付费吗?

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

工作流信息
难度等级
高级
节点数量24
分类1
节点类型9
难度说明

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

作者
Madame AI Team | Kai

Madame AI Team | Kai

@madame-ai

I’m a PhD in Physics turned AI enthusiast, passionate about uncovering how AI is transforming content creation, business, and daily life.

外部链接
在 n8n.io 查看

分享此工作流