8
n8n 中文网amn8n.com

自动化 LinkedIn 和 X 职位搜索并保存结果到 Notion

高级

这是一个自动化工作流,包含 23 个节点。主要使用 If, Set, Code, Wait, Limit 等节点。 自动化 LinkedIn 和 X 职位搜索并保存结果到 Notion

前置要求
  • Notion API Key
  • Twitter API 凭证
  • 可能需要目标 API 的认证凭证

分类

-
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "1401ee9e9fdd0e9d0b337b70e6fb76d293cb16d23811c9f2d457eebd07c701f0",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "a6f94de6-04c3-4b3d-8196-3828fede72b9",
      "name": "便签 BookSlot Webhook1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -400
      ],
      "parameters": {
        "color": 5,
        "width": 2062,
        "height": 96,
        "content": "# 目标:仅在 LinkedIn 上搜索高级设计师职位(自定义包含/排除的职位名称)"
      },
      "typeVersion": 1
    },
    {
      "id": "234e54fc-b572-43b3-8904-23f67b297e91",
      "name": "便签 BookSlot Webhook2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1264,
        -416
      ],
      "parameters": {
        "color": 5,
        "width": 782,
        "height": 1472,
        "content": "# LinkedIn 职位搜索自动化"
      },
      "typeVersion": 1
    },
    {
      "id": "de3fdaa7-39da-40dd-8bed-0987cbb15164",
      "name": "便签 BookSlot Webhook7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        656
      ],
      "parameters": {
        "color": 5,
        "width": 2046,
        "height": 80,
        "content": "# 目标:仅搜索来自 X 的高级设计师职位,并直接链接到每个帖子"
      },
      "typeVersion": 1
    },
    {
      "id": "9e0c83c7-760c-40ae-9800-49d9a5da7ed6",
      "name": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        -256
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 272,
        "content": "## 工作原理"
      },
      "typeVersion": 1
    },
    {
      "id": "425301aa-5ef6-44a8-acac-a6c06b22709a",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        288
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "content": "#自定义您的搜索"
      },
      "typeVersion": 1
    },
    {
      "id": "4f7313f0-b4df-4a43-8496-51bccfdb85ec",
      "name": "搜索 LinkedIn1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        176,
        112
      ],
      "parameters": {
        "url": "https://www.linkedin.com/jobs/search?keywords=senior%20product%20designer%20OR%20product%20design%20lead%20OR%20senior%20UX%20designer&location=san%20francisco&f_TPR=r86400",
        "options": {},
        "responseFormat": "string"
      },
      "typeVersion": 1
    },
    {
      "id": "467eb611-96f4-44b6-a378-71123de75a4b",
      "name": "限制1",
      "type": "n8n-nodes-base.limit",
      "position": [
        576,
        112
      ],
      "parameters": {
        "maxItems": 10
      },
      "typeVersion": 1
    },
    {
      "id": "574cfe35-c3bd-467b-8e5b-7fa8146ff69d",
      "name": "获取职位详情1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1168,
        112
      ],
      "parameters": {
        "url": "={{ $json.job_url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "2dac2dd8-f005-47ae-8885-1974acc8b63c",
      "name": "提取发布者信息2",
      "type": "n8n-nodes-base.code",
      "position": [
        1360,
        112
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const html = item.json.data;\n  const jobData = item.json;\n  \n  let description = '';\n  const descMatch = html.match(/class=\"show-more-less-html__markup[^>]*>([\\s\\S]*?)<\\/div>/);\n  if (descMatch) {\n    description = descMatch[1].replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n    // Truncate to 2000 characters max for Notion\n    if (description.length > 2000) {\n      description = description.substring(0, 1997) + '...';\n    }\n  }\n  \n  let posterName = '';\n  const posterMatch = html.match(/class=\"hiring-team__member-name[^>]*>\\s*([^<]+)</);\n  if (posterMatch) {\n    posterName = posterMatch[1].trim();\n  }\n  \n  let posterTitle = '';\n  const titleMatch = html.match(/class=\"hiring-team__member-title[^>]*>\\s*([^<]+)</);\n  if (titleMatch) {\n    posterTitle = titleMatch[1].trim();\n  }\n  \n  let posterProfile = '';\n  const profileMatch = html.match(/href=\"(\\/in\\/[^\"]+)\"[^>]*class=\"hiring-team/);\n  if (profileMatch) {\n    posterProfile = 'https://www.linkedin.com' + profileMatch[1];\n  }\n  \n  results.push({\n    json: {\n      ...jobData,\n      description: description,\n      poster_name: posterName || 'Not found',\n      poster_title: posterTitle || 'Not found',\n      poster_profile: posterProfile || 'Not found'\n    }\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 2
    },
    {
      "id": "a1531ba4-5e38-4b0a-93e2-a188f6e6e5a3",
      "name": "保存到 Notion3",
      "type": "n8n-nodes-base.notion",
      "position": [
        1568,
        112
      ],
      "parameters": {
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Job Title|title",
              "title": "={{ $('Filter1').item.json.job_title }}"
            },
            {
              "key": "Company|rich_text",
              "textContent": "={{ $('Filter1').item.json.company }}"
            },
            {
              "key": "Location|rich_text",
              "textContent": "={{ $('Filter1').item.json.location }}"
            },
            {
              "key": "Job URL|url",
              "urlValue": "={{ $('Filter1').item.json.job_url }}"
            },
            {
              "key": "Poster Name|rich_text",
              "textContent": "={{ $json.poster_name }}"
            },
            {
              "key": "Poster Title|rich_text",
              "textContent": "={{ $json.poster_title }}"
            },
            {
              "key": "Poster Profile|url",
              "urlValue": "={{ $json.poster_profile }}"
            },
            {
              "key": "Job Description|rich_text",
              "textContent": "={{ $json.description }}"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "28683ae2-4633-4350-a4b0-b53929c92093",
      "name": "解析职位1",
      "type": "n8n-nodes-base.code",
      "position": [
        368,
        112
      ],
      "parameters": {
        "jsCode": "const html = $input.all()[0].json.data;\nconst jobCards = [];\nconst jobLinkRegex = /href=\"(https:\\/\\/www\\.linkedin\\.com\\/jobs\\/view\\/[^\"]+)\"/g;\nconst jobLinks = [];\nlet match;\n\nwhile ((match = jobLinkRegex.exec(html)) !== null) {\n  jobLinks.push(match[1]);\n}\n\nfor (let i = 0; i < jobLinks.length; i++) {\n  const jobUrl = jobLinks[i];\n  const urlIndex = html.indexOf(jobUrl);\n  if (urlIndex === -1) continue;\n  \n  const startIndex = Math.max(0, urlIndex - 3000);\n  const endIndex = Math.min(html.length, urlIndex + 1000);\n  const cardSection = html.substring(startIndex, endIndex);\n  \n  // Extract title\n  let title = '';\n  const titleMatch = cardSection.match(/class=\"base-search-card__title[^>]*>\\s*([^<]+)</i);\n  if (titleMatch) {\n    title = titleMatch[1].trim().replace(/\\s+/g, ' ');\n  }\n  \n  // Extract company - try multiple patterns\n  let company = '';\n  \n  // Pattern 1: hidden-nested-link (most common)\n  const companyMatch1 = cardSection.match(/class=\"hidden-nested-link[^>]*>\\s*([^<]+)</i);\n  if (companyMatch1) {\n    company = companyMatch1[1].trim();\n  }\n  \n  // Pattern 2: base-search-card__subtitle\n  if (!company) {\n    const companyMatch2 = cardSection.match(/class=\"base-search-card__subtitle[^>]*>\\s*([^<]+)</i);\n    if (companyMatch2) {\n      company = companyMatch2[1].trim();\n    }\n  }\n  \n  // Pattern 3: Look for company name in any link before the job URL\n  if (!company) {\n    const companyMatch3 = cardSection.match(/href=\"\\/company\\/[^\"]*\"[^>]*>\\s*([^<]+)</i);\n    if (companyMatch3) {\n      company = companyMatch3[1].trim();\n    }\n  }\n  \n  // Extract location\n  let location = '';\n  const locationMatch = cardSection.match(/class=\"job-search-card__location[^>]*>\\s*([^<]+)</i);\n  if (locationMatch) {\n    location = locationMatch[1].trim();\n  }\n  \n  // Extract posted date\n  let posted = '';\n  const dateMatch = cardSection.match(/<time[^>]*>\\s*([^<]+)</i);\n  if (dateMatch) {\n    posted = dateMatch[1].trim();\n  }\n  \n  jobCards.push({\n    json: {\n      job_title: title || 'Title not found',\n      company: company || 'Company not found',\n      location: location || 'Location not specified',\n      job_url: jobUrl,\n      posted_date: posted || 'Date not specified',\n      source: 'linkedin'\n    }\n  });\n}\n\nreturn jobCards;"
      },
      "typeVersion": 2
    },
    {
      "id": "05b081ad-b4f0-4be7-a5f5-4f7386e723f9",
      "name": "过滤器1",
      "type": "n8n-nodes-base.filter",
      "position": [
        784,
        112
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cc1a9535-66db-47f3-8503-2591ca56b04b",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.company }}",
              "rightValue": "Company not found"
            },
            {
              "id": "dc84a071-58f1-4ce1-a0b9-bb0c05fe5679",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.job_title }}",
              "rightValue": "Title not found"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "014b0a99-e070-4fef-9f05-17f9504ef0e1",
      "name": "等待",
      "type": "n8n-nodes-base.wait",
      "position": [
        992,
        112
      ],
      "webhookId": "2662233a-6d97-4c56-b400-29a67ee2a07e",
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "cc2e9e92-c56c-45af-a3a8-176dfc856707",
      "name": "每天 @5am1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -240,
        112
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fd5bea7f-f757-4ad2-8b8c-e97d7c4fd06e",
      "name": "设置搜索条件1",
      "type": "n8n-nodes-base.set",
      "position": [
        -16,
        112
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "search_keywords",
              "value": "senior product designer, product design lead, senior UX designer, AI designer"
            },
            {
              "name": "excluded_keywords",
              "value": "contract, freelance"
            },
            {
              "name": "location",
              "value": "remote, san francisco"
            },
            {
              "name": "f_TPR",
              "value": "r86400"
            },
            {
              "name": "sortBy",
              "value": "DD"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "39b938eb-194a-4561-a9e6-6ee04bb2919c",
      "name": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        -256
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 272,
        "content": "## 注意事项"
      },
      "typeVersion": 1
    },
    {
      "id": "658fdab8-9caf-4306-a732-5bf326c7c545",
      "name": "每天 @5:15am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -256,
        880
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "da3e687d-45ac-4534-a763-952ee2b2b991",
      "name": "设置搜索",
      "type": "n8n-nodes-base.set",
      "position": [
        48,
        880
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "search_keywords",
              "value": "senior product designer, product design lead, senior UX designer"
            },
            {
              "name": "excluded_keywords",
              "value": "junior, intern, internship"
            },
            {
              "name": "location",
              "value": "san francisco, remote"
            },
            {
              "name": "posted_within",
              "value": "24h"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "642c6a0a-0306-4e63-88ab-ff7b531c391f",
      "name": "搜索 Twitter 职位帖子",
      "type": "n8n-nodes-base.twitter",
      "position": [
        336,
        880
      ],
      "parameters": {
        "operation": "search",
        "searchText": "(\"senior product designer\" OR \"product design lead\" OR \"senior UX designer\") (hiring OR \"we're hiring\" OR \"join our team\" OR opening OR \"we are hiring\") (\"san francisco\" OR remote OR \"work from anywhere\") -contract -freelance -junior -intern -internship -RT",
        "additionalFields": {}
      },
      "credentials": {
        "twitterOAuth2Api": {
          "id": "Dl9Lhj7dQdaXbS4F",
          "name": "X account"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "fc0cef14-889f-48ef-89a2-991d4b97e2fe",
      "name": "解析和过滤职位",
      "type": "n8n-nodes-base.code",
      "position": [
        640,
        880
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst results = [];\n\nfor (const item of items) {\n  const tweet = item.json;\n  const text = tweet.text || '';\n  const author = tweet.includes?.users?.[0] || {};\n  \n  // Skip if tweet contains excluded keywords\n  const excludedWords = ['contract', 'freelance', 'junior', 'intern', 'c2c', 'corp-to-corp'];\n  const textLower = text.toLowerCase();\n  if (excludedWords.some(word => textLower.includes(word))) {\n    continue;\n  }\n  \n  // Extract job title\n  let jobTitle = '';\n  const titlePatterns = [\n    /(senior\\s+product\\s+designer)/i,\n    /(product\\s+design\\s+lead)/i,\n    /(lead\\s+product\\s+designer)/i,\n    /(senior\\s+ux\\s+designer)/i,\n    /(principal\\s+(?:product\\s+)?designer)/i,\n    /(staff\\s+(?:product\\s+)?designer)/i\n  ];\n  \n  for (let pattern of titlePatterns) {\n    const match = text.match(pattern);\n    if (match) {\n      jobTitle = match[1].trim();\n      break;\n    }\n  }\n  \n  // Extract company\n  let company = '';\n  const companyPatterns = [\n    /@([A-Z][a-zA-Z0-9_]+)\\s+(?:is|are)\\s+(?:hiring|looking)/,\n    /(?:at|join|@)\\s+([A-Z][a-zA-Z0-9]+?)(?:\\s+(?:is|are|we|-))/,\n    /([A-Z][a-zA-Z0-9\\s]{2,30})\\s+(?:is|are)\\s+(?:hiring|looking|seeking)/\n  ];\n  \n  for (let pattern of companyPatterns) {\n    const match = text.match(pattern);\n    if (match) {\n      company = match[1].trim().replace(/^@/, '');\n      break;\n    }\n  }\n  \n  // If no company found, use author name or check bio\n  if (!company) {\n    if (author.description) {\n      const bioMatch = author.description.match(/(?:@|at)\\s+([A-Z][a-zA-Z0-9]+)/);\n      if (bioMatch) company = bioMatch[1];\n    }\n    if (!company) company = author.name || 'See tweet';\n  }\n  \n  // Extract location with priority for SF and Remote\n  let location = '';\n  const sfPatterns = [\n    /san francisco|SF bay area|bay area/i,\n    /remote|fully remote|work from anywhere|work from home|WFH/i,\n    /hybrid.*(?:san francisco|SF)/i\n  ];\n  \n  for (let pattern of sfPatterns) {\n    const match = text.match(pattern);\n    if (match) {\n      location = match[0].trim();\n      break;\n    }\n  }\n  \n  // Generic location fallback\n  if (!location) {\n    const locMatch = text.match(/(?:location|based in|located in)[:\\s]+([A-Z][a-z]+(?:[,\\s]+[A-Z]{2})?)/i);\n    if (locMatch) location = locMatch[1];\n  }\n  \n  // Only include if it's SF or Remote\n  if (location) {\n    const locationLower = location.toLowerCase();\n    if (!locationLower.includes('san francisco') && \n        !locationLower.includes('bay area') && \n        !locationLower.includes('remote') &&\n        !locationLower.includes('sf')) {\n      continue; // Skip non-SF/remote jobs\n    }\n  }\n  \n  // Extract URLs\n  let jobUrl = '';\n  const urls = text.match(/https:\\/\\/[^\\s]+/g);\n  if (urls && urls.length > 0) {\n    // Prefer job board URLs\n    jobUrl = urls.find(url => \n      url.includes('greenhouse') || \n      url.includes('lever') || \n      url.includes('workday') ||\n      url.includes('jobs') ||\n      url.includes('careers')\n    ) || urls[0];\n  }\n  \n  // Build tweet URL\n  const tweetUrl = `https://twitter.com/${author.username}/status/${tweet.id}`;\n  \n  // Extract poster info\n  const posterName = author.name || 'Unknown';\n  const posterUsername = author.username || '';\n  const posterProfile = `https://twitter.com/${author.username}`;\n  const posterBio = author.description || '';\n  \n  // Try to extract poster's title from bio\n  let posterTitle = '';\n  const titleMatch = posterBio.match(/^([^@|•\\n]{10,80})/);\n  if (titleMatch) {\n    posterTitle = titleMatch[1].trim();\n  }\n  \n  results.push({\n    json: {\n      job_title: jobTitle || 'Senior Product Designer',\n      company: company,\n      location: location || 'Remote/San Francisco',\n      job_url: jobUrl || tweetUrl,\n      posted_date: tweet.created_at || new Date().toISOString(),\n      source: 'twitter',\n      poster_name: posterName,\n      poster_username: posterUsername,\n      poster_profile: posterProfile,\n      poster_title: posterTitle,\n      description: text.substring(0, 2000),\n      tweet_url: tweetUrl,\n      likes: tweet.public_metrics?.like_count || 0,\n      retweets: tweet.public_metrics?.retweet_count || 0,\n      replies: tweet.public_metrics?.reply_count || 0\n    }\n  });\n}\n\nreturn results;"
      },
      "typeVersion": 2
    },
    {
      "id": "734e5a37-6ae0-4eea-ba2f-0c1b07fe4f22",
      "name": "过滤有效职位",
      "type": "n8n-nodes-base.if",
      "position": [
        880,
        880
      ],
      "parameters": {
        "conditions": {
          "string": [
            {
              "value1": "={{ $json.job_title }}",
              "operation": "isNotEmpty"
            },
            {
              "value1": "={{ $json.company }}",
              "operation": "isNotEmpty"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ef931ed3-80a9-46b3-93f9-14d670d224c4",
      "name": "等待。",
      "type": "n8n-nodes-base.wait",
      "position": [
        1152,
        880
      ],
      "webhookId": "b628a9fa-833f-4957-8d65-d086b6dd0e94",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "b628b752-301b-4b0c-9690-ac871f63f7a2",
      "name": "保存到 Notion 数据库",
      "type": "n8n-nodes-base.notion",
      "position": [
        1440,
        880
      ],
      "parameters": {
        "simple": false,
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Job Title|title",
              "title": "={{ $json.job_title }}"
            },
            {
              "key": "Company|rich_text",
              "textContent": "={{ $json.company }}"
            },
            {
              "key": "Location|rich_text",
              "textContent": "={{ $json.location }}"
            },
            {
              "key": "Job URL|url",
              "urlValue": "={{ $json.job_url }}"
            },
            {
              "key": "Poster Name|rich_text",
              "textContent": "={{ $json.poster_name }}"
            },
            {
              "key": "Poster Title|rich_text",
              "textContent": "={{ $json.poster_title }}"
            },
            {
              "key": "Poster Profile|url",
              "urlValue": "={{ $json.poster_profile }}"
            },
            {
              "key": "Job Description|rich_text",
              "textContent": "={{ $json.description }}"
            },
            {
              "key": "Tweet URL|url",
              "urlValue": "={{ $json.tweet_url }}"
            },
            {
              "key": "Source|select",
              "selectValue": "={{ $json.source }}"
            },
            {
              "key": "Posted Date|date"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "id": "7Lv3qvnDmu3mBnqh",
          "name": "Notion account"
        }
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "014b0a99-e070-4fef-9f05-17f9504ef0e1": {
      "main": [
        [
          {
            "node": "574cfe35-c3bd-467b-8e5b-7fa8146ff69d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ef931ed3-80a9-46b3-93f9-14d670d224c4": {
      "main": [
        [
          {
            "node": "b628b752-301b-4b0c-9690-ac871f63f7a2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "467eb611-96f4-44b6-a378-71123de75a4b": {
      "main": [
        [
          {
            "node": "05b081ad-b4f0-4be7-a5f5-4f7386e723f9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "05b081ad-b4f0-4be7-a5f5-4f7386e723f9": {
      "main": [
        [
          {
            "node": "014b0a99-e070-4fef-9f05-17f9504ef0e1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "da3e687d-45ac-4534-a763-952ee2b2b991": {
      "main": [
        [
          {
            "node": "642c6a0a-0306-4e63-88ab-ff7b531c391f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "28683ae2-4633-4350-a4b0-b53929c92093": {
      "main": [
        [
          {
            "node": "467eb611-96f4-44b6-a378-71123de75a4b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "cc2e9e92-c56c-45af-a3a8-176dfc856707": {
      "main": [
        [
          {
            "node": "fd5bea7f-f757-4ad2-8b8c-e97d7c4fd06e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "658fdab8-9caf-4306-a732-5bf326c7c545": {
      "main": [
        [
          {
            "node": "da3e687d-45ac-4534-a763-952ee2b2b991",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4f7313f0-b4df-4a43-8496-51bccfdb85ec": {
      "main": [
        [
          {
            "node": "28683ae2-4633-4350-a4b0-b53929c92093",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "734e5a37-6ae0-4eea-ba2f-0c1b07fe4f22": {
      "main": [
        [
          {
            "node": "ef931ed3-80a9-46b3-93f9-14d670d224c4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "574cfe35-c3bd-467b-8e5b-7fa8146ff69d": {
      "main": [
        [
          {
            "node": "2dac2dd8-f005-47ae-8885-1974acc8b63c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2dac2dd8-f005-47ae-8885-1974acc8b63c": {
      "main": [
        [
          {
            "node": "a1531ba4-5e38-4b0a-93e2-a188f6e6e5a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fd5bea7f-f757-4ad2-8b8c-e97d7c4fd06e": {
      "main": [
        [
          {
            "node": "4f7313f0-b4df-4a43-8496-51bccfdb85ec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fc0cef14-889f-48ef-89a2-991d4b97e2fe": {
      "main": [
        [
          {
            "node": "734e5a37-6ae0-4eea-ba2f-0c1b07fe4f22",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "642c6a0a-0306-4e63-88ab-ff7b531c391f": {
      "main": [
        [
          {
            "node": "fc0cef14-889f-48ef-89a2-991d4b97e2fe",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

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

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

高级

需要付费吗?

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

工作流信息
难度等级
高级
节点数量23
分类-
节点类型11
难度说明

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

作者

Product Designer & AI Consultant | I help business owners improve their websites, apps, and digital marketing systems to drive growth and save time—using design expertise and AI automation.

外部链接
在 n8n.io 查看

分享此工作流

分类

分类: 34