您如何完全结束并退出技能?

时间:2018-09-22 01:41:04

标签: alexa alexa-skills-kit alexa-skill

我具有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);

},

1 个答案:

答案 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}}

互联网上有很多关于此的教程,因此您可以找到有关如何利用此知识的更好的主意。