我是Alexa技能的新手,并且正在开发Alexa技能,在我的情况下,有些情况下我不想等待HTTP响应返回,并且由于Http响应延迟而导致的lambda超时可以我给出了一条自定义消息来代替“请求的技能的响应存在问题”。我的代码是:
'ProtectArmIntent': function() {
if(checkAccessToken(this.event.session.user.accessToken)){
var data = {
mode: HUB_MODE.ARM,
regId: "null"
}
callAPI("post", API_COMMANDS.HUB_MODE, data, this.event.session.user.accessToken)
.then((body) => {
if(body.response.status === "SUCCESS"){
this.emit(':tell', messages.ARM.SUCCESSFUL);
} else {
this.emit(':tell', messages.ARM.FAILED);
}
})
.catch((err) => {
this.emit('SessionEndedRequest');
//errorHandler.call(this, err, messages.ARM.FAILED);
});
} else {
this.emit('LinkAccount');
}
},
和alexa模拟器请求:
“请求”:{ “ type”:“ SessionEndedRequest”, “ requestId”:“ amzn1.echo-api.request.67e1612e-f8a4-43f5-ab28-175ba7d7941f”, “ timestamp”:“ 2019-11-13T21:13:11Z”, “ locale”:“ en-GB”, “ reason”:“ ERROR”, “错误”:{ “ type”:“ INVALID_RESPONSE”, “ message”:“将请求分发给技能时发生异常。” } }
我知道问题是因为lambda超时是HTTP响应中的延迟,所以我可以给出一些自定义消息,例如您的命令被接受并且将在一段时间内执行。
请帮助,在此先感谢
答案 0 :(得分:1)
使用自己的计时器功能可能会有所帮助。将您的计时器设置为低于Lambda超时,然后在计时器结束时发送响应,这当然不会导致Lambda超时错误。This answer might help.