直播聊天室API接口

一、聊天室接口文档 

聊天室socket消息收发

1、地址(支持https)

聊天室服务器域名:

http://chat.polyv.net

聊天室接口域名:

http://apichat.polyv.net

2、连接聊天室服务器

var supportsWebSockets = 'WebSocket' in window || 'MozWebSocket' in window;
var chatHost = 'http://chat.polyv.net';
var chatToken;
var socket = io.connect(chatHost, {
    query: 'token=' + chatToken,
    transports : [supportsWebSockets ? 'websocket' : 'polling']
});

说明:

a) chatHost为聊天室服务器域名,支持https

b) chatToken为令牌,目前可以设置为空

c) 优先使用websocket的方式连接聊天室

3、监听消息

socket.on(msg,callbak)
msg主要有:connect,disconnect,messgae
socket.on('connect', function() {
    //TODO
})
socket.on('disconnect', function() {
    //TODO
})
socket.on('message' , function(data) {
    var mData = JSON.parse(data);
    if (mData && mData.EVENT) {
        switch (mData.EVENT) {
            //TODO
        }
    }
})

注:'message'消息回调函数参数data为JSON字符串,需要先转换为JSON对象,每个data都会包含一个'EVENT'属性

4、'EVENT'属性

注:下面所列消息,如果只说明监听回调返回的数据,而没有说明发送的消息,页面均不可主动发送给服务器

LOGIN:

登录消息,登录房间的时候服务器会广播这一消息

发送:

socket.emit('message', JSON.stringify({
    EVENT: 'LOGIN',
    values: [userNick, userPic, userId], //登录用户信息,不可为空
    roomId: roomId, //当前房间号
    type: userType,//用户类型,可为空,teacher(教师)、assistant(助教)、manager(管理员)、slice(云课堂学员)
}));

监听回调返回的数据(此次省略处理数据的步骤,后面同):

{
    "EVENT":"LOGIN",
    "onlineUserNumber":3,
    "user": {
        "clientIp":"59.42.43.28",
        "nick":"广州观众/32199",
        "pic":"//livestatic.videocc.net/v_60/assets/wimages/missing_face.png",
        "roomId":"100781",
        "uid":"CxJj8Ap3C9jN1UHKAJ_V",    
        "userId":"1499917692338" 
        "userType": "" 
    }
}

说明

名称 类型 说明
onlineUserNumber number 当前房间在线总人数
clientIp 用户IP
nick 用户昵称
pic 用户头像
roomId 房间号
uid socket分配的id
userId 用户唯一标识
userType teacher、assistant、manager、slice 用户类型,目前有teacher(老师)、assistant(助教)、manager(管理员)、slice(云课堂学员)

LOGOUT

说明:登出消息,有人离开房间(包括刷新页面)时服务器会广播这一消息

监听回调返回数据:

EVENT: "LOGOUT",
onlineUserNumber: 3,
uid: "I_o3f4sHDzAHM4LVAJTX"
名称 类型 说明
onlineUserNumber number 当前房间在线总人数
uid string 离开人的socket.id

SPEAK:

说明:发言,接收别人的发言消息(不包括自己)

发送:

socket.emit('message', JSON.stringify({
    EVENT: 'SPEAK',
    values: [value],                //发言内容
    roomId: roomId                //当前房间号
}));

监听回调返回的数据:

{
    "EVENT": "SPEAK",
    "id": "f1e4a960-6abc-11e7-ac0a-379e251bb30e",
    "time": 1500274540278,
    "user": {
        "clientIp": "59.42.40.89",
        "nick": "rururu",
        "pic":"//livestatic.videocc.net/v_60/assets/wimages/missing_face.png",
        "roomId": "100781",
        "uid": "yP-HnXTEZyToxP0TAGCS",
        "userId": "1500274526077",
        "userType": "" 
    },
    "values": ["sadasd"]
}
名称 说明
id 消息唯一标志
time 时间戳
user 发言人
values 消息内容

GONGGAO:

说明:公告消息,此公告消息页面不主动发送,当管理员发言时,服务器会将管理员的消息做为公告处理,当重新进入页面时,如有公告,服务器会广播这一消息。

监听回调返回的数据:

{
    "EVENT": "GONGGAO",
    "content": "POLYV保利威视" 
}
名称 说明
content 公告内容

BULLETIN

说明:公告消息,此公告消息页面可主动发送,区别于“GONGGAO”消息。当重新进入页面时,如有公告,服务器会广播这一消息。

发送

socket.emit('message', JSON.stringify({
    EVENT: 'BULLETIN',
    roomId: roomId,    //当前房间号
    content: content,  //公告内容
}));

监听回调返回的数据:

EVENT: "BULLETIN",
content: "???/",
roomId: "105240"
名称 类型 说明
content string 公告内容
roomId number/string 当前房间号(重新进入房间收到这一消息不会带roomId)

SET_NICK:

说明: 昵称设置,当观众进入房间昵称为xx/观众+数字类型时才会提示设置,设置的昵称存在时间为5个小时

发送:

socket.emit('message', JSON.stringify({
    EVENT: 'SET_NICK',
    roomId: roomId, //当前房间号
    userId: userId, //用户唯一标识
    nick: nick//要设置的昵称
}));

监听回调返回的数据:

错误消息1:

{
    "EVENT":"SET_NICK",
    "message":"昵称已存在",
    "nick":"林林林",
    "status":"error",
    "userId":"1500285799522" 
}

错误消息2:

{
    "EVENT":"SET_NICK",
    "message":"您的昵称中含有违规词",
    "nick":"管理员",
    "status":"error",
    "userId":"1500285799522" 
}

错误消息3:

{
    "EVENT":"SET_NICK",
    "message":" 找不到该用户",
    "nick":"林林林",
    "status":"error",
    "userId":"1" 
}

错误消息4:

{
    "EVENT":"SET_NICK",
    "message":"缺少相关参数",
    "status":"error" 
}

设置成功消息:

{
    "EVENT":"SET_NICK",
    "message":"设置成功",
    "nick":"林林林",
    "status":"success",
    "userId":"1500285799522" 
}
名称 说明
message 消息内容
status 设置状态
nick 设置昵称
userId 用户id

FLOWERS:

说明:送花事件

发送:

socket.emit('message', JSON.stringify({
    EVENT: 'FLOWERS',
    roomId: roomId,//当前房间号
    nick: userNick,//送花人昵称
    uimg: userPic //送花人头像,为新增的属性,可不传
}));

监听回调返回的数据:

{
    "EVENT":"FLOWERS",
    "nick":"广州观众/81366",
    "uimg":"//livestatic.videocc.net/v_60/assets/wimages/missing_face.png" 
}
名称 说明
nick 送花人昵称
uimg 送花人头像(新增)

LIKES:

说明: 点赞事件

发送:

socket.emit('message', JSON.stringify({
    EVENT: 'LIKES',
    nick: userNick, //点赞人昵称
    count: likesnum, //当前点赞数,可不传
    roomId: roomId //当前房间号
}));

监听回调返回的数据:

{
    "EVENT":"LIKES",
    "count":160,
    "nick":"广州观众/81366" 
}
名称 说明
count 当前点赞总数,若发生消息的时候没传此属性,则不返回这个属性
nick 点赞人昵称

KICK:

说明: 踢人事件

发送:

var data = JSON.stringify({
    EVENT: 'KICK',
    values: [userName], //被踢出人昵称
    roomId: roomId,
    sign:sign //md5校验字符串
});
socket.emit('message',data);

监听回调返回的数据:

{
    "EVENT":"KICK",
    "user": {
        "clientIp":"59.42.40.89",
        "nick":"林林林",
        "pic":"//livestatic.videocc.net/v_60/assets/wimages/missing_face.png",
        "roomId":"100781",
        "uid":"118GWVRA24PR14coA3bz",
        "userId":"1500275476199",
        "userType":"" 
    }
}
名称 说明
user 被踢用户对象

REMOVE_CONTENT:

说明:删除某条聊天记录,目前需要通过HTTP接口调用

监听回调返回的数据:

{
    "EVENT":"REMOVE_CONTENT",
    "content":"asd",
    "id":"54b04e90-6acd-11e7-abcd-a985dda00975",
    "roomId":"100781" 
}
名称 说明
content 删除的内容
id 删除内容对应的id
roomId 房间号

REMOVE_HISTORY:

说明:清空聊天记录

发送:

var data=JSON.stringify({
    EVENT:'REMOVE_HISTORY',
    roomId: roomId,
    sign:sign
});
socket.emit('message',data);

监听回调返回的数据:

{
    "EVENT":"REMOVE_HISTORY" 
}

CLOSEROOM:

说明:关闭聊天室

发送:

var data = JSON.stringify({
    EVENT:'CLOSEROOM',
    roomId:roomId,
    sign:sign    //md5校验字符串
});
socket.emit('message',data);

监听回调返回的数据:

{
    "EVENT":"CLOSEROOM",
    "value": {
      "closed":true,    
      "roomId":"100781" 
    }
}
名称 说明
closed true为关闭,false为开启
roomId 房间号

CLOSE_DANMU:

说明:关闭弹幕

监听回调返回的数据:

{
    "EVENT": "CLOSE_DANMU",
    "isClose": true
}
名称 说明
isClose true为关闭,false为开启

CUSTOMER_MESSAGE:

说明:自定义消息接收事件,目前只能通过后台管理员调用HTTP接口发送消息,可参考http://dev.polyv.net/2016/12/send-chat/

监听回调返回的数据:

{
    "EVENT" : "CUSTOMER_MESSAGE",
    "roomId" : 100781,
    "image":"http://livestatic.videocc.net/assets/wimages/pc_images/logo.png",
    "content" : "这是一条自定义消息" 
}
名称 说明
roomId 房间号
image 消息图片(根据发送的消息是否有图片决定)
content 消息内容

GET_TEST_QUESTION_CONTENT:

说明:获取答题卡题目和选项内容

响应:

名称 类型 说明
questionId string 问题ID
type string 题目类型,R表示单选,C表示多选
answer string 题目答案,多个答案则直接拼接,如选A和B,则返回AB
option1 string 选择项1,选项最少2个,最多5个
option2 string 选择项2
option3 string 选择项3
option4 string 选择项4
option5 string 选择项5
title string 题目标题
hash string 校验码
ts string 时间戳

GET_TEST_QUESTION_RESULT :

说明:获取答题卡答题结果

响应:

名称 类型 说明
questionId string 问题ID
result object 答题结果

答题结果字段说明:

名称 类型 说明
singleResult array 各个选项被选次数
total number 回答总人数
answer string 答案

ANSWER_TEST_QUESTION:

说明:发送答案

请求:

socket.emit('message', JSON.stringify({
    EVENT: 'ANSWER_TEST_QUESTION',
    roomId: channelId,
    nick: nick,
    userId: userId,
    option: result,
    questionId: questionId
}));

字段说明:

名称 说明
EVENT 事件名
roomId 房间号
nick 昵称
userId 学生ID
option 选择的答案,多选时直接将多个答案拼接。如,选A和B,则option为AB
questionId 问题ID

** 咨询提问 **

发送提问内容:

socket.emit('message', JSON.stringify({
    EVENT: 'S_QUESTION',
    roomId: roomId,
    user: {
        nick: nick,
        pic: pic,
        userId: userId,
        userType: 'student'
    },
    content: value
}));

字段说明:

名称 说明
EVENT 事件名
roomId 房间号
user 用户信息
content 提问内容

用户信息说明:

名称 说明
nick 昵称
pic 头像
userId 学员id
userType 类型

响应:

同发送字段内容一致

老师/管理员/助教回复提问:

socket.emit('message', JSON.stringify({
    EVENT: 'T_ANSWER',
    roomId: roomId,
    user: {
        nick: nick,
        pic: pic,
        userId: userId,
        userType: 'teacher',
        actor: actor
    },
    s_userId: s_userId
    content: value
}));

字段说明:

名称 说明
EVENT 事件名
roomId 房间号
user 用户信息
s_userId 被回复学员的id
content 回复内容

用户信息说明:

名称 说明
nick 昵称
pic 头像
userId 讲师/助教/管理员id
userType 类型:teacher/assistant/manager
actor 头衔

响应:

同发送字段内容一致

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...