课堂管理与诊断
课堂支持实时课与直播课。创建课堂传入名称、老师、计划开始时间和 durationMinutes。计划结束时间由服务端计算。update 在开课前修改课堂配置,必填 classroomId、name、teacherEduUserId;开始时间、课时时长和课件绑定不通过该接口修改。
replaceStudents 覆盖学生名单。bindCoursewares 将课件绑定到课堂,addWhiteboardCourseware 将已就绪且已绑定的课件添加到白板;requestId 标识该操作。unbindCoursewares 只解除绑定。
listEnteredUsers 查询实际进课用户。listJoinAttempts 使用游标分页;getEnteredUserTrace 分别返回事件分页 eventPage 与会话分页 sessionsPage,下一页分别使用 cursor 与 sessionsCursor。attemptId 用于指定一次进课尝试。导出轨迹时收集两类分页并将结果写为 JSON。
出勤记录按成员和时间段返回。课堂仍在进行时,未闭合区间以 open=true 标识,不计入累计时长。直播源 kind 包括 device、file、push、pull。播放凭证返回 status、relayVersion、streams,无就绪流时流列表为空。
应用后端使用应用业务接口和应用凭证。本页描述独立的租户管理调用。
classrooms.list
课堂列表。
GET /v1/classrooms
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.list(appId, input) |
| Python | c.classrooms.list(app_id, **input) |
| Java | c.classrooms.list(appId, input) |
| Go | c.Classrooms.List(ctx, appID, input, &result) |
| PHP | $c->classrooms->list($appId, $input) |
输入:ListClassroomsQuery。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
status | 否 | ClassroomStatus | undefined | 状态筛选或目标状态 |
q | 否 | string | undefined | 搜索关键词 |
startsAtFrom | 否 | string | undefined | 计划开始时间下界,包含 |
startsAtTo | 否 | string | undefined | 计划开始时间上界,不包含 |
actualStartedAtFrom | 否 | string | undefined | 实际开课时间下界 |
actualStartedAtTo | 否 | string | undefined | 实际开课时间上界 |
page | 否 | number | undefined | 页码,从 1 开始 |
pageSize | 否 | number | undefined | 单页数量 |
返回:ListClassroomsResult。嵌套字段见共享类型。
classrooms.get
课堂详情。
GET /v1/classrooms/detail
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.get(appId, input) |
| Python | c.classrooms.get(app_id, **input) |
| Java | c.classrooms.get(appId, input) |
| Go | c.Classrooms.Get(ctx, appID, input, &result) |
| PHP | $c->classrooms->get($appId, $input) |
输入:ClassroomIdInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:ClassroomRecord。嵌套字段见共享类型。
classrooms.create
创建课堂。
POST /v1/classrooms
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.create(appId, input) |
| Python | c.classrooms.create(app_id, **input) |
| Java | c.classrooms.create(appId, input) |
| Go | c.Classrooms.Create(ctx, appID, input, &result) |
| PHP | $c->classrooms->create($appId, $input) |
输入:CreateClassroomPayload。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
name | 是 | string | 应用或课堂名称 |
teacherEduUserId | 是 | string | 主讲老师用户 ID |
startsAt | 是 | string | 计划开始时间,ISO 8601 |
durationMinutes | 是 | number | 持续时间,分钟;课堂创建范围 5–480 |
resolution | 否 | ClassroomResolution | undefined | 课堂视频分辨率 |
maxOnStage | 否 | number | undefined | 最大同时上台人数,1–16 |
maxAudience | 否 | number | undefined | 最大在室人数,包含台上,最大 100000 |
classroomType | 否 | ClassroomType | undefined | 实时课 realtime 或直播课 live |
liveSourceKind | 否 | string | undefined | 课堂创建时的直播源类型 |
liveVideoId | 否 | string | undefined | 直播视频素材 ID |
pullStreamUrl | 否 | string | undefined | 拉流源地址 |
recordMode | 否 | ClassroomRecordMode | undefined | 录制模式 |
avSubscribeMode | 否 | ClassroomAvSubscribeMode | undefined | 音视频订阅模式 |
defaultOnStage | 否 | boolean | undefined | 学生与助教进课时默认上台 |
allowTeacherControlDevice | 否 | boolean | undefined | 允许老师控制成员设备 |
overtimeMinutes | 否 | number | undefined | 允许延长分钟数,0–180 |
autoStartOnSchedule | 否 | boolean | undefined | 按计划时间自动开课 |
recordBackgroundUrl | 否 | string | undefined | 录制背景图片 URL |
joinPolicy | 否 | ClassroomJoinPolicy | undefined | 指定成员或同应用用户开放进课策略 |
videoOnly | 否 | boolean | undefined | 纯视频课堂,不启用白板 |
coursewareIds | 否 | string[] | undefined | 课件 ID 列表,单次最多 50 项 |
studentEduUserIds | 否 | string[] | undefined | 创建时加入的学生用户 ID 列表 |
uiConfig | 否 | Record<string, unknown> | undefined | 课堂 UI 配置对象 |
返回:ClassroomRecord。嵌套字段见共享类型。
classrooms.update
修改课堂。
PATCH /v1/classrooms/update
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.update(appId, input) |
| Python | c.classrooms.update(app_id, **input) |
| Java | c.classrooms.update(appId, input) |
| Go | c.Classrooms.Update(ctx, appID, input, &result) |
| PHP | $c->classrooms->update($appId, $input) |
输入:UpdateClassroomInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
name | 是 | string | 应用或课堂名称 |
teacherEduUserId | 是 | string | 主讲老师用户 ID |
resolution | 否 | ClassroomResolution | undefined | 课堂视频分辨率 |
maxOnStage | 否 | number | undefined | 最大同时上台人数,1–16 |
maxAudience | 否 | number | undefined | 最大在室人数,包含台上,最大 100000 |
classroomType | 否 | ClassroomType | undefined | 实时课 realtime 或直播课 live |
liveSourceKind | 否 | string | undefined | 课堂创建时的直播源类型 |
liveVideoId | 否 | string | undefined | 直播视频素材 ID |
pullStreamUrl | 否 | string | undefined | 拉流源地址 |
recordMode | 否 | ClassroomRecordMode | undefined | 录制模式 |
avSubscribeMode | 否 | ClassroomAvSubscribeMode | undefined | 音视频订阅模式 |
defaultOnStage | 否 | boolean | undefined | 学生与助教进课时默认上台 |
allowTeacherControlDevice | 否 | boolean | undefined | 允许老师控制成员设备 |
overtimeMinutes | 否 | number | undefined | 允许延长分钟数,0–180 |
autoStartOnSchedule | 否 | boolean | undefined | 按计划时间自动开课 |
recordBackgroundUrl | 否 | string | undefined | 录制背景图片 URL |
joinPolicy | 否 | ClassroomJoinPolicy | undefined | 指定成员或同应用用户开放进课策略 |
videoOnly | 否 | boolean | undefined | 纯视频课堂,不启用白板 |
uiConfig | 否 | Record<string, unknown> | undefined | 课堂 UI 配置对象 |
返回:ClassroomRecord。嵌套字段见共享类型。
classrooms.start
开始课堂。
POST /v1/classrooms/start
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.start(appId, input) |
| Python | c.classrooms.start(app_id, **input) |
| Java | c.classrooms.start(appId, input) |
| Go | c.Classrooms.Start(ctx, appID, input, &result) |
| PHP | $c->classrooms->start($appId, $input) |
输入:ClassroomIdInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:ClassroomRecord。嵌套字段见共享类型。
classrooms.end
结束课堂。
POST /v1/classrooms/end
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.end(appId, input) |
| Python | c.classrooms.end(app_id, **input) |
| Java | c.classrooms.end(appId, input) |
| Go | c.Classrooms.End(ctx, appID, input, &result) |
| PHP | $c->classrooms->end($appId, $input) |
输入:ClassroomIdInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:ClassroomRecord。嵌套字段见共享类型。
classrooms.listMembers
课堂成员。
GET /v1/classrooms/members
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.listMembers(appId, input) |
| Python | c.classrooms.list_members(app_id, **input) |
| Java | c.classrooms.listMembers(appId, input) |
| Go | c.Classrooms.ListMembers(ctx, appID, input, &result) |
| PHP | $c->classrooms->listMembers($appId, $input) |
输入:ClassroomIdInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:ListClassroomMembersResult。嵌套字段见共享类型。
classrooms.addMember
添加课堂成员。
POST /v1/classrooms/members
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.addMember(appId, input) |
| Python | c.classrooms.add_member(app_id, **input) |
| Java | c.classrooms.addMember(appId, input) |
| Go | c.Classrooms.AddMember(ctx, appID, input, &result) |
| PHP | $c->classrooms->addMember($appId, $input) |
输入:AddMemberInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
eduUserId | 是 | string | 课堂用户 ID |
role | 是 | "teacher" | "assistant" | "student" | "inspector" | 成员或上课码角色 |
classroomId | 是 | string | 课堂 ID |
返回:MembershipResult。嵌套字段见共享类型。
classrooms.replaceStudents
覆盖学生名单。
PUT /v1/classrooms/members/students
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.replaceStudents(appId, input) |
| Python | c.classrooms.replace_students(app_id, **input) |
| Java | c.classrooms.replaceStudents(appId, input) |
| Go | c.Classrooms.ReplaceStudents(ctx, appID, input, &result) |
| PHP | $c->classrooms->replaceStudents($appId, $input) |
输入:ReplaceStudentsInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
eduUserIds | 是 | string[] | 覆盖后的完整学生 ID 列表 |
classroomId | 是 | string | 课堂 ID |
返回:SetClassroomStudentsResult。嵌套字段见共享类型。
classrooms.listCoursewares
课堂课件列表。
GET /v1/classrooms/coursewares
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.listCoursewares(appId, input) |
| Python | c.classrooms.list_coursewares(app_id, **input) |
| Java | c.classrooms.listCoursewares(appId, input) |
| Go | c.Classrooms.ListCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->listCoursewares($appId, $input) |
输入:ClassroomIdInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:ClassroomCoursewaresResult。嵌套字段见共享类型。
classrooms.bindCoursewares
绑定课堂课件。
POST /v1/classrooms/coursewares
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.bindCoursewares(appId, input) |
| Python | c.classrooms.bind_coursewares(app_id, **input) |
| Java | c.classrooms.bindCoursewares(appId, input) |
| Go | c.Classrooms.BindCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->bindCoursewares($appId, $input) |
输入:BindCoursewaresInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareIds | 是 | string[] | 课件 ID 列表,单次最多 50 项 |
classroomId | 是 | string | 课堂 ID |
返回:BindCoursewaresResult。嵌套字段见共享类型。
classrooms.unbindCoursewares
解绑课堂课件。
DELETE /v1/classrooms/coursewares
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.unbindCoursewares(appId, input) |
| Python | c.classrooms.unbind_coursewares(app_id, **input) |
| Java | c.classrooms.unbindCoursewares(appId, input) |
| Go | c.Classrooms.UnbindCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->unbindCoursewares($appId, $input) |
输入:BindCoursewaresInput。 classroomId 放在查询参数中,其余字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareIds | 是 | string[] | 课件 ID 列表,单次最多 50 项 |
classroomId | 是 | string | 课堂 ID |
返回:UnbindCoursewaresResult。嵌套字段见共享类型。
classrooms.listWhiteboardCoursewares
白板课件列表。
GET /v1/classrooms/whiteboard/coursewares
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.listWhiteboardCoursewares(appId, input) |
| Python | c.classrooms.list_whiteboard_coursewares(app_id, **input) |
| Java | c.classrooms.listWhiteboardCoursewares(appId, input) |
| Go | c.Classrooms.ListWhiteboardCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->listWhiteboardCoursewares($appId, $input) |
输入:ClassroomIdInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:WhiteboardCoursewaresResult。嵌套字段见共享类型。
classrooms.addWhiteboardCourseware
添加课件到白板。
POST /v1/classrooms/whiteboard/coursewares
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.addWhiteboardCourseware(appId, input) |
| Python | c.classrooms.add_whiteboard_courseware(app_id, **input) |
| Java | c.classrooms.addWhiteboardCourseware(appId, input) |
| Go | c.Classrooms.AddWhiteboardCourseware(ctx, appID, input, &result) |
| PHP | $c->classrooms->addWhiteboardCourseware($appId, $input) |
输入:AddWhiteboardCoursewareInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareId | 是 | string | 课件 ID |
requestId | 是 | string | 本次白板课件操作标识 |
classroomId | 是 | string | 课堂 ID |
返回:ClassroomWhiteboardCoursewareRecord。嵌套字段见共享类型。
classrooms.attendance
课堂出勤记录。
GET /v1/classrooms/attendance
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.attendance(appId, input) |
| Python | c.classrooms.attendance(app_id, **input) |
| Java | c.classrooms.attendance(appId, input) |
| Go | c.Classrooms.Attendance(ctx, appID, input, &result) |
| PHP | $c->classrooms->attendance($appId, $input) |
输入:AttendanceInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
eduUserId | 否 | string | undefined | 课堂用户 ID |
classroomId | 是 | string | 课堂 ID |
返回:AttendanceResult。嵌套字段见共享类型。
classrooms.listEnteredUsers
实际进课用户。
GET /v1/classrooms/entered-users
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.listEnteredUsers(appId, input) |
| Python | c.classrooms.list_entered_users(app_id, **input) |
| Java | c.classrooms.listEnteredUsers(appId, input) |
| Go | c.Classrooms.ListEnteredUsers(ctx, appID, input, &result) |
| PHP | $c->classrooms->listEnteredUsers($appId, $input) |
输入:EnteredUsersInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
page | 否 | number | undefined | 页码,从 1 开始 |
pageSize | 否 | number | undefined | 单页数量 |
返回:ListClassroomEnteredUsersResult。嵌套字段见共享类型。
classrooms.listJoinAttempts
进课尝试。
GET /v1/classrooms/join-attempts
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.listJoinAttempts(appId, input) |
| Python | c.classrooms.list_join_attempts(app_id, **input) |
| Java | c.classrooms.listJoinAttempts(appId, input) |
| Go | c.Classrooms.ListJoinAttempts(ctx, appID, input, &result) |
| PHP | $c->classrooms->listJoinAttempts($appId, $input) |
输入:JoinAttemptsInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
result | 否 | string | undefined | 进课结果筛选 |
joinStatus | 否 | string | undefined | 进课状态筛选 |
failureDomain | 否 | string | undefined | 失败领域筛选 |
platform | 否 | string | undefined | 客户端平台 |
sdkVersion | 否 | string | undefined | SDK 版本 |
appVersion | 否 | string | undefined | 客户端应用版本 |
networkType | 否 | string | undefined | 网络类型 |
provider | 否 | string | undefined | 服务提供方 |
eduUserId | 否 | string | undefined | 课堂用户 ID |
startedAtFrom | 否 | string | undefined | 尝试开始时间下界 |
startedAtTo | 否 | string | undefined | 尝试开始时间上界 |
cursor | 否 | string | undefined | 上一页返回的游标 |
pageSize | 否 | number | undefined | 单页数量 |
返回:ListClassroomJoinAttemptsResult。嵌套字段见共享类型。
classrooms.getEnteredUserTrace
用户进课轨迹。
GET /v1/classrooms/entered-users/trace
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.getEnteredUserTrace(appId, input) |
| Python | c.classrooms.get_entered_user_trace(app_id, **input) |
| Java | c.classrooms.getEnteredUserTrace(appId, input) |
| Go | c.Classrooms.GetEnteredUserTrace(ctx, appID, input, &result) |
| PHP | $c->classrooms->getEnteredUserTrace($appId, $input) |
输入:EnteredUserTraceInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
attemptId | 是 | string | 进课尝试 ID |
cursor | 否 | string | undefined | 上一页返回的游标 |
pageSize | 否 | number | undefined | 单页数量 |
sessionsCursor | 否 | string | undefined | 会话分页游标 |
sessionsPageSize | 否 | number | undefined | 会话分页数量 |
eduUserId | 是 | string | 课堂用户 ID |
返回:ClassroomEnteredUserTrace。嵌套字段见共享类型。
classrooms.getLiveSource
直播源详情。
GET /v1/classrooms/live-source
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.getLiveSource(appId, input) |
| Python | c.classrooms.get_live_source(app_id, **input) |
| Java | c.classrooms.getLiveSource(appId, input) |
| Go | c.Classrooms.GetLiveSource(ctx, appID, input, &result) |
| PHP | $c->classrooms->getLiveSource($appId, $input) |
输入:ClassroomIdInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:LiveSourceRecord。嵌套字段见共享类型。
classrooms.setLiveSource
设置直播源。
PUT /v1/classrooms/live-source
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.setLiveSource(appId, input) |
| Python | c.classrooms.set_live_source(app_id, **input) |
| Java | c.classrooms.setLiveSource(appId, input) |
| Go | c.Classrooms.SetLiveSource(ctx, appID, input, &result) |
| PHP | $c->classrooms->setLiveSource($appId, $input) |
输入:SetLiveSourceInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
kind | 是 | "device" | "file" | "push" | "pull" | 直播源类型 |
liveVideoId | 否 | string | undefined | 直播视频素材 ID |
pullStreamUrl | 否 | string | undefined | 拉流源地址 |
classroomId | 是 | string | 课堂 ID |
返回:LiveSourceRecord。嵌套字段见共享类型。
classrooms.issueLivePushCredential
推流凭证。
POST /v1/classrooms/live-source/push-credential
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.issueLivePushCredential(appId, input) |
| Python | c.classrooms.issue_live_push_credential(app_id, **input) |
| Java | c.classrooms.issueLivePushCredential(appId, input) |
| Go | c.Classrooms.IssueLivePushCredential(ctx, appID, input, &result) |
| PHP | $c->classrooms->issueLivePushCredential($appId, $input) |
输入:ClassroomIdInput。 字段放在 JSON Body 中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:LivePushCredential。嵌套字段见共享类型。
classrooms.getLivePlayCredentials
直播播放凭证。
GET /v1/classrooms/live/play-credentials
鉴权:租户 Bearer Token 与 x-app-id。
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.getLivePlayCredentials(appId, input) |
| Python | c.classrooms.get_live_play_credentials(app_id, **input) |
| Java | c.classrooms.getLivePlayCredentials(appId, input) |
| Go | c.Classrooms.GetLivePlayCredentials(ctx, appID, input, &result) |
| PHP | $c->classrooms->getLivePlayCredentials($appId, $input) |
输入:ClassroomIdInput。 字段放在 URL 查询参数中。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
返回:LivePlayCredentials。嵌套字段见共享类型。