Aws lambda 针对智能家居API的Amazon Alexa设备发现,Lambda失败

Aws lambda 针对智能家居API的Amazon Alexa设备发现,Lambda失败,aws-lambda,alexa,alexa-skills-kit,amazon-echo,Aws Lambda,Alexa,Alexa Skills Kit,Amazon Echo,我已经设置了Alexa智能家居技能,所有设置完成,oauth2处理完成,并且在我的Amazon Echo设备上启用了该技能。Lambda功能已设置并链接到技能。当我“发现设备”时,我可以在日志中看到有效负载命中我的Lambda函数。我通过context.success()方法返回以下带有测试设备的JSON。但是Echo告诉我它找不到任何设备 { "header": { "messageId": "42e0bf9c-18e2-424f-bb11-f8a12df1a79e", "

我已经设置了Alexa智能家居技能,所有设置完成,oauth2处理完成,并且在我的Amazon Echo设备上启用了该技能。Lambda功能已设置并链接到技能。当我“发现设备”时,我可以在日志中看到有效负载命中我的Lambda函数。我通过context.success()方法返回以下带有测试设备的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"
      }
    ]
  }
}

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

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


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

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

您的函数中是否包含了
return
语句

    return {
        "header": header,
        "payload": payload
    }
示例中缺少它,添加它后,我能够“发现”我的设备。

根据
版本,需要
属性。您的回答似乎缺少该属性


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

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

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
} });

尽管在示例代码中从未提及这一点,但给出了一个不正确的示例()。但是,提供的响应正文包括“事件”键。

您有任何证明链接吗?正如我所看到的,有很多示例,其中结果作为
context.succeed
函数的参数返回。此外,在智能家居API中,并没有一个回调方法传递给意图处理程序。我误解了什么。您所需要的只是回调函数。从那以后我一直在编辑它你成功了吗?我面临着完全相同的问题。我已经尝试生成一个真正的随机messageId,并更改其他值以防万一,但没有:(我刚刚让min起作用了!在我的例子中,我把
name
namespace
的值混在一起了。不幸的是,我不得不说,现在我的回答和你的一样……我认为Alexa方面缺乏一个好的调试工具,因此很难找到这个小错误……因为问题涉及到JSON,这是不适用的由于头部和有效载荷都在那里。版本肯定丢失了。Domotics、IoT和蝙蝠侠当然也在新的IoT.SE()上讨论这个话题。这仍然是真的,困扰了我大约2个小时,谢谢!