NexTalk设计说明书

文档版本: 5.6 发布时间: 2014/10/15

概述

本文档为NexTalk5.x版本的设计说明书,详细介绍NexTalk系统架构、模块设计、交互接口与业务流程。开发者可参考本文档,理解NexTalk的整体结构,开发新的WebIM插件,或新的WebIM应用。

本文档以Flask(Python)框架的WebIM插件为示例,详细介绍集成Flask框架集成WebIM的开发过程。然后介绍NexTalk系统架构,各模块设计,以及模块间的交互接口和业务流程。

NexTalk简介

NexTalk是基于WEB标准协议设计的,主要应用于WEB站点的,简单开放的即时消息系统。可快速为社区微博、电子商务、企业应用集成即时消息服务。

NexTalk架构上分解为:Webim业务服务器 + 消息路由服务器 两个独立部分,遵循 Open Close的架构设计原则。WebIM插件方式与第三方的站点或应用的用户体系开放集成,独立的消息服务器负责稳定的连接管理、消息路由和消息推送。

NexTalk的架构设计上有以下几个特点:

  1. 开放设计,通过开放源码的WebIM开发包,可与站点或应用的用户体系、群组关系、消息处理无缝集成。

  2. 快速集成,只需要实现简单的集成接口,5分钟启动demo,1小时完成集成,2天完成接口开发。例如Java版本,NexTalk提供了Struts、Spring的集成开发包,一般只需要WebimPlugin接口即可。

  3. 方便定制,WebIM插件和前端代码全部开源,好友关系、消息路由全部可通过WebIM插件接口定制或扩展。例如实现动态好友关系,消息拦截过滤等。

NexTalk默认界面设计,简洁嵌入站点或应用的右下角,无需安装任何客户端:

NexTalk Screenshot

设计目标

NexTalk是基于WEB标准协议设计,主要应用于网站的即时消息系统。设计目标是为社区网站、电子商务、企业应用(CRM/ERP等)以及其他各类型站点快速提供即时消息服务。

NexTalk提供了丰富的集成开发包,可与PHP、Java、.NET、Python、Rails开发站点快速集成。为国内常用开源社区系统DiscuzX、PhpWind、ThinkSNS、记事狗、近乎SNS、UCHome等,开发了可即装即用WebIM插件。

技术架构

NexTalk设计架构上由三部分组成:

  1. 前端浏览器界面:采用标准的HTML/Javascript/AJAX开发设计,遵循MVC设计模式,封装成多个App,界面可灵活配置,并支持二次开发。

  2. WEB业务服务器:一般以WebIM开发包或插件方式,通过接口与第三方站点的用户体系和数据库集成在一起,以方便站点定制自己的业务逻辑。

  3. 消息路由服务器: 消息服务器由Erlang开发的独立集成,负责与浏览器的长连接,消息路由分发与推送,并支持JSONP长轮询、WebSocket长连接和MQTT等多协议。

NexTalk Screenshot

NexTalk技术实现上有下述几个特点:

  1. Erlang技术开发的大规模并发集群独立消息服务器,基于MQTT、WebSocket、JSONP等技术构建,通过服务器的分布式集群,可扩展支持到100万并发用户。

  2. 通过跨域的JSONP长轮训、WebSocket长连接,在Web上实现快速、稳定、准实时的即时消息发送接收。

  3. 支持无中断页面切换和多页面消息同步等WebIM的核心技术。WebIM与桌面IM软件有不同的应用场景,比如用户频繁切换页面,同时打开多个网站页面等。NexTalk的系统架构支持多页面、多Tab的即时消息同步。

  4. 对站点自身几乎无性能压力。跨域的JSONP长轮询、WebSocket,有效避免了WebIM请求占用主站的连接资源。

模块及接口

前端浏览器界面

前端界面采用标准HTML/Javascript/AJAX技术开发,极简主义界面设计风格,直接嵌入站点页面横条方式浮动在浏览器右下方。前端界面的Javascript代码、图片、CSS文件全部封装好,直接放入集成网站的静态文件目录即可使用。

前端界面与网站WebIM插件通过AJAX接口,与消息服务器建立跨域Jsonp或WebSocket。

 One2One Chat

网站WebIM插件

WebIM插件模块负责与网站用户资料、好友关系、群组关系等集成,并转发关系数据、即时消息、用户现场状态给服务器进行分发。WebIM插件集成时需要进程二次开发,处理前端AJAX请求和集成站点数据。

NexTalk为常用编程语言(PHP、Java、.NET、Python)和Web框架(Spring、Struts、.NET MVC、Rails、ThinkPHP)提供了二次开发包,以支持快速集成。

WebIM插件或开发包下载: http://nextalk.im/packages/

WebIM插件与前端界面通过AJAX接口,与消息服务器通过HTTP REST接口。

消息路由服务器

消息路由服务器由Erlang编写,独立部署运行。主要处理消息路由和大量的JSONP、WebSocket并发长连接。

消息路由器通过Jsonp、WebSocket向前端界面直接推送消息,提供HTTP接口给WebIM插件。

前端界面设计

Javascript链接

一般在网站的layout.html或footer.html等全局模版,插入一段Javascript链接,就可以集成NexTalk的前端界面:

<script type=“text/javascript” src=“/webim/boot.js”></script>
<script type=“text/javascript” src=“/Webim/boot.do”></script>

boot.js加载

boot.js是一般由服务端WebIM插件动态生成,配置全局的_IMC变量,加载调用其他Javascript代码和CSS静态资源:


var _IMC = {
    product: 'flask',
    version: ‘5.4.1’,
    path: ‘http://localhost/,
    is_login: '1',
    login_options: "",
    user:{“uid”:”1”,"id":"admin","nick":"admin","avatar":"#","show":"unavailable","url":"#","status":""},
    setting: {},
    menu: "",
    enable_chatlink: false,
    enable_shortcut: false,
    enable_menu: false,
    enable_room: true,
    enable_noti: false,
    theme: 'blitzer',
    local: 'zh-CN',
    upload: true,
    showUnavailable: true,
    jsonp: false,
    min: window.location.href.indexOf("webim_debug") != -1 ? "" : ".min"
};
_IMC.script = window.webim ? '' : ('<link href="' + _IMC.path + 'static/webim.' + _IMC.production_name + _IMC.min + '.css?' + _IMC.version + '" media="all" type="text/css" rel="stylesheet"/><link href="' + _IMC.path + 'static/themes/' + _IMC.theme + '/jquery.ui.theme.css?' + _IMC.version + '" media="all" type="text/css" rel="stylesheet"/><script src="' + _IMC.path + 'static/webim.' + _IMC.product + _IMC.min + '.js?' + _IMC.version + '" type="text/javascript"></script><script src="' + _IMC.path + 'static/i18n/webim-' + _IMC.local + '.js?' + _IMC.version + '" type="text/javascript"></script>');
_IMC.script += '<script src="' + _IMC.path + 'webim.js?' + _IMC.version + '" type=“text/javascript"></script>';

document.write( _IMC.script );

静态资源加载

boot.js执行后,前端动态加载WebIM界面的资源文件(以flask插件为例),文件目录结构如下:

文件/目录 说明
webim.css webim基础CSS库
webim.min.css webim基础CSS库压缩
webim.js webim基础js库
webim.min.js webim基础js库压缩
webim.flask.js webim与flask集成js库
assets 声音等资源文件
i18n 国际化资源
images 图片资源
themes theme资源

资源加载顺序:

  1. webim.css, webim.js基础库
  2. webim.flask.js flask集成js库,该库渲染并启动WebIM前端

webim.flask.js

webim.{product}.js类似名称文件,是webim与不同框架或站点集成的前端渲染启动文件。该文件先配置AJAX接口URL,然后配置界面App和参数,最后渲染界面并启动WebIM (调用Online的AJAX接口发送上线请求)。

webim.flask.js是flask开发框架的前端文件,文件内容示例如下:

(function(webim) {
    var path = _IMC.path;
    webim.extend(webim.setting.defaults.data, _IMC.setting );
    var webim = window.webim;
    //配置AJAX接口路径
    webim.route( {
        online: path + "/webim/online",
        offline: path + "/webim/offline",
        deactivate: path + "/webim/refresh",
        message: path + "/webim/message",
        presence: path + "/webim/presence",
        status: path + "/webim/status",
        setting: path + "/webim/setting",
        history: path + "/webim/history",
        clear: path + "/webim/clear_history",
        download: path + "/webim/download_history",
        members: path + "/webim/members",
        join: path + "/webim/join",
        leave: path + "/webim/leave",
        buddies: path + "/webim/buddies",
        notifications: path + "/webim/notifications"
    } );

    webim.ui.emot.init({"dir": path + "/static/images/emot/default"});
    var soundUrls = {
        lib: path + "/static/assets/sound.swf",
        msg: path + "/static/assets/sound/msg.mp3"
    };
    var ui = new webim.ui(document.body, {
        imOptions: {
            jsonp: _IMC.jsonp
        },
        soundUrls: soundUrls
    }), im = ui.im;

    if( _IMC.user ) im.setUser( _IMC.user );
    if( _IMC.menu ) ui.addApp("menu", { "data": _IMC.menu } );
    if( _IMC.enable_shortcut ) ui.layout.addShortcut( _IMC.menu );
    //配置界面App
    ui.addApp("buddy", {
        showUnavailable: _IMC.show_unavailable,
        is_login: _IMC['is_login'],
        disable_login: true,
        loginOptions: _IMC['login_options']
    } );
    if( _IMC.enable_room )ui.addApp("room", { discussion: false});
    if( _IMC.enable_noti )ui.addApp("notification");
    ui.addApp("setting", {"data": webim.setting.defaults.data});
    //界面渲染
           ui.render();
           //IM上线
    _IMC['is_login'] && im.autoOnline() && im.online();
})(webim);

前端AJAX接口

前端界面渲染后,WebIM启动用户上线。前端界面与WEB服务器(WebIM插件)通过下述AJAX接口通信:

名称 请求URL 请求方法 说明
online /webim/online POST 上线请求
offline /webim/offline POST 下线请求
message /webim/message POST 发送即时消息
presence /webim/presence POST 现场变更请求
status /webim/status POST 发送状态
setting /webim/setting POST 更改个人设置
history /webim/history GET 读取历史消息
clear /webim/clear_history POST 清除历史消息
download /webim/download_history GET 下载历史消息
members /webim/members GET 读取群组在线成员
join /webim/join POST 加入群组
leave /webim/leave POST 离开群组
buddies /webim/buddies GET 读取好友列表
notifications /webim/notifications GET 读取通知

前端交互流程

前端界面加载渲染完成后,与网站WebIM插件和消息服务器交互,实现即时消息业务流程。

用户上线

概述

前端界面向WebIM插件发送用户上线的AJAX请求,WebIM插件向消息服务器转发上线请求。

流程描述

title Online Sequence

Browser->WebServer: POST /webim/online (AJAX)

WebServer->IM Server: POST /presences/online (HTTP) 
IM Server-->WebServer: Reply

WebServer-->Browser: Reply with IM Server Address

loop JSONP long Poll
Browser->IM Server: GET /packets
IM Server-->Browser: JSON DATA 
end

流程图

Online Sequence

用户下线

概述

用户退出网站、或直接关闭网站页面、或手工设置“离线“,将触发用户离线、登出消息服务器流程。

流程描述

title Offline Sequence

Browser->Web Server: POST /webim/offline
Web Server->IM Server: POST /presences/offline
IM Server-->Web Server: ok

Web Server-->Browser : ok

流程图

Offline Sequence

获取好友列表

概述

前端界面收到好友上线的现场(presence)消息后,触发读取好友详细信息的业务流程。

流程描述

title Get Buddies Sequence

Browser->Web Server: POST /webim/buddies
Web Server->IM Server: GET /presences
IM Server-->Web Server: Presences JSON
Web Server-->Browser: Reply(Buddies JSON)

流程图

Get Buddies

发送即时消息

概述

用户上线成功后,可在“联系人”中选取好友,或点击页面聊天按钮,打开聊天窗口,发送即时消息。界面如下:

Chat Screenshot

流程描述

title Send Message Sequence

Browser1->Web Server: POST /webim/message
Web Server->IM Server: POST /messages
IM Server-->Browser2: PUSH message
IM Server-->Web Server: ok

Web Server-->Browser1: ok

流程图

Send Message Sequence

发送现场

概述

用户可通过“联系人”界面上方的下拉按钮,更改自身的现场(Presence)状态,操作界面如下:

Presence Screenshot

流程描述

title Publish Presence Sequence

Browser1->Web Server: POST webim/presence
Web Server->IM Server: POST /presences/show
IM Server-->BrowserX: PUSH presence
IM Server-->Web Server: ok
Web Server-->Browser1: ok

流程图

Publish Presence Sequence

发送输入状态

概述

用户打开聊天窗口与好友通信时,会话界面会自动检测用户的输入状态,并向对方发送正在输入状态。

流程描述

title Send Status Sequence

Browser->Web Server: POST /webim/status
Web Server->IM Server: POST /statuses
IM Server-->BrowserX: PUSH status
IM Server-->Web Server: ok

Web Server-->Browser: ok

流程图

Send Status Sequence

获取群组(聊天室)成员

概述

用户打开房间群聊窗口后,会触发获取房间在线用户列表流程,房间在线用户会显示界面如下:

Group Chat

流程描述

title Get Room Members Sequence

Browser->Web Server: GET webim/members
Web Server->IM Server: GET /room/{roomId}/members
IM Server-->Web Server: Member Presences JSON

Web Server-->Browser: Members Json

流程图

Room Members

加入或离开群组

概述

用户打开群组聊天窗口,触发加入、离开群组流程。

流程描述

title Join/Leave Room Sequence

Browser->Web Server: POST /webim/join | leave
Web Server->IM Server: POST /rooms/{roomId}/join | leave
IM Server-->Web Server: ok
Web Server-->Browser: ok

流程图

Room Sequence

读取历史消息

概述

用户打开聊天窗口,前台会自动加载双方最近的历史聊天记录。

流程描述

title Get Histories Sequence

Browser->Web Server: GET webim/history
Web Server-->Browser: Histories Json

流程图

Histories Sequence

清除历史消息

概述

用户打开聊天窗口,可以通过”清除“按钮,清除界面上的聊天记录。

流程描述

title Clear Histories Sequence

Browser->Web Server: POST webim/clear_history
Web Server-->Browser: ok

流程图

Clear Histories Sequence

用户个人设置流程

概述

用户可通过“设置”按钮,更改个性化设置。

流程描述

title Setting Sequence

Browser->Web Server: POST webim/setting 
Web Server-->Browser: ok

流程图

Setting Sequence

WebIM插件设计

概述

WebIM插件处理前端AJAX请求,与网站用户资料、好友关系、群组关系集成,并转发请求、消息、状态到消息路由服务器。

WebIM插件直接与网站Web服务器运行在一起,采用网站相同的语言和Web框架开发。WebIM插件代码包括两个部分:

  1. 消息服务器客户端库,例如ruby的gem:https://github.com/webim/webim-gem,python的pip:https://github.com/webim/webim-python

  2. 网站集成代码,例如以MVC框架为例子,需要开发控制器(Controller)处理前端的AJAX请求,模型(Model)与网站数据库集成。

现有开发包

开发包下载地址: http://nextalk.im/packages

Web框架 开发包 ⽀持版本
Spring3 https://github.com/webim/webim-for-spring3 Spring3
Struts2 https://github.com/webim/webim-for-struts2 Struts2
Struts1 https://github.com/webim/webim-for-struts1 Struts1
.NET https://github.com/webim/webim-plugin-dotnet4 DotNet4
Rails https://github.com/webim/webim-for-rails Rails4
ThinkPHP https://github.com/webim/webim-for-thinkphp ThinkPHP 3.x
CodeIgniter https://github.com/webim/webim-for-codeigniter CodeIgniter
PHP4 https://github.com/webim/webim-for-php4 ThinkPHP 3.x
PHP5 https://github.com/webim/webim-for-php5 CodeIgniter
SlimFramework https://github.com/webim/webim-for-slimframework SlimFramework
Django https://github.com/webim/webim-for-django Django

现有插件

插件下载地址: http://nextalk.im/plugins

开源社区 插件下载 支持版本
DiscuzX http://nextalk.im/plugins/discuzx PHP不低于5.1,Discuz X1, X1.5, X2.0, X2.5,X3.0
ThinkSNS http://nextalk.im/plugins/thinksns PHP5.0以上,ThinkSNS V3
记事狗 http://nextalk.im/plugins/jishigou PHP5.0以上,记事狗 V4
PhpWind http://nextalk.im/plugins/phpwind PHP5.1以上,PHPWind 7.x, 8.x
PhpWind9 http://nextalk.im/plugins/phpwind9 PHP5.1以上,PHPWind 9.x
Discuz http://nextalk.im/plugins/discuz Discuz7.2
UCHome http://nextalk.im/plugins/uchome UCHome2.0+
近乎SNS http://nextalk.im/plugins/jinhusns .NET4 MVC, C#, 近乎SNS4.x

全新插件开发流程

  1. 编译静态文件static,配置webim.${product}.js
  2. 集成webim配置文件,配置消息服务器host、port、apikey等参数
  3. controller的boot方法,动态返回boot.js
  4. controller处理webim的ajax请求
  5. 集成站点的用户、群组等数据
  6. 开发history模型、setting模型
  7. 嵌入boot.js到显示webim的页面

WebIM插件接口

用户上线接口

概述

用户上线流程接口。

请求URL

HTTP POST /webim/online

请求参数

参数名 类型 是否必需 描述
show string 用户现场: available, unavailable
buddy_ids string 显示在tabs中的好友列表,需要online后取得好友信息和聊天记录
chatlink_ids string 显示在当前页面上的聊天按钮id列表
room_ids string 显示在tabs中的群组列表,需要online后取得好友信息和聊天记录

成功返回

HTTP 200 JSON数据:

{
“success”: true,
“server_time”: 1281443447248, 
“user”: user对象,
 “connection”: connection对象,
 “buddies”: buddy对象列表, 
 “rooms”: room对象列表, 
 “new_messages: []
}
错误返回

HTTP 500

{"success":false,"error":"IM Server Not Found"}

用户下线接口

概述

用户下线流程接口。

请求URL

HTTP POST /webim/offline

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
status string offline

成功返回

HTTP 200 “ok”

好友列表接口

概述

前端获取好友流程接口。

请求URL

HTTP GET /webim/buddies

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
ids string 逗号分隔的好友id列表

成功返回

HTTP 200 JSON数据: [ buddy对象数组 ]

邀请用户加入房间接口

概述

前端界面上创建临时讨论组,并邀请好友加入。

请求URL

HTTP POST /webim/invite

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
id string room id
nick string room昵称
members string 邀请的好友id列表

成功返回

HTTP 200 JSON数据: room对象

失败返回

加入群聊接口

概述

加入群组业务流程接口。

请求URL

HTTP POST /webim/join

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
id string room id

成功返回

HTTP 200 JSON数据: room对象

失败返回

离开群聊接口

概述

离开群组业务流程接口。

请求URL

HTTP POST /webim/leave

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
id string room id

成功返回

HTTP 200 “ok”

失败返回

获取群组成员接口

概述

获取群组成员接口。

请求URL

HTTP GET /webim/members

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
id string room id

成功返回

HTTP 200 JSON数据: member对象列表

读取历史记录接口

概述

读取历史记录接口。

请求URL

HTTP GET /webim/history

请求参数

参数名 类型 是否必需 描述
id string 需要取得的历史记录联系人或群组列表
type string 记录类型,chat: 一对一, grpchat: 多对多群组

成功返回

HTTP 200 JSON数据:history对象列表

失败返回

清除历史记录接口

概述

前端清除历史记录。

请求URL

HTTP POST /webim/clear_history

请求参数

参数名 类型 是否必需 描述
id string 用户id

成功返回

HTTP 200 “ok”

发送即时消息接口

概述

前端发送即时消息接口。

请求URL

HTTP POST /webim/message

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
type string 记录类型,chat: 一对一, grpchat: 多对多群组
offline bool 是否离线消息,默认false
to string 是v 接收消息用户ID
style string 消息css样式
body string 消息内容

成功返回

HTTP 200

{status: “ok”} 
失败返回

HTTP 200

{status: “error”, message: “xxxxx”}

发送现场状态接口

概述

前端变更用户现场状态。

请求URL

HTTP POST /webim/presence

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
show string 现场状态:available,unavailable,dnd, away, invisible
status string 状态信息

成功返回

HTTP 200 “ok”

失败返回

发送输入状态接口

概述

前端用户输入状态。

请求URL

HTTP POST /webim/status

请求参数

参数名 类型 是否必需 描述
ticket string 通信令牌
to string
show string typing

成功返回

HTTP 200 “ok”

失败返回

变更个人设置接口

概述

前端变更个人设置接口。

请求URL

HTTP POST /webim/setting

请求参数

data: "{play_sound: true,buddy_sticky: true}”

data参数值是json字符串,参数如下:

参数名 类型 是否必需 描述
data string 所有参数的JSON字符串(用户数据库存储)
play_sound bool 是否播放提示音
buddy_sticky bool 保持聊天窗口始终打开
minimize_layout bool 收缩工具条
msg_auto_pop bool 新消息时自动弹出聊天窗口

成功返回

HTTP 200 “ok”

失败返回

读取站内通知接口

概述

前端读取站内通知。

请求URL

HTTP GET /webim/notifications

请求参数

成功返回

HTTP 200 JSON数据:

[{
"text":"Susan wants to be friends with you.",
“link”:"http://test.com/s?id=5"
}]

JSON数据对象

WebIM插件与前端界面通过AJAX接口交互,返回JSON数据对象。

连接(connection)

{
    "domain": “localhost”,
    “ticket”: “uid:demo:0df37e76e75f9d66a6c7”,
    “server”: “http://nextalk.im:8080/v5/packets”,
    “jsonpd”: “http://nextalk.im:8080/v5/packets”,
    “websocket”: “http://nextalk.im:8080/v5/wsocket”
}
参数名 类型 是否必需 描述
domain string 域名,API注册域名
ticket string 本次通信令牌,用于浏览器与消息服务器建立连接
server string 兼容历史版本
jsonpd string JSONPD地址
websocket string WebSocket地址

用户(user)

{
    "id": ‘jack',
    "nick": “Jack”,
    “presence”: “online”,
    "show": "available",
    "avatar": “jack.jpg",
    "url": "space.php?uid=2",
    "status": "I'm free.", 
    "status_time": "10:55"
}
参数名 类型 是否必需 描述
id string 用户唯一ID
nick string 用户昵称或姓名
presence string 用户现场: online, offline
avatar string 用户头像地址
status string 用户状态显示信息
show string 用户状态: 'available','away', 'chat', 'dnd', ‘invisible','unavailable'
status_time string 用户状态时间

聊天记录(history)

{
    "type": “chat",
    "to": “susan",
    "from": “jack",
    "nick": “Jack",
    "style": “color:#bbb;",
    "body": “Hello",
    "timestamp": 1246883572400
}
参数名 类型 是否必需 描述
type string 记录类型,chat: 一对一, grpchat: 多对多群组
to string 接收消息用户ID
from string 发送消息用户ID
nick string 发送消息用户名称
style string 消息css样式
body string 消息内容
timestamp int 消息发送时间,时间为javascript时间,php中使用microtime(true)*1000

好友(buddy)

{
   "id": 'susan',
    "nick": “Susan”,
    "group": "friend",
    "avatar": "susan.jpg",
    "url": "space.php?uid=2",
    "presence": "online",
    "status": "I'm buzy.",
    "show": "buzy",
    "status_time": "10:55",
    "history": history对象列表
}
参数名 类型 是否必需 描述
id string 好友唯一ID
nick string 好友昵称或姓名
presence string 好友线离线["online", "offline"],默认offline
group string 好友所属分组
avatar string 好友头像地址
status string 好友状态显示信息
show string 好友现场: 'available','away','chat', 'dnd','invisible'
status_time string 好友状态时间
history array 好友和当前用户聊天记录,如果没有则会新建连接从webim/history读取

群组(room)

{
    "id": "room1",
    "nick": "Free space",
    "avatar": "room1.jpg",
    "url": "group.php?uid=2",
    "all_count": 10,
    "count": 5,
    "blocked": false,
    "members": &members,
    "history": &history
}
参数名 类型 是否必需 描述
id string 群组唯一ID
nick string 群组名称
avatar string 群组图片地址
all_count int 群组所有用户数
count int 群组在线用户数
blocked bool 是否被当前用户屏蔽,此字段存在settings的blocked_rooms中
members object 群组在线成员,如果没有会新建连接从webim/members读取
history object 群组聊天记录,如果没有则会新建连接从webim/history读取

群组成员(member)

{
   “id”: “uid1”,
   “nick”: “user1”,
   “presence”: “online”,
    “show”: “available”
}
参数名 类型 是否必需 描述
id string 群组唯一ID
nick string 群组名称
presence string 成员在线离线: "online","offline"
show string 成员现场状态: 'available','away', 'chat', 'dnd', 'invisible'

通知(notification)

{
   “text”: “有3个关注用户”
   “link”: “http://localhost/#”
}
参数名 类型 是否必需 描述
text string 通知文本
link string 通知链接

菜单(menu)

{
   “icon”: “http://localhost/app.png”,
   “text”: “应用”,
   “link”: “http://localhost/#”
}
参数名 类型 是否必需 描述
text string 菜单文本
icon string 菜单图标
link string 菜单链接

消息服务器设计

详见 《NexTalk消息服务器设计》