我具有alexa技能,可以根据要求播放声音文件,然后播放消息,并在用户说停止时停止播放。我在终止意图中使用了结束会话语句。但是,在说了一次停止之后,如果您说再次Alexa停止,它将再次播放该消息,告诉我该技能仍然有效。您如何发出命令以完全退出技能?
这是我当前的停止意图:
'AMAZON.StopIntent': function() {
//output to available screen
makeTemplate.call(this, 'stop');
this.response.speak('Ok. I sent a practice tip to your Alexa app.').audioPlayerStop();
this.emit(':responseReady');
this.response.shouldEndSession(true);
},
答案 0 :(得分:0)
您可以利用Alexa内的状态机,我建议除了默认的常规状态外,还可以使用其他状态来在其中放置StopIntent。在这种情况下,您可以在播放声音时切换到此状态,只有这样,您特定的Stop行为才能发挥作用,在那里您可以返回到常规状态,该状态不会对您的技能产生默认行为,因此它将运行默认状态一个来自Alexa本身的技巧。
在此代码中,您可以基本了解其工作方式,尽管可以肯定缺少了一些东西,但是重要的是Alexa.CreateStateHandler(state, intents)
,它控制当前会话处于什么状态,以及const Alexa = require('alexa-sdk');
const defaultHandlers = {
PlayIntent: function() {
// move to state 'PLAY'
this.handler.state = 'PLAY'
// Code to play
}
}
const playingHanders = Alexa.CreateStateHandler('PLAY', {
PlayIntent: function() {
// Code to play
},
'AMAZON.StopIntent': function() {
//output to available screen
makeTemplate.call(this, 'stop');
// move to default state
this.handler.state = ''
this.response.speak('Ok. I sent a practice tip to your Alexa app.').audioPlayerStop();
this.emit(':responseReady');
this.response.shouldEndSession(true);
}
})
module.exports.skill = (event, context, callback) => {
const alexa = Alexa.handler(event, context, callback);
alexa.appId = APP_ID
alexa.registerHandlers(defaultHandlers, playingHanders)
alexa.execute();
}
作为参数获取特定状态的名称和该状态的意图的特定行为作为参数。
{{1}}
互联网上有很多关于此的教程,因此您可以找到有关如何利用此知识的更好的主意。