要求用户从LaunchIntent中输入

时间:2018-08-31 01:37:36

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

我正在用Node JS 8编写一项技能。我有一个设置插槽的意图,如果我说

,它可以正常工作。
  

请{技能名称}和{话语}。

我想设计自己的技能,以便用户可以说

  

打开{技能名称}

,打开时会要求他们提供输入,然后将其处理并传递给该意图。我见过很多人说你不能这样做。但是我今天使用了2种技能来做到这一点。我只是在寻找正确的语法来做到这一点。

我有:

'LaunchRequest': function() {
   this.response.speak("What note would you like?");
   this.emit(':responseReady');
}

似乎应该可以使用,但是我对JS和Alexa还是很陌生。

1 个答案:

答案 0 :(得分:1)

是的,有可能。

技能使用者打开您的技能时,您可以在欢迎信息后提出问题。
例如:

[user]  : open note skill  
[Alexa] : Welcome to note skill. What note would you like?  
----------<Alexa will wait for users input>--------  
[user]  : ABC note.  
[Alexa] : <response>

要让Alexa在说出欢迎消息后等待用户输入,您需要保持会话活动状态。根据响应中的shouldEndSession参数使会话保持活动状态。对于任何请求(如果未提供),shouldEndSession默认为true。在您的情况下,对LaunchRequest的响应应将此shouldEndSession参数设置为false。只有会话保持打开状态,用户才能继续交互。

例如:

'LaunchRequest': function() {
   const speech = "Welcome to note skill. What note would you like?";
   const reprompt = "What note would you like?";
   this.emit(':ask', speech, reprompt);
}

阅读this answer,以了解有关如何使用ask-nodejs-sdk使会话保持活动状态的更多信息。

使用对话框模型
实现此目的的另一种方法是使用Dialog指令。对话框指令可帮助您轻松填充和验证插槽值。您可以使用指令向用户询问您完成他们的请求所需的信息。

有关Dialog指令here

的更多信息