通话状态通知
1. 简介
获取通话状态通知是 菊风云平台 通话业务提供的一项服务。通过该服务,您的服务器可以获得通话的实时状态通知,从而使您能够在通话业务的基础上增加额外的业务控制。
文档描述基于您已经完成以下工作:
- 创建您的应用
- 使用 SDK 接口完成集成通话功能
基本架构

2. 控制台配置通知服务器
为了获取通话状态通知,您需要在控制台设置接收通话状态通知的服务器地址、鉴权用户名和密码。进入控制台-应用-设置-高级,打开“状态通知服务器”配置页面,如下图

图示中服务器访问协议为 HTTP,地址为 112.124.116.65,端口为 7123;
如果您的服务器通过 HTTPS 访问,请对应选择 HTTPS;
如果您的服务器通过域名访问,这里需要填入对应域名;
如果您的服务器有特定的访问路径,请一并填入。例如 112.124.116.65:7123/call_status/;
HTTP 鉴权域用户名和用户密码,是用于访问您的服务器的用户名和密码。
了解了获取通话状态通知的基本内容后,下面将介绍一对一通话状态通知的内容。
3. 多方通话状态通知流程

4. 消息格式
statusNotify 消息用于通知通话状态,由菊风云服务器发起 RESTful 请求,由客户服务器响应。
5. 请求
HTTP 报文头
报文头域 | 是否必选 | 值 | 说明 |
---|---|---|---|
POST | / | / | / |
Authorization | 否 | Base64编码 | ”Basic Base64(‘[域用户名]:[域密码]’)” |
Domain | 否 | 发起请求者的域名 | / |
Content-Type | 是 | application/json | / |
Content-Length | 是 | HTTP Body 的实际长度 | / |
5.1 加入会议 HTTP 报文样例
POST HTTP/1.1
Authorization: Basic YWRtaW46MTIz
Content-Length: 317
Content-Type: application/json
Domain: sample.cloud.justalk.com
{
"in":{"params":{},
"roomId":"96305879581145",
"status":"{\"pub\":\"join\",
\"actor\":{\"[username:alice@sample.cloud.justalk.com]\":
{\"nick\":\"alice\",
\"role\":7,
\"state\":2,
\"idx\":3}
},
\"roomId\":\"96305879581145\",
\"time\":1469511339}",
"userData":"My UserData",
"conferenceNumber":"327511"},
"cmd":"statusNotify.JSME.JSM",
"oid":"JSMUser",
"tid":4022588287,
"params":{}
}
Authorization头:值为“Basic [Base64(菊风云分配的域用户名:密码)]”。此处假定客户指定的 HTTP 鉴权用户名为 user,密码为 password,”dXNlcjpwYXNzd29yZA==”为(“user:password”)字符串经过 Base64编码后的结果。
POST HTTP/1.1
Authorization: Basic YWRtaW46MTIz
Content-Length: 317
Content-Type: application/json
Domain: sample.cloud.justalk.com
{
"in":{"params":{},
"roomId":"96305879581145",
"status":"{\"pub\":\"join\",
\"actor\":{\"[username:alice@sample.cloud.justalk.com]\":
{\"nick\":\"alice\",
\"role\":7,
\"state\":2,
\"idx\":3}
},
\"roomId\":\"96305879581145\",
\"time\":1469511339}",
"userData":"My UserData",
"conferenceNumber":"327511"},
"cmd":"statusNotify.JSME.JSM",
"oid":"JSMUser",
"tid":4022588287,
"params":{}
}
参数说明
in: 会议相关信息
roomId: 会议标示
status: 会议的实时状态。status 对应的 value 为 json 字符串,客户需转成 json 格式,然后取出对应的值,具体如下
"status":"{\"pub\":\"leave\", //表示离开会议
\"actor\":{\"[username:alice@sample.cloud.justalk.com]\":\"leave\"}, //表示离开会议的成员,value 也是 json 字符串,需转成 json 格式。转成 json 格式后,先取出 key,这里为 [username:alice@sample.cloud.justalk.com],表示该成员的 uri,是登录 JusTalk Cloud 帐号系统的标示,其中 alice 为客户终端登录时的使用的用户名,所以可以使用这个来匹配客户的帐号体系。
\"roomId\":\"96305879581145\", //表示会议Id
\"time\":1469511362 //表示离开会议的时间戳,单位秒}"
ret:true 表示收到通知。
5.2 离开会议 HTTP 报文样例
POST HTTP/1.1
Authorization: Basic YWRtaW46MTIz
Content-Length: 317
Content-Type: application/json
Domain: sample.cloud.justalk.com
{
"in":{"params":{},
"roomId":"96305879581145",
"status":"{\"pub\":\"leave\",
\"actor\":{\"[username:alice@sample.cloud.justalk.com]\":\"leave\"},
\"roomId\":\"96305879581145\",
\"time\":1469511362}",
"userData":"My UserData",
"conferenceNumber":"327511"},
"cmd":"statusNotify.JSME.JSM",
"oid":"JSMUser",
"tid":4022588287,
"params":{}
}
Authorization头:值为“Basic [Base64(菊风云分配的域用户名:密码)]”。此处假定客户指定的 HTTP 鉴权用户名为 user,密码为 password,”dXNlcjpwYXNzd29yZA==”为(“user:password”)字符串经过 Base64编码后的结果。
POST HTTP/1.1
Authorization: Basic YWRtaW46MTIz
Content-Length: 317
Content-Type: application/json
Domain: sample.cloud.justalk.com
{
"in":{"params":{},
"roomId":"96305879581145",
"status":"{\"pub\":\"leave\",
\"actor\":{\"[username:alice@sample.cloud.justalk.com]\":\"leave\"},
\"roomId\":\"96305879581145\",
\"time\":1469511362}",
"userData":"My UserData",
"conferenceNumber":"327511"},
"cmd":"statusNotify.JSME.JSM",
"oid":"JSMUser",
"tid":4022588287,
"params":{}
}
参数说明
in: 会议相关信息
roomId: 会议标示
status: 会议的实时状态。status 对应的 value 为 json 字符串,客户需转成 json 格式,然后取出对应的值,具体如下
"status":"{\"pub\":\"leave\", //表示离开会议
\"actor\":{\"[username:alice@sample.cloud.justalk.com]\":\"leave\"}, //表示离开会议的成员,value 也是 json 字符串,需转成 json 格式。转成 json 格式后,先取出 key,这里为 [username:alice@sample.cloud.justalk.com],表示该成员的 uri,是登录 JusTalk Cloud 帐号系统的标示,其中 alice 为客户终端登录时的使用的用户名,所以可以使用这个来匹配客户的帐号体系。
\"roomId\":\"96305879581145\", //表示会议Id
\"time\":1469511362 //表示离开会议的时间戳,单位秒}"
ret:true 表示收到通知。
6. 响应
HTTP 报文头
报文头域 | 是否必选 | 值 |
---|---|---|
202 Accepted | 是 | / |
Authorization | 否 | Base64编码 |
Domain | 否 | 发起请求者的域名 |
Content-Length | 是 | HTTP Body 的实际长度 |
HTTP 报文样例
HTTP/1.1 202 Accepted
Content-Length: 29
{"tid":4022588287,"ret":true}
ret:true 表示收到通知。
7. 报文说明
7.1 会议创建
关键字 new 表示 创建会议;
time 表示创建时间,单位是秒。
{
"in": {
"params": null,
"roomId": "-181601554958257",
"status": "{\"pub\":\"new\",\"roomId\":\"-181601554958257\",\"id\":\"-181601554958257\",\"time\":1523947486,\"config\":{\"capacity\":2047,\"sender\":16,\"media\":\"\"},\"room\":{\"title\":\"123456\",\"psswrd\":\"123456\",\"screen\":\"\",\"dat\":\"\"}}",
"userData": "",
"conferenceNumber": "10521028"
},
"cmd": "statusNotify.JSME.JSM",
"oid": "JSMUser",
"tid": 1031033531,
"params": null
}
7.2 会议加入
关键字 join 表示 加入会议;
time 表示加入时间,单位是秒。
{
"in": {
"params": null,
"roomId": "-181601554958257",
"status": "{\"pub\":\"join\",\"actor\":{\"[username:cfl1@sample.cloud.justalk.com]\":{\"nick\":\"cfl1\",\"role\":15,\"state\":14,\"idx\":1}},\"mid\":\"-181601554958257\",\"sid\":\"-181601554958257\",\"roomId\":\"-181601554958257\",\"id\":\"-181601554958257\",\"time\":1523947486}",
"userData": "",
"conferenceNumber": "10521028"
},
"cmd": "statusNotify.JSME.JSM",
"oid": "JSMUser",
"tid": 1031033532,
"params": null
}
7.3 会议人员离开(带流量和视频时间)
关键字 actorleave,表示离开会议;
time 表示离开会议的时间,单位是秒;
nf.snd.sum 表示发送流量,单位 KB;
nf.rcv.sum 表示接收流量,单位 KB;
90ptime,180ptime,360ptime,720ptime,1080ptime 分别表示90p,180p,360p,720p,1080p 各用了多少时长,单位是秒。
{
"in": {
"params": null,
"roomId": "-181601554958257",
"status": "{\"pub\":\"actorleave\",\"actorleave\":{\"actorid\":\"[username:cfl1@sample.cloud.justalk.com]\",\"actorrole\":15,\"actorstate\":14,\"appid\":1,\"lasttime\":100,\"channeltype\":1,\"mediatype\":{\"est.br.snd.avg\":1200,\"est.br.rcv.avg\":1200,\"nf.snd.sum\":74,\"nf.rcv.sum\":21,\"br.snd.avg\":5,\"br.rcv.avg\":1,\"loss.snd.avg\":0,\"loss.rcv.avg\":0,\"rtt.avg\":51,\"jitter.snd.avg\":0,\"jitter.rcv.avg\":0,\"idletime\":98,\"audiotime\":0,\"screensharetime\":0,\"90ptime\":0,\"180ptime\":0,\"360ptime\":0,\"720ptime\":0,\"1080ptime\":0}},\"mid\":\"-181601554958257\",\"sid\":\"-181601554958257\",\"roomId\":\"-181601554958257\",\"id\":\"-181601554958257\",\"time\":1523947587}",
"userData": "",
"conferenceNumber": "10521028"
},
"cmd": "statusNotify.JSME.JSM",
"oid": "JSMUser",
"tid": 1031033676,
"params": null
}
7.4 会议成员离开(不带流量和视频时间)
关键字 leave,表示离开会议;
time 表示离开会议的时间,单位是秒。
{
"in": {
"params": null,
"roomId": "-181601554958257",
"status": "{\"pub\":\"leave\",\"actor\":{\"[username:cfl1@sample.cloud.justalk.com]\":\"leave\"},\"mid\":\"-181601554958257\",\"sid\":\"-181601554958257\",\"roomId\":\"-181601554958257\",\"id\":\"-181601554958257\",\"time\":1523947587}",
"userData": "",
"conferenceNumber": "10521028"
},
"cmd": "statusNotify.JSME.JSM",
"oid": "JSMUser",
"tid": 1031033677,
"params": null
}
7.5 会议销毁
关键字 delete 表示会议销毁;
nf.snd.sum 表示整个会议发送流量,单位 KB;
nf.rcv.sum 表示整个会议接收流量,单位 KB;
audiotime 表示会议所有成员累计使用的音频时间,单位秒。
90ptime,180ptime,360ptime,720ptime,1080ptime 分别表示90p,180p,360p,720p,1080p 各用了多少时长,单位是秒。
{
"in": {
"params": null,
"roomId": "-181601554958257",
"status": "{\"pub\":\"delete\",\"net\":{\"mediatypes\":\" Au\",\"nf.snd.sum\":99,\"nf.rcv.sum\":89,\"br.snd.avg\":0,\"br.rcv.avg\":0,\"est.br.snd.avg\":2400,\"est.br.rcv.avg\":2400,\"loss.snd.avg\":0,\"loss.rcv.avg\":0,\"rtt.avg\":78,\"jitter.snd.avg\":0,\"jitter.rcv.avg\":0,\"idletime\":113,\"audiotime\":43,\"screensharetime\":0,\"90ptime\":0,\"180ptime\":0,\"360ptime\":0,\"720ptime\":0,\"1080ptime\":0},\"channeltypes\":\"N\",\"monline\":2,\"md\":120,\"td\":162,\"mid\":\"-181601554958257\",\"sid\":\"-181601554958257\",\"roomId\":\"-181601554958257\",\"id\":\"-181601554958257\",\"time\":1523947595}",
"userData": "",
"conferenceNumber": "10521028"
},
"cmd": "statusNotify.JSME.JSM",
"oid": "JSMUser",
"tid": 1031033704,
"params": null
}