AUI Kits远程监考场景的AppServer提供了创建考场和考场管理服务等后台服务,通过与AUI Kits远程监考场景SDK搭配使用可以快速实现远程监考应用。
接口概览
API | 描述 |
/exam/v2/createRoom | 创建考场。 |
/exam/roomInfo | 获取考场信息。 |
/exam/examInfo | 获取考试信息。 |
/exam/userInfo | 获取用户信息。 |
/exam/userList | 获取考场的学生列表。 |
/exam/v2/getIMToken | 获取IM建连的token。 |
/exam/getOssConfig | 获取OSS配置。 |
/exam/selectAudio | 查询系统音频列表。 |
/exam/updateRoomAudioStatus | 更新考场口播状态。 |
/exam/cheat/setCheatConfig | 设置防作弊配置。 |
/exam/cheat/getCheatConfig | 获取考试防作弊配置。 |
/exam/cheat/addCheatRecord | 添加考场作弊信息。 |
/exam/cheat/listCheatRecord | 获取考场作弊信息。 |
/exam/endRoom | 结束考场。 |
详细接口定义
通用请求头参数
用于请求header上。
name | type | required | desc |
authorization | string | YES | 身份认证token,通过页面URL参数传入。 |
创建考场
请求协议:http/https
请求Path:/exam/v2/createRoom
是否需要授权:是
请求Method:POST
请求ContentType:JSON
请求参数
名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
name | String | 是 | titlexxxx | 直播标题, 长度小于64 | |||
imServer | JSON数组 | 是 | ["aliyun_new"] | 配置使用哪些im服务。可多选
|
返回数据
名称 | 类型 | 示例值 | 描述 | ||||
code | Integer | 200 | 业务响应码。参考HTTP响应码 | ||||
id | String | ee487235-5f9b-4cb3-82ce-45c91c3xxxx | 考场ID。 | ||||
createdAt | String | 2023-02-27T17:34:00.592750182+08:00 | 创建时间。 | ||||
updatedAt | String | 2023-02-27T17:34:00.592750182+08:00 | 修改时间。 | ||||
name | String | titlexxx | 考场名称。 | ||||
examId | String | noticexxx | 考试ID。 | ||||
status | String | 考场状态。
| |||||
audioStatus | String | anchor_idxxx | 考场口播状态。
| ||||
imGroupId | String | anchor_nickxxx | 消息组ID。 | ||||
createTeacher | String | {"xx":"xxx"} | 考场创建者ID。 |
addRoom 时序图
示例
请求示例
{
"name": "考场名称-2024全国本科艺术考试第0001考场",
"imServer":["aliyun_new"]
}
正常返回示例
{
"success": true,
"data": {
"id": "f064a22d-9885-47ab-bce9-a058c74c****",
"createdAt": "2023-12-12T15:59:12+08:00",
"updatedAt": "2023-12-12T15:59:12+08:00",
"name": "考场名称-2024全国本科艺术考试第0001考场",
"examId": "d385e65a-8f3c-447e-9d57-01a18089****",
"status": 0,
"audioStatus": 0,
"imGroupId": "f064a22d-9885-47ab-bce9-a058c74c****",
"createTeacher": "teacher1"
}
}
获取考场信息
Path: /exam/roomInfo
Method:GET
Query:
name | type | required | desc |
roomId | string | YES | 考场ID,通过页面URL参数传入。 |
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | object | 数据。 |
|─id | string | 考场ID。 |
|─name | string | 考场名称。 |
|─examId | string | 考试ID。 |
|─status | integer | 考场状态。
|
|─audioStatus | integer | 考场口播状态。
|
|─imGroupId | string | 消息组ID。 |
|─createTeacher | string | 考场创建者ID。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": {
"id": "roomId",
"name": "模拟考场",
"examId": "examId",
"status": 0,
"audioStatus": 0,
"imGroupId": "xxx",
"createTeacher": "teacherId"
}
}
获取考试信息
Path:/exam/examInfo
Method:GET
Query:
name | type | required | desc |
examId | string | YES | 考试ID,来源是考场信息返回。 |
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | object | 数据。 |
|─id | string | 考试ID。 |
|─name | string | 考试名称。 |
|─startTime | string | 开始时间,使用YYYY/MM/DD HH:mm:ss格式化。 |
|─endTime | string | 结束时间。 |
|─radioInfo | array | 定时播放的音频。 |
|─ | object | |
|─id | string | ID。 |
|─classify | integer | 分类。 |
|─name | string | 名字。 |
|─startTime | string | 触发播放时间。 |
|─url | string | CDN地址。 |
|─ossUrl | string | OSS地址(非必需)。 |
|─audioInfo | array | 需要老师手动播放的音频。 |
|─ | object | |
|─id | string | ID。 |
|─classify | integer | 分类字典。 |
|─name | string | 音频名字。 |
|─url | string | 音频地址。 |
|─ossUrl | string | OSS地址(非必需)。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": {
"id": "123456",
"name": "exam",
"startTime": "2023/03/30 14:00:00",
"endTime": "2023/03/30 17:00:00",
"radioInfo": [
{
"id": "",
"classify": 0,
"name": "",
"startTime": "2023/03/30 14:30:00",
"url": ""
}
],
"audioInfo": [
{
"id": "",
"classify": 0,
"name": "",
"url": ""
}
]
}
}
获取用户信息
Path:/exam/userInfo
Method:GET
Query:
name | type | required | desc |
userId | string | YES | 用户ID,通过页面URL参数传入。 |
roomId | string | YES | 考场ID,通过页面URL参数传入。 |
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | object | 数据。 |
|─id | string | 用户ID。 |
|─name | string | 昵称。 |
|─userStatus | int | 状态(目前没用上)。
|
|─rtcPushUrl | string | 推流地址。 |
|─rtcPullUrl | string | 大流地址。 |
|─rtsPullUrl | string | 小流地址(转码低清晰度的流)。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": {
"id": "userid",
"name": "username",
"userStatus": 0,
"rtcPushUrl": "artc://{yourPushDomain}/exam/xxx-xxx-xxx?grtn_twin_rtmp=on",
"rtcPullUrl": "artc://{yourBigPullDomain}/exam/xxx-xxx-xxx",
"rtsPullUrl": "artc://{yourSmallPullDomain}/exam/xxx-xxx-xxx_240p"
}
}
获取考场的学生列表
Path:/exam/userList
Method:GET
Query:
name | type | required | desc |
roomId | string | YES | 考场ID,通过页面URL参数传入。 |
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | array | 数据。 |
|─ | object | |
|─id | string | 用户ID。 |
|─name | string | 昵称。 |
|─userStatus | int | 状态(目前没有用上)。 |
|─rtcPushUrl | string | 推流地址。 |
|─rtcPullUrl | string | 大流地址。 |
|─rtsPullUrl | string | 小流地址。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": [
{
"id": "userid",
"name": "username",
"userStatus": 0,
"rtcPushUrl": "artc://{yourPushDomain}/exam/xxx-xxx-xxx?grtn_twin_rtmp=on",
"rtcPullUrl": "artc://{yourBigPullDomain}/exam/xxx-xxx-xxx",
"rtsPullUrl": "artc://{yourSmallPullDomain}/exam/xxx-xxx-xxx_240p"
}
]
}
获取IM建连的token
请参考建立长连接文档接入。
请求协议:http/https
请求Path:/exam/v2/getIMToken
是否需要授权:是
请求Method:POST
请求ContentType:JSON
请求参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
userId | String | 是 | useridxxxx | 用户UserId,用户自定义,在AppId下单独唯一。 |
deviceId | String | 是 | deviceidxxx | 终端设备ID,唯一代表一个用户终端设备,用户自定义。 说明 仅针对aliyun_old服务起作用。 |
deviceType | String | 是 | android | 终端设备类型,取值:
说明 仅针对aliyun_old服务起作用。 |
imServer | Json数组 | 是 | ["aliyun_new"] | 配置使用哪些IM服务。可多选
|
role | String | 否 | admin | 角色,默认为空。当为admin时,表示该用户可以调用管控接口。 说明 仅针对aliyun_new服务起作用。 |
返回数据
名称 | 类型 | 示例值 | 描述 | |
code | Integer | 200 | 业务响应码。参考HTTP响应码。 | |
aliyunOldIm | accessToken | String | eyJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiMzhXWUg3RlQiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOS5le******** | 旧IM的token。 |
refreshToken | String | eyJlbmRwb2ludHMiOlsid3NzOi8vbWV0YXBhdGguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiMzhXWUg3RlQiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOS5le******** | 旧IM的refreshtoken。 | |
aliyunNewIm | appId | String | 0c826fdeb1c5 | 用户的AppID。 |
appSign | String | H4sIAAAAAAAE/wBgAJ//zguHB+lYCilkv7diSkk4GgjFw0Ka520mdSvKR1g6pC4Y3s/sSRMZR8HgSaLZHP5mcR95bdEfWhnB2Br1efpa62ZdKcr5noeaExJXc1ZVZUGP6ZY2yOklt/1uAIlPpOn7AAAA//8BAAD///ZbnP******* | 服务器生成的加密串,包含接入域名等信息。 | |
appToken | String | 42e96eeede710b738a561b9edcfac3507eae7036cf10fb7ed4b059afc6****** | 登录鉴权。 | |
auth.userId | String | 123456**** | 要登录的用户的ID。 | |
auth.nonce | String | 20d3acba-b4d4-4940-abb1-9e908813c71a | 格式:"AK-随机串",最长64字节。 | |
auth.timestamp | Long | 1702371472 | 过期时间,从1970到过期时间的秒数。 | |
auth.role | String | admin | 角色,为admin时,表示该用户可以调用管控接口。 |
示例
请求示例
{
"userId": "123456****",
"deviceId": "fwfwqeqeq****",
"deviceType":"web",
"imServer":["aliyun_new"]
}
正常返回示例
{
"success": true,
"data": {
"aliyunOldIm": {
"accessToken": "eyJlbmRwb2ludHMiOlsid3NzOi*******eXVuY3MuY29tL3dzIl0sImFwcElkIjoiMzhXWUg3RlQiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOS5leUoxYVdRaU9pSXhNak0wTlRZM09Ea3dJaXdpWlhod0lqb3hOekEwT1RVNU9EY3lMQ0poYVdRaU9pSXpPRmRaU0RkR1ZDSXNJbVJwWkNJNkltWjNabmR4WlhGbGNYZGxkM0VpTENKamFXUWlPaUl4TkRJNE16WTNPVGd6T0RrMU5UVTJJbjAuRTR2TlRvT3FsLVllanJfb3VlZUloblVEaDR4TzhGSUxTd09PMDl*******",
"refreshToken": "eyJlbmRwb2ludHMiOlsid3NzOi*********GguYWxpeXVuY3MuY29tL3dzIl0sImFwcElkIjoiMzhXWUg3RlQiLCJ0b2tlbiI6Im1wLmV5SjBlWEFpT2lKS1YxUWlMQ0poYkdjaU9pSklVekkxTmlKOS5leUoxYVdRaU9pSXhNak0wTlRZM09Ea3dJaXdpWlhod0lqb3hOekEwT1RVNU9EY3lMQ0poYVdRaU9pSXpPRmRaU0RkR1ZDSXNJbVJwWkNJNkltWjNabmR4WlhGbGNYZGxkM0VpTENKamFXUWlPaUl4TkRJNE16WTNPVGd6T0RrMU5UVTJJbjAuRTR2TlRvT3FsLVllanJfb3VlZUloblVEaDR4TzhGSUxTd09PMD********"
},
"aliyunNewIm": {
"auth": {
"nonce": "20d3acba-b4d4-4940-abb1-9e908813****",
"timestamp": 1702371472,
"role": "",
"userId": "123456****"
},
"appId": "0c826fdeb1c5",
"appSign": "H4sIAAAAAAAE/wBgAJ//zguHB+lYCilkv7diSkk4GgjFw0Ka520mdSvKR1g6pC4Y3s/sSRMZR8HgSaLZHP5mcR95bdEfWhnB2Br1efpa62ZdKcr5noeaExJXc1ZVZUGP6ZY2yOklt/1uAIlPpOn7AAAA//8BAAD///ZbnP*******",
"appToken": "42e96eeede710b738a561b9edcfac3507eae7036cf10fb7ed4b059a*******"
}
}
}
获取OSS配置
请参考使用STS临时访问凭证访问OSS实现,目前开源的Appserver源码中暂未实现,请自行实现。
Path:/exam/getOssConfig
Method:GET
Query:
name | type | required | desc |
examId | string | YES | 考试ID。 |
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | object | 数据。 |
|─region | string | 以华东1(杭州)为例,yourRegion填写为oss-cn-hangzhou。 |
|─accessKeyId | string | 从STS服务获取的AccessKey IDAccessKey Secret。 |
|─accessKeySecret | string | 从STS服务获取的AccessKey Secret。 |
|─stsToken | string | 从STS服务获取的安全令牌(SecurityToken)。 |
|─bucket | string | 填写Bucket名称。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": {
"region": "",
"accessKeyId": "",
"accessKeySecret": "",
"stsToken": "",
"bucket": ""
}
}
查询系统音频列表
Path:/exam/selectAudio
Method:POST
Request Body:
name | type | desc |
pageSize | integer | 页面大小。 |
pageNum | integer | 页数。 |
name | string | 筛选音频名称(非必填)。 |
classify | integer | 分类。 |
Request Demo:
{
"pageSize": 0,
"pageNum": 0,
"name": "",
"classify": 0
}
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | object | 数据。 |
|─pageNum | integer | 分页。 |
|─pageSize | integer | 一页条数。 |
|─total | integer | 总数。 |
|─list | array | |
|─ | object | |
|─id | string | ID。 |
|─classify | integer | 分类字典。 |
|─name | string | 音频名字。 |
|─url | string | 音频地址。 |
|─ossUrl | string | OSS地址(非必需)。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": {
"pageNum": 1,
"pageSize": 10,
"total": 14,
"list": [
{
"id": "11111",
"classify": 0,
"name": "audio",
"url": "",
"ossUrl": "",
}
]
}
}
更新考场口播状态
Path:/exam/updateRoomAudioStatus
Method:POST
Query:
name | value | required | desc |
id | string | YES | 考场ID。 |
audioStatus | int | YES | 考场口播状态。
|
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | boolean | 数据。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": true
}
设置防作弊配置
请求协议:http/https
请求Path:/exam/cheat/setCheatConfig
是否需要授权:是
请求Method:POST
请求ContentType:JSON
请求参数
名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
examId | String | 是 | useridxxxx | 考试ID | |||
data | String | 是 | xxxx | 作弊的配置信息 cheatConfig。由端自定义,服务器只管存储及返回 |
cheatConfig对象中有pc、mobile两个对象,每项的类型均为Boolean ,含义如下所示:
// 配置项为 true 时代表开启此项检测
const cheatConfig = {
pc: {
scenePersonExit: true, // 人物离开
manyPeople: true, // 多人
actionPoseStandup: true, // 起立
actionPoseHandup: true, // 举手
actionHeadUpDown: true, // 点头
headShaking: true, // 摇头/转头
objectDetect: true, // 携带电子设备
actionPersonSpeech: true, // 识别到人声
},
mobile: {
scenePersonExit: true, // 人物离开
manyPeople: true, // 多人
actionPoseStandup: true, // 起立
actionPoseHandup: true, // 举手
actionHeadUpDown: true, // 点头
headShaking: true, // 摇头/转头
objectDetect: true, // 携带电子设备
actionPersonSpeech: true, // 识别到人声
}
};
// 将 cheatConfig 对象转为 JSONString 后传给服务端保存
const data = JSON.stringify(cheatConfig);
返回数据
名称 | 类型 | 示例值 | 描述 | ||||
success | Boolean | true | 操作结果
|
示例
请求示例
{
"examId": "11111111111",
"data":"{xxxx}"
}
正常返回示例
{
"success": true
}
获取考试防作弊配置
请求协议:http/https
请求Path:/exam/cheat/getCheatConfig
是否需要授权:是
请求Method:POST
请求ContentType:JSON
请求参数
名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
examId | String | 是 | useridxxxx | 考试ID |
返回数据
名称 | 类型 | 示例值 | 描述 | ||||
success | Boolean | true | 操作结果
| ||||
data | JsonObject | 结果,以JSON对象返回 | |||||
data.examId | String | 2023-02-27T17:34:00.592750182+08:00 | 考试ID | ||||
data.data | String | 2023-02-27T17:34:00.592750182+08:00 | 作弊的配置信息 | ||||
data.createdAt | String | 2024-03-18T16:56:11+08:00 | 创建时间 | ||||
data.updatedAt | String | 2024-03-18T16:56:11+08:00 | 修改时间 |
示例
请求示例
{
"examId": "11111111111"
}
返回示例
{
"success": true,
"data": {
"examId": "11111111111",
"data": "[xxxxxx]",
"createdAt": "2024-03-18T16:56:11+08:00",
"updatedAt": "2024-03-18T16:56:11+08:00"
}
}
添加考场作弊信息
请求协议:http/https
请求Path:/exam/cheat/addCheatRecord
是否需要授权:是
请求Method:POST
请求ContentType:JSON
请求参数
名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
examId | String | 是 | examidxxxx | 考试ID | |||
roomId | String | 是 | roomIdxxxx | 考场ID | |||
data | String | 是 | [{\"detectTime\":232323,\"isMainMonitor\":true,\"detectType\":\"11\",\"userId\":\"userewexx\",\"extraInfo\":\"{222}2\"},{\"detectTime\":232324,\"isMainMonitor\":true,\"detectType\":\"12\",\"userId\":\"userewexx\",\"extraInfo\":\"{222}2\"}] | 学生作弊信息cheatRecord,由端自定义 |
cheatRecord对象的定义说明如下,提交至服务端前要先转为JSONString。
interface CheatRecord {
isMainMonitor: boolean; // 是否是主机位
userId:string; // 用户id
detectTime: number; // 检测时间,单位毫秒
detectType: string; // 检测类型
extraInfo: {
message: string; // 提示信息
};
}
返回数据
名称 | 类型 | 示例值 | 描述 | ||||
success | Boolean | true | 操作结果
|
示例
请求示例
{
"examId": "333333",
"roomId":"roomIdtest",
"data":"[{\"detectTime\":232323,\"isMainMonitor\":true,\"detectType\":\"11\",\"userId\":\"userewexx\",\"extraInfo\":\"{222}2\"},{\"detectTime\":232324,\"isMainMonitor\":true,\"detectType\":\"12\",\"userId\":\"userewexx\",\"extraInfo\":\"{222}2\"}]"
}
正常返回示例
{
"success": true
}
获取考场作弊信息
请求协议:http/https
请求Path:/exam/cheat/listCheatRecord
是否需要授权:是
请求Method:POST
请求ContentType:JSON
请求参数
名称 | 类型 | 是否必填 | 示例值 | 描述 | |||
examId | String | 是 | examidxxxx | 考试ID | |||
roomId | String | 是 | roomIdxxxx | 考场ID | |||
pageSize | String | 否 | 10 | 分页大小 | |||
scrollToken | String | 否 | 分页标识,用于标识下一页的起始位。通过传该标识可以检索下一页数据 |
返回数据
名称 | 类型 | 示例值 | 描述 | ||||
success | Boolean | true | 操作结果
| ||||
data | JsonObject | 结果,以JSON对象返回 | |||||
data.cheatRecordEntitys | JsonArray | 作弊信息。由端自定义,服务器结构化输出。见参考示例 |
示例
请求示例
{
"examId": "333333",
"roomId": "roomIdtest",
"pageSize":10,
"scrollToken":""
}
正常返回示例
{
"success": true,
"data": {
"cheatRecordEntitys": [
{
"id": 16666,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "12",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2024-03-18T17:00:53+08:00",
"updatedAt": "2024-03-18T17:00:53+08:00"
},
{
"id": 16665,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "11",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2024-03-18T17:00:53+08:00",
"updatedAt": "2024-03-18T17:00:53+08:00"
},
{
"id": 8346,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "12",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2023-11-14T15:55:25+08:00",
"updatedAt": "2023-11-14T15:55:25+08:00"
},
{
"id": 8345,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "11",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2023-11-14T15:55:25+08:00",
"updatedAt": "2023-11-14T15:55:25+08:00"
},
{
"id": 8342,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "12",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2023-11-14T15:46:48+08:00",
"updatedAt": "2023-11-14T15:46:48+08:00"
},
{
"id": 8341,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "11",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2023-11-14T15:46:44+08:00",
"updatedAt": "2023-11-14T15:46:44+08:00"
},
{
"id": 8340,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "12",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2023-11-14T15:45:40+08:00",
"updatedAt": "2023-11-14T15:45:40+08:00"
},
{
"id": 8339,
"examId": "333333",
"roomId": "roomIdtest",
"userId": "userewexx",
"detectType": "11",
"isMainMonitor": "true",
"detectTime": "1970-01-01T08:03:52+08:00",
"extraInfo": "{222}2",
"createdAt": "2023-11-14T15:45:40+08:00",
"updatedAt": "2023-11-14T15:45:40+08:00"
}
],
"scrollToken": "8339"
}
}
结束考场
Path:/exam/endRoom
Method:GET
Query:
name | type | required | desc |
roomId | string | YES | 考场ID,通过页面URL参数传入。 |
Body:
name | type | desc |
success | boolean | 是否成功。 |
errorCode | string | 异常码。 |
errorMsg | string | 异常信息。 |
data | boolean | 数据。 |
Response Demo:
{
"success": true,
"errorCode": "",
"errorMsg": "",
"data": true
}