【问题标题】:Alexa error with session attributes会话属性的 Alexa 错误
【发布时间】:2018-08-13 18:30:42
【问题描述】:

我正在使用Alexa Node.js sdk,来实现一项技能。在会话开始时(LaunchRequest 意图),我想在会话属性中存储一些变量。根据the blog here,我使用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"
    }
}

作为per heresessionAttributes 应该包含我使用this.attributes 设置为会话变量的内容,但这在某种程度上是空的。

我该如何解决这个问题?

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

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

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

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

编辑 3:Cloudwatch 日志

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

【问题讨论】:

  • 可以粘贴console.log(data)的样本数据吗?
  • { token: '', ... }
  • 能否分享一下cloudwatch中记录的错误
  • 没有报错,依然共享日志,在cloudwatch中显示。

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


【解决方案1】:

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

我的data 的大小远远超过24kb。因此会话属性没有被存储,它导致exit意图。解决方案是将其存储在一些数据库中,例如DynamoDB

特别感谢Will

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多