2026-09-08 · 原文发布日
每15分钟筛选Upwork新职位并推送高分机会
这是付费模板,作者标价大于零。流程每15分钟从公开的profile.md读取你的技能、报价和屏蔽词等JSON配置,按配置的搜索条件调Upwork GraphQL接口拉新职位,先做工期、预算下限、屏蔽词等确定性过滤和数据表去重,再让OpenAI聊天模型评分并起草提案开头,超过阈值的以HTML格式推送到Telegram。首次运行默认静默建档,不会用历史职位轰炸你;只监控和通知,不自动投递或消耗Connects。
原文要点
这是n8n官方模板库中的付费模板(作者标价大于零),需购买才能获得原工作流文件。其设计为:每15分钟定时运行,经HTTP读取公开的profile.md并提取其中JSON配置(技能、报价、屏蔽词、评分阈值等),按每条搜索通道调Upwork GraphQL接口(OAuth2)拉新职位;先做工期、预算下限、屏蔽词的确定性过滤并去重,跳过upwork_seen_jobs数据表中已记录的职位;首运行为seed模式只建档不推送;其余职位交OpenAI聊天模型评分并起草提案开头,超阈值者以HTML格式推Telegram,所有处理过的职位都写回数据表防重复。
这次做成什么
不购买原模板,在自有n8n实例中手工搭建一个同思路的迷你练习版:定时拉取合成职位数据→按profile配置过滤→AI评分→高分推送,理解各环节职责。原模板需购买,以下是本站独立设计的仿制练习,不是原工作流文件,也未实测。
准备什么
- 一个含Data Tables与AI节点的n8n实例(版本要求以原模板页为准)
- 一个可公开访问的profile.md原始URL(如GitHub raw)
- Telegram机器人Token与目标chat ID(测试用隔离账号)
- 练习阶段可用合成数据代替真实Upwork OAuth2凭据
具体怎么做
放置profile配置
在公开仓库建profile.md,内嵌profile-config的JSON代码块(见材料1),字段含技能、最低时薪、屏蔽词、最低评分阈值。密钥绝不写进此文件,一律走n8n Credentials。
搭建触发与读取链路
新建工作流:Schedule Trigger设为每15分钟→HTTP Request节点GET你的profile.md raw地址→Code节点用正则提取JSON块并校验必填字段,缺字段直接抛错停止。
获取并过滤职位
练习阶段用Code节点输出下方合成职位JSON代替Upwork GraphQL请求;接Filter节点执行确定性规则:预算≥配置下限、标题与描述不含屏蔽词、发布时间在24小时内;再用Data Table节点查询upwork_seen_jobs,丢弃URL已存在的条目。
AI评分与分流
接AI聊天节点,用材料2的评分提示词让模型返回{score,reason,proposal_opening}的JSON;Switch节点判断score≥阈值走高分支→Telegram节点以HTML格式推送职位标题、预算、评分与提案开头;无论是否推送,都用Data Table upsert把职位URL写入upwork_seen_jobs。
首跑seed验证
首次手动执行设为seed模式:只把当前职位写入数据表、不发任何Telegram消息;第二次运行时才对新增职位评分推送,避免被存量职位轰炸。
可直接复制的材料
profile.md配置块示例
本站编写的示例配置,字段名需在自建流程中保持一致;仅方案,与原付费模板字段可能不同,购买后以原模板为准。
```profile-config
{
"skills": ["Python", "n8n自动化", "数据清洗"],
"min_hourly_rate_usd": 30,
"min_fixed_budget_usd": 200,
"blocked_keywords": ["adult", "crypto scam", "免费试稿"],
"search_lanes": ["n8n automation", "python scraping"],
"min_alert_score": 7,
"high_priority_score": 9,
"first_run_behavior": "seed"
}
```职位评分提示词
本站独立编写,n8n表达式路径需按你实际节点输出调整。
你是自由职业职位匹配助手。根据以下自由职业者画像与职位信息,输出严格JSON:{"score": 0-10整数, "reason": "50字内中文理由", "proposal_opening": "80字内中文提案开场白"}。
评分维度:技能匹配度、预算是否达标、客户描述清晰度、工期合理性。
自由职业者画像:{{$json.profile_summary}}
职位标题:{{$json.title}}
职位描述:{{$json.description}}
预算:{{$json.budget}}
只输出JSON,不要其他文字。合成测试职位数据
本站虚构合成数据,仅用于隔离测试,不含任何真实个人信息或密钥。
[
{"id": "job-001", "title": "n8n工作流自动化搭建", "description": "需要把表单数据同步到表格并定时发通知", "budget": "500 USD 固定价", "posted_hours_ago": 3, "url": "https://example.com/jobs/job-001"},
{"id": "job-002", "title": "crypto scam推广脚本", "description": "帮做批量私信工具", "budget": "800 USD", "posted_hours_ago": 1, "url": "https://example.com/jobs/job-002"},
{"id": "job-003", "title": "Python爬虫维护", "description": "每月维护现有采集脚本", "budget": "25 USD/小时", "posted_hours_ago": 5, "url": "https://example.com/jobs/job-003"}
]输入与输出示例
本站虚构演示,评分为示例设定值,非模型真实输出,流程未实测。
输入
使用材料1配置与材料3三条合成职位,首跑已完成seed建档后,第二次运行注入job-001至job-003。对应输出
job-002含屏蔽词"crypto scam"被确定性过滤直接标记seen不推送;job-003时薪25低于下限30被过滤;job-001进入AI评分,示例返回{"score":8,"reason":"技能完全匹配且预算达标","proposal_opening":"您好,我有三年n8n自动化搭建经验……"},8≥7触发Telegram推送,HTML消息含标题、500 USD预算与评分8,同时三条职位URL均upsert进upwork_seen_jobs。做完检查这些
- profile.md缺必填字段时工作流在提取节点即报错停止,不静默继续
- 三条合成职位中只有job-001触发Telegram推送,其余两条仅写入数据表
- 重复运行同一批数据时不产生第二条重复推送,数据表中URL不重复
- seed首跑模式下Telegram零消息但数据表完成建档
容易卡住的地方
- 这是付费模板,本文不附带可导入的工作流JSON,界面与字段名以购买后的原模板为准
- 真实使用需Upwork OAuth2且账户有API权限,练习阶段勿用生产凭据
- OpenAI或其他聊天模型调用可能另行收费,注意额度
- Telegram推送为HTML格式,职位描述里的特殊字符需转义否则会解析失败
- 屏蔽词匹配要注意大小写与部分匹配误伤,必要时加日志核对
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Score and alert Upwork jobs with OpenAI GPT-4.1-mini and Telegram
- 原作者
- Paras Gediya
- 原始发布日期
- 2026-09-07T19:33:49.299Z
- 来源
- https://n8n.io/workflows/19333