如何在对话期间在意图之间转移处理?

时间:2019-06-14 21:55:31

标签: alexa alexa-skill alexa-slot alexa-dialog alexa-intent

我正在研究一项Alexa技能,它将具有6个主要目的。在每个意图期间,用户将不得不从动态列表中选择一个项目。我将用类似以下内容提示他们:

  

假设红色选择1,蓝色选择2,绿色选择3

我目前的计划是要有一个对Select Item {ItemIndex}做出回应的意图。但是,一旦有了选定的索引,就需要回到最初的意图。对话框将如下所示:

  

问我的汽车购物者,福特附近有什么存货(由LookForCarIntentHandler处理)

     

好的。您要寻找什么颜色?对Kapoor Red说1,对波罗的海绿说2,对白云杉说3

     

选择第2项(由SelectItemIntentHandler处理)

     

太好了。我在距离您3英里内的Silver Spruce中发现了3只福特。您想让我告诉您第一个吗?(来自LookForCarIntentHandler的回复)

在这个人为的示例中,颜色非常不寻常,由API驱动,因此我无法真正预先填充广告位值。由于我何时可以设置动态插槽值,因此也很困难。无论哪种方式,在某个时候,我都需要能够按索引进行选择。

到目前为止,我已经考虑了3种选择:

选项1 :向每个意图添加一个{SelectedIndex}插槽(和话语),并仅使用这些插槽来收集插槽索引。我不喜欢这样做,因为我必须管理很多样板,但至少可以使用。

选项2 :确认原始文档中的索引选择(即使我不是很想),并更新该响应中的意图。也就是说,是否在SelectItemIntentHandler的回复中使用elicitSlot指令,并通过提示符“我听说您说项目1 ...是正确的吗?”将处理程序指向原始意图。 / em>然后,这6个顶级意图必须具有Yes/No插槽类型和用于收集确认值的插槽。我也不很喜欢这个选项。

选项3 :让SelectItemIntentHandler标识先前的意图,并调用该意图的处理程序以返回其结果。感觉并不很棒,但是会在关键时刻达到目的。

选项4 :将逻辑从意图处理程序中完全移除。基本上,构建我自己的状态机来处理意图处理器之外的逻辑。然后,意图处理程序仅负责听取内容并将其放入状态机。例如,我有一个CoffeeBuilder,一个CarSearchBuilder和一个BurritoBuilder。每个处理程序将找出哪个构建器处于活动状态,并将当前状态传递给它。构建器更新状态并返回响应。

然后,什么意图在做什么都没有关系,因为无论如何这些意图都是愚蠢的。因此,根据状态和有效的BuilderSelectItemIntentHandler可能会说,“太好了,您要不要炸薯条?” ”这辆车来了有2扇门或4扇门。您想要几扇门?”

我喜欢这种方法的声音;但是,这很复杂。显然,我真正想做的是说:“好吧,似乎已经选择了一个有效的项目索引,所以OrderCoffeeIntentHandler,继续并完成对话框。K Thx Bye。”我只是看不到这样做的方法。

0 个答案:

没有答案