跳到主要内容

Node.js / TypeScript 服务端集成

安装​

Node.js 18+。下面使用 ES module JavaScript,可保存为 classroom.mjs,配置环境变量后运行 node classroom.mjs。

npm install @eduskit/server-sdk@0.1.5

创建课堂使用 durationMinutes,endsAt 由服务端计算。npm 0.1.5 的 CreateClassroomInput 仍声明 endsAt,本例使用 .mjs 传入服务端所需参数。TypeScript 项目需使用类型声明与服务端一致的 SDK 构建。

创建课堂并签发学生凭证​

先配置服务端环境变量。本例使用独立老师和学生账号,头像 URL 为示例值,实际接入时替换为可访问的资源。每次运行都会创建新课堂;originId 仅使用户注册幂等。

import { Eduskit, EduskitError } from '@eduskit/server-sdk';

function required(name) {
const value = process.env[name]?.trim();
if (!value) throw new Error(`Missing ${name}`);
return value;
}

export async function createDemoClassroom() {
const sdk = new Eduskit({
timeoutMs: 10_000,
client: {
baseUrl: required('EDU_SERVER_URL'),
appId: required('EDU_APP_ID'),
appKey: required('EDU_APP_KEY'),
appSecret: required('EDU_APP_SECRET'),
},
});
const teacher = await sdk.client.users.register({
originId: 'demo-teacher-001',
nickname: 'Teacher',
avatar: 'https://example.com/teacher.png',
});
const student = await sdk.client.users.register({
originId: 'demo-student-001',
nickname: 'Student',
avatar: 'https://example.com/student.png',
});
const classroom = await sdk.client.classrooms.create({
name: 'SDK integration',
startsAt: new Date(Date.now() + 15 * 60_000).toISOString(),
durationMinutes: 60,
teacherEduUserId: teacher.eduUserId,
studentEduUserIds: [student.eduUserId],
joinPolicy: 'invite_only',
});
const token = await sdk.client.auth.issueToken({
eduUserId: student.eduUserId,
originId: student.originId,
expiresIn: 3600,
});
return {
appId: token.appId,
classroomId: classroom.classroomId,
userId: student.eduUserId,
userToken: token.accessToken,
expiresAt: token.expiresAt,
};
}

try {
const entry = await createDemoClassroom();
console.log({ classroomId: entry.classroomId, userId: entry.userId });
} catch (error) {
if (error instanceof EduskitError) {
console.error({
code: error.errorCode,
status: error.status,
traceId: error.traceId,
source: error.source,
});
} else {
console.error(error instanceof Error ? error.message : 'Unexpected error');
}
process.exitCode = 1;
}

将返回的 userToken 通过业务进课接口交给已通过鉴权的学生。正式系统在排课时创建课堂,在用户进课时签发 Token。

调用约定​

sdk.client / sdk.whiteboardClient;异步方法返回 Promise。自定义 HTTP 可通过 fetch 注入。

成员、权限、课件及上下课方法见课堂 API。白板录制与转码见白板服务端集成。错误与排查说明 HTTP 失败、签名失败和重试边界。

应用业务与租户管理接口​

源码构建的 client 提供 50 个应用凭证 HTTP 路由,包含用户、课堂、课件库、直播素材与诊断。参数与返回结构见应用业务接口,完整流程见业务操作示例。独立的租户管理客户端 使用租户会话管理账号、应用、仪表盘和计费。新增方法需要对应版本的 server-api 与 SDK 源码构建;公开包 0.1.5 不包含这些新增方法。