远程教学之流程消息.md
7.33 KB
流程描述
- 学生端登录腾讯云服务(启动即登录,每30秒会检查一次)
- 教师端从盒子鱼服务器获取在线授课信息
- 公共群信息,用于交互
- 聊天室Id,用于音视频通讯
- 学生的个人统计信息
- 教师端从在线授课课表发起在线授课。
- 教师端登录腾讯云服务(如果登录失败,有重试机制,直到登录成功为止)
- 教师端呼叫学生端
- 学生端收到呼叫
- 学生端接收在线授课
- 学生端上报自己的id,以及客户端元信息
- 教师端检测id合法,版本匹配,下放教师端元数据信息以及课程资源信息
- 学生端检测本地是否已经下载了全部的多媒体资源文件。
- 如果需要下载,则进入下载过程,同时通知教师端,客户端开始下载资源
- 如果不需要下载,或者已经下载完毕,通知教师端已经准备好上课。
- 如果连续三次下载失败,会通知教师端课程异常。
- 学生端进入等待上课的页面,初始化音视频通讯,进入聊天室
- 教师端收到学生准备完毕的信息后,初始化音视频通讯,进入聊天室
- 教师端发送学习页的信息
- 教师端发送学习页的页面动作信息
- 教师端通知学生结束课程
- 学生端结束课程,同时报告给教师端
- 退出聊天室
- 教师结束课程,上报给服务器(服务器在课程结束之后,可能会解散群或者把双方踢出),回到前一页面。
- 退出聊天室
- 学生则回到课表页面。
在线授课接口定义
流程消息定义
- 由教师端通过腾讯云的消息通知学生上课(对应鱼卡状态:WAITFORSTUDENT)
{
"type": "flow",
"command": "notifyBeginLesson",
"workOrderId": 6806,
"teacherId": 1296861,
"groupName": "BOXFiSH Online Teaching Group",
"groupId": "@TGS#2WHIZEBEO",
"chatRoomId": 212968615,
"startTime": "2016-06-24 13:30:00",
"endTime": "2016-06-24 14:00:00",
"teacherName": "喜洋洋",
"figureUrl": "http://wx.qlogo.cn/mmopen/PiajxSqBRaEJrztQnGAk8X1G2A0AfjvPRBdgLFOjxsM9AoicoOUrH3Yia3qY9uic5ibQO6wMkJ6bPUx15IN4Vrxv8CA/0",
"slotId":28, (long型,时间片,例如28代表今天的第28节课)
"courseType":"FUNCTION",
”courseId":"L3NoYXJlL3N2bi9Cb3hmaXNo6K--56iL5qih5p2_LzAwMC7miYDmnInmqKHmnb_lkIjovpEueGxzeA",
"device":"ios",
"appVersion":"7.0.0"
}
如果老师姓名没有的话,设置为默认名"盒子鱼",教师端和学生端都做这个判断
-
教师取消上课(对应的鱼卡状态:TEACHER_CANCEL_PUSH)
{ "type": "flow", "command": "notifyCancelLesson", "workOrderId": 6806, (long型) }
学生端接收到教师端邀请上课的反馈信息
{
"type": "flow",
"command": "receivedLessonInvitation"
"workOrderId": 6806, (long型)
}
- 学生端主动从课表进入课程等待(老师收到不做任何处理)
{
"type": "flow",
"command": "enterCourseEarlyfromSchedule"
"workOrderId": 6806, (long型)
}
- 学生上报元数据信息(对应的鱼卡状态:STUDENT_ACCEPTED)
学生端上报元数据的自定义消息
{
"type":"flow",
"command":"reportMetadata",
"userId":"17293"
"device":"android"
"appVersion":"4.0.0"
}
-
学生端获取课程资源(目前只是构想,待确定)
学生接受老师的呼叫后,上报自己的元数据。 如果呼叫信息中包含老师的元数据,则进行以下动作 忽略教师端下发课程信息的处理 根据呼叫信息中的课程Id信息,直接从本地获取资源信息。 如果信息获取成功,则下载信息,进入后续的在线授课流程。 如果信息获取失败,则给出重试的提示。
下发课程资源信息与教师端元数据
教师端收到信息后,判断学生端的版本是否与自己的版本相匹配。目前暂时都返回YES
{
"type":"flow",
"command":"prepareCourse",
"device":"ios"
"appVersion":"7.0.0"
"screenWidth":1024, // For 教学画板
"screenHeight":768, // For 教学画板
"courseName":"英雄是怎样炼成的",// 学生端可以展现在等待上课画面
"attachmentType":"smallFile",
}
附属的小文件是一个Json格式的资源列表
[
95d8ca1ca0c5209bd75a4c2181f8609d,
7b251f924497500ed26428342a815d1b,
45bc7b7e7828020eaa016674327d5dff,
53f086e895518ee3b488404620117d56,
fc5545a9a728904dc533efcbfff1d2c5,
7b251f924497500ed26428342a815d1b
]
-
学生端开始下载课程所需要的资源(学生端动作) 如果学生端需要下载资源,则发送此消息。如果检查到无须下载新的资源,则不发送此消息。
{ "type":"flow", "command":"beginDownloadCourseResources" }
学生端下载失败的处理(对应鱼卡状态:EXCEPTION_RESOURCE_DOWNLOAD_FAIL)
学生端经过多次尝试仍然下载资源失败,要通知教师端这个情况,防止教师端卡死 教师端收到这个消息后,会返回到上一界面。
{
"type":"flow",
"command":"downloadCourseResourcesFailed"
}
-
学生端已经下载好课程所需要的资源(对应鱼卡状态:READY) 检测到本地已经下载好了全部的课程所需资源后,通知给教师端。
{ "type":"flow", "command":"downloadedAllCourseResources" }
-
发送课程页信息(教师端动作)
{ "type":"flow", "command":"coursePage", "pageIndex":3 "attachmentType":"smallFile" }
附属的小文件是一个Json格式的页面信息 (考虑到将来如果页面比较复杂,或者附加了比较长的文章,可能出现当个页面信息过长,不适合发送自定义信息的情况)
{
"pageInfo" : 页面Json信息(去掉原来Json中的pageIndex)
"swipeDirection" : 0 (0-左滑 1-右滑)
"coursePageType" : 0 (0-普通学习页,3-关键词页)
}
-
结束课程(对应鱼卡状态:COMPLETED)
{ "type":"flow", "command":"endCourse" }
-
学生上报结束课程(将来会去掉)
{ "type":"flow", "command":"endCourse" }
学生端可以主动进入课程等待
-
学生端进入在线授课的方式
- 由老师呼叫进入(方式A)
- 主动进入课程首页等待(方式B)
-
方式B需要注意的事项
- 接收老师呼叫后,虽然不用弹出接收呼叫的页面,但是老师端传过来的信息还是要保存
- 学生端发起心跳和检查心跳的时机
在收到老师发起的呼叫之后
- 方式B的状态下,收到老师呼叫后,要上报师生已连通的消息("CONNECTED")。
- 学生端在进入等待页面过程中,不用向服务器端发送指令,不影响老师端的逻辑。
-
调用服务器接口之前相关的检查
- 检查是否登录腾讯云成功,登录不成功则不允许进行下一步。
- 检查是否开始了音视频权限,未开启则给予提示去开启。
- 通过检查之后则调用服务器的checkin接口
- 成功则利用接口返回来的信息(包括公共群信息,聊天室信息以及课程资源信息等)进入到等待画面
- 失败则提示用户重试
教师端显示下课按钮
- 给学生发送消息,学生端提示上课满25分钟
{ "type": "flow", "command": "alreadyTwentyFive" }