智能求职专家
高级
这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 16 个节点。主要使用 If, Set, Code, Merge, Notion 等节点。 通过 Gemini AI、Notion 追踪和多平台搜索实现职位申请的自动化
前置要求
- •Notion API Key
- •Telegram Bot Token
- •Google Drive API 凭证
- •可能需要目标 API 的认证凭证
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "aijMWyEGzRRMqK8R",
"meta": {
"instanceId": "b14f5dd921befc4584084cc386aea593f73c7c2b00b50933075d7967a4d1c502"
},
"name": "智能求职专家",
"tags": [
{
"id": "uZGKuGp0HPigoQN0",
"name": "Job Automation",
"createdAt": "2025-09-16T16:27:19.345Z",
"updatedAt": "2025-09-16T16:27:19.345Z"
},
{
"id": "I944JS1g3DKUUrRN",
"name": "whatjobs",
"createdAt": "2025-10-02T05:51:20.244Z",
"updatedAt": "2025-10-02T05:51:20.244Z"
},
{
"id": "N6ZePaKoG35LrNYs",
"name": "jobstreet",
"createdAt": "2025-10-02T05:50:40.170Z",
"updatedAt": "2025-10-02T05:50:40.170Z"
},
{
"id": "bwPZyR1jfzNycBxN",
"name": "jooble",
"createdAt": "2025-10-02T05:50:29.288Z",
"updatedAt": "2025-10-02T05:51:06.342Z"
},
{
"id": "MBocsXaRMeMaraXW",
"name": "indeed",
"createdAt": "2025-10-02T05:50:55.968Z",
"updatedAt": "2025-10-02T05:50:55.968Z"
},
{
"id": "SX9X9GBtWEuZd1uA",
"name": "telegram",
"createdAt": "2025-10-02T05:52:39.185Z",
"updatedAt": "2025-10-02T05:52:39.185Z"
},
{
"id": "QhSvOnrLX1QXdewR",
"name": "notion",
"createdAt": "2025-10-02T05:52:34.117Z",
"updatedAt": "2025-10-02T05:52:34.117Z"
},
{
"id": "FLmwNNktLWgGhLC1",
"name": "gemini",
"createdAt": "2025-10-02T05:52:25.584Z",
"updatedAt": "2025-10-02T05:52:25.584Z"
},
{
"id": "mqK996ihTFwyMENN",
"name": "drive",
"createdAt": "2025-10-02T05:52:48.075Z",
"updatedAt": "2025-10-02T05:52:48.075Z"
}
],
"nodes": [
{
"id": "0969c309-6b58-490b-a5c2-2c38dedbf197",
"name": "安排职位搜索",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-464,
272
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "dbf7791c-8f35-4254-a4af-a3485cd9e671",
"name": "设置职位变量",
"type": "n8n-nodes-base.set",
"position": [
-272,
272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9549d016-6938-4682-b873-f7f55926c255",
"name": "job_keywords",
"type": "string",
"value": "software developer, web developer, full stack, javascript, react, node.js"
},
{
"id": "7549d016-6938-4682-b873-f7f55926c256",
"name": "auto_apply_threshold",
"type": "number",
"value": 75
},
{
"id": "8549d016-6938-4682-b873-f7f55926c257",
"name": "location",
"type": "string",
"value": "Indonesia"
},
{
"id": "9549d016-6938-4682-b873-f7f55926c258",
"name": "radius",
"type": "string",
"value": "50"
},
{
"id": "a549d016-6938-4682-b873-f7f55926c259",
"name": "max_results_per_source",
"type": "string",
"value": "10"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "c9ca997b-0a50-4f48-8e27-eaf3c5a681fc",
"name": "Jooble职位搜索",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
0
],
"parameters": {
"url": "https://jooble.org/api/{{PLACEHOLDER_JOOBLE_API_KEY}}",
"method": "POST",
"options": {
"timeout": 15000
},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "keywords",
"value": "={{ $node['Set Job Variables'].json.job_keywords }}"
},
{
"name": "location",
"value": "={{ $node['Set Job Variables'].json.location }}"
},
{
"name": "radius",
"value": "={{ $node['Set Job Variables'].json.radius }}"
},
{
"name": "page",
"value": "1"
},
{
"name": "ResultOnPage",
"value": "={{ $node['Set Job Variables'].json.max_results_per_source }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "32615148-d624-4fd4-9dae-dc82c58cb853",
"name": "JobStreet搜索",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
240
],
"parameters": {
"url": "https://www.jobstreet.co.id/api/chalice-search/v4/search",
"options": {
"timeout": 15000
},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "keywords",
"value": "={{ $node['Set Job Variables'].json.job_keywords }}"
},
{
"name": "locations",
"value": "1000"
},
{
"name": "jobsPerPage",
"value": "={{ $node['Set Job Variables'].json.max_results_per_source }}"
},
{
"name": "pageNumber",
"value": "1"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
},
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "3a33c97e-5124-4f7e-8333-e94f936e327b",
"name": "Indeed职位搜索",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
464
],
"parameters": {
"url": "https://id.indeed.com/jobs",
"options": {
"timeout": 15000
},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "={{ $node['Set Job Variables'].json.job_keywords }}"
},
{
"name": "l",
"value": "={{ $node['Set Job Variables'].json.location }}"
},
{
"name": "limit",
"value": "={{ $node['Set Job Variables'].json.max_results_per_source }}"
},
{
"name": "fromage",
"value": "7"
},
{
"name": "radius",
"value": "={{ $node['Set Job Variables'].json.radius }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
},
{
"name": "Accept",
"value": "text/html,application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "723d571c-1af2-43f2-9962-6069fd4f9709",
"name": "WhatJobs搜索",
"type": "n8n-nodes-base.httpRequest",
"position": [
0,
704
],
"parameters": {
"url": "https://api.whatjobs.com/api/v1/jobs/search",
"options": {
"timeout": 15000
},
"sendQuery": true,
"sendHeaders": true,
"queryParameters": {
"parameters": [
{
"name": "keywords",
"value": "={{ $node['Set Job Variables'].json.job_keywords }}"
},
{
"name": "location",
"value": "={{ $node['Set Job Variables'].json.location }}"
},
{
"name": "limit",
"value": "={{ $node['Set Job Variables'].json.max_results_per_source }}"
},
{
"name": "radius",
"value": "={{ $node['Set Job Variables'].json.radius }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-api-token",
"value": "{{PLACEHOLDER_WHATJOBS_API_TOKEN}}"
},
{
"name": "Accept",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "d8ab2b7e-f220-4b38-a011-ac2d9f4c8595",
"name": "合并职位结果",
"type": "n8n-nodes-base.merge",
"position": [
320,
320
],
"parameters": {},
"typeVersion": 3
},
{
"id": "1eb25afd-7129-4f7a-86ba-de5ecc8d611f",
"name": "标准化职位数据",
"type": "n8n-nodes-base.code",
"position": [
512,
320
],
"parameters": {
"jsCode": "// Enhanced job data validation and normalization\nconst jobs = items.map((item, index) => {\n const jobData = item.json;\n\n // Handle different API response structures\n let normalizedJob = {};\n\n // Jooble API structure\n if (jobData.jobs && Array.isArray(jobData.jobs)) {\n return jobData.jobs.map(job => ({\n json: {\n id: job.id || `jooble_${index}_${Date.now()}`,\n title: job.title || 'Untitled Position',\n company: job.company || 'Unknown Company', \n location: job.location || 'Location not specified',\n description: job.snippet || job.description || 'No description available',\n url: job.link || '#',\n posted_date: job.updated || new Date().toISOString(),\n source: 'Jooble',\n salary: job.salary || 'Not specified',\n employment_type: job.type || 'Full-time',\n validation_score: 100\n }\n }));\n }\n\n // JobStreet API structure \n if (jobData.data && jobData.data.jobs) {\n return jobData.data.jobs.map(job => ({\n json: {\n id: job.id || `jobstreet_${index}_${Date.now()}`,\n title: job.jobTitle || job.title || 'Untitled Position',\n company: job.company?.name || job.company || 'Unknown Company',\n location: job.jobLocation?.displayName || job.location || 'Location not specified', \n description: job.jobSummary || job.description || 'No description available',\n url: job.jobDetailsUrl || job.url || '#',\n posted_date: job.postedAt || new Date().toISOString(),\n source: 'JobStreet',\n salary: job.salary?.displayText || 'Not specified',\n employment_type: job.workType || 'Full-time',\n validation_score: 100\n }\n }));\n }\n\n // Indeed/WhatJobs structure (HTML or different API)\n normalizedJob = {\n id: jobData.id || `job_${index}_${Date.now()}`,\n title: jobData.title || jobData.jobTitle || jobData.position || 'Untitled Position',\n company: jobData.company?.name || jobData.company || jobData.employer || 'Unknown Company',\n location: jobData.location?.displayName || jobData.location || jobData.city || 'Location not specified',\n description: jobData.description || jobData.summary || jobData.snippet || 'No description available',\n url: jobData.url || jobData.link || jobData.application_url || '#',\n posted_date: jobData.postedAt || jobData.datePosted || new Date().toISOString(),\n source: jobData.source || 'API',\n salary: jobData.salary || jobData.salaryRange || 'Not specified',\n employment_type: jobData.employmentType || jobData.jobType || 'Full-time',\n requirements: jobData.requirements || jobData.skills || [],\n benefits: jobData.benefits || [],\n raw_data: jobData\n };\n\n // Calculate validation score\n normalizedJob.validation_score = 0;\n if (normalizedJob.title && normalizedJob.title !== 'Untitled Position') normalizedJob.validation_score += 25;\n if (normalizedJob.company && normalizedJob.company !== 'Unknown Company') normalizedJob.validation_score += 25;\n if (normalizedJob.description && normalizedJob.description !== 'No description available') normalizedJob.validation_score += 25;\n if (normalizedJob.url && normalizedJob.url !== '#') normalizedJob.validation_score += 25;\n\n return { json: normalizedJob };\n}).flat();\n\n// Filter valid jobs and ensure we have an array\nconst validJobs = Array.isArray(jobs) ? jobs.filter(job => \n job.json && job.json.validation_score >= 50\n) : [];\n\nreturn validJobs.length > 0 ? validJobs : [{ \n json: { \n error: 'No valid jobs found', \n total_processed: items.length,\n message: 'Check API responses and data structure'\n } \n}];"
},
"typeVersion": 2
},
{
"id": "97052b3c-864a-426e-a8d1-6e7e2551b0e8",
"name": "AI职位分析",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
672,
320
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gemini-1.5-pro"
},
"options": {
"temperature": 0.3
},
"messages": {
"values": [
{
"content": "Analyze this job posting and provide a compatibility score (0-100) and generate a tailored cover letter. Job Details:\\n\\nTitle: {{ $json.title }}\\nCompany: {{ $json.company }}\\nLocation: {{ $json.location }}\\nDescription: {{ $json.description }}\\n\\nMy Skills: software development, JavaScript, React, Node.js, n8n automation, API integration, full-stack development\\n\\nPlease respond in JSON format with:\\n{\\n \\\"compatibility_score\\\": number,\\n \\\"reasons\\\": [\\\"reason1\\\", \\\"reason2\\\"],\\n \\\"cover_letter\\\": \\\"personalized cover letter text\\\",\\n \\\"key_requirements_match\\\": [\\\"matched requirements\\\"],\\n \\\"missing_requirements\\\": [\\\"requirements I don't meet\\\"]\\n}"
}
]
}
},
"credentials": {
"googlePalmApi": {
"id": "NFHiVGz27jUOqBDh",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "1eaad4af-e542-4095-9e8e-6b3b25bf43fe",
"name": "自动申请筛选",
"type": "n8n-nodes-base.if",
"position": [
1024,
320
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ff2062e7-8d7f-4da5-bbed-4ec68294661c",
"operator": {
"name": "filter.operator.gte",
"type": "number",
"operation": "gte"
},
"leftValue": "={{ JSON.parse($json.response || '{}').compatibility_score || 0 }}",
"rightValue": "={{ $node['Set Job Variables'].json.auto_apply_threshold }}"
}
]
}
},
"typeVersion": 2
},
{
"id": "2504a559-472c-4ec7-b355-9375eb9128a7",
"name": "添加到Notion数据库",
"type": "n8n-nodes-base.notion",
"position": [
912,
32
],
"parameters": {
"title": "={{ $json.title || 'Job Application' }}",
"options": {},
"resource": "databasePage",
"databaseId": "{{PLACEHOLDER_NOTION_DATABASE_ID}}",
"propertiesUi": {
"propertyValues": [
{
"key": "Company"
},
{
"key": "Status",
"selectValue": "Applied"
},
{
"key": "Match Score",
"numberValue": "={{ JSON.parse($json.response || '{}').compatibility_score || 0 }}"
},
{
"key": "Applied Date"
},
{
"key": "Job URL",
"urlValue": "={{ $json.url || '#' }}"
},
{
"key": "Location"
},
{
"key": "Source",
"selectValue": "={{ $json.source || 'API' }}"
}
]
}
},
"credentials": {
"notionApi": {
"id": "10FiuTaIn4tHuWTs",
"name": "Notion account"
}
},
"typeVersion": 2.2
},
{
"id": "7a37b79a-7eff-4f76-b3fb-f68cd93c228f",
"name": "发送Telegram提醒",
"type": "n8n-nodes-base.telegram",
"position": [
1280,
32
],
"webhookId": "904ebe9e-517b-4e12-a639-4a53c9e6b07a",
"parameters": {
"text": "🎯 **New Job Match Found!**\\n\\n**Position:** {{ $json.title || 'Unknown Position' }}\\n**Company:** {{ $json.company || 'Unknown Company' }}\\n**Match Score:** {{ JSON.parse($json.response || '{}').compatibility_score || 0 }}%\\n**Location:** {{ $json.location || 'Not specified' }}\\n**Validation Score:** {{ $json.validation_score || 0 }}%\\n\\n**AI Analysis Reasons:**\\n{{ (JSON.parse($json.response || '{}').reasons || []).join('\\n• ') }}\\n\\n**Key Requirements Match:**\\n{{ (JSON.parse($json.response || '{}').key_requirements_match || []).join('\\n• ') }}\\n\\n🔗 **Apply Here:** {{ $json.url || 'URL not available' }}\\n\\n📄 **Cover letter saved to Google Drive**",
"chatId": "{{PLACEHOLDER_TELEGRAM_CHAT_ID}}",
"additionalFields": {
"parse_mode": "Markdown",
"disable_web_page_preview": true
}
},
"credentials": {
"telegramApi": {
"id": "5UNbimarOaH1QxRo",
"name": "Telegram account 2"
}
},
"typeVersion": 1.2
},
{
"id": "cf2cd610-0044-4e60-be12-a1d5ea07ea59",
"name": "保存求职信到Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
1280,
320
],
"parameters": {
"name": "={{ ($json.company || 'Company').replace(/[^a-zA-Z0-9]/g, '_') }}_{{ ($json.title || 'Job').replace(/[^a-zA-Z0-9]/g, '_') }}_{{ $now.toISOString().split('T')[0] }}.txt",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": "{{PLACEHOLDER_GOOGLE_DRIVE_FOLDER_ID}}"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "zBle1sGXDqD1dfNI",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "55cd809b-7a5e-4aa6-bac8-29056be7a4ae",
"name": "错误处理器",
"type": "n8n-nodes-base.set",
"position": [
352,
768
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "error-log-id",
"name": "error_occurred",
"type": "boolean",
"value": "true"
},
{
"id": "error-message-id",
"name": "error_message",
"type": "string",
"value": "={{ $json.error?.message || 'Unknown error occurred' }}"
},
{
"id": "error-timestamp-id",
"name": "error_timestamp",
"type": "string",
"value": "={{ new Date().toISOString() }}"
},
{
"id": "error-node-id",
"name": "failed_node",
"type": "string",
"value": "={{ $json.node || 'Unknown node' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "95414b8a-8ab9-4f2b-8098-afe26aa0ef07",
"name": "发送错误通知",
"type": "n8n-nodes-base.telegram",
"position": [
624,
768
],
"webhookId": "614d611b-d52e-4cea-bee9-6cf6adc72247",
"parameters": {
"text": "⚠️ **Workflow Error Alert**\\n\\n**Error occurred in:** {{ $json.failed_node || 'Unknown node' }}\\n**Timestamp:** {{ $json.error_timestamp }}\\n**Message:** {{ $json.error_message || 'No error message available' }}\\n\\n**Action:** Please check the workflow configuration and API credentials.",
"chatId": "{{PLACEHOLDER_TELEGRAM_CHAT_ID}}",
"additionalFields": {
"parse_mode": "Markdown"
}
},
"credentials": {
"telegramApi": {
"id": "5UNbimarOaH1QxRo",
"name": "Telegram account 2"
}
},
"typeVersion": 1.2
},
{
"id": "f02783ce-1ebb-483b-9bc8-f848ae3c075a",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1312,
48
],
"parameters": {
"width": 784,
"height": 1856,
"content": "## 📋 完整安装与使用指南"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "79234eec-13a8-47bc-b30e-fe70d96c6d99",
"connections": {
"Error Handler": {
"main": [
[
{
"node": "Send Error Notification",
"type": "main",
"index": 0
}
]
]
},
"AI Job Analysis": {
"main": [
[
{
"node": "Auto Apply Filter",
"type": "main",
"index": 0
},
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"WhatJobs Search": {
"main": [
[
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"JobStreet Search": {
"main": [
[
{
"node": "Merge Job Results",
"type": "main",
"index": 1
},
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"Auto Apply Filter": {
"main": [
[
{
"node": "Add to Notion Database",
"type": "main",
"index": 0
}
],
[
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"Indeed Job Search": {
"main": [
[
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"Jooble Job Search": {
"main": [
[
{
"node": "Merge Job Results",
"type": "main",
"index": 0
},
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
},
"Merge Job Results": {
"main": [
[
{
"node": "Normalize Job Data",
"type": "main",
"index": 0
}
]
]
},
"Set Job Variables": {
"main": [
[
{
"node": "Jooble Job Search",
"type": "main",
"index": 0
},
{
"node": "JobStreet Search",
"type": "main",
"index": 0
},
{
"node": "Indeed Job Search",
"type": "main",
"index": 0
},
{
"node": "WhatJobs Search",
"type": "main",
"index": 0
}
]
]
},
"Normalize Job Data": {
"main": [
[
{
"node": "AI Job Analysis",
"type": "main",
"index": 0
}
]
]
},
"Schedule Job Search": {
"main": [
[
{
"node": "Set Job Variables",
"type": "main",
"index": 0
}
]
]
},
"Add to Notion Database": {
"main": [
[
{
"node": "Send Telegram Alert",
"type": "main",
"index": 0
},
{
"node": "Save Cover Letter to Drive",
"type": "main",
"index": 0
},
{
"node": "Error Handler",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
AI驱动视频创作与上传至Instagram、TikTok和YouTube
从云端硬盘进行AI驱动视频创作并上传至Instagram、TikTok和YouTube
If
Set
Code
+14
53 节点DevCode Journey
内容创作
🐟 智能喂鱼器:基于 BMKG 天气的自动喂食系统
🐟 智能喂鱼器:基于 BMKG 天气和 Telegram 提醒的自动喂食系统
If
Set
Code
+5
13 节点Tegar karunia ilham
工程
家居装饰AI(Google Nano Banana)- Santhej Kallada
基于Google Gemini的AI图像生成与编辑及Telegram机器人
If
Set
Code
+9
28 节点Santhej Kallada
内容创作
✨🩷自动化社交媒体内容发布工厂 + 系统提示组合
基于动态系统提示和GPT-4o的AI驱动多平台社交媒体内容工厂
If
Set
Code
+20
100 节点Amit Mehta
内容创作
使用Groq、Gemini和Slack审批系统自动化RSS到Medium发布
通过Groq、Gemini和Slack审批系统实现RSS到Medium发布的自动化流程
If
Set
Code
+16
41 节点ObisDev
内容创作
WordPress博客自动化专业版(深度研究)v2.1市场
使用GPT-4o、Perplexity AI和多语言支持自动化SEO优化的博客创建
If
Set
Xml
+27
125 节点Daniel Ng
内容创作
工作流信息
难度等级
高级
节点数量16
分类2
节点类型11
作者
Tegar karunia ilham
@tegarkaruniailhamHelping business owners & marketers automate their processes with n8n. Specialist in custom workflows, API integrations, and template development. 📈 100+ successful automation projects 🔧 Premium n8n templates available 💡 Free consultation for custom automation Book a consultation for your business digital transformation!"
外部链接
在 n8n.io 查看 →
分享此工作流