Live/im/api

跳转到: 导航, 搜索
(调整文档结构)
 
(未显示1个用户的11个中间版本)
第45行: 第45行:
 
{{api_args|avatar|true|string|发送者头像url}}
 
{{api_args|avatar|true|string|发送者头像url}}
 
{{api_args|sign|true|string|对sign之外的其他所有参数进行签名的结果 见[http://open.weibo.com/wiki/Live/im/api#.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95 签名算法]}}
 
{{api_args|sign|true|string|对sign之外的其他所有参数进行签名的结果 见[http://open.weibo.com/wiki/Live/im/api#.E7.AD.BE.E5.90.8D.E7.AE.97.E6.B3.95 签名算法]}}
{{api_args|extension|false|string|消息扩展字段 [http://open.weibo.com/wiki/Live/im/api#.E6.95.B0.E6.8D.AE.E7.BB.93.E6.9E.84 参见](json object格式,默认为空json object)
+
{{api_args|extension|false|string|消息扩展字段(json object格式,默认为空json object)
  
消息类型1~14时,各类消息会有一些该类型特有的字段用于表示一些业务,这些字段会出现在extension中的sys字段里面,结构如下:
+
消息类型1~14时,各类消息会有一些该类型特有的字段(参见[http://open.weibo.com/wiki/Live/im/api#.E6.B6.88.E6.81.AF.E4.BD.93 消息体]),这些字段应该在当前JSON的sys子JSON中传递,结构如下:
 
<pre class="brush:js">
 
<pre class="brush:js">
 
extension = {
 
extension = {
第89行: 第89行:
  
 
第三方发起该请求之后,只要不断开连接,该接口会源源不断的推回该业务方中最新的消息。如果连接意外断开,只要重连之前累计消息数量不超过商定的阈值,消息都会从上次断开的地方继续推送。
 
第三方发起该请求之后,只要不断开连接,该接口会源源不断的推回该业务方中最新的消息。如果连接意外断开,只要重连之前累计消息数量不超过商定的阈值,消息都会从上次断开的地方继续推送。
 +
 +
 +
由于网络环境复杂,第三方与微博的长连接可能会意外断开;该接口提供一种心跳方式来辅助判断连接的好坏情况。具体方式是由微博端定时向第三方推送心跳消息,如果第三方超过约定时间没有收到数据包或者心跳包,则可以判断连接已经异常,应该将该连接关闭并使用新的连接来接收数据。
 +
 +
  
 
接口从认证中取得第三方的appkey,以此appkey作为bizCode来取业务方的消息。
 
接口从认证中取得第三方的appkey,以此appkey作为bizCode来取业务方的消息。
第95行: 第100行:
 
'''URL'''
 
'''URL'''
  
https://api.weibo.com/2/liveim/message/pull.stream [GET]
+
https://exchange.api.weibo.com/2/liveim/message/pull.stream [GET]
  
  
第119行: 第124行:
  
 
'''返回结果'''
 
'''返回结果'''
返回的消息以JSON的方式推送,推送的数据结构如下,每条消息是一个单独的JSON-OBJECT。
+
返回的消息以JSON的方式推送,推送的数据结构如下,每条消息是一个单独的JSON-OBJECT,结构参见[http://open.weibo.com/wiki/Live/im/api#.E6.B6.88.E6.81.AF.E4.BD.93 消息体]。
  
 
//成功返回
 
//成功返回
第126行: 第131行:
 
     "error_code":0,    // 0表示成功 其他表示失败。需要看错误消息
 
     "error_code":0,    // 0表示成功 其他表示失败。需要看错误消息
 
     "error_msg":"",
 
     "error_msg":"",
 +
    "response": {
 +
          "heartbeat_interval": int  // 心跳间隔的秒数
 +
    }
 
}
 
}
 
{
 
{
第132行: 第140行:
 
{
 
{
 
     // 消息体
 
     // 消息体
 +
}
 +
{
 +
    // 心跳包
 
}
 
}
 
...
 
...
 
</pre>
 
</pre>
 
消息体结构见[]
 
  
 
//失败返回
 
//失败返回
第145行: 第154行:
 
}
 
}
 
</pre>
 
</pre>
 +
 +
心跳包
 +
<pre class="brush:js">
 +
{
 +
    "heartbeat_interval": int  // 心跳间隔的秒数
 +
}
 +
</pre>
 +
 +
数据包区分是"消息体"还是"心跳包"的方法:
 +
 +
* 如果数据包中包含<code>heartbeat_interval</code>字段,则认为是心跳包。
 +
* 如果数据包中包含<code>msg_type</code>字段,则认为是消息。
  
 
关于错误返回值与错误代码,参见 [http://open.weibo.com/wiki/Live/im/api#.E9.94.99.E8.AF.AF.E7.A0.81.E5.AE.9A.E4.B9.89 错误码定义]
 
关于错误返回值与错误代码,参见 [http://open.weibo.com/wiki/Live/im/api#.E9.94.99.E8.AF.AF.E7.A0.81.E5.AE.9A.E4.B9.89 错误码定义]
第151行: 第172行:
 
'''说明'''
 
'''说明'''
  
如果第三方使用的是HTTP Callback的方式接受微博消息,那么第三方也需要提供一个类似[发送消息接口]的接口。要求与那个接口使用相同的参数和返回值。
+
如果第三方使用的是HTTP Callback的方式接受微博消息,那么第三方也需要提供一个类似[http://open.weibo.com/wiki/index.php?title=Live/im/api&action=submit#.E4.BA.92.E5.8A.A8.E4.B8.8A.E8.A1.8C 互动上行]的接口。要求与那个接口使用相同的参数和返回值。
  
  
第192行: 第213行:
 
{{api_args|extension|false|string|消息扩展字段 [http://open.weibo.com/wiki/Live/im/api#.E6.95.B0.E6.8D.AE.E7.BB.93.E6.9E.84 参见](json object格式,默认为空json object)
 
{{api_args|extension|false|string|消息扩展字段 [http://open.weibo.com/wiki/Live/im/api#.E6.95.B0.E6.8D.AE.E7.BB.93.E6.9E.84 参见](json object格式,默认为空json object)
  
消息类型1~14时,各类消息会有一些该类型特有的字段用于表示一些业务,这些字段会出现在extension中的sys字段里面,结构如下:
+
消息类型1~14时,各类消息会有一些该类型特有的字段(参见[http://open.weibo.com/wiki/Live/im/api#.E6.B6.88.E6.81.AF.E4.BD.93 消息体]),这些字段会出现在extension中的sys字段里面,结构如下:
 
<pre class="brush:js">
 
<pre class="brush:js">
 
extension = {
 
extension = {
第267行: 第288行:
  
 
== 数据说明 ==
 
== 数据说明 ==
 +
 +
=== 房间信息 ===
 +
 +
<pre class="brush:js">
 +
{
 +
  "room_id": string,
 +
  "room_sys_id": uint64,
 +
  "name": string,
 +
  "pic_url": string,
 +
  "introduction": string,
 +
  "notification": string,
 +
  "type": int,
 +
  "status": int,          // 房间当前的状态,0-未开始,1-正在直播,2-已删除,3-结束(可回放),4-推迟,5-结束(不可回放),6-主播离线
 +
  "created_at": unit64,  // 创建时间,距离1970-01-01 00:00:00的毫秒数
 +
  "start_time": unit64,  // 直播开始时间戳(秒),默认为0,表示未记录
 +
  "end_time": unit64,  // 直播结束时间戳(秒),默认为0,表示未记录
 +
  "update_time": uint64,  // 最后一次更新时间,单位与创建时间相同
 +
  "owner_info": {        // 主播的信息
 +
    "uid": uint64,
 +
    "user_system": string // 主播所在的用户体系,"0"表示微博
 +
  },
 +
  "counters": {          // 房间的各种计数子结构
 +
    "onlines": int,      // 在线人数
 +
    "praise_count": int,  // 赞数
 +
    "play_count": int    // 播放次数
 +
  },
 +
  "setting": {            // 房间的一些设置选项
 +
    "max_onlines": int,  // 房间允许的最大在线人数
 +
    "allow_comment": int,  // 当前房间是否允许发言,0-不允许,1-允许
 +
    "censor_policy": int,  // 当前房间消息审查策略,0-不进行先审查后发,1-进行先审查后发
 +
    "allow_praise": int  // 当前房间是否允许点赞,0-不允许,1-允许
 +
    "heartbeat_interval": int  //主播心跳间隔
 +
  }
 +
 +
}
 +
</pre>
 +
 +
  
 
=== 消息类型 ===
 
=== 消息类型 ===
第274行: 第333行:
 
* 3 - 点亮主播消息
 
* 3 - 点亮主播消息
 
* 4 - 禁言消息
 
* 4 - 禁言消息
 +
* 5 - 礼物消息
 
* 6 - 公告消息
 
* 6 - 公告消息
 
* 7 - 分享直播消息
 
* 7 - 分享直播消息
 
* 8 - 关注主播消息
 
* 8 - 关注主播消息
 +
* 9 - 加入购物车消息{{icon_trash}}
 +
* 10 - 商品消息{{icon_trash}}
 
* 11 - 直播变更消息(房间的任何状态变更都会进行push)
 
* 11 - 直播变更消息(房间的任何状态变更都会进行push)
 
* 12 - 加入/退出房间消息
 
* 12 - 加入/退出房间消息
 
* 13 - 打赏消息
 
* 13 - 打赏消息
 
* 14 - 管理员变更消息
 
* 14 - 管理员变更消息
 +
* 15 - 系统消息(该消息"sender_info"字段为空,"send_info":{})
 +
* 16 - 置顶/取消置顶评论消息
 
* 100 - 自定义消息类型
 
* 100 - 自定义消息类型
  
第286行: 第350行:
 
<pre class="brush:js">
 
<pre class="brush:js">
 
{
 
{
     "room_id":string,      // 房间号
+
     "room_id":string,      // 房间号 【basic】
     "room_sys_id": uint64, // 房间ID (内部)
+
     "room_sys_id": uint64, // 房间ID (内部) 【basic】
     "msg_type":int,        // 消息类型,见“消息类型说明”
+
     "msg_type":int,        // 消息类型,见“消息类型说明” 【basic】
     "mid":long,
+
     "mid":long,             //【basic】
 
     "sender_info":{
 
     "sender_info":{
 
         // 发送者的用户信息,见“用户信息”
 
         // 发送者的用户信息,见“用户信息”
 
     },
 
     },
     "content":string,      // 消息内容
+
     "content":string,      // 消息内容   【basic】
 +
    "content_css":{ 
 +
        // 消息样式,json格式、包含对消息的描述 目前对msg_type 5,6,8 启用,见“content_css说明”
 +
    },
 
     "extension":string,    // 消息的扩展字段
 
     "extension":string,    // 消息的扩展字段
 
     "offset": long,        // 消息距离视频开始时间间隔,单位ms
 
     "offset": long,        // 消息距离视频开始时间间隔,单位ms
     "created_at":long      // 时间戳,距离1970-01-01 0:00:00 GMT的毫秒数
+
     "created_at":long      // 时间戳,距离1970-01-01 0:00:00 GMT的毫秒数 【basic】
 
     // 如果还有其他字段,这些字段在此处继续,相关字段见“各消息类型的额外字段”
 
     // 如果还有其他字段,这些字段在此处继续,相关字段见“各消息类型的额外字段”
 
}
 
}
 +
</pre>
  
 +
<font color=red>标注为【basic】的字段是一个消息结构体的基础字段,每条消息都会带有!!</font>
 +
 +
content_css字段类型是json-object的字符串表示,描述消息内容显示样式
 +
 +
<pre class="brush:js">
 +
{
 +
    "suffix": "速速转发",        // 后缀,可以为图片URL
 +
    "suffix_color": "#0000FF",    // 后缀颜色,前缀为图片时无效
 +
    "content_color": "#FF0000",  // 消息内容显示颜色
 +
    "prefix": "系统消息:",        // 消息前缀,如 公告:系统消息:等 ,可以为图片URL
 +
    "prefix_color": "#DFDFDF",    // 前缀颜色,前缀为图片时无效
 +
    "bg_color": "#D2D2D2",      // 背景色
 +
    "bg_alpha": "0"            // 背景色透明度,0为全透明
 +
}       
 
</pre>
 
</pre>
 +
 +
extension字段类型是json-object的字符串表示
 +
 +
<pre class="brush:js">
 +
// 打赏(msg_type=13)
 +
{
 +
    "user":string,  // 姓名,如:"张三"
 +
    "price":string  // 金额,如:"888"
 +
}
 +
//置顶/取消置顶(msg_type=16)
 +
{
 +
    "pinned_mid"    //置顶or取消置顶的那条消息的mid
 +
}
 +
 +
//用户列表信息 (msg_type=15,sys_msg_type=6)
 +
{
 +
    "list": [
 +
      {
 +
        "uid": long, //用户ID
 +
        "avatar": string, //头像地址
 +
        "user_system": string, //系统类型,0表示微博
 +
        "user_auth_type": int
 +
      },
 +
      {
 +
        "uid": 1677969704,
 +
        "avatar": "http://tva1.sinaimg.cn/crop.0.0.180.180.180/6403c928jw8f9rtt48i0mj2050050mxl.jpg",
 +
        "user_system": "0",
 +
        "user_auth_type": 0
 +
      },
 +
      ...
 +
    ]
 +
}
 +
           
 +
</pre>
 +
  
 
'''各类型特有的额外字段'''  
 
'''各类型特有的额外字段'''  
第311行: 第428行:
 
"praises_count":int    // 当前总赞数
 
"praises_count":int    // 当前总赞数
 
"inc_praises":long    // 用户点赞次数
 
"inc_praises":long    // 用户点赞次数
 +
"praise_interval":long  // 赞间隔 ms
 +
"praise_num":int      // 间隔内飘赞数
 
   
 
   
 
禁言,msg_type=4
 
禁言,msg_type=4
第322行: 第441行:
 
   ]
 
   ]
 
}
 
}
 +
 +
发送礼物,msg_type=5
 +
// content字段为空(empty或者不存在)时,表示是连击礼物的中间状态,当finish=2时,推送的消息中content不为空
 +
"anchor_coins":uint64              //主播金币数
 +
"gift_info":{
 +
    "id":string            //礼物id
 +
    "name":string        //礼物名字,以id为准,礼物名字在最后一次下发可能为空
 +
    "type": int            //礼物类型,1表示普通礼物,2表示连击礼物
 +
    "total_num":int        //当前总共送出有效礼物数 type=2时才有效
 +
    "inc_interval":int    //礼物增加的时间间隔,单位为ms  type=2时才有效
 +
    "inc_num":int          //在inc_interval时间内,增加多少个礼物  type=2时才有效
 +
}
 +
 
   
 
   
 
房间变更,msg_type=11
 
房间变更,msg_type=11
第341行: 第473行:
 
     "type":int              //操作类型 1 增加 2 删除
 
     "type":int              //操作类型 1 增加 2 删除
 
}
 
}
 +
 +
系统消息,msg_type=15    //send_info为空{}
 +
"sys_msg_type":int    //系统消息子类型
 +
 +
置顶/取消置顶消息,msg_type=16
 +
"msg_behavior":uint32  //消息的显示行为  2:置顶 3.取消置顶
 
</pre>
 
</pre>
  

2019年11月27日 (三) 14:51的最后版本

目录

概述

微博与接入微博的第三方合作的一种模式是“服务端同步”,即微博直播互动系统和第三方互动系统之间做消息同步,从而实现消息共享的效果。发送消息接口和拉取消息接口(主动拉取和回调拉取)提供第三方的消息同步到微博的功能。

互动上行

说明

直播用户上行评论接口


URL

https://api.weibo.com/2/liveim/message/sync.json [POST]


支持格式

JSON


是否需要登录

true 登录授权方式,请参见本WIKI内的 如何登录授权


请求参数

参数字段 字段必选 字段类型 字段说明
access_token true string 采用OAuth授权方式为必填参数,OAuth授权后获得
room_id true string 房间id
ts true long 时间戳(1970-01-01 00:00:00 起毫秒数),要求不得延迟2min以上
msg_type true int 消息类型,参见 消息类型
content true string 消息内容
uid true long 发送者ID
nickname true string 发送者昵称
avatar true string 发送者头像url
sign true string 对sign之外的其他所有参数进行签名的结果 见签名算法
extension false string 消息扩展字段(json object格式,默认为空json object)

消息类型1~14时,各类消息会有一些该类型特有的字段(参见消息体),这些字段应该在当前JSON的sys子JSON中传递,结构如下:

extension = {
    "sys": {
        // 此处出现的字段,见”各类型特有的额外字段“。
        // 如果额外字段列表为空,那么"sys"字段可以不存在。
    },
    // "其它透传的字段"
}
offset false long 发消息的时间距离直播开始的偏移,单位ms。如果不传,或者传的是负数,做0处理,表示当前消息回放时不展示。


返回结果

//成功返回

{
    "error_code":0,    // 0表示成功 其他表示失败。需要看错误消息
    "error_msg":""
}


//失败返回

{
    "error_code": 91XX,
    "error_msg": "xxxxxxxxx"
}

互动下行—Pull方式

说明

微博与接入微博的第三方合作的一种模式是“服务端同步”,即微博直播互动系统和第三方互动系统之间做消息同步,从而实现消息共享的效果。该接口提供第三方从微博直播互动系统拉取该业务方房间消息的一种方式。


第三方发起该请求之后,只要不断开连接,该接口会源源不断的推回该业务方中最新的消息。如果连接意外断开,只要重连之前累计消息数量不超过商定的阈值,消息都会从上次断开的地方继续推送。


由于网络环境复杂,第三方与微博的长连接可能会意外断开;该接口提供一种心跳方式来辅助判断连接的好坏情况。具体方式是由微博端定时向第三方推送心跳消息,如果第三方超过约定时间没有收到数据包或者心跳包,则可以判断连接已经异常,应该将该连接关闭并使用新的连接来接收数据。


接口从认证中取得第三方的appkey,以此appkey作为bizCode来取业务方的消息。


URL

https://exchange.api.weibo.com/2/liveim/message/pull.stream [GET]


支持格式

JSON


是否需要登录

true 登录授权方式,请参见本WIKI内的如何登录授权


请求参数

参数字段 字段必选 字段类型 字段说明
access_token true string 采用OAuth授权方式为必填参数,OAuth授权后获得

返回结果 返回的消息以JSON的方式推送,推送的数据结构如下,每条消息是一个单独的JSON-OBJECT,结构参见消息体

//成功返回

{
    "error_code":0,    // 0表示成功 其他表示失败。需要看错误消息
    "error_msg":"",
     "response": {
          "heartbeat_interval": int   // 心跳间隔的秒数
     }
}
{
    // 消息体
}
{
    // 消息体
}
{
     // 心跳包
}
...

//失败返回

{
    "error_code": 91XX,
    "error_msg": "xxxxxxxxx"
}

心跳包

{
    "heartbeat_interval": int   // 心跳间隔的秒数
}

数据包区分是"消息体"还是"心跳包"的方法:

  • 如果数据包中包含heartbeat_interval字段,则认为是心跳包。
  • 如果数据包中包含msg_type字段,则认为是消息。

关于错误返回值与错误代码,参见 错误码定义

互动下行—Callback方式

说明

如果第三方使用的是HTTP Callback的方式接受微博消息,那么第三方也需要提供一个类似互动上行的接口。要求与那个接口使用相同的参数和返回值。


URL

第三方自定义


支持格式

JSON


HTTP请求方式

POST


是否需要登录

true 登录授权方式,请参见本WIKI内的 如何登录授权


请求参数

参数字段 字段必选 字段类型 字段说明
source true string 申请应用时分配的AppKey,调用接口时候代表应用的唯一身份(采用OAuth授权方式不需要此参数)
room_id true string 房间id
ts true long 时间戳(1970-01-01 00:00:00 起毫秒数)
msg_type true int 消息类型 1 - 评论消息 2 - 点赞消息
content true string 消息内容
uid true long 发送者ID
nickname true string 发送者昵称
avatar true string 发送者头像url
sign true string 对sign之外的其他所有参数进行签名的结果 见签名算法
extension false string 消息扩展字段 参见(json object格式,默认为空json object)

消息类型1~14时,各类消息会有一些该类型特有的字段(参见消息体),这些字段会出现在extension中的sys字段里面,结构如下:

extension = {
    "sys": {
        // 此处出现的字段,见”各类型特有的额外字段“。
        // 如果额外字段列表为空,那么"sys"字段可以不存在。
    },
    // "其它透传的字段"
}
offset false long 发消息的时间距离直播开始的偏移,单位ms。如果不传,或者传的是负数,做0处理,表示当前消息回放时不展示。


返回结果

//成功返回

{
    "error_code":0,    // 0表示成功 其他表示失败。需要看错误消息
    "error_msg":""
}


//失败返回

{
    "error_code": 91XX,
    "error_msg": "xxxxxxxxx"
}

签名算法

输入:

- 键值对列表

- 签名时用的appsecret


输出:

签名结果字符串


算法:

- 键值对列表的每一项按照key=value的方式组成该项的字符串,各项的字符串按照对应key的字典序排序(key不相同),然后用半角"&"符号连接形成一个字符串。

- 字符串按照UTF-8编码得到一个字节序列input, secret的字符串按UTF-8编码生成一个字节序列作为key,用hmac-md5的方式计算哈希值的字节序列,哈希值字节序列使用URL-safe-Base64编码,取第6到16个字符作为结果输出。


算法示例:

假设输入是:
kv-pair: {"a":"1", "c":"jerry", "b":"tom"}
appsecret:  123456
连接成的字符串就是:
a=1&b=tom&c=jerry
hmac-md5("a=1&b=tom&c=jerry",123456)
输出得到字节数组:[-117, -27, -78, -5, 73, 68, -64, -50, 4, 21, 16, -55, -55, -39, -31, -15]
转成URL-safe的base64字符串:i-Wy-0lEwM4EFRDJydnh8Q==
取6到16位(初始位为0)子串,包含第6位,不包含第16位,共10位:lEwM4EFRDJ


签名结果:

lEwM4EFRDJ

数据说明

房间信息

{
   "room_id": string,
   "room_sys_id": uint64,
   "name": string, 
   "pic_url": string,
   "introduction": string,
   "notification": string,
   "type": int,
   "status": int,          // 房间当前的状态,0-未开始,1-正在直播,2-已删除,3-结束(可回放),4-推迟,5-结束(不可回放),6-主播离线
   "created_at": unit64,   // 创建时间,距离1970-01-01 00:00:00的毫秒数
   "start_time": unit64,   // 直播开始时间戳(秒),默认为0,表示未记录
   "end_time": unit64,   // 直播结束时间戳(秒),默认为0,表示未记录
   "update_time": uint64,  // 最后一次更新时间,单位与创建时间相同
   "owner_info": {         // 主播的信息
     "uid": uint64,
     "user_system": string // 主播所在的用户体系,"0"表示微博
   },
   "counters": {           // 房间的各种计数子结构
     "onlines": int,       // 在线人数
     "praise_count": int,  // 赞数
     "play_count": int     // 播放次数
   },
   "setting": {            // 房间的一些设置选项
     "max_onlines": int,   // 房间允许的最大在线人数
     "allow_comment": int,  // 当前房间是否允许发言,0-不允许,1-允许
     "censor_policy": int,  // 当前房间消息审查策略,0-不进行先审查后发,1-进行先审查后发
     "allow_praise": int  // 当前房间是否允许点赞,0-不允许,1-允许
     "heartbeat_interval": int  //主播心跳间隔
   }

}


消息类型

  • 1 - 聊天消息
  • 2 - 赞消息
  • 3 - 点亮主播消息
  • 4 - 禁言消息
  • 5 - 礼物消息
  • 6 - 公告消息
  • 7 - 分享直播消息
  • 8 - 关注主播消息
  • 9 - 加入购物车消息接口已下线
  • 10 - 商品消息接口已下线
  • 11 - 直播变更消息(房间的任何状态变更都会进行push)
  • 12 - 加入/退出房间消息
  • 13 - 打赏消息
  • 14 - 管理员变更消息
  • 15 - 系统消息(该消息"sender_info"字段为空,"send_info":{})
  • 16 - 置顶/取消置顶评论消息
  • 100 - 自定义消息类型

消息体

{
    "room_id":string,      // 房间号  【basic】
    "room_sys_id": uint64, // 房间ID (内部)  【basic】
    "msg_type":int,        // 消息类型,见“消息类型说明”  【basic】
    "mid":long,             //【basic】
    "sender_info":{
        // 发送者的用户信息,见“用户信息”
    },
    "content":string,      // 消息内容    【basic】
    "content_css":{  
        // 消息样式,json格式、包含对消息的描述 目前对msg_type 5,6,8 启用,见“content_css说明”
    }, 
    "extension":string,    // 消息的扩展字段
    "offset": long,        // 消息距离视频开始时间间隔,单位ms
    "created_at":long      // 时间戳,距离1970-01-01 0:00:00 GMT的毫秒数  【basic】
    // 如果还有其他字段,这些字段在此处继续,相关字段见“各消息类型的额外字段”
}

标注为【basic】的字段是一个消息结构体的基础字段,每条消息都会带有!!

content_css字段类型是json-object的字符串表示,描述消息内容显示样式

{
    "suffix": "速速转发",         // 后缀,可以为图片URL
    "suffix_color": "#0000FF",    // 后缀颜色,前缀为图片时无效
    "content_color": "#FF0000",   // 消息内容显示颜色
    "prefix": "系统消息:",        // 消息前缀,如 公告:系统消息:等 ,可以为图片URL
    "prefix_color": "#DFDFDF",    // 前缀颜色,前缀为图片时无效
    "bg_color": "#D2D2D2",       // 背景色
    "bg_alpha": "0"             // 背景色透明度,0为全透明
}        

extension字段类型是json-object的字符串表示

// 打赏(msg_type=13)
{
    "user":string,  // 姓名,如:"张三"
    "price":string  // 金额,如:"888"
}
//置顶/取消置顶(msg_type=16) 
{
    "pinned_mid"    //置顶or取消置顶的那条消息的mid
}

//用户列表信息 (msg_type=15,sys_msg_type=6) 
{
    "list": [
      {
        "uid": long, //用户ID
        "avatar": string, //头像地址
        "user_system": string, //系统类型,0表示微博
        "user_auth_type": int 
      },
      {
        "uid": 1677969704,
        "avatar": "http://tva1.sinaimg.cn/crop.0.0.180.180.180/6403c928jw8f9rtt48i0mj2050050mxl.jpg",
        "user_system": "0",
        "user_auth_type": 0
      },
      ...
    ]
 }
             


各类型特有的额外字段

聊天消息,msg_type=1
"msg_behavior":uint32  //消息的显示行为  0:默认 1.弹幕
 
点赞消息,msg_type=2
"praises_count":int    // 当前总赞数
"inc_praises":long     // 用户点赞次数
"praise_interval":long  // 赞间隔 ms
"praise_num":int       // 间隔内飘赞数
 
禁言,msg_type=4
"shut_info":{          // 被禁言的用户信息
    "shutted_until":uint32  //禁言结束的剩余时间,单位s
    "members":[              //被禁言用户列表
     {
       "uid":uint64          //被禁言用户的UID
       "user_system":string  //被禁言用户所属系统
     }
   ]
}
 
发送礼物,msg_type=5
// content字段为空(empty或者不存在)时,表示是连击礼物的中间状态,当finish=2时,推送的消息中content不为空
"anchor_coins":uint64               //主播金币数
"gift_info":{
    "id":string            //礼物id
    "name":string         //礼物名字,以id为准,礼物名字在最后一次下发可能为空
    "type": int            //礼物类型,1表示普通礼物,2表示连击礼物
    "total_num":int        //当前总共送出有效礼物数 type=2时才有效
    "inc_interval":int     //礼物增加的时间间隔,单位为ms  type=2时才有效
    "inc_num":int          //在inc_interval时间内,增加多少个礼物  type=2时才有效
}
 
 
房间变更,msg_type=11
"live_status":int      // 表示直播的状态
"room_info": {
    // 房间信息体,见“房间信息”
}
 
加退房间,msg_type=12
"exit_or_enter_room":int  // 0:退出 1:进入
"room_info": {
    // 房间信息体,见“房间信息”
}
 
增加删除管理员,msg_type=14
"admin_info":{            // 被增加或删除的用户信息
    "uid":uint64              //管理员的UID
    "user_system":string      //管理员所属系统
    "type":int               //操作类型 1 增加 2 删除
}
 
系统消息,msg_type=15    //send_info为空{}
"sys_msg_type":int    //系统消息子类型
 
置顶/取消置顶消息,msg_type=16
"msg_behavior":uint32  //消息的显示行为  2:置顶 3.取消置顶

错误码定义

错误码 错误说明
9101 认证失败
9102 内部错误
9103 数据格式错误
9104 消息内容包含垃圾信息
9105 已经存在
9106 数据不合法。与9103不同的地方在于:9103是数据格式错误, 比如int型的参数传了一个无法解析成int的字符串。而当前错误码表示数据格式本身没有问题, 但是是一个不合法的数据, 比如ID对应的实体不存在
9107 房间不允许发言
9108 用户不存在
9109 房间不存在
9110 token解析错误
9111 房间状态不正确
9112 用户被禁言
9113 当前操作不允许
1019 当前操作不支持

直播接口

请参考直播接口文档

文档更新时间: 2019-11-27