0x00 名词解释:

{}里的表示变量
xnest表示一个聊天室
xnest_id表示该聊天室的id.(用户可以自己取, 最好不超过32个字符)
连接地址:

ws://meet.xpro.im:8080/xgate/websocket/{$xnest_id}?nickname={$nickname}

$xnest_id: 代表聊天室的唯一标识
$nickname: 进入聊天室的昵称(进入一次后, 服务器会把该昵称写入到cookie, 下次不带昵称会默认是用cookie里的, 如果cookie和参数都没有, 服务器会默认使用一个随机的昵称)


0x01 客户端(如js)连接:

客户端通过websocket连接服务器
连接成功后:服务器会推送一些该聊天室的数据过来
格式为json文本,如下:

1.{  
2. "from":"{$sender_id}",
3. "xnest":"{$xnest_id}",
4. "type":"{$type}",
5. "payload":"{$payload}",
6. "send_time":"{$time}"
7.
}
  • from: 表示发送者的唯一id;
  • xnest:表示该聊天室的唯一id
  • type:表示该消息的类型, 主要有: members | member_count | normal | join | leave | self | changename | history | private | audio | picture |
  • payload:消息的有效内容
  • send_time:该消息发送出来的时间

当type为audio或者picture时, 消息体payload实际为一个url

服务按如下次序推送消息过来:

1.接收自己在该聊天室的唯一id

类型为:self, 有效内容为自己的id.
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"self",
5. "payload":"<0.31891.2>",
6. "send_time":"2015-4-8 14:2:6"
7.
}

2.接收该聊天室的成员数量

类型为:member_count,有效内容为1, 及表示当前成员数量为1
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"member_count",
5. "payload":1,
6. "send_time":"2015-4-8 14:2:6"
7.
}

3.接收成员列表

类型为:members, 内容为json数组, 包含当前所有聊天室成员的pid和nickname
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"members",
5. "payload":[{"pid":"<0.31891.2>","nickname":"小明"}],
6. "send_time":"2015-4-8 14:2:6"
7.
}

4.接收该聊天室的历史记录, 目前只会保留一定数量的记录

类型为:history,有效内容为第一层的payload, 格式是个列表, 每条记录包含发送者id, 内容和时间 , 还有该条消息的类型
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"history",
5. "payload":[
6. {"from":"<0.1897.0>","payload":" 12121435131197391", "type":"text", "send_time":"2015-06-24"},
7. {"from":"<0.1897.0>","payload":" http://meet.xpro.im/123242112312", "type":"audio", "send_time":"2015-06-24"},
8. {"from":"<0.1897.0>","payload":" 大大的1435131192974", "type":"text", "send_time":"2015-06-24"},
9. {"from":"<0.1897.0>","payload":"爱上对方1435131191173", "type":"text", "send_time":"2015-06-24"}]
,
10. "send_time":"2015-4-8 14:2:6"
11.
}

0x02 连接建立成功后

连接保持期间, 如果有新加入的成员进来, 老成员离开 , 消息接收, 服务端都会推送一条消息给客户端,如下:

1.接收新近成员消息(当有新成员加入聊天室时)

类型为:join, payload为该加入成员的昵称, 加入成员的id在from字段里.
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"join",
5. "payload":"黑旋风李逵",
6. "send_time":"2015-4-8 14:2:6"
7.
}

2. 接收离开成员消息(当有其他成员离开聊天室时候)

类型为:leave,payload为固定的leave. 离开成员的id在from字段里.
例子:

1.{
2. "from":"<0.31916.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"leave",
5. "payload":"leave",
6. "send_time":"2015-4-8 14:23:28"
7.
}

3. 普通消息的发送(这里就直接发送消息体就可以了, 没有格式.)

比如我发送了: 大家好!
js客户端可能是如下代码:

1.ws.send("大家好");

4. 普通消息接收(及其他成员发送的消息)

类型为:normal, payload就是成员发送的消息.如上例,payload里就是大家好.from就是发送者的id.
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"normal",
5. "payload":"大家好",
6. "send_time":
7. "2015-4-8 14:25:30"
8.
}

5. 私聊消息的发送与接收

在一个聊天室里如果想单独发送信息给某位成员可以通过指令

1.@to:$pid|$msg  

的格式发送
比如:

1.@to:<0.31891.2>|今天你吃饭了吗?

对应的pid(<0.31891.2>)用户就会收到一条如下的private类型的消息:
类型为: private

1.{
2. "from":"<0.31890.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"private",
5. "payload":"今天你吃饭了吗?",
6. "send_time":"2015-4-8 14:2:6"
7.
}

6. 语音消息的发送与接收

语音消息是通过二进制的方式发送的, 在发送语音内容之前, 需要先发送一个字节(8位)的数字1,在紧接着发送语音

二进制的语音消息被服务端接收后会转换成文本类消息, 同时类型会变成audio类型
有效的消息payload为一个url地址, 客户端可通过点击url等手段去播放语音消息

1.{
2. "from":"<0.31890.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"audio",
5. "payload":"http://meet.xpro.im:8080/14009e12d791e664fc0175aecb31d833/1452482123561863",
6. "send_time":"2015-4-8 14:2:6"
7.
}

7. 图片消息的发送与接收

图片消息也是通过二进制的方式发送的, 在发送图片内容之前, 需要先发送一个字节(8位)的数字2,在紧接着发送图片

二进制的图片消息被服务端接收后会转换成文本类消息, 同时类型会变成picture类型
有效的消息payload为一个url地址, 客户端可通过再次发起一个http请求来显示图片

1.{
2. "from":"<0.31890.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"picture",
5. "payload":"http://meet.xpro.im:8080/14009e12d791e664fc0175aecb31d833/1452482123561863",
6. "send_time":"2015-4-8 14:2:6"
7.
}

8. 用户昵称改变昵称

用户可发送 @changename:新昵称 来修改自己的昵称.发送后服务器会广播消息到所有用户
类型为:changename, payload成员修改后的昵称, 该成员的id在from字段里.
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"changename",
5. "payload":"黑旋风李逵",
6. "send_time":"2015-4-8 14:2:6"
7.
}

9. 用户获取更多历史聊天记录

用户可发送 @history:$cursor 来获取聊天记录, 服务器收到后会以消息方式回应客户端以history为type的信息.
ps: $cursor为数字,从0开始, 比如发送: @history:0 即表示获取最近的聊天记录(通常游标cursor偏移量为50条);
在继续获取后面的记录, 可以发送 @history:1, 以此类推 @history:2
类型为:history, payload为这次获取的聊天记录, 该成员的id在from字段里.
例子:

1.{
2. "from":"<0.31891.2>",
3. "xnest":"f45c6d7720375d90f660a7b7e3ae11bf",
4. "type":"history",
5. "payload":[
6. {"from":"<0.1897.0>","payload":" 12121435131197391","send_time":"2015-06-24"},
7. {"from":"<0.1897.0>","payload":" 1111435131194487","send_time":"2015-06-24"},
8. {"from":"<0.1897.0>","payload":" 大大的1435131192974","send_time":"2015-06-24"},
9. {"from":"<0.1897.0>","payload":"爱上对方1435131191173","send_time":"2015-06-24"}]
,
10. "send_time":"2015-4-8 14:2:6"
11.
}

0x03 js示例

js样例

%23%200x00%20%u540D%u8BCD%u89E3%u91CA%3A%20%20%0A%0A@%28XPro%29%0A%0A***%7B%7D***%u91CC%u7684%u8868%u793A%u53D8%u91CF%20%20%0A***xnest***%u8868%u793A%u4E00%u4E2A%u804A%u5929%u5BA4%20%20%0A***xnest_id***%u8868%u793A%u8BE5%u804A%u5929%u5BA4%u7684id.%28%u7528%u6237%u53EF%u4EE5%u81EA%u5DF1%u53D6%2C%20%u6700%u597D%u4E0D%u8D85%u8FC732%u4E2A%u5B57%u7B26%29%20%20%0A%u8FDE%u63A5%u5730%u5740%3A%20%20%0A%3E%20ws%3A//meet.xpro.im%3A8080/xgate/websocket/%7B%5C%24xnest_id%7D%3Fnickname%3D%7B%24nickname%7D%0A%0A***%24xnest_id***%3A%20%u4EE3%u8868%u804A%u5929%u5BA4%u7684%u552F%u4E00%u6807%u8BC6%0A***%24nickname***%3A%20%u8FDB%u5165%u804A%u5929%u5BA4%u7684%u6635%u79F0%28%u8FDB%u5165%u4E00%u6B21%u540E%2C%20%u670D%u52A1%u5668%u4F1A%u628A%u8BE5%u6635%u79F0%u5199%u5165%u5230cookie%2C%20%u4E0B%u6B21%u4E0D%u5E26%u6635%u79F0%u4F1A%u9ED8%u8BA4%u662F%u7528cookie%u91CC%u7684%2C%20%u5982%u679Ccookie%u548C%u53C2%u6570%u90FD%u6CA1%u6709%2C%20%u670D%u52A1%u5668%u4F1A%u9ED8%u8BA4%u4F7F%u7528%u4E00%u4E2A%u968F%u673A%u7684%u6635%u79F0%29%0A%0A%0A----------%0A%0A%0A%23%200x01%20%u5BA2%u6237%u7AEF%28%u5982js%29%u8FDE%u63A5%3A%0A%u5BA2%u6237%u7AEF%u901A%u8FC7websocket%u8FDE%u63A5%u670D%u52A1%u5668%20%20%0A%u8FDE%u63A5%u6210%u529F%u540E%3A%u670D%u52A1%u5668%u4F1A%u63A8%u9001%u4E00%u4E9B%u8BE5%u804A%u5929%u5BA4%u7684%u6570%u636E%u8FC7%u6765%20%20%0A%u683C%u5F0F%u4E3Ajson%u6587%u672C%2C%u5982%u4E0B%3A%20%20%0A%0A%09%7B%20%20%0A%09%09%22from%22%3A%22%7B%24sender_id%7D%22%2C%20%20%0A%20%20%20%20%09%22xnest%22%3A%22%7B%24xnest_id%7D%22%2C%20%20%0A%20%20%20%20%09%22type%22%3A%22%7B%24type%7D%22%2C%20%20%0A%09%09%22payload%22%3A%22%7B%24payload%7D%22%2C%20%20%0A%20%20%20%20%09%22send_time%22%3A%22%7B%24time%7D%22%20%20%0A%09%7D%0A%20%20%20%20%0A%0A*%20from%3A%20%u8868%u793A%u53D1%u9001%u8005%u7684%u552F%u4E00id%3B%20%20%0A*%20xnest%3A%u8868%u793A%u8BE5%u804A%u5929%u5BA4%u7684%u552F%u4E00id%20%20%0A*%20type%3A%u8868%u793A%u8BE5%u6D88%u606F%u7684%u7C7B%u578B%2C%20%u4E3B%u8981%u6709%3A%20%20%20***members***%20%7C%20***member_count***%20%7C%20***normal***%20%7C%20***join***%20%7C%20***leave***%20%7C%20***self***%20%7C%20***changename***%20%7C%20***history***%20%20%7C%20***private***%20%20%7C%20***audio***%20%7C%20***picture***%20%7C%0A*%20payload%3A%u6D88%u606F%u7684%u6709%u6548%u5185%u5BB9%20%20%0A*%20send_time%3A%u8BE5%u6D88%u606F%u53D1%u9001%u51FA%u6765%u7684%u65F6%u95F4%20%20%0A%0A*%u5F53type%u4E3Aaudio%u6216%u8005picture%u65F6%2C%20%u6D88%u606F%u4F53payload%u5B9E%u9645%u4E3A%u4E00%u4E2Aurl*%0A%0A%23%23%20%u670D%u52A1%u6309%u5982%u4E0B%u6B21%u5E8F%u63A8%u9001%u6D88%u606F%u8FC7%u6765%3A%0A%23%23%23%201.%u63A5%u6536%u81EA%u5DF1%u5728%u8BE5%u804A%u5929%u5BA4%u7684%u552F%u4E00id%20%20%0A%u7C7B%u578B%u4E3A%3A***self***%2C%20%u6709%u6548%u5185%u5BB9%u4E3A%u81EA%u5DF1%u7684id.%20%20%0A%u4F8B%u5B50%3A%0A%0A%20%20%20%20%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31891.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%20%20%0A%20%20%20%20%09%22type%22%3A%22self%22%2C%20%20%0A%20%20%20%20%09%22payload%22%3A%22%3C0.31891.2%3E%22%2C%20%20%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%20%20%0A%20%20%20%20%7D%0A%0A%23%23%23%202.%u63A5%u6536%u8BE5%u804A%u5929%u5BA4%u7684%u6210%u5458%u6570%u91CF%0A%u7C7B%u578B%u4E3A%3A***member_count***%2C%u6709%u6548%u5185%u5BB9%u4E3A1%2C%20%u53CA%u8868%u793A%u5F53%u524D%u6210%u5458%u6570%u91CF%u4E3A1%20%20%0A%u4F8B%u5B50%3A%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31891.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%09%09%22type%22%3A%22member_count%22%2C%0A%20%20%20%20%09%22payload%22%3A1%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%0A%09%7D%0A%0A%23%23%23%203.%u63A5%u6536%u6210%u5458%u5217%u8868%0A%u7C7B%u578B%u4E3A%3A***members***%2C%20%u5185%u5BB9%u4E3Ajson%u6570%u7EC4%2C%20%u5305%u542B%u5F53%u524D%u6240%u6709%u804A%u5929%u5BA4%u6210%u5458%u7684pid%u548Cnickname%20%20%0A%u4F8B%u5B50%3A%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31891.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%09%09%22type%22%3A%22members%22%2C%0A%20%20%20%20%09%22payload%22%3A%5B%7B%22pid%22%3A%22%3C0.31891.2%3E%22%2C%22nickname%22%3A%22%u5C0F%u660E%22%7D%5D%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%0A%09%7D%0A%23%23%23%204.%u63A5%u6536%u8BE5%u804A%u5929%u5BA4%u7684%u5386%u53F2%u8BB0%u5F55%2C%20%u76EE%u524D%u53EA%u4F1A%u4FDD%u7559%u4E00%u5B9A%u6570%u91CF%u7684%u8BB0%u5F55%0A%u7C7B%u578B%u4E3A%3A***history***%2C%u6709%u6548%u5185%u5BB9%u4E3A%u7B2C%u4E00%u5C42%u7684payload%2C%20%u683C%u5F0F%u662F%u4E2A%u5217%u8868%2C%20%u6BCF%u6761%u8BB0%u5F55%u5305%u542B%u53D1%u9001%u8005id%2C%20%u5185%u5BB9%u548C%u65F6%u95F4%20%2C%20%u8FD8%u6709%u8BE5%u6761%u6D88%u606F%u7684%u7C7B%u578B%0A%u4F8B%u5B50%3A%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31891.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%20%20%20%20%09%22type%22%3A%22history%22%2C%0A%20%20%20%20%09%22payload%22%3A%5B%0A%09%09%09%7B%22from%22%3A%22%3C0.1897.0%3E%22%2C%22payload%22%3A%22%2012121435131197391%22%2C%20%22type%22%3A%22text%22%2C%20%22send_time%22%3A%222015-06-24%22%7D%2C%0A%09%09%09%7B%22from%22%3A%22%3C0.1897.0%3E%22%2C%22payload%22%3A%22%20http%3A//meet.xpro.im/123242112312%22%2C%20%22type%22%3A%22audio%22%2C%20%22send_time%22%3A%222015-06-24%22%7D%2C%20%0A%09%09%09%7B%22from%22%3A%22%3C0.1897.0%3E%22%2C%22payload%22%3A%22%20%u5927%u5927%u76841435131192974%22%2C%20%22type%22%3A%22text%22%2C%20%22send_time%22%3A%222015-06-24%22%7D%2C%20%0A%09%09%09%7B%22from%22%3A%22%3C0.1897.0%3E%22%2C%22payload%22%3A%22%u7231%u4E0A%u5BF9%u65B91435131191173%22%2C%20%22type%22%3A%22text%22%2C%20%22send_time%22%3A%222015-06-24%22%7D%5D%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%0A%09%7D%0A%0A%0A----------%0A%0A%0A%23%200x02%20%u8FDE%u63A5%u5EFA%u7ACB%u6210%u529F%u540E%0A%u8FDE%u63A5%u4FDD%u6301%u671F%u95F4%2C%20%u5982%u679C%u6709%u65B0%u52A0%u5165%u7684%u6210%u5458%u8FDB%u6765%2C%20%u8001%u6210%u5458%u79BB%u5F00%20%2C%20%u6D88%u606F%u63A5%u6536%2C%20%20%u670D%u52A1%u7AEF%u90FD%u4F1A%u63A8%u9001%u4E00%u6761%u6D88%u606F%u7ED9%u5BA2%u6237%u7AEF%2C%u5982%u4E0B%3A%20%20%0A%23%23%23%201.%u63A5%u6536%u65B0%u8FD1%u6210%u5458%u6D88%u606F%28%u5F53%u6709%u65B0%u6210%u5458%u52A0%u5165%u804A%u5929%u5BA4%u65F6%29%20%20%0A%u7C7B%u578B%u4E3A%3A***join***%2C%20payload%u4E3A%u8BE5%u52A0%u5165%u6210%u5458%u7684%u6635%u79F0%2C%20%u52A0%u5165%u6210%u5458%u7684id%u5728from%u5B57%u6BB5%u91CC.%20%20%0A%u4F8B%u5B50%3A%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31891.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%20%20%20%20%09%22type%22%3A%22join%22%2C%0A%20%20%20%20%09%22payload%22%3A%22%u9ED1%u65CB%u98CE%u674E%u9035%22%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%0A%09%7D%0A%0A%23%23%23%202.%20%u63A5%u6536%u79BB%u5F00%u6210%u5458%u6D88%u606F%28%u5F53%u6709%u5176%u4ED6%u6210%u5458%u79BB%u5F00%u804A%u5929%u5BA4%u65F6%u5019%29%0A%u7C7B%u578B%u4E3A%3A***leave***%2Cpayload%u4E3A%u56FA%u5B9A%u7684leave.%20%u79BB%u5F00%u6210%u5458%u7684id%u5728from%u5B57%u6BB5%u91CC.%20%20%0A%u4F8B%u5B50%3A%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31916.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%20%20%20%20%09%22type%22%3A%22leave%22%2C%0A%20%20%20%20%09%22payload%22%3A%22leave%22%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A23%3A28%22%0A%09%7D%0A%0A%0A%0A%23%23%23%203.%20%u666E%u901A%u6D88%u606F%u7684%u53D1%u9001%28%u8FD9%u91CC%u5C31%u76F4%u63A5%u53D1%u9001%u6D88%u606F%u4F53%u5C31%u53EF%u4EE5%u4E86%2C%20%u6CA1%u6709%u683C%u5F0F.%29%0A%u6BD4%u5982%u6211%u53D1%u9001%u4E86%3A%20%20%u5927%u5BB6%u597D%21%20%20%0Ajs%u5BA2%u6237%u7AEF%u53EF%u80FD%u662F%u5982%u4E0B%u4EE3%u7801%3A%0A%20%20%0A%09ws.send%28%22%u5927%u5BB6%u597D%22%29%3B%0A%0A%0A%23%23%23%204.%20%u666E%u901A%u6D88%u606F%u63A5%u6536%28%u53CA%u5176%u4ED6%u6210%u5458%u53D1%u9001%u7684%u6D88%u606F%29%0A%u7C7B%u578B%u4E3A%3A***normal***%2C%20payload%u5C31%u662F%u6210%u5458%u53D1%u9001%u7684%u6D88%u606F.%u5982%u4E0A%u4F8B%2Cpayload%u91CC%u5C31%u662F%u5927%u5BB6%u597D.from%u5C31%u662F%u53D1%u9001%u8005%u7684id.%20%20%0A%u4F8B%u5B50%3A%0A%0A%09%7B%0A%09%20%20%20%20%22from%22%3A%22%3C0.31891.2%3E%22%2C%0A%09%20%20%20%20%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%09%20%20%20%20%22type%22%3A%22normal%22%2C%0A%09%20%20%20%20%22payload%22%3A%22%u5927%u5BB6%u597D%22%2C%0A%09%20%20%20%20%22send_time%22%3A%0A%09%20%20%20%20%222015-4-8%2014%3A25%3A30%22%0A%09%7D%0A%0A%23%23%23%205.%20%u79C1%u804A%u6D88%u606F%u7684%u53D1%u9001%u4E0E%u63A5%u6536%0A%u5728%u4E00%u4E2A%u804A%u5929%u5BA4%u91CC%u5982%u679C%u60F3%u5355%u72EC%u53D1%u9001%u4FE1%u606F%u7ED9%u67D0%u4F4D%u6210%u5458%u53EF%u4EE5%u901A%u8FC7%u6307%u4EE4%0A%0A%09@to%3A%24pid%7C%24msg%20%20%0A%u7684%u683C%u5F0F%u53D1%u9001%0A%u6BD4%u5982%3A%0A%0A%09@to%3A%3C0.31891.2%3E%7C%u4ECA%u5929%u4F60%u5403%u996D%u4E86%u5417%3F%0A%0A%u5BF9%u5E94%u7684pid%28%3C0.31891.2%3E%29%u7528%u6237%u5C31%u4F1A%u6536%u5230%u4E00%u6761%u5982%u4E0B%u7684***private***%u7C7B%u578B%u7684%u6D88%u606F%3A%20%20%0A%u7C7B%u578B%u4E3A%3A%20***private***%20%20%0A%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31890.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%09%09%22type%22%3A%22private%22%2C%0A%20%20%20%20%09%22payload%22%3A%22%u4ECA%u5929%u4F60%u5403%u996D%u4E86%u5417%3F%22%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%0A%09%7D%0A%0A%0A%23%23%23%206.%20%u8BED%u97F3%u6D88%u606F%u7684%u53D1%u9001%u4E0E%u63A5%u6536%0A%u8BED%u97F3%u6D88%u606F%u662F%u901A%u8FC7%u4E8C%u8FDB%u5236%u7684%u65B9%u5F0F%u53D1%u9001%u7684%2C%20%u5728%u53D1%u9001%u8BED%u97F3%u5185%u5BB9%u4E4B%u524D%2C%20%u9700%u8981%u5148%u53D1%u9001%u4E00%u4E2A%u5B57%u8282%288%u4F4D%29%u7684%u6570%u5B571%2C%u5728%u7D27%u63A5%u7740%u53D1%u9001%u8BED%u97F3%0A%0A%0A%0A%u4E8C%u8FDB%u5236%u7684%u8BED%u97F3%u6D88%u606F%u88AB%u670D%u52A1%u7AEF%u63A5%u6536%u540E%u4F1A%u8F6C%u6362%u6210%u6587%u672C%u7C7B%u6D88%u606F%2C%20%20%u540C%u65F6%u7C7B%u578B%u4F1A%u53D8%u6210***audio***%u7C7B%u578B%0A%u6709%u6548%u7684%u6D88%u606Fpayload%u4E3A%u4E00%u4E2Aurl%u5730%u5740%2C%20%u5BA2%u6237%u7AEF%u53EF%u901A%u8FC7%u70B9%u51FBurl%u7B49%u624B%u6BB5%u53BB%u64AD%u653E%u8BED%u97F3%u6D88%u606F%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31890.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%09%09%22type%22%3A%22audio%22%2C%0A%20%20%20%20%09%22payload%22%3A%22http%3A//meet.xpro.im%3A8080/14009e12d791e664fc0175aecb31d833/1452482123561863%22%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%0A%09%7D%0A%0A%0A%23%23%23%207.%20%u56FE%u7247%u6D88%u606F%u7684%u53D1%u9001%u4E0E%u63A5%u6536%0A%u56FE%u7247%u6D88%u606F%u4E5F%u662F%u901A%u8FC7%u4E8C%u8FDB%u5236%u7684%u65B9%u5F0F%u53D1%u9001%u7684%2C%20%u5728%u53D1%u9001%u56FE%u7247%u5185%u5BB9%u4E4B%u524D%2C%20%u9700%u8981%u5148%u53D1%u9001%u4E00%u4E2A%u5B57%u8282%288%u4F4D%29%u7684%u6570%u5B572%2C%u5728%u7D27%u63A5%u7740%u53D1%u9001%u56FE%u7247%0A%0A%0A%0A%u4E8C%u8FDB%u5236%u7684%u56FE%u7247%u6D88%u606F%u88AB%u670D%u52A1%u7AEF%u63A5%u6536%u540E%u4F1A%u8F6C%u6362%u6210%u6587%u672C%u7C7B%u6D88%u606F%2C%20%20%u540C%u65F6%u7C7B%u578B%u4F1A%u53D8%u6210***picture***%u7C7B%u578B%0A%u6709%u6548%u7684%u6D88%u606Fpayload%u4E3A%u4E00%u4E2Aurl%u5730%u5740%2C%20%u5BA2%u6237%u7AEF%u53EF%u901A%u8FC7%u518D%u6B21%u53D1%u8D77%u4E00%u4E2Ahttp%u8BF7%u6C42%u6765%u663E%u793A%u56FE%u7247%0A%0A%09%7B%0A%20%20%20%20%09%22from%22%3A%22%3C0.31890.2%3E%22%2C%0A%20%20%20%20%09%22xnest%22%3A%22f45c6d7720375d90f660a7b7e3ae11bf%22%2C%0A%09%09%22type%22%3A%22picture%22%2C%0A%20%20%20%20%09%22payload%22%3A%22http%3A//meet.xpro.im%3A8080/14009e12d791e664fc0175aecb31d833/1452482123561863%22%2C%0A%20%20%20%20%09%22send_time%22%3A%222015-4-8%2014%3A2%3A6%22%0A%09%7D%0A%0A%23%23%23%208.%20%u7528%u6237%u6635%u79F0%u6539%u53D8%u6635%u79F