【发布时间】: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 here,sessionAttributes 应该包含我使用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