使用Linear+Scrapeless+Claude构建的AI研究助手
高级
这是一个Market Research, AI Chatbot领域的自动化工作流,包含 17 个节点。主要使用 Code, Linear, Switch, LinearTrigger, Agent 等节点。 基于Linear、Scrapeless和Claude的AI研究助手
前置要求
- •Anthropic API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "yTpEZbAAFcS0Yp4m",
"meta": {
"instanceId": "7d291de9dc3bbf0106d65e069919a3de2507e3365a7b25788a79a3562af9bfc5",
"templateCredsSetupCompleted": true
},
"name": "使用 Linear + Scrapeless + Claude 构建 AI 驱动的研究助手",
"tags": [],
"nodes": [
{
"id": "9137108b-6a96-4264-bb3f-4f0dc5d5c7a5",
"name": "Linear 触发器",
"type": "n8n-nodes-base.linearTrigger",
"position": [
-580,
380
],
"webhookId": "22e62b88-a910-4075-8527-106d75769acd",
"parameters": {
"teamId": "3a89590a-2521-4c4a-b3b2-7e7ad5962666",
"resources": [
"issue",
"comment",
"reaction"
]
},
"credentials": {
"linearApi": {
"id": "glWOH78HS1At4s5K",
"name": "Linear account"
}
},
"typeVersion": 1
},
{
"id": "d49110c2-f5f9-4939-b2a3-4ee7b9c1aa77",
"name": "切换",
"type": "n8n-nodes-base.switch",
"position": [
-360,
260
],
"parameters": {
"mode": "expression",
"output": "={{\n $json.type === 'Issue' && $json.data.title.toLowerCase().includes('/search') ? 0 :\n $json.type === 'Issue' && $json.data.title.toLowerCase().includes('/trends') ? 1 :\n $json.type === 'Issue' && $json.data.title.toLowerCase().includes('/unlock') ? 2 :\n $json.type === 'Issue' && $json.data.title.toLowerCase().includes('/scrape') ? 3 :\n $json.type === 'Issue' && $json.data.title.toLowerCase().includes('/crawl') ? 4 :\n -1\n}}",
"numberOutputs": 5
},
"typeVersion": 3.2
},
{
"id": "627d13f1-1617-4a20-aa1f-2ae8cba643d6",
"name": "Google 搜索",
"type": "n8n-nodes-scrapeless.scrapeless",
"position": [
260,
60
],
"parameters": {
"q": "={{ $json.data.title }}"
},
"credentials": {
"scrapelessApi": {
"id": "B73pdQXNjpqNbIhs",
"name": "Scrapeless account"
}
},
"typeVersion": 1
},
{
"id": "16d29067-9aae-4159-8d31-37465885350d",
"name": "Google Trends",
"type": "n8n-nodes-scrapeless.scrapeless",
"position": [
260,
220
],
"parameters": {
"q": "={{ $json.data.title }}",
"operation": "googleTrends"
},
"credentials": {
"scrapelessApi": {
"id": "B73pdQXNjpqNbIhs",
"name": "Scrapeless account"
}
},
"typeVersion": 1
},
{
"id": "cadc6292-efcf-4dcf-bc1f-03ea1a6c1a75",
"name": "网页解锁器",
"type": "n8n-nodes-scrapeless.scrapeless",
"position": [
260,
360
],
"parameters": {
"url": "={{ $json.data.title.replace(/\\/unlock/gi, '').trim() }}",
"headless": false,
"resource": "universalScrapingApi"
},
"credentials": {
"scrapelessApi": {
"id": "B73pdQXNjpqNbIhs",
"name": "Scrapeless account"
}
},
"typeVersion": 1
},
{
"id": "979d5139-2593-4975-afa7-2ac16d8bb5da",
"name": "爬取",
"type": "n8n-nodes-scrapeless.scrapeless",
"position": [
260,
540
],
"parameters": {
"url": "={{ $json.data.title }}",
"resource": "crawler"
},
"credentials": {
"scrapelessApi": {
"id": "B73pdQXNjpqNbIhs",
"name": "Scrapeless account"
}
},
"typeVersion": 1
},
{
"id": "58658eec-316e-4fb2-8715-6f7efc49d381",
"name": "爬取",
"type": "n8n-nodes-scrapeless.scrapeless",
"position": [
260,
700
],
"parameters": {
"url": "={{ $json.data.title }}",
"resource": "crawler",
"operation": "crawl",
"limitCrawlPages": 1
},
"credentials": {
"scrapelessApi": {
"id": "B73pdQXNjpqNbIhs",
"name": "Scrapeless account"
}
},
"typeVersion": 1
},
{
"id": "410d82d4-2bdf-4242-b6a3-32e508608be4",
"name": "代码2",
"type": "n8n-nodes-base.code",
"position": [
0,
0
],
"parameters": {
"jsCode": "const originalTitle = $json.data.title;\nlet cleanTitle = originalTitle;\n\nif (originalTitle.toLowerCase().includes('/search')) {\n cleanTitle = originalTitle.replace(/\\/search/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/trends')) {\n cleanTitle = originalTitle.replace(/\\/trends/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/unlock')) {\n cleanTitle = originalTitle.replace(/\\/unlock/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/scrape')) {\n cleanTitle = originalTitle.replace(/\\/scrape/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/crawl')) {\n cleanTitle = originalTitle.replace(/\\/crawl/gi, '').trim();\n}\n\nreturn {\n\n data: {\n ...($json.data),\n title: cleanTitle\n }\n};"
},
"typeVersion": 2
},
{
"id": "8f633954-262b-482d-aa29-3a97a0e8cbb6",
"name": "代码",
"type": "n8n-nodes-base.code",
"position": [
580,
340
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "return {\n output: JSON.stringify($json, null, 2)\n};"
},
"typeVersion": 2
},
{
"id": "d8e55c8c-857b-403e-b2ee-afc1253d7aba",
"name": "代码3",
"type": "n8n-nodes-base.code",
"position": [
0,
180
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const originalTitle = $json.data.title;\nlet cleanTitle = originalTitle;\n\nif (originalTitle.toLowerCase().includes('/search')) {\n cleanTitle = originalTitle.replace(/\\/search/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/trends')) {\n cleanTitle = originalTitle.replace(/\\/trends/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/unlock')) {\n cleanTitle = originalTitle.replace(/\\/unlock/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/scrape')) {\n cleanTitle = originalTitle.replace(/\\/scrape/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/crawl')) {\n cleanTitle = originalTitle.replace(/\\/crawl/gi, '').trim();\n}\n\nreturn {\n\n data: {\n ...($json.data),\n title: cleanTitle\n }\n};"
},
"typeVersion": 2
},
{
"id": "9e9a315e-6915-41a2-b77c-d46c773b9891",
"name": "代码4",
"type": "n8n-nodes-base.code",
"position": [
20,
360
],
"parameters": {
"jsCode": "const originalTitle = $json.data.title;\nlet cleanTitle = originalTitle;\n\nif (originalTitle.toLowerCase().includes('/search')) {\n cleanTitle = originalTitle.replace(/\\/search/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/trends')) {\n cleanTitle = originalTitle.replace(/\\/trends/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/unlock')) {\n cleanTitle = originalTitle.replace(/\\/unlock/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/scrape')) {\n cleanTitle = originalTitle.replace(/\\/scrape/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/crawl')) {\n cleanTitle = originalTitle.replace(/\\/crawl/gi, '').trim();\n}\n\nreturn {\n\n data: {\n ...($json.data),\n title: cleanTitle\n }\n};"
},
"typeVersion": 2
},
{
"id": "c076a7a6-c901-481d-8037-f1e06be1f8e4",
"name": "代码5",
"type": "n8n-nodes-base.code",
"position": [
20,
520
],
"parameters": {
"jsCode": "const originalTitle = $json.data.title;\nlet cleanTitle = originalTitle;\n\nif (originalTitle.toLowerCase().includes('/search')) {\n cleanTitle = originalTitle.replace(/\\/search/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/trends')) {\n cleanTitle = originalTitle.replace(/\\/trends/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/unlock')) {\n cleanTitle = originalTitle.replace(/\\/unlock/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/scrape')) {\n cleanTitle = originalTitle.replace(/\\/scrape/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/crawl')) {\n cleanTitle = originalTitle.replace(/\\/crawl/gi, '').trim();\n}\n\nreturn {\n\n data: {\n ...($json.data),\n title: cleanTitle\n }\n};"
},
"typeVersion": 2
},
{
"id": "b9e6ac08-8f3c-40cc-b183-a4303d9801cd",
"name": "代码6",
"type": "n8n-nodes-base.code",
"position": [
20,
720
],
"parameters": {
"jsCode": "const originalTitle = $json.data.title;\nlet cleanTitle = originalTitle;\n\nif (originalTitle.toLowerCase().includes('/search')) {\n cleanTitle = originalTitle.replace(/\\/search/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/trends')) {\n cleanTitle = originalTitle.replace(/\\/trends/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/unlock')) {\n cleanTitle = originalTitle.replace(/\\/unlock/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/scrape')) {\n cleanTitle = originalTitle.replace(/\\/scrape/gi, '').trim();\n} else if (originalTitle.toLowerCase().includes('/crawl')) {\n cleanTitle = originalTitle.replace(/\\/crawl/gi, '').trim();\n}\n\nreturn {\n\n data: {\n ...($json.data),\n title: cleanTitle\n }\n};"
},
"typeVersion": 2
},
{
"id": "96631700-d64b-41f7-ba06-263be9acd76e",
"name": "AI Agent1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1040,
420
],
"parameters": {
"text": "={{ $json.output }}",
"options": {
"systemMessage": "You are a data analyst. Summarize search/scrape results concisely. Be factual and brief. Format for Linear comments.\n\nAnalyze the provided data and create a structured summary that includes:\n- Key findings and insights\n- Data source and reliability assessment \n- Actionable recommendations\n- Relevant metrics and trends\n- Next steps for further research\n\nFormat your response with clear headers and bullet points for easy reading in Linear."
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "300d7264-86df-485a-9183-ed42df732ccc",
"name": "Anthropic聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
980,
720
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-sonnet-4-20250514",
"cachedResultName": "Claude 4 Sonnet"
},
"options": {
"temperature": 0.3,
"maxTokensToSample": 4000
}
},
"credentials": {
"anthropicApi": {
"id": "21C7G7zPQRFyxp1T",
"name": "Anthropic account"
}
},
"typeVersion": 1.3
},
{
"id": "20f412e2-4081-40a7-a458-af7b2908cc44",
"name": "代码7",
"type": "n8n-nodes-base.code",
"position": [
1540,
600
],
"parameters": {
"jsCode": "return {\n output: $json.output\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\\\\\/g, '\\\\')\n .trim()\n};"
},
"typeVersion": 2
},
{
"id": "4379cc64-3b20-4ad5-a62b-470da3338cf8",
"name": "向问题添加评论1",
"type": "n8n-nodes-base.linear",
"position": [
1760,
600
],
"parameters": {
"comment": "={{ $json.output }}",
"issueId": "={{ $('Linear Trigger').item.json.data.id }}",
"resource": "comment",
"additionalFields": {}
},
"credentials": {
"linearApi": {
"id": "glWOH78HS1At4s5K",
"name": "Linear account"
}
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "e01eaa88-0eff-40de-b80b-51ca1bcd3acb",
"connections": {
"Code": {
"main": [
[
{
"node": "AI Agent1",
"type": "main",
"index": 0
}
]
]
},
"Code2": {
"main": [
[
{
"node": "Google Search",
"type": "main",
"index": 0
}
]
]
},
"Code3": {
"main": [
[
{
"node": "Google Trends",
"type": "main",
"index": 0
}
]
]
},
"Code4": {
"main": [
[
{
"node": "Web Unlocker",
"type": "main",
"index": 0
}
]
]
},
"Code5": {
"main": [
[
{
"node": "Scrape",
"type": "main",
"index": 0
}
]
]
},
"Code6": {
"main": [
[
{
"node": "Crawl",
"type": "main",
"index": 0
}
]
]
},
"Code7": {
"main": [
[
{
"node": "Add a comment to an issue1",
"type": "main",
"index": 0
}
]
]
},
"Crawl": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Scrape": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Code2",
"type": "main",
"index": 0
}
],
[
{
"node": "Code3",
"type": "main",
"index": 0
}
],
[
{
"node": "Code4",
"type": "main",
"index": 0
}
],
[
{
"node": "Code5",
"type": "main",
"index": 0
}
],
[
{
"node": "Code6",
"type": "main",
"index": 0
}
]
]
},
"AI Agent1": {
"main": [
[
{
"node": "Code7",
"type": "main",
"index": 0
}
]
]
},
"Web Unlocker": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Google Search": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Google Trends": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Linear Trigger": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Agent1",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 市场调研, AI 聊天机器人
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
自动化竞争对比卡生成与实时销售情报
使用AI、Slack和Notion自动生成竞争对比卡(Klue替代方案)
Code
Merge
Slack
+15
58 节点Connor Provines
市场调研
提升您的网站流量
Claude AI、Scrapeless与竞品分析的自动化SEO内容引擎
Set
Code
Filter
+10
26 节点scrapeless official
内容创作
自动化房地产房源提取器
使用Scrapeless和Google表格自动化房地产房源抓取
Code
Google Sheets
Schedule Trigger
+2
7 节点scrapeless official
市场调研
亚马逊爬虫
Telegram购物助手:基于Apify和OpenRouter AI的亚马逊产品搜索
Code
Switch
Telegram
+5
12 节点Parth Pansuriya
市场调研
使用 GPT-5、gotoHuman 和人工审核从 Gmail 自动回复并创建 Linear 工单
使用 GPT-5、gotoHuman 和人工审核从 Gmail 自动回复并创建 Linear 工单
Set
Code
Gmail
+13
37 节点gotoHuman
工单管理
使用 Redis 和 Anthropic 在 Go High Level 中自动化 WhatsApp 回复
使用 Go High Level、Redis 和 Anthropic 自动化 WhatsApp 回复
If
Set
Code
+15
31 节点Jorge Martínez
AI 聊天机器人