更新时间:2025-05-30 01:56:03下载pdf
智慧商业平台主要通过Pulsar主动推送各种事件数据给外部合作伙伴,以满足合作伙伴对消息实时性和消息持久化的要求。
开发者将开发者账号、授权密钥clientId(accessId)交予智慧商业平台技术支持,开通消息订阅。
Pulsar是一个支持多租户的、高性能的服务器到服务器之间消息通讯的解决方案,最初由雅虎开发,现在由 Apache 软件基金会管理。涂鸦基于开源的Pulsar系统进行了定制改进,按照涂鸦提供Pulsar SDK可完成消息接入。Pulsar作为消息代理,Pulsar采用了发布订阅的设计模式,也称作pub-sub。该设计模式中,在这种模式中,生产者将消息发布到主题,然后,消费者可以订阅这些主题,处理传入消息,并在处理完成时发送确认。 一旦订阅被创建,所有的消息都将被Pulsar保留,即使consumer已断开连接。只有在consumer确认消息被成功处理后,保留下来的消息才会被丢弃。此外,一个主题可以由多个消费者订阅,并且当消费者成功处理消息时,它需要向代理发送确认,以便代理可以丢弃该消息。涂鸦的Pulsar broker为每个topic分配了多个partition,Pulsar broker将根据分区和消费者路由消息。
具体参考open-mq-sdk里面example部分的ConsumerExample代码,接入时需要提供以下三部分数据:
url(合作伙伴根据自己的需要选择要接入的url):
消息格式
参数名 | 类型 | 描述 |
---|---|---|
encryptPayload | String | 消息体密文 |
sign | String | 采用指定签名算法计算出的签名 |
encryptType | String | 加密类型 |
t | Long | 13位标准时间戳 |
v | String | 版本号 |
消息示例
{
"encryptType": "aes_ecb",
"v": "1.0",
"t": 1588918073598,
"encryptPayload":"4FDEE3FE59FCD76E26150******",
"sign": "4b7084b3b87b550c0d967f77******"
}
消息体格式
参数名 | 类型 | 描述 |
---|---|---|
bizCode | String | 业务编号 |
eventType | String | 事件类型 |
data | JSON | 消息数据 |
消息体示例
{
"bizCode": "device",
"eventType": "dp_report",
"data": {}
}
在获得真正的DATA数据前根据需要进行防篡改md5签名校验,签名算法如下: 将收到的JSON格式的每个(排除sign和值为空的参数)参数格式化为"key=val",进行组装(使用key升序),组装后的字符串格式如:k1=v1||k2=v2,然后加上密钥如:k1=v1||k2=v2…kn=vn||key,进行整串字符串的MD5签名,如果MD5值和收到数据的sign一样,则表明数据没有被篡改,否则视为被篡改。
签名校验通过后,先对数据进行BASE64解码,再用accessKey的中间16位进行AES解密(ECB模式),从而得到真正的设备状态数据。
bizCode | 描述 |
---|---|
device | 设备事件推送 |
voice | 语音业务推送 |
construction | 施工业务推送 |
eventType | 描述 |
---|---|
bind | 设备绑定 |
unbind | 设备解绑 |
reset | 设备重置 |
online | 设备上线 |
offline | 设备下线 |
dp_report | 设备状态上报 |
name_update | 设备名称变更 |
设备绑定消息示例
{
"data":{
"devId":"02200434dc4*******",
"deviceName":"Socket(wifi)_0",
"gwId":"",
"location":{
"child":{
"id":"12561526665*******",
"name":"Test room"
},
"id":"1256148753241358336",
"name":""
},
"namespace":"BgdBXzUhIg5x77770LL1Of*******",
"ownerId":"139960*******",
"position":"Home office",
"productId":"qCY4YFq0*******",
"sub":false,
"uid":"bay1588324079*******",
"uuid":"02200434dc4f*******"
},
"bizCode":"device",
"eventType":"bind"
}
设备解绑消息示例
{
"data":{
"devId":"02200434dc4f2*******",
"namespace":"Developer namespace"
},
"bizCode":"device",
"eventType":"unbind"
}
设备重置消息示例
{
"data":{
"devId":"02200434dc4f22*******",
"namespace":"Developer namespace"
},
"bizCode":"device",
"eventType":"reset"
}
设备上线消息示例
{
"data":{
"devId":"02200434dc4f22*******",
"namespace":"Developer namespace",
"time":1589019224062
},
"bizCode":"device",
"eventType":"online"
}
设备下线消息示例
{
"data":{
"devId":"02200434dc4*******",
"namespace":"Developer namespace",
"time":1589019224062
},
"bizCode":"device",
"eventType":"offline"
}
设备状态上报消息示例
{
"data":{
"devId": "002dj00118f*******",
"productId": "PID of the product",
"dataId": "145*****************",
"namespace":"Developer namespace",
"status": [
{
"code": "switch_1",
"value": "true",
"time": 1589767589137
}
]
},
"bizCode":"device",
"eventType":"dp_report"
}
设备更名消息示例
{
"data":{
"devId":"02200434dc4*******",
"deviceName":"Socket",
"namespace":"Developer namespace"
},
"bizCode":"device",
"eventType":"name_update"
}
bizCode | 描述 |
---|---|
voice_nlu | 语音识别结果推送 |
voice_room_bind | 音箱房屋绑定结果推送 |
语音识别结果消息示例
{
"data":{
"devId":"6cd40b4ed084a*******",
"namespace":"BgdBXzUhIg5x77770*******",
"nlu":"[{\"entities\":[{\"value\":\"TV\",\"entity\":\"deviceName\"}],\"domain\":\"mediaControl\",\"confidence\":1,\"text\":\"Can I pause the TV playing?\",\"intent\":\"pause\"}]",
"productId":"fabz****",
"uid":"bay1588324079*******",
"uuid":"f572ecc09e19d8c1"
},
"bizCode":"voice",
"eventType":"voice_nlu"
}
音箱房屋绑定结果消息示例
{
"data":{
"voice_id":"6cd40b4ed084ac*******",
"namespace":"BgdBXzUhIg5x77770LL1*******"
},
"bizCode":"voice",
"eventType":"voice_room_bind"
}
eventType | 描述 |
---|---|
task_status_change | 任务状态变更推送 |
施工任务状态变更消息示例
{
"data":{
"namespace":"BgdBXzUhIg5xLL1O*******",
"taskId":"125614875324*******",
"taskType":"CONSTRUCTION",
"taskStatus":"PENDING_ACCEPTANCE",
"sendTime":"1607220008843"
},
"bizCode":"construction",
"eventType":"task_status_change"
}
参数 | 描述 |
---|---|
taskId | 任务唯一标识. |
taskType | 类型: CONSTRUCTION:施工 MAINTENANCE:维修 |
taskStatus | 施工状态: IN_CONSTRUCTION:施工中 IN_MAINTENANCE:维修中 PENDING_ACCEPTANCE:待验收 ACCEPTANCE_COMPLETE:验收完成 |
sendTime | 消息发送时间, 13位时间戳 |
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈