长话短说...
我从Facts蓝图“空间事实”开始了一个简单的技能
创建了一个const ->
const WELCOME_MESSAGE = "Welcome! You want a space fact?";
并将 LaunchRequest 与 IntentRequest 分开(因此,用户可以说“开放空间事实”或说“开放空间事实并说一个事实”)
'LaunchRequest': function () {
this.emit(':ask', WELCOME_MESSAGE); }
'IntentRequest': function () {
this.emit('GetNewFactIntent'); }
*现在如果我仅通过说“启动空间技能”来启动技能... 我收到欢迎消息和“shouldEndSession”:如预期的 false,
但是如果我此时说“退出”,我会收到:
“所请求的技能响应存在问题”
我的 JSON INPUT 显示预期的“SessionEndedRequest”
"request": {
"type": "SessionEndedRequest",
"requestId": "amzn1.echo-api.request.c6ea8178-3cdb-4119-ae73-e8ea86ebba6d",
"timestamp": "2018-09-25T01:14:05Z",
"locale": "en-US",
"reason": "USER_INITIATED"
}
但是我得到一个“null”JSON 输出..
-我做了一些研究,发现了这个 https://github.com/alexa/skill-sample-nodejs-fact/issues/3
-我也尝试过像这样的“未处理”...但仍然没有运气
'Unhandled': function () {
this.emit('AMAZON.StopIntent'); },
因此,今天我的技能被拒绝了,所以我想修复它并重新上传。
再次您好,感谢您的宝贵时间!
重新阅读我通过电子邮件收到的认证反馈后,问题是
“说“停止”后不返回 StopIntent”而不是说“退出”
另外从我现在的理解来看,“停止”、“取消”、“退出”和“退出”这些词都有自己预定义的功能,从中:
-当用户说“停止”时,它应该指向“StopIntent”
-当用户说“取消”时,它应该发送给“CancelIntent”
-在说“退出”或“退出”之后,应该 USER_INITIATED 用“SessionEndedRequest”强制关闭并且没有得到任何答复。
因此,这些单词不应包含在 StopIntent、CancelIntent、HelpIntent 或 NavigateHomeIntent 内的示例话语中。另外,如果前面的任何一条语句不起作用,那么您就无法通过认证。
经过一番分析,我的问题不在Lambda内部,而是出在我的技能表达上。问题的原因是在 StopIntent 和 CancelIntent 中添加了“exit”和“stop”一词。
根据我的测试,在StopIntent中包含或不包含“stop”一词没有什么区别,但如果在StopIntent和CancelIntent中包含“stop”一词,则会产生干扰,并且没有任何答案。
现在我重新提交了我的技能,希望它能尽快上传。 我在这里写下这篇文章是为了防止像我这样的新手陷入同样的情况。 再次感谢,编码愉快!
以防万一有人对如何捕获退出意图感兴趣:
/* *
* SessionEndedRequest notifies that a session was ended. This handler will be triggered when a currently open
* session is closed for one of the following reasons: 1) The user says "exit" or "quit". 2) The user does not
* respond or says something that does not match an intent defined in your voice model. 3) An error occurs
* */
const SessionEndedRequestHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'SessionEndedRequest';
},
handle(handlerInput) {
console.log(`~~~~ Session ended: ${JSON.stringify(handlerInput.requestEnvelope)}`);
// Any cleanup logic goes here.
return handlerInput.responseBuilder
.speak('See you soon!')
.addAudioPlayerStopDirective()
.getResponse();
}
};
从那里:https://github.com/alexa-samples/skill-sample-nodejs-audio-player/blob/mainline/lambda/index.js