8
n8n 中文网amn8n.com

自动化应用分析与ASO报告生成器

中级

这是一个Market Research, Multimodal AI领域的自动化工作流,包含 13 个节点。主要使用 Code, Telegram, GoogleDocs, FormTrigger, HttpRequest 等节点。 使用Gemini AI和Google Docs从Google Play应用生成ASO报告

前置要求
  • Telegram Bot Token
  • 可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "name": "自动化应用分析与 ASO 报告生成器",
  "tags": [],
  "nodes": [
    {
      "id": "04d002d6-cae7-45ed-9e6d-983aa5126767",
      "name": "表单提交时",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "options": {},
        "formTitle": "ASO Report",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Play Store URL",
              "requiredField": true
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9d911180-cd81-43f5-a328-663bace8c221",
      "name": "HTTP 请求",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        440,
        0
      ],
      "parameters": {
        "url": "=https://app.sensortower.com/api/android/apps/{{ $json.packageName }}?country=US",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "98bc7603-c7e0-4cae-b02b-84cf0279eefb",
      "name": "基础LLM链",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        880,
        0
      ],
      "parameters": {
        "text": "=Create an ASO Report based on the following data. \n\nThe report must include:\n📱 App Overview (Name, Publisher, Category, Installs, Rating, In-app purchases, Last update)  \n⭐ User Ratings & Reviews (average rating, rating count, summary of featured reviews with sentiment highlights)  \n📊 Competitor Analysis (App Name, Publisher, Rating, Installs)  \n📈 Market Insights (downloads & revenue last month, top countries if available)  \n💡 Recommendations (actionable suggestions to improve monetization, retention, competitiveness)  \n\n---\n\n### Input Data:\n\nApp Name: {{ $json.appInfo.name }}\nApp ID: {{ $json.appInfo.app_id }}\nPublisher: {{ $json.appInfo.publisher }}\nCategory: {{ $json.appInfo.category }}\nInstalls: {{ $json.appInfo.installs }}\nRating: {{ $json.appInfo.rating }}\nRating Count: {{ $json.appInfo.rating_count }}\nIn-App Purchases: {{ $json.appInfo.in_app_purchases }}\nLast Update: {{ $json.appInfo.last_update }}\n\nFeatured Reviews:\n{{ $json.reviewsText }}\n\nCompetitors:\n{{ $json.competitorsText }}\n\nMarket Insights:\nDownloads Last Month: {{ $json.market.downloads }}\nRevenue Last Month: {{ $json.market.revenue }} {{ $json.market.currency }}\n",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are an ASO (App Store Optimization) Analyst. \nGenerate an executive report in plain text only.\nDo not use HTML or Markdown. \nFormat the report neatly using emojis as section headers and bullet points. \nAlways write in business English.\n"
            }
          ]
        },
        "promptType": "define"
      },
      "typeVersion": 1.7
    },
    {
      "id": "5b71fe1e-1774-45e9-b8d8-05cb6c8aeb5e",
      "name": "代码",
      "type": "n8n-nodes-base.code",
      "position": [
        660,
        0
      ],
      "parameters": {
        "jsCode": "// n8n Code Node: Parse + Format App Intelligence Data\n// Input: JSON from HTTP Request (SensorTower / similar API)\n// Output: Summary data ready for LLM (formatted text)\n\nconst data = items[0].json;\n\n// --- Get basic info ---\nconst appInfo = {\n  name: data.name,\n  app_id: data.app_id,\n  publisher: data.publisher_name,\n  rating: data.rating,\n  rating_count: data.rating_count,\n  installs: data.installs,\n  category: data.categories?.map(c => c.name).join(\", \") || \"N/A\",\n  in_app_purchases: data.top_in_app_purchases?.US || \"None\",\n  last_update: data.current_version,\n};\n\n// --- Get 3 latest featured reviews ---\nconst reviews = (data.featured_reviews || [])\n  .slice(0, 3)\n  .map(r => ({\n    user: r.username,\n    date: r.date,\n    rating: r.rating,\n    content: r.content,\n    tags: r.tags || []\n  }));\n\n// Format reviews into clean string\nconst reviewsText = reviews.map(r => \n  `- User: ${r.user}\\n  Date: ${r.date}\\n  Rating: ${r.rating}\\n  Content: ${r.content}\\n  Tags: ${r.tags.join(\", \")}`\n).join(\"\\n\\n\");\n\n// --- Get top 3 competitors ---\nconst competitors = (data.related_apps || [])\n  .slice(0, 3)\n  .map(app => ({\n    name: app.name,\n    publisher: app.publisher_name,\n    rating: app.rating,\n    installs: app.rating_count,\n  }));\n\n// Format competitors into clean string\nconst competitorsText = competitors.map(c => \n  `- Name: ${c.name}\\n  Publisher: ${c.publisher}\\n  Rating: ${c.rating}\\n  Installs: ${c.installs}`\n).join(\"\\n\\n\");\n\n// --- Get market data (downloads & revenue last month) ---\nconst market = {\n  downloads: data.worldwide_last_month_downloads?.value || 0,\n  revenue: data.worldwide_last_month_revenue?.value || 0,\n  currency: data.worldwide_last_month_revenue?.currency || \"USD\"\n};\n\n// --- Return final data for LLM ---\nreturn [\n  {\n    json: {\n      appInfo,\n      reviewsText,\n      competitorsText,\n      market\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "e6e2cec5-a1dc-4b0b-ba28-b910c88734e1",
      "name": "OpenRouter聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        880,
        220
      ],
      "parameters": {
        "model": "google/gemini-2.0-flash-exp:free",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "6e7ed502-b385-4c67-9076-45f5885321ce",
      "name": "创建文档",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        1240,
        0
      ],
      "parameters": {
        "title": "={{ $('Code').item.json.appInfo.name }}",
        "folderId": "YOUR_GOOGLE_DRIVE_FOLDER_ID"
      },
      "typeVersion": 2
    },
    {
      "id": "5042a450-3c0b-4e71-b89f-71ff8b1eba30",
      "name": "更新文档",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        1460,
        0
      ],
      "parameters": {
        "actionsUi": {
          "actionFields": [
            {
              "text": "={{ $('Basic LLM Chain').item.json.text }}",
              "action": "insert"
            }
          ]
        },
        "operation": "update",
        "documentURL": "={{ $json.id }}"
      },
      "typeVersion": 2
    },
    {
      "id": "e551c8e9-bbd4-446a-9e7c-932460f6a792",
      "name": "发送文本消息",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1680,
        0
      ],
      "parameters": {
        "text": "=📄 New document for app analysis: {{ $('Code').item.json.appInfo.name }}\n🔗 Document link: https://docs.google.com/document/d/{{ $json.documentId }}/edit?tab=t.0\n",
        "chatId": "YOUR_TELEGRAM_CHAT_ID",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "de8cfef6-6362-4375-b0fc-b1d70421df9a",
      "name": "代码1",
      "type": "n8n-nodes-base.code",
      "position": [
        220,
        0
      ],
      "parameters": {
        "jsCode": "// Input from form trigger\nconst url = items[0].json[\"Play Store URL\"];\n\n// Find the 'id=' parameter in the URL\nlet packageName = null;\ntry {\n  const urlObj = new URL(url);\n  packageName = urlObj.searchParams.get(\"id\");\n} catch (e) {\n  // fallback manual if not a valid URL\n  const match = url.match(/id=([^&]+)/);\n  packageName = match ? match[1] : null;\n}\n\nreturn [\n  {\n    json: {\n      packageName\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "9b40b151-d7ab-4d27-b896-ffc51e5c3832",
      "name": "便签 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -660,
        -500
      ],
      "parameters": {
        "width": 580,
        "height": 1160,
        "content": "# 自动化应用分析与 ASO 报告生成器"
      },
      "typeVersion": 1
    },
    {
      "id": "4f425ee1-d7e6-4b47-92ee-a80ffd58d341",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -60,
        -180
      ],
      "parameters": {
        "color": 2,
        "width": 640,
        "height": 340,
        "content": "- 当用户提交包含应用 Play 商店 URL 的表单时,工作流启动"
      },
      "typeVersion": 1
    },
    {
      "id": "97bab2dd-d3ff-435a-bdca-8a9859a92e13",
      "name": "便签 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        620,
        -180
      ],
      "parameters": {
        "color": 4,
        "width": 760,
        "height": 540,
        "content": "- 解析原始 JSON 并将其格式化为结构化文本,包括应用详情、精选评论、竞争对手数据和市场洞察。"
      },
      "typeVersion": 1
    },
    {
      "id": "475755b2-50c1-4db7-8fca-1417cb5ce660",
      "name": "便签 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1400,
        -180
      ],
      "parameters": {
        "color": 5,
        "width": 520,
        "height": 540,
        "content": "- 将 ASO 报告文本插入先前创建的 Google 文档中。"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code1": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Create a document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a document": {
      "main": [
        [
          {
            "node": "Update a document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update a document": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

中级 - 市场调研, 多模态 AI

需要付费吗?

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

工作流信息
难度等级
中级
节点数量13
分类2
节点类型8
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Budi SJ

Budi SJ

@budisj

I’m a Product Designer who also works as an Automation Developer. With a background in product design and systems thinking, I build user-centered workflows. My focus is on helping teams and businesses work more productively through impactful automation systems.

外部链接
在 n8n.io 查看

分享此工作流