本文,旨在分析DuerOS开放平台中
智能家居技能协议
。
参考的官方地址: https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/intro-protocol_markdown
文中仅摘取了几条协议举例,具体参照官方文档。
文章目录
- 协议简介
- 协议格式
- Header信息
- Payload信息
- 协议详述
- 发现设备
- DiscoverAppliancesRequest
- DiscoverAppliancesResponse
- 控制消息
- TurnOnRequest
- TurnOnConfirmation
- 查询消息
- GetStateRequest
- GetStateResponse
- 错误消息
- ValueOutOfRangeError
- 设备属性主动上报
- 主动上报请求消息
- 请求返回消息
- ReportStateRequest消息
- ReportStateResponse消息
- 设备信息同步消息
- 请求消息说明
- 返回说明
- 技能解绑消息通知
- UnbindBotRequest
- UnbindBotResponse
协议简介
智能家居协议是DuerOS与智能家居技能之间的通讯协议。通过这些协议您可以轻松的通过语音控制家里的智能设备,与设备进行交互。
智能家居协议使用HTTPS传输,协议采用JSON消息格式。
协议格式
智能家居协议指令(directives)由Header
和Payload
两部分组成。
举例如下:
{"header": {"namespace": "DuerOS.ConnectedHome.Control","name": "TurnOnRequest","messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688","payloadVersion": "1"},"payload": {"accessToken": "[OAuth token here]","appliance": {"additionalApplianceDetails": {},"applianceId": "[Device ID for Light]"},"function": "light"}
}
Header信息
Header包含消息标识符、指令名称、命令空间和payload版本信息。
消息格式
{"header": { "namespace": "DuerOS.ConnectedHome.Discovery","name": "DiscoverAppliancesRequest","messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2","payloadVersion": "1"}
}
属性说明
Header包含的属性及属性说明。
属性 | 属性说明 | 是否必须 |
---|---|---|
namespace | 指令的类别。 目前支持的类别有: DuerOS.ConnectedHome.Discovery:发现设备指令。 DuerOS.ConnectedHome.Control:控制设备指令。 DuerOS.ConnectedHome.Query:查询设备指令。 | 是 |
name | 指令的名称。 | 是 |
messageId | 消息的唯一标识符,长度小于128个字符。 messageId仅用于标识消息,无其他使用。 建议使用随机生成的UUID作为messageId。 | 是 |
payloadVersion | payload的版本号。 | 是 |
Payload信息
Payload的内容与Header中的name值相关,不同类型的指令,其payload内容也不相同。
举例如下:
{"payload": {"accessToken": "[OAuth token here]","appliance": {"additionalApplianceDetails": {},"applianceId": "[Device ID for Light]"},"function": "light"}
}
协议详述
DuerOS对控制、查询、属性上报等消息进行了分类。根据不同的流程,使用不同的消息。
大致说明如下:
消息类型 | 说明 | 控制方向 | 举例 |
---|---|---|---|
发现设备 | 小度平台向设备云发现用户的设备列表 | 小度–请求–>设备云 | 小度,发现设备 |
控制消息 | 用户对设备的控制类消息 由小度音箱或APP发起,发送到设备云进行解析 | 小度–请求–>设备云 | 小度,打开油烟机 小度,回家模式 |
查询消息 | 用户查询设备的状态数据 由小度音箱或APP发起,发送到设备云进行解析 | 小度–请求–>设备云 | 小度,查询烟机风速 小度,查询PM2.5 |
错误消息 | 控制、查询消息,操作失败时,响应给小度的错误消息 | 设备云–响应–>小度 | |
设备属性主动上报 | 当手动或其他非小度平台操作了设备后,通知到小度有属性更新 小度收到通知后,再向设备云请求设备属性信息。 | 设备云–请求–>小度 小度–请求–>设备云 | |
设备信息同步消息 | 用户设备信息发生变化时,通知给小度音箱 | 设备云–请求–>小度 | |
技能解绑消息通知 | 当用户在技能商店解绑智能家居技能时,通知设备云 | 小度–请求–>设备云 |
发现设备
发现设备消息用于查找用户可用的设备、可以使用的场景和设备分组信息,有DiscoverAppliancesRequest和DiscoverAppliancesResponse两个指令。DiscoverAppliancesRequest指令是发出查找设备请求,DiscoverAppliancesResponse指令回复查找到的设备。如果你的技能应用中的用户设备信息变更时,可以通过DuerOS提供的异步接口发送通知,触发用户设备信息同步到DuerOS。
DiscoverAppliancesRequest
当用户查找设备时,DuerOS会将该消息发送给技能。另外,用户每次在DuerOS技能商店启用你的技能时,此消息会自动触发一次。
Header信息
属性 | 取值 |
---|---|
name | DiscoverAppliancesRequest |
namespace | DuerOS.ConnectedHome.Discovery |
Payload信息
属性 | 描述 | 是否必须 |
---|---|---|
accessToken | 设备云端获取的access token。 | 是 |
openUid | 被授权的百度账号开放ID,与设备云账号一一对应。 设备云端需要将该字段与用户账号一一对应起来存储 其它协议中如果需要携带openUid字段时,则需要返回用户账号对应的openUid值。 | 是 |
应用举例
当用户说“小度小度,发现设备”,DuerOS理解用户为发现设备意图时或者当用户在DuerOS技能商店里启用技能并授权完成之后会向技能发送该DiscoverAppliancesRequest消息。消息示例如下:
{"header": {"namespace": "DuerOS.ConnectedHome.Discovery","name": "DiscoverAppliancesRequest","messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2","payloadVersion": "1"},"payload": {"accessToken": "[OAuth Token here]","openUid": "27a7d83c2d3cfbad5d387cd35f3ca17b"}
}
DiscoverAppliancesResponse
当DuerOS请求技能查找可用设备或可用场景时,技能会返回DiscoverAppliancesResponse消息。 如果查找到设备时,会返回设备的相关信息,包括actions、applianceTypes、additionalApplianceDetails、applianceId、friendlyDescription、friendlyName等属性信息。如果没有找到设备时,会返回空数组。
Header信息
属性 | 取值 |
---|---|
name | DiscoverAppliancesResponse |
namespace | DuerOS.ConnectedHome.Discovery |
Payload信息
1. 设备信息
属性 | 描述说明 | 是否必须 |
---|---|---|
discoveredAppliances | 以对象数组返回客户关联设备云帐户的设备、场景。 如客户关联帐户没有设备、场景则返回空数组。 如果在发现过程中出现错误,字段值设置为null, 用户允许接入的最大的设备数量是300。 | 是 |
discoveredAppliance.applianceTypes | 支持的设备、场景类型。 | 是 |
discoveredAppliance.applianceId | 设备标识符。 标识符在用户拥有的所有设备上必须是唯一的。此外,标识符需要在同一设备的多个发现请求之间保持一致。 标识符可以包含任何字母或数字和以下特殊字符:_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是 |
discoveredAppliance.modelName | 设备型号名称,是字符串类型,长度不能超过128个字符。 | 是 |
discoveredAppliance.version | 供应商提供的设备版本。是字符串类型,长度不能超过128个字符。 | 是 |
discoveredAppliance.friendlyName | 用户用来识别设备的名称。 是字符串类型,不能包含特殊字符和标点符号,长度不能超过128个字符。 | 是 |
discoveredAppliance. friendlyDescription | 设备相关的描述。 描述内容需要提及设备厂商,使用场景及连接方式。 长度不超过128个字符。 | 是 |
discoveredAppliance.isReachable | 设备当前是否能够到达。true表示设备当前可以到达,false表示当前设备不能到达。 | 是 |
discoveredAppliance.actions | 设备支持的操作类型数组。详细情况请参见 设备操作类型。 | 是 |
discoveredAppliance. additionalApplianceDetails | 提供给设备云使用,存放设备或场景相关的附加信息,是键值对。 DuerOS不解析或使用这些数据。该属性的内容不能超过5000字节。 | 是 内容可以为空 |
discoveredAppliance. manufacturerName | 设备厂商的名字。 | 是 |
discoveredAppliance.attributes | 设备的属性信息。 当设备没有属性信息时,协议中不需要传入该字段。 每个设备允许同步的最大的属性数量是10。 详细信息请参考设备属性及设备属性上报。 | 否 建议将设备属性上报,方便用户查询 |
discoveredAppliance.attribute.name | 属性名称,支持数字、字母和下划线,长度不能超过128个字符。 | 是 |
discoveredAppliance.attribute.value | 属性值,支持多种json类型。 | 是 |
discoveredAppliance.attribute.scale | 属性值的单位名称,支持数字、字母和下划线,长度不能超过128个字符。 | 是 |
discoveredAppliance.attribute. timestampOfSample | 属性值取样的时间戳,单位是秒。 | 是 |
discoveredAppliance. attribute. uncertaintyInMilliseconds | 属性值取样的时间误差,单位是ms。 如果设备使用的是轮询时间间隔的取样方式,那么uncertaintyInMilliseconds就等于时间间隔。如温度传感器每1秒取样1次,那么uncertaintyInMilliseconds的值就是1000。 | 是 |
2. 分组信息
属性 | 描述说明 | 是否必须 |
---|---|---|
discoveredGroups | discoveredGroups 对象的数组,该对象包含可发现分组,与用户设备帐户相关联的。 如果没有与用户帐户关联的分组,此属性应包含一个空数组。 如果发生错误,该属性可以为空数组[]。阵列中允许的最大项目数量为10。 | 是 |
discoveredGroups.groupName | 用户用来识别分组的名称, 不应包含特殊字符或标点符号,长度不超过20字符。 | 是 |
discoveredGroups.applianceIds | 分组所包含设备ID的数组,要求设备ID必须是已经发现的设备中的ID,否则会同步失败 每个分组设备ID数量不超过50。 | 是 |
discoveredGroups.groupNotes | 分组备注信息,不能超过128个字符。 | 是 |
discoveredGroups.additionalGroupDetails | 提供给技能使用的分组相关的附加信息的键值对。 该属性的内容不能超过2000字符。而且DuerOS也不了解或使用这些数据。 | 是,但可以为空数组[] |
说明:
- 如果没有找到设备或相关场景,此时返回的discoveredAppliances是一个空数组。如果查找设备过程中发生了错误,该字段值设置为null。
- 当applianceTypes=ACTIVITY_TRIGGER/SCENE_TRIGGER时,场景和模式不支持通过分组来控制,比如只支持“打开回家模式”,而不支持“打开客厅的回家模式”。
此处就不举例了,示例较长。
参考官网: https://dueros.baidu.com/didp/doc/dueros-bot-platform/dbp-smart-home/protocol/discovery-message_markdown
控制消息
控制消息(Control Message)是对智能家居设备进行控制的消息。有门锁设备控制消息、摄像机设备控制消息、灯光设备控制消息、温度设备控制消息等。
目前支持以下设备控制消息:
以上描述及语料,纯属个人理解,具体看小度。
举个例子
TurnOnRequest
当用户想打开指定设备时,DuerOS会将该消息发送给技能。
Header信息
属性 | 取值 |
---|---|
name | TurnOnRequest |
namespace | DuerOS.ConnectedHome.Control |
Payload信息
属性 | 描述说明 | 是否必须 |
---|---|---|
accessToken | 设备云端获取的access token。 | 是 |
appliance | 设备操作的具体对象,包括applianceId和additionalApplianceDetails。 | 是 |
appliance.applianceId | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外,标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符:_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是 |
appliance.additionalApplianceDetails | 提供给设备云使用,存放设备或场景相关的附加信息,是键值对。DuerOS不解析或使用这些数据。该属性的内容不能超过5000字节。 | 是,内容可以为空 |
function | 表示打开设备的子功能,例如,打开关闭灶台的灯光、根据此字段识别此类的请求 | 否 |
应用举例
当用户说“小度小度,打开电灯”,DuerOS理解到用户意图后,向技能发送TurnOnRequest消息,消息示例如下。
{"header": {"namespace": "DuerOS.ConnectedHome.Control","name": "TurnOnRequest","messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688","payloadVersion": "1"},"payload": {"accessToken": "[OAuth token here]","appliance": {"additionalApplianceDetails": {},"applianceId": "[Device ID for Light]"},"function": "light"}
}
TurnOnConfirmation
当请求的设备成功打开时,技能会发送该消息给DuerOS。
Header信息
属性 | 取值 |
---|---|
name | TurnOnConfirmation |
namespace | DuerOS.ConnectedHome.Control |
Payload信息
属性 | 取值 | 是否必须 |
---|---|---|
attributes | 设备属性信息,支持上报一个或多个属性信息。请查看属性信息附录,了解设备的属性和上报方式。 | 否,当设备属性信息发生变化时,建议将属性变更信息上报给DuerOS。 |
应用举例
当电视成功打开时,技能向DuerOS发送TurnOnConfirmation消息,示例如下。
{"header": {"namespace": "DuerOS.ConnectedHome.Control","name": "TurnOnConfirmation","messageId": "26fa11a8-accb-4f66-a272-8b1ff7abd722","payloadVersion": "1"},"payload": {"attributes": []}
}
查询消息
查询消息(Query Message)主要是通过智能家居设备查询空气质量、查询空气湿度、查询设备温度、查询设备状态等信息。目前支持以下查询消息。
举个例子
GetStateRequest
当用户想了解设备状态时,DuerOS会该将消息发送给技能,比如想要了解扫地机器人当前状态(清扫中/充电中/回充中…)时,可以说,“小度小度, 扫地机器人在干吗?”, 这时技能会收到GetStateRequest消息。
Header信息
属性 | 取值 |
---|---|
name | GetStateRequest |
namespace | DuerOS.ConnectedHome.Query |
Payload信息
属性 | 描述说明 | 是否必须 |
---|---|---|
accessToken | 设备云端获取的access token。 | 是 |
appliance | 设备操作的具体对象。包括applianceId和additionalApplianceDetails。 | 是 |
appliance.applianceId | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外,标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符:_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是 |
appliance.additionalApplianceDetails | 提供给设备云使用,存放设备或场景相关的附加信息,是键值对。DuerOS不解析或使用这些数据。该属性的内容不能超过5000字节。 | 是,内容可以为空 |
应用举例
用户说“小度小度,扫地机器人在干吗?”,DuerOS接收到用户意图后,向技能发送GetStateRequest消息。消息示例如下。
{"header": {"namespace": "DuerOS.ConnectedHome.Query","name": "GetStateRequest","messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688","payloadVersion": "1"},"payload": {"accessToken": "[OAuth token here]","appliance": {"additionalApplianceDetails": {},"applianceId": "[Device ID for Ceiling Fan]"}}
}
GetStateResponse
当技能查询到设备当前状态时,需要给DuerOS返回该消息,告知用户当前扫地机器人的状态。
Header信息
属性 | 取值 |
---|---|
name | GetStateResponse |
namespace | DuerOS.ConnectedHome.Query |
Payload信息
属性 | 描述说明 | 是否必须 |
---|---|---|
attributes | 设备的属性信息,最多支持上报10个属性。 | 是 |
attribute.name | 属性名称,这里取"state"。 | 是 |
attribute.value | 字符串,目前支持的属性值如下: CLEANING:清扫中 CHARGING:充电中 RECHARGING:回充中 SLEEPING:休眠中 STAND_BY:待命中 REPORT_ERROR:报错 SHUT_DOWN:关机 REMOTE_CONTROLING:遥控中 PAUSED:已暂停 | 是 |
attribute.scale | 属性值的单位名称,这里是空串’’。 | 是 |
attribute.timestampOfSample | 属性值取样的时间戳,单位是秒。 | 是 |
attribute.uncertaintyInMilliseconds | 属性值取样的时间误差,单位是ms。 | 是 |
应用举例
技能查询到“扫地机器人当前的运行状态是正在清扫时”,向DuerOS返回GetStateResponse消息,消息示例如下。
{"header": {"namespace": "DuerOS.ConnectedHome.Query","name": "GetStateResponse","messageId": "780013dd-99d0-4c69-9e35-db0457f9f2a7","payloadVersion": "1"},"payload": {"attributes": [{"name": "state","value": "CLEANING","scale": "","timestampOfSample":1496741861,"uncertaintyInMilliseconds": 10}]}
}
错误消息
当DuerOS向技能发送设备请求信息时,请求信息中可能存在设备不支持或者超出设备使用范围等问题,此时技能会返回相应的错误类型和信息。技能不需要返回每个错误,仅返回错误对应的错误类型。本文列出了错误类型和详细信息。
举个例子
ValueOutOfRangeError
当用户请求中对设备的设置参数超过设备支持的参数范围时,DuerOS就会收到该错误消息。
Header信息
属性 | 取值 |
---|---|
name | ValueOutOfRangeError |
namespace | DuerOS.ConnectedHome.Control |
Payload信息
属性 | 描述说明 | 是否必须 |
---|---|---|
minimumValue | 设备的允许设置参数的最小值,是64位双精度值类型。 | 是 |
maximumValue | 设备的允许设置参数的最大值,是64位双精度值类型。 | 是 |
应用举例
如用户想把空调温度设置为10度,但是空调的温度范围是17到30度,此时技能就会发送该消息给DuerOS,说明用户输入参数范围错误。消息示例如下。
{"header":{"namespace":"DuerOS.ConnectedHome.Control","name":" ValueOutOfRangeError","messageId":"697fe957-c842-4545-a159-8a8c75fbe5bd","payloadVersion":"1",},"payload":{"minimumValue":17.0,"maximumValue":30.0}
}
设备属性主动上报
当用户手动操作设备或者通过第三方app修改设备状态,如手动关闭厨房灯,手动切换电风扇模式,使用第三方app修改设备名称等,这些情况下DuerOS不会感知到设备属性变化,需要设备云主动上报设备属性。
流程:
-
技能主动向DuerOS发送请求消息,请求DuerOS同步设备属性信息。
-
DuerOS收到请求后向技能发送ReportStateRequest消息,请求技能上报相应的属性信息
-
技能收到请求后,将向DuerOS发送ReportStateResponse消息,上报属性信息。
主动上报请求消息
当用户手动操作设备或者通过第三方app修改设备状态时,技能会主动上报属性信息,发送上报请求消息。
接口地址
https://xiaodu.baidu.com/saiya/smarthome/changereport
请求方式
POST请求方式。
Head说明
参数名称 | 取值 |
---|---|
Content-Type | application/json |
参数信息
1. Header信息
属性 | 取值 |
---|---|
namespace | DuerOS.ConnectedHome.Control |
name | ChangeReportRequest |
2. Payload信息
属性 | 描述说明 | 是否必须 |
---|---|---|
botId | 设备云技能ID。 | 是 |
openUid | 用户被授权的百度账号开放ID,与设备云账号一一对应。 | 是 |
appliance | 上报的设备对象,包括applianceId和attributeName。 | 是 |
appliance.applianceId | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外,标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符:_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是 |
appliance.attributeName | 设备的属性名称,每次仅请求上报一个属性。 | 是 |
请求示例
curl -v "https://xiaodu.baidu.com/saiya/smarthome/changereport" -H 'Content-Type:application/json' -d
'{"header": {"namespace": "DuerOS.ConnectedHome.Control","name": "ChangeReportRequest","messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688","payloadVersion": "1"},"payload": {"botId": "5385e18b-619a-abcd-ed10-33a7d69780a6","openUid": "27a7d83c2d3cfbad5d387cd35f3ca17b","appliance": {"applianceId": "[Device ID for Light]","attributeName": "powerState"}}
}
说明
- 这里主动上报的属性,属性值是通过ReportStateRequest查询到的,所以需要在ReportStateRequest协议实现中支持上对于上报属性的查询。
请求返回消息
当技能主动发起上报属性请求后,DuerOS返回确认信息。
参数说明
参数名称 | 描述 | 类型 | 是否必须 |
---|---|---|---|
status | 消息状态。0表示已经完成属性上报,非0表示消息异常。 | int | 是 |
msg | 消息提示信息。当状态码为0时,提示更新的属性记录数。当状态码非0时,返回对应的错误消息。 | string | 是 |
messageId | 请求消息中的messageId信息。 | string | 是 |
data | 返回消息的数据信息。 | array | 是 |
data.updated_attribute_num | 同步属性的数量。 | int | 是 |
返回示例
{“status”: 0, "msg": "update 3 attributes", "messageId": "请求消息中的messageId", "data": {"updated_attribute_num": 3}
}
ReportStateRequest消息
当DuerOS收到技能主动上报设备属性的请求时,会向技能发送ReportStateRequest消息,请求技能上报属性的完整信息。
Header信息
属性 | 取值 |
---|---|
name | ReportStateRequest |
namespace | DuerOS.ConnectedHome.Query |
Payload信息
属性 | 描述说明 | 是否必须 |
---|---|---|
accessToken | 设备云端获取的access token。 | 是 |
appliance | 设备操作的具体对象。包括applianceId和additionalApplianceDetails。 | 是 |
appliance.applianceId | 设备标识符。标识符在用户拥有的所有设备上必须是唯一的。此外,标识符需要在同一设备的多个发现请求之间保持一致。标识符可以包含任何字母或数字和以下特殊字符:_ - = # ; : ? @ &。标识符不能超过256个字符。 | 是 |
appliance.additionalApplianceDetails | 提供给设备云使用,存放设备或场景相关的附加信息,是键值对。DuerOS不解析或使用这些数据。该属性的内容不能超过5000字节。 | 是,内容可以为空 |
appliance.attributeName | 查询的属性名称,字符串类型,支持数字、字母和下划线,长度不能超过128个字符。 | 是 |
应用举例
当手动将关上厨房灯时,厨房灯的属性发生变化,技能主动向DuerOS发送请求,DuerOS收到请求后,向技能发送ReportStateRequest消息,消息示例如下。
{"header": {"namespace": "DuerOS.ConnectedHome.Query","name": "ReportStateRequest","messageId": "01ebf625-0b89-4c4d-b3aa-32340e894688","payloadVersion": "1"},"payload": {"accessToken": "[OAuth token here]","appliance": {"additionalApplianceDetails": {},"applianceId": "[Device ID for Light ]""attributeName": "turnOnState"}}
}
ReportStateResponse消息
当技能收到ReportStateRequest请求消息时,会主动上报请求消息中属性的完整信息,并向技能发送ReportStateResponse消息。
Header信息
属性 | 取值 |
---|---|
name | ReportStateResponse |
namespace | DuerOS.ConnectedHome.Query |
Payload信息
属性 | 描述说明 | 是否必须 |
---|---|---|
attributes | 设备的属性信息,最多支持上报10个属性。 | 是 |
attribute.name | 属性名称,支持数字、字母和下划线,长度不能超过128个字符。 | 是 |
attribute.value | 属性值,支持多种json类型。 | 是 |
attribute.scale | 属性值的单位名称,支持数字、字母和下划线,长度不能超过128个字符。 | 是 |
attribute.timestampOfSample | 属性值取样的时间戳,单位是秒。 | 是 |
attribute.uncertaintyInMilliseconds | 属性值取样的时间误差,单位是ms。如果设备使用的是轮询时间间隔的取样方式,那么uncertaintyInMilliseconds就等于时间间隔。如温度传感器每1秒取样1次,那么uncertaintyInMilliseconds的值就是1000。 | 是 |
应用举例
技能获取到厨房灯的turnOnState属性时,向DuerOS发送ReportStateResponse消息,消息示例如下。
{"header": {"namespace": "DuerOS.ConnectedHome.Query","name": "ReportStateResponse","messageId": "780013dd-99d0-4c69-9e35-db0457f9f2a7","payloadVersion": "1"},"payload": {"attributes": [{"name": "turnOnState","value": "OFF","scale": "","timestampOfSample": 1496741861,"uncertaintyInMilliseconds": 0}]}
}
说明
- 技能主动上报属性时,在主动上报请求消息中每次仅请求上报一个属性,在ReportStateResponse消息中除了返回请求的属性外,还可以返回设备的其他属性信息,最多支持返回10个属性信息。
设备信息同步消息
该接口为厂商通知DuerOS的接口,当技能涉及的用户设备信息发生变化时,如用户新增设备或减少设备,此时技能可以通过设备信息同步接口请求DuerOS进行设备信息同步。
请求消息说明
技能向DuerOS发送请求消息,请求DuerOS同步设备变更信息。
接口地址
https://xiaodu.baidu.com/saiya/smarthome/devicesync
请求方式
POST请求方式
参数说明
参数名称 | 参数说明 | 类型 | 是否必需 |
---|---|---|---|
botId | 技能ID。 | string | 是 |
logId | 技能本次请求logId。 | string | 是 |
openUids | 需要同步的用户openUid信息,每次同步的openUid不超过5个。 | array | 是 |
Head说明
参数名称 | 取值 |
---|---|
Content-Type | application/json |
请求示例
curl -v "https://xiaodu.baidu.com/saiya/smarthome/devicesync" -H 'Content-Type:application/json' -d
'{"botId":"123456xyz-123456-4c5d-345677xyz","logId":"123456789","openUids":["17a7d83c2d3cfbad5d387cd35f3ca17b"]
}'
返回说明
当技能发起设备信息同步请求后,DuerOS返回信息同步确认消息。
参数说明
参数名称 | 描述 | 类型 | 是否必须 |
---|---|---|---|
status | 请求消息状态。0表示消息正常,非0表示消息异常。 | int | 是 |
msg | 请求消息同步状态,可能出现以下情况。 ok:表示至少一个openUid同步成功。 openUid not more than 5:表示openUid信息超过5个。 not support botId:表示技能ID不存在。 sync failed:表示请求信息同步失败。 param error:表示参数不合法。 | string | 是 |
logid | 请求消息中的logid。 | string | 是 |
data | 返回消息的数据信息。 | array | 是 |
data.failed | 同步失败的openUid集合。 | array | 是 |
data.succeed | 同步成功的openUid集合。 | array | 是 |
返回示例
{"status": 0,"msg": "ok","logid": "123456789","data": {"failed": [],"succeed": ["17a7d83c2d3cfbad5d387cd35f3ca17b"]}
}
技能解绑消息通知
该接口为DuerOS通知厂商的接口。当用户在技能商店解绑智能家居技能时,DuerOS会使用该协议通知到技能服务器,以便第三方智能家居服务提供商获取到用户的这一行为而做出相应的逻辑变化,比如,用户解绑技能后,当用户新增设备时,不再通知DuerOS。协议使用HTTPS传输,采用JSON消息格式。
UnbindBotRequest
当用在技能商店解绑该技能时,DuerOS会将该消息发送给技能。
Header信息
属性 | 取值 |
---|---|
name | UnbindBotRequest |
namespace | DuerOS.ConnectedHome.UnbindBot |
Payload信息
属性 | 描述 | 是否必须 |
---|---|---|
accessToken | 设备云端获取的access token。 | 是 |
应用举例
当用户在技能商店解绑了该技能时, DuerOS向技能发送UnbindBot消息,消息样例如下
{"header": {"namespace": "DuerOS.ConnectedHome.UnbindBot","name": "UnbindBotRequest","messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2","payloadVersion": "1"},"payload": {"accessToken": "[OAuth Token here]"}
}
UnbindBotResponse
当DuerOS通知技能用户解绑了该技能,技能会返回UnbindBotResponse消息。
Header信息
属性 | 取值 |
---|---|
name | UnbindBotResponse |
namespace | DuerOS.ConnectedHome.UnbindBot |
Payload信息
Payload信息为空,DuerOS只是通知技能用户在DuerOS技能商店解绑了该技能。
应用举例
当DuerOS向技能发送了解绑消息后,技能回复DuerOS消息样例如下
{"header": {"namespace": "DuerOS.ConnectedHome.UnbindBot","name": "UnbindBotResponse","messageId": "6d6d6e14-8aee-473e-8c24-0d31ff9c17a2","payloadVersion": "1"},"payload": {}
}