# 通话状态通知

# 简介

获取通话状态通知是菊风云平台提供的一项服务。通过该服务,您的服务器可以获得通话的实时状态通知,从而使您能够在通话业务的基础上增加额外的业务控制。

文档描述基于您已经完成以下工作:

基本架构

image

# 控制台配置通知服务器

为了获取通话状态通知,您需要在控制台设置接收通话状态通知的服务器地址、鉴权用户名和密码:

  1. 进入控制台 - 服务管理 - 应用管理
  2. 操作 一栏中点击 设置 image-20200925141010930图标
  3. 状态配置 中 点击 添加状态服务器 后的 添加image-20200925140937588 按钮

image-20200925141336897

其中:

  • HTTP 鉴权域用户名和用户密码,是用于访问您的服务器的用户名和密码

  • 服务器 URL 是您的服务器访问的 URL 信息

    • 如果您的服务器通过 HTTPS 访问,请对应选择 HTTPS
    • 如果您的服务器通过域名访问,这里需要填入对应域名
    • 如果您的服务器有特定的访问路径,请一并填入。例如 112.124.116.65:7123/call_status/

TIP

配置将在 15 分钟内生效。

# 重发机制

为保证状态通知的可靠性,菊风服务器按照以下规则重发通知请求:

  • 事件发生时发送第一次通知请求
  • 正确响应要求响应中的 tid 和请求中的 tid 保持一致,并且 ret 的值为 true
  • 没有收到正确响应的情况下,间隔 2 分钟重发一次,一共重发 5 次

# 消息格式

statusNotify 消息用于通知通话状态,由菊风服务器发起 RESTful 请求,由客户服务器响应。获取通话状态通知的操作如下:

# 请求

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":{}
}

HTTP报文头:

报文头域 是否必选 说明
POST
Authorization Basic
[Base64(菊风分配的域用户名:密码)]
此处假定客户指定的HTTP鉴权用户名为user,密码为password,"dXNlcjpwYXNzd29yZA=="为(“user:password”)字符串经过Base64编码后的结果
Content-Length HTTP Body的实际长度
Content-Type application/json
Domain 发起请求者的域名

配置参数:

值的格式/类型 说明
in Object 会议相关信息
roomId string 会议ID,会议通话的唯一标识
status string 会议的实时状态, status 对应的 value 为 json 字符串, 您需要将其转换成 json 然后取出对应的值
pub string 判断会议行为:
  • "new" 表示创建会议
  • "join" 表示加入会议
  • "leave" 表示离开会议(不带流量和视频时间)
  • "actorleave" 表示离开会议(带流量和视频时间)
"delete" 表示销毁会议
actor string 加入会议的用户的数据
userData string 用户自定义数据。可用于传客户自定义数据,例如订单号。预约会议时在参数加入 userdata,例如
"params":{"video":"1","title":"test","userdata":"My UserData"}
conferenceNumber string 会议编号
oid string 提供服务的对象名称。
tid string 事务ID,值唯一的整数。transaction 代表本次 Nofity 的一次交互。该 ID 值由发起 Request 的一方生成

# 响应

HTTP报文样例:

HTTP/1.1 202 Accepted
Cntent-Length: 29

{"tid":4174673023,"ret":true}

HTTP报文头:

报文头域 是否必选
202 Accepted
Authorization Basic
[Base64(菊风分配的域用户名:密码)]
Demain HTTP Body的实际长度
Content-Length application/json

配置参数:

值的格式/类型 说明
tid int 事务ID。您的HTTP服务器回复的响应中,该字段的值应与请求报文保持一致。
ret boolean true表示收到通知。

# 报文案例

# 创建会议

  • 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
}

# 加入会议

  • 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
}

# 离开会议(带流量和视频时间)

  • actorleave 表示离开会议;
  • time 表示离开会议的时间,单位是秒;
  • nf.snd.sum 表示发送流量,单位KB;
  • nf.rcv.sum 表示接收流量,单位KB;
  • 90ptime180ptime360ptime720ptime1080ptime 分别表示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
}

# 离开会议(不带流量和视频时间)

  • 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
}

# 销毁会议

  • delete 表示销毁会议。
  • nf.snd.sum 表示整个会议发送流量,单位KB。
  • nf.rcv.sum 表示整个会议接收流量,单位KB。
  • audiotime 表示会议所有成员累计使用的音频时间,单位秒。
  • 90ptime180ptime360ptime720ptime1080ptime 分别表示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
}