伯索开放平台
首页API文档SDK文档伯索官网
首页API文档SDK文档伯索官网
  1. 回调接口接入流程
  • 直播SDK接入
    • WEB版本
      • WEB版本
    • iOS版本
      • IOS版本
    • Android版本
      • Android版本
  • 微课SDK接入
    • WEB版本
      • WEB版本
    • iOS版本
      • IOS版本
    • Android版本
      • Android版本
  • 批注SDK接入
    • Web版本
      • Web版本
    • iOS版本
      • IOS版本
    • Android版本
      • Android版本
  • 签名加密
    • 签名加密
  • 回调接口接入流程
    • 回调接口接入流程
  • 文档解析接入方式
    • 文档解析接入方式
  • 历史课堂接入方式
    • 历史课堂接入方式
  • 历史课堂转视频接入方式
    • 历史课堂转视频接入方式
  • 历史课堂/微课下载接口
    • 历史课堂/微课下载接口
  1. 回调接口接入流程

回调接口接入流程

z伯索云SDK的各个功能调用时间往往很长,比如一堂实时在线课,从创建到课堂结束往往十几分钟到数小时不等,课堂结束后的关键性的返回数据通过异步方式回调返回是最佳方案。
回调接口是一个URL地址,通过HTTP/HTTPS协议访问,强烈建议使用HTTPS以增强安全性。 在回调接口开始开发前就可以约定好接口的URL发给伯索对接人进行配置。
回调接口的返回结果请务必遵守以下约定:
正常返回
HTTP头的状态码为200
HTTP头的Content-Type值为"application/json;charset=utf-8"
HTTP消息体为json对象,标准格式为
{"code":0, "msg":""}
异常返回
HTTP头的状态码为200
HTTP头的Content-Type值为"application/json;charset=utf-8"
HTTP消息体为json对象,格式为:
{"code":404, "msg":"error reason"}
msg填入异常原因
2.
回调消息的返回结果如果不符合预期,比如HTTP头状态码为400,503等,将自动在24小时内以不断递增的时间间隔重试5次。 5次发送回调都不成功,回调将不再重试。
3.
伯索的回调数据使用Json格式,包装在Post Body中以Post方式发送, HTTP头的Content-Type值为"application/json;charset=utf-8"
回调基本数据格式
💡
安全签名信息:
appId : 在申请接入时,伯索平台给予的appId
validBegin: 发送方发送请求时的Unix Epoch 时间戳,单位秒
validTime: 取固定值1200,单位秒
signature: 按照 签名加密 提供的方法返回的签名字符串
📌
忽略安全签名信息,直接处理业务字段,也可以跑通业务流程。但是由于回调接口是暴露在公网上,为了防止欺诈攻击,在此强烈建议第三方的回调接口,对signature字段的签名进行强制认证:凡是签名不正确,或者当前 Unix Epoch 时间已超出validBegin + validTime有效期,都认为非法,返回400。
课堂结束后回调数据格式
课堂主信息:

meetingId: 客户自行生成的课堂/会议唯一ID;
meetingType: 会议类型;
appId: 机构id;
mediaType: 媒体类型;
recordId: 本段历史课堂id,一堂课可能因为各种原因中断,生成多段历史课堂;
duration: 本段课堂Record录制的实际时长;
userCount: 课堂总共人数;
listenerCount: 参与的听众数即学生人数;
cover: 返回课堂封面地址,以/file-plaso/开头,将/file-plaso/替换为https://file.plaso.cn/就是完整的封面下载路径
userCS: 所有用户在线总秒数(不包括主讲老师);
teacherCS: 老师助教在线总秒数;(主讲老师在线总秒数)
speakerShareTime: 桌面共享累计时长,单位秒;
listenerShareTime: 所有学生接收桌面共享的总时长,单位秒;
beginTime: 课堂开始的Unix Epoch时间戳,从第一个人进入课堂开始计时,单位毫秒;
endTime: 课堂结束的Unix Epoch时间戳(毫秒);
recordBegin: 开始录制的Unix Epoch时间戳(毫秒)
statistics: [ {课堂参与者1信息对象}, {课堂参与者2信息对象} , ..]
test: [题目1, 题目2, 题目3, ..]; //题目=[[答案],老师给予答题时长]
课堂参与者信息:

id: 课堂参与者id;
logCount: 课堂参与者登录次数;
testStar: 随堂测分数;
awardStar: 课堂老师主动奖励的分数;
answers: [[[ 选项1,选项2 ], 答题时长(秒) ], [[ 选项1 ], 答题时长(秒) ], ...] ;
answerDuration: 答题总时长(秒);
handUpCount: 举手次数;
joinClassTime: 第一次进入课堂的时间(毫秒);
leaveClassTime: 主动离开课堂的时间(毫秒);
roleType: 角色;
redPacketStar: 红包雨积分;
name: 用户唯一名,即进入课堂时传入的loginname;
参考样例:
 {
            "validBegin": 1596876202,
            "validTime": 1200,
            "signature": "1AC85CB317DADA4864FFF213AE86BB086AE5A13B",
            "meetingId":
                "sfas-da55-ddf-fdfdf-dfdfdfdf",
            "meetingType":
                "public",
            "appId":
                "some_id",
            "callback":
                "https://dear.client.com/callback",
            "mediaType":
                "video",
            "duration":
                7841,
            "userCount":
                27,
            "listenerCount":
                26,
            "speakerCount":
                1,
            "userCS":
                1212,
            "teacherCS":
                7849,
            "speakerShareTime":
                758,
            "listenerShareTime":
                18069,
            "beginTime":
                1594511352501,
            "endTime":
                1594519202002,
            "recordBegin":
                1594511360631,
            "dirname":
                "/some/dir",
            "recordAvator":
                "sfdf-ddfd-fffg-223-df34",
            "videoStream":
                3,
            "richMedia":
                true,
            "cover":
                null,
            "statistics":
                [{
                    "id": "sfdf-ddfd-fffg-223-df34",
                    "crowd": 1,
                    "logCount": 2,
                    "nHeatBeat": 0,
                    "autoOut": 0,
                    "socketClose": 0,
                    "seq": 1,
                    "prefix": 100000,
                    "testStar": 0,
                    "awardStar": 0,
                    "answerDuration": 0,
                    "uniqueId": "sfdf-ddfd-fffg-223-df34",
                    "handUpCount": 0,
                    "joinClassTime": 1594511352502,
                    "leaveClassTime": 1594519202000,
                    "roleType": "speaker",
                    "name": "张三",
                    "isSpeaker": true,
                    "online": false,
                    "addr": "::ffff:121.28.85.34:53699",
                    "resource": "Chrome 83.0.4103.106(pc)",
                    "mediaConnectionDelay": 601,
                    "agoraUid": 12,
                    "idInMedia": 12,
                    "shareStreamTimer": {"__total": 758783, "__paused": true, "__begin": 1594514989684},
                    "onstageDuration": 7849,
                    "onlineDuration": 7849,
                    "faceDuration": 7340
                }, {
                    "id": "dfddf-7445-41-dfdf-agdgdgd",
                    "crowd": 1,
                    "logCount": 6,
                    "nHeatBeat": 0,
                    "autoOut": 0,
                    "socketClose": 4,
                    "seq": 2,
                    "prefix": 200000,
                    "testStar": 0,
                    "awardStar": 1,
                    "answers": [],
                    "answerDuration": 0,
                    "uniqueId": "dfddf-7445-41-dfdf-agdgdgd",
                    "handUpCount": 0,
                    "joinClassTime": 1594511718775,
                    "leaveClassTime": 1594519202002,
                    "roleType": "listener",
                    "name": "李四",
                    "online": false,
                    "addr": "::ffff:183.198.133.159:3609",
                    "resource": "OPPO 5.1(android)",
                    "mediaConnectionDelay": 190,
                    "agoraUid": 13,
                    "idInMedia": 13,
                    "shareStreamTimer": {"__total": 758783, "__paused": true, "__begin": 1594514989684},
                    "onstageDuration": 282,
                    "onlineDuration": 7414,
                    "faceDuration": 281
                }],
            "refFiles":
                [],
            "attachment":
                1,
            "recordId":
                "5fsd4dd8db81a25a44200643",
            "saved":
                true,
            "topic":
                "数学精讲",
            "hasMedia":
                true,
            "fileSize":
                304793833,
            "fileLocation":
                "/some/location",
            "_id":
                "sfsffwefwfwsfsdfsdf"
        }
修改于 2025-04-12 02:45:32
上一页
回调接口接入流程
下一页
文档解析接入方式
Built with