应用业务接口
sdk.client 使用 x-app-key 和 x-app-secret 调用 edu_service/server-api。服务端从验证后的凭证解析应用 ID。以下业务调用不需要控制台租户会话,也不传 x-app-id。
当前源码提供 50 个应用凭证 HTTP 路由,其中以下 45 项对应控制台的应用业务操作。课堂用户 Token 由 client.auth.issueToken 本地签发。成员权限与应用 UI 配置见课堂接口。新增能力需要部署对应版本的 server-api 并从源码构建 SDK;公开包 0.1.5 不包含这些新增方法。
账号登录与绑定、应用创建和跨应用管理、租户仪表盘、钱包、购买及自动充值使用独立的租户管理客户端。应用凭证不具备这些租户接口的权限。
业务控制器校验 HTTP 参数并调用已有领域 RPC。进课诊断和行为查询使用共享的 classroom-insights 查询库。两个网关使用相同的 ClickHouse 读取配置(CLICKHOUSE_URL、CLICKHOUSE_USER、CLICKHOUSE_PASSWORD、CLICKHOUSE_DATABASE);诊断存储不可用时返回 TELEMETRY_SINK_UNAVAILABLE。诊断查询限定在已鉴权应用及其课堂内。
配置
import { Eduskit } from '@eduskit/server-sdk';
const sdk = new Eduskit({
client: {
baseUrl: process.env.EDU_SERVER_URL!,
appId: process.env.EDU_APP_ID!,
appKey: process.env.EDU_APP_KEY!,
appSecret: process.env.EDU_APP_SECRET!,
},
});
const c = sdk.client;
const users = await c.users.list({ page: 1, pageSize: 20 });
const files = await c.coursewares.list({ status: 'ready' });
Python、Java、Go、PHP 使用各自语言的应用配置。下表 c 指 Node/Python/PHP 的 sdk.client、Java 的 sdk.client() 或 Go 的 sdk.Client() 返回值。Python 方法名使用 snake_case,JSON 字段仍为 camelCase。Go 方法返回 (map[string]any, error)。
上传流程:申请签名 URL,调用 c.uploadFile(url, bytes, contentType) 直传字节,再创建课件或视频记录。直传仅向对象存储发送内容类型与文件字节。Python 使用 upload_file,Go 使用 UploadFile(ctx, url, bytes, contentType)。转码轮询、课堂创建、上课码和完整诊断导出见业务操作示例。
| 业务方法 | HTTP | 功能 |
|---|---|---|
client.users.list | GET /v1/users | 用户列表 |
client.users.search | GET /v1/users/search | 搜索用户 |
client.users.register | POST /v1/users | 创建用户 |
client.users.setStatus | PATCH /v1/users/status | 启用或停用用户 |
client.classrooms.list | GET /v1/classrooms | 课堂列表 |
client.classrooms.get | GET /v1/classrooms/detail | 课堂详情 |
client.classrooms.create | POST /v1/classrooms | 创建课堂 |
client.classrooms.update | PATCH /v1/classrooms/update | 修改课堂 |
client.classrooms.start | POST /v1/classrooms/start | 开始课堂 |
client.classrooms.end | POST /v1/classrooms/end | 结束课堂 |
client.classrooms.members.list | GET /v1/classrooms/members | 课堂成员 |
client.classrooms.members.add | POST /v1/classrooms/members | 添加课堂成员 |
client.classrooms.members.replaceStudents | PUT /v1/classrooms/members/students | 覆盖学生名单 |
client.classrooms.coursewares.list | GET /v1/classrooms/coursewares | 课堂课件列表 |
client.classrooms.coursewares.bind | POST /v1/classrooms/coursewares | 绑定课堂课件 |
client.classrooms.coursewares.unbind | DELETE /v1/classrooms/coursewares | 解绑课堂课件 |
client.classroomMedia.listWhiteboardCoursewares | GET /v1/classrooms/whiteboard/coursewares | 白板课件列表 |
client.classroomMedia.addWhiteboardCourseware | POST /v1/classrooms/whiteboard/coursewares | 添加课件到白板 |
client.classrooms.attendance | GET /v1/classrooms/attendance | 课堂出勤记录 |
client.classrooms.listEnteredUsers | GET /v1/classrooms/entered-users | 实际进课用户 |
client.classrooms.listJoinAttempts | GET /v1/classrooms/join-attempts | 进课尝试 |
client.classrooms.getEnteredUserTrace | GET /v1/classrooms/entered-users/trace | 用户进课轨迹 |
client.classroomMedia.getLiveSource | GET /v1/classrooms/live-source | 直播源详情 |
client.classroomMedia.setLiveSource | PUT /v1/classrooms/live-source | 设置直播源 |
client.classroomMedia.issueLivePushCredential | POST /v1/classrooms/live-source/push-credential | 推流凭证 |
client.classroomMedia.getLivePlayCredentials | GET /v1/classrooms/live/play-credentials | 直播播放凭证 |
client.classrooms.entryCode.list | GET /v1/classrooms/entry-codes | 上课码及领用记录 |
client.classrooms.entryCode.issue | POST /v1/classrooms/entry-codes | 签发上课码 |
client.classrooms.entryCode.update | POST /v1/classrooms/entry-codes/update | 修改或轮换上课码 |
client.classrooms.entryCode.revoke | POST /v1/classrooms/entry-codes/revoke | 撤销上课码 |
client.activity.list | GET /v1/classrooms/activity | 课堂活动列表 |
client.activity.tracks | GET /v1/classrooms/activity/tracks | 课堂活动轨道 |
client.activity.overview | GET /v1/classrooms/activity/overview | 课堂活动概览 |
client.activity.detail | GET /v1/classrooms/activity/detail | 课堂活动详情 |
client.coursewares.list | GET /v1/coursewares | 课件库列表 |
client.coursewares.createUploadUrl | POST /v1/coursewares/upload-url | 课件上传地址 |
client.coursewares.create | POST /v1/coursewares | 创建并转码课件 |
client.coursewares.get | GET /v1/coursewares/detail | 课件详情 |
client.coursewares.getManifest | GET /v1/coursewares/manifest | 课件页面清单 |
client.coursewares.remove | DELETE /v1/coursewares/remove | 删除课件 |
client.coursewares.retry | POST /v1/coursewares/retry | 重试课件转码 |
client.liveVideos.list | GET /v1/live-videos | 直播素材列表 |
client.liveVideos.createUploadUrl | POST /v1/live-videos/upload-url | 直播视频上传地址 |
client.liveVideos.create | POST /v1/live-videos | 创建直播素材 |
client.liveVideos.remove | DELETE /v1/live-videos/remove | 删除直播素材 |
users.list
用户列表。
GET /v1/users
| 语言 | 调用 |
|---|---|
| Node.js | c.users.list(input) |
| Python | c.users.list(**input) |
| Java | c.users.list(input) |
| Go | c.Users.List(ctx, input) |
| PHP | $c->users->list($input) |
HTTP 字段:ListEduUsersQuery。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
status | 否 | EduUserStatus | undefined | 状态筛选或目标状态 |
q | 否 | string | undefined | 搜索关键词 |
page | 否 | number | undefined | 页码,从 1 开始 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ListEduUsersResult (共享类型)。
users.search
搜索用户。
GET /v1/users/search
| 语言 | 调用 |
|---|---|
| Node.js | c.users.search(input) |
| Python | c.users.search(**input) |
| Java | c.users.search(input) |
| Go | c.Users.Search(ctx, input) |
| PHP | $c->users->search($input) |
HTTP 字段:SearchEduUsersQuery。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
q | 否 | string | undefined | 搜索关键词 |
status | 否 | EduUserStatus | undefined | 状态筛选或目标状态 |
limit | 否 | number | undefined | 搜索结果数量上限,最大 50 |
requireOriginId | 否 | boolean | undefined | 只返回有业务侧标识的用户 |
HTTP 返回字段见 SearchEduUsersResult (共享类型)。
users.register
创建用户。
POST /v1/users
| 语言 | 调用 |
|---|---|
| Node.js | c.users.register(input) |
| Python | c.users.register(**input) |
| Java | c.users.register(input) |
| Go | c.Users.Register(ctx, input) |
| PHP | $c->users->register($input) |
HTTP 字段:CreateEduUserPayload。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
originId | 否 | string | undefined | 业务侧用户标识 |
nickname | 是 | string | 用户昵称 |
avatar | 是 | string | 头像 URL |
HTTP 返回字段见 EduUserRecord (共享类型)。
users.setStatus
启用或停用用户。
PATCH /v1/users/status
| 语言 | 调用 |
|---|---|
| Node.js | c.users.setStatus(input) |
| Python | c.users.set_status(**input) |
| Java | c.users.setStatus(input) |
| Go | c.Users.SetStatus(ctx, input) |
| PHP | $c->users->setStatus($input) |
HTTP 字段:UserStatusInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
eduUserId | 是 | string | 课堂用户 ID |
status | 是 | EduUserStatus | 状态筛选或目标状态 |
HTTP 返回字段见 EduUserRecord (共享类型)。
classrooms.list
课堂列表。
GET /v1/classrooms
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.list(input) |
| Python | c.classrooms.list(**input) |
| Java | c.classrooms.list(input) |
| Go | c.Classrooms.List(ctx, input) |
| PHP | $c->classrooms->list($input) |
HTTP 字段: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 | 单页数量 |
HTTP 返回字段见 ListClassroomsResult (共享类型)。
classrooms.get
课堂详情。
GET /v1/classrooms/detail
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.get(input) |
| Python | c.classrooms.get(**input) |
| Java | c.classrooms.get(input) |
| Go | c.Classrooms.Get(ctx, input) |
| PHP | $c->classrooms->get($input) |
HTTP 字段:ClassroomIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 ClassroomRecord (共享类型)。
classrooms.create
创建课堂。
POST /v1/classrooms
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.create(input) |
| Python | c.classrooms.create(**input) |
| Java | c.classrooms.create(input) |
| Go | c.Classrooms.Create(ctx, input) |
| PHP | $c->classrooms->create($input) |
HTTP 字段: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 配置对象 |
HTTP 返回字段见 ClassroomRecord (共享类型)。
classrooms.update
修改课堂。
PATCH /v1/classrooms/update
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.update(input) |
| Python | c.classrooms.update(**input) |
| Java | c.classrooms.update(input) |
| Go | c.Classrooms.Update(ctx, input) |
| PHP | $c->classrooms->update($input) |
HTTP 字段: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 配置对象 |
HTTP 返回字段见 ClassroomRecord (共享类型)。
classrooms.start
开始课堂。
POST /v1/classrooms/start
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.start(classroomId) |
| Python | c.classrooms.start(classroom_id) |
| Java | c.classrooms.start(classroomId) |
| Go | c.Classrooms.Start(ctx, classroomId) |
| PHP | $c->classrooms->start($classroomId) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:ClassroomIdInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 ClassroomRecord (共享类型)。
classrooms.end
结束课堂。
POST /v1/classrooms/end
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.end(classroomId) |
| Python | c.classrooms.end(classroom_id) |
| Java | c.classrooms.end(classroomId) |
| Go | c.Classrooms.End(ctx, classroomId) |
| PHP | $c->classrooms->end($classroomId) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:ClassroomIdInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 ClassroomRecord (共享类型)。
classrooms.members.list
课堂成员。
GET /v1/classrooms/members
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.members.list(classroomId) |
| Python | c.classrooms.members.list(classroom_id) |
| Java | c.classrooms.members.list(classroomId) |
| Go | c.Classrooms.Members.List(ctx, classroomId) |
| PHP | $c->classrooms->members->list($classroomId) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:ClassroomIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 ListClassroomMembersResult (共享类型)。
classrooms.members.add
添加课堂成员。
POST /v1/classrooms/members
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.members.add(classroomId, input) |
| Python | c.classrooms.members.add(classroom_id, **input) |
| Java | c.classrooms.members.add(classroomId, input) |
| Go | c.Classrooms.Members.Add(ctx, classroomId, input) |
| PHP | $c->classrooms->members->add($classroomId, $input) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:AddMemberInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
eduUserId | 是 | string | 课堂用户 ID |
role | 是 | "teacher" | "assistant" | "student" | "inspector" | 成员或上课码角色 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 MembershipResult (共享类型)。
classrooms.members.replaceStudents
覆盖学生名单。
PUT /v1/classrooms/members/students
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.members.replaceStudents(classroomId, input) |
| Python | c.classrooms.members.replace_students(classroom_id, **input) |
| Java | c.classrooms.members.replaceStudents(classroomId, input) |
| Go | c.Classrooms.Members.ReplaceStudents(ctx, classroomId, input) |
| PHP | $c->classrooms->members->replaceStudents($classroomId, $input) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:ReplaceStudentsInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
eduUserIds | 是 | string[] | 覆盖后的完整学生 ID 列表 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 SetClassroomStudentsResult (共享类型)。
classrooms.coursewares.list
课堂课件列表。
GET /v1/classrooms/coursewares
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.coursewares.list(classroomId) |
| Python | c.classrooms.coursewares.list(classroom_id) |
| Java | c.classrooms.coursewares.list(classroomId) |
| Go | c.Classrooms.Coursewares.List(ctx, classroomId) |
| PHP | $c->classrooms->coursewares->list($classroomId) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:ClassroomIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 ClassroomCoursewaresResult (共享类型)。
classrooms.coursewares.bind
绑定课堂课件。
POST /v1/classrooms/coursewares
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.coursewares.bind(classroomId, input) |
| Python | c.classrooms.coursewares.bind(classroom_id, **input) |
| Java | c.classrooms.coursewares.bind(classroomId, input) |
| Go | c.Classrooms.Coursewares.Bind(ctx, classroomId, input) |
| PHP | $c->classrooms->coursewares->bind($classroomId, $input) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:BindCoursewaresInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareIds | 是 | string[] | 课件 ID 列表,单次最多 50 项 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 BindCoursewaresResult (共享类型)。
classrooms.coursewares.unbind
解绑课堂课件。
DELETE /v1/classrooms/coursewares
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.coursewares.unbind(classroomId, input) |
| Python | c.classrooms.coursewares.unbind(classroom_id, **input) |
| Java | c.classrooms.coursewares.unbind(classroomId, input) |
| Go | c.Classrooms.Coursewares.Unbind(ctx, classroomId, input) |
| PHP | $c->classrooms->coursewares->unbind($classroomId, $input) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:BindCoursewaresInput。 classroomId 位于 query,coursewareIds 位于 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareIds | 是 | string[] | 课件 ID 列表,单次最多 50 项 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 UnbindCoursewaresResult (共享类型)。
classroomMedia.listWhiteboardCoursewares
白板课件列表。
GET /v1/classrooms/whiteboard/coursewares
| 语言 | 调用 |
|---|---|
| Node.js | c.classroomMedia.listWhiteboardCoursewares(input) |
| Python | c.classroom_media.list_whiteboard_coursewares(**input) |
| Java | c.classroomMedia.listWhiteboardCoursewares(input) |
| Go | c.ClassroomMedia.ListWhiteboardCoursewares(ctx, input) |
| PHP | $c->classroomMedia->listWhiteboardCoursewares($input) |
HTTP 字段:ClassroomIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 WhiteboardCoursewaresResult (共享类型)。
classroomMedia.addWhiteboardCourseware
添加课件到白板。
POST /v1/classrooms/whiteboard/coursewares
| 语言 | 调用 |
|---|---|
| Node.js | c.classroomMedia.addWhiteboardCourseware(input) |
| Python | c.classroom_media.add_whiteboard_courseware(**input) |
| Java | c.classroomMedia.addWhiteboardCourseware(input) |
| Go | c.ClassroomMedia.AddWhiteboardCourseware(ctx, input) |
| PHP | $c->classroomMedia->addWhiteboardCourseware($input) |
HTTP 字段:AddWhiteboardCoursewareInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareId | 是 | string | 课件 ID |
requestId | 是 | string | 本次白板课件操作标识 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 ClassroomWhiteboardCoursewareRecord (共享类型)。
classrooms.attendance
课堂出勤记录。
GET /v1/classrooms/attendance
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.attendance(input) |
| Python | c.classrooms.attendance(**input) |
| Java | c.classrooms.attendance(input) |
| Go | c.Classrooms.Attendance(ctx, input) |
| PHP | $c->classrooms->attendance($input) |
HTTP 字段:AttendanceInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
eduUserId | 否 | string | undefined | 课堂用户 ID |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 AttendanceResult (共享类型)。
classrooms.listEnteredUsers
实际进课用户。
GET /v1/classrooms/entered-users
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.listEnteredUsers(input) |
| Python | c.classrooms.list_entered_users(**input) |
| Java | c.classrooms.listEnteredUsers(input) |
| Go | c.Classrooms.ListEnteredUsers(ctx, input) |
| PHP | $c->classrooms->listEnteredUsers($input) |
HTTP 字段:EnteredUsersInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
page | 否 | number | undefined | 页码,从 1 开始 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ListClassroomEnteredUsersResult (共享类型)。
classrooms.listJoinAttempts
进课尝试。
GET /v1/classrooms/join-attempts
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.listJoinAttempts(input) |
| Python | c.classrooms.list_join_attempts(**input) |
| Java | c.classrooms.listJoinAttempts(input) |
| Go | c.Classrooms.ListJoinAttempts(ctx, input) |
| PHP | $c->classrooms->listJoinAttempts($input) |
HTTP 字段: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 | 单页数量 |
HTTP 返回字段见 ListClassroomJoinAttemptsResult (共享类型)。
classrooms.getEnteredUserTrace
用户进课轨迹。
GET /v1/classrooms/entered-users/trace
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.getEnteredUserTrace(input) |
| Python | c.classrooms.get_entered_user_trace(**input) |
| Java | c.classrooms.getEnteredUserTrace(input) |
| Go | c.Classrooms.GetEnteredUserTrace(ctx, input) |
| PHP | $c->classrooms->getEnteredUserTrace($input) |
HTTP 字段:EnteredUserTraceInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
attemptId | 是 | string | 进课尝试 ID |
cursor | 否 | string | undefined | 上一页返回的游标 |
pageSize | 否 | number | undefined | 单页数量 |
sessionsCursor | 否 | string | undefined | 会话分页游标 |
sessionsPageSize | 否 | number | undefined | 会话分页数量 |
eduUserId | 是 | string | 课堂用户 ID |
HTTP 返回字段见 ClassroomEnteredUserTrace (共享类型)。
classroomMedia.getLiveSource
直播源详情。
GET /v1/classrooms/live-source
| 语言 | 调用 |
|---|---|
| Node.js | c.classroomMedia.getLiveSource(input) |
| Python | c.classroom_media.get_live_source(**input) |
| Java | c.classroomMedia.getLiveSource(input) |
| Go | c.ClassroomMedia.GetLiveSource(ctx, input) |
| PHP | $c->classroomMedia->getLiveSource($input) |
HTTP 字段:ClassroomIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 LiveSourceRecord (共享类型)。
classroomMedia.setLiveSource
设置直播源。
PUT /v1/classrooms/live-source
| 语言 | 调用 |
|---|---|
| Node.js | c.classroomMedia.setLiveSource(input) |
| Python | c.classroom_media.set_live_source(**input) |
| Java | c.classroomMedia.setLiveSource(input) |
| Go | c.ClassroomMedia.SetLiveSource(ctx, input) |
| PHP | $c->classroomMedia->setLiveSource($input) |
HTTP 字段:SetLiveSourceInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
kind | 是 | "device" | "file" | "push" | "pull" | 直播源类型 |
liveVideoId | 否 | string | undefined | 直播视频素材 ID |
pullStreamUrl | 否 | string | undefined | 拉流源地址 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 LiveSourceRecord (共享类型)。
classroomMedia.issueLivePushCredential
推流凭证。
POST /v1/classrooms/live-source/push-credential
| 语言 | 调用 |
|---|---|
| Node.js | c.classroomMedia.issueLivePushCredential(input) |
| Python | c.classroom_media.issue_live_push_credential(**input) |
| Java | c.classroomMedia.issueLivePushCredential(input) |
| Go | c.ClassroomMedia.IssueLivePushCredential(ctx, input) |
| PHP | $c->classroomMedia->issueLivePushCredential($input) |
HTTP 字段:ClassroomIdInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 LivePushCredential (共享类型)。
classroomMedia.getLivePlayCredentials
直播播放凭证。
GET /v1/classrooms/live/play-credentials
| 语言 | 调用 |
|---|---|
| Node.js | c.classroomMedia.getLivePlayCredentials(input) |
| Python | c.classroom_media.get_live_play_credentials(**input) |
| Java | c.classroomMedia.getLivePlayCredentials(input) |
| Go | c.ClassroomMedia.GetLivePlayCredentials(ctx, input) |
| PHP | $c->classroomMedia->getLivePlayCredentials($input) |
HTTP 字段:ClassroomIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 LivePlayCredentials (共享类型)。
classrooms.entryCode.list
上课码及领用记录。
GET /v1/classrooms/entry-codes
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.entryCode.list(classroomId) |
| Python | c.classrooms.entry_code.list(classroom_id) |
| Java | c.classrooms.entryCode.list(classroomId) |
| Go | c.Classrooms.EntryCode.List(ctx, classroomId) |
| PHP | $c->classrooms->entryCode->list($classroomId) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:ClassroomIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 EntryCodeList (共享类型)。
classrooms.entryCode.issue
签发上课码。
POST /v1/classrooms/entry-codes
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.entryCode.issue(classroomId, input) |
| Python | c.classrooms.entry_code.issue(classroom_id, **input) |
| Java | c.classrooms.entryCode.issue(classroomId, input) |
| Go | c.Classrooms.EntryCode.Issue(ctx, classroomId, input) |
| PHP | $c->classrooms->entryCode->issue($classroomId, $input) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:IssueEntryCodesInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
role | 是 | "teacher" | "student" | 成员或上课码角色 |
maxClaims | 是 | number | 最多领用人数,1–500;老师码为 1 |
count | 否 | number | undefined | 签发数量,1–20;老师码按 1 张处理 |
remark | 否 | string | undefined | 备注,最多 64 字符 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 EntryCodeList (共享类型)。
classrooms.entryCode.update
修改或轮换上课码。
POST /v1/classrooms/entry-codes/update
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.entryCode.update(classroomId, input) |
| Python | c.classrooms.entry_code.update(classroom_id, **input) |
| Java | c.classrooms.entryCode.update(classroomId, input) |
| Go | c.Classrooms.EntryCode.Update(ctx, classroomId, input) |
| PHP | $c->classrooms->entryCode->update($classroomId, $input) |
将 classroomId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:UpdateEntryCodeInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
entryCodeId | 是 | string | 上课码记录 ID |
maxClaims | 否 | number | undefined | 最多领用人数,1–500;老师码为 1 |
remark | 否 | string | undefined | 备注,最多 64 字符 |
rotate | 否 | boolean | undefined | 轮换上课码值 |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 EntryCodeRecord (共享类型)。
classrooms.entryCode.revoke
撤销上课码。
POST /v1/classrooms/entry-codes/revoke
| 语言 | 调用 |
|---|---|
| Node.js | c.classrooms.entryCode.revoke(classroomId, entryCodeId) |
| Python | c.classrooms.entry_code.revoke(classroom_id, entry_code_id) |
| Java | c.classrooms.entryCode.revoke(classroomId, entryCodeId) |
| Go | c.Classrooms.EntryCode.Revoke(ctx, classroomId, entryCodeId) |
| PHP | $c->classrooms->entryCode->revoke($classroomId, $entryCodeId) |
将 classroomId、entryCodeId 作为独立方法参数传入,其余字段放在 input 中。
HTTP 字段:RevokeEntryCodeInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
entryCodeId | 是 | string | 上课码记录 ID |
classroomId | 是 | string | 课堂 ID |
HTTP 返回字段见 EntryCodeRecord (共享类型)。
activity.list
课堂活动列表。
GET /v1/classrooms/activity
| 语言 | 调用 |
|---|---|
| Node.js | c.activity.list(input) |
| Python | c.activity.list(**input) |
| Java | c.activity.list(input) |
| Go | c.Activity.List(ctx, input) |
| PHP | $c->activity->list($input) |
HTTP 字段:ActivityQuery。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
from | 否 | string | undefined | 时间范围开始,ISO 8601 |
to | 否 | string | undefined | 时间范围结束,ISO 8601 |
deviceId | 否 | string | undefined | 设备标识 |
attemptId | 否 | string | undefined | 进课尝试 ID |
category | 否 | "join" | "stage" | "media" | "permission" | "message" | "whiteboard" | "tool" | "connection" | "lifecycle" | "other" | undefined | 活动分类 |
relation | 否 | "initiated" | "affected" | "observed" | "system" | "server" | undefined | 用户与活动的关系 |
eduUserId | 是 | string | 课堂用户 ID |
cursor | 否 | string | undefined | 上一页返回的游标 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ActivityPage (共享类型)。
activity.tracks
课堂活动轨道。
GET /v1/classrooms/activity/tracks
| 语言 | 调用 |
|---|---|
| Node.js | c.activity.tracks(input) |
| Python | c.activity.tracks(**input) |
| Java | c.activity.tracks(input) |
| Go | c.Activity.Tracks(ctx, input) |
| PHP | $c->activity->tracks($input) |
HTTP 字段:ActivityQuery。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
from | 否 | string | undefined | 时间范围开始,ISO 8601 |
to | 否 | string | undefined | 时间范围结束,ISO 8601 |
deviceId | 否 | string | undefined | 设备标识 |
attemptId | 否 | string | undefined | 进课尝试 ID |
category | 否 | "join" | "stage" | "media" | "permission" | "message" | "whiteboard" | "tool" | "connection" | "lifecycle" | "other" | undefined | 活动分类 |
relation | 否 | "initiated" | "affected" | "observed" | "system" | "server" | undefined | 用户与活动的关系 |
eduUserId | 是 | string | 课堂用户 ID |
cursor | 否 | string | undefined | 上一页返回的游标 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ActivityTracks (共享类型)。
activity.overview
课堂活动概览。
GET /v1/classrooms/activity/overview
| 语言 | 调用 |
|---|---|
| Node.js | c.activity.overview(input) |
| Python | c.activity.overview(**input) |
| Java | c.activity.overview(input) |
| Go | c.Activity.Overview(ctx, input) |
| PHP | $c->activity->overview($input) |
HTTP 字段:ActivityQuery。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
from | 否 | string | undefined | 时间范围开始,ISO 8601 |
to | 否 | string | undefined | 时间范围结束,ISO 8601 |
deviceId | 否 | string | undefined | 设备标识 |
attemptId | 否 | string | undefined | 进课尝试 ID |
category | 否 | "join" | "stage" | "media" | "permission" | "message" | "whiteboard" | "tool" | "connection" | "lifecycle" | "other" | undefined | 活动分类 |
relation | 否 | "initiated" | "affected" | "observed" | "system" | "server" | undefined | 用户与活动的关系 |
eduUserId | 是 | string | 课堂用户 ID |
cursor | 否 | string | undefined | 上一页返回的游标 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ActivityOverview (共享类型)。
activity.detail
课堂活动详情。
GET /v1/classrooms/activity/detail
| 语言 | 调用 |
|---|---|
| Node.js | c.activity.detail(input) |
| Python | c.activity.detail(**input) |
| Java | c.activity.detail(input) |
| Go | c.Activity.Detail(ctx, input) |
| PHP | $c->activity->detail($input) |
HTTP 字段:ActivityDetailInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 是 | string | 课堂 ID |
from | 是 | string | 时间范围开始,ISO 8601 |
to | 是 | string | 时间范围结束,ISO 8601 |
asOf | 是 | string | 列表返回的查询截止时间 |
eduUserId | 是 | string | 课堂用户 ID |
activityId | 是 | string | 活动 ID |
cursor | 否 | string | undefined | 上一页返回的游标 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ActivityDetail (共享类型)。
coursewares.list
课件库列表。
GET /v1/coursewares
| 语言 | 调用 |
|---|---|
| Node.js | c.coursewares.list(input) |
| Python | c.coursewares.list(**input) |
| Java | c.coursewares.list(input) |
| Go | c.Coursewares.List(ctx, input) |
| PHP | $c->coursewares->list($input) |
HTTP 字段:ListCoursewaresInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
classroomId | 否 | string | undefined | 课堂 ID |
ownerEduUserId | 否 | string | undefined | 私有课件库归属用户;上传与创建保持一致 |
status | 否 | CoursewareStatus | undefined | 状态筛选或目标状态 |
q | 否 | string | undefined | 搜索关键词 |
page | 否 | number | undefined | 页码,从 1 开始 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ListCoursewaresResult (共享类型)。
coursewares.createUploadUrl
课件上传地址。
POST /v1/coursewares/upload-url
| 语言 | 调用 |
|---|---|
| Node.js | c.coursewares.createUploadUrl(input) |
| Python | c.coursewares.create_upload_url(**input) |
| Java | c.coursewares.createUploadUrl(input) |
| Go | c.Coursewares.CreateUploadUrl(ctx, input) |
| PHP | $c->coursewares->createUploadUrl($input) |
HTTP 字段:CreateUploadUrlPayload。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
fileName | 是 | string | 文件名,含扩展名 |
contentHash | 是 | string | 文件内容 SHA-256,小写十六进制;课件要求 64 字符 |
contentType | 否 | string | undefined | 文件 MIME 类型 |
expiresSeconds | 否 | number | undefined | 上传 URL 有效期,秒,0–86400;0 使用默认 |
ownerEduUserId | 否 | string | undefined | 私有课件库归属用户;上传与创建保持一致 |
HTTP 返回字段见 UploadUrlResult (共享类型)。
coursewares.create
创建并转码课件。
POST /v1/coursewares
| 语言 | 调用 |
|---|---|
| Node.js | c.coursewares.create(input) |
| Python | c.coursewares.create(**input) |
| Java | c.coursewares.create(input) |
| Go | c.Coursewares.Create(ctx, input) |
| PHP | $c->coursewares->create($input) |
HTTP 字段:CreateCoursewarePayload。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
fileName | 是 | string | 文件名,含扩展名 |
originalName | 是 | string | 原始文件名,含扩展名 |
format | 是 | string | 课件文件格式 |
sizeBytes | 是 | number | 文件字节数 |
objectKey | 是 | string | 上传接口返回的对象键 |
sourceUrl | 是 | string | 上传接口返回的源文件地址 |
contentHash | 是 | string | 文件内容 SHA-256,小写十六进制;课件要求 64 字符 |
ownerEduUserId | 否 | string | undefined | 私有课件库归属用户;上传与创建保持一致 |
HTTP 返回字段见 CoursewareRecord (共享类型)。
coursewares.get
课件详情。
GET /v1/coursewares/detail
| 语言 | 调用 |
|---|---|
| Node.js | c.coursewares.get(input) |
| Python | c.coursewares.get(**input) |
| Java | c.coursewares.get(input) |
| Go | c.Coursewares.Get(ctx, input) |
| PHP | $c->coursewares->get($input) |
HTTP 字段:CoursewareIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareId | 是 | string | 课件 ID |
HTTP 返回字段见 CoursewareRecord (共享类型)。
coursewares.getManifest
课件页面清单。
GET /v1/coursewares/manifest
| 语言 | 调用 |
|---|---|
| Node.js | c.coursewares.getManifest(input) |
| Python | c.coursewares.get_manifest(**input) |
| Java | c.coursewares.getManifest(input) |
| Go | c.Coursewares.GetManifest(ctx, input) |
| PHP | $c->coursewares->getManifest($input) |
HTTP 字段:CoursewareIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareId | 是 | string | 课件 ID |
HTTP 返回字段见 CoursewareManifest (共享类型)。
coursewares.remove
删除课件。
DELETE /v1/coursewares/remove
| 语言 | 调用 |
|---|---|
| Node.js | c.coursewares.remove(input) |
| Python | c.coursewares.remove(**input) |
| Java | c.coursewares.remove(input) |
| Go | c.Coursewares.Remove(ctx, input) |
| PHP | $c->coursewares->remove($input) |
HTTP 字段:CoursewareIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareId | 是 | string | 课件 ID |
HTTP 返回字段见 DeleteResult (共享类型)。
coursewares.retry
重试课件转码。
POST /v1/coursewares/retry
| 语言 | 调用 |
|---|---|
| Node.js | c.coursewares.retry(input) |
| Python | c.coursewares.retry(**input) |
| Java | c.coursewares.retry(input) |
| Go | c.Coursewares.Retry(ctx, input) |
| PHP | $c->coursewares->retry($input) |
HTTP 字段:CoursewareIdInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
coursewareId | 是 | string | 课件 ID |
HTTP 返回字段见 CoursewareRecord (共享类型)。
liveVideos.list
直播素材列表。
GET /v1/live-videos
| 语言 | 调用 |
|---|---|
| Node.js | c.liveVideos.list(input) |
| Python | c.live_videos.list(**input) |
| Java | c.liveVideos.list(input) |
| Go | c.LiveVideos.List(ctx, input) |
| PHP | $c->liveVideos->list($input) |
HTTP 字段:PaginationInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
page | 否 | number | undefined | 页码,从 1 开始 |
pageSize | 否 | number | undefined | 单页数量 |
HTTP 返回字段见 ListLiveVideosResult (共享类型)。
liveVideos.createUploadUrl
直播视频上传地址。
POST /v1/live-videos/upload-url
| 语言 | 调用 |
|---|---|
| Node.js | c.liveVideos.createUploadUrl(input) |
| Python | c.live_videos.create_upload_url(**input) |
| Java | c.liveVideos.createUploadUrl(input) |
| Go | c.LiveVideos.CreateUploadUrl(ctx, input) |
| PHP | $c->liveVideos->createUploadUrl($input) |
HTTP 字段:LiveVideoUploadInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
fileName | 是 | string | 文件名,含扩展名 |
contentType | 否 | string | undefined | 文件 MIME 类型 |
HTTP 返回字段见 LiveVideoUploadResult (共享类型)。
liveVideos.create
创建直播素材。
POST /v1/live-videos
| 语言 | 调用 |
|---|---|
| Node.js | c.liveVideos.create(input) |
| Python | c.live_videos.create(**input) |
| Java | c.liveVideos.create(input) |
| Go | c.LiveVideos.Create(ctx, input) |
| PHP | $c->liveVideos->create($input) |
HTTP 字段:CreateLiveVideoInput。使用 JSON Body。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
title | 是 | string | 视频素材标题 |
objectKey | 是 | string | 上传接口返回的对象键 |
contentHash | 否 | string | undefined | 文件内容 SHA-256,小写十六进制;课件要求 64 字符 |
sizeBytes | 否 | number | undefined | 文件字节数 |
HTTP 返回字段见 LiveVideoRecord (共享类型)。
liveVideos.remove
删除直播素材。
DELETE /v1/live-videos/remove
| 语言 | 调用 |
|---|---|
| Node.js | c.liveVideos.remove(input) |
| Python | c.live_videos.remove(**input) |
| Java | c.liveVideos.remove(input) |
| Go | c.LiveVideos.Remove(ctx, input) |
| PHP | $c->liveVideos->remove($input) |
HTTP 字段:LiveVideoIdInput。使用 URL 查询参数。
| 字段 | 必填 | 类型 | 说明 |
|---|---|---|---|
liveVideoId | 是 | string | 直播视频素材 ID |
HTTP 返回字段见 DeleteResult (共享类型)。