本文介绍灵动课堂云服务 RESTful API 的详细信息。
所有请求都发送给域名:api.agora.io。
所有请求的 Content-Type 类型为 application/json。
灵动课堂云服务 RESTful API 支持 Token 认证。你需要在发送 HTTP 请求时在 HTTP 请求头部的 x-agora-token
字段和 x-agora-uid
字段分别填入:
具体生成 RTM Token 的方法请参考生成 RTM Token 文档。
设置课堂状态(未开始/开始/结束)。课堂状态说明详见课堂状态管理文档。
URL 参数
需要在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
state |
Integer | (必填)课堂状态:0 : 未开始1 : 开始2 : 结束 |
// 设置 test_class 的课堂状态为开始
https://api.agora.io/edu/apps/{yourappId}/v2/rooms/test_class/states/1
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
"status": 200,
"body":
{
"code": 0,
"msg": "Success",
"ts": 1610450153520
}
将指定用户从课堂中踢出。成功调用此接口后,服务端会触发一个用户进出课堂事件。你可通过 dirty
参数设置该用户后续是否还能再加入课堂。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
userUuid |
String | (必填)用户 uuid。这是用户的唯一标识符,也是登录 RTM 系统时使用的用户 ID。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
dirty |
Object | (选填)用户的污点设置,包含以下字段:
|
请求 URL
// 将 ID 为 123 的用户从 test_class 里踢出
https://api.agora.io/edu/apps/{your_app_Id}/v2/rooms/test_class/users/123/exit
请求包体
{
"dirty": {
"state": 1,
"duration": 600
}
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
开始或结束录制指定课堂。
URL 参数
需要在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
state |
Integer | (必填)录制状态:0 : 结束1 : 开始 |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
mode |
String | (选填)录制模式:web ,则启用页面录制模式。录制生成 MP4 文件。此外,录制服务会在当前 MP4 文件时长超过 2 小时或大小超过 2 GB 时创建一个新的 MP4 文件。 |
webRecordConfig |
Object | (选填)当 mode 为 web 时,你需要通过 webRecordConfig 设置页面录制的详细信息,包含以下字段:
|
请求 URL
// 开始录制名称为 test_class 的课堂
https://api.agora.io/edu/apps/{yourappId}/v2/rooms/test_class/records/states/1
请求包体
{
"mode": "web",
"webRecordConfig": {
"url":"https://webdemo.agora.io/xxxxx/?userUuid={recorder_id}&roomUuid={room_id_to_be_recorded}&roleType=0&roomType=4&pretest=false&rtmToken={recorder_token}&language=en&appId={your_app_id}"
}
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
"status": 200,
"body":
{
"code": 0,
"ts": 1610450153520
}
获取指定课堂内的录制列表。
你可以通过 nextId
分批拉取,每批最多拉取 100 条数据。
URL 参数
需要在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
Query 参数
参数 | 类型 | 描述 |
---|---|---|
nextId |
String | (选填)下一批数据的起始 ID。第一次获取可传 null,后续获取传入响应结果里得到的 nextId 。 |
// 获取 test_class 里的录制列表
https://api.agora.io/edu/apps/{yourappId}/v2/rooms/test_class/records?nextId=xxx
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
data |
Object | 具体数据,包含:
|
"status": 200,
"body":
{
"code": 0,
"msg": "Success",
"ts": 1610450153520,
"data": {
"total": 17,
"list": [
{
"recordId": "xxxxxx",
"appId": "xxxxxx",
"roomUuid": "jason0",
"startTime": 1602648426497,
"endTime": 1602648430262,
"resourceId": "xxxxxx",
"sid": "xxxxxx",
"recordUid": "xxxxxx",
"boardId": "xxxxxx",
"boardToken": "xxxxxx",
"type": 2,
"status": 2,
"url": "scenario/recording/xxxxxx/xxxxxx/xxxxxx.m3u8",
"recordDetails":[
{
"url":"xxxx/xxxx.mp4"
}
]
},
{...},
],
"count": 17
}
在指定课堂内上传一个公共资源。课堂内的所有用户都可以看到该课堂的公共资源。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
resourceUuid |
String | (必填)资源 uuid。这是资源的唯一标识符。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
resourceName |
String | (必填)资源名称,用于显示,长度在 64 字节以内。 |
size |
Number | (必填)资源大小,单位为字节。 |
ext |
String | (必填)资源扩展名:
|
url |
String | (必填)资源的访问地址,例如 "https://xxx.com" 。 |
conversion |
Object | (选填)如果你想要将 PPT 等资源在课堂中的白板上展示,你需要设置 conversion 将资源转换成静态图片或动态 HTML。conversion 包含以下字段:
|
请求 URL
// 在 test_class 里上传一个 ID 为 class_file_1 的公共资源
https://api.agora.io/edu/apps/{your_app_Id}/v1/rooms/test_class/resources/class_file_1
请求包体
{
"resourceName": "class_file",
"size": 1024,
"ext":"ppt",
"url":"https://xxx.com",
"conversion": {
"type":"static",
"preview": false,
"scale": 1.2,
"outputFormat": ""
},
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
data |
Object 数组 | 由多个 Object 组成的数组。每个 Object 代表一个公共资源,包含以下字段:resourceUuid : String 型,资源 uuid。这是资源的唯一标识符。 resourceName : String 型,资源名称,用于显示。ext : String 型,资源扩展名。 size : Number 型,资源大小,单位为字节。 url : String 型,资源的访问地址。updateTime : Number 型,资源更新时间,Unix 时间戳(毫秒),UTC 时间。convert : Boolean 型,是否开启文件转换。 taskUuid : String 型,文件转换任务的 uuid。 taskToken : String 型,文件转换任务使用的 Token。 taskProgress : Object 型,文件转换任务进度,包含以下字段:
|
{
"msg":"Success",
"code":0,
"ts":1610433913533,
"data":{
"resourceUuid": "class_file_1",
"resourceName": "class_file",
"ext": "ppt",
"size": 1024,
"url": "https://xxx.com",
"updateTime": 0,
"convert": true,
"taskUuid":"",
"taskToken":"",
"taskProgress": {
"totalPageSize": 10,
"convertedPageSize": 3,
"convertedPercentage": 30,
"convertedFileList": [{
"name": 1,
"ppt":{
"width": 1024,
"height": 960,
"src": "xxxx://xxxx.xxx.xx/xxxx.xxx",
"preview": "xxxx://xxxx.xxx.xx/xxxx.xxx",
}
},{...}],
"currentStep": "Extracting"
}
}
}
删除指定课堂内的一个或多个公共资源。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
resourceUuids |
String 数组 | (必填)由资源 uuid 组成的数组。资源 uuid 是资源的唯一标识符。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求 URL
https://api.agora.io/edu/apps/{your_app_Id}/v1/rooms/test_class/resources
请求包体
{
"resourceUuids": ["uuid1","uuid2"]
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
{
"msg":"Success",
"code":0,
"ts":1610433913533
}
获取指定课堂内的所有公共资源。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求 URL
// 获取 test_class 里 ID 为 class_file_1 的公共资源
https://api.agora.io/edu/apps/{your_app_Id}/v1/rooms/test_class/resources
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
data |
Object 数组 | 由多个 Object 组成的数组。每个 Object 代表一个公共资源,包含以下字段:resourceUuid : String 型,资源 uuid。这是资源的唯一标识符。 resourceName : String 型,资源名称,用于显示。ext : String 型,资源扩展名。 size : Number 型,资源大小,单位为字节。 url : String 型,资源的访问地址。updateTime : Number 型,资源更新时间,Unix 时间戳(毫秒),UTC 时间。convert : Boolean 型,是否开启文件转换。 taskUuid : String 型,文件转换任务的 uuid。 taskToken : String 型,文件转换任务使用的 Token。 taskProgress : Object 型,文件转换任务进度,包含以下字段:
|
{
"msg":"Success",
"code":0,
"ts":1610433913533,
"data":[{
"resourceUuid": "",
"resourceName": "",
"ext": "",
"size": 0,
"url": "",
"updateTime": 0,
"convert": true,
"taskUuid":"",
"taskToken":"",
"taskProgress": {
"totalPageSize": 10,
"convertedPageSize": 3,
"convertedPercentage": 30,
"convertedFileList": [{
"name": 1,
"ppt":{
"width": 1024,
"height": 960,
"src": "xxxx://xxxx.xxx.xx/xxxx.xxx",
"preview": "xxxx://xxxx.xxx.xx/xxxx.xxx",
}
},{...}],
"currentStep": "Extracting"
}
}]
}
查询指定课堂内指定类型的事件。
你可以通过 nextId
分批查询,每批最多查询 100 条数据。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
Query 参数
参数 | 类型 | 描述 |
---|---|---|
nextId |
String | (选填)下一批数据的起始 ID。第一次获取可传 null,后续获取传入响应结果里得到的 nextId 。 |
cmd |
Integer | (选填)事件类型,详见事件枚举。 |
请求 URL
// 获取 test_class 里的课堂状态变更事件
https://api.agora.io/edu/apps/{appId}/v2/rooms/test_class/sequences?nextId=50&cmd=1
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码:0: 请求成功。非 0: 请求失败。 |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
data |
Object | 具体数据,包含:
|
{
"msg":"Success",
"code":0,
"ts":1610433913533,
"data":{
"total":1,
"list":[
{
"roomUuid": "",
"cmd": 20,
"sequence": 1,
"version": 1,
"data":{}
}
],
"nextId": null,
"count":1
}
}
在服务端获取指定 App ID 下所有课堂中发生的事件。
你可定时轮询该接口来监听灵动课堂中发生的事件。
URL 参数
需要在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
https://api.agora.io/edu/polling/apps/{yourappId}/v2/rooms/sequences
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
data |
Object | 具体数据,包含:roomUuid : String 型,课堂 uuid。cmd : Integer 型,事件类型。详见事件枚举。sequence : Integer 型。事件序号,是每个课堂内事件的唯一标识符,课堂内全局自增,用于确保事件的有序性。version : Integer 型,版本号。data : Object 型,事件的具体数据,取决于事件类型。详见事件枚举。 |
"status": 200,
"body":
{
"msg": "Success",
"code": 0,
"ts": 1610167740309,
"data":[
{
"roomUuid": "xxxxxx",
"cmd": 20,
"sequence": 1,
"version": 1,
"data":{}
}
]
}
新增或更新指定课堂的自定义属性。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
properties |
Object | 课堂属性。 |
cause |
Object | 更新原因。 |
请求包体
{
"properties" :{
"key1":"value1",
"key2":"value2"
},
"cause":{}
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
删除指定课堂的自定义属性。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
properties |
String 数组 | 课堂属性。 |
cause |
Object | 删除原因。 |
请求包体
{
"properties" :[
"key1",
"key2"
],
"cause":{}
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
新增或更新指定用户的自定义属性。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
userUuid |
String | (必填)用户 uuid。这是用户的唯一标识符,也是登录 RTM 系统时使用的用户 ID。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
properties |
Object | 用户属性。 |
cause |
Object | 更新原因。 |
请求包体
{
"properties" :{
"key1":"value1",
"key2":"value2"
},
"cause":{}
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
删除指定用户的自定义属性。
URL 参数
在 URL 中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
appId |
String | (必填)Agora App ID,详见获取 Agora App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
userUuid |
String | (必填)用户 uuid。这是用户的唯一标识符,也是登录 RTM 系统时使用的用户 ID。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
请求包体参数
在请求包体中传入以下参数。
参数 | 类型 | 描述 |
---|---|---|
properties |
String 数组 | 用户属性。 |
cause |
Object | 删除原因。 |
请求包体
{
"properties" :[
"key1",
"key2"
],
"cause":{}
}
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码: |
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
HTTP 响应状态码 | 业务状态码 | 描述 |
---|---|---|
200 | 0 | 请求成功。 |
400 | 400 | 请求的参数错误。 |
401 | N/A | 可能的原因:x-agora-uid 和 x-agora-token 错误或不匹配。 |
403 | 30403200 | 课堂已禁言,无法发送聊天消息。 |
404 | N/A | 服务器无法找到请求的资源。 |
404 | 20404100 | 课堂不存在。 |
404 | 20404200 | 用户不存在。 |
409 | 30409410 | 录制状态冲突,录制未开始。 |
409 | 30409411 | 录制状态冲突,录制未结束。 |
409 | 30409100 | 课程状态冲突,课程已开始。 |
409 | 30409101 | 课程状态冲突,课程已结束。 |
500 | 500 | 服务器内部错误,无法完成请求。 |
503 | N/A | 服务器内部错误。充当网关或代理的服务器未从远端服务器获取响应。 |