Moka 招聘与人事 Skill
覆盖两套互不通用的接口:招聘 ATS(组织与账号同步、职位与招聘需求、候选人与申请、面试、Offer、入职)和 People 人事(部门、员工任职数据、新增与离职员工、待入职)。重点讲清两套鉴权的区别、People 的 MD5withRSA 签名、各接口不统一的成功码与分页方式,以及两种 Webhook 的验签与重试。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill moka --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill moka --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill moka --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill moka --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill moka --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill moka --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill moka --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill moka --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill moka --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/moka/prompt.md 并照它执行装对了的标志:references/ 下有 8 份文档,里面 grep '<!-- Gap:' 能搜到 1 处。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
8 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
鉴权与环境
两套 API 的区别、域名、ATS Basic 与 OAuth2、People MD5withRSA 签名、鉴权失败的样子
组织与账号同步
部门全量 / 增量 / 更新 / 合并删除,用户账号同步与读取
职位与招聘需求
职位查询、创建、更新、发布下架,招聘官网职位列表,招聘需求 HC
候选人与申请
申请增量拉取、批量详情、条件查询、官网投递与上传简历、移动阶段、归档、附件
面试、Offer 与入职
创建与查询面试,Offer 创建、审批、发送、接受拒绝回写,标记入职离职
People 人事
部门读写、员工任职数据增量、新增更新离职员工、待入职、职位职务
推送 Webhooks
ATS 推送的 HMAC 验签与 AES 解密、People 推送的校验、回复格式、重试与幂等
错误码与限流
响应结构一览、ATS 错误码号段、People 全局错误码与 HTTP 600 限流、分页与时间格式
当前事实
整理自官方文档(抓取于 2026-09-11),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| ATS Base URL | https://api.mokahr.com/api-platform/v1(部分在 /v2、/v3、/open-api/ats/v3) |
| ATS 鉴权 | Authorization: Basic base64("KEY:"),或 OAuth2 换 2 小时 accessToken 后 Bearer |
| People 鉴权 | Basic 加 query entCode、apiCode、nonce、timestamp、sign(MD5withRSA) |
| 鉴权失败 | ATS 为 HTTP 500 code:-1;People 为 HTTP 403(无凭证探测) |
| 最易选错 | People 每个接口一个 apiCode;ATS 成功码按接口不同:success / code:0 / code:200 |
照通用经验写容易错的 6 件事
来自官方文档,还没有用真实凭证验证。
- 招聘和人事是两套 API。People 每个请求都要 RSA 签名,并为每个能力单独建接口拿 apiCode;同一个
/v1/batch/data返回什么由 apiCode 决定。 - ATS 没有统一的成功判定。有的回
success,有的code:0或code:200;鉴权失败是 HTTP 500,别当临时故障重试。 - 分页至少五种。
fromTime起步再只带next、body 游标每页 ≤ 20、limit/offset、pageNum/pageSize、nextCursor/hasMore。 - 参数位置与拼写反直觉。移动阶段是 PUT 加 query 参数;申请详情路径是文档拼写
getApplictaions,拼对的getApplications返回 404。 PUT /v2/departments是全量同步。没传的部门会被标记删除;新增用/sync/incremental,更新用 POST。- Webhook 验签对原始 body 做。Python 默认
json.dumps带空格会让签名对不上;文档 AES 解密示例编码写反;People 推送只带 ID。
无凭证探测
- ATS 不带鉴权或伪造 API Key:HTTP 500,
{"code":-1,"success":false,"msg":"无法识别的认证信息"}。 - ATS OAuth2 换 token 用伪造 clientID:HTTP 200,
code:110020 unauthorized_client。 - ATS 路由先于鉴权:未知路径返回 404;文档拼写
/v3/data/getApplictaions存在,getApplications返回 404。 - People 一切未授权请求(含不存在路径):HTTP 403,
{"success":false,"msg":"无法识别的认证信息"},文档写的是 401 / 100001。 http://api.mokahr.com不会跳转到 https,直接返回鉴权错误。- 招聘官网职位列表
GET /v1/jobs/{orgId}不带鉴权时返回参数错误招聘模式 必填,而非鉴权错误。 - 国际版域名 hire-r1-api.mokahr.com 与测试域名 api-staging-3.mokahr.com 在线,鉴权失败格式与正式域名一致。