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": {
"e282e1a2-70c7-40ca-a394-33e33976f855": {
"main": [
[
{
"node": "51b4e572-fe95-41ca-8ef1-e6638d6cbe8c",
"type": "main",
"index": 0
}
]
]
},
"4b04a2bf-29a6-42f6-8e72-c264f092780e": {
"main": [
[
{
"node": "0dc258f0-4d50-4bbf-9063-b252f597c245",
"type": "main",
"index": 0
}
]
]
},
"51b4e572-fe95-41ca-8ef1-e6638d6cbe8c": {
"main": [
[
{
"node": "6674d03e-91ca-4c6b-8091-b956920e7d9a",
"type": "main",
"index": 0
}
]
]
},
"ffbe5e44-4e6d-4b88-92cd-042a47fdc77c": {
"main": [
[
{
"node": "bf621b43-05bd-47c2-bd29-4484400dff62",
"type": "main",
"index": 0
}
]
]
},
"bf621b43-05bd-47c2-bd29-4484400dff62": {
"main": [
[
{
"node": "e282e1a2-70c7-40ca-a394-33e33976f855",
"type": "main",
"index": 0
}
]
]
},
"0dc258f0-4d50-4bbf-9063-b252f597c245": {
"main": [
[
{
"node": "ffbe5e44-4e6d-4b88-92cd-042a47fdc77c",
"type": "main",
"index": 0
}
]
]
},
"5c208e16-c987-4bf0-b3f6-27d560b3ce5e": {
"main": [
[
{
"node": "4b04a2bf-29a6-42f6-8e72-c264f092780e",
"type": "main",
"index": 0
}
]
]
},
"fced2dd2-720f-4534-a459-94f6cd13314b": {
"ai_languageModel": [
[
{
"node": "ffbe5e44-4e6d-4b88-92cd-042a47fdc77c",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"0b9a8a79-3639-4a83-ac4d-9bbd22adef5e": {
"ai_languageModel": [
[
{
"node": "bf621b43-05bd-47c2-bd29-4484400dff62",
"type": "ai_languageModel",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
中级 - 个人效率, AI 摘要总结
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
SmartSupport流程:从邮件到Jira自动处理IT请求,附带Slack通知
通过AI解决方案和Slack提醒将邮件自动转换为Jira工单
If
Set
Jira
+
If
Set
Jira
25 节点Trung Tran
工单管理
Fireflies会议转录和摘要自动化
使用Gemini和Gmail从Fireflies转录自动化会议摘要
Set
Code
Gmail
+
Set
Code
Gmail
26 节点Davide
文档提取
使用Gemini、Slack和Notion从新闻简报创建AI情报摘要
使用Gemini、Slack和Notion从新闻简报创建AI情报摘要
Set
Code
Gmail
+
Set
Code
Gmail
19 节点Harry Siggins
杂项
商业AI指挥中心
商业AI指挥中心:Google Workspace模块化代理、向量搜索与多渠道报告
Set
Gmail
Slack
+
Set
Gmail
Slack
80 节点Paul
文档提取
使用Perplexity和Google Trends自动创建SEO优化
使用Perplexity和Google Trends自动创建SEO优化的WordPress博客
Set
Gmail
Limit
+
Set
Gmail
Limit
49 节点Paul
内容创作
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+
If
Ftp
Set
113 节点I versus AI
其他
工作流信息
难度等级
中级
节点数量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 查看 →
分享此工作流