8
n8n 中文网amn8n.com

使用Bright Data的SERP数据AI分析创建数据驱动的SEO内容简报

高级

这是一个AI Summarization, Multimodal AI领域的自动化工作流,包含 27 个节点。主要使用 Set, Code, Limit, Merge, Aggregate 等节点。 使用Bright Data的SERP数据AI分析创建数据驱动的SEO内容简报

前置要求
  • 无特殊前置要求,导入即可使用
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "4a11afdb3c52fd098e3eae9fad4b39fdf1bbcde142f596adda46c795e366b326",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "ab8957e5-c78b-4fd7-b4f7-d4958449c8a2",
      "name": "当收到聊天消息时",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -576,
        32
      ],
      "webhookId": "858ae4fe-d2b9-43e4-bfc7-8ca6ef9f6cde",
      "parameters": {
        "public": true,
        "options": {
          "title": "SEO Content Strategist",
          "subtitle": "Generate a strategic content brief based on SERP analysis.",
          "responseMode": "responseNodes",
          "inputPlaceholder": "Enter your target keyword...",
          "loadPreviousSession": "memory"
        },
        "initialMessages": "Welcome.\nI am your AI Content Strategist. Provide a target keyword, and I will analyze the top 10 search results to generate a detailed content plan designed to outrank the competition."
      },
      "typeVersion": 1.3
    },
    {
      "id": "d41436d3-0b50-456f-aa04-53dd2ea58460",
      "name": "提取 URL",
      "type": "n8n-nodes-base.code",
      "position": [
        256,
        32
      ],
      "parameters": {
        "jsCode": "// Extract each result from the 'organic' array of each input item\n// and transform it into a new individual n8n item.\nreturn items.flatMap((item, index) => {\n  // Use optional chaining (?.) to safely access 'organic'.\n  const organicResults = item.json?.organic;\n\n  // Check if 'organicResults' is an array before proceeding.\n  if (!Array.isArray(organicResults)) {\n    return []; // Return an empty array if 'organic' does not exist or is not an array.\n  }\n  \n  // For each result in 'organic', create a new n8n item.\n  return organicResults.map(result => ({\n    json: result,\n    // Link this output item to the original input item for traceability.\n    pairedItem: {\n      item: index\n    }\n  }));\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "181ecd07-25a0-4e9a-b35d-87c80c0182ea",
      "name": "Google SERP",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        32,
        32
      ],
      "parameters": {
        "url": "=https://www.google.com/search?q={{ encodeURIComponent($json.chatInput) }}&num=10&brd_json=1",
        "zone": {
          "__rl": true,
          "mode": "list",
          "value": "serp_api1",
          "cachedResultName": "serp_api1"
        },
        "country": {
          "__rl": true,
          "mode": "list",
          "value": "us"
        },
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "id": "i897C8Zq5VcQXQU9",
          "name": "BrightData Inforeole"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b66a2603-0db5-43c7-a57b-6ae2f8e1b17e",
      "name": "遍历项目",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        912,
        32
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "bed27461-483e-4d4b-9fe0-a668ccb18259",
      "name": "限制",
      "type": "n8n-nodes-base.limit",
      "disabled": true,
      "position": [
        688,
        32
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e9880005-8d30-4a46-a3d5-90c442c8b942",
      "name": "聚合",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1152,
        -480
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "b13a5f96-aa70-4415-85aa-58ad02cd21ba",
      "name": "OpenRouter 聊天模型1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        2112,
        -272
      ],
      "parameters": {
        "model": "openai/gpt-5-nano",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "id": "KElXI3DlHnhrYSjM",
          "name": "OpenRouter PrestaM"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d73b8962-d7e3-4eaa-9154-d71b116f2d23",
      "name": "响应聊天",
      "type": "@n8n/n8n-nodes-langchain.chat",
      "position": [
        464,
        32
      ],
      "parameters": {
        "message": "Starting content extraction from top-ranking pages.",
        "options": {
          "memoryConnection": false
        },
        "waitUserReply": false
      },
      "typeVersion": 1
    },
    {
      "id": "2a5b0dac-6c8f-4b78-8721-32f5df9a75e8",
      "name": "响应聊天1",
      "type": "@n8n/n8n-nodes-langchain.chat",
      "position": [
        -192,
        32
      ],
      "parameters": {
        "message": "=Processing: Analyzing top 10 Google results for \"{{ $json.chatInput }}\". ",
        "options": {},
        "waitUserReply": false
      },
      "typeVersion": 1
    },
    {
      "id": "7e8b299d-34c7-4c22-ab0f-f8128c45e10c",
      "name": "响应聊天2",
      "type": "@n8n/n8n-nodes-langchain.chat",
      "position": [
        2544,
        480
      ],
      "parameters": {
        "message": "=Scraped {{ $json.url }}",
        "options": {},
        "waitUserReply": false
      },
      "typeVersion": 1
    },
    {
      "id": "772b40b4-6cc8-469c-83fa-0a05551bea78",
      "name": "响应聊天3",
      "type": "@n8n/n8n-nodes-langchain.chat",
      "position": [
        1360,
        -544
      ],
      "parameters": {
        "message": "All data collected. Synthesizing insights and generating your strategic content plan. ",
        "options": {},
        "waitUserReply": false
      },
      "typeVersion": 1
    },
    {
      "id": "0416ad60-aa54-4aff-b9c8-c59aaae1e9ad",
      "name": "响应聊天4",
      "type": "@n8n/n8n-nodes-langchain.chat",
      "position": [
        2432,
        -592
      ],
      "parameters": {
        "message": "={{ $json.text }}",
        "options": {},
        "waitUserReply": false
      },
      "typeVersion": 1
    },
    {
      "id": "cd673b53-9f62-4fa4-9cfc-e627b2e35b93",
      "name": "OpenRouter 聊天模型2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        1456,
        -368
      ],
      "parameters": {
        "model": "openai/gpt-4o",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "id": "KElXI3DlHnhrYSjM",
          "name": "OpenRouter PrestaM"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "fb4c0751-9093-4527-b605-4586d2eaa158",
      "name": "响应聊天5",
      "type": "@n8n/n8n-nodes-langchain.chat",
      "position": [
        1872,
        -400
      ],
      "parameters": {
        "message": "={{ $json.text }}",
        "options": {},
        "waitUserReply": false
      },
      "typeVersion": 1
    },
    {
      "id": "85795099-7b23-478a-8ec1-9a971a583519",
      "name": "访问并提取特定 URL 的数据",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        1200,
        192
      ],
      "parameters": {
        "url": "={{ $json.link }}",
        "zone": {
          "__rl": true,
          "mode": "list",
          "value": "web_unlocker1",
          "cachedResultName": "web_unlocker1"
        },
        "country": {
          "__rl": true,
          "mode": "list",
          "value": "us"
        },
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "id": "i897C8Zq5VcQXQU9",
          "name": "BrightData Inforeole"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1
    },
    {
      "id": "3725cd69-396b-477d-9850-eaee8478ded2",
      "name": "OpenRouter 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        1728,
        448
      ],
      "parameters": {
        "model": "openai/gpt-5-nano",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "id": "KElXI3DlHnhrYSjM",
          "name": "OpenRouter PrestaM"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "05d95321-57a7-46ef-bdf2-63fc38eaa0bc",
      "name": "结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1904,
        464
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"summary\": \"This is a summary of the analyzed content.\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "f1c56a78-8157-4be9-acd8-8004e4815cd4",
      "name": "分析网站",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1744,
        256
      ],
      "parameters": {
        "text": "={{ $json.cleanedHtml }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "You are an SEO expert:|Output in JSON without any comments** summary: summarize this page."
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "e73d1f30-9b67-4f5f-8b60-555d21adf79f",
      "name": "提取 HTML1",
      "type": "n8n-nodes-base.code",
      "position": [
        1792,
        96
      ],
      "parameters": {
        "jsCode": "// Extracts title, description, headings, and counts words from the HTML content.\n// Reads from the 'cleanedHtml' property provided by the previous node.\n\nconst results = [];\nfor (let i = 0; i < items.length; i++) {\n  const html = items[i].json.cleanedHtml;\n\n  if (typeof html !== 'string') {\n    results.push({\n      json: {\n        error: \"The 'cleanedHtml' field is missing or invalid.\"\n      },\n      pairedItem: i\n    });\n    continue;\n  }\n\n  // Existing extractions\n  const titleMatch = html.match(/<title>(.*?)<\\/title>/i);\n  const title = titleMatch ? titleMatch[1].trim() : null;\n\n  const descriptionMatch = html.match(/<meta\\s+name=\"description\"\\s+content=\"(.*?)\"/i);\n  const description = descriptionMatch ? descriptionMatch[1].trim() : null;\n\n  const headingRegex = /<h([1-6])[^>]*>(.*?)<\\/h\\1>/gi;\n  const headings = Array.from(html.matchAll(headingRegex)).map(match => ({\n    level: parseInt(match[1], 10),\n    text: match[2].trim()\n  }));\n\n  // Addition: Word count\n  // Remove all HTML tags to keep only the text.\n  const textContent = html.replace(/<[^>]*>/g, ' ');\n  // Replace multiple spaces with a single one, trim leading/trailing spaces, then split by space.\n  const words = textContent.replace(/\\s+/g, ' ').trim().split(' ');\n  // Filter out empty elements that might result from the split.\n  const wordCount = words.filter(word => word.length > 0).length;\n\n  results.push({\n    json: {\n      title,\n      description,\n      headings,\n      wordCount // Add the word count result\n    },\n    pairedItem: i\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 2
    },
    {
      "id": "b36a1655-500e-45ff-8c66-6e3918d3bf91",
      "name": "清理 HTML",
      "type": "n8n-nodes-base.code",
      "position": [
        1408,
        192
      ],
      "parameters": {
        "jsCode": "// Applies a series of regex cleaning rules to HTML content,\n// including the removal of <svg>, <nav>, <ul>, and <li> tags.\nconst cleaningRules = [\n  { regex: /<script\\b[^>]*>[\\s\\S]*?<\\/script>/gi, replacement: '' },\n  { regex: /<style\\b[^>]*>[\\s\\S]*?<\\/style>/gi, replacement: '' },\n  { regex: /<svg\\b[^>]*>[\\s\\S]*?<\\/svg>/gi, replacement: '' },\n  { regex: /<nav\\b[^>]*>[\\s\\S]*?<\\/nav>/gi, replacement: '' },\n  // Removes <ul> and <li> tags but keeps their text content.\n  { regex: /<\\/?(ul|li)[^>]*>/gi, replacement: '' },\n  { regex: /\\s+(class|id|style|for|tabindex|aria-[\\w-]+|data-[\\w-]+)\\s*=\\s*(?:'[^']*'|\"[^\"]*\")/gi, replacement: '' },\n  { regex: />\\s+</g, replacement: '><' },\n  { regex: /(\\r\\n|\\n|\\r){2,}/g, replacement: '\\n' },\n  { regex: /[ \\t]{2,}/g, replacement: ' ' }\n];\n\nreturn items.map((item, i) => {\n  // Looks for HTML content in item.json.data or directly in item.json.\n  const htmlContent = String(item.json.data || item.json || '');\n\n  if (typeof htmlContent !== 'string' || htmlContent.length === 0) {\n    return {\n      json: { \"cleanedHtml\": \"\" },\n      pairedItem: i\n    };\n  }\n\n  // Sequentially applies each cleaning rule to the HTML content.\n  const cleanedHtml = cleaningRules.reduce(\n    (currentHtml, rule) => currentHtml.replace(rule.regex, rule.replacement),\n    htmlContent\n  ).trim();\n\n  // Returns the structured data object for n8n.\n  return {\n    json: {\n      \"cleanedHtml\": cleanedHtml\n    },\n    pairedItem: i // Links this output item to its corresponding input item.\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "cd6100c1-65ec-4772-9619-784b307b6c9f",
      "name": "URL",
      "type": "n8n-nodes-base.set",
      "position": [
        1776,
        -80
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "19fbb0af-21ad-42bd-9f27-5504ae101a21",
              "name": "url",
              "type": "string",
              "value": "={{ $json.link }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "687c6627-7259-4f12-a523-8ae065d4e1c7",
      "name": "合并1",
      "type": "n8n-nodes-base.merge",
      "position": [
        2240,
        48
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "0bf5c3d4-552a-445a-a624-d00fe0879c23",
      "name": "结构化输出解析器1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1712,
        -352
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"search_intent\": {\n    \"primary_intent\": \"A single word describing the intent: Informational, Commercial, Navigational, or Transactional.\",\n    \"description\": \"A brief explanation of what the user is trying to find or accomplish based on the SERP analysis.\"\n  },\n  \"global_intent\": \"A high-level statement about the new article's strategic goal. Example: 'To create the definitive guide on [Main Topic], addressing key user questions from beginner to advanced levels.'\",\n  \"must_cover_topics\": [\n    {\n      \"title\": \"The title of a core topic that must be included.\",\n      \"reasoning\": \"A brief explanation of why this topic is essential, referencing its prevalence in the SERP data.\"\n    }\n  ],\n  \"differentiation_suggestions\": [\n    {\n      \"suggestion\": \"A specific, actionable suggestion for content that will differentiate the article.\",\n      \"reasoning\": \"Explain why this suggestion addresses a content gap or provides unique value compared to the current top results.\"\n    }\n  ],\n  \"suggested_h2_outline\": [\n      {\n          \"h2_title\": \"What is [Main Keyword]?\",\n          \"description\": \"Define the main keyword and explain its core concepts. This section should address the fundamental 'what is' question for beginners.\"\n      },\n      {\n          \"h2_title\": \"Why is [Related Concept] Important?\",\n          \"description\": \"Explain the significance or benefits of a core concept related to the main keyword, establishing its value for the reader.\"\n      },\n      {\n          \"h2_title\": \"How to Get Started with [Main Keyword]\",\n          \"description\": \"Provide a step-by-step guide or a list of initial actions a user should take. This addresses the practical application of the topic.\"\n      },\n      {\n          \"h2_title\": \"Comparing [Option A] vs. [Option B]\",\n          \"description\": \"Present a comparison of common methods, tools, or options related to the main keyword. This helps users make informed decisions.\"\n      }\n  ]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "5d12238d-0f79-4015-8c10-464c6a751f42",
      "name": "分析",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "onError": "continueErrorOutput",
      "position": [
        1568,
        -560
      ],
      "parameters": {
        "text": "=target keyword : {{ $('When chat message received').item.json.chatInput }}\n\nserp synthesis:\n{{ $items(\"Google SERP\").map(item => JSON.stringify(item.json, null, 2)).join('\\n\\n---\\n\\n') }}\n\ntop 10 pages extract:\n{{ $items(\"Aggregate\").map(item => JSON.stringify(item.json, null, 2)).join('\\n\\n---\\n\\n') }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are a world-class SEO Content Strategist and data analyst.\nYou have been provided with a JSON object containing scraped data (titles, meta descriptions, summaries, headings) from the top Google results for a given keyword.\n\nYour mission is to synthesize this raw data into a strategic insight document. You must analyze the data as a whole to find patterns, core topics, and competitive gaps, and then structure these findings into a logical article outline.\n\n### YOUR TASK\nBased on the raw data provided above, generate a structured insight report. Follow these analytical steps:\n1.  **Analyze Search Intent**: From the titles and summaries, determine the primary user intent (e.g., informational, commercial, navigational, transactional) and describe what the user wants to accomplish.\n2.  **Define Global Intent**: Based on the analysis, formulate a high-level strategic goal for a new piece of content on this topic.\n3.  **Identify Core Topics**: Find the recurring high-value topics, entities, and questions that are common across most top-ranking articles. These are the \"must-have\" subjects to cover.\n4.  **Detect Differentiation Opportunities**: Identify questions or subtopics that are poorly covered, only mentioned by one or two articles, or are completely missed. These are the opportunities to add unique value and stand out.\n5.  **Propose an H2 Outline**: Consolidate the core topics and differentiation opportunities into a logical sequence of H2 headings for the article.\n\n### OUTPUT FORMAT\nYour output MUST be a single, valid JSON object and nothing else. Do not add any commentary or explanations. The JSON object must adhere strictly to the following structure:\n\n{\n  \"search_intent\": {\n    \"primary_intent\": \"A single word describing the intent: Informational, Commercial, Navigational, or Transactional.\",\n    \"description\": \"A brief explanation of what the user is trying to find or accomplish based on the SERP analysis.\"\n  },\n  \"global_intent\": \"A high-level statement about the new article's strategic goal. Example: 'To create the definitive guide on [Main Topic], addressing key user questions from beginner to advanced levels.'\",\n  \"must_cover_topics\": [\n    {\n      \"title\": \"The title of a core topic that must be included.\",\n      \"reasoning\": \"A brief explanation of why this topic is essential, referencing its prevalence in the SERP data.\"\n    }\n  ],\n  \"differentiation_suggestions\": [\n    {\n      \"suggestion\": \"A specific, actionable suggestion for content that will differentiate the article.\",\n      \"reasoning\": \"Explain why this suggestion addresses a content gap or provides unique value compared to the current top results.\"\n    }\n  ],\n  \"suggested_h2_outline\": [\n      {\n          \"h2_title\": \"What is [Main Keyword]?\",\n          \"description\": \"Define the main keyword and explain its core concepts. This section should address the fundamental 'what is' question for beginners.\"\n      },\n      {\n          \"h2_title\": \"Why is [Related Concept] Important?\",\n          \"description\": \"Explain the significance or benefits of a core concept related to the main keyword, establishing its value for the reader.\"\n      },\n      {\n          \"h2_title\": \"How to Get Started with [Main Keyword]\",\n          \"description\": \"Provide a step-by-step guide or a list of initial actions a user should take. This addresses the practical application of the topic.\"\n      },\n      {\n          \"h2_title\": \"Comparing [Option A] vs. [Option B]\",\n          \"description\": \"Present a comparison of common methods, tools, or options related to the main keyword. This helps users make informed decisions.\"\n      }\n  ]\n}"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "8ab5bac7-64e4-405a-b44c-2489c6edba54",
      "name": "格式化输出",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "onError": "continueErrorOutput",
      "position": [
        2048,
        -592
      ],
      "parameters": {
        "text": "=targeted Keyword: {{ $('When chat message received').item.json.chatInput }}\n\nAnalysis:\n{{ $items(\"Analysis\").map(item => JSON.stringify(item.json, null, 2)).join('\\n\\n---\\n\\n') }}\n{{$json}}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=Your objective is to analyze the provided JSON data and generate a structured summary in English, formatted using Markdown.\n\nStrictly adhere to the following structure and formatting rules for the output:\n\nMain Title: Start with a level 1 Markdown heading: # Content Strategy Analysis\n\nSearch Intent Section:\n\nCreate a level 2 heading: ## Search Intent\n\nBelow it, create an unordered list with the following items, extracted directly from the JSON:\n\nThe value of search_intent.primary_intent.\n\nThe value of search_intent.description.\n\nThe value of global_intent.\n\nMust-Cover Topics Section:\n\nCreate a level 2 heading: ## Must-Cover Topics\n\nBelow it, iterate through the must_cover_topics array. For each object in the array, create a list item formatted as: **[title]:** [reasoning]\n\nDifferentiation Suggestions Section:\n\nCreate a level 2 heading: ## Differentiation Suggestions\n\nBelow it, iterate through the differentiation_suggestions array. For each object in the array, create a list item formatted as: **[suggestion]:** [reasoning]\n\nSuggested Outline Section:\n\nCreate a level 2 heading: ## Suggested H2 Outline\n\nBelow it, iterate through the suggested_h2_outline array. For each object in the array, create a list item formatted as: **[h2_title]:** [description]\n\nDo not include any introductory or concluding phrases. The output must only contain the formatted analysis based on the JSON."
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "25288223-d6f6-469b-aa3c-55506628b184",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -512,
        -400
      ],
      "parameters": {
        "width": 560,
        "height": 352,
        "content": "# SEO 内容规划器"
      },
      "typeVersion": 1
    },
    {
      "id": "13d5d113-00cb-4cb9-8022-62c3629fd599",
      "name": "简单记忆",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        -576,
        240
      ],
      "parameters": {},
      "typeVersion": 1.3
    }
  ],
  "pinData": {},
  "connections": {
    "url": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge1": {
      "main": [
        [
          {
            "node": "Respond to Chat2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Analysis": {
      "main": [
        [
          {
            "node": "Format Output",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Chat5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Respond to Chat3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "clean html": {
      "main": [
        [
          {
            "node": "analyse site",
            "type": "main",
            "index": 0
          },
          {
            "node": "extract html1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google SERP": {
      "main": [
        [
          {
            "node": "extract url",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "extract url": {
      "main": [
        [
          {
            "node": "Respond to Chat",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "analyse site": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Format Output": {
      "main": [
        [
          {
            "node": "Respond to Chat4",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Respond to Chat4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "When chat message received",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "extract html1": {
      "main": [
        [
          {
            "node": "Merge1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Access and extract data from a specific URL",
            "type": "main",
            "index": 0
          },
          {
            "node": "url",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Respond to Chat": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Respond to Chat1": {
      "main": [
        [
          {
            "node": "Google SERP",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Respond to Chat2": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Respond to Chat3": {
      "main": [
        [
          {
            "node": "Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "analyse site",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Format Output",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Analysis",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "analyse site",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Analysis",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "Respond to Chat1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Access and extract data from a specific URL": {
      "main": [
        [
          {
            "node": "clean html",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - AI 摘要总结, 多模态 AI

需要付费吗?

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

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

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

作者
phil

phil

@phil

e-com AI automation: 90% time saved on repetitive tasks: product sheets, after-sales chatbots, etc. 🚀 save time, win customers

外部链接
在 n8n.io 查看

分享此工作流