Skip to content

学习触发

POST /api/app/course/{courseId}/task/{taskId}/trigger/{event}

业务规则

触发事件

学员端学习过程中记录学习进度,支持三种触发事件:

  • doing - 学习中定期上报
  • finish - 完成任务学习
  • watching - 观看媒体类型任务

同一秒去重

同一用户在同一任务的同一秒内重复上报,视为无效请求,直接返回,不更新进度。

  • 日志记录:valid=falsededuped=true

防刷校验

开启防刷时,系统校验请求中的 learnUuid 与上次请求是否一致:

  • 不一致且防刷启用:抛出异常 COURSE_LEARNING_ANTI_CHEAT_TRIGGERED
  • 日志记录:valid=falseinvalidMessage 标注原因

请求参数

路径参数:

参数类型说明
courseIdnumber课程ID
taskIdnumber任务ID
eventstring触发事件:doing/finish/watching

请求体:

参数类型必填说明
learnUuidstring学习的UUID,用于防刷校验
playPosnumber播放位置/秒(上次断点)
triggerstring触发点来源
watchTimenumber观看时长/秒

响应

字段类型说明
taskIdnumber任务ID
nextTaskIdnumber/null下一个任务ID
eventstring触发事件
typestring任务类型:text/video/audio/doc/ppt/download/discuss/exercise/homework/testpaper/live/ailive
remainingLearnTimenumber剩余学习时间/秒
learnUuidstring学习的UUID
maxPlayPositionnumber最大学习进度/秒
playPosnumber上次播放位置/秒
finishedTimenumber/null完成时间时间戳
doingTimenumber任务进行时长/秒
watchTimenumber观看时间/秒
currentTimenumber当前时间时间戳
taskStatusstring任务完成状态:start/finish
firstTaskFinishedboolean是否是第一次任务完成
firstCourseFinishedboolean是否是第一次课程完成

请求示例

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_FOUND404课程不存在
COURSE_TASK_NOT_FOUND404课程任务不存在
COURSE_MEMBER_NOT_FOUND403学员未加入课程
COURSE_TASK_RESULT_NOT_FOUND404任务学习结果不存在
COURSE_LEARNING_ANTI_CHEAT_TRIGGERED400防刷校验失败(learnUuid变更)