使用Alexa

时间:2018-02-16 20:14:07

标签: amazon-web-services aws-lambda alexa

我正在尝试使用Alexa执行以下操作:

  • 当用户说:打开APP_NAME
  • 我正在检查DynamoDB,看看我是否有名字
  • 如果没有,我想在告诉应用程序可以做什么之前先询问名称

我确实尝试使用

this.emit(":delegate", "name_add");

当你说“打开APP_NAME”时触发的Intent,这意味着在Hello intent中我进行查询,检查我是否有名字,如果不是,我想触发另一个Intent来获取缺少数据。

但是当我使用Delegate时,“name_add”意图没有被触发。

我的问题

当我的一个意图依赖于数据库中的数据时,我发现数据丢失了,我应该如何收集这些丢失的数据呢?请注意,一旦这些数据在数据库中,我就不会向用户询问它。所以这是一次性事情。

意思是我知道如何利用插槽,例如,当你要从哪里飞到哪里时。因为这是Alexa每次都会问的问题。但是,当你需要这样做一次时呢?

1 个答案:

答案 0 :(得分:1)

问题是,您无法委托新的意图。 Read about Dialog Directives here

  

请注意,在返回Dialog指令时无法更改意图,因此意图名称和插槽集必须与发送给您的技能的意图相匹配。

所以你将不得不重组你的意图。

建议结构:
通常,您的helloIntent(当用户打开您的技能':"Alexa, open mySkill."而不是'使用衣服':"Alexa, open mySkill and do something")时,这是当你想引导用户说出要做什么时会触发你的主意。

因此,helloIntent只会回复:"Hello, welcome to mySkill, you can say things like, do something, or, do something else"

用户然后说出其中一个事情,这是你的其他意图的话语,因此触发其中一个意图,让我们调用一个:"checkDatabase"

现在您处于"checkDatabase"意图内,您可以拥有一个名为name的必需插槽。这时您可以检查数据库中的用户名并自行填写插槽,或委托给Alexa以引出name

要了解的事情:
1)委托仅适用于意图的必需槽。您委派到Alexa,以确定需要填充哪些插槽以及首先要引出哪些插槽。她根据您在控制台中为意图设置的所需插槽的顺序来计算出这一点。

2)this.emit(':delegate', updatedIntent);(使用Alexa SDK)需要第二个参数updatedIntent作为完整意图信息的对象,其中包括name,slots和confirmationStatus(see Intent Object here)。如果你自己填充插槽,这就是你如何退回更新的'意图信息。

3)为了更好地控制要引出的插槽和特定消息,请使用ElicitSlot Directive。 Alexa SDK中的内容是:this.emit(':elicitSlot', slotToElicit, speechOutput, repromptSpeech, updatedIntent) Read about that here (ElicitSlot必须用于引出不需要的时段)