我正在尝试使用Alexa执行以下操作:
我确实尝试使用
this.emit(":delegate", "name_add");
当你说“打开APP_NAME”时触发的Intent,这意味着在Hello intent中我进行查询,检查我是否有名字,如果不是,我想触发另一个Intent来获取缺少数据。
但是当我使用Delegate时,“name_add”意图没有被触发。
当我的一个意图依赖于数据库中的数据时,我发现数据丢失了,我应该如何收集这些丢失的数据呢?请注意,一旦这些数据在数据库中,我就不会向用户询问它。所以这是一次性事情。
意思是我知道如何利用插槽,例如,当你要从哪里飞到哪里时。因为这是Alexa每次都会问的问题。但是,当你需要这样做一次时呢?
答案 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必须用于引出不需要的时段)