远程教学之流程消息.md 5.92 KB

返回在线授课相关文档

流程描述

  • 教师端从在线授课课表发起在线授课。
  • 教师端从盒子鱼服务器获取在线授课信息
    • 公共群信息,用于交互
    • 聊天室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"
}

如果老师姓名没有的话,设置为默认名"盒子鱼",教师端和学生端都做这个判断
  • 教师取消上课(对应的鱼卡状态:TEACHER_CANCEL_PUSH)

    {
    "workOrderId": 6806,
    "type": "flow",
    "command": "notifyCancelLesson",
    }
    
  • 学生上报自己的用户Id(对应的鱼卡状态:STUDENT_ACCEPTED)

    • 学生收到推送之后,根据推送的信息,加入到指定的群。
    • 如果该学生之前已经加入过该群,则加群之后会返回已经入群的错误码,学生可以发送自定义消息告诉教师,自己已经入群。
    • 如果该学生第一次入群,把申请消息设置为自己的id,则教师端会收到有用户入群的消息,根据消息内容判断是否允许入群。

学生端上报Id的自定义消息

{
  "type":"flow",
  "command":"reportMetadata",
  "userId":"17293"
  "device":"android"
  "appVersion":"4.0.0"
}
  • 下发课程资源信息与教师端元数据 *教师端收到信息后,判断学生端的版本是否与自己的版本相匹配。 判断方法待定。
{
  "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"
    }