5

我已经设置了一个 Alexa 智能家居技能,所有设置都完成了,oauth2 处理完成了,并且在我的 Amazon Echo 设备上启用了技能。Lambda 函数已设置并链接到技能。当我“发现设备”时,我可以在日志中看到负载命中了我的 Lambda 函数。我实际上是通过 context.succeed() 方法返回带有测试设备的以下 JSON。但是 Echo 告诉我它找不到任何设备。

{
  "header": {
    "messageId": "42e0bf9c-18e2-424f-bb11-f8a12df1a79e",
    "name": "DiscoverAppliancesResponse",
    "namespace": "Alexa.ConnectedHome.Discovery",
    "payloadVersion": "2"
  },
  "payload": {
    "discoveredAppliances": [
      {
        "actions": [
          "incrementPercentage",
          "decrementPercentage",
          "setPercentage",
          "turnOn",
          "turnOff"
        ],
        "applianceId": "0d6884ab-030e-8ff4-ffffaa15c06e0453",
        "friendlyDescription": "Study Light connected to Loxone Kit",
        "friendlyName": "Study Light",
        "isReachable": true,
        "manufacturerName": "Loxone",
        "modelName": "Spot"
      }
    ]
  }
}

上面的有效载荷看起来正确吗?

4

5 回答 5

2

根据https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/smart-home-skill-api-reference#discovery-messagesversion属性是必需的。您的回复似乎缺少该属性。

在我的(非常短的)经验中,即使响应中最小的错误也会产生一个无声的错误,就像你正在经历的错误一样。

于 2016-11-20T23:28:54.103 回答
1

我有同样的问题。如果您正在为“娱乐设备”创建发现,请确保您已将输出包装在 context.succeed 的“事件”键中

var payload = {
    endpoints:
        [
            {
                "endpointId": "My-id",
                "manufacturerName": "Manufacturer",
                "friendlyName": "Living room TV",
                "description": "65in LED TV from Demo AV Company",
                "displayCategories": [  ],
                "cookie": {
                    "data": "e.g. ip address",
                },
                "capabilities":
                    [

                        {
                            "interface": "Alexa.Speaker",
                            "version": "1.0",
                            "type": "AlexaInterface"
                        },

                    ]
            }
        ]
};
var header = request.directive.header;
header.name = "Discover.Response";
context.succeed({ event: {
    header: header, payload: payload
} });

尽管在示例代码中从未提及这一点,并且给出了一个不正确的示例(https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/steps-to-create-a-智能家居技能)。但是,提供的响应正文包括“事件”键。

于 2017-07-22T14:35:02.670 回答
0

重新创建 lambda 函数帮助我解决了这个问题。我还在创建时设置了“启用触发器”检查按钮,但我不确定这是否重要。之后我的技能提供的设备被成功找到。

于 2016-07-19T23:26:41.830 回答
0

编辑:答案是错误的。唯一有用的信息是这个

这种 context.fail 语法实际上已被弃用。查找 Lambda 上下文对象属性,它现在应该更像“callback(null, resultObj)”。

于 2016-06-20T17:06:04.283 回答
0

您是否在函数中包含该return语句?

    return {
        "header": header,
        "payload": payload
    }

示例中缺少它,添加后,我能够“发现”我的设备。

于 2016-09-23T13:41:26.290 回答