Xihu Hiring

Other

拉取飞书审批数据(人事-西湖数智),生成招聘进度 Excel 报表。 Triggers: 招聘进度, 刷新招聘表, 拉审批, 更新候选人, 重跑招聘, hiring tracker, xihu hiring. NOT for: 其他飞书审批, 通用 Excel 制作, 消息发送.

Install

openclaw skills install xihu-hiring

西湖数智招聘进度

拉取飞书审批模板「人事 - 西湖数智」的全部实例,应用人工更正,生成 3-sheet Excel 报表。

触发条件

用户说以下任何一种时触发此 skill:

  • "刷新招聘表" / "重跑招聘进度" / "拉一下飞书审批"
  • "把候选人数据更新一下" / "更新西湖数智的招聘 Excel"
  • "X 应该是一面后拒绝"(人工更正后重新生成)
  • "hiring tracker" / "recruitment dashboard"

不触发:无关的飞书审批、通用 Excel 工作。

常量

  • 审批 approval_code: 57E726C3-EA5E-4422-A2F3-ACED3A75F8D2
  • 时间窗口: 最近 120 天(飞书 API 硬限制)
  • 输出文件: 西湖数智-招聘进度.xlsx(覆盖写入当前工作目录)

执行流程

Step 0 — 环境准备

python3 -c "import openpyxl" 2>/dev/null || pip install openpyxl -q

如果 pip install 也失败,告诉用户需要安装 openpyxl。

Step 1 — 列出审批实例

计算 120 天前的毫秒时间戳,然后拉取实例列表:

lark-cli api GET "/open-apis/approval/v4/instances" \
  --params '{"approval_code":"57E726C3-EA5E-4422-A2F3-ACED3A75F8D2","start_time":"<120天前ms>","end_time":"<当前ms>","page_size":"100"}' \
  --as bot --page-all --format json

从返回的 data.instance_code_list 中获取所有实例 code。如果有分页(has_more=true),--page-all 会自动处理。

Step 2 — 获取每个实例详情

逐个获取(或批量,每次最多 5 个并行 shell):

lark-cli approval instances get \
  --params '{"instance_code":"<code>","locale":"zh-CN"}' \
  --as bot --format json

每个实例包含 serial_number, status, start_time, end_time, form(JSON 字符串), task_list(审批节点)。

Step 3 — 组装 payload JSON

将所有实例数据组装为 build_excel.py 所需的 JSON 格式(参见 references/fetch-approvals.md)。

关键字段映射:

  • form 中提取:姓名、申请职位、手机号、邮箱、毕业院校、曾经任职、cv
  • task_list 中按节点名聚合状态(优先级:REJECTED > PENDING > APPROVED)
  • 节点名:简历筛查/简历筛选、一面、二面、终面(= 三面)、办理

将 payload 写入 /tmp/hiring_payload.json

Step 4 — 生成 Excel

references/build-excel.md 中的 Python 脚本写到 /tmp/build_excel.py,然后执行:

python3 /tmp/build_excel.py --workspace "$(pwd)" --payload /tmp/hiring_payload.json

脚本会:

  • 读取当前目录下的 招聘进度_人工更正.json(如果存在)
  • 应用人工更正
  • 生成 西湖数智-招聘进度.xlsx
  • 输出 JSON 摘要(行数、各职位统计)

Step 5 — 报告结果

向用户展示:

  1. 简短摘要:投递人数 / 面试进行中 / 已发 Offer
  2. 文件路径
  3. 如有未映射的新职位(unmapped_positions 非空),提示用户确认归类

隐私规则:不要在对话中粘贴完整的候选人 PII(姓名+手机+邮箱),这些在 Excel 里有。


人工更正

当用户说"X 应该是一面后拒绝"时:

  1. 在当前 Excel 中查找 X 的审批编号
  2. 编辑 招聘进度_人工更正.json,将编号添加到对应类别
  3. 重新运行 Step 4

更正类别(对应 JSON key):

  • rejected_after_screening → 简筛后拒绝
  • rejected_after_round_1 → 一面后拒绝
  • rejected_after_round_2 → 二面后拒绝
  • rejected_after_round_3 → 三面后拒绝
  • withdrawn → 撤回

新职位出现时

如果脚本输出中 unmapped_positions 非空,必须询问用户:

"我看到一个新职位 'X',不在现有归一规则中。应该归入哪个类别?\n现有类别:视觉设计&视频制作、数据科学家、模型训练专家、具身算法专家、运动控制算法工程师、硬件全栈专家、硬件测试工程师、Infra专家、算法工程师、公关、商务拓展。\n还是新建一个类别?"

确认后,更新 references/build-excel.md 中脚本的 CANONICAL 字典。


参考文件

  • references/fetch-approvals.md — 详细的数据获取和 payload 组装步骤
  • references/normalization-rules.md — 职位归一规则及原因
  • references/build-excel.md — build_excel.py 脚本源码及使用说明