文档说明

VCaaS Open API 简介

VCaaS Open API 是由 HiLink 公司自主研发的,供第三方机构使用的公共接口服务。在 VCaaS Open API 的帮助下,第三方可以快速集成 VCaaS 的虚拟教室。在 VCaaS 的虚拟教室中,用户可以尽情体验包括实时音视频通信、聊天、屏幕分享、文档演示、白板、奖励等功能。

VCaaS 会议接口

VCaaS 会议接口是用于操作会议相关功能的一组接口。用户可以使用 VCaaS 会议接口,创建、结束、删除会议、关联会议与文件、查询会议录像、查询会议数据。

VCaaS 文件接口

VCaaS 文件接口是用于操作文件相关功能的一组接口。用户可以使用 VCaaS 文件接口,获取文件上传地址、查询文档、删除文档。

发版说明

序号版本更新时间更新内容
1VCaaS API Documentation V1.0.02023-03-31VCaaS API Documentation V1.0.0 发布
2VCaaS API Documentation V1.0.12023-08-03VCaaS 会议新增一些配置项
3VCaaS API Documentation V1.0.22023-09-20添加会议区域参数和教室内邀请链接
4VCaaS API Documentation V2.0.02023-11-22新增了新的文件夹和文档版本2的端点
5VCaaS API Documentation V2.0.12023-12-20添加了与录音和用户界面相关的教室配置项
6VCaaS API Documentation V2.0.22024-01-09添加了教案API *测试版
7VCaaS API Documentation V2.0.32024-01-16添加了 Webhooks 和回调
8VCaaS API Documentation V2.1.02024-01-22添加了 VCaaS 会议API v2接口
9VCaaS API Documentation V2.1.12024-02-13添加了嵌入 VCaaS
10VCaaS API Documentation V2.2.02024-02-29添加了预设 Quiz 接口
11VCaaS API Documentation V2.2.12024-03-22添加了会议开始/停止录制事件的 Webhooks 和回调
12VCaaS API Documentation V2.2.22024-03-26iframe嵌套模式添加了postmessage推送会议音视频数据
13VCaaS API Documentation V2.2.32024-04-09添加了查询会议聊天接口
14VCaaS API Documentation V2.2.42024-04-18添加了查询会议录像 V2 接口及课后评价数据
15VCaaS API Documentation V2.3.02024-05-171. 新增生成AI教案API。
2. 新增删除录像API。
3. 新增VCaaS教案API。
4. 将创建会议 API 中的“lessonPlanUuids”重命名为“lessonPlanIds”。
16VCaaS API Documentation V2.3.12024-06-121. 会议配置新增 enableBrowserUpdatePrompt 参数。
2. 添加了老师点击 End class for all 事件的 Webhooks 和回调。
17VCaaS API Documentation V2.3.22024-06-251. 会议配置新增 enableStudentSendChatFile 参数。
18VCaaS API Documentation V2.3.32024-07-091. 会议配置新增 enableTeacherOnboarding 参数。
2. 会议配置新增 defaultView 参数。
3. 用户进出教室 Webhooks,新增进入等待室类型。
19VCaaS API Documentation V2.3.42024-08-141. 添加更新会议 V2 接口
20VCaaS API Documentation V2.3.52024-08-231. 更新AI Service域名
21VCaaS API Documentation V2.3.62024-09-301. 创建、更新会议V2接口增加 knowledgeBaseUrl 参数

获取开发者账号

开发者账号概述

在使用 VCaaS Open API 时,需要您在 每个请求的header中传入Authorization信息,用于鉴别 API 调用者的身份。Authorization 是由 VCaaS 提供的 AccessKeySecretKey 加密生成。 因此,若您想体验 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));
        }

    }
}
Last Updated: