会话属性的Alexa错误

时间:2018-08-13 18:30:43

标签: node.js async-await alexa alexa-skill

我正在使用Alexa Node.js sdk来实施一项技能。在会话开始时(以LaunchRequest的意图),我想在会话属性中存储一些变量。根据{{​​3}},我正在使用this.attributes.key存储会话属性。

const handlers = {
    'LaunchRequest': function () {
        database.startSession()
            .then(data => {
                // console.log(data); // data does have token
                this.attributes.token=data.token;
                // this.attributes['token']=data.token; // Tried this too
                this.emit(':ask', responses.launch, responses.launchReprompt);
            })
            .catch(err => {
                console.error(err);
                this.emit(":ask", responses.error);
            });
    }, 
    .... More handlers
}

但是,在启动命令中,出现此错误

  

所请求的技能响应出现问题

我在日志中没有看到错误。

这是我的回应(在Alexa测试开发人员控制台中可见)

{
    "body": {
        "version": "1.0",
        "response": {
            "outputSpeech": {
                "type": "SSML",
                "ssml": "<speak> Ok, exiting App. </speak>"
            },
            "shouldEndSession": true
        },
        "sessionAttributes": {},
        "userAgent": "ask-nodejs/1.0.25 Node/v8.10.0"
    }
}

the blog here一样,sessionAttributes应该包含我使用this.attributes设置为会话变量的内容,但是在某种程度上是空的。

我该如何解决?

编辑:如果我在this.attributes行中注释掉,则会正确收到欢迎消息。

这是我的startSession函数,如果有帮助的话。

async function startSession() {
    return {
        token: await getToken(),
        ... More attributes
    };
}

编辑2:我注意到非常奇怪的事情。如果我只是做this.attributes.token="foobar",则session属性会正确设置。因此,我假设我的async函数存在问题。请注意,console.log(data)仍使用token属性正确打印数据。

编辑3:Cloudwatch日志

  

START RequestId:版本:$ LATEST   2018-08-15T14:00:47.639Z警告:未设置应用程序ID   END RequestId:REPORT RequestId:持续时间:315.05   ms计费持续时间:400 ms内存大小:128 MB使用的最大内存:73 MB
  START RequestId:版本:$ LATEST   2018-08-15T14:00:47.749Z警告:未设置应用程序ID   2018-08-15T14:00:48.564Z {令牌:'令牌',过滤器:   'foobar'} END RequestId:REPORT RequestId:持续时间:   849.98 ms计费时间:900 ms内存大小:128 MB使用的最大内存:74 MB START RequestId:版本:$ LATEST   2018-08-15T14:00:49.301Z警告:应用程序ID不是   设置END RequestId:REPORT RequestId:    持续时间:0.72 ms计费持续时间:100 ms内存大小:   128 MB已使用的最大内存:74 MB

1 个答案:

答案 0 :(得分:1)

我们发现response对象的最大大小为24kbreference1reference2reference3

我的data的大小比24kb大得多。因此,会话属性没有被存储,并且导致了exit的意图。解决方案是将其存储在DynamoDB之类的数据库中。

特别积3 Will