远程教学之流程消息.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" }