Appearance
学习触发
POST /api/app/course/{courseId}/task/{taskId}/trigger/{event}
业务规则
触发事件
学员端学习过程中记录学习进度,支持三种触发事件:
doing- 学习中定期上报finish- 完成任务学习watching- 观看媒体类型任务
同一秒去重
同一用户在同一任务的同一秒内重复上报,视为无效请求,直接返回,不更新进度。
- 日志记录:
valid=false,deduped=true
防刷校验
开启防刷时,系统校验请求中的 learnUuid 与上次请求是否一致:
- 不一致且防刷启用:抛出异常
COURSE_LEARNING_ANTI_CHEAT_TRIGGERED - 日志记录:
valid=false,invalidMessage标注原因
请求参数
路径参数:
| 参数 | 类型 | 说明 |
|---|---|---|
| courseId | number | 课程ID |
| taskId | number | 任务ID |
| event | string | 触发事件:doing/finish/watching |
请求体:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| learnUuid | string | 是 | 学习的UUID,用于防刷校验 |
| playPos | number | 否 | 播放位置/秒(上次断点) |
| trigger | string | 否 | 触发点来源 |
| watchTime | number | 否 | 观看时长/秒 |
响应
| 字段 | 类型 | 说明 |
|---|---|---|
| taskId | number | 任务ID |
| nextTaskId | number/null | 下一个任务ID |
| event | string | 触发事件 |
| type | string | 任务类型:text/video/audio/doc/ppt/download/discuss/exercise/homework/testpaper/live/ailive |
| remainingLearnTime | number | 剩余学习时间/秒 |
| learnUuid | string | 学习的UUID |
| maxPlayPosition | number | 最大学习进度/秒 |
| playPos | number | 上次播放位置/秒 |
| finishedTime | number/null | 完成时间时间戳 |
| doingTime | number | 任务进行时长/秒 |
| watchTime | number | 观看时间/秒 |
| currentTime | number | 当前时间时间戳 |
| taskStatus | string | 任务完成状态:start/finish |
| firstTaskFinished | boolean | 是否是第一次任务完成 |
| firstCourseFinished | boolean | 是否是第一次课程完成 |
请求示例
http
POST /api/app/course/10001/task/1001/trigger/doing
Authorization: Bearer <token>
Content-Type: application/json
{
"learnUuid": "6b8029e83003401ab0b796be594ad37a",
"playPos": 120.5,
"trigger": "play",
"watchTime": 120
}响应示例
json
{
"taskId": 10001,
"nextTaskId": 10002,
"event": "doing",
"type": "video",
"remainingLearnTime": 480,
"learnUuid": "6b8029e83003401ab0b796be594ad37a",
"maxPlayPosition": 600,
"playPos": 120.5,
"finishedTime": null,
"doingTime": 120,
"watchTime": 120,
"currentTime": 1735660920,
"taskStatus": "start",
"firstTaskFinished": false,
"firstCourseFinished": false
}异常
| 错误码 | HTTP状态码 | 说明 |
|---|---|---|
COURSE_NOT_FOUND | 404 | 课程不存在 |
COURSE_TASK_NOT_FOUND | 404 | 课程任务不存在 |
COURSE_MEMBER_NOT_FOUND | 403 | 学员未加入课程 |
COURSE_TASK_RESULT_NOT_FOUND | 404 | 任务学习结果不存在 |
COURSE_LEARNING_ANTI_CHEAT_TRIGGERED | 400 | 防刷校验失败(learnUuid变更) |