通知中心对接方案

通知中心

0.版本

版本 描述 修改人 时间
1.0 新增 yb 2018-09-03
1.1 新增开发指南 yb 2018-09-05
1.2 2.3章节 模板查询接口companyid 传 lid;
2.6章节 用户设置推送接口 header 增加language
yb 2018-09-07
1.3 2.5章节 头部增加timestamp和token(注:后续服务调整后,将不再需要这两个字段) yb 2018-09-12
1.4 2.4, 2.5 章节 增加不带加密校验的v2版本接口,去除多余字段 yb 2018-09-13
1.5 增加 2.7 通知推送记录查询 yb 2018-09-17
1.6 2.4 章节extern在base64编码前的内容示例中增加content描述 yb 2018-09-19
1.7 2.2 章节 用户退出账号接口更新 yb 2018-09-27
1.8 2.8 章节 增加联动删除接口和2.7章节增加推送历史保存说明 wh 2018-10-30

1. 开发指南

1.1 开发步骤可按以下方式进行:

a) 上传 token 以及系统语言等信息,接口描述见2.1,具体信息由推送服务记录

b) 用户设置推送,接口描述见2.6

c) 查询 推送模板, 接口描述见2.3

d) 进行 模板实例化, 接口描述见2.4

e) 模板实例查询,通过source字段确认模板是否实例化,接口描述见2.5

f) 用户退出账号,接口描述见 2.2

2. 接口描述

2.1 app token上传接口

请求方式

https POST

URL

https://[lid]appfront.ibroadlink.com/appfront/v1/pusher/registerforremotenotify

Header

key type descriptioin
identity string base64({"userid":"xx","familyid":"xx","loginsession":"xx"}),其中familyid可为空
appid string app包名
system string 系统,如”ios“, “android-google”,“android-alicloud”
language string 语言

ReqBody

[
    {
        "userid": "xxxx",
        "touser": "TOKEN",
        "tousertype": "app"
    },
    {
        "userid": "xxxx",
        "touser": "xxxx",
        "tousertype": "xxxx"
    }
]

response body

{
    "status": 0,
    "msg": "ok"
}

2.2 用户退出账号接口

请求方式

https POST

URL

https://[lid]pushproxy.ibroadlink.com/appfront/v1/pusher/signoutaccount

Header

key type descriptioin
ReqUserId string userId
ReqUserSession string loginseesion
language string 语言
userid string userId

ReqBody

{
    "touser":"",//手机TOKEN
    "accountlabel":1 //1表示退出
}

Resp body

{
    "status":0,
    "msg":"ok"
}

2.3 模板查询接口

请求方式

https POST

URL

https://[lid]appfront.ibroadlink.com/appfront/v1/tempalte/query

Header

key type descriptioin
identity string base64({"userid":"xx","familyid":"xx","loginsession":"xx"})

ReqBody

{
	"category":["可以为空"],//大类.小类 (产品profile文件的srvs字段第一位,第三位),如srvs:"1.50.3",category为"1.3", 若无则填空即可
	"companyid":"需要传lid",
    "pagestart":1, //开始页
    "templatetype":"如何非空,附加条件为该类型", //app无用处,填空
    "pagesize":1 //页数
}

Resp body

{
	"status": 0,
	"msg": "Success",
	"totalpage": 1,
	"templates": [{
				"templateid": "xxx",
				"categorys": ["该模板相关联的品类"],
				"companyid": "b0491bc574dfa144908c3cd671f56370",
				"templatetype": "通知类型 业务决定,透传",
				"templatename": [{
					"name": "xx", //模板名称
					"language": "zh-cn" //模板语言
				}]
        //发生events时,检查condition,满足则触发actions
				"events": [{
					"ikey": "pir_detected", //设备控制key
					"ref_value": 1, //trend_type所作用的值
					"ref_value_name": "SR3有人", //ref_value对应的名称
					"trend_type": 4, //event中表示设备的趋势 0:上升到(old<ref new>=ref) 1:下降到(old>ref new<=ref) 4:变成到(old!=ref new == ref)
					"type": 0, //目前无用
					"name": "", //事件名称
					"keeptime": 222, //时间持续时间,单位毫秒
					"category": "该事件来源小类" //品类
				}],
				"conditionsinfo": {//触发条件 datetime和property是与的关系
					"datetime": [{//时间条件,若无则传空数组
						"weekdays": "123",
						"timezone": 8,
						"validperiod": ["12:00:00-13:00:00", "15:00:00-16:00:00"]
					}],
					"property": [{//状态条件
						"ikey": "pir_detected",//设备的key
						"ref_value": 1,//trend_type所作用的值
						"ref_value_name": "SR3有人",//ref_value对应的名称
						"trend_type": 4, //condition中表示设备的状态 2:>= 3:<= 4:==
						"category": "该条件来源小类"
					}]
				},
				"action": [{
					"language": "zh-cn",
					"name": "SR3有人",
					"status": "启用",
					"alicloud": {//阿里平台推送
						"templateid": "3710f75578b8761fa2a58cd5ddcdf9a4",
						"tagcode": "ihc-ali", //tagcode的实际含义是 推送账号的标志
						"keylist": ["devname"],//模板的参数列表
						"content": "{\"devname\":\"$devname$\",\"说明\":\"h5需要把keylist的参数补充为左边这种格式\"}",
						"templatecontent": "打开%v(通知中心原来模板内容)", //显示推送的描述
						"enable": true, //使能开关
						"did": "app需要实例化到具体设备,需要是事件来源小类",
						"action": "ihc://common/web?url=http://www.baidu.com" //app收到通知跳转的页面
					},
					"gcm": { //谷歌推送
						"templateid": "3710f75578b8761fa2a58cd5ddcdf9a4",
						"tagcode": "ihc-ali",
						"keylist": ["devname"],
						"content": "{\"devname\":\"$devname$\",\"说明\":\"h5需要把keylist的参数补充为左边这种格式\"}",
						"templatecontent": "打开%v(通知中心原来模板内容)",
						"enable": true,
						"did": "app需要实例化到具体设备,需要是事件来源小类",
						"action": "ihc://common/web?url=http://www.baidu.com"
					},
					"ios": { //ios推送
						"templateid": "",
						"tagcode": "",
						"keylist": null,
						"content": "",
						"enable": false,
						"did": "",
						"action": ""
					},
					"mail": {//mail推送
						"templateid": "",
						"tagcode": "",
						"keylist": null,
						"content": "",
						"enable": false,
						"did": ""
					},
					"wechat": {
						"templateid": "",
						"tagcode": "",
						"keylist": null,
						"content": "",
						"enable": false,
						"did": ""
					}
				}]
		}]
}

2.4 联动增加(模板实例化)

请求方式

https POST

URL

加密版本:https://[lid]appfront.ibroadlink.com/appfront/v1/linkage/add

非加密校验版本:https://[lid]appfront.ibroadlink.com/appfront/v2/linkage/add

Header

key type descriptioin
identity string base64({"userid":"xx","familyid":"xx","loginsession":"xx"})
messageId string 消息id
licenseid string app licenseid

req body

{
    "familyid":"xxx",
    "ruletype": 1, // 固定为1
    "ruleid": "", //填空即可
    "rulename":"",
    "enable":1, //1使能
    "characteristicinfo": "xxxxx", //联动信息,json格式,app透传,示例见下方
    "locationinfo": "xxxx",//地址信息,暂时填空
    "moduleid": ["3908002986584925865"], //场景id,如无场景联动,则填空列表
    "modulecontent": "xxxx", //json格式场景内容
	"linkagedevices":{//联动内场景,若无场景,则不填
    	"moduleid":"xx",//场景id
        "name":"xx",//场景名称
        "extern":"xx",//模板信息经过base64编码, extern示例见下方
        "linkagetype":"notify",//联动类型:"notify"为通知
	},
	"source":"xxx" //"H5":表示此联动由H5页面设置; "APP": 表示此联动由APP 联动设置(默认); "notify_xxx": 表示此联动为设备消息通知 (xxx 表示模板实例化templateid值)格式为"notify_<templateid>",可通过该字段确定模板是否已实例化
}

characteristicinfo示例

{
    "conditionsinfo":{
        "datetime":[

        ],
        "property":[

        ]
    },
    //events中的内容是根据获取到的模板,再在原有默认值的基础上按需修改增加对应的值(如ref_value)即可
    "events":[
        {
            "dev_name":"无线门磁",
            "idev_did":"780f77090e8f000003000100b037693e",
            "ikey":"doorsensor_status",
            "keeptime":10000,
            "ref_value":0,
            "ref_value_name":"无线门磁关门 ",
            "trend_type":4,
            "type":0
        }
    ]
}

extern在base64编码前的内容示例:

{
    "action":[
        {
            "alicloud":{
                "action":"",
                "content":"{\"devname\":\"$devname$\",\"说明\":\"h5需要把keylist的参数补充为左边这种格式\"}",
      //content最后base64字符串 即使没参数也要传{}的base64,保持解析后为json
                  "templatecontent": "打开%v(通知中心原来模板内容)",
                "did":"780f7727e691000005000100b8390cb2",
                "enable":true,
                "tagcode":"",
                "templatecontent":"",
                "templateid":""
            },
            "gcm":{
                "action":"",
                "content":"",
                "did":"",
                "enable":false,
                "tagcode":"",
                "templatecontent":"",
                "templateid":""
            },
            "ios":{
                "action":"",
                "content":"有人来了",
                "did":"",
                "enable":true,
                "keylist":[
                    ""
                ],
                "tagcode":"ihc_release_dis",
                "templateid":"18ae2cc2a936fdd4fcf6905fda89588c"
            },
            "language":"zh-cn",
            "name":"",
            "status":"测试",
            "wechat":{
                "content":"",
                "did":"",
                "enable":false,
                "tagcode":"",
                "templateid":""
            }
        }
    ]
}

Resp body

{
      "status":"",
      "msg":""
      "ruleid":""//联动id
}

2.5 联动(模板实例)查询

请求方式

https POST

URL

加密校验版本:https://[lid]appfront.ibroadlink.com/appfront/v1/linkage/query

非加密校验版本:https://[lid]appfront.ibroadlink.com/appfront/v2/linkage/query

Header

key type descriptioin
identity string base64({"userid":"xx","familyid":"xx","loginsession":"xx"})
messageId string 消息id
licenseid string app licenseid
timestamp string 时间戳,单位,秒
token string md5(body+“xgx3d*fe3478$ukx”+timestamp+userId)

token 计算示例 go 代码如下:

var TOKEN_SALT = []byte("xgx3d*fe3478$ukx")

func GetToken(body []byte, timestamp,userId string) string {
    var d [9000]byte
	data := d[:0]
	data = append(data, body...)
	data = append(data, TOKEN_SALT...)
	data = append(data, []byte(timestamp)...)
	data = append(data, []byte(userId)...)
	calToken := GetMD5(data)
    return calToken
}

func GetMD5(data []byte) string {
	md5Contain := md5.New()
	md5Contain.Write(data)
	return hex.EncodeToString(md5Contain.Sum(nil))
}

Req body

Resp body

{
      "status":"",
      "msg":"",
      "linkages":[{
              "familyid":"xxx",
   	       	   "rulename":"xxx",//联动名称
              "ruletype": 1,//固定1
              "ruleid": "",
              "characteristicinfo": "xxxxx",//同2.3.1章节描述
              "locationinfo": "xxxx",//同2.3.1章节描述
              "modulename": "关",//同2.3.1章节描述
              "moduleid": "3908002986584925865",//同2.3.1章节描述
              "modulecontent": "xxxx",//同2.3.1章节描述
              "devcontent": "xxxx",//同2.3.1章节描述
              "source":"xxx" //"H5":表示此联动由H5页面设置; "APP": 表示此联动由APP 联动设置(默认); "notify_xxx": 表示此联动为设备消息通知 (xxx 表示模板实例化templateid值)格式为"notify_<templateid>",可通过该字段确定模板是否已实例化
      }]
  }

2.6 用户设置推送接口

请求方式

https POST

URL

https://[lid]pushproxy.ibroadlink.com/ec4/v1/pusher/favorpushtype/manage

Header

key type descriptioin
ReqUserId string userId
ReqUserSession string loginseesion
language string 语言
userid string userId

Req body

{
    "userid":"xxxx",
    "managetypeinfo":[
        {
            "action":"xxx",//"favor":设备开启推送标识,"quitfavor":设备关闭推送标识
            "tokentype":{
                "touser":"TOKEN",
                "tousertype":"app"
            }
        },
        {
            "action":"xxx",
            "tokentype":{
                "touser":"xxx",
                "tousertype":"xxxx"
            }
        }
    ],
    "language":"en"
}

Resp body

{
      "status":0,
      "msg":"ok"
}

2.7 通知推送记录查询

说明

云端会保留该用户最近一周的推送历史记录

请求方式

https POST

URL

https://[lid]appfront.ibroadlink.com/appfront/v1/notifypush/query

Header

key type descriptioin
identity string base64({"userid":"xx","familyid":"xx","loginsession":"xx"})

Req body

{
  "userid":"xxx",
  "count":, //共查询多少条
  "currentid":,//当前已经查到的最大的recordid。即,从currentid的下一条(更早一条)记录开始返回,不填则默认从头开始
  "queryedflagenable":true/false //查询后是否要将被查询的条目标记为 “已查询”
}

Resp body

{
  "status":0,
  "msg":"ok",
  "data":[
    {
      "recordid":11,//推送记录id
      "touser":"xx",//
      "userid":"xx",
      "pushtype":"xx",
      "pushtime":"xx",//推送时间
      "content":"xx",
      "templateid":"xx",//模板id
      "tagcode":"xx",//tagcode的实际含义是 推送账号的标志
      "succflag":0,//0:表示推送失败,1:推送成功
      "did":"xx",
      "queried":true/false	//ture:表示已被查询,此字段再请求时queryedflagenable 为true时才有效。
    }
  ]
}

2.8 联动删除

请求方式

https POST

URL

加密版本:https://[lid]appfront.ibroadlink.com/appfront/v1/linkage/delete

非加密校验版本:https://[lid]appfront.ibroadlink.com/appfront/v2/linkage/delete

Header

key type descriptioin
identity string base64({"userid":"xx","familyid":"xx","loginsession":"xx"})
messageId string 消息id
licenseid string app licenseid

Req body

    {
        "ruleid": ""
    }

Resp body

    {
          "status":"",
          "msg":""
    }