文档中心 > 预建模型 (Pre-Built Models)

Discovery接口

更新时间:2019/02/26 访问次数:485

AliGenie.Discovery 接口描述了用以识别与用户帐户关连设备的信息。设备技能必须要能够处理并且正确的回复discovery指令好让用户或精灵服务端能够取得欲控制的设备信息,技能服务端也应该再某些时候主动上报关于用户帐户下关于增加、更新与删除设备的事件。

指令

Discover

当技能收到此指令时,技能需要对用户帐户进行设备发现,并将帐户下的设备回报给精灵服务。如果找不到任何设备、用户的access token过期、或有任何与用户帐户相关的错误发生的话,技能应该要在 Discover.Response 中回复一个空的设备数组,而非错误信息。

示例:Discover 指令

{
  "directive": {
    "header": {
      "namespace": "AliGenie.Discovery",
      "name": "Discover",
      "payloadVersion": "1",
      "messageId": "abc-123-def-456"
    },
    "payload": {
      "scope": {
        "type": "BearerToken",
        "token": "access-token-from-skill"
      }
    }
  }
}

Payload细节

Discovery请求的payload中只会包含一个 scope 对象。Scope提供了要求厂商进行设备操作的用户授权信息。

  • BearerToken - 提供了用以访问已绑定的厂商帐户的OAuth bearer token。

事件与属性

关于如何响应此接口,技能服务端可以:

  • Discover 指令同步的回复Discovery.Response事件。
  • 主动上报 AddOrUpdateReportDeleteReport 事件给精灵服务的TOP接口。

属性

Discover.Response

在此回复中需包含与该用户帐户所关连的所有设备信息,例如像是每个设备的:

  • 唯一ID
  • 每个设备的展示类型
  • 该设备的用户名称
  • 该设备能够主动上报给服务端或由用户查询的属性列表

如果该帐户下没有发现到任何设备,或是你的服务发生了错误,则应该回传一个空的 endpoints 数组。

示例:Discover.Response

{
  "event": {
    "header": {
      "namespace": "AliGenie.Discovery",
      "name": "Discover.Response",
      "payloadVersion": "1",
      "messageId": "abc-1234-xyz-7890"
    },
    "payload": {
      "endpoints": [
        {
          "endpointId": "car-001",
          "friendlyName": "My Car",
          "description": "My Car by The Car Manufacturer",
          "manufacturerName": "The Car Manufacturer",
          "displayCategories": [
            "CONNECTED_CAR"
          ],
          "cookie": {},
          "capabilities": [
            {
              "type": "AliGenieInterface",
              "interface": "AliGenie.ConnectedCar",
              "version": "1",
              "properties": {
                "supported": [
                  {
                    "name": "fuelLevel"
                  },
                  {
                    "name": "batteryLevel"
                  },
                  {
                    "name": "remainingRange"
                  }
                ],
                "proactivelyReported": true,
                "retrievable": true
              }
            },
            {
              "type": "AliGenieInterface",
              "interface": "AliGenie.ConnectedCar.LockController",
              "version": "1",
              "properties": {
                "supported": [
                  {
                    "name": "lockState"
                  }
                ],
                "proactivelyReported": true,
                "retrievable": true
              }
            },
            {
              "type": "AliGenieInterface",
              "interface": "AliGenie",
              "version": "1"
            }
          ]
        }
      ]
    }
  }
}

AddOrUpdateReport

当用户增加了一台新设备到他们的帐户下,或对已存在的设备进行修改时 (例如更名),需要技能服务主动像精灵服务上报此事件。此事件中需要包含的信息与 Discover.Response 非常类似,同样需要有唯一ID、用户友善的名称、设备支持的能力与能够被取得的属性等。

此事件为TOP接口调用 alibaba.ailabs.aligenie.discovery.addorupdatereport

Payload细节

栏位 描述 类型 必须
endpoints endpoint对象的数组。每个endpoint代表一个设备。 对象数组

endpoint对象

栏位 描述 类型 必须
endpoint.endpointId 设备ID。此ID必须对此技能全局唯一。 字串
endpoint.manufacturereName 设备厂商名。此值不能超过128字符。 字串
endpoint.friendlyName 顾客用来识别设备的名称。此值不能超过128字符,并且不能包含特殊符号。 字串
endpoint.description 对此设备的描述。此值不能超过128字符。此描述应该包含厂商名称或此设备是如何连接的。 字串
endpoint.displayCategory 表示此设备在精灵app上该如何显示。所指名的category会决定图标与在app中展示的设备细节。 字串数组
endpoint.cookie 存放设备额外信息的map,API不会使用或解析其内容。 字串/值对映射
endpoint.capabilities 表示特定设备所能支持与回应的操作的capability对象数组。每个capability对象可以依据类型以包含不同的栏位。 对象数组

展示类型

描述 备注
CONNECTED_CAR 具有由云端被控能力的车

capability 对象

AliGenieInterface capability

栏位 描述 类型 必须
type 表示能力的类型,其决定了该能力能有什么栏位。 字串“AliGenieInterface”
interface 接口的表示名称,描述对此设备的操作。 字串
version 表示此endpoint所支持的接口版本。 字串
properties.supported 表示此endpoint所能支持的接口的属性,以此格式显示: "name":"<propertyName>" 字串
proactivelyReported 表示此endpoint所列出的属性是否会产生 ChangeReport 事件。如果技能没有在此数组指明会上报事件的属性的话,则该属性的 proactivelyReportedretrievable 会被设为预设值false。 布尔值
retrievable 表示此endpoint所列出的属性是否响应 StateReport 事件。如果技能没有在此数组指明会上报事件的属性的话,则该属性的 proactivelyReportedretrievable 会被设为预设值false。 布尔值

DeleteReport

当用户从帐户中移除了一或多台设备时,技能服务需要主动向精灵服务上报此事件。

此事件为TOP接口调用 alibaba.ailabs.aligenie.discovery.deletereport

FAQ

关于此文档暂时还没有FAQ
返回
顶部