灵动课堂提供了多种服务端对服务端 RESTful API(包括但不限于房间管理、用户管理、事件同步、扩展组件等),供开发者灵活扩展课堂功能及与自身业务系统的快速对接,大幅降低开发门槛,轻松实现复杂应用逻辑,为企业、学校提供高稳定高性价比的线上互动课堂服务。
公共参数是用于标识用户 App ID 和接口签名的参数和请求区域,如非必要,在每个接口单独的文档中不再对这些参数进行说明,但每次请求均需要携带这些参数,才能正常发起请求。
所有请求都发送给域名:api.agora.io。
为保障 REST 服务的高可用,避免因区域网络故障造成的服务不可用,声网提供切换域名的方案,详情请参考切换域名。
所有请求的 Content-Type 类型为 application/json。
在使用灵动课堂 RESTful API 前,你需要通过 HTTP Token 认证。
灵动课堂同时支持 AccessToken2(推荐)和 AccessToken(兼容)两种方式,你可以选择任意一种。本文的示例请求都使用 AccessToken2。
如果你使用的是 AccessToken2,那么你需要在 HTTP 请求中 header 的 Authorization: agora token=
字段填入服务端生成的 Token。
如何生成 Token 并且在服务端使用 Token 鉴权,详见使用 Token 鉴权。
如果你使用的是 AccessToken,那么你需要在发送 HTTP 请求时在 HTTP 请求中 header 的 x-agora-token
字段和 x-agora-uid
字段分别填入:
如何生成 RTM Token 并且在服务端使用 RTM Token 鉴权,详见AccessToken 升级指南 文档。
灵动课堂 RESTful API 所有接口 region
字段的可选值如下表所示。如果有接口不支持该表中的所有区域,则会在该接口文档中单独说明。
取值 | 区域 |
---|---|
cn |
中国大陆 |
ap |
亚太 |
na |
北美 |
eu |
欧洲 |
参数 | 类型 | 描述 |
---|---|---|
appId |
String | 声网 App ID,详见获取 App ID。 |
roomUuid |
String | 课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 时所使用的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符):
|
userUuid |
String | 用户 uuid。这是用户的唯一标识符,也是登录 RTM 系统时所使用的用户 ID。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符):
|
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码:
|
msg |
String | 接口响应文字信息。 |
ts |
Number | 当前服务端的 Unix 时间戳,UTC 时间,单位为毫秒。 |
data |
Object | 返回数据,部分接口的该字段有值,详见单个接口的说明。 |
当接口请求成功时,所有接口响应的 HTTP 状态码均为 200
。
"status": 200,
"body":
{
"code": 0,
"msg": "Success",
"ts": 1610450153520
}
若为客户端错误,HTTP 状态码(status
字段)为 40x
。
"status": 404,
"body":
{
"code": 20404100,
"msg": "Room not exists!",
"ts": 1610450153520
}
若为服务端错误,HTTP 状态码(status
字段)为 50x
。
"status": 500,
"body":
{
"msg": "Internal Server Error",
"code": 500,
"ts": 1610167740309
}
课堂创建后,默认保留 5 天。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
请求包体参数
参数 | 类型 | 非必填 | 描述 |
---|---|---|---|
roomType |
String | 必填 | 房间类型,可设为:
该字段不可更新。 |
roomName |
String | 必填 | 房间名称,用于用户显示目的。最长不可超过 64 字节。 |
roomProperties |
Object | 非必填 | 房间属性。 |
roomProperties.schedule |
Object | 非必填 | 课程计划,包含开始时间,持续时长,拖堂时长等属性。 |
roomProperties.schedule.startTime |
Integer | 非必填 | 课堂开始时间戳,单位为毫秒。该字段不可更新。 |
roomProperties.schedule.duration |
Integer | 非必填 | 课堂持续时长,单位为秒。如果你设置了课堂持续时长和拖堂时长,当开启录制时,会按照二者之和向上取整设置最长录制时间 maxRecordingHour 参数。详见设置录制状态的 maxRecordingHour 参数说明。 |
roomProperties.schedule.closeDelay |
Integer | 非必填 | 拖堂时长,单位为秒。当课堂持续时长结束后,课程会进入“结束”状态(state = 2),此时用户仍可以正常进入和逗留在教室。当拖堂时间结束时,课堂会进入“关闭”状态(state = 3),并踢出所有用户。 |
roomProperties.processes |
Object | 非必填 | 申请邀请流程,包含举手等功能。 |
roomProperties.processes.handsUp |
Object | 非必填 | 上台设置,包含上台人数上限等。 |
roomProperties.processes.handsUp.maxAccept |
Integer | 非必填 | 上台人数上限。 |
curl -X POST 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"roomName": "test_class",
"roomType": 4,
"roomProperties": {
"schedule": {
"startTime": 1655452800000,
"duration": 600,
"closeDelay": 300
},
"processes": {
"handsUp": {
"maxAccept": 10
}
}
}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
返回房间对象所有信息。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
curl -X GET 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
data |
Object | 返回数据,为公共响应参数。包含以下数据:
|
{
"msg": "Success",
"code": 0,
"ts": 1684231543281,
"data": {
"roomName": "jasoncai's Room",
"roomUuid": "3579768dd1e1eec8522d3ed76992afd04",
"scenario": "education",
"roleConfig": {
...
},
"roomProperties": {
"reward": {
...
},
"processes": {
"handsUp": {
...
},
"openCamera": {
...
},
"remoteControl": {
...
},
"waveArm": {
...
}
},
"im": {
"huanxin": {
...
}
},
"screen": {
...
},
"groups": {
...
},
"carousel": {
...
},
"widgets": {
"netlessBoard": {
"extra": {
...
},
"state": 1
},
"easemobIM": {
"extra": {
...
}
}
},
"schedule": {
"closeDelay": 600,
"duration": 1800
},
"webhookConfig": {
...
},
"record": {
...
},
"state": 0,
"board": {
"info": {
...
}
},
"roomType": 4
},
"roomTemplate": "edu_medium_v1",
"muteChat": {},
"muteVideo": {},
"muteAudio": {},
"state": 0,
"checkState": false,
"createTime": 1683884683422
}
}
设置课堂状态。课堂状态可以设置为以下值:
0
: 未开始。1
: 开始。2
: 结束。课堂时间结束,但在拖堂时间内,用户可以加入课堂和在课堂内逗留。3
: 关闭。拖堂时间结束,课堂关闭,所有用户被踢出并无法再进入。URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
state |
Integer | 必填 | 课堂状态,可以设置为以下值:
|
curl -X PUT 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/states/1' \
-H 'Authorization: agora token={educationToken}' \
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
"status": 200,
"body":
{
"code": 0,
"msg": "Success",
"ts": 1610450153520
}
新增或更新指定课堂的自定义属性。
你可以结合自身的业务需求,设置任意课堂自定义属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。详见如何设置自定义用户属性和课堂属性?
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties |
Object | 必填 | 本次设置的课堂自定义属性。 |
cause |
Object | 非必填 | 本次设置原因。 |
curl -X PUT 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/properties' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": {
"key1": "value1",
"key2": "value2"
},
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
删除指定课堂的自定义属性。
你可以删除任意课堂自定义属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。详见如何设置自定义用户属性和课堂属性?
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties |
String[] | 必填 | 本次删除的课堂自定义属性对应的 key。 |
cause |
Object | 非必填 | 本次删除原因。 |
curl -X DELETE 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/properties' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": ["key1", "key2"],
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
开启或关闭课堂分组讨论功能。
URL 参数
参数 | 类型 | 描述 |
---|---|---|
region |
String | (必填)区域。可设为:
|
appId |
String | (必填)声网 App ID。 |
roomUUid |
String | (必填)课堂 uuid。这是课堂的唯一标识符,也是加入 RTC 和 RTM 的频道名。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符):
|
state |
Integer | (必填)是否开启分组讨论:
|
请求包体参数
开启分组讨论时需要在请求包体中传入以下参数;关闭分组讨论时不需要传任何参数。
参数 | 类型 | 描述 |
---|---|---|
groups |
Array | (必填)待创建的分组列表。包含:
|
curl -X PUT 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/states/1' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"groups":[
{
"groupUuid": "group1",
"groupName":"Group 01",
"users":[{
"userUuid": "user1"
}]
}
]
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 业务状态码:
|
msg |
String | 详细信息。 |
ts |
Number | 当前服务端的 Unix 时间戳(毫秒),UTC 时间。 |
{
"msg": "Success",
"code": 0,
"ts": 1672989034831
}
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
userUuid |
String | 必填 | 用户 uuid,为公共参数,详见其他业务参数 |
curl -X GET 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/users/test_user' \
-H 'Authorization: agora token={educationToken}' \
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
data |
Object | 返回数据,为公共响应参数。包含以下数据:
|
{
"msg":"Success",
"code":0,
"ts":1658126805245,
"data":{
"userName":"jasoncai",
"userUuid":"681d9aca4924e9a84ad301e8cca438a71",
"role":"1",
"userProperties":{},
"updateTime":1658126782174,
"streamUuid":"1417753684",
"state":1
}
}
新增或更新指定用户的自定义属性。
你可以对用户设置任意用户自定义属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。详见如何设置自定义用户属性和课堂属性?
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
userUuid |
String | 必填 | 用户 uuid,为公共参数,详见其他业务参数 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties |
Object | 必填 | 本次设置的用户自定义属性。 |
cause |
Object | 非必填 | 本次设置的原因。 |
curl -X PUT 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/users/test_user/properties' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": {
"key1": "value1",
"key2": "value2"
},
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
删除指定用户的用户自定义属性。
你可以删除用户的任意属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。详见如何设置自定义用户属性和课堂属性?
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
userUuid |
String | 必填 | 用户 uuid,为公共参数,详见其他业务参数 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties |
String[] | 必填 | 本次删除的用户自定义属性对应的 key。 |
cause |
Object | 非必填 | 本次删除的原因。 |
curl -X DELETE 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/users/test_user/properties' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": ["key1", "key2"],
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
将指定用户从课堂中踢出。成功调用此接口后,服务端会触发一个用户进出课堂事件。你可通过该接口的 dirty
参数设置该用户后续是否还能再加入课堂。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
userUuid |
String | 必填 | 用户 uuid,为公共参数,详见其他业务参数 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
dirty |
Object | 非必填 | 用户踢人标记,包含以下字段:
|
curl -X POST 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/users/test_user/exit' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"dirty": {
"state": 1,
"duration": 600
}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
开始或结束录制指定课堂。详见课堂录制最佳实践。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
state |
Integer | 必填 | 录制状态:
|
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
mode |
String | 非必填 | 录制模式: |
webRecordConfig |
Object | 非必填 | 页面录制配置。当 mode 设为 web 时,你需要通过该参数设置页面录制的详细信息,包含以下字段:
|
retryTimeout |
Number | 非必填 | 重试超时时间,单位为秒。灵动课堂RESTful API最多重试两次。设置 retryTimeout 参数后,声网建议你参考课堂录制最佳实践进行操作。 |
curl -X PUT 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/records/states/1' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"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}",
"rootUrl": "https://xxx.yyy.zzz",
"publishRtmp": "true"
},
"retryTimeout": 60
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
data |
Object | 返回数据,为公共响应参数。包含以下数据:
|
"status": 200,
"body":
{
"code": 0,
"ts": 1610450153520,
"streamingUrl": {
"rtmp": "",
"flv": "",
"hls": ""
}
}
在录制过程中随时调用此接口更新录制相关设置。每次调用此接口都会覆盖原先的设置。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
webRecordConfig |
Object | 非必填 | 页面录制设置,包含 onhold 属性,必填,Boolean 类型,可设为:
|
curl -X PATCH 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/records/states/1' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"webRecordConfig": {
"onhold": false
}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
"status": 200,
"body":
{
"code": 0,
"ts": 1610450153520
}
查询指定课堂内的录制列表。每次开启录制会生成一条记录,你可以通过查询录制列表接口的 nextId
参数分批拉取,每批最多拉取 100 条数据。
recordDetails.url
参数中返回。recordDetails.url
参数中返回。URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
Query 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
nextId |
String | 非必填 | 下一批数据的起始 ID。第一次查询可传 null,后续查询传入响应结果里得到的 nextId 的值继续查询。 |
curl -X GET 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/records' \
-H 'Authorization: agora token={educationToken}' \
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
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
}
}
删除指定 Widget。
灵动课堂会将这个变化同步到所有端,以此来实现你自己的扩展业务。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
widgetUuid |
String | 必填 | Widget uuid。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): <>ul |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
cause |
Object | 非必填 | 本次删除原因。 |
curl -X DELETE 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/test_widget' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
设置指定 Widget 的房间属性。
你可以对 Widget 设置任意房间属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。详见如何设置自定义用户属性和课堂属性?。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
widgetUuid |
String | 必填 | Widget uuid。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符):
|
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
extra |
Object | 非必填 | Widget 属性。 |
cause |
Object | 非必填 | 更新原因。 |
state |
Integer | 非必填 | Widget 的活跃状态:
|
ownerUserUuid |
String | 非必填 | Widget 所属用户。如果填写了该参数,在 widget 索书用户离线后,widget 会被自动删除。 |
curl -X PUT 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/test_widget' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": {
"key1": "value1",
"key2": "value2"
},
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
删除指定 Widget 的属性。
你可以删除任意 Widget 属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。设置方式同课堂属性和用户属性,详见如何设置自定义用户属性和课堂属性?
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
widgetUuid |
String | 必填 | Widget uuid。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符):
|
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties |
String [] | 必填 | 需删除的 widget 属性数组,即 extra 字段的值。 |
cause |
Object | 非必填 | 删除原因。 |
curl -X DELETE 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/test_widget/extra' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": ["key-path1", "key-path2"],
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
设置指定 Widget 的用户属性。
你可以对 widget 设置用户属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。设置方式同课堂属性和用户属性,详见如何设置自定义用户属性和课堂属性?
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
widgetUuid |
String | 必填 | Widget uuid。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符): |
userUuid |
String | 必填 | 用户 uuid,为公共参数,详见其他业务参数 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties |
Object | 必填 | 需设置的 Widget 用户属性。 |
cause |
Object | 非必填 | 更新原因。 |
curl -X PUT 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/test_widget/users/test_user' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": {
"key1": "value1",
"key2": "value2"
},
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
删除指定 Widget 的用户属性。
你可以删除 widget 的用户属性,灵动课堂会将这个属性的变更同步到所有端,以此来实现你自己的扩展业务。设置方式同课堂属性和用户属性,详见如何设置自定义用户属性和课堂属性?
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
widgetUuid |
String | 必填 | Widget uuid。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符):
|
userUuid |
String | 必填 | 用户 uuid,为公共参数,详见其他业务参数 |
请求包体参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
properties |
String [] | 必填 | 需删除的 Widget 用户属性。 |
cause |
Object | 非必填 | 删除原因。 |
curl -X DELETE 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/test_widget/users/test_user' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: agora token={educationToken}' \
--data-raw '{
"properties": ["key1","key2"],
"cause": {}
}'
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
{
"msg": "Success",
"code": 0,
"ts": 1610167740309
}
在服务端查询指定 App ID 下所有课堂中发生的事件。
你可定时轮询该接口来监听灵动课堂中发生的事件。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
curl -X GET 'https://api.agora.io/{region}/edu/polling/apps/{yourAppId}/v2/rooms/sequences' \
-H 'Authorization: agora token={educationToken}' \
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
data |
Object | 返回数据,为公共响应参数 。包含以下数据: |
"status": 200,
"body":
{
"msg": "Success",
"code": 0,
"ts": 1610167740309,
"data":[
{
"roomUuid": "xxxxxx",
"cmd": 20,
"sequence": 1,
"version": 1,
"data":{}
}
]
}
查询指定课堂内指定类型的事件。
你可以通过 nextId
分批查询,每批最多查询 100 条数据。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
Query 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
nextId |
String | 非必填 | 下一批数据的起始 ID。第一次查询可传 null,后续查询传入响应结果里得到的 nextId 的值。 |
cmd |
Integer | 非必填 | 事件类型,详见事件枚举。 |
curl -X GET 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/sequences?cmd=20' \
-H 'Authorization: agora token={educationToken}' \
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
data |
Object | 返回数据,为公共响应参数。包含以下数据:
|
{
"msg": "Success",
"code": 0,
"ts": 1610433913533,
"data": {
"total": 1,
"list": [
{
"roomUuid": "",
"cmd": 20,
"sequence": 1,
"version": 1,
"data": {}
}
],
"nextId": null,
"count": 1
}
}
查询指定课堂内指定 Widget 的相关事件。
你可以通过 nextId
分批查询,每批最多查询 100 条数据。
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
widgetUuid |
String | 必填 | Widget uuid。长度在 64 字节以内。以下为支持的字符集范围(共 89 个字符):
|
Query 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
nextId |
String | 非必填 | 下一批数据的起始 ID。第一次查询可传 null,后续查询传入响应结果里得到的 nextId 的值。 |
curl -X GET 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/test_widget/sequences' \
-H 'Authorization: agora token={educationToken}' \
参数 | 类型 | 描述 |
---|---|---|
code |
Integer | 响应状态码,详见公共响应参数。 |
msg |
String | 接口响应文字信息,详见公共响应参数。 |
ts |
Number | 当前服务端的 Unix 时间戳,详见公共响应参数。 |
data |
Object | 返回数据,为公共响应参数 。包含以下数据:
|
{
"msg": "Success",
"code": 0,
"ts": 1610433913533,
"data": {
"total": 1,
"list": [
{
"roomUuid": "",
"cmd": 1110,
"sequence": 1,
"version": 1,
"data": {
"action": 1,
"widgetUuid": "test_widget",
"changeProperties": {
"extra": {},
"state": 1
}
},
"fromUser": {
"userUuid": "userUuid1",
"userName": "userName1",
"role": 1
},
"operator": {
"userUuid": "userUuid1",
"userName": "userName1",
"role": 1
}
}
],
"nextId": null,
"count": 1
}
}
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
Query 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
nextId |
String | 非必填 | 下一批数据的起始 ID。第一次查询可传 null,后续查询传入响应结果里得到的 nextId 的值。 |
count |
Integer | 非必填 | 本批数据条数,默认值为 100。 |
curl -X GET 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/popupQuiz/sequences' \
-H 'Authorization: agora token={educationToken}' \
不同情况下 data
中返回的字段不同,具体如下:
老师开启答题后,答题器的汇总数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.extra | Object | 属性补充信息 |
changeProperties.extra.correctItems | Object[] | 正确选项 |
changeProperties.extra.correctCount | Integer | 本题答对人数 |
changeProperties.extra.answerState | Integer | 本次答题状态:
|
changeProperties.extra.receiveQuestionTime | Long | 收到题目时间 |
changeProperties.extra.popupQuizId | String | 题目 ID |
changeProperties.extra.averageAccuracy | Float | 本题正确率 |
changeProperties.extra.totalCount | Integer | 本题回答总人数 |
changeProperties.extra.items | Object[] | 本题的所有选项 |
changeProperties.state | Integer | 答题器状态:
|
cause | Object | 属性变更原由。 |
cause.popQuizId | String | 答题器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 ID |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
学生提交答案后,该学生的答题数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.lastCommitTime | Long | 最后一次提交时间 |
changeProperties.popupQuizId | String | 题目 ID |
changeProperties.selectedItems | Object[] | 该学生提交的答案 |
changeProperties.isCorrect | Boolean | 该学生提交的答案是否正确 |
cause | Object | 属性变更原由。 |
cause.popQuizId | String | 答题器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 uuid |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
fromUser | Object | 发起本次答题的用户 |
fromUser.userUuid | String | 用户 ID |
fromUser.userName | String | 用户名称 |
fromUser.role | String | 用户角色 |
学生提交答案后,答题器的汇总数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.extra | Object | 属性补充信息 |
changeProperties.extra.selectedCount | Integer | 已经答题人数 |
changeProperties.extra.correctCount | Integer | 本题答对人数 |
changeProperties.extra.averageAccuracy | Float | 本题正确率 |
changeProperties.extra.totalCount | Integer | 本题回答总人数 |
cause | Object | 属性变更原由。 |
cause.popQuizId | String | 答题器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 ID |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
老师结束答题后,答题器的汇总数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.extra | Object | 属性补充信息 |
changeProperties.extra.selectedCount | Integer | 已经答题人数 |
changeProperties.extra.correctCount | Integer | 本题答对人数 |
changeProperties.extra.answerState | Integer | 本次答题状态:
|
changeProperties.extra.averageAccuracy | Float | 本题正确率 |
changeProperties.extra.totalCount | Integer | 本题回答总人数 |
cause | Object | 属性变更原由。 |
cause.popQuizId | String | 答题器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 uuid |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
老师开启答题后,答题器的汇总数据发生变化:
"action": NumberInt("1"),
"widgetUuid": "xxxxxxxxx",
"changeProperties": {
"extra.correctItems": [
"A",
"B",
"D"
],
"extra.totalCount": NumberInt("1"),
"extra.answerState": NumberInt("1"),
"state": NumberInt("1"),
"extra.popupQuizId": "ab5b183238a74d5a9c955dc87c6397e0",
"extra.averageAccuracy": 0,
"extra.correctCount": NumberInt("0"),
"extra.items": [
"A",
"C",
"B"
],
"extra.receiveQuestionTime": NumberLong("1652413962895")
},
"operator": {
"userName": "server",
"userUuid": "server",
"role": "server"
}
学生提交答案后,该学生的答题数据发生变化:
"action": NumberInt("1"),
"widgetUuid": "xxxxxxxxx",
"changeProperties": {
"selectedItems": [
"A",
"B",
"D"
],
"isCorrect": true,
"popupQuizId": "ab5b183238a74d5a9c955dc87c6397e0",
"lastCommitTime": NumberLong("1652413989997")
},
"fromUser": {
"userName": "yerongzhe2",
"userUuid": "yerongzhe22",
"role": "audience"
}
老师结束答题后,答题器的汇总数据发生变化:
"action": NumberInt("1"),
"widgetUuid": "xxxxxxxxx",
"changeProperties": {
"extra.totalCount": NumberInt("1"),
"extra.answerState": NumberInt("0"),
"extra.selectedCount": NumberInt("1"),
"extra.averageAccuracy": 1,
"extra.correctCount": NumberInt("1")
},
"operator": {
"userName": "server",
"userUuid": "server",
"role": "server"
}
URL 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
region |
String | 必填 | 服务区域,为公共参数,详见区域。 |
appId |
String | 必填 | 声网 App ID,为公共参数,详见其他业务参数。 |
roomUuid |
String | 必填 | 课堂 uuid,为公共参数,详见其他业务参数。 |
Query 参数
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
nextId |
String | 非必填 | 下一批数据的起始 ID。第一次查询可传 null,后续查询传入响应结果里得到的 nextId 。 |
count |
Integer | 非必填 | 本批数据条数,默认值为 100。 |
curl -X GET 'https://api.agora.io/{region}/edu/apps/{yourAppId}/v2/rooms/test_class/widgets/popupQuiz/sequences' \
-H 'Authorization: agora token={educationToken}' \
不同情况下 data
中返回的字段不同,具体如下:
老师开启投票后,投票器的汇总数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.extra | Object | 属性补充信息 |
changeProperties.extra.mode | Integer | 投票模式:
|
changeProperties.extra.pollingState | Integer | 本次投票状态:
|
changeProperties.extra.pollDetails | Map<String,Object> | 投票详情,key 为选项索引,从 0 开始。 |
changeProperties.extra.pollDetails.num | Integer | 选择该选项的人数 |
changeProperties.extra.pollDetails.percentage | Float | 选择该选项的人数所占百分比 |
changeProperties.extra.pollId | String | 本次投票 ID |
changeProperties.extra.pollItems | Object[] | 选项内容 |
changeProperties.state | Integer | 投票器状态:
|
cause | Object | 属性变更原由。 |
cause.pollId | String | 投票器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 ID |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
学生提交选项后,该学生的投票数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.extra | Object | 属性补充信息 |
changeProperties.extra.pollId | String | 本次投票 ID |
changeProperties.extra.selectIndex | Object[] | 该学生选择的选项的索引 |
cause | Object | 属性变更原由。 |
cause.pollId | String | 投票器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 ID |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
fromUser | Object | 发起本次投票的用户 |
fromUser.userUuid | String | 用户 ID |
fromUser.userName | String | 用户名称 |
fromUser.role | String | 用户角色 |
学生提交选项后,投票器的汇总数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.extra | Object | 属性补充信息 |
changeProperties.extra.pollDetails | Map<String,Object> | 投票详情,key 为选项索引,从 0 开始。 |
changeProperties.extra.pollDetails.num | Integer | 选择该选项的人数 |
changeProperties.extra.pollDetails.percentage | Float | 选择该选项的人数所占百分比 |
changeProperties.extra.pollId | String | 本次投票 ID |
cause | Object | 属性变更原由。 |
cause.pollId | String | 投票器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 ID |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
老师结束投票后,投票器的汇总数据会发生变化,data
中包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
action | Integer | 操作类型 |
widgetUuid | String | Widget ID |
changeProperties | Object | 发生变更的属性 |
changeProperties.extra | Object | 属性补充信息 |
changeProperties.extra.pollingState | Integer | 本次投票状态:
|
changeProperties.extra.pollDetails | Map<String,Object> | 投票详情,key 为选项索引,从 0 开始。 |
changeProperties.extra.pollDetails.num | Integer | 选择该选项的人数 |
changeProperties.extra.pollDetails.percentage | Float | 选择该选项的人数所占百分比 |
changeProperties.extra.pollId | String | 本次投票 ID |
cause | Object | 属性变更原由。 |
cause.pollId | String | 投票器 ID。 |
cause.action | Integer | 操作类型:
|
operator | Object | 操作人 |
operator.userUuid | String | 用户 ID |
operator.userName | String | 用户名称 |
operator.role | String | 用户角色 |
老师开启投票后,投票器的汇总数据发生变化:
"action": NumberInt("1"),
"widgetUuid": "xxxxxxxxx",
"changeProperties": {
"extra.pollId": "e556ce3df5cd4c23941b03bf54d29ba3",
"extra.pollState": NumberInt("1"),
"extra.pollItems": [
"aaa",
"bbb",
"ccc",
"ddd",
"eee"
],
"extra.mode": NumberInt("2"),
"state": NumberInt("1"),
"extra.pollDetails": {
"0": {
"num": NumberInt("0"),
"percentage": 0
},
"1": {
"num": NumberInt("0"),
"percentage": 0
},
"2": {
"num": NumberInt("0"),
"percentage": 0
},
"3": {
"num": NumberInt("0"),
"percentage": 0
},
"4": {
"num": NumberInt("0"),
"percentage": 0
}
}
},
"operator": {
"userName": "server",
"userUuid": "server",
"role": "server"
}
学生提交选项后,该学生的投票数据发生变化:
"action": NumberInt("1"),
"widgetUuid": "xxxxxxxxx",
"changeProperties": {
"pollId": "e556ce3df5cd4c23941b03bf54d29ba3",
"selectIndex": [
NumberInt("1"),
NumberInt("2"),
NumberInt("4")
]
},
"fromUser": {
"userName": "yerongzhe2",
"userUuid": "yerongzhe22",
"role": "audience"
},
"operator": {
"userName": "server",
"userUuid": "server",
"role": "server"
}
学生提交选项后,投票器的汇总数据发生变化:
"action": NumberInt("1"),
"widgetUuid": "xxxxxxxxx",
"changeProperties": {
"extra.pollId": "e556ce3df5cd4c23941b03bf54d29ba3",
"extra.pollDetails": {
"0": {
"num": NumberInt("0"),
"percentage": 0
},
"1": {
"num": NumberInt("1"),
"percentage": 1
},
"2": {
"num": NumberInt("1"),
"percentage": 1
},
"3": {
"num": NumberInt("0"),
"percentage": 0
},
"4": {
"num": NumberInt("1"),
"percentage": 1
}
}
},
"operator": {
"userName": "server",
"userUuid": "server",
"role": "server"
}
老师结束投票后,投票器的汇总数据会发生变化,data
中包含以下字段:
"action": NumberInt("1"),
"widgetUuid": "xxxxxxxxx",
"changeProperties": {
"extra.pollId": "e556ce3df5cd4c23941b03bf54d29ba3",
"extra.pollState": NumberInt("0"),
"extra.pollDetails": {
"0": {
"num": NumberInt("0"),
"percentage": 0
},
"1": {
"num": NumberInt("1"),
"percentage": 1
},
"2": {
"num": NumberInt("1"),
"percentage": 1
},
"3": {
"num": NumberInt("0"),
"percentage": 0
},
"4": {
"num": NumberInt("1"),
"percentage": 1
}
}
},
"operator": {
"userName": "server",
"userUuid": "server",
"role": "server"
}
HTTP 响应状态码 | 响应状态码 | 描述 |
---|---|---|
200 | 0 | 请求成功。 |
400 | 400 | 请求参数错误。 |
401 | N/A | 可能的原因:
|
403 | 30403200 | 课堂已禁言,无法发送聊天消息。 |
404 | N/A | 服务器无法找到请求的资源。 |
404 | 20404100 | 课堂不存在。 |
404 | 20404200 | 用户不存在。 |
410 | 30410100 | 课堂已结束。 |
409 | 30409410 | 录制状态冲突,录制未开始。 |
409 | 30409411 | 录制状态冲突,录制未结束。 |
400 | 30400412 | 参数 rootUrl 不能为空。 |
409 | 30409100 | 课程状态冲突,课程已开始。 |
409 | 30409101 | 课程状态冲突,课程已结束。 |
400 | 30400100 | 租户 ID 不能为空。 |
500 | 500 | 服务器内部错误,无法完成请求。 |
503 | N/A | 服务器内部错误,充当网关或代理的服务器未从远端服务器获取响应。 |