文档说明
VCaaS Open API 简介
VCaaS Open API 是由 HiLink 公司自主研发的,供第三方机构使用的公共接口服务。在 VCaaS Open API 的帮助下,第三方可以快速集成 VCaaS 的虚拟教室。在 VCaaS 的虚拟教室中,用户可以尽情体验包括实时音视频通信、聊天、屏幕分享、文档演示、白板、奖励等功能。
VCaaS 会议接口
VCaaS 会议接口是用于操作会议相关功能的一组接口。用户可以使用 VCaaS 会议接口,创建、结束、删除会议、关联会议与文件、查询会议录像、查询会议数据。
VCaaS 文件接口
VCaaS 文件接口是用于操作文件相关功能的一组接口。用户可以使用 VCaaS 文件接口,获取文件上传地址、查询文档、删除文档。
发版说明
序号 | 版本 | 更新时间 | 更新内容 |
---|---|---|---|
1 | VCaaS API Documentation V1.0.0 | 2023-03-31 | VCaaS API Documentation V1.0.0 发布 |
2 | VCaaS API Documentation V1.0.1 | 2023-08-03 | VCaaS 会议新增一些配置项 |
3 | VCaaS API Documentation V1.0.2 | 2023-09-20 | 添加会议区域参数和教室内邀请链接 |
4 | VCaaS API Documentation V2.0.0 | 2023-11-22 | 新增了新的文件夹和文档版本2的端点 |
5 | VCaaS API Documentation V2.0.1 | 2023-12-20 | 添加了与录音和用户界面相关的教室配置项 |
6 | VCaaS API Documentation V2.0.2 | 2024-01-09 | 添加了教案API *测试版 |
7 | VCaaS API Documentation V2.0.3 | 2024-01-16 | 添加了 Webhooks 和回调 |
8 | VCaaS API Documentation V2.1.0 | 2024-01-22 | 添加了 VCaaS 会议API v2接口 |
9 | VCaaS API Documentation V2.1.1 | 2024-02-13 | 添加了嵌入 VCaaS |
10 | VCaaS API Documentation V2.2.0 | 2024-02-29 | 添加了预设 Quiz 接口 |
11 | VCaaS API Documentation V2.2.1 | 2024-03-22 | 添加了会议开始/停止录制事件的 Webhooks 和回调 |
12 | VCaaS API Documentation V2.2.2 | 2024-03-26 | iframe嵌套模式添加了postmessage推送会议音视频数据 |
13 | VCaaS API Documentation V2.2.3 | 2024-04-09 | 添加了查询会议聊天接口 |
14 | VCaaS API Documentation V2.2.4 | 2024-04-18 | 添加了查询会议录像 V2 接口及课后评价数据 |
15 | VCaaS API Documentation V2.3.0 | 2024-05-17 | 1. 新增生成AI教案API。 2. 新增删除录像API。 3. 新增VCaaS教案API。 4. 将创建会议 API 中的“lessonPlanUuids”重命名为“lessonPlanIds”。 |
16 | VCaaS API Documentation V2.3.1 | 2024-06-12 | 1. 会议配置新增 enableBrowserUpdatePrompt 参数。 2. 添加了老师点击 End class for all 事件的 Webhooks 和回调。 |
17 | VCaaS API Documentation V2.3.2 | 2024-06-25 | 1. 会议配置新增 enableStudentSendChatFile 参数。 |
18 | VCaaS API Documentation V2.3.3 | 2024-07-09 | 1. 会议配置新增 enableTeacherOnboarding 参数。 2. 会议配置新增 defaultView 参数。 3. 用户进出教室 Webhooks,新增进入等待室类型。 |
19 | VCaaS API Documentation V2.3.4 | 2024-08-14 | 1. 添加更新会议 V2 接口 |
20 | VCaaS API Documentation V2.3.5 | 2024-08-23 | 1. 更新AI Service域名 |
21 | VCaaS API Documentation V2.3.6 | 2024-09-30 | 1. 创建、更新会议V2接口增加 knowledgeBaseUrl 参数 |
获取开发者账号
开发者账号概述
在使用 VCaaS Open API 时,需要您在 每个请求的header中传入Authorization信息,用于鉴别 API 调用者的身份。Authorization 是由 VCaaS 提供的 AccessKey
和 SecretKey
加密生成。 因此,若您想体验 VCaaS Open API 的强大功能,请与 HiLink 的管理员取得联系,我们将帮助您创建专门的测试账号。联系我们:hello@hilink.co 。
AccessKey 和 SecretKey 示例
- AccessKey:4mBmzWmNt9Dy5een
- SecretKey:ef8d8fec05064779b3e0243cdae744e8
如何生成 Authorization 及 Java 示例
package llc.hilink.platform.api;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.time.Instant;
import java.util.Base64;
/**
* 使用 AccessKey 和 SecretKey 生成 Authorization 示例
*/
public class BasicAuthorizationExample {
private static final String DOT = ".";
private static final String SEPARATOR = ":";
private static final String CHARSET = "UTF-8";
private static final String SHA_256 = "SHA-256";
private static final String HMAC_256 = "HmacSHA256";
private static final Base64.Encoder BASE64_ENCODER = Base64.getUrlEncoder();
public static void main(String[] args) throws Exception {
String accessKey = "4mBmzWmNt9Dy5een";
String secretKey = "ef8d8fec05064779b3e0243cdae744e8";
// 过期时间
long expireAt = Instant.now().plusSeconds(3000).toEpochMilli();
String authorization = new BasicAuthorization(accessKey, secretKey, expireAt).build();
authorization = String.format("%s %s", "Basic", authorization);
System.out.println(authorization);
}
private static String hmac256(String content, String secretKey) throws Exception {
SecretKeySpec secretKeySpec = new SecretKeySpec(new HexBinaryAdapter().unmarshal(secretKey), HMAC_256);
Mac mac = Mac.getInstance(secretKeySpec.getAlgorithm());
mac.init(secretKeySpec);
byte[] bytes = mac.doFinal(content.getBytes(CHARSET));
return new HexBinaryAdapter().marshal(bytes).toLowerCase();
}
private static String sha256(String input) throws Exception {
byte[] bytes = MessageDigest.getInstance(SHA_256).digest(input.getBytes(CHARSET));
return new HexBinaryAdapter().marshal(bytes).toLowerCase();
}
static class BasicAuthorization {
private final String accessKey;
private final String secretKey;
private long expireAt = 300L;
public BasicAuthorization(String accessKey, String secretKey) {
this.accessKey = accessKey;
this.secretKey = secretKey;
}
public BasicAuthorization(String accessKey, String secretKey, long expireAt) {
this.accessKey = accessKey;
this.secretKey = secretKey;
this.expireAt = expireAt;
}
public String build() throws Exception {
String access = accessKey + DOT + expireAt;
String secret = hmac256(access, sha256(secretKey));
return BASE64_ENCODER.encodeToString((access + SEPARATOR + secret).getBytes(StandardCharsets.UTF_8));
}
}
}