通知中心对接方案
通知中心
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":""
}