anaksor-ocr
Sokheng · 工具包
这个模型从文档、收据和路牌照片里读取高棉语和英语文字,用一个检测器找文本行,再用识别器读每一行。适合需要在 Python 里做高棉语 OCR 的开发者。
一个 n8n 工作流,把每位求职者都记在同一张 Google 表格里。来一封新邮件就加一行,OpenAI 从主题里读出职位名称。之后表单、表格里的编辑和 Cal.com 预约陆续填上初筛、任务和面试,Gmail 负责给候选人写信。
Google Sheets 求职者招聘进度跟踪器 是一款 n8n 工作流,属于商务类,由 Mindket 上架。可免费获取。当前为第 1 版,最近更新于 。在本页下载,或复制它的 JSON,再导入 n8n 画布。在 n8n 里启用之前,它不会运行。
五个触发器
它从五个地方启动:每小时一次的 Gmail 检查、两个表单、一个表格编辑 webhook 和一次 Cal.com 预约。入职表单需要填写:
每位候选人一行记录,显示他们进行到哪一步,并在你选定的每一步发出邮件
开始之前要准备好这些。
邮件
找到新的求职邮件,并用你自己的账号发出跟进邮件。
需要一个有权读取和发送邮件的 Google 账号
电子表格
每位候选人一行,求职邮件、两个表单和预约都会更新它。
需要有 Sheets 权限的 Google 账号,以及一个带 20 列的表格
语言模型
用 gpt-4o-mini 从每个邮件主题里读出职位名称,并以 JSON 回答。
需要OpenAI API 密钥
日程预约
候选人预约面试时,把他们拿到的代码一起告诉工作流。
需要Cal.com API 密钥
由 Mindket 于 2026年11月13日检查
这个 n8n 工作流在一张 Google 表格里跟进每位求职者,从第一封邮件一直到约好面试。16 个节点分成五条线,每条线有自己的触发器,彼此独立。Gmail 每小时查一次新邮件,OpenAI 从邮件主题里读出职位名称。表格里随即多出一行,写着发件人的姓名和邮箱地址、职位、日期和一个随机代码,同时发出第一封邮件。其他几条线就靠这个代码找回这一行:入职表单向候选人要这个代码,任务表单也要,Cal.com 则把它放在一个预约问题的回答里带过来。另有一条线监听你在表格里的编辑,你标记 Screening、Rejected 或 Test approved 时,它就给候选人发邮件。
靠邮件招几个人、又想要一份比收件箱清楚的记录的小团队:创始人、办公室经理和自由职业的招聘顾问。大批量招聘,或者需要权限控制的场合,就别用它。没有任何环节核对输入代码的人是不是代码的主人。表格有多私密,全看它的共享设置。
| 行业 | 谁在用 | 怎么用 | 例子 |
|---|---|---|---|
| 小企业 | 一年只招几个人的老板 | 把每位求职者、每份任务和每场面试都放在一张表里 | 一家咖啡馆的老板一眼就能看出谁还没交任务。 |
| 招聘服务 | 自由职业的招聘顾问 | 每个客户一张表,勾选一列就发出对应的进度邮件 | 招聘顾问在三行上勾选 Screening,三位候选人就收到了下一封邮件。 |
| 初创公司 | 创始人和运营负责人 | 让表单和预约去填表,团队只管做决定 | 创始人周一打开表格,就知道谁已经约了面试。 |
| 工作室和代理公司 | 招设计或开发岗位的招聘经理 | 布置一份带回家做的任务,把它的链接收进 Test Link | 工作室在表格里逐个看候选人的链接,再勾选 Test Approved。 |
只要能访问 Gmail、OpenAI、Google Sheets 和 Cal.com,任何 n8n 都能运行它。表格就是看板,你的团队在表格里干活,不用进 n8n。
code 的问题点“获取”会把一个压缩包存到你的下载文件夹,里面有 workflow.json 和 Mindket 写的设置说明。作者估计设置要 16 分钟左右。四个 Gmail 节点导入时没有主题也没有正文,要你自己写。
| 需要 | 说明 |
|---|---|
| n8n | n8n Cloud 或你自己的服务器 |
| 一个用于 Gmail 和 Google Sheets 的账号,两者各配一个 OAuth2 凭据 | |
| OpenAI | 一个 API 密钥。只有一个节点用它,就是 OpenAI |
| Cal.com | 一个账号和它的 API 密钥 |
| 一张电子表格 | README 里列出的 20 列,Code 在 S 列 |
| Apps Script | 表格里的一小段脚本,把你的编辑发给 Webhook |
workflow.json。/d/ 和 /edit 之间那一长串。Google Sheets、Google Sheets1、Google Sheets2 和 Google Sheets3 里选中它,把 YOUR_SHEET_ID 换成这个 ID。Gmail Trigger、Gmail、Gmail1、Gmail2 和 Gmail3 里选中它。Gmail Trigger 里加一个 Search 过滤条件,只让求职邮件启动运行,比如用你给它们打的标签来筛。OpenAI 里选中它。Cal.com Trigger 里选中它。你发布时,n8n 会自己到 Cal.com 注册 webhook。code。Webhook 的正式地址。文件里不含让 Webhook 触发的脚本。Webhook 等的是一个 POST 请求,里面有被编辑单元格的值、它的列号,以及整行数据,格式是列表套列表。下面这段草稿发的正是这些。把它放进表格的 Apps Script 编辑器,再给它加一个 On edit 触发器,因为普通的 onEdit 不能调用别的服务器。
function onSheetEdit(e) {
var sheet = e.range.getSheet();
var row = sheet.getRange(e.range.getRow(), 1, 1, sheet.getLastColumn()).getValues();
UrlFetchApp.fetch('YOUR_WEBHOOK_URL', {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ value: e.value, range: { columnStart: e.range.getColumn() }, rowValues: row })
});
}发布之后不用再按什么。来一封新邮件,表格就多一行,第一封邮件也随之发出。之后你在表格里操作:在某一行勾选 Screening、Rejected 或 Test Approved,对应的邮件就发到 L 列的地址。候选人那边用的是两个表单和预约页面。
| 线 | 什么时候开始 | 写下什么 |
|---|---|---|
| 求职邮件 | Gmail Trigger 每小时检查一次,发现了新邮件 | 一行记录,含姓名、邮箱地址、职位、日期和代码,按 Indeed Email 匹配,随后发出第一封邮件 |
| 入职 | 候选人提交 On form submission | 按 Code 写入他们的资料,Questions 设为 TRUE,工作经验一年或以下的把 Rejected 设为 TRUE |
| 表格编辑 | Apps Script 向 Webhook 发送请求 | 一封邮件:第 7 列交给 Gmail1,第 5 列交给 Gmail2,第 9 列交给 Gmail3 |
| 任务 | 候选人提交 On form submission1 | 按 Code 把 Test Complete 设为 TRUE,链接写进 Test Link |
| 面试 | 有人在 Cal.com 上预约 | 按预约里 code 问题的回答,把 Interview Scheduled 设为 TRUE |
| 要改的 | 在哪里改 |
|---|---|
| 哪些邮件算求职 | Gmail Trigger 的 Search 过滤条件 |
| 读职位名称的提示词 | OpenAI 里的几条消息,它按 { "job": "" } 的结构回答 |
| 邮件内容 | 四个 Gmail 节点的 Subject 和 Message。在表格编辑触发的邮件里,S 列的代码是 $json.body.rowValues[0][18] |
| 拒绝规则 | Google Sheets1 里 Rejected 的表达式 |
| 表单问题 | 两个表单节点,以及 Google Sheets1 和 Google Sheets2 里对应的列 |
| 哪一列发哪封邮件 | Switch 的三条规则,分别设为 7、5 和 9 |
Dana Lee 发来一封求职邮件,主题是 Application: Junior Designer。到了下一次每小时的检查,OpenAI 按下面的结构回答,表格里多出 Dana 的一行,Job 写着 Junior Designer。
{ "job": "Junior Designer" }Dana 收到第一封邮件,带着她的代码提交入职表单,这一行就填满了。你在她那一行勾选 Screening 时,表格的这次编辑会以下面的结构到达 Webhook,这里做了删减,Gmail1 随即写信到 L 列的地址。
{
"value": "TRUE",
"range": { "columnStart": 7 },
"rowValues": [["…", "Dana", "Lee", "Junior Designer", "FALSE", "TRUE", "TRUE", "…"]]
}新手:n8n 把工作流画成用线连起来的方框,每个方框叫一个节点,只做一件事。这里的画布上是五排互不相连的节点,把它们串起来的是表格和代码,不是 n8n。凭据是 n8n 替你保管的密钥,你在哪个节点里选中它,就交给哪个节点用。每条线都从它自己的触发器测一遍。之后各个节点会显示它们收到了什么、发出了什么。
专家:有三条线按 Code 找到自己的行,第一条线则按发件人的地址匹配。
| 线 | 匹配列 | 说明 |
|---|---|---|
| 求职邮件 | Indeed Email | 追加或更新,所以同一个地址再来一封邮件,会更新这一行并写入一个新的随机代码 |
| 入职 | Code | 没有哪一行有这个代码时,追加一行新的 |
| 任务 | Code | 同上 |
| 面试 | Code | 预约里自定义问题 code 的回答 |
Filter 用严格模式把被编辑单元格的值和文本 TRUE 作比较,Switch 读取 range.columnStart。Webhook 一收到请求就立即答复。
大部分风险来自对外敞开的入口和空白的邮件。
Rejected,不会发任何邮件。n8n 通过 Sheets API 写入,这不会触发你的编辑触发器,所以要发拒信,得你自己填一次这个值Webhook 也接受任何 POST 请求,所以要打开它的 Authentication,并让脚本发送同样的请求头一个 n8n 工作流。一封新的求职邮件会变成 Google 表格里的一行,之后两个表单、表格里的一次编辑和一次 Cal.com 预约,带着每位候选人走过初筛、任务和面试。
workflow.json:n8n 导出的工作流,16 个节点,分成五条互不相连的线,每条线有自己的触发器。里面没有任何凭据,也没有作者的表格。webhook 的路径在原来的副本里是随机的,这里改成了 hiring-sheet-edit。README.md:这份设置说明,压缩包里的是英文版。Webhook 的 Apps Script 小脚本。建一张表格,在第 1 行按下面的顺序写这 20 个列名,从 A 列一直到 T 列:
Indeed Email, First Name, Last Name, Job, Rejected, Questions, Screening, Test Complete, Test Approved,
Interview Scheduled, Hire, Email, Resume, Portfolio Link, Years of Experience, Expected Salary, Notes, Date Added,
Code, Test Link
表格编辑那条线按位置读列,所以这些列别挪位置。
| 列 | 位置 | 为什么要紧 |
|---|---|---|
| Rejected | E,第 5 列 | 编辑这里会发出 Gmail2 的邮件 |
| Screening | G,第 7 列 | 编辑这里会发出 Gmail1 的邮件 |
| Test Approved | I,第 9 列 | 编辑这里会发出 Gmail3 的邮件 |
| Email | L,第 12 列 | 三封编辑邮件发往的地址 |
Indeed Email 存的是求职邮件的发件地址。Code 是之后每一步用来匹配的键。
workflow.json。/d/ 和 /edit 之间那一长串。Google Sheets、Google Sheets1、Google Sheets2 和 Google Sheets3 里选中它,把 YOUR_SHEET_ID 换成这个 ID。每个节点用的都是第一个工作表,也就是 gid=0。Gmail Trigger、Gmail、Gmail1、Gmail2 和 Gmail3 里选中它。Gmail Trigger 里加一个 Search 过滤条件,只让求职邮件启动运行,比如用你给它们打的标签来筛。OpenAI 里选中它。Cal.com Trigger 里选中它。你发布时,n8n 会自己到 Cal.com 注册 webhook,所以没有地址要复制。code。Google Sheets3 从这个问题读取回答。Gmail、Gmail1、Gmail2 和 Gmail3 的 Subject 和 Message。文件里它们是空的。Webhook 的正式地址。文件里不含让 Webhook 触发的脚本。Webhook 等的是一个 POST 请求,里面有被编辑单元格的值、它的列号,以及整行数据,格式是列表套列表。下面这段草稿发的正是这些。把它放进表格的 Apps Script 编辑器,替换 YOUR_WEBHOOK_URL,再到 Triggers 里给它加一个 On edit 触发器:普通的 onEdit 不能调用别的服务器。
function onSheetEdit(e) {
var sheet = e.range.getSheet();
var row = sheet.getRange(e.range.getRow(), 1, 1, sheet.getLastColumn()).getValues();
UrlFetchApp.fetch('YOUR_WEBHOOK_URL', {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify({ value: e.value, range: { columnStart: e.range.getColumn() }, rowValues: row })
});
}
只有 value 是文本 TRUE 时,Filter 才会放行,所以要勾选复选框,或者直接输入 TRUE。接着 Switch 把第 7 列交给 Gmail1,第 5 列交给 Gmail2,第 9 列交给 Gmail3,每个节点都写信到 rowValues[0][11],也就是 L 列。
| 线 | 什么时候开始 | 做什么 |
|---|---|---|
| 求职邮件 | Gmail Trigger 每小时检查一次,发现了新邮件 | OpenAI 从主题里读出职位名称,Google Sheets 按 Indeed Email 匹配,新增或更新这一行,Gmail 写信给发件人 |
| 入职 | 候选人提交 On form submission | Google Sheets1 更新按 Code 匹配到的行,把 Questions 设为 TRUE,并设置 Rejected |
| 表格编辑 | Apps Script 向 Webhook 发送请求 | Gmail1、Gmail2 或 Gmail3 写信给候选人 |
| 任务 | 候选人提交 On form submission1 | Google Sheets2 把 Test Complete 设为 TRUE,把链接存进 Test Link |
| 面试 | 有人在 Cal.com 上预约 | Google Sheets3 把 Interview Scheduled 设为 TRUE |
五条线在画布上互不相连,只有表格和代码把它们串在一起。
新行的 Code 来自 Math.floor(Math.random() * 999999),是一个最多六位的数字。First Name 和 Last Name 是把发件人的显示名在第一个空格处拆开得到的。Date Added 的写法类似 02/11/26 09:30AM。
Years Of Experience 为 1 或以下时,Google Sheets1 把 Rejected 设为 TRUE,否则设为 FALSE。
Gmail Trigger 的 Search 过滤条件。OpenAI 里的几条消息。这是一次 gpt-4o-mini 调用,按 { "job": "" } 的结构回答。$json.body.rowValues[0] 是整行数据,所以 S 列的代码是 rowValues[0][18],从 0 开始数。Google Sheets1 里 Rejected 的表达式。Google Sheets1 和 Google Sheets2 里对应的列。Switch 的三条规则,分别设为 7、5 和 9。Gmail1 布置任务,发出任务表单;Gmail3 请候选人预约面试;Gmail2 用来婉拒。Google Sheets1 和 Google Sheets2 找不到带这个代码的行时会追加一行,所以代码打错会留下一行不完整的记录。表单也不核对填代码的人是不是代码的主人。Code,旧代码就失效了。Webhook 也接受任何 POST 请求。打开它的 Authentication,并让脚本发送同样的请求头。README.md 7 KB workflow.json 39 KB
Sokheng · 工具包
这个模型从文档、收据和路牌照片里读取高棉语和英语文字,用一个检测器找文本行,再用识别器读每一行。适合需要在 Python 里做高棉语 OCR 的开发者。
Qwen · 工具包
Qwen2.5-7B-Instruct 的 GGUF 文件,提供八种量化大小,可通过 llama.cpp 在本地聊天。适合想在自己电脑上用 7.6B 强力模型、又不想搭 Python 环境的人。
ACE-Step · 工具包
用 4B 扩散解码器根据文字生成音乐,50 步并带引导控制,音频质量高于基础版。适合拥有 12 GB 或更多显存 GPU 的创作者。
perplexity-ai · 工具包
根据文字和图片为一个决策挑出最合适的选项,比如哪个团队应该处理一条请求,并给出每个选项的概率,适合构建分流和审核工作流的开发者。
numind · 工具包
以文本或图像读取文档,按你要的字段填写 JSON 模板,或把页面转成 Markdown。这是一个 4B 模型,适合处理扫描件、表单和发票的团队。
nace-ai · 工具包
一次推理就对一份文档的是非题、选择题和打分题给出每个选项的概率。这是 Nace.AI 的 8B 决策模型,你可以自己运行,许可证为非商业。