消息推送

更新时间:2025-05-30 01:56:03下载pdf

消息订阅

        智慧商业平台主要通过Pulsar主动推送各种事件数据给外部合作伙伴,以满足合作伙伴对消息实时性和消息持久化的要求。

开通方式

        开发者将开发者账号、授权密钥clientId(accessId)交予智慧商业平台技术支持,开通消息订阅。

Pulsar简介

        Pulsar是一个支持多租户的、高性能的服务器到服务器之间消息通讯的解决方案,最初由雅虎开发,现在由 Apache 软件基金会管理。涂鸦基于开源的Pulsar系统进行了定制改进,按照涂鸦提供Pulsar SDK可完成消息接入。Pulsar作为消息代理,Pulsar采用了发布订阅的设计模式,也称作pub-sub。该设计模式中,在这种模式中,生产者将消息发布到主题,然后,消费者可以订阅这些主题,处理传入消息,并在处理完成时发送确认。 一旦订阅被创建,所有的消息都将被Pulsar保留,即使consumer已断开连接。只有在consumer确认消息被成功处理后,保留下来的消息才会被丢弃。此外,一个主题可以由多个消费者订阅,并且当消费者成功处理消息时,它需要向代理发送确认,以便代理可以丢弃该消息。涂鸦的Pulsar broker为每个topic分配了多个partition,Pulsar broker将根据分区和消费者路由消息。

安全

  • 认证安全:涂鸦Pulsar消息系统针对身份认证进行了深度定制以满足高安全性要求,涂鸦采用动态令牌机制来增强安全,开发者可忽略实现细节,基于涂鸦提供的SDK即可完成认证;
  • 数据安全:
  1. 传输安全:涂鸦Pulsar消息推送系统基于SSL传输数据;
  2. 业务安全:业务数据均采用AES-128加密,每条请求并附上签名。

请求方式

具体参考open-mq-sdk里面example部分的ConsumerExample代码,接入时需要提供以下三部分数据:

  • username: 开发者平台申请的云API授权部分的accessId
  • password: 开发者平台申请的云API授权部分的accessKey

url(合作伙伴根据自己的需要选择要接入的url):

  • 中国区 pulsar+ssl://mqe.tuyacn.com:7285/
  • 美国区 pulsar+ssl://mqe.tuyaus.com:7285/
  • 欧洲区 pulsar+ssl://mqe.tuyaeu.com:7285/

数据格式

消息格式

参数名 类型 描述
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位时间戳