文档版本切换/platform
Api接口v1版本
切换到Api接口v1版本
v2版本
切换到Api接口v2版本
考试/测评、背调、视频面试接入指南 (platform)
整体流程图/flowchart
绑定认证/Oauth
考试/测评、背调、视频面试需要分别进行绑定
a、绑定步骤
1.第三方供应商提供推送token的URL与功能URL(根据第三方供应商种类不同,提供的不同业务的URL。如考试第三方供应商则提供创建考试的URL)。
2.CSM向第三方供应商发放clientId与clientSecret。
3.第三方供应商带着clientId与redirectUri将用户导向至moka认证页面。
4.验证成功后moka内部绑定成功,然后带着一次性code将跳转回redirectUri。
5.第三方供应商用code与clientSecret等请求moka提供API得到accessToken、refreshToken、appId(每次绑定生出唯一值,appId与mokaUser绑定,appId与第三方供应商用户绑定),第三方供应商绑定成功。
补充
第三方供应商通过refreshToken维护accessToken长时间有效,如有特殊情况,可以通过联系CSM提供一次推送token的服务(推送到第1步提供的URL上)。
b、认证所需接口
a.moka认证页面
请求地址: https://app.mokahr.com/oauth/login
请求方式: GET
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
clientId | 是 | String | moka生产的client的唯一标识 |
redirectUri | 是 | String | 重定向地址 必须为开通时填写的地址一致 |
scope | 是 | String | 第三方供应商拥有权限 exam: 考试, evaluation: 测评, interview: 视频面试, survey: 背调 |
state | 否 | String | 在回调时,会回传state参数给第三方应用,第三方应用的开发者可以验证state参数的有效性(也可以记录用户授权页面的位置) |
返回:(绑定后,浏览器页面会跳转到回调地址)
redirectUri?code=xxxx
例:http://www.xxx.com/redirect?code=xxx
注:
1、code参数会拼接到回调地址url上
2、code有效期为五分钟
---------------------------------------------------------------------------------------
b.获取accessToken
请求地址: https://api.mokahr.com/api/oauth/token
请求方式: POST
body类型: application/x-www-form-urlencoded
请求Headers: Content-Type: application/x-www-form-urlencoded
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | String | 上一步获得的code |
clientId | 是 | String | 开通时提供 |
clientSecret | 是 | String | 开通时提供 |
redirectUri | 是 | String | 上一步填写的redirectUri |
hireMode | 否 | integer | 招聘模式, 1:社招;2:校招。不填默认都绑定。 |
返回结果:
字段 | 类型 | 描述 |
---|---|---|
accessToken | String | 访问moka接口的token |
accessTokenExpiresAt | String | token过期时间 如:2019-03-24T05:45:39.014Z 默认为30天 |
refreshToken | String | 用于刷新accessToken的refreshToken |
refreshTokenExpiresAt | String | refreshToken的过期时间 如:2019-03-24T05:45:39.014Z 默认为60天 |
scope | String | 该token所据有的权限 |
appId | String | 每次绑定moka生成的唯一值 建议与第三方供应商账号绑定 |
---------------------------------------------------------------------------------------
c.刷新accessToken
请求地址: https://api.mokahr.com/api/oauth/refresh-token
请求方式: POST
body类型: application/x-www-form-urlencoded
请求Headers: Content-Type: application/x-www-form-urlencoded
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
refreshToken | 是 | String | 上一步获得的refreshToken |
clientId | 是 | String | 开通时提供 |
clientSecret | 是 | String | 开通时提供 |
返回结果:
字段 | 类型 | 描述 |
---|---|---|
accessToken | String | 访问moka接口的token |
accessTokenExpiresAt | String | token过期时间 如:2019-03-24T05:45:39.014Z 默认为30天 |
refreshToken | String | 用于刷新accessToken的refreshToken |
refreshTokenExpiresAt | String | refreshToken的过期时间 如:2019-03-24T05:45:39.014Z 默认为60天 |
scope | String | 该token所据有的权限 |
---------------------------------------------------------------------------------------
d.开放平台解绑
请求样例
curl -X POST \
https://app.mokahr.com/api/oauth/unbind \
--header 'Authorization: Bearer 489645c7ab5f6230d95f6f9488f1d26f6387cbef' \
--header 'Content-Type: application/json' \
--data '{"clientId":"a3212","clientSecret":"1","appId":"844450f0-90cc-4722-a3b6-f631fb4a3926"}'
请求地址: https://app.mokahr.com/api/oauth/unbind
请求方式: POST
body类型: application/json
请求Headers: Content-Type: application/json 和 Authorization: Bearer AccessToken
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
clientId | 是 | String | 开通时提供 |
clientSecret | 是 | String | 开通时提供 |
appId | 是 | String | 每次绑定moka生成的唯一值 |
hireMode | 否 | integer | 招聘模式, 1:社招;2:校招。不填默认都解绑。 |
返回结果:
字段 | 类型 | 描述 |
---|---|---|
success | Boolean | 是否成功解绑 |
errorMessage | String | 解绑失败信息 |
服务商信息
更新logo信息
请求样例
$ curl --request POST \
--url http://api.mokahr.com/v1/open-platform/client/info \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--header 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
--form 'logo=@/Users/test/test.png'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/client/info
请求方式: POST
body类型: multipart/form-data方式
请求body参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
logo | 是 | file | 在moka中展示的logo。建议尺寸50px*50px |
更新账户名信息
请求样例
$ curl --request POST \
--url http://api.mokahr.com/v1/open-platform/account/name \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"appId": "d5200272-b9e2-44ac-b728-26d41780ed95","accountName": "我是好人别吃我"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/account/name
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
accountName | 是 | String | 账号名称 允许多账号绑定的client类型 切换账号时的名称 |
考试/测评
业务流程图
Moka请求第三方供应商API
a.创建考试
请求样例
$ curl --request POST \
--url 'http://vendor.com/creat?appId=E8iWPLYYQq8dB5Lu3PEbTQwYLlyzaVOu&clientId=9734f2bc-beff-4439-9497-0aa11fcc932c&time=1547100372&sign=08b6a2f880c697bdee9b6069cbed81ceb7300ea4' \
--header 'Content-Type: application/json' \
--data '{"id": "9734f2bc-beff-4439-9497-0aa11fcc932c","event": "createExam","triggeredAt": 1547100372,"data": {"test": true}}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time + 请求体body) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
id | 是 | String | moka生成的id(随机数) |
event | 是 | String | 事件名称如: createExam |
triggeredAt | 是 | Number | 触发的时间戳 |
data | 是 | Object | 请求的具体内容 |
data.applicationId | 是 | Number | 候选人ID |
data.name | 是 | String | 候选人名字 |
data.email | 是 | String | 候选人邮件 |
data.phone | 否 | String | 候选人手机号 |
data.certificateType | 否 | Integer | 证件类型1:身份证,2:香港身份证,3:澳门身份证,4:台湾身份证,5:护照,6:其他证件(需客户页面勾选配置才会传送) |
data.citizenId | 否 | String | 居民身份证号(需客户页面勾选配置才会传送) |
data.paperId | 是 | String | 试卷Id |
data.examId | 是 | Number | 考试结果回传时用的ID.moka保证唯一 |
data.appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
data.hireMode | 是 | Number | 1-社招 2-校招 |
返回结果:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
v2Res | 是 | Object | v2格式 |
v2Res.code | 是 | Integer | 0:成功,非0失败 |
v2Res.msg | 是 | msg | 失败/成功描述 |
v2Res.data | 是 | Object | data |
v2Res.data.url | 是 | String | 考生考试地址 |
v2Res.data.name | 否 | String | 账号 |
v2Res.data.password | 否 | String | 密码 |
v2Res.data.startTime | 否 | long | 邮件通知上的开始时间(毫秒),不限时可传'',如果不传,则取创建试卷接口上的开始时间,发送给候选人 |
v2Res.data.endTime | 否 | long | 邮件通知上的结束时间(毫秒),不限时可传'',如果不传,则取创建试卷接口上的结束时间,发送给候选人 |
补充
为了安全性,请验证time的实效性,建议5分钟内有效。
第三方供应商请求Moka API
a.余额
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/exam/balance \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"discount": 0.4,"balance": "100","freeCount": 5, "appId": "fabd076f-1a0f-4fa8-8a5c-306d264e3df1"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/exam/balance
请求方式: POST
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
discount | 否 | Number | 折扣(0-10) 不传或超出范围均当无折扣计算 |
balance | 是 | Number | 账户余额 |
freeCount | 否 | Number | 不计余额剩余次数 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
b.全量同步试卷列表
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/exam/papers \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"paperList": [{"paperId": "1112","name": "2222222","price": 2}],"appId": "a5fb37d3-f2d1-4121-b59f-b1ca385096b0"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/exam/papers
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
paperList | 是 | Array | 试卷列表 |
paperList[].paperId | 是 | String | 试卷ID |
paperList[].name | 是 | String | 试卷名称 |
paperList[].startTime | 是 | String | 开始时间 不限时可传'' |
paperList[].endTime | 是 | String | 结束时间 不限时可传'' |
paperList[].price | 是 | Number | 试卷消耗 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
c.更新试卷
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/exam/paper \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"paperId": "1112","name": "test","price": 0, "appId": "8c639a7a-2298-42dd-b0fa-9f23895a60ac"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/exam/paper
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
paperId | 是 | String | 试卷ID |
name | 是 | String | 试卷名称 |
startTime | 是 | String | 试卷开始时间 不限时可传'' |
endTime | 是 | String | 试卷结束时间 不限时可传'' |
price | 是 | Number | 试卷消耗 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
d.删除试卷
请求样例
$ curl --request DELETE \
--url https://api.mokahr.com/api-platform/v1/open-platform/exam/paper \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"paperId": "1", "appId": "fabd076f-1a0f-4fa8-8a5c-306d264e3df1"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/exam/paper
请求方式: DELETE
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
paperId | 是 | String | 试卷Id |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
e.成绩回传
请求样例
$ curl --request POST \
--url http://api.mokahr.com/v1/open-platform/exam/result \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{
"examId": "1",
"result": "5",
"comment": "不错",
"cheatedStatus":2,
"attachments":[
{
"name": "123.pdf",
"url": "http://www.example.com/123.pdf"
}
],
"detail":[
{
"id": "XXX",
"name": "XXX",
"result": "XXX"
}
]
}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/exam/result
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
examId | 是 | Number | 创建考试的时候moka传给第三方供应商的examId |
result | 是 | String | 成绩 |
cheatedStatus | 否 | number | 默认是-1,未知,0:未作弊;1:作弊;2:作弊嫌疑 |
comment | 否 | String | 评价 (注:传字段的话值不能为空,或者不用传该字段 |
attachments | 否 | Array | 附件 |
attachments[].name | 否 | String | 附件名称 (注:必须要有后缀,例:123.pdf) |
attachments[].url | 否 | String | 附件URL (注:目前只支持文件格式的附件url。不需要url编码) |
detail | 否 | Array | 详细维度 (注:数组最大长度20个) |
detail[].id | 否 | String | 详细维度id(注:相同试卷的同一维度需保证id唯一,若为空则不支持筛选;返回结果中只支持都传id,或都不传id,不支持部分带id) |
detail[].name | 否 | String | 详细维度名称(注:如果detail不为空,name必传) |
detail[].result | 否 | String | 详细维度成绩(注:如果detail不为空,result必传) |
reportUrl | 否 | String | 服务商报告链接 |
---------------------------------------------------------------------------------------
mokaAPI返回结果:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
success | 是 | boolean | 返回结果是否成功 |
背调
业务流程图
Moka请求第三方供应商API
a.创建背调
请求样例
$ curl --request POST \
--url 'http://vendor.com/creat?appId=E8iWPLYYQq8dB5Lu3PEbTQwYLlyzaVOu&clientId=9734f2bc-beff-4439-9497-0aa11fcc932c&time=1547100372&sign=08b6a2f880c697bdee9b6069cbed81ceb7300ea4' \
--header 'Content-Type: application/json' \
--data '{"id": "9734f2bc-beff-4439-9497-0aa11fcc932c","event": "createSurvey","triggeredAt": 1547100372,"data": {"test": true}}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time + 请求体body) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
id | 是 | String | moka生成的id(随机数) |
event | 是 | String | 事件名称如: createExam |
triggeredAt | 是 | Number | 触发的时间戳 |
data | 是 | Object | 请求的具体内容 |
data.applicationId | 是 | Number | 候选人ID |
data.name | 是 | String | 候选人名字 |
data.email | 是 | String | 候选人邮件 |
data.phone | 否 | String | 候选人手机号 |
data.menuId | 是 | String | 套餐Id |
data.surveyId | 是 | String | 结果回传时用的ID.moka保证唯一 |
data.appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
data.customFields | 是 | Object | 自定义字段 |
data.operator | 是 | Object | 操作人对象 |
data.operator.name | 是 | String | 操作人名字 |
data.operator.email | 是 | String | 操作人邮件 |
data.operator.phone | 否 | String | 操作人手机号 |
返回结果:statusCode: 200
字段 | 类型 | 描述 |
---|---|---|
v2Res | object | 新版本3段式返回结构 |
v2Res.code | integer | 0: 成功 非0:失败 |
v2Res.msg | string | 返回信息描述 |
v2Res.data | object | 返回信息 |
v2Res.data.detailLink | String | 背调详情链接(用于从MOKA跳到服务商直接查看背调) 非必须 |
b.取消背调
请求样例
curl -X POST "https://vender.com?appId=&clientId=&time=&sign=" --header 'Content-Type: application/json' --data '{
"id": "12345",
"event": "cancelSurvey",
"triggeredAt": "12345678901",
"data.surveyId": "12345",
"data.reason": "候选人拒绝入职"
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time) |
请求body
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
id | 是 | String | moka生成的id(随机数) |
event | 是 | String | 事件名称如: cancelSurvey |
triggeredAt | 是 | Number | 触发的时间戳 |
data | 是 | Object | 请求的具体内容 |
data.surveyId | 是 | String | 背调Id |
data.reason | 否 | String | 取消原因 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | number | 非0代表失败 |
msg | 否 | string | 返回信息描述 |
data | 是 | object | 返回信息 |
补充
为了安全性,请验证time的实效性,建议5分钟内有效。
c.推送候选人信息
请求样例
@curl --location --request POST 'http://mock-server-yapi.staging-public.svc.k8s.staging.mokahr.com:8080/mock/49/createSurveyV2?appId=980ccbb7-546d-4045-afda-470500ed7258&clientId=PuOBW99eIaJCkFyqI8KhxYX4VMwn3udi&time=1657000349825&sign=4669cf13fa3cfe0004d21ea04eafb01c21a39858' \
--header 'Content-Type: application/json' \
--data-raw '{
"orgName": "Moka-生态专用测试",
"phone": "14592000018",
"accountName": "默认账号",
"jobTitle": "sy校招职位3",
"name": "sys1xz190",
"applicationId": 422059007,
"experiences": [
{
"endDate": "2019-01",
"company": "公司2",
"startDate": "2021-01"
},
{
"endDate": "2016-01",
"company": "公司1",
"startDate": "2017-01"
}
],
"uniqueId": "55c1a97d5b6540e6878f5da5f2d7ebbc797bac2a09664a4ab7b55aed149cf4ee",
"email": "1009417583@qq.com",
"operator": {
"phone": "15001371285",
"name": "石越",
"email": "shiyue@mokahr.com"
}
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time) |
请求body
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
uniqueId | 是 | String | 唯一ID 用于回传背调订单信息 |
applicationId | 是 | Number | 申请ID |
name | 是 | String | 姓名 |
是 | string | 邮箱 | |
phone | 是 | String | 手机号 |
jobTitle | 是 | String | 委托公司名称 |
orgName | 否 | String | 姓名 |
operator | 是 | object | 操作人 |
operator.name | 是 | String | 姓名 |
operator.email | 是 | String | 邮箱 |
operator.phone | 否 | String | 手机号 |
experiences | 是 | array | 候选人经历信息 |
experiences[].company | 否 | string | 公司名称 |
experiences[].jobTitle | 否 | string | 曾就职名称 |
experiences[].startDate | 否 | string | 开始时间 |
experiences[].endDate | 否 | string | 结束时间 |
accountName | 是 | string | 账号名称 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | number | 非0代表失败 |
msg | 否 | string | 返回信息描述 |
data | 是 | object | 返回信息 |
data.redirectUrl | 是 | string | 跳转链接 |
第三方供应商请求Moka API
a.余额
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/survey/balance \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"discount": 0.4,"balance": "100","freeCount": 5, "appId": "fabd076f-1a0f-4fa8-8a5c-306d264e3df1"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/balance
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
discount | 否 | Number | 折扣(0-10) 不传或超出范围均当无折扣计算 |
balance | 是 | Number | 账户余额 |
freeCount | 否 | Number | 不计余额剩余次数 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
b.自定义字段
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/survey/custom-fields \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"customFields": [{"name": "company","description": "公司"},{"name": "abc","description": "Moka页面显示的名字"}]}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/custom-fields
接口说明: 全局自定义字段,设置后对使用该服务商的所有租户的所有套餐均适用,个性化自定义字段请在套餐自定义字段中设置
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
customFields | 是 | Array | 自定义字段数组 |
customFields[].type | 是 | integer | 自定义字段类型: 0:单行文本,1:多行文本,2:单选题,3:多选题,4:候选人公司,5:候选人学校,6:预计入职时间 |
customFields[].options | 否 | array | 自定义字段选择项,选填,当type为2或3的时候,添加JSON型数组, sample: [{ "id": 1, "name": "A"},{"id":2,"name":"B"}]id表示选择组件的选项ID name表示选择组件的选项名称,发起背调时 单选时 传递的参数值是id,多选时 传递的参数值是以逗号分隔的多个id |
customFields[].name | 是 | String | 传给接口的字段key |
customFields[].description | 是 | String | Moka页面显示的名字 |
customFields[].isRequired | 否 | boolean | 是否必填 |
---------------------------------------------------------------------------------------
c.全量套餐列表
请求样例
$ curl --location --request POST 'https://api.mokahr.com/api-platform/v1/open-platform/survey/menus' \
--header 'Authorization: Bearer 7**********************79' \
--header 'Content-Type: application/json' \
--data-raw '{
"menuList": [
{
"price": 280,
"name": "社招B套餐",
"menuId": "D7***************439A",
"description": "社招B套餐"
},
{
"price": 150,
"name": "学生套餐",
"menuId": "BCA8****************C9EA439A",
"description": "学生套餐"
}
],
"appId": "1a7c7b6d-6***************5acc14f0"
}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/menus
接口说明: 如果套餐中设置了自定义字段则使用套餐的设置,否则使用服务商级别的全局自定义字段
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
menuList | 是 | Array | 套餐列表 |
menuList[].menuId | 是 | String | 套餐ID |
menuList[].name | 是 | String | 套餐名称 |
menuList[].description | 是 | String | 套餐描述 |
menuList[].price | 是 | Number | 套餐价格 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
menuList[].customFields | 否 | array | 套餐自定义字段(参照自定义字段接口) |
menuList[].customFields[].type | 是 | number | 自定义字段类型: 0:单行文本,1:多行文本,2:单选题,3:多选题,4:候选人公司,5:候选人学校,6:预计入职时间 |
menuList[].customFields[].name | 是 | string | 自定义字段描述 |
menuList[].customFields[].description | 是 | string | 自定义字段描述 |
menuList[].customFields[].options | 否 | array | 自定义字段选择项,选填,当type为2或3的时候,添加JSON型数组, sample: [{ "id": "1", "name": "A"},{"id":"2","name":"B"}]id表示选择组件的选项ID name表示选择组件的选项名称,发起背调时 单选时 传递的参数值是id,多选时 传递的参数值是以逗号分隔的多个id |
menuList[].customFields[].options[].id | 是 | string | 选择组件的选项ID |
menuList[].customFields[].options[].name | 是 | string | 选择组件的选项名称 |
menuList[].customFields[].isRequired | 否 | boolean | 是否必填 |
---------------------------------------------------------------------------------------
d.更新套餐
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/survey/menu \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"menuId": "1112","name": "test","price": 0,"appId": "a5fb37d3-f2d1-4121-b59f-b1ca385096b0"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/menu
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
menuId | 是 | String | 套餐ID |
name | 是 | String | 套餐名称 |
description | 否 | String | 套餐描述 |
price | 是 | Number | 试卷消耗 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
customFields | 否 | array | 套餐自定义字段(参照自定义字段接口) |
customFields[].type | 是 | number | 自定义字段类型: 0:单行文本,1:多行文本,2:单选题,3:多选题,4:候选人公司,5:候选人学校,6:预计入职时间 |
customFields[].name | 是 | string | 自定义字段描述 |
customFields[].description | 是 | string | 自定义字段描述 |
customFields[].options | 否 | array | 自定义字段选择项,选填,当type为2或3的时候,添加JSON型数组, sample: [{ "id": "1", "name": "A"},{"id":"2","name":"B"}]id表示选择组件的选项ID name表示选择组件的选项名称,发起背调时 单选时 传递的参数值是id,多选时 传递的参数值是以逗号分隔的多个id |
customFields[].options[].id | 是 | string | 选择组件的选项ID |
customFields[].options[].name | 是 | string | 选择组件的选项名称 |
customFields[].isRequired | 否 | boolean | 是否必填 |
---------------------------------------------------------------------------------------
e.删除套餐
请求样例
$ curl --request DELETE \
--url https://api.mokahr.com/api-platform/v1/open-platform/survey/menu \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"menuId": "1","appId": "a5fb37d3-f2d1-4121-b59f-b1ca385096b0"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/menu
请求方式: DELETE
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
menuId | 是 | String | 套餐Id |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
f.结果回传
请求样例
$ curl --request POST \
--url http://api.mokahr.com/v1/open-platform/survey/result \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{
"result": "xxx",
"surveyId": "1",
"comment": "最大255的限制制",
"attachment": {
"name": "123.html",
"url": "http://www.example.com/index.html"
}
}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/result
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
result | 否 | String | 结果(长度限制20个字符,为空时默认为完成) |
attachment | 否 | Object | 附件 |
attachment.name | 否 | String | 附件名称(需要带上后缀名) |
attachment.url | 否 | String | 附件URL,不需要url编码 |
surveyId | 是 | Number | 创建背调的时候moka传给第三方供应商的surveyId |
attachments[] | 否 | Array | 背调多附件,最多支持10个附件(新对接的单附件或多附件请传这个字段,原attachment对象只是兼容历史版本) |
attachments[].name | 是 | String | 附件名称(需要带上后缀名) |
attachments[].url | 是 | String | 附件URL,不需要url编码 |
comment | 否 | String | 备注,支持255个字符 |
---------------------------------------------------------------------------------------
mokaAPI返回结果:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
success | 是 | boolean | 返回结果是否成功 |
---------------------------------------------------------------------------------------
g.背调进度阶段回传
请求样例
$ curl --request POST \
--url http://api.mokahr.com/v1/open-platform/survey/stage \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"stageId": "1", "name": "发送链接给候选人", "stageAt": "2019-10-10 01:01:01", "surveyId": 3}'
返回样例
{
success: true
}
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/stage
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
stageId | 否 | String | 背调阶段ID |
name | 是 | String | 背调阶段名称 |
stageAt | 是 | datetime | 背调阶段的时间 |
surveyId | 是 | Number | 创建背调的时候moka传给第三方供应商的surveyId |
---------------------------------------------------------------------------------------
mokaAPI返回结果:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
success | 是 | boolean | 返回结果是否成功 |
---------------------------------------------------------------------------------------
h.回传候选人信息
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/survey/getCandidateInfo \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"surveyId": 18}'
返回样例
{
code: 0,
msg: "success",
data: {
resumeUrl: "https://proxy-oss-test.mokahr.com/a5684434-86d8-44db-bd69-76ebe942e12e.pdf?OSSAccessKeyId=LTAIoEXIQWCGUAZO&Expires=1599462096&Signature=IrNuG2qaCJXp8FM7JyvPe04N5%2B0%3D",
standardResumeUrl: "https://proxy-oss-test.mokahr.com/xxx.pdf?OSSAccessKeyId=LTAIoEXIQWCGUAZO&Expires=1599462096&Signature=IrNuG2qaCJXp8FM7JyvPe04N5%2B0%3D"
}
}
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/survey/getCandidateInfo
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
surveyId | 是 | Number | 创建背调的时候moka传给第三方供应商的surveyId |
---------------------------------------------------------------------------------------
mokaAPI返回结果:
字段 | 类型 | 描述 |
---|---|---|
code | number | 非0代表错误 |
success | string | 返回处理的结果信息 |
data | object | 返回结果的对象 |
data.resumeUrl | string | 原始简历链接(客户在MOKA配置了允许推送原始简历且存在原始简历时 值非空) |
data.standardResumeUrl | string | 标准简历链接(客户在MOKA配置了允许推送标准简历时 值非空) |
I.回传背调订单信息
请求样例
$ curl --location --request POST 'https://app.mokahr.com/api-platform/v2/open-platform/survey/orderCallback' \
--header 'Authorization: Bearer 6cdc13de41c5e76e020d403cb227cf7754962786' \
--header 'Content-Type: application/json' \
--data-raw '{
"menuId": "s2test1",
"menuName": "S2测试套餐",
"uniqueId": "f67cd05d67294e8b86c55eee5f3587da17a01b6c39ed4374ba7c2784aaa573e7",
"detailLink": "https://beidiao.com/orderDetail?token=XXX"
}'
返回样例
{
code: 0,
msg: "success",
data: {
surveyId: "***"
}
}
请求地址: https://api.mokahr.com/api-platform/v2/open-platform/survey/orderCallback
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
menuId | 是 | string | 套餐Id |
menuName | 是 | string | 套餐名称 |
uniqueId | 是 | string | 唯一ID |
detailLink | 否 | string | 背调详情链接 (用于从MOKA跳转到服务商查看背调详情) |
---------------------------------------------------------------------------------------
mokaAPI返回结果:
字段 | 类型 | 描述 |
---|---|---|
code | number | 非0代表错误 |
msg | string | 返回处理的结果信息 |
data | object | 返回结果的对象 |
data.surveyId | string | 返回MOKA侧背调ID,用于背调结果回传结果的链接 |
视频面试
Moka请求第三方供应商API
a.创建视频面试
请求样例
$ curl --request POST \
--url 'http://vendor.com/creat?appId=E8iWPLYYQq8dB5Lu3PEbTQwYLlyzaVOu&clientId=9734f2bc-beff-4439-9497-0aa11fcc932c&time=1547100372&sign=08b6a2f880c697bdee9b6069cbed81ceb7300ea4' \
--header 'Content-Type: application/json' \
--data '{
"id": "070e67b4e1104daca596059898c31e9b",
"event": "createInterview",
"triggeredAt": 1614675195,
"data": {
"applicationId": 418430746,
"name": "test2",
"email": "wangliwei@mokahr.com",
"phone": "17657685768",
"typeId": "1379",
"interviewTime": "2021-03-02 17:00:00",
"hireMode": 1,
"appId": "836474a1-cdaf-4fab-9bfd-047bd29b0c3b",
"jobTitle": "自动化测试-飞飞",
"interviews": [
{
"startTime": "2021-03-02 17:00:00",
"duration": 30,
"interviewers": [
{
"name": "石越",
"email": "shiyue@mokahr.com",
"phone": "15001371285"
}
]
},
{
"startTime": "2021-03-02 17:30:00",
"duration": 30,
"interviewers": [
{
"name": "王立伟2",
"email": "3300352025@qq.com",
"phone": "17857685760"
},
{
"name": "shuobin",
"email": "wangshuobin@mokahr.com",
"phone": "18746574657"
}
]
}
]
}
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time + 请求体body) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
id | 是 | String | moka生成的id(随机数) |
event | 是 | String | 事件名称如: createExam |
triggeredAt | 是 | Number | 触发的时间戳 |
data | 是 | Object | 请求的具体内容 |
data.applicationId | 是 | Number | 候选人ID |
data.name | 是 | String | 候选人名字 |
data.email | 是 | String | 候选人邮件 |
data.phone | 否 | String | 候选人手机号 |
data.typeId | 是 | String | 类型Id |
data.interviewTime | 是 | String | 面试时间 YYYY-MM-DD HH:mm:ss |
data.hireMode | 是 | Number | 1-社招 2-校招 |
data.appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
data.jobTitle | 是 | String | 职位名称 |
data.interviews | 是 | Array | 面试信息 |
data.interviews[].startTime | 是 | String | 面试开始时间 |
data.interviews[].duration | 是 | Number | 面试时长 |
data.interviews[].interviewers | 是 | Array | 面试官信息 |
data.interviews[].interviewers[].email | 是 | String | 面试官邮箱 |
data.interviews[].interviewers[].name | 是 | String | 面试官信息 |
data.interviews[].interviewers[].phone | 是 | String | 面试官电话 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
videoId | 是 | String | vendor保证唯一uid |
interviewerUrl | 是 | String | 面试官地址 |
intervieweeUrl | 是 | String | 候选人面试地址 |
b.创建面试V2版本
请求样例
$ curl --request POST \
--url 'http://www.test.com/interview/creat?appId=E8iWPLYYQq8dB5Lu3PEbTQwYLlyzaVOu&clientId=9734f2bc-beff-4439-9497-0aa11fcc932c&time=1547100372&sign=08b6a2f880c697bdee9b6069cbed81ceb7300ea4' \
--header 'Content-Type: application/json' \
--data '{
"appId": "6542335467",
"typeId": "324354657",
"hireMode": 1,
"groupId": "6542335467",
"candidates": [
{
"applicationId": 12345,
"name": "张三",
"email": "zhangsan@test.com",
"phone": "15012345678",
"countryCallingCode": "+86",
"jobTitle": ""
}
],
"interviews": [
{
"interviewId": 12345,
"roundId": 1,
"roundName": "第一轮",
"startTime": "2020-01-01",
"duration": 30,
"interviewers": [
{
"interviewInterviewerId": 3456,
"email": "lisi@test.com",
"name": "李四",
"phone": "15012345678"
}
]
}
],
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
candidates | 是 | Array | 候选人信息 |
candidates[].applicationId | 是 | Number | 候选人申请ID |
candidates[].name | 是 | String | 候选人名字 |
candidates[].email | 是 | String | 候选人邮件 |
candidates[].phone | 否 | String | 候选人手机号 |
candidates[].countryCallingCode | 否 | String | 候选人电话区号 |
candidates[].jobTitle | 是 | String | 职位名称 |
appId | 是 | String | 与moka绑定成功后返回的appId |
typeId | 是 | String | 类型Id |
hireMode | 是 | Number | 1-社招 2-校招 |
groupId | 是 | String | 面试组ID |
interviewCreatorEmail | 否 | String | 面试创建人邮箱 |
interviews | 是 | Array | 面试信息 |
interviews[].interviewId | 是 | String | 面试id |
interviews[].roundId | 是 | Number | 轮次id |
interviews[].roundName | 是 | String | 轮次名称 |
interviews[].startTime | 是 | String | 面试开始时间 |
interviews[].duration | 是 | Number | 面试时长(单位:分) |
interviews[].interviewers | 是 | Array | 面试官信息 |
interviews[].interviewers[].interviewInterviewerId | 是 | Number | 面试的面试官ID |
interviews[].interviewers[].email | 是 | String | 面试官邮箱 |
interviews[].interviewers[].name | 是 | String | 面试官姓名 |
interviews[].interviewers[].phone | 否 | String | 面试官电话 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | Number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | Object | 返回信息 |
data.videoId | 是 | String | vendor保证唯一uid |
data.intervieweeUrls | 是 | Array | 候选人面试地址 |
data.intervieweeUrls[].applicationId | 是 | Number | 申请ID |
data.intervieweeUrls[].interviewId | 是 | Number | 面试ID |
data.intervieweeUrls[].url | 是 | String | 候选人面试地址 |
data.interviewerUrls | 是 | Array | 面试官面试地址 |
data.interviewerUrls[].interviewInterviewerId | 是 | Number | 面试的面试官ID |
data.interviewerUrls[].url | 是 | String | 面试官面试地址 |
c.修改面试V2版本
与V2的创建面试接口配套使用
请求样例
$ curl --request POST \
--url 'http://www.test.com/interview/uodate?appId=E8iWPLYYQq8dB5Lu3PEbTQwYLlyzaVOu&clientId=9734f2bc-beff-4439-9497-0aa11fcc932c&time=1547100372&sign=08b6a2f880c697bdee9b6069cbed81ceb7300ea4' \
--header 'Content-Type: application/json' \
--data '{
"videoId": "6542335467",
"groupId": "324354657",
"interviews": [
{
"interviewId": 12345,
"roundId": 1,
"roundName": "第一轮",
"startTime": "2020-01-01",
"duration": 30,
"interviewers": [
{
"interviewInterviewerId": 3456,
"email": "lisi@test.com",
"name": "李四",
"phone": "15012345678"
}
]
}
],
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
videoId | 是 | String | 创建面试后vendor返回的值 |
groupId | 是 | String | 面试组ID |
interviewModifierEmail | 否 | String | 面试修改人邮箱 |
interviews | 是 | Array | 面试信息 |
interviews[].interviewId | 是 | String | 面试id |
interviews[].roundId | 是 | Number | 轮次id |
interviews[].roundName | 是 | String | 轮次名称 |
interviews[].startTime | 是 | String | 面试开始时间 |
interviews[].duration | 是 | Number | 面试时长(单位:分) |
interviews[].interviewers | 是 | Array | 面试官信息 |
interviews[].interviewers[].interviewInterviewerId | 是 | Number | 面试的面试官ID |
interviews[].interviewers[].email | 是 | String | 面试官邮箱 |
interviews[].interviewers[].name | 是 | String | 面试官姓名 |
interviews[].interviewers[].phone | 否 | String | 面试官电话 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | Number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | Object | 返回信息 |
data.videoId | 是 | String | vendor保证唯一uid |
data.intervieweeUrls | 是 | Array | 候选人面试地址 |
data.intervieweeUrls[].applicationId | 是 | Number | 申请ID |
data.intervieweeUrls[].interviewId | 是 | Number | 面试ID |
data.intervieweeUrls[].intervieweeurl | 是 | String | 候选人面试地址 |
data.interviewerUrls | 是 | Array | 面试官面试地址 |
data.interviewerUrls[].interviewInterviewerId | 是 | Number | 面试的面试官ID |
data.interviewerUrls[].url | 是 | String | 面试官面试地址 |
d.取消面试
与V2的创建面试接口配套使用
请求样例
$ curl --request POST \
--url 'http://www.test.com/interview/delete?appId=E8iWPLYYQq8dB5Lu3PEbTQwYLlyzaVOu&clientId=9734f2bc-beff-4439-9497-0aa11fcc932c&time=1547100372&sign=08b6a2f880c697bdee9b6069cbed81ceb7300ea4' \
--header 'Content-Type: application/json' \
--data '{
"appId": "6542335467",
"typeId": "324354657",
"hireMode": 1,
"groupId": "6542335467",
"interviewIds": [123, 345],
"applicationIds": [45678, 87654],
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
videoId | 是 | String | 创建面试后vendor返回的值 |
groupId | 是 | String | 面试组ID |
interviewIds | 否 | Array | 面试id列表 如果不传或者数组为空 则取消该面试组 |
applicationIds | 否 | Array | 候选人申请ID列表 只在集体面试下取消某个候选人的面试时非空 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | Number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | Object | 返回信息 |
补充
为了安全性,请验证time的实效性,建议5分钟内有效。
第三方供应商请求Moka API
a.余额
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/interview/balance \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"discount": 0.4,"balance": "100","freeCount": 5}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/balance
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
discount | 否 | Number | 折扣(0-10) 不传或超出范围均当无折扣计算 |
balance | 是 | Number | 账户余额 |
freeCount | 否 | Number | 不计余额剩余次数 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
b.自定义成绩
请求样例
$ curl --request POST \
--url http://api2.mokahr.com:3000/v1/open-platform/interview/custom-result \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"resultList":["满意","不错","还行"]}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/custom-result
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
resultList | 是 | Array | 自定义成绩 |
---------------------------------------------------------------------------------------
c.全量套餐列表
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/interview/types \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"typeList": [{"typeId": "1112","name": "2222222","price": 2}],"appId": "a5fb37d3-f2d1-4121-b59f-b1ca385096b0"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/types
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
typeList | 是 | Array | 套餐列表 |
typeList[].typeId | 是 | String | 类型ID |
typeList[].name | 是 | String | 套餐名称 |
typeList[].price | 是 | Number | 套餐价格 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
d.更新套餐
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v1/open-platform/interview/type \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"typeId": "1112","name": "test","price": 0,"appId": "a5fb37d3-f2d1-4121-b59f-b1ca385096b0"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/type
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
typeId | 是 | String | 类型ID |
name | 是 | String | 套餐名称 |
price | 是 | Number | 试卷消耗 |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
e.删除套餐
请求样例
$ curl --request DELETE \
--url https://api.mokahr.com/api-platform/v1/open-platform/interview/type \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"typeId": "1","appId": "a5fb37d3-f2d1-4121-b59f-b1ca385096b0"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/type
请求方式: DELETE
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
typeId | 是 | String | 类型Id |
appId | 是 | String | 绑定成功后第一次获取accessToken时moka返回 |
---------------------------------------------------------------------------------------
f.结果回传
请求样例
$ curl --request POST \
--url http://api.mokahr.com/v1/open-platform/interview/result \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{"feedback": "棒", "score": "100", "videoId": "12345"}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/result
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
feedback | 是 | String | 面试反馈 |
score | 是 | String | 成绩,可与moka系统中的面试结果做匹配 |
videoId | 是 | String | 与创建视频面试时返回的背调结果相同 |
---------------------------------------------------------------------------------------
mokaAPI返回结果:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
success | 是 | boolean | 返回结果是否成功 |
g.结果回传v2版本
请求样例
$ curl --request POST \
--url https://api.mokahr.com/api-platform/v2/open-platform/interview/result \
--header 'Authorization: Bearer 6efe04cbc4b00ed85e2d8e9d3e8e622de435e55a' \
--header 'Content-Type: application/json' \
--data '{
"interviewInterviewerId": 12345,
"applicationId": 6789,
"score": "100",
"feedback": "面试反馈"
}'
请求地址: https://api.mokahr.com/api-platform/v2/open-platform/interview/result
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
interviewInterviewerId | 是 | Number | 面试的面试官ID |
applicationId | 是 | String | 申请ID |
score | 是 | String | 成绩,可与moka系统中的面试结果做匹配 |
feedback | 是 | String | 面试反馈 |
---------------------------------------------------------------------------------------
mokaAPI返回结果:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | Number | 返回结果是否成功。0: 成功 |
msg | 否 | String | 返回信息描述 |
data | 是 | Object | 返回信息 |
叫号面试
业务流程图
ps:若用户在服务商修改面试,目前不会同步Moka。
Moka请求第三方供应商API
a.创建视频面试
请求样例
$ curl --location --request POST 'https://dhr.nowcoder.com/v1/partners/moka/create-scene?appId=46dc1350-3dd2-444c-acab-02ef5a94d374&clientId=aUX4cI0lfhtkXTBmlXED1g0ra9xqKvDZ&time=1646311615&sign=fbeef2b972ac6b2955311899abafc3b0101a5ea6' \
--header 'Content-Type: application/json' \
--data-raw '{
"projectType": "1",
"projectName": "0303-2",
"projectId": "5b4b2319da2a485ba5e71bae3b52cb0ee435f34900804d4ead4cf19c65c",
"startDate": 1646312400000,
"rounds": [
{
"roundNumber": 1,
"round": 4,
"roundName": "初试",
"rows": [
{
"jobIds": [],
"interviewers": [
{
"interviewerEmail": "shiyue@mokahr.com",
"interviewerMobile": "15001371285",
"interviewerId": 410050593,
"InterviewerName": "石越"
}
],
"mainInterviewerId": 410050593
}
]
}
],
"applications": [
{
"jobName": "sy校招职位3",
"resumeUrl": "https://staging-1.mokahr.com/forward/candidate/info?access_token=17750f2a081d46909ded95d8dead2dc479aa43dea64b40a3aa51b38093133e77",
"jobId": "947f77cd-bb13-487b-ae8c-d96078ce8e78",
"phone": "14592000013",
"name": "sys1xz185",
"startTime": 1646312400000,
"applicationId": 422059002,
"email": "1009417583@qq.com"
}
]
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time + 请求体body) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
projectId | 是 | String | MOKA的叫号面试项目ID |
projectName | 是 | String | 叫号面试项目名称 |
projectType | 是 | String | 项目类型 |
startDate | 是 | number | 开始时间(叫号面试当天时间0点的时间戳 单位:ms) |
rounds | 是 | array | 轮次信息 |
rounds[].round | 否 | number | 轮次 |
rounds[].roundName | 是 | String | 轮次名称 |
rounds[].roundNumber | 是 | Number | 轮次顺序 |
rounds[].rows | 是 | array | 分组 |
rounds[].rows[].jobIds[] | 是 | array |
可面试的职位id列表(传空不限职位) |
rounds[].rows[].mainInterviewerId | 是 | Number | 主面试官ID(与面试官ID一致) |
rounds[].rows[].interviewers | 是 | array | 所有面试官信息 |
rounrounds[].rows[].interviewers[].interviewerIdds | 是 | Number | 面试官ID |
rounds[].rows[].interviewers[].InterviewerName | 是 | String | 面试官姓名 |
rounds[].rows[].interviewers[].interviewerMobile | 否 | string | 面试官电话 |
rounds[].rows[].interviewers[].interviewerEmail | 否 | string | 面试官email |
applications | 是 | array | 候选人申请信息 |
applications[].applicationId | 是 | number | 申请id |
applications[].startTime | 是 | number | 开始时间戳(单位:ms) |
applications[].name | 否 | string | 候选人姓名 |
applications[].email | 否 | string | 候选人email |
applications[].phone | 否 | string | 候选人phone |
applications[].jobId | 是 | string | 职位id |
applications[].jobName | 是 | string | 职位名称 |
applications[].resumeUrl | 是 | string | 职位简历 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | object | 返回信息 |
b.修改叫号面试
请求样例
$ curl --location --request POST 'https://dhr.nowcoder.com/v1/partners/moka/update-scene?appId=46dc1350-3dd2-444c-acab-02ef5a94d374&clientId=aUX4cI0lfhtkXTBmlXED1g0ra9xqKvDZ&time=1646311366&sign=6296090bbc0638959e8706c36cf6ca9d0d0a78bb' \
--header 'Content-Type: application/json' \
--data-raw '{
"vendorProjectId": "2382",
"projectType": "1",
"projectName": "0303牛客叫号",
"projectId": "c9ccdeebcfde4fd58b58e545ee30c1b0a727e372ee9a4a6d9da06be13eaf0bda",
"startDate": 1646314200000,
"rounds": [
{
"roundNumber": 1,
"round": 4,
"roundName": "初试",
"rows": [
{
"jobIds": [],
"interviewers": [
{
"interviewerEmail": "shiyue@mokahr.com",
"interviewerMobile": "15001371285",
"interviewerId": 410050593,
"InterviewerName": "石越"
}
],
"mainInterviewerId": 410050593
}
]
}
],
"applications": [
{
"jobName": "sy校招职位3",
"resumeUrl": "https://staging-1.mokahr.com/forward/candidate/info?access_token=db8583715cb949f4af7e030c62b43733ee4ea1fff7844d60933ede7aa36aba84",
"jobId": "947f77cd-bb13-487b-ae8c-d96078ce8e78",
"phone": "14592000015",
"name": "sys1xz187",
"startTime": 1646314200000,
"applicationId": 422059004,
"email": "1009417583@qq.com"
}
]
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
vendorProjectId | 是 | string | 服务商的叫号面试项目ID |
projectId | 是 | String | MOKA的叫号面试项目ID |
projectName | 是 | String | 叫号面试项目名称 |
projectType | 是 | String | 项目类型 |
startDate | 是 | number | 开始时间(叫号面试当天时间0点的时间戳 单位:ms) |
rounds | 是 | array | 轮次信息 |
rounds[].round | 否 | number | 轮次 |
rounds[].roundName | 是 | String | 轮次名称 |
rounds[].roundNumber | 是 | Number | 轮次顺序 |
rounds[].rows | 是 | array | 分组 |
rounds[].rows[].jobIds[] | 是 | array |
可面试的职位id列表(传空不限职位) |
rounds[].rows[].mainInterviewerId | 是 | Number | 主面试官ID(与面试官ID一致) |
rounds[].rows[].interviewers | 是 | array | 所有面试官信息 |
rounrounds[].rows[].interviewers[].interviewerIdds | 是 | Number | 面试官ID |
rounds[].rows[].interviewers[].InterviewerName | 是 | String | 面试官姓名 |
rounds[].rows[].interviewers[].interviewerMobile | 否 | string | 面试官电话 |
rounds[].rows[].interviewers[].interviewerEmail | 否 | string | 面试官email |
applications | 是 | array | 候选人申请信息 |
applications[].applicationId | 是 | number | 申请id |
applications[].startTime | 是 | number | 开始时间戳(单位:ms) |
applications[].name | 否 | string | 候选人姓名 |
applications[].email | 否 | string | 候选人email |
applications[].phone | 否 | string | 候选人phone |
applications[].jobId | 是 | string | 职位id |
applications[].jobName | 是 | string | 职位名称 |
applications[].resumeUrl | 是 | string | 职位简历 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | object | 返回信息 |
c.取消叫号面试
请求样例
$ curl --location --request POST 'https://dhr.nowcoder.com/v1/partners/moka/cancel-scene?appId=46dc1350-3dd2-444c-acab-02ef5a94d374&clientId=aUX4cI0lfhtkXTBmlXED1g0ra9xqKvDZ&time=1646311517&sign=9c9930c66583e132ffb0ca32ce7b61bf77651300' \
--header 'Content-Type: application/json' \
--data-raw '{
"vendorProjectId": "2382",
"projectId": "c9ccdeebcfde4fd58b58e545ee30c1b0a727e372ee9a4a6d9da06be13eaf0bda"
}'
请求方式: POST
body类型: raw-JSON(application/json)
请求query
字段 | 描述 |
---|---|
appId | 与moka绑定成功后返回的appId |
clientId | 对接前提供的clientId |
time | 当前时间戳 |
sign | sha1(clientId +clientSecret + appId + time) |
请求格式
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
projectId | 是 | String | MOKA叫号面试的项目ID |
vendorProjectId | 是 | String | 服务商叫号面试的项目ID |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | Number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | Object | 返回信息 |
补充
为了安全性,请验证time的实效性,建议5分钟内有效。
第三方供应商请求Moka API
a.面试结果回传
请求样例
$ curl --location --request POST 'https://api.mokahr.com/v1/open-platform/interview/interview-queues/syncFeedback' \
--header 'Content-Type: application/json' \
--data-raw '{
"projectId": "70ca990041dd4791ab691476cf4256f77458b04c63794fcda622316b22567522",
"vendorProjectId": "2222222222222",
"applicationId": 419165734,
"total": "4.0",
"comment": "tttttt....",
"interviewerId": 410112436,
"startTime": 1642754689429,
"signedInAt": 1642754679429,
"duration": 30,
"roundNumber": 1,
"videoId": "fdsafdsafsaewrewre"
}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/interview-queues/syncFeedback
请求方式: POST
body类型: raw-JSON(application/json)
请求body参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
projectId | 是 | string | moka的叫号面试项目id |
vendorProjectId | 是 | string | 服务商的叫号面试项目名称 |
applicationId | 是 | Number | 申请ID |
total | 是 | String | 分数 |
comment | 否 | String | 评价 |
reportUrl | 否 | String | 报告链接 |
interviewerId | 是 | number | 面试官id |
startTime | 是 | nunber | 实际开始时间 时间戳(单位:毫秒) |
duration | 否 | number | 面试时长(单位:分钟) |
round | 否 | number | 轮次 |
roundNumber | 是 | number | 轮次顺序 |
signedInAt | 否 | number | 签到时间 (单位:毫秒) |
videoId | 是 | string | 视频面试ID |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | object | 返回信息 |
---------------------------------------------------------------------------------------
b.创建结果回调接口
请求样例
$ curl --location --request POST 'https://api.mokahr.com/v1/open-platform/interview/interview-queues/syncSaveResult' \
--header 'Content-Type: application/json' \
--data-raw '{
"projectId": "1e414b24e478472d88f4c87c2b8c4a39d20d53cbc3914057a72daea282a04a5c",
"vendorProjectId": "",
"code": 1,
"errorMsg": "",
"applicationErrors": [
{
"applicationId": 1,
"name": "要结束了么",
"errorInfo": ""
}
],
"interviewerErrors": [
{
"interviewerId": 410050593,
"name": "石越",
"errorInfo": ""
}
]
}'
请求地址: https://api.mokahr.com/api-platform/v1/open-platform/interview/interview-queues/syncSaveResult
请求方式: POST
body类型: raw-JSON(application/json)
请求参数:
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
projectId | 是 | string | moka的叫号面试项目id |
vendorProjectId | 是 | string | 服务商的叫号面试项目名称 |
code | 是 | number | 0: 全部成功 非0:失败 |
errorMsg | 是 | string | 错误信息 |
applicationErrors | 否 | array | 候选人报错信息 |
errorapplicationErrors[].applicationIdMsg | 是 | number | 申请ID |
applicationErrors[].name | 否 | string | 候选人姓名 |
applicationErrors[].errorInfo | 否 | string | 错误信息 |
interviewerErrors | 是 | array | 面试官报错信息 |
interviewerErrors[].interviewerId | 是 | number | 面试官id |
interviewerErrors[].name | 否 | string | 面试官姓名 |
interviewerErrors[].errorInfo | 否 | string | 错误信息 |
返回结果:
statusCode: 200
字段 | 必填 | 类型 | 描述 |
---|---|---|---|
code | 是 | number | 0: 成功 非0:失败 |
msg | 否 | String | 返回信息描述 |
data | 是 | object | 返回信息 |
---------------------------------------------------------------------------------------