Gmail到Slack:AI评分的Upwork工作提醒,使用OpenRouter
中级
这是一个Personal Productivity、AI Summarization领域的自动化工作流,包含 14 个节点。主要使用 Set、Gmail、Slack、Filter、Markdown 等节点。 Gmail到Slack:AI评分的Upwork工作提醒,使用OpenRouter
前置要求
- •Google 账号和 Gmail API 凭证
- •Slack Bot Token 或 Webhook URL
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {
"instanceId": "9192ad8880fb52b25f18408be81eae9d996a6784a1da3c68d52d3b7ef01d482b",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "0dc258f0-4d50-4bbf-9063-b252f597c245",
"name": "转换为 Markdown",
"type": "n8n-nodes-base.markdown",
"position": [
440,
-20
],
"parameters": {
"html": "={{ $('Get Filtered Messages').item.json.textAsHtml }}",
"options": {},
"destinationKey": "markdown"
},
"typeVersion": 1
},
{
"id": "fced2dd2-720f-4534-a459-94f6cd13314b",
"name": "OpenRouter聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
748,
200
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "muXopBcyQsze8BOD",
"name": "OpenRouter | Paper Jam"
}
},
"typeVersion": 1
},
{
"id": "4b04a2bf-29a6-42f6-8e72-c264f092780e",
"name": "标记为已读",
"type": "n8n-nodes-base.gmail",
"position": [
220,
-20
],
"webhookId": "212c90ed-2d69-4f54-9f96-7009214490d7",
"parameters": {
"messageId": "={{ $json.id }}",
"operation": "markAsRead"
},
"credentials": {
"gmailOAuth2": {
"id": "dZkZW7tKXuK6yfDP",
"name": "Gmail | Paper Jam"
}
},
"typeVersion": 2.1
},
{
"id": "5c208e16-c987-4bf0-b3f6-27d560b3ce5e",
"name": "获取筛选后的消息",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
0,
-20
],
"parameters": {
"simple": false,
"filters": {
"q": "from:(donotreply@upwork.com) subject:(New job:)"
},
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyX",
"unit": "minutes",
"value": 10
}
]
}
},
"credentials": {
"gmailOAuth2": {
"id": "dZkZW7tKXuK6yfDP",
"name": "Gmail | Paper Jam"
}
},
"typeVersion": 1.2
},
{
"id": "6674d03e-91ca-4c6b-8091-b956920e7d9a",
"name": "发送 Slack 警报",
"type": "n8n-nodes-base.slack",
"position": [
1860,
-20
],
"webhookId": "f0b47490-d6ac-40ce-9f4f-8c115d6ef51b",
"parameters": {
"text": "=🚨 *New Upwork Job Opportunity!*\n----\n\n*{{ $json.job.jobName.toUpperCase() }}*\n_{{ $json.job.descriptionSnippet }}..._\n\n🗺️ {{ $json.job.country }}\n{{ $json.output.paymentVerified ? \"✅ Payment verified\" : \"❌ Payment not verified\" }}\n🕧 {{ $json.job.jobType }} | {{ $json.job.price }}\n🏷️ {{ $json.job.tags.map(tag => `\\`${tag}\\``).join(', ') }}\n⭐ {{ $json.job.clientRating }}\n💰 {{ $json.job.amountSpent }}\n🏆 {{ $json.job.experienceLevel }}\n📆 Posted {{ $json.job.postedAt }}\n\n----\n*AI EVALUATION*\nScore: *{{ $json.evaluation.score }}*\n_{{ $json.evaluation.reasoning }}_\n---\n\n_View this job:_ {{ $json.job.jobDetailUrl }}\n\n",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C090EHUFGEN",
"cachedResultName": "testing"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"id": "awboaOk6Kh1kQZ7N",
"name": "Slack | Paper Jam"
}
},
"typeVersion": 2.3
},
{
"id": "0b9a8a79-3639-4a83-ac4d-9bbd22adef5e",
"name": "OpenRouter聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1124,
200
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "muXopBcyQsze8BOD",
"name": "OpenRouter | Paper Jam"
}
},
"typeVersion": 1
},
{
"id": "e282e1a2-70c7-40ca-a394-33e33976f855",
"name": "编辑字段",
"type": "n8n-nodes-base.set",
"position": [
1440,
-20
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "43e777e8-2442-4cc9-8b58-65f1e8f591e5",
"name": "evaluation",
"type": "object",
"value": "={{ $json.output }}"
},
{
"id": "a2c26763-047f-4360-984a-272b88fe3bcc",
"name": "job",
"type": "object",
"value": "={{ $('Job Data Extractor').item.json.output }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "37767da3-90bc-42c5-8fe4-a8d45be89cf3",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-60,
-240
],
"parameters": {
"color": 7,
"width": 660,
"height": 460,
"content": "## 获取并格式化邮件"
},
"typeVersion": 1
},
{
"id": "96107c5a-8311-4836-a51e-09ce43994892",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
-240
],
"parameters": {
"color": 7,
"width": 320,
"height": 460,
"content": "## 从工作中提取数据"
},
"typeVersion": 1
},
{
"id": "a8e422da-0984-4090-abde-eb2344dc2b28",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1000,
-240
],
"parameters": {
"color": 7,
"width": 340,
"height": 460,
"content": "## 评估技能匹配度"
},
"typeVersion": 1
},
{
"id": "51b4e572-fe95-41ca-8ef1-e6638d6cbe8c",
"name": "按分数筛选",
"type": "n8n-nodes-base.filter",
"position": [
1640,
-20
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ab20e70f-c9e3-4873-ab6a-e975dffefa35",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.evaluation.score }}",
"rightValue": 7
}
]
}
},
"typeVersion": 2.2
},
{
"id": "bf621b43-05bd-47c2-bd29-4484400dff62",
"name": "机会评分器",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
1040,
-20
],
"parameters": {
"text": "=**Situation**\nYou are an expert job matching analyst specializing in freelance opportunities. You'll evaluate the compatibility between my professional profile (skills, experience, and preferences) and Upwork job listings to determine how well we match.\n\n**Task**\nAnalyze the provided Upwork job details against my skills and preferences, then generate a comprehensive match score on a scale of 1-10, where 10 indicates an exceptional match and 1 indicates a poor fit.\n\n**Objective**\nHelp me identify the most suitable job opportunities that align with my capabilities and preferences, saving me time by focusing only on highly compatible positions.\n\n**Knowledge**\n- The job information includes: job name, job type (hourly/fixed), price range, description snippet, country, payment verification status, client rating, amount spent, relevant tags, posting date, and required experience level\n- The description snippet provides limited information about the job requirements\n- Primary matching factors: job name, description snippet, and tags\n- Secondary matching factors: experience level, job type, and payment amount\n- My skills and preferences will be provided in my request\n\nWhen analyzing the match:\n1. Evaluate technical skill alignment based on job name, description snippet, and tags first and foremost\n2. Consider experience level requirements\n3. Factor in my stated job type preferences (hourly vs. fixed), if provided\n4. Account for payment range alignment with my expectations, if provided\n5. Assess if the job description suggests requirements outside my capabilities\n6. Consider any specific preferences I've mentioned (location, industry, etc.)\n\nYou must provide a nuanced, honest assessment of the match quality rather than inflating scores. For each match score, provide brief but specific reasoning explaining why the score was assigned, highlighting both strengths and potential misalignments.\n\n<my_profile>\nREPLACE THIS WITH YOUR PROFILE. BELOW IS AN EXAMPLE PROFILE.\nI’m a seasoned web designer with over 8 years of experience crafting modern, user-friendly websites for startups, agencies, and global brands. My work spans across responsive design, UI/UX optimization, and full website redesigns that prioritize both aesthetic appeal and functional performance. I’m highly proficient with tools like Figma, Adobe XD, Webflow, WordPress, and Shopify, and I frequently collaborate with developers to ensure seamless handoff using platforms like Zeplin or Storybook. Whether you’re looking to improve conversions, refresh your brand’s digital presence, or build something entirely new, I bring a strong design eye, clear communication, and a results-driven approach to every project.\n\nI have a slight preference for hourly projects with a rate about $30/hour. \n</my_profile>\n\n<job>\n{{ JSON.stringify($json.output, null, 2) }}\n</job>",
"options": {},
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\n \"score\",\n \"reasoning\"\n ],\n\t\"properties\": {\n \"score\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 10\n },\n \"reasoning\": {\n \"type\": \"string\"\n }\n\t}\n}"
},
"typeVersion": 1.2
},
{
"id": "f768b4e4-3eba-41b1-a6aa-c34c14dead7c",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1380,
-240
],
"parameters": {
"color": 7,
"width": 620,
"height": 460,
"content": "## 将筛选后的通知发送到 Slack"
},
"typeVersion": 1
},
{
"id": "ffbe5e44-4e6d-4b88-92cd-042a47fdc77c",
"name": "工作数据提取器",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
660,
-20
],
"parameters": {
"text": "=Below is a job alert email received from Upwork. Please extract the requested information in valid JSON format.\n\nSubject: {{ $('Get Filtered Messages').item.json.subject }}\nBody: {{ $json.markdown }}",
"options": {},
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n \"additionalProperties\": false,\n \"required\": [\n \"jobName\",\n \"jobType\", \n \"jobDetailUrl\", \n \"price\", \n \"descriptionSnippet\", \n \"country\", \n \"paymentVerified\",\n \"clientRating\",\n \"amountSpent\",\n \"tags\",\n \"postedAt\",\n \"experienceLevel\"\n ],\n\t\"properties\": {\n \"jobName\": {\n \"type\": \"string\"\n },\n\t\t\"jobType\": {\n\t\t\t\"enum\": [\"Hourly\", \"Fixed\"]\n\t\t},\n \"price\": {\n \"type\": \"string\"\n },\n \"jobDetailUrl\": {\n \"type\": \"string\"\n },\n \"descriptionSnippet\": {\n \"type\": \"string\",\n \"description\": \"The description of the job before the 'more' link\"\n },\n \"country\": {\n \"type\": \"string\"\n },\n \"paymentVerified\": {\n \"type\": \"boolean\"\n },\n \"clientRating\": {\n \"type\": \"number\"\n },\n \"amountSpent\": {\n \"type\": \"string\"\n },\n \"tags\": {\n \"type\": \"array\",\n \"description\": \"List of categories with a link typically found below the country. Just include the tag name, not the url.\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"postedAt\": {\n \"type\": \"string\"\n },\n \"experienceLevel\": {\n \"enum\": [\"Entry\", \"Intermediate\", \"Expert\"]\n }\n\t}\n}"
},
"typeVersion": 1.2
}
],
"pinData": {},
"connections": {
"Edit Fields": {
"main": [
[
{
"node": "Filter By Score",
"type": "main",
"index": 0
}
]
]
},
"Mark as Read": {
"main": [
[
{
"node": "Convert To Markdown",
"type": "main",
"index": 0
}
]
]
},
"Filter By Score": {
"main": [
[
{
"node": "Send Slack Alert",
"type": "main",
"index": 0
}
]
]
},
"Job Data Extractor": {
"main": [
[
{
"node": "Opportunity Scorer",
"type": "main",
"index": 0
}
]
]
},
"Opportunity Scorer": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Convert To Markdown": {
"main": [
[
{
"node": "Job Data Extractor",
"type": "main",
"index": 0
}
]
]
},
"Get Filtered Messages": {
"main": [
[
{
"node": "Mark as Read",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "Job Data Extractor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model1": {
"ai_languageModel": [
[
{
"node": "Opportunity Scorer",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
这是一个中级难度的工作流,适用于Personal Productivity、AI Summarization等场景。适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
使用Gmail、AI分析和Telegram提醒处理发票和工程邮件
使用Gmail、AI分析和Telegram提醒处理发票和工程邮件
Set
Code
Gmail
+12
25 节点Limbraj More
Invoice Processing
SmartSupport流程:从邮件到Jira自动处理IT请求,附带Slack通知
通过AI解决方案和Slack提醒将邮件自动转换为Jira工单
If
Set
Jira
+10
25 节点Trung Tran
Ticket Management
Fireflies会议转录和摘要自动化
使用Gemini和Gmail从Fireflies转录自动化会议摘要
Set
Code
Gmail
+11
26 节点Davide
Document Extraction
使用Gemini、Slack和Notion从新闻简报创建AI情报摘要
使用Gemini、Slack和Notion从新闻简报创建AI情报摘要
Set
Code
Gmail
+12
19 节点Harry Siggins
Miscellaneous
商业AI指挥中心:Google Workspace模块化代理、向量搜索与多渠道报告
商业AI指挥中心:Google Workspace模块化代理、向量搜索与多渠道报告
Set
Gmail
Slack
+35
80 节点Paul
Document Extraction
博客 h
使用Perplexity和Google Trends自动创建SEO优化的WordPress博客
Set
Gmail
Limit
+23
49 节点Paul
Content Creation
工作流信息
难度等级
中级
节点数量14
分类2
节点类型9
作者
James Francis
@paperjam👋 Hi, I'm James. I run an AI automation agency focused on building small, focused workflows that have a direct and measurable impact on business growth or optimization.
外部链接
在 n8n.io 上查看 →
分享此工作流