从Alexa中的HelpIntent中引出Slot

时间:2018-01-26 14:01:13

标签: alexa alexa-skills-kit alexa-sdk-nodejs

我为Alexa实施了一个多转对话框。 Help-Intent根据对话框的状态提供不同的Help-Texts。在用户触发了HelpIntent并显示了Help-Text之后,我想用ElicitSlotDirective引出一个特定的插槽

现在这似乎不受支持,因为你只能引出当前意图的插槽,而HelpIntent没有插槽。

https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/issues/162

我现在的问题是:如何在用户触发HelpIntent后返回我的多圈对话框并引出特定的插槽?

3 个答案:

答案 0 :(得分:2)

您现在可以使用意图链接从其他意图中获取广告位。例如:

.addDirective({
    type: 'Dialog.ElicitSlot',
    slotToElicit: 'drink',
    updatedIntent: {
        name: 'OrderIntent',
        confirmationStatus: 'NONE'
    }
})

请参阅此blog post

答案 1 :(得分:0)

文件说明:

  

建议实现内置意图,但这是可选的。

我建议您定义自己的HelpIntent,其中包含与AMAZON.HelpIntent重叠的话语,但需要使用您需要的Slot类型。

  

在这种情况下,您的服务会收到MyHelpIntent的IntentRequest,即使这些短语与内置的AMAZON.HelpIntent重叠。

文档还指出,不推荐这种做法,因为内置意图可以更好地覆盖样本话语。它指出扩展内置Intent是更好的做法。但是(亚马逊愚蠢),HelpIntent不支持Slots。所以唯一的方法是自定义帮助意图。

我没有看到使用内置Intent的Dialog Directives的方法。

答案 2 :(得分:0)

这是一个可能行之有效的解决方法(目前尚无直接方法,2018年11月):

  1. 在多圈对话框的每个循环上,将基于对话框的意图保存在会话属性中(整个intent对象,您可以将intent.name用作键)
  2. 在每个触发的意图(甚至是HelpIntent)上,将意图名称保存在lastIntent会话属性中(以跟踪先前的意图名称)
  3. 用户触发帮助,您现在位于HelpIntent中。提供帮助消息后,请在最后附加一个问题,该问题将使用户说出一些内容,从而再次触发基于对话框的意图。

当您处于基于对话框的Intent中且仅当lastIntent是HelpIntent(上一步中的那个)时,请执行以下步骤:

  1. 从会话属性中加载最新的意图数据,并在其中删除您要引发的插槽值和插槽分辨率(或者,如果您要从头开始,您也可以删除其余的插槽值,向上给你)
  2. 用上一步修改后的意图替换当前意图
  3. 发出具有当前意图的DialogDelegate(您的模型需要将elicitationRequired设置为true来标记要引发的插槽)