8
n8n 中文网amn8n.com

我的工作流 3

高级

这是一个Market Research, AI Summarization领域的自动化工作流,包含 16 个节点。主要使用 Code, GoogleDocs, ScheduleTrigger, ScrapegraphAi 等节点。 使用 ScrapeGraphAI 监控亚马逊市场情报并输出到 Google Docs

前置要求
  • 无特殊前置要求,导入即可使用
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "WvrxIu1q3XWWkbdc",
  "meta": {
    "instanceId": "f4b0efaa33080e7774e0d9285c40c7abcd2c6f7cf1a8b901fa7106170dd4cda3",
    "templateCredsSetupCompleted": true
  },
  "name": "我的工作流 3",
  "tags": [
    {
      "id": "IZ3TCbPLnlWJhHZq",
      "name": "Amazon Intelligence",
      "createdAt": "2025-08-04T14:47:06.250Z",
      "updatedAt": "2025-08-04T14:47:06.250Z"
    }
  ],
  "nodes": [
    {
      "id": "e7b5f996-645e-4e89-aa4f-f1e995b1e4af",
      "name": "便签 - 概览",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -224,
        -736
      ],
      "parameters": {
        "width": 337,
        "height": 928,
        "content": "# 🎯 工作流概览"
      },
      "typeVersion": 1
    },
    {
      "id": "9c7c749b-5ce7-4d45-bcd1-7e24e1a7a8df",
      "name": "每日计划",
      "type": "n8n-nodes-base.scheduleTrigger",
      "notes": "🎯 WORKFLOW OVERVIEW\n\nEsecuzione automatica giornaliera alle 6:00\nAnalizza mercato Amazon per:\n• Pricing intelligence\n• Competitor analysis \n• Keyword opportunities\n• Strategic insights",
      "position": [
        144,
        224
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 6 * * *"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f3446896-4e2c-48d4-b380-8326064ab15b",
      "name": "便签 - 设置",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        112,
        -736
      ],
      "parameters": {
        "width": 298,
        "height": 919,
        "content": "# ⚙️ 设置要求"
      },
      "typeVersion": 1
    },
    {
      "id": "bd65dfe5-68fb-4fee-9cf1-402fde5fa66c",
      "name": "亚马逊产品爬虫",
      "type": "n8n-nodes-scrapegraphai.scrapegraphAi",
      "notes": "🔧 SCRAPING CONFIG\n\n⚠️ IMPORTANTE:\n• Configurare credenziali ScrapeGraphAI\n• Modificare URL per categoria specifica\n• Monitorare rate limits Amazon\n• Aggiungere IP rotation se necessario",
      "position": [
        448,
        224
      ],
      "parameters": {
        "userPrompt": "Extract product data: title, price, rating, review_count, asin, prime_eligible, image_url. Return as JSON array.",
        "websiteUrl": "https://www.amazon.com/s?k=wireless+bluetooth+headphones"
      },
      "typeVersion": 1
    },
    {
      "id": "af9aa953-c32b-4cdf-b333-eb0de2cd7ac8",
      "name": "便签 - 分析",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        -736
      ],
      "parameters": {
        "width": 298,
        "height": 919,
        "content": "# 📊 分析输出"
      },
      "typeVersion": 1
    },
    {
      "id": "272ad934-3900-4cca-9a57-224e5774eec5",
      "name": "产品分析器",
      "type": "n8n-nodes-base.code",
      "notes": "📊 CORE ANALYSIS\n\nAnalizza automaticamente:\n✓ Prezzi (min/max/media/distribuzione)\n✓ Rating e qualità prodotti\n✓ Top performers del mercato\n✓ Gap di qualità e prezzo\n✓ Opportunità competitive",
      "position": [
        752,
        224
      ],
      "parameters": {
        "jsCode": "// Simplified Product Analyzer\nconst products = $input.first().json.result || $input.first().json || [];\n\nfunction analyzeProducts(productList) {\n  if (!Array.isArray(productList) || productList.length === 0) {\n    return {\n      error: 'No products found',\n      timestamp: new Date().toISOString()\n    };\n  }\n\n  const analysis = {\n    summary: {\n      total_products: productList.length,\n      analyzed_at: new Date().toISOString()\n    },\n    pricing: {\n      average: 0,\n      min: 0,\n      max: 0,\n      distribution: {\n        budget: 0,      // < $50\n        mid_range: 0,   // $50-150\n        premium: 0      // > $150\n      }\n    },\n    ratings: {\n      average: 0,\n      excellent: 0,   // >= 4.5\n      good: 0,        // 4.0-4.4\n      fair: 0,        // 3.5-3.9\n      poor: 0         // < 3.5\n    },\n    top_products: [],\n    opportunities: [],\n    insights: []\n  };\n\n  // Extract and clean price data\n  const validProducts = productList.filter(p => p.price && p.rating).map(p => ({\n    ...p,\n    price_numeric: parseFloat(String(p.price).replace(/[$,]/g, '') || '0'),\n    rating_numeric: parseFloat(p.rating || '0'),\n    review_count_numeric: parseInt(String(p.review_count || '0').replace(/[,]/g, '') || '0')\n  }));\n\n  if (validProducts.length === 0) {\n    return { ...analysis, error: 'No valid product data found' };\n  }\n\n  // Pricing analysis\n  const prices = validProducts.map(p => p.price_numeric).filter(p => p > 0);\n  if (prices.length > 0) {\n    analysis.pricing.average = Math.round(prices.reduce((a, b) => a + b, 0) / prices.length);\n    analysis.pricing.min = Math.min(...prices);\n    analysis.pricing.max = Math.max(...prices);\n    \n    // Price distribution\n    analysis.pricing.distribution.budget = prices.filter(p => p < 50).length;\n    analysis.pricing.distribution.mid_range = prices.filter(p => p >= 50 && p <= 150).length;\n    analysis.pricing.distribution.premium = prices.filter(p => p > 150).length;\n  }\n\n  // Rating analysis\n  const ratings = validProducts.map(p => p.rating_numeric).filter(r => r > 0);\n  if (ratings.length > 0) {\n    analysis.ratings.average = Math.round(ratings.reduce((a, b) => a + b, 0) / ratings.length * 10) / 10;\n    analysis.ratings.excellent = ratings.filter(r => r >= 4.5).length;\n    analysis.ratings.good = ratings.filter(r => r >= 4.0 && r < 4.5).length;\n    analysis.ratings.fair = ratings.filter(r => r >= 3.5 && r < 4.0).length;\n    analysis.ratings.poor = ratings.filter(r => r < 3.5).length;\n  }\n\n  // Top products (by rating and review count)\n  analysis.top_products = validProducts\n    .filter(p => p.rating_numeric >= 4.0)\n    .sort((a, b) => {\n      const scoreA = a.rating_numeric * Math.log(a.review_count_numeric + 1);\n      const scoreB = b.rating_numeric * Math.log(b.review_count_numeric + 1);\n      return scoreB - scoreA;\n    })\n    .slice(0, 5)\n    .map(p => ({\n      title: p.title,\n      price: p.price_numeric,\n      rating: p.rating_numeric,\n      reviews: p.review_count_numeric,\n      asin: p.asin\n    }));\n\n  // Market opportunities\n  const lowRatedCount = analysis.ratings.poor + analysis.ratings.fair;\n  if (lowRatedCount > validProducts.length * 0.3) {\n    analysis.opportunities.push({\n      type: 'Quality Gap',\n      description: `${lowRatedCount} products have ratings below 4.0`,\n      potential: 'High'\n    });\n  }\n\n  const highPriceCount = analysis.pricing.distribution.premium;\n  if (highPriceCount > validProducts.length * 0.4) {\n    analysis.opportunities.push({\n      type: 'Price Gap',\n      description: 'Market skews toward premium pricing',\n      potential: 'Medium'\n    });\n  }\n\n  // Market insights\n  analysis.insights.push(`Average price point: $${analysis.pricing.average}`);\n  analysis.insights.push(`${Math.round(analysis.ratings.excellent / validProducts.length * 100)}% of products have excellent ratings`);\n  \n  if (analysis.pricing.distribution.budget > analysis.pricing.distribution.premium) {\n    analysis.insights.push('Budget-friendly market with value opportunities');\n  } else if (analysis.pricing.distribution.premium > analysis.pricing.distribution.budget) {\n    analysis.insights.push('Premium market with higher margin potential');\n  }\n\n  return analysis;\n}\n\nconst result = analyzeProducts(products);\nreturn [{ json: result }];"
      },
      "typeVersion": 2
    },
    {
      "id": "cb271036-216e-4368-977f-b3c453f30371",
      "name": "便签 - SEO",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -736
      ],
      "parameters": {
        "width": 298,
        "height": 913,
        "content": "# 🔍 SEO 与关键词策略"
      },
      "typeVersion": 1
    },
    {
      "id": "8237113b-3b07-4bfc-acbb-2ea40a042e33",
      "name": "关键词分析器",
      "type": "n8n-nodes-base.code",
      "notes": "🔍 SEO INTELLIGENCE\n\n• Estrae keyword dai top products\n• Identifica trend di mercato emergenti\n• Suggerisce opportunità SEO\n• Analizza gap competitivi keyword\n• Focus su long-tail keywords",
      "position": [
        1040,
        224
      ],
      "parameters": {
        "jsCode": "// Keyword and SEO Analyzer\nconst analysis = $input.first().json;\n\nfunction extractKeywords(productAnalysis) {\n  const keywords = {\n    primary_keywords: [],\n    opportunities: [],\n    trends: [],\n    recommendations: [],\n    timestamp: new Date().toISOString()\n  };\n\n  // Extract keywords from top products\n  if (productAnalysis.top_products && productAnalysis.top_products.length > 0) {\n    const allTitles = productAnalysis.top_products.map(p => p.title || '').join(' ');\n    \n    // Simple keyword extraction\n    const words = allTitles.toLowerCase()\n      .replace(/[^a-z0-9\\s]/g, ' ')\n      .split(/\\s+/)\n      .filter(word => word.length > 3 && !isStopWord(word));\n    \n    // Count frequency\n    const wordCount = {};\n    words.forEach(word => {\n      wordCount[word] = (wordCount[word] || 0) + 1;\n    });\n    \n    // Get top keywords\n    keywords.primary_keywords = Object.entries(wordCount)\n      .filter(([word, count]) => count >= 2)\n      .sort((a, b) => b[1] - a[1])\n      .slice(0, 10)\n      .map(([word, count]) => ({\n        keyword: word,\n        frequency: count,\n        potential: count > 3 ? 'High' : 'Medium'\n      }));\n  }\n\n  // SEO opportunities based on market analysis\n  if (productAnalysis.opportunities) {\n    productAnalysis.opportunities.forEach(opp => {\n      if (opp.type === 'Quality Gap') {\n        keywords.opportunities.push({\n          type: 'Quality Keywords',\n          suggestion: 'Target quality-focused keywords like \"premium\", \"durable\", \"high-quality\"',\n          reason: 'Market has quality gap opportunity'\n        });\n      }\n      \n      if (opp.type === 'Price Gap') {\n        keywords.opportunities.push({\n          type: 'Value Keywords',\n          suggestion: 'Use value-oriented keywords like \"affordable\", \"best value\", \"budget\"',\n          reason: 'Price-sensitive market opportunity'\n        });\n      }\n    });\n  }\n\n  // Market trends\n  if (productAnalysis.pricing) {\n    const { budget, mid_range, premium } = productAnalysis.pricing.distribution;\n    const total = budget + mid_range + premium;\n    \n    if (premium > total * 0.4) {\n      keywords.trends.push({\n        trend: 'Premium Focus',\n        keywords: ['premium', 'luxury', 'high-end', 'professional'],\n        market_share: Math.round(premium / total * 100) + '%'\n      });\n    }\n    \n    if (budget > total * 0.4) {\n      keywords.trends.push({\n        trend: 'Value Focus',\n        keywords: ['affordable', 'budget', 'value', 'economical'],\n        market_share: Math.round(budget / total * 100) + '%'\n      });\n    }\n  }\n\n  // Basic recommendations\n  keywords.recommendations = [\n    {\n      action: 'Target Long-tail Keywords',\n      description: 'Focus on 3-4 word specific phrases',\n      priority: 'High'\n    },\n    {\n      action: 'Monitor Competitor Keywords',\n      description: 'Analyze top performer titles for keyword ideas',\n      priority: 'Medium'\n    },\n    {\n      action: 'Optimize for Voice Search',\n      description: 'Include natural language phrases',\n      priority: 'Low'\n    }\n  ];\n\n  return keywords;\n}\n\nfunction isStopWord(word) {\n  const stopWords = ['with', 'for', 'and', 'the', 'that', 'this', 'from', 'wireless', 'bluetooth'];\n  return stopWords.includes(word);\n}\n\nconst keywordAnalysis = extractKeywords(analysis);\nreturn [{ json: keywordAnalysis }];"
      },
      "typeVersion": 2
    },
    {
      "id": "ca5b0fc8-ef7e-4a62-82ef-1143c5e4f80a",
      "name": "便签 - 定价",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        -736
      ],
      "parameters": {
        "width": 298,
        "height": 913,
        "content": "# 💰 定价策略"
      },
      "typeVersion": 1
    },
    {
      "id": "edc944e4-2495-4370-ab33-c0cc77f237ed",
      "name": "定价策略",
      "type": "n8n-nodes-base.code",
      "notes": "💰 PRICING STRATEGIES\n\n3 Approcci principali:\n🔵 Competitive (±5% media mercato)\n🟡 Value (-10-25% sotto media)\n🟠 Premium (+15-35% sopra media)\n\nInclude analisi rischi e positioning",
      "position": [
        1344,
        224
      ],
      "parameters": {
        "jsCode": "// Simple Pricing Strategy Generator\nconst productAnalysis = $input.item(0).json;\nconst keywordAnalysis = $input.item(1).json;\n\nfunction generatePricingStrategy(products, keywords) {\n  const strategy = {\n    current_market: {\n      average_price: products.pricing?.average || 0,\n      price_range: {\n        min: products.pricing?.min || 0,\n        max: products.pricing?.max || 0\n      },\n      market_distribution: products.pricing?.distribution || {}\n    },\n    recommendations: [],\n    competitive_analysis: {\n      positioning_options: [],\n      risk_assessment: 'Medium'\n    },\n    action_items: [],\n    timestamp: new Date().toISOString()\n  };\n\n  const avgPrice = products.pricing?.average || 100;\n  \n  // Generate pricing recommendations\n  strategy.recommendations = [\n    {\n      strategy: 'Competitive Pricing',\n      price_range: {\n        min: Math.round(avgPrice * 0.95),\n        max: Math.round(avgPrice * 1.05)\n      },\n      description: 'Price within 5% of market average',\n      pros: ['Market acceptance', 'Lower risk'],\n      cons: ['Limited differentiation'],\n      best_for: 'New market entrants'\n    },\n    {\n      strategy: 'Value Pricing',\n      price_range: {\n        min: Math.round(avgPrice * 0.75),\n        max: Math.round(avgPrice * 0.90)\n      },\n      description: 'Undercut market by 10-25%',\n      pros: ['Higher volume potential', 'Market share gains'],\n      cons: ['Lower margins', 'Price war risk'],\n      best_for: 'Cost-optimized products'\n    },\n    {\n      strategy: 'Premium Pricing',\n      price_range: {\n        min: Math.round(avgPrice * 1.15),\n        max: Math.round(avgPrice * 1.35)\n      },\n      description: 'Price 15-35% above market',\n      pros: ['Higher margins', 'Premium positioning'],\n      cons: ['Lower volume', 'Higher marketing needs'],\n      best_for: 'Superior quality products'\n    }\n  ];\n\n  // Positioning analysis\n  const distribution = products.pricing?.distribution || {};\n  const total = (distribution.budget || 0) + (distribution.mid_range || 0) + (distribution.premium || 0);\n  \n  if (total > 0) {\n    strategy.competitive_analysis.positioning_options = [\n      {\n        position: 'Budget Leader',\n        market_share: Math.round((distribution.budget || 0) / total * 100) + '%',\n        competition_level: distribution.budget > 5 ? 'High' : 'Medium',\n        opportunity: distribution.budget < total * 0.3 ? 'High' : 'Low'\n      },\n      {\n        position: 'Mid-Range Player',\n        market_share: Math.round((distribution.mid_range || 0) / total * 100) + '%',\n        competition_level: distribution.mid_range > 5 ? 'High' : 'Medium',\n        opportunity: distribution.mid_range < total * 0.4 ? 'Medium' : 'Low'\n      },\n      {\n        position: 'Premium Brand',\n        market_share: Math.round((distribution.premium || 0) / total * 100) + '%',\n        competition_level: distribution.premium > 3 ? 'High' : 'Low',\n        opportunity: distribution.premium < total * 0.2 ? 'High' : 'Medium'\n      }\n    ];\n  }\n\n  // Risk assessment\n  const qualityIssues = products.opportunities?.some(o => o.type === 'Quality Gap') || false;\n  const priceCompetition = distribution.budget > distribution.premium;\n  \n  if (qualityIssues && priceCompetition) {\n    strategy.competitive_analysis.risk_assessment = 'High';\n  } else if (qualityIssues || priceCompetition) {\n    strategy.competitive_analysis.risk_assessment = 'Medium';\n  } else {\n    strategy.competitive_analysis.risk_assessment = 'Low';\n  }\n\n  // Action items\n  strategy.action_items = [\n    {\n      priority: 'High',\n      action: 'Choose pricing strategy',\n      timeline: '1-2 weeks',\n      description: 'Select from competitive, value, or premium pricing'\n    },\n    {\n      priority: 'High',\n      action: 'Monitor competitor pricing',\n      timeline: 'Ongoing',\n      description: 'Track price changes of top 5 competitors weekly'\n    },\n    {\n      priority: 'Medium',\n      action: 'Test price sensitivity',\n      timeline: '4-6 weeks',\n      description: 'A/B test different price points'\n    },\n    {\n      priority: 'Low',\n      action: 'Optimize for keywords',\n      timeline: '2-4 weeks',\n      description: 'Use keyword insights for product positioning'\n    }\n  ];\n\n  return strategy;\n}\n\nconst pricingStrategy = generatePricingStrategy(productAnalysis, keywordAnalysis);\nreturn [{ json: pricingStrategy }];"
      },
      "typeVersion": 2
    },
    {
      "id": "0d24fa51-3534-47c7-a955-cf81505c620a",
      "name": "便签 - 报告",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1328,
        -736
      ],
      "parameters": {
        "width": 298,
        "height": 913,
        "content": "# 📋 战略报告"
      },
      "typeVersion": 1
    },
    {
      "id": "e6b4bbfc-6799-43c6-8148-2fae832872a1",
      "name": "报告生成器",
      "type": "n8n-nodes-base.code",
      "notes": "📋 STRATEGIC REPORT\n\n• Executive Summary completo\n• Piano d'azione per fasi temporali\n• KPI da monitorare quotidianamente\n• Insights strategici actionable\n• Raccomandazioni immediate e LT",
      "position": [
        1648,
        224
      ],
      "parameters": {
        "jsCode": "// Final Report Generator\nconst productAnalysis = $input.item(0).json;\nconst keywordAnalysis = $input.item(1).json;\nconst pricingStrategy = $input.item(2).json;\n\nfunction generateFinalReport(products, keywords, pricing) {\n  const report = {\n    executive_summary: {\n      market_overview: {\n        total_products_analyzed: products.summary?.total_products || 0,\n        average_market_price: products.pricing?.average || 0,\n        average_rating: products.ratings?.average || 0,\n        market_health: calculateMarketHealth(products)\n      },\n      key_insights: [],\n      recommendations: {\n        immediate: [],\n        short_term: [],\n        long_term: []\n      }\n    },\n    detailed_analysis: {\n      pricing_insights: pricing,\n      keyword_opportunities: keywords,\n      product_performance: products\n    },\n    action_plan: {\n      phase_1: [],\n      phase_2: [],\n      phase_3: []\n    },\n    kpis_to_track: [],\n    generated_at: new Date().toISOString()\n  };\n\n  // Generate key insights\n  const insights = [];\n  \n  if (products.pricing?.average) {\n    insights.push(`Market average price is $${products.pricing.average}`);\n  }\n  \n  if (products.opportunities?.length > 0) {\n    insights.push(`${products.opportunities.length} market opportunities identified`);\n  }\n  \n  if (products.ratings?.excellent > products.ratings?.poor) {\n    insights.push('Market prioritizes quality over price');\n  } else if (products.ratings?.poor > products.ratings?.excellent) {\n    insights.push('Quality gap presents opportunity for premium positioning');\n  }\n  \n  const premiumShare = pricing.current_market?.market_distribution?.premium || 0;\n  const budgetShare = pricing.current_market?.market_distribution?.budget || 0;\n  \n  if (premiumShare > budgetShare) {\n    insights.push('Premium segment dominates - consider quality focus');\n  } else if (budgetShare > premiumShare) {\n    insights.push('Value segment is strong - cost optimization important');\n  }\n  \n  report.executive_summary.key_insights = insights;\n\n  // Generate recommendations by timeline\n  report.executive_summary.recommendations.immediate = [\n    'Select primary pricing strategy based on analysis',\n    'Identify top 3 competitor products to monitor',\n    'Choose initial keyword targets for product listing'\n  ];\n  \n  report.executive_summary.recommendations.short_term = [\n    'Optimize product features based on market gaps',\n    'Implement competitor price monitoring',\n    'Test different price points with small batches'\n  ];\n  \n  report.executive_summary.recommendations.long_term = [\n    'Build brand positioning based on market insights',\n    'Develop product line extensions',\n    'Consider market expansion opportunities'\n  ];\n\n  // Create phased action plan\n  report.action_plan.phase_1 = [\n    {\n      task: 'Market Entry Strategy',\n      timeline: '0-4 weeks',\n      priority: 'Critical',\n      description: 'Finalize pricing, positioning, and initial keyword strategy'\n    },\n    {\n      task: 'Competitive Monitoring Setup',\n      timeline: '1-2 weeks',\n      priority: 'High',\n      description: 'Establish weekly tracking of top 5 competitors'\n    }\n  ];\n  \n  report.action_plan.phase_2 = [\n    {\n      task: 'Product Optimization',\n      timeline: '4-12 weeks',\n      priority: 'High',\n      description: 'Refine product based on market feedback and competitor analysis'\n    },\n    {\n      task: 'Marketing Strategy',\n      timeline: '6-10 weeks',\n      priority: 'Medium',\n      description: 'Develop marketing campaigns based on keyword insights'\n    }\n  ];\n  \n  report.action_plan.phase_3 = [\n    {\n      task: 'Market Expansion',\n      timeline: '12+ weeks',\n      priority: 'Medium',\n      description: 'Consider additional products or market segments'\n    },\n    {\n      task: 'Brand Building',\n      timeline: '16+ weeks',\n      priority: 'Low',\n      description: 'Invest in brand development and customer loyalty'\n    }\n  ];\n\n  // Define KPIs to track\n  report.kpis_to_track = [\n    {\n      metric: 'Market Share',\n      target: 'Top 10 in category',\n      frequency: 'Monthly'\n    },\n    {\n      metric: 'Price Competitiveness',\n      target: 'Within 10% of optimal price point',\n      frequency: 'Weekly'\n    },\n    {\n      metric: 'Customer Satisfaction',\n      target: '4.5+ star rating',\n      frequency: 'Daily'\n    },\n    {\n      metric: 'Keyword Rankings',\n      target: 'Top 3 for primary keywords',\n      frequency: 'Weekly'\n    },\n    {\n      metric: 'Sales Velocity',\n      target: 'Above category average',\n      frequency: 'Daily'\n    }\n  ];\n\n  return report;\n}\n\nfunction calculateMarketHealth(products) {\n  let score = 0;\n  let factors = 0;\n  \n  // Rating health\n  if (products.ratings?.average >= 4.0) {\n    score += 3;\n  } else if (products.ratings?.average >= 3.5) {\n    score += 2;\n  } else {\n    score += 1;\n  }\n  factors++;\n  \n  // Opportunity assessment\n  const opportunityCount = products.opportunities?.length || 0;\n  if (opportunityCount >= 2) {\n    score += 3;\n  } else if (opportunityCount >= 1) {\n    score += 2;\n  } else {\n    score += 1;\n  }\n  factors++;\n  \n  // Market size\n  const totalProducts = products.summary?.total_products || 0;\n  if (totalProducts >= 20) {\n    score += 3;\n  } else if (totalProducts >= 10) {\n    score += 2;\n  } else {\n    score += 1;\n  }\n  factors++;\n  \n  const avgScore = score / factors;\n  \n  if (avgScore >= 2.5) return 'Healthy';\n  if (avgScore >= 2.0) return 'Moderate';\n  return 'Challenging';\n}\n\nconst finalReport = generateFinalReport(productAnalysis, keywordAnalysis, pricingStrategy);\nreturn [{ json: finalReport }];"
      },
      "typeVersion": 2
    },
    {
      "id": "ea32c996-b3cf-4998-b1b3-0698c4d41979",
      "name": "便签 - Google Docs",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1632,
        -736
      ],
      "parameters": {
        "width": 298,
        "height": 913,
        "content": "# 🔐 Google Docs 集成"
      },
      "typeVersion": 1
    },
    {
      "id": "978248d3-0919-43d7-b5f8-13041f0f5b51",
      "name": "创建Google文档",
      "type": "n8n-nodes-base.googleDocs",
      "notes": "🔐 GOOGLE DOCS OUTPUT\n\n⚠️ SETUP REQUIRED:\n• Configurare OAuth2 Google API\n• Abilitare Google Docs API\n• Permessi cartella condivisa\n\n✅ Report professionale automatico",
      "position": [
        1952,
        224
      ],
      "parameters": {
        "title": "Amazon Market Analysis - {{$json.generated_at}}"
      },
      "typeVersion": 2
    },
    {
      "id": "6013a1fb-6874-415c-ac1d-d241fe1f6c6c",
      "name": "便签 - 商业影响",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1936,
        -736
      ],
      "parameters": {
        "width": 337,
        "height": 912,
        "content": "# 🚀 商业影响"
      },
      "typeVersion": 1
    },
    {
      "id": "28befcb6-02da-4d0c-ab41-4d13672a415d",
      "name": "便签 - 注意事项",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2272,
        -736
      ],
      "parameters": {
        "width": 298,
        "height": 919,
        "content": "# ⚠️ 重要注意事项"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "dcbd410a-6c30-41f3-a0e7-67ad02e15be2",
  "connections": {
    "Daily Schedule": {
      "main": [
        [
          {
            "node": "Amazon Product Scraper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Keyword Analyzer": {
      "main": [
        [
          {
            "node": "Pricing Strategy",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pricing Strategy": {
      "main": [
        [
          {
            "node": "Report Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Product Analyzer": {
      "main": [
        [
          {
            "node": "Keyword Analyzer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Report Generator": {
      "main": [
        [
          {
            "node": "Create Google Doc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Amazon Product Scraper": {
      "main": [
        [
          {
            "node": "Product Analyzer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级 - 市场调研, AI 摘要总结

需要付费吗?

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

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

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

外部链接
在 n8n.io 查看

分享此工作流