跳转至

设备接入家长端

概述

该文档包括 上传设备状态、微信与设备语音交互、mqtt推送协议等相关内容,该文档的内容都需要设备端进行功能接入,保证公众号内的相关功能正常使用。

前期准备

  • 需要了解设备airkiss配网发现接入、微信硬件相关功能 点击了解详细 、微信公众平台服务号申请(需要企业账号类型)、MQTT推送协议 点击了解详细
  • 设备端airkiss局域网发现模块,需要填入两个重要参数,微信原始ID 以及设备唯一标识 device_id 。微信原始ID即为所使用微信公众号服务的原始ID,使用图灵统一微信公众号的即填入该公众号的原始ID,可以找图灵工作人员提供;设备唯一标识 device_id需要填写 图灵apikey与设备本身的ID的组合,即apiKey_deviceId形式,例如 1d465391260749458b65c27b020207f1_ai98980528353006,该方式可唯一标识设备,防止设备授权失败问题
  • 注意:其他请求相关的设备ID参数填写设备的真实的ID即可,注意和微信授权的ID区分,不要混淆。

HTTP相关接口

数据响应统一格式

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段",
    "payload":{}
}
字段 描述
code 响应状态码
desc 错误请求信息描述
payload 业务响应数据载体,不同的接口承载的数据结构不一样,若为空不返回

特殊参数说明:

字段 描述
deviceId 设备的原始ID,需要保证同一个apikey下每台设备的deviceId的唯一性。注意与airkiss的device_id字段区分开,两者不通用,也不能混用,是对设备的两种不同标识方法。

状态报告接口

主要用于设备端向图灵IOT平台上报设备的状态信息,如“电量”、“开关机”、音频播放等状态信息。

设备播放歌曲时,需要上传歌曲信息,包括播放、停止状态,上传歌曲信息必须携带mediaId参数,即歌曲的唯一标识。

请求设置

  • Path: /iot/status/notify
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey 字符串 用于接口请求授权验证
deviceId 字符串 设备唯一性标识
type 整型 状态类型,详细status类型见本章节type列表:
type=-1:自定义状态;
type=0:设备状态;
type=1:音频状态(music,story);
type=2:紧急状态(低电量);
type=3:本地音乐资源列表;
type=4:本地故事资源列表。
status 实体 状态实体,具体字段说明见下面说明

请求数据格式:

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA8005dfc111c1",
    "type":0,
    "status":{

    }
}

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段"
}

状态字段说明:

字段 类型 说明
vol int volume; // 0 - 100
battery int battery;// 0 - 100
sfree int storagecurrent;//当前设备存储量,单位KB
stotal int storagetotal;//总容量,单位KB
shake int shakeswitch;//震动开关
power int lowpowervalue;//1 低电量, 0 正常
bln int blnswitch;//呼吸灯开关
play int playmode;//歌曲播放状态,见具体说明
charging int charging;// 0-未充电 1-充电中
lbi int low power indicator;//低电量提醒开关 0-关闭 1-开启
tcard int t卡;// 0-T卡未插入 1-T卡已插入

type=0时设备状态请求数据示例

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA8005dfc111c1",
    "type":0
    "status":{
        "vol":50,
        "battery":50,
        "sfree":1000000,
        "stotal":3000000,
        "shake":1,
        "power":1,
        "bln":1,
        "play":0,
        "charging":0,
        "lbi":0,
        "tcard":0
    }
}

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段"
}

状态字段说明

字段 类型 描述
vol int volume; // 0 - 100
battery int battery;// 0 - 100
sfree int storagecurrent;//当前设备存储量,单位KB
stotal int storagetotal;//总容量,单位KB
shake int shakeswitch;
power int lowpowervalue;//1 低电量, 0 正常
bln int blnswitch;//呼吸灯开关
play int playmode;//歌曲播放状态,见具体说明
charging int 是否正在充电中
lbi int Low power indicator;//低电量提醒开关 0-关闭 1-开启
tcard int T卡;//0-T卡未插入 1-T卡已插入

type=1时音频状态请求数据示例

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA8005dfc111c1",
    "type":1,
    "status":{
        "title":"小燕子",
        "mediaId":111,
        "play":1
    }
}

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段"
}

状态字段说明

字段 类型 是否必须 描述
title 字符串 音乐名称
mediaId int 资源的唯一标识,上报歌曲信息时必须上传
play int 播放状态:
play=1 播放
play=2 暂停

type=2时低电量状态报警请求数据示例

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA8005dfc111c1",
    "type":2,
    "status":{
        "battery":10
    }
}

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段"
}

状态字段说明

字段 类型 描述
battery 整型 电量值

type=3时同步本地音乐资源示例

{
  "apiKey": "e15222a3dbc04360******060c43c3b8",
  "deviceId": "aiAA8005dfc111c1",
  "type": 3,
  "status": {
    "operate": 0,
    "names": "小燕子&世上只有妈妈好&小苹果"
  }
}

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段"
}

状态字段说明:

字段 类型 描述
operate 整型 操作 0-同步 1-删除 names为空则清空,否则删除指定音乐
names 字符串 音乐的名称

type=4时同步本地故事资源示例

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA8005dfc111c1",
    "type":4,
    "status":{
        "operate":0,
        "names":"白雪公主&灰姑娘&大鱼"
    }
}

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段"
}

状态字段说明:

字段 类型 描述
operate 整型 操作 0-同步 1-删除 names为空则清空,否则删除指定音乐
names 字符串 故事名称

设备 OTA 升级接口

主要用于设备端与图灵 IOT 平台进行版本设置与版本升级。

  1. 不提供云端存放升级包,不提供升级服务;
  2. 需要以DeviceID为最小单元;
  3. 客户自己监控电池电量,设备环境是否满足升级的基本需求,之后的 url 验证,版本 recheck,电量,容量验证等环节客户自己保证;
  4. 目前客户是通过把 xml 文件在 biz 导入。
  5. 客户在H5家长端页面OTA升级处点击升级后,图灵不会下发固件升级的通知给设备,需要设备在下次更新的时候通过版本查询接口获取相关数据后做更新的操作。

版本初始化接口

用于设备端向平台提交版本信息,初始化设备版本信息

请求设置

  • Path: /iot/v2/ota/initVersion
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey 字符串 设备的apiKey
deviceId 字符串 设备的 DeviceId
currentVersion 字符串 设备当前版本

请求数据格式

{
    "apiKey":"3c990a78c7f24bfxxxx0906173f09f30",
    "deviceId":"vkkv000axxx00067",
    "currentVersion":"3.2.1"
}

返回数据格式

{
    "desc": "success",
    "code": 0
}

版本查询接口

用于设备端向平台查询当前的版本信息以及是否有相应的新版本信息(比如设备开机或者按了特殊按键之后调用此接口来获取相关信息,决定是否需要更新版本)

请求设置

  • Path: /iot/v2/ota/version
  • Method: GET
参数 类型 是否必须 描述
apiKey 字符串 设备的apiKey
deviceId 字符串 设备的 DeviceId

请求数据格式

iot/v2/ota/version?apiKey= 3c990a78c7f24bfxxxx0906173f09f30&deviceId=vkkv000axxx00067

返回数据格式 - 查询不到相应的版本信息

{
    "desc": "暂无最新版本",
    "code": 10404
}
  • 查询到相应版本信息

示例

{
    "desc": "success",
    "code": 0,
    "payload": {
        "id": 44,
        "currentVersion": "3.2.1",
        "nextVersion": null,
        "apiKey": "3c990a78c7f24bfxxxx0906173f09f30",
        "deviceId": "vkkv000axxx00067",
        "agree": 1,
        "forced": null,
        "agreeOpenId": null,
        "firmwareUrl": null,
        "updateStatus": 1
    }
}
字段 类型 描述
id Integer 版本记录 ID
currentVersion 字符串 当前版本信息
nextVersion 字符串 新版本信息
apiKey 字符串 设备对应的 apiKey
deviceId 字符串 设备的 DeviceId
agree Integer 当前微信用户是否同意升级(在家长端H5页面的OTA升级处同意或者不同意后会重置此字段,设备端可以根据此字段来决定是否需要升级):
1 : 表示同意
-1 : 表示不同意
0/null : 表示未确认
forced Integer 是否强制使用,扩展字段,暂时不支持
agreeOpenId 字符串 当前微信用户是否同意升级的 openId,扩展字段,暂时不支持
firmwareUrl 字符串 新版本程序的下载地址
updateStatus Integer 新版本的更新结果(调用设备版本更新回调接口会重置此参数):
1 : 表示升级成功
-1 : 表示升级失败
0/null : 表示未升级

设备版本更新回调接口

设备在更新完成之后,需要调用此接口将结果告知给图灵 IOT 平台,避免重复更新

请求设置

  • Path: /iot/v2/ota/updateStatus
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey 字符串 设备的apiKey
deviceId 字符串 设备的 DeviceId
id Integer 在查询相应的版本信息中,返回的版本信息 ID
updateStatus Integer 新版本更新结果的状态:
1 : 表示升级成功
-1 : 表示升级失败
0/null : 表示未升级

请求数据格式

{
    "apiKey":"3c990a78c7f24bfxxxx0906173f09f30",
    "deviceId":"vkkv000axxx00067",
    "id":"1115",
    "updateStatus":1
}

返回数据格式

{
    "desc": "success",
    "code": 0
}

文件上传接口

涉及文件请求相关的接口,需要先通过将文件上传,平台会返回相关的MediaId用于请求。

请求设置

  • Path: /resources/file/upload?apiKey={apiKey}
  • Method: POST
  • Content-Type: multipart/form-data
参数 类型 是否必须 描述
apiKey 字符串 需要申请,如e15222a3dbc04360**060c43c3b8
speech 文件 语音文件(只支持amr格式,微信限制60s以内)

请求示例:

POST
/resources/file/upload?apiKey=7245axxxxxxxxxxxd3bebfxxxxxxxx40ced9
HTTP/1.1
Connection: keep-alive
Content-Length: 524
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115
Safari/537.36
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundaryfEgCQuURR7zTbs4F
Accept: */*
DNT: 1
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,zhTW;q=0.2,es;q=0.2
------WebKitFormBoundaryfEgCQuURR7zTbs4F
Content-Disposition: form-data; name="speech";
filename="test8k16b.amr"
Content-Type: application/octet-stream
#!AMR
<N..([.......o.&x)........eL...
<H...fy.........................<T...fy.........................<H..
.fy.........................<T...fy.........................<H...fy.
........................<T...fy.........................<H...fy.....
....................<T...fy.........................<H...fy.........
................
------WebKitFormBoundaryfEgCQuURR7zTbs4F--

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段",
    "payload":"mediaId,音频上传成功之后,服务器会返回一个mediaId用于后面的业务逻辑,如发送音频消息"
}

消息发送接口

用于设备端各种类型消息请求接口,目前仅支持两种类型的消息:

  • type=0 语音对讲
  • type=-1 自定义消息。

请求设置:

  • Path: /iot/message/send
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey 字符串 用于接口请求授权验证。
type 整型 消息类型,目前在该接口下仅支持语音对讲一种消息类型
当type=0:语音对讲;
当type=-1:自定义消息(自定义消息不会被处理,会经过 MQTT 通道推送给toUsers 用户)。
deviceId 字符串 设备唯一性标识。
toUsers 数组 可选 消息目标用户。
如针对微信客户端的openId,一般该字段由MQTT通道的数据的fromUser获取。
如果此字段为空,type=0则表示发消息给所有用户。
如果此字段非空,type=0则表示发语音消息给指定用户。
message 实体 可选 消息负载,根据消息而定,此字段可选根据消息类型type而定。
type=0时对讲消息需要此字段
mediaId 字符串 可选 消息多媒体ID,该字段可通过文件上传接口获取,此字段可选根据消息类型type而定。

请求数据格式:

{
    "apiKey":"1234567890",
    "type":0,
    "deviceId":"设备唯一性标识",
    "toUsers":[
        "to_user_id_1",
        "to_user_id_2",
        "to_user_id_3"
    ],
    "message":{
        "mediaId":"先使用文件上传接口获取mediaId"
    }
}

响应数据格式:

{
    "code":0,
    "desc":"错误请求信息描述,当成功时不返回该字段"
}
参数 类型 是否必须 描述
code int 0-成功 其他-失败 (41004 表示设备未被用户绑定)
desc string 错误描述

获取音频资源

设备获取音频资源接口,获取的是‘播放列表’里面音频资源,根据type值来顺序播放(上一首还是下一首)。当在家长端H5页面点击‘点播全部’按钮时,会将该专辑的音频推到播放列表,然后设备端在音频播放结束后调用该接口的下一首即可实现循环播放的效果。

请求设置

  • Path: /v2/iot/audio
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey 字符串 用于接口请求授权验证
deviceId 字符串 设备唯一性标识
type 整型 当type=0:下一首
当type=1:上一首
payload为歌曲相关信息

请求数据格式:

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA8005dfc111c1",
    "type":0
}

响应数据格式: 当type=0或1时:

{
    "code":0,
    "payload": {
        "id":"278",//音频资源ID,上报状态的时候需要带上
        "name":"小苹果",
        "tip":"http://xxxxxxx.amr",//歌曲播放前提示语,音频内容包含歌曲名
        "url":"http://xxxxxx.amr"
    }
}

获取收藏列表音频资源

设备获取收藏列表音频资源接口,获取的是收藏列表里面的音频资源,收藏列表的分类有以下四种:儿歌, 故事, 外语, 国学。

请求设置

  • Path: /v2/iot/collect
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey 字符串 用于接口请求授权验证
deviceId 字符串 设备唯一性标识
type 整型/字符串 type=0:切换收藏分类,在四个分类中进行切换
type=1000:当前分类里的上一首
type=2000:当前分类里的下一首
type="儿歌"或“故事”或“外语”或“国学”:在指定的分类中进行随机播放

请求数据格式:

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA8005dfc111c1",
    "type":0
}

响应数据格式: 当type=0时:

{
    "code":0,
    "payload": {
        "id":"278",//音频资源 ID ,上报状态的时候需要带上
        "name":"小苹果",
        "tip":"http://xxxxxxx.amr",//歌曲播放前提示语,音频内容包含歌曲名
        "url":"http://xxxxxx.mp3",
        "category": 42, // 资源类别
        "categoryName": "外语" // 资源名字
    }
}

设备收藏歌曲

满足设备有添加收藏按钮的需求,当用户点播歌曲时,希望收藏该单曲,并在微信家长端显示时,可以调用该接口实现。

注意:点播的歌曲必须来自图灵内容服务,并且歌曲信息中必须包含歌曲的唯一标识 ID ,才能正常调用该接口

请求设置

  • Path: /v2/iot/audio/collect
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey string 图灵apikey
deviceId string 设备唯一性标识
id int 图灵内容库歌曲的唯一标识 ID

请求数据格式:

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA001122334455",
    "id":123
}

响应数据格式:

{
    "desc": "already exist~",
    "code": -1
}
字段 描述
code 响应状态码 0-成功 其他失败
desc 错误请求信息描述

语音消息缓存

满足设备端需求将语音对讲消息缓存后再取出的功能。目前统一的都是用于发送语音消息后直接推送到设备端,不会对消息进行缓存。现在客户可以开启缓存功能,开启后推送的语音消息实体不会直接推送到设备,只会推送基本信息到设备端,用于设备端提醒有新消息,然后通过接口统一获取语音信息具体内容,缓存有效时间:取出为止。

目前只支持对语音消息的缓存,默认不会缓存,需联系图灵技术开启该功能

有新消息时设备端会收到如下消息推送,

{
    "type":0,
    "fromUser":"消息来源ID,如来自微信消息,则为微信的openId"
}

接收到该消息后,设备端可以做新消息提醒操作,然后请求获取语音消息接口,按顺序依次获取缓存的消息,接口说明如下:

请求设置

  • Path: /iot/message/get
  • Method: POST
  • Content-Type: application/json

请求数据格式:

{
    "apiKey": "e15222a3dbc04360******060c43c3b8",
    "deviceId":"aiAA001122334455"
}

响应数据格式:

{
    "desc": "success",
    "code": 0,
    "payload": {
        "url": "http://turing-iot.oss-cn-beijing.aliyuncs.com/audio/tts-99428a705dc140eaa088f8bedc9c4237.amr",
        "tip": null,
        "relationId": 0,
        "relationName": null
    }
}
字段 类型 是否必须 描述
code int 响应状态码 0-成功 其他失败
desc string 错误描述
tip string 消息提醒,如 爸爸来语音了
url string 语音消息
relationId int 发语音者的身份ID
relationName string 发语音者的身份名称

MQTT推送说明

MQTT数据通道主要用于图灵IOT云端服务向设备端推送消息,包括家长端H5资源页音频等消息的推送、微信公众号语音/文字信息推送、绑定解绑消息状态推送、设备状态上报等HTTP接口请求数据的推送等。目前支持三种类型消息:音乐,故事,对讲。建议设备联网成功后,立即建立与MQTT服务器的连接,以防推送的消息丢失。如果有使用mqtt心跳的话,建议1分钟请求一次(不要太频繁),连续三到五次没有收到回复断开链接后重新连接。

获取MQTT连接信息接口

加密方式说明:

data字段需使用AES加密,步骤如下:

参数 说明 备注
加密模式 CBC -
填充 PKCS5Padding -
数据块 128位(密钥为16位) -
密码 secretKey Secret,图灵官网申请
偏移量 secretKey 偏移量填写secret,图灵官网申请;
输出 base64编码 -
字符集 utf-8 -
明文 参考接口加密要求 string类型

请求设置

  • Path:/public/mqttManager/getMQTTConnectInfo
  • Method: POST
  • Content-Type: application/json
参数 类型 是否必须 描述
apiKey string APIKey,图灵官网申请
data string 使用AES加密后的请求数据,可参照加密方式;
Type string 0是设备号,1是微信openId,2是app唯一标识;
uniqueId string 根据type值填入

请求数据格式:

POST /public/mqttManager/getMQTTConnectInfo
Content-Type: application/json

{ 
"apiKey":"130e59f05***************86c14c9",
"data":"IkuEps***************778VNLVV"   
}

data加密前数据格式:
{   
    "type":0,
    "uniqueId":"ai00******033"
}

响应数据格式:

(每个uniqueId对应一份连接信息,建议设备初始化后调用此接口获取,请勿频繁调用):

{
    "desc": "success",
    "code": 0,
    "payload": {
        "account": "Signature|LTAI4G**************n-m7r1y4v9e0i",
        "password": "rkkl**************7uLP8=",
        "topic": "iot/130e**************000033",
        "clientId": "GID_device@@@13*******886c14c9@ai0*****003",
        "endpoint": "tcp://m**************1883"
    }
}

字段 类型 是否必须 描述
code int 说明,success为请求成功;
desc string 0为请求成功;41002请求参数有问题;
payload string 有效载荷(不能重复连接,否则导致连接失败)
account string 连接账号
password string 连接密码
topic string 订阅的主题
clientId string 自己的设备ID
endpoint url 连接地址(当兼容多种协议时会返回多个连接,以逗号隔开)

协议数据格式

参数描述 类型 描述
type 整型 消息类型:
type=0:chat
type=1:audio
type=2:control
type=3:notify
fromUser 字符串 消息来源ID,如微信的openId
message 对象 消息实体:
type=-1:自定义消息
type=0:对讲消息
type=1:音频控制消息
type=2:请求设备状态消息
type=3:通知设备上报当前的状态信息
message.operate 整型 当type=1时:1-play;2-stop
当type=2时:0-音量减;1-音量加;2-呼吸灯关;3-呼吸灯开;
4-低电提醒开;5-低电关;6-格式化存储;
7-恢复出厂设置;8-闹钟设定;9-打电话设定;
~~10-睡眠时间;11-起床时间;睡眠时间与起床时间合并,公用一个开关
~12-定时关闭播放状态时间。~~
当type=3时:0-通知设备上报设备状态;1-通知设备用户解绑 2-通知设备绑定成功
message.arg 作为operate的参数:
当type=1时为arg为string类型,表示“音乐名称”
当type=2时为arg为int类型, 表示“音量大小具体值等”
当type=2,operate=8时arg是一个json字符串,包含闹钟信息
当type=2,operate=12时arg="关闭时间的具体值" 0为不开启,-1为播放完当前声音,其他为具体数值
message.url 字符串 当type=0或者1时,消息输出为音频的url地址
message.category 整型 内容类别,
当type=0时:category={0-实时、1-留言}
当type=1时:category={0-音乐、1-故事}
当type=2时:无category
message.mediaId int 推送音频的唯一标识,上报歌曲状态是必须加上
message.tip string 歌曲名称的音频链接,用于播放前的提示语

对讲消息示例

{
    "type":0,
    "fromUser":"消息来源ID,如来自微信消息,则为微信的openId",
    "message":{
        "relationId": 1,
        "relationName": "爸爸",
        "tip": "http://test79.turingapi.com/file/xxxxxxx.mp3",
        "url":"http://test79.turingapi.com/file/xxxxxxx.mp3"
    }
}

参数说明:

参数 类型 是否必须 描述
relationId int 0-表示无身份 其他代表具体身份,如 1-爸爸 2-妈妈
relationName string 具体身份名称,relationId为0时不返回
tip string 对讲提示语链接,具体为:爸爸说,relationId为0 不返回
url string 对讲内容具体信息

歌曲推送消息示例

{
    "type":1,
    "fromUser":"消息来源ID,如来自微信消息,则为微信的openId",
    "message":{
        "category":0
        "operate":0,
        "arg":"50",
        "mediaId":678,
        "tip":"http://test79.turingapi.com/file/e15222a3dbc04360******060c43c3b8.mp3",
        "url":"http://test79.turingapi.com/file/e15222a3dbc04360******060c43c3b8.mp3"
    }
}

闹钟设置消息示例

{
     "type":2,
     "fromUser":"消息来源 ID,如来自微信消息,则为微信的 openId",
     "message":{
         "operate":8,
         "arg":{
             "id":1,
             "deviceId":"ai123456789xxxxx",
             "title":"闹钟一",
             "time":1495753200000,//时间戳,
             "repeat":"1,2,3",//重复时间,左指周一、二、三
             "status":1//0-关闭 1-开启
            }
        }
}

通知设备上报状态

{
    "type":3,
    "fromUser":"消息来源 ID,如来自微信消息,则为微信的 openId",
    "message":{
        "operate":0
    }
}

当设备收到通知消息,需要及时做处理,operate=0时,需要设备调用状态报告接口,上报设备状态,例如电量、充电状态等状态

通知设备用户解绑

{
    "type":3,
    "fromUser":"消息来源 ID,如来自微信消息,则为微信的 openId",
    "message":{
        "operate":1
    }
}

通知设备用户绑定成功

{
    "type":3,
    "fromUser":"消息来源 ID,如来自微信消息,则为微信的 openId",
    "message":{
        "operate":2
    }
}