适用于Lambda失败的智能家居API的Amazon Alexa设备发现

时间:2016-06-03 23:23:22

标签: aws-lambda alexa alexa-skills-kit amazon-echo

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

import UIKit

class ProfileMgmtViewController: UIViewController {

  @IBOutlet weak var bgImageContainerView: UIView!
  @IBOutlet weak var userBgImg: UIImageView!
  @IBOutlet weak var userImg: UIImageView!

  override func viewDidLoad() {
    ...

    userBgImg.backgroundColor = UIColor(patternImage: userImg.image!)

    let blurEffect = UIBlurEffect(style: .Light)
    let blurView  = UIVisualEffectView(effect: blurEffect)
    blurView.frame = userBgImg.bounds
    print (userBgImg.bounds)
    userBgImg.addSubview(blurView)
    ...

上述有效负载是否正确?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我遇到了同样的问题。如果您要为"娱乐设备"创建发现,请确保已将输出包装在' event' 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-smart-home-skill)。但是,提供的响应机构包括"事件"键。

答案 2 :(得分:0)

编辑:答案错了。这个

只有有用的信息

实际上不推荐使用此context.fail语法。查找Lambda上下文对象属性,它现在看起来应该更像是“callback(null,resultObj)”。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

示例中缺少该内容,添加后,我能够发现'我的设备。