产品文档 直播技术文档 直播服务端API接口

直播服务端API接口

概述

本文档为百家云直播服务端的API文档,用户可以通过文档中提供的API接口创建及管理直播间,导出直播数据信息等。 百家云API仅提供基础数据,客户须将数据同步到自己数据库(DB)后,通过自己的数据库(DB)来实现业务需求。

基本约定

常见基本约定以及平台术语见下表:

内容 约定
传输协议 HTTPS
提交方式 GET/POST
接口返回数据格式 json
字符编码 UTF8
接口域名 https://api.baijiayun.com/
partner_id 合作方身份的标识, 由百家云平台分配
partner_key 合作方密钥,由百家云分配,用于计算服务端API接口的签名,用户可以登录百家云网站后台获取。

说明:文档中的数字统一用int表示,即有符号的64位整数,取值范围是-2^63~2^63;

使用流程

合作方接入百家云开放平台有如下几个步骤:

  1. 注册开发者账号
    • 注册后可以登录百家云后台获取partner_idpartner_key
  2. 创建房间
    • 根据百家云提供的API接口创建房间
  3. 进入房间
    • 根据百家云提供的地址或接入百家云SDK进入教室

接口规范

公共请求参数:

参数 类型 示例 参数说明
partner_id int 123456 合作方账号ID
timestamp int 1505372499 unix时间戳,当前的秒数,10位长的数字(注:不是毫秒)
sign string e10adc3949ba59abbe56e057f20f883e 根据partner_key和请求参数计算的签名,32位的小写字母或数字

公共返回参数如下:

参数 类型 示例 参数说明
code int 1001 错误码,对应的错误原因参见错误码表
msg string 签名错误 错误原因描述
data json 返回的数据,出错时返回的data为null

签名规则

签名计算方式

直播服务端每个接口除了传递业务参数外,还有一个用于校验的sign参数。

sign的生成规则如下:

  • 将请求参数按key字典顺序(ASCII值大小)升序排序。
  • 将排好序的参数拼成 key1=value1&key2=value2&...&keyN=valueN
  • 将以上拼好的串后面再拼上 &partner_key=<partner_key> ,其中 <partner_key> 替换成具体值。
  • 对以上拼好的串算一个32位md5值(小写),即得到了签名。

注:

  • partner_key总是拼在字符串最后面,并不参与key的排序。
  • partner_key只是计算签名时需要,在发送请求时不需要发partner_key

例如,创建房间的接口需要以下参数:

partner_id=12345678
title=测试教室
start_time=1501575608
end_time=1501579208
type=2

partner_key=rLkIPaQjxSwRQmC/ITnHh8i2rifmmbFIVsYw03SSi24zAnkrAd0ZNb2rcTzI2avy7+AmNJDdLmzU89zKUAP3Xg==

以上参数排序后的顺序为:

end_time=1501579208
partner_id=12345678
start_time=1501575608
timestamp=1501572288
title=测试教室
type=2

按以上顺序拼接的字符串为:

end_time=1501579208&partner_id=12345678&start_time=1501575608&timestamp=1501572288&title=测试教室&type=2

再拼上partner_key后的字符串为:

end_time=1501579208&partner_id=12345678&start_time=1501575608&timestamp=1501572288&title=测试教室&type=2&partner_key=rLkIPaQjxSwRQmC/ITnHh8i2rifmmbFIVsYw03SSi24zAnkrAd0ZNb2rcTzI2avy7+AmNJDdLmzU89zKUAP3Xg==

最后算出来32位的小写的md5值为:

70d60aca82bedd5a10a64247c3d464b1

示例代码(php)

<?php

/**
 * 生成签名参数
 * 
 * @param array $params 请求的参数
 * @param string $partner_key 
 * @return string 生成的签名
 */
function getSign($params, $partner_key) {
    ksort($params);//将参数按key进行排序
    $str = '';
    foreach ($params as $k => $val) {
        $str .= "{$k}={$val}&"; //拼接成 key1=value1&key2=value2&...&keyN=valueN& 的形式
    }
    $str .= "partner_key=" . $partner_key; //结尾再拼上 partner_key=$partner_key
    $sign = md5($str); //计算md5值
    return $sign;
}

$params =  [
    "partner_id" => 12345678,
    "title" => "测试教室",
    "start_time" => 1501575608,
    "end_time" => 1501579208,
    "type" => 2,
    "timestamp" => 1501572288,
]

$partner_key = 'rLkIPaQjxSwRQmC/ITnHh8i2rifmmbFIVsYw03SSi24zAnkrAd0ZNb2rcTzI2avy7+AmNJDdLmzU89zKUAP3Xg==';
$sign = getSign($params, $partner_key);

API列表

API 1 : 获取/重置partner_key

【功能描述】

初始的partner_key和secret_key都可登录百家云后台获取。

此接口可用于重置partner_key。

【请求地址】

https://api.baijiayun.com/openapi/partner/createkey

【请求参数】

参数 类型 是否必填 默认值 参数说明
partner_id int 合作方账号ID
secret_key string 合作方用于更新partner_key的密钥(由开放平台提供给合作方)
regenerate int 0 为1时表示强制重新生成partner_key(默认情况下返回当前已经存在的partner_key
timestamp int 当前unix时间戳(秒)
sign string 签名

【返回参数】

参数 类型 示例 说明
partner_key string partner_key长度不超过128位

【请求示例】

curl -d "partner_id=12345678&secret_key=e10adc3949ba59abbe56e057f20f883e" https://api.baijiayun.com/openapi/partner/createkey

【返回示例】

{
      "code": 0,
      "data": {
          "partner_key": "rLkIPaQjxSwRQmC/ITnHh8i2rifmmbFIVsYw03SSi24zAnkrAd0ZNb2rcTzI2avy7+AmNJDdLmzU89zKUAP3Xg=="
      },
      "msg":""
}

API 2 : 创建房间

【功能描述】

创建房间

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/create

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
title string 直播课标题,不超过50个字符或汉字,超过部分将进行截取
start_time int 开课时间, unix时间戳(秒)
end_time int 下课时间, unix时间戳(秒)
type int 2 1:一对一课 2:普通大班课 3:小班课普通版 4:小班课专业版(需开通相关权限才可以创建) 默认为普通大班课
max_users int 0 房间最大人数, 不传或传0表示不限制。注:一对一是1人,互动小班课人数不能超过10人,普通大班课可以不设置人数上限
pre_enter_time int 1800 学生可提前进入的时间,单位为秒,默认为30分钟
is_long_term int 0 是否是长期房间,0:普通房间 1:长期房间 默认为普通房间(注:需要给账号开通长期房间权限才可以创建长期房间)
is_group_live int 0 是否是分组直播,0:常规直播 1:分组直播 默认为常规直播(注:需要给账号开通分组直播权限才可以创建分组直播,必须同时指定参数type为2)2:可切换大小班的分组直播(注:需要权限,参数type须为2)
template_name string 可选值:doubleCamera(双摄像头)、classic(经典模板)、triple(三分屏)、oneone(单视频模板)、oneoneNew(单视频模板2)、liveWall(视频墙)
speak_camera_turnon int 学生发言时是否自动开启摄像头 1:开启 2:不开启 默认会开启
teacher_need_detect_device int 老师是否启用设备检测 1:启用 2:不启用 默认不启用
student_need_detect_device int 学生是否启用设备检测 1:启用 2:不启用 默认不启用
forbidden_end_types string 指定屏蔽的端,可选值(web:pc浏览器, h5:手机浏览器)多种以英文逗号分隔
is_video_main int 指定PC端是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以ppt为主,该选项只针对三分屏有效)
m_is_video_main int 指定手机H5页面是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以视频为主)
timestamp int 当前unix时间戳(秒)
sign string 签名
is_mock_live int 0 是否是伪直播,0:否 1:是(注:需要给账号开通伪直播权限才可以创建伪直播,选择伪直播时,必须要选择mock_video_id或mock_room_id和mock_session_id)
is_push_live int 0 是否是推流直播,0:常规直播 1:推流直播 默认是常规直播(注:需要给账号开通推流直播的权限)
mock_room_id int 0 伪直播关联的回放教室号
mock_session_id int 0 伪直播关联的回放教室session_id(针对长期房间)
mock_video_id int 0 伪直播关联的点播视频ID

注意:

  1. 非长期房间,结束时间与开始时间间隔需大于15分钟并小于24小时,开始时间和结束时间范围必须在当前时间一年以内
  2. 小班课专业版,只支持PC客户端上课。默认的账号没有该权限,需要开通开通相关权限才可以创建

【返回参数】

参数 类型 示例 描述
room_id string 12345678901234 房间ID,14位的数字
admin_code string abdce2 管理员进入房间的参加码
teacher_code string 13rlkk 老师进入房间的参加码
student_code string abc213 学生公共参加码,该参加码可以进多个学生,不互踢

注意:

  1. 参加码是一种快速进入房间的形式,合作方把参加码发给用户,他们就可以通过参加码和昵称直接进入房间。
  2. 参加码为6位,由字母和数字组成。

【请求示例】

curl -d "end_time=1464343200&partner_id=123456789&start_time=1464314400&timestamp=1464313928&title=test&type=2&sign=e10adc3949ba59abbe56e057f20f883e" https://api.baijiayun.com/openapi/room/create

【返回示例】

{
    "code": 0,
    "data": {
        "room_id": "12345678901234",
        "admin_code": "213rjl",
        "teacher_code": "232kj1",
        "student_code": "abc213"
    },
    "msg":""
}

API 3 : 更新房间信息

【功能描述】

更新房间信息

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/update

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int 房间ID,14位
title string 房间标题
start_time int 开课时间, unix时间戳(秒)
end_time int 结束时间, unix时间戳(秒)
max_users int 房间最大人数
pre_enter_time int 学生可提前进入的时间,单位为秒
template_name string 可选值:doubleCamera(双摄像头)、classic(经典模板)、triple(三分屏)、oneone(单视频模板)、oneoneNew(单视频模板2)
forbidden_end_types string 指定屏蔽的端,可选值(web:pc浏览器, h5:手机浏览器)多种以英文逗号分隔
is_video_main int 指定PC端是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以ppt为主,该选项只针对三分屏有效)
m_is_video_main int 指定手机H5页面是否以视频为主 1:以视频为主 2:以PPT为主 (默认是以视频为主)
mock_room_id int 0 伪直播关联的回放教室号
mock_session_id int 0 伪直播关联的回放教室session_id(针对长期房间)
mock_video_id int 0 伪直播关联的点播视频ID
timestamp int 当前时间,unix时间戳(秒)
sign string 请求接口参数签名

【返回参数】

返回code为0时表示更新成功,返回code非0表示更新失败,失败原因在msg中返回。

【返回示例】

成功情况下:

{
    "code": 0,
    "data": null,
    "msg": ""
}

API 4 : 删除房间

【功能描述】

删除一个房间

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/delete

【接口参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int 房间id
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

返回code为0时表示删除成功,返回code非0表示删除失败,失败原因在msg中返回。

【返回示例】

{
    "code": 0,
    "data": null,
    "msg": ""
}

API 5 : 获取房间信息

【功能描述】

获取房间信息

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/info

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int 房间id
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
room_id int 12345612345699 房间id
title string 英语语法在线 直播课标题
start_time datetime 2017-08-18 14:00:00 开课时间,格式如:2017-08-18 14:00:00
end_time datetime 2017-08-18 15:00:00 结束时间,格式如:2017-08-18 14:00:00
type int 2 1:一对一课 2:班课
max_users int 0 直播间允许的最大人数
admin_code string abc123 管理员进入直播间的参加码
teacher_code string 123abc 老师进入直播间的参加码

【返回示例】

{
    "code": 0,
    "data": {
        "room_id": 17081862531088,
        "title": "长期课长期课",
        "start_time": "2017-08-18 14:10:00",
        "end_time": "2027-08-18 14:10:00",
        "type": "2",
        "max_users": "0",
        "admin_code": "u9vnnb",
        "teacher_code": "zyh5pa"
    },
    "msg": "",
    "ts": 1505382011
}

API 6 : 生成用户参加码

【功能描述】

为了方便学生进入房间,我们可以根据学生的user_number生成学生参加码。学生可以凭参加码直接进入房间。

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/getcode

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方ID
room_id int 房间ID
user_number int 合作方账号体系下的用户ID号,必须是数字
user_avatar string 用户头像,需要完整的url地址
timestamp int 当前时间, unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
student_code string 12ed45 学生参加码

说明:

  1. 参加码不会重复,长度为6位
  2. 一个学生参加码唯一对应了一个room_iduser_number
  3. user_number为0时,生成的是学生用户的通用邀请码,所有学生可使用该通用邀请码同时进入教室(免费课场景)。
  4. user_number非0时,同一个学生邀请码只支持一人同时在线(收费课场景)。后进教室的学员会将之前进的人挤下线。

【返回示例】

{
    "code": 0,
    "data": {
        "student_code": "abc123"
    },
    "msg":""
}

API 7 : 获取已生成的参加码列表

【功能描述】

获取已经生成的学生参加码列表

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/listcode

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方ID
room_id int 房间ID
page int 1 页数,参加码数量过多时,可以分多页来获取,每页取limit条。默认值为1
limit int 100 每页获取的条数,默认值100,最大值不能超过1000
timestamp int 当前时间, unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
total int 101 该房间总共的学生参加码数
student_code string 12ed45 学生参加码
user_number int 123456 参加码对应的用ID号
user_avatar string https://xxx.png 生成参加码时传的user_avatar

【返回示例】

{
    "code": 0,
    "data": {
        "total": 3,
        "list": [
            {
                "code": "kbvt9t",
                "user_number": "11",
                "user_avatar": ""
            },
            {
                "code": "xvxavp",
                "user_number": "10",
                "user_avatar": ""
            },
            {
                "code": "2crrly",
                "user_number": "0",
                "user_avatar": ""
            }
        ]
    },
    "msg": "
}

API 8 : 获取房间列表

【功能描述】

获取已经创建的房间列表

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/list

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方ID
page int 1 页数,参加码数量过多时,可以分多页来获取,每页取limit条。默认值为1
limit int 100 每页获取的条数,默认值100,最大值不能超过1000
timestamp int 当前时间, unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
room_id int 12345678901234 房间ID
title string 英语语法在线 直播课标题
start_time int 1460426400 开始时间, unix时间戳
end_time int 1460426400 结束时间, unix时间戳
create_time int 1460426400 创建时间, unix时间戳
type int 2 1:一对一课 2:普通大班课 3:小班课普通版 4:小班课专业版
max_users int 20 1:一对一课 2:班课
admin_code string abc123 管理员进入房间的参加码
teacher_code string 123abc 老师进入房间的参加码
student_code string 321abc 学生进入房间的参加码

【返回示例】

{
    "code": 0,
    "data": {
        "list": [
            {
                "room_id": "17091462522904",
                "title": "直播培训",
                "type": "2",
                "max_users": "1",
                "start_time": 1505361000,
                "end_time": 1505364600,
                "create_time": 1505360825,
                "teacher_code": "7782s9",
                "admin_code": "dkn3wd",
                "student_code": "hfaaqq"
            },
            {
                "room_id": "17091358328329",
                "title": "测试标题",
                "type": "2",
                "max_users": "1",
                "start_time": 1505291100,
                "end_time": 1505294700,
                "create_time": 1505290999,
                "teacher_code": "aca2qv",
                "admin_code": "j5e74u",
                "student_code": "bry9wk"
            }
        ]
    },
    "msg": "",
    "ts": 1505390707
}

API 9 : 直播课件文档上传

【功能描述】

上传图片或文档,可指定关联到某教室。支持的文档类型有: '.doc', '.ppt', '.pdf', '.pptx', '.docx','.jpg', '.jpeg', '.png', '.gif'

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/doc/uploadDoc

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号,如果传了教室号则文档自动绑定到该教室,不传则不绑定
ppt_animation int 0 是否使用动效PPT,只针对PPT有效
attachment 文件 要上传的文件(文件不参数签名的计算)
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
fid int 832417 文档ID
name string 文件名 上传的文档名
bind_id int 123 只有绑定到教室才会返回绑定ID

【返回示例】

{
    "code": 0,
    "data": {
        "fid": 832417,
        "name": "fb05686be68a856fac623f2669f5ef2f.jpeg",
        "bind_id": 123
    },
    "msg": "",
    "ts": 1487649903
}

【PHP代码示例】

<?php

$url = 'https://api.baijiayun.com/openapi/doc/uploadDoc';
$partner_key = 'xxx';
$data = [
    'partner_id' => 123456,
    'room_id' => 12345678912345,
    'timestamp' => 1502763925,
];

//计算签名,getSign函数参数`签名规则`,文件不参与签名的计算
$data['sign'] = getSign($data, $partner_key);
$data['attachment'] = curl_file_create('/tmp/a.docx')

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
$last_error = curl_error($ch);
curl_close($ch);

print_r($last_error);
print_r($info);
print_r($result);

API 10 : 关联文档到教室

【功能描述】

将指定文档关联到指定教室

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/doc/bindDoc

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
fid int 文档资源号
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
fid int 832417 文档ID
room_id string 16062437104161 教室号
bind_id int 123 绑定ID

【返回示例】

{
    "code": 0,
    "data": {
        "fid": 832417,
        "room_id": "16062437104161",
        "bind_id": 123
    },
    "msg": "",
    "ts": 1487649903
}

API 11 : 获取指定教室内已上传的文档列表

【功能描述】

获取教室内已上传的文档

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/doc/listDoc

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
fid int 1 文档ID
name string 文件名 上传的文档名

【返回示例】

{
    "code": 0,
    "data": {
        "room_id": "17022132908721",
        "list": [
            {
                "fid": 832416,
                "name": "fb05686be68a856fac623f2669f5ef2f.jpeg",
                "create_time": "2017-02-21 12:03:46"
            },
            {
                "fid": 832386,
                "name": "878488c7f153c5efccc9f0308a4baf89.jpg",
                "create_time": "2017-02-21 10:31:58"
            },
            {
                "fid": 832371,
                "name": "百家云API使用文档.pdf",
                "create_time": "2017-02-21 10:31:17"
            }
        ]
    },
    "msg": "",
    "ts": 1487656394
}

API 12 : 获取账号下上传的所有文档

【功能描述】

获取账号下已上传的所有文档

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/doc/listAllDoc

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
type string 可选值 all:所有文档 room:教室里上传的文件 api:从api接口上传的文档
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
fid int 1 文档ID
name string 文件名 上传的文档名
upload_source string 上传来源 api:通过API接口上传的 room:在教室里上传的
create_time datetime 上传时间

【返回示例】

{
    "code": 0,
    "data": {
        "total": 235,
        "list": [
            {
                "fid": "928445",
                "name": "测试文件.doc",
                "create_time": "2017-04-28 11:12:29",
                "upload_source": "room"
            }
        ]
    },
    "msg": "",
    "ts": 1493695441
}

API 13 : 移除教室内文档

【功能描述】

移除教室内已上传的文档

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/doc/removeDoc

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
fid int 文档ID
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

返回code=0表示删除成功

【返回示例】

{
    "code": 0,
    "data": {
        "fid": "832418"
    },
    "msg": "",
    "ts": 1487650268
}

API 14 : 获取直播教室当前上课状态

【功能描述】

获取直播教室当前的上下课状态

【请求类型】

POST/GET

【请求地址】

https://api.baijiayun.com/openapi/live/getLiveStatus

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
status int 0 1:上课中 0:不在上课中

【返回示例】

{
    "code": 0,
    "data": {
        "status": 1
    },
    "msg": "",
    "ts": 1488856764
}

API 15 : 获取老师是否在教室状态

【功能描述】

当前老师是否在教室的状态

【请求类型】

POST/GET

【请求地址】

https://api.baijiayun.com/openapi/live/getTeacherOnlineStatus

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
status int 0 1:在教室 0:不在教室

【返回示例】

{
    "code": 0,
    "data": {
        "status": 1
    },
    "msg": "",
    "ts": 1488856764
}

API 16 : 获取当前时间教室人数

【功能描述】

获取当前时间教室人数

【请求类型】

POST/GET

【请求地址】

https://api.baijiayun.com/openapi/live/getUserCount

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
user_count int 3 教室当前人数
display_user_count int 3 显示出来教室人数

【返回示例】

{
    "code": 0,
    "data": {
        "user_count": 2,
        "display_user_count": 2
    },
    "msg": "",
    "ts": 1489753512
}

API 17 : 导出教室聊天记录

【功能描述】

导出教室内的聊天记录。只能导出最近2周的直播的聊天记录。

【请求类型】

GET/POST

【请求地址】

https://api.baijiayun.com/openapi/room_data/exportChatMsg

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
date string 没传递时,长期教室是最近上课的一天,短期教室默认是这次课的所有聊天信息 导出日期
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
time string 2017-04-21 15:15:01 消息发送时间
user_number int 12345 用户ID
user_role int 1 用户角色 0:学生 1:老师 2:助教
user_name string 张三 用户昵称
content string hello world 消息类容

【返回示例】

{
    "code": 0,
    "data": {
        "list": [
            {
                "time": "2017-04-21 15:15:01",
                "user_number": 12345,
                "user_role": 1,
                "user_name": "张三",
                "content": "hello world"
            },
            {
                "time": "2017-04-21 15:15:39",
                "user_number": 123,
                "user_role": 0,
                "user_name": "李4",
                "content": "[wx]"
            },
            {
                "time": "2017-04-21 15:40:28",
                "user_number": 123,
                "user_role": 0,
                "user_name": "李4",
                "content": "aaa"
            }
        ]
    },
    "msg": "",
    "ts": 1492765634
}

API 18 : 设置教室公告

【功能描述】

设置教室公告

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/live/setNotify

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
content string 公告信息
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

code=0则表示设置成功,非0表示设置失败。

【返回示例】

{
    "code": 0,
    "data": null,
    "msg": "",
    "ts": 1489753512
}

API 19 : 导出直播教室学员观看记录

【功能描述】

导出直播间学员观看记录,该记录会有1小时的延时。

【请求地址】

https://api.baijiayun.com/openapi/room_data/exportLiveReport

【请求类型】

GET/POST

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方用户名
room_id int 教室号
type string student 可选值 all:所有用户 student:学员 teacher:老师 admin:助教,默认只导出学员观看记录
page int 1 分页参数
page_size int 0 每页返回条数,如果不传则返回所有的
date string 0 查询日期,格式如:2018-03-02
timestamp int 当前时间,unix时间戳
sign string 签名

【返回参数】

参数 类型 示例 描述
date string 日期
user_number int 用户的ID号
user_name string 昵称
user_role int 0:学生 1:老师 2:助教
first_time datetime 最早进入教室时间
last_time datetime 最晚离开教室时间
first_heartbeat_time datetime 上课状态下,最早在教室的时间
last_heartbeat_time datetime 上课状态下,最晚在教室的时间
actual_listen_time int 实际听课时长,指上课状态下,学生在教室的时间,多次进出教室情况是把每一小段时间累加(单位秒)
user_ip string 用户IP
area string 用户所属省份
city string 用户所属城市
network_operator string 使用的网络运营商
client_type int 0:PC网页 1:pc客户端 2:m站 3:ios 4:android 5:mac客户端 6:微信小程序

【返回示例】

{
    "code": 0,
    "data": {
        "total": 2,
        "room_user_info": [
            {
                "date": "2018-03-02",
                "user_number": 151134006392569,
                "user_name": "iOS",
                "user_role": 0,
                "first_time": "2017-11-23 11:47:09",
                "last_time": "2017-11-23 11:47:15",
                "first_heartbeat_time": "",
                "last_heartbeat_time": "",
                "actual_listen_time": 0,
                "user_ip": "61.50.136.186",
                "network_operator": "联通",
                "client_type": 3,
                "area": "北京",
                "city": "北京"
            },
            {
                "date": "2018-03-02",
                "user_number": 91170602,
                "user_name": "晨晨",
                "user_role": 1,
                "first_time": "2017-11-23 11:48:07",
                "last_time": "2017-11-23 13:35:42",
                "first_heartbeat_time": "",
                "last_heartbeat_time": "",
                "actual_listen_time": 0,
                "user_ip": "61.50.136.186",
                "network_operator": "联通",
                "client_type": 1,
                "area": "北京",
                "city": "北京"
            }
        ]
    },
    "msg": "",
    "ts": 1511427372
}

API 20 : 获取指定日期所有的直播间人次和最高并发量

【请求地址】

https://api.baijiayun.com/openapi/room_data/getAllRoomUserStat

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
date string 格式如:2017-11-23
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例/默认值 描述
room_id int 教室号
total_user_count int 总人次(包括学生、老师、助教)
student_count int 学生人次
peak_user int 峰值人数(包含老师和助教)

【响应示例】


{ "code": 0, "data": { "room_user_stat": { "17072641561616": { "room_id": 17072641561616, "student_count": 1, "total_user_count": 1, "peak_user": 1 }, "17112279047985": { "room_id": 17112279047985, "student_count": 2, "total_user_count": 2, "peak_user": 1 }, "17112374903200": { "room_id": 17112374903200, "student_count": 0, "total_user_count": 7, "peak_user": 3 } } }, "msg": "", "ts": 1511487411 }

API 21 : 获取指定房间一段时间内的并发量

【接口描述】

该接口用于获取一段时间内教室的并发人数变化图。由于数据量较大,本接口每10分钟取一个最大值。

如果:15:10:00 => 3 表示的是 15:10:00~15:19:59 这段时间内的最高并发数为3

【请求地址】

https://api.baijiayun.com/openapi/room_data/getRoomPeakUser

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int 教室号
start_time string 格式如:2017-11-23 10:00:00
end_time string 格式如:2017-11-23 15:00:00,查询时间范围不能跨天
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例/默认值 描述
date date 日期
peak_user dict key是时间,value是峰值人数。

【响应示例】

{
    "code": 0,
    "data": {
        "date": "2017-12-07",
        "peak_user": {
            "15:00:00": 3,
            "15:10:00": 3,
            "15:20:00": 1,
            "15:30:00": 1,
            "15:40:00": 1,
            "15:50:00": 1,
            "16:00:00": 1,
            "16:10:00": 1,
            "16:20:00": 1,
            "16:30:00": 1,
            "16:40:00": 1,
            "16:50:00": 1,
            "17:00:00": 1
        }
    },
    "msg": "",
    "ts": 1512718993
}

API 22 : 获取账号一天中每小时最高并发量

【接口描述】

该接口用于获取账号一天中每小时的并发量

【请求地址】

https://api.baijiayun.com/openapi/live_account/getHourPeakUser

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
date string 查询日期,格式如:2017-12-12
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例/默认值 描述
peak_user dict key是小时,value是峰值人数。

【响应示例】


{ "code": 0, "data": { "peak_user": { "00": 0, "01": 0, "02": 0, "03": 0, "04": 0, "05": 0, "06": 0, "07": 0, "08": 0, "09": 0, "10": 0, "11": 1, "12": 1, "13": 1, "14": 3, "15": 3, "16": 2, "17": 0, "18": 0, "19": 0, "20": 1, "21": 1, "22": 0, "23": 0 } }, "msg": "", "ts": 1514899076 }

API 23 : 查询账号一段时间内每天的最高并发量

【接口描述】

该接口用于获取账号一段时间内每天的最高并发量

【请求地址】

https://api.baijiayun.com/openapi/live_account/getDayPeakUser

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
start_date string 查询起始日期,格式如:2017-12-12
end_date string 查询结束日期,格式如:2017-12-28
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例/默认值 描述
peak_user dict key是日期,value是峰值人数。

【响应示例】

{
    "code": 0,
    "data": {
        "peak_user": {
            "2017-12-12": 3,
            "2017-12-13": 1,
            "2017-12-14": 0,
            "2017-12-15": 0,
            "2017-12-16": 0,
            "2017-12-17": 0,
            "2017-12-18": 0,
            "2017-12-19": 0,
            "2017-12-20": 0,
            "2017-12-21": 0,
            "2017-12-22": 1,
            "2017-12-23": 0,
            "2017-12-24": 0,
            "2017-12-25": 1,
            "2017-12-26": 0,
            "2017-12-27": 0,
            "2017-12-28": 2
        }
    },
    "msg": "",
    "ts": 1514899332
}

API 24 : 查询直播账号信息

【接口描述】

该接口用于获取账号的类型、计费方式、生效及失效时间等信息。

【请求地址】

https://api.baijiayun.com/openapi/live_account/getAccountInfo

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
partner_id int 12345678 账号ID
mobile string 14444444444 注册手机号
type int 0 直播账号类型 0:免费账号 1:试用账号 2:正式账号
status int 1 账号直播服务状态 0:服务未开通 1:服务正常 2:服务已关闭
charge_type int 0 直播计费方式 0:按峰值计费 1:按人次计费
user_limit int 100 账号允许的最大并发量(按峰值方式计费的才有)
total_user_count int 100 账号的总充值人次(按人次计费的账号才有)
used_user_count int 100 账号已使用人次(按人次计费的账号才有)
left_user_count int 100 账号的剩余人次(按人次计费的账号才有),如果账号有欠费则可能是负值
effect_time string 2017-02-07 00:00:00 账号生效时间
expire_time string 2018-02-06 23:59:59 账号的失效时间

【响应示例】

{
    "code": 0,
    "data": {
        "partner_id": 32893185,
        "mobile": "19101218223",
        "type": 1,
        "status": 1,
        "charge_type": 1,
        "user_limit": 0,
        "left_user_count": 81,
        "used_user_count": 19,
        "total_user_count": 100,
        "effect_time": "2018-01-02 00:00:00",
        "expire_time": "2019-01-01 23:59:59"
    },
    "msg": "",
    "ts": 1517911321
}

API 25 : 查询直播账号每天使用的人次/点数

【接口描述】

该接口用于获取按人次/时长计费的账号,每天消耗的人次/点数

【请求地址】

https://api.baijiayun.com/openapi/live_account/getPartnerDailyCost

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
start_date string 开始日期,格式如:2018-02-01
end_date string 结束日期,格式如:2018-02-15
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
cost dict key是日期,value是消耗的人次/点数,如果当天没有则不返回。

【响应示例】

{
    "code": 0,
    "data": {
        "cost": {
            "2018-02-06": 16,
            "2018-02-08": 1,
            "2018-02-12": 2
        }
    },
    "msg": "",
    "ts": 1521794617
}

API 26 : 查询直播账号指定日期中各教室使用的人次/点数明细

【接口描述】

该接口用于获取指定日期内每个教室使用的人次明细

【请求地址】

https://api.baijiayun.com/openapi/live_account/getAllRoomCost  

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
date string 查询日期,格式如:2018-02-01
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
room_cost dict key是教室号,value是消耗的人次/点数。

【响应示例】

{
    "code": 0,
    "data": {
        "room_cost": {
            "18020591890977": 1,
            "18020691956513": 2,
            "18020691956528": 6,
            "18020691956768": 2,
            "18020691956769": 1,
            "18020691958561": 3,
            "18020691958576": 1
        }
    },
    "msg": "",
    "ts": 1521794797
}

API 27 : 获取直播教室测验的试题信息

【接口描述】

该接口用于获取直播教室测验的试题信息

【请求地址】

https://api.baijiayun.com/openapi/room_data/getRoomQuiz

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int partner_id
room_id int 教室号
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
quiz_list array 试卷列表
quiz_list[].quiz_id int 试卷id
quiz_list[].force_join int 是否强制参加
quiz_list[].title string 试卷标题
question_list array 题目列表
question_list[].type string 题目类型(judge_question=判断题、single_select=单选题、multi_select=多选题、question_answer=问答题)
question_list[].question_id int 题目ID
question_list[].title int 题目名称
question_list[].suggested_solution string 参考答案(问答题才有该项)
option_list array 选项列表(判断题、单选题、多选题才有该项)
option_list[].option_id int 选项ID
option_list[].value string 选项值
option_list[].is_right string 该选项是否是正确答案

【响应示例】

{
    "code": 0,
    "data": {
        "quiz_list": [
            {
                "quiz_id": 2095,
                "title": "随堂考试",
                "force_join": 0,
                "question_list": [
                    {
                        "question_id": 4887,
                        "type": "judge_question",
                        "title": "1+1=2?",
                        "option_list": [
                            {
                                "option_id": 15355,
                                "value": "对",
                                "is_right": 1
                            },
                            {
                                "option_id": 15356,
                                "value": "错",
                                "is_right": 0
                            }
                        ]
                    },
                    {
                        "question_id": 4888,
                        "type": "single_select",
                        "title": "以下数字最大的是?",
                        "option_list": [
                            {
                                "option_id": 15357,
                                "value": "1",
                                "is_right": 1
                            },
                            {
                                "option_id": 15358,
                                "value": "2",
                                "is_right": 0
                            },
                            {
                                "option_id": 15359,
                                "value": "34",
                                "is_right": 0
                            },
                            {
                                "option_id": 15360,
                                "value": "4",
                                "is_right": 0
                            }
                        ]
                    },
                    {
                        "question_id": 4889,
                        "type": "multi_select",
                        "title": "以下属于四大名著的有",
                        "option_list": [
                            {
                                "option_id": 15361,
                                "value": "《西游记》",
                                "is_right": 1
                            },
                            {
                                "option_id": 15362,
                                "value": "《水浒传》",
                                "is_right": 1
                            },
                            {
                                "option_id": 15363,
                                "value": "《三国演义》",
                                "is_right": 1
                            },
                            {
                                "option_id": 15364,
                                "value": "《红楼梦》",
                                "is_right": 1
                            }
                        ]
                    },
                    {
                        "question_id": 4890,
                        "type": "question_answer",
                        "title": "挖掘机技术哪家强?",
                        "suggested_solution": "中国山东找蓝翔"
                    }
                ]
            }
        ]
    },
    "msg": "",
    "ts": 1525691801
}

API 28 : 获取直播教室测验题目的学员答案信息

【接口描述】

该接口用于获取某个教室测验试题学员答案信息

【请求地址】

https://api.baijiayun.com/openapi/room_data/getQuizUserAnswer

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int
quiz_id int 试卷的id
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
student_answer_list array 参与测验的学生列表
student_answer_list[].user_number int 学生ID
student_answer_list[].user_name string 学生姓名
answer_list array 该学生每个题目的答案列表
answer_list[].question_id int 回答的题目ID
answer_list[].answer string 学生回答的答案,判断题&单选题是选项的option_id,多选题是多个选项的option_id用英文逗号分隔,简答题则是学生的答案
{
    "code": 0,
    "data": {
        "student_answer_list": [
            {
                "user_number": 1,
                "user_name": "张三",
                "answer_list": [
                    {
                        "question_id": 9,
                        "answer": "16"
                    },
                    {
                        "question_id": 6,
                        "answer": "10,11"
                    },
                    {
                        "question_id": 7,
                        "answer": "百家云"
                    }
                ]
            }
    ]
    },
    "msg": "",
    "ts": 1525333069
}

API 29 : 获取教室学员签到信息

【接口描述】

该接口用于获取某个教室学员签到信息

【请求地址】

https://api.baijiayun.com/openapi/room_data/getUserCheckinInfo

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
checkin_list array 教室内签到列表,其中每一项是一次签到内容
checkin_list[].time array 发起签到的时间
user_list array 本次签到的用户列表
user_list[].nickname string 昵称
user_list[].user_number int 用户ID
user_list[].checkin int 用户是否签到:1=签到、0=未签到
{
    "code": 0,
    "data": {
        "checkin_list": [
            {
                "time": "2017-02-23 10:49:00",
                "user_list": [
                    {
                        "nickname": "mac",
                        "user_number": 148781531939555,
                        "checkin": 1
                    },
                    {
                        "nickname": "学生9089",
                        "user_number": 148781522536720,
                        "checkin": 1
                    },
                    {
                        "nickname": "学生9372",
                        "user_number": 148781791266552,
                        "checkin": 1
                    },
                    {
                        "nickname": "学生5760",
                        "user_number": 148774818223036,
                        "checkin": 0
                    }
                ]
            },
        ]
    }
}

API 30 : 创建分组直播参加码

【接口描述】

该接口用于创建分组直播参加码

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/createGroupLiveCodes

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int
number int 创建分组的数量
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
group_id int 分组id
user_role int 角色类型 0:学生,2:助教
url int 进教室url
code string 参加码
{
    "code": 0,
    "data": {
        "admin": [
            {
                "group_id": 2,
                "code": "46jkky",
                "user_role": 2,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062132910011&code=kkkkkk"
            }
        ],
        "student": [
            {
                "group_id": 2,
                "code": "kkkkkk",
                "user_role": 0,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062132910011&code=kkkkkk"
            }
        ]
    }
}

API 31 : 获取分组直播参加码

【接口描述】

该接口用于获取分组直播参加码

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/getGroupLiveCodes

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
group_id int 分组id (大班的数据没有这个字段)
user_role int 角色类型 0:学生,1:老师,2:助教
url int 进教室url
code string 参加码
{
    "code": 0,
    "data": {
        "admin": [
            {
                "code": "klklkl",
                "user_role": 2,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062132910011&code=klklkl"
            },
            {
                "group_id": 1,
                "code": "jkjkjk",
                "user_role": 2,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062132910011&code=jkjkjk"
            },
            {
                "group_id": 2,
                "code": "klklkl",
                "user_role": 2,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062132910011&code=klklkl"
            }
        ],
        "student": [
            {
                "group_id": 1,
                "code": "jkjkjk",
                "user_role": 0,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062132910011&code=jkjkjk"
            },
            {
                "group_id": 2,
                "code": "klklkl",
                "user_role": 0,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062132910011&code=klklkl"
            }
        ],
        "teacher": [
            {
                "code": "jkjkjk",
                "user_role": 1,
                "url": "http://www.baijiayun.com/web/room/prepare?room_id=18062196085264&code=jkjkjk"
            }
        ]
    }
}

API 31 : 获取推流直播的推流地址

【接口描述】

该接口用于获取推流直播的推流地址

【请求类型】

POST

【请求地址】

https://api.baijiayun.com/openapi/room/getPushLiveUrl

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
room_id int
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例 描述
expire_time datetime 推流地址过期时间
push_url string 推流的URL
{
    "code": 0,
    "data": {
        "expire_time": "2018-07-05 16:07:26",
        "push_url": "rtmp://pushstream-public.baijiayun.com/mgclient/d51d2bbb4b16dfb77e33d680137a7bd9/5b3dd1be/18070437161266-00001"
    },
    "msg": "",
    "ts": 1530684460
}

进入房间方式

方式1: 通过web页面进入教室

【功能描述】

百家云提供了一个进入教室的web页面,用户可以自己拼参数进入直播间。

使用场景:合作方在网站上提供每节课进入教室的入口,当用户点击进入教室按钮时,合作方将相关参数拼写为进教室URL,打开URL便可进入教室并使用直播功能。

【调用方法】

http://www.baijiayun.com/web/room/enter?room_id=<room_id>&user_number=<user_number>&user_name=<user_name>&user_role=<user_role>&user_avatar=<user_avatar>&sign=<sign>

其中user_nameuser_avatar的值在拼链接时需要进行url编码(只有在网页或电脑客户端进教室的情况,拼url需要对参数进行urlencode,算签名及app-sdk对接都不需要进行encode),如

room_id=1234567890
user_number=123
user_role=0
user_name=张三
user_avatar=https://img.qq1234.org/uploads/allimg/140426/155540J58-13.jpg
sign=xxxxxx

则拼出来的进入教室的url为

http://www.baijiayun.com/web/room/enter?room_id=1234567890&user_number=123&user_name=%E5%BC%A0%E4%B8%89&user_role=0&user_avatar=http%3A%2F%2Fimg.qq1234.org%2Fuploads%2Fallimg%2F140426%2F155540J58-13.jpg&sign=xxxxxx

注:实际上根据http协议拼url的时候所有的参数都需要进入url编码,不过room_id/user_number/user_role/sign这些参数的值只有数字或字母,url编码前和编码后的值是一样的。

参数说明

参数 类型 是否必填 默认值 描述
room_id string 房间ID
user_number int 合作方账号体系下的用户ID号
user_name string 显示的用户昵称
user_role int 0:学生 1:老师 2:管理员
user_avatar string 用户头像
sign string 签名

签名字段,需要在后端算好,计算规则参考直播进教室签名计算文档

方式2: 合作方网站调起百家云客户端进入房间

【功能描述】

百家云提供了在网页端(合作方网站)调起电脑客户端进入教室,客户端在安装时将特定协议写入注册表,网页端通过js代码或<a>标签指定特定协议拉起百家云客户端

【协议格式】

调起百家云客户端的协议格式为:

<protocol>://urlpath=<urlpath>&token=token&ts=ts
  • <protocol>:协议头
    • 云端课堂客户端:baijiacloud://
    • 云端直播客户端:bjylive://
    • 如果是定制的客户端,则协议头需要换成相应定制客户端的协议头
  • <urlpath>:方式1中拼的web页面地址进行url encode后的值
  • token: 固定字符串token,不需要替换
  • ts: 固定字符串ts,不需要替换

【调用方法】

//1. 先按方式1拼好web进入教室的url
web_url = 'http://www.baijiayun.com/web/room/enter?room_id=1234567890&user_number=123&user_name=%E5%BC%A0%E4%B8%89&user_role=0&user_avatar=http%3A%2F%2Fimg.qq1234.org%2Fuploads%2Fallimg%2F140426%2F155540J58-13.jpg&sign=xxxxxx';

//2. 按百家云客户端私有协议拼调起百家云客户端的地址
client_url = 'baijiacloud://urlpath=' + encodeURIComponent(web_url) + '&token=token&ts=ts'

// 则拼好的client_url值为
// baijiacloud://urlpath=http%3A%2F%2Fwww.baijiayun.com%2Fweb%2Froom%2Fenter%3Froom_id%3D1234567890%26user_number%3D123%26user_name%3D%25E5%25BC%25A0%25E4%25B8%2589%26user_role%3D0%26user_avatar%3Dhttp%253A%252F%252Fimg.qq1234.org%252Fuploads%252Fallimg%252F140426%252F155540J58-13.jpg%26sign%3Dxxxxxx&token=token&ts=ts

怎样判断用户有没有安装客户端,请参考常见问题1

【网页中调起百家云客户端示例】

  1. 通过js调起百家云客户端(需要先安装百家云客户端才能调起)
client_url = 'baijiacloud://urlpath=http%3A%2F%2Fwww.baijiayun.com%2Fweb%2Froom%2Fenter%3Froom_id%3D1234567890%26user_number%3D123%26user_name%3D%25E5%25BC%25A0%25E4%25B8%2589%26user_role%3D0%26user_avatar%3Dhttp%253A%252F%252Fimg.qq1234.org%252Fuploads%252Fallimg%252F140426%252F155540J58-13.jpg%26sign%3Dxxxxxx&token=token&ts=ts';

window.open(client_url);
  1. 将拼好的地址放在<a>标签的href属性里面,如
<a href="baijiacloud://urlpath=http%3A%2F%2Fwww.baijiayun.com%2Fweb%2Froom%2Fenter%3Froom_id%3D1234567890%26user_number%3D123%26user_name%3D%25E5%25BC%25A0%25E4%25B8%2589%26user_role%3D0%26user_avatar%3Dhttp%253A%252F%252Fimg.qq1234.org%252Fuploads%252Fallimg%252F140426%252F155540J58-13.jpg%26sign%3Dxxxxxx&token=token&ts=ts">
    进入教室
</a>

【移动端网页调用 APP 示例】

通过下面的函数获取 url,然后和刚才介绍的网页调起客户端的方式相同,用 window.open(url)<a href="url"></a> 的方式调起云端课堂或云端直播 APP。

/**
 * 通过此函数获取调起 url
 *
 * @param {boolean} isLive true 表示云端直播,false 表示云端课堂
 * @param {object} query 参数信息
 * @return {string}
 */
function getAppUrl(isLive, query) {
    var params = { };
    // 通过参加码进入
    if (query.code) {
        params.joinCode = query.code;
        params.userName = query.userName;
        params.userType = query.userType;
    }
    // 通过 sign 进入
    else {
        params.roomId = query.roomId;
        params.userNumber = query.userNumber;
        params.userName = query.userName;
        params.userType = query.userType;
        params.userAvatar = query.userAvatar;
        params.sign = query.sign;
    }
    if (isLive) {
        // 云端直播 app
        return 'bjlivemeeting://room.join?' + $.param(params);
    }
    else {
        // 云端课堂 app
        return 'bjhlliveapp://room.join?' + $.param(params);
    }
}

方式3: 使用客户端通过参加码进入房间

【功能描述】

百家云提供了一个凭参加码快速进入房间的方式(参加码生成见API-3API-7),参加码由合作方通过适当的方式传递给用户。

使用场景:用户打开百家云客户端,在登陆页输入参加码和用户昵称后进入房间

注意:

  1. 用户昵称建议不超过12个字
  2. 管理员可凭管理员参加码进入,多个管理员可以使用同一个参加码进入教室。
  3. 老师可凭老师参加码进入,老师参加码只支持一位老师使用,如果多人使用同一个老师参加码进入教室,则后进入的老师会将先进入的老师挤出教室
  4. 收费课场景:学生参加码是使用每个学生用户的user_number生成的,每个学生参加码只能有一人使用,如果多人使用同一个学生参加码进入教室,则后进入的学生会将先进入的学生挤出教室
  5. 免费课场景:使用user_number=0生成一个学生参加码,此学生参加码支持多人同时使用进入教室,无互挤机制

方式4: 移动端调用SDK进入房间

集成Android SDK进入房间

具体集成方式参考Android直播核心SDK

集成iOS SDK进入房间

具体集成方式参考iOS直播核心SDK

集成JS SDK进入房间

具体集成方式参考JS-SDK集成文档

回调接口

1. 设置直播上下课事件回调地址

【接口描述】

该接口用于设置直播中上下课事件的回调地址。 并不是直播生成回放的回调,直播生成回放的回调请参考 回放服务端API接口文档

【请求地址】

https://api.baijiayun.com/openapi/live_account/setClassCallbackUrl

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
url string 回调地址,必须是http(s)://开头
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例/默认值 描述
url string 日期

【响应示例】

{
    "code": 0,
    "data": {
        "url": "http://www.baidu.com"
    },
    "msg": "",
    "ts": 1512718993
}

2. 查询直播上下课回调地址

【接口描述】

该接口用于查询直播上下课的回调地址

【请求地址】

https://api.baijiayun.com/openapi/live_account/getClassCallbackUrl

【请求参数】

参数 类型 是否必填 默认值 描述
partner_id int 合作方id
timestamp int 当前时间,unix时间戳
sign string 签名

【响应参数】

参数 类型 示例/默认值 描述
url string 回调地址

【响应示例】

{
    "code": 0,
    "data": {
        "url": "http://www.baidu.com"
    },
    "msg": "",
    "ts": 1512718993
}

3. 直播教室上下课事件回调

【接口描述】

如果合作方提供了回调地址,当老师在教室里点击开始上课或下课时,可以回调通知合作方。

重试机制:如果回调失败,会在间隔1秒、3秒后分别重试两次,之后不再重试。

【请求地址】

通过回调接口 - 设置直播上下课事件回调地址 接口来设置

【请求类型】

POST

【回调参数】

参数 类型 必填 示例 描述
room_id int 1234567890 直播教室id
op string start 操作类型 上课:start 下课:end
op_time string 2017-01-11 14:16:54 操作时间 格式如:2017-01-11 14:16:54
qid string 1234567890 唯一的请求ID,长度24位
timestamp int 1467882806 当前时间,unix时间戳
sign string 签名

注:

签名参数与合作方调百家云接口生成签名的一样,即请求参数按key顺序拼接起来然后加上partner_key最后做个md5加密

【返回标准】

合作方接收后应返回一段json,包含一个code,0表示成功,非0表示失败,

  • 成功示例
{
    "code": 0,
    "msg":""
}
  • 失败示例
{
    "code": 1,
    "msg":"错误信息"
}

4. 直播生成回放的回调

直播中生成回放的回调,请参考文档 回放服务端API文档

常见问题

1. 怎样通过js判断用户有没有安装客户端

事实上,我们没办法判断客户有没有安装直播客户端,但我们可以通过另外一种方式解决这个问题。 在调起直播客户端的时候,我们设置一个定时器,过5s后弹出一个框,提示用户来下载客户端(或通过网页进教室)

  1. 如果用户已经安装过客户端,应该就是直接调起了,他不会注意到这个弹框。
  2. 如果用户没有安装客户端,尝试调起客户端会没有反应,过5s后他就会看到这样一个提示框,下载客户端(或通过网页进教室)

相关代码如下:

if (browser.ie || browser.firefox) {
    // IE和火狐用window.open打开
    // 调起客户端 5秒之后自动关闭调起窗口
    var client = window.open(enterClassroomClientURL);

    setTimeout(function () {
        if (client) {
            client.close(); //关闭新打开的浏览器窗口,避免留下一个空白窗口
        }
    }, 5000);
} else {
    //其它浏览器使用模拟<a>标签`click`事件的形式调起
    var a = document.createElement("a");
    a.setAttribute("href", enterClassroomClientURL);
    document.body.appendChild(a);
    a.click();
}

setTimeout(function () {
    // 5秒之后不管有没有调起都弹窗提示下载客户端
    dialog.open();
}, 5000);

错误码及对应的描述

code 描述
0 成功
1 普通错误(没有明确code码的错误)
404 请求路径不存在
1001 参数错误
1002 签名计算错误
2001 账号不存在
2002 账号权限错误
2003 直播账号未开或服务停止
3001 房间号不存在
3002 该房间已删除
4001 文件上传失败