2

我已经为 Alexa 实现了一个多轮对话。帮助意图根据对话框的状态提供不同的帮助文本。在用户触发了 HelpIntent 并显示了帮助文本后,我想用 ElicitSlotDirective 引出一个特定的插槽

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

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

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

4

3 回答 3

3

您现在可以使用意图链接从不同的意图中引出一个槽。例如:

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

请参阅此博客文章

于 2019-06-09T21:06:54.373 回答
1

该文件指出:

建议实施内置意图,但可选。

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

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

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

我看不到将对话指令与内置意图一起使用的方法。

于 2018-01-29T10:11:50.830 回答
0

这是一个可能有效的复杂解决方法(现在没有直接的方法,2018 年 11 月):

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

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

  1. 从会话属性中加载最新的意图数据,并在其中删除槽值和要引发的槽的分辨率(或者,如果您想从头开始,您也可以删除剩余的槽值,由您决定)
  2. 将当前意图替换为上一步修改后的意图
  3. 发出具有当前意图的 DialogDelegate (您的模型需要标记您想要引出的插槽,并将 elicitationRequired 设置为 true)
于 2018-11-15T01:48:01.117 回答