用户在使用Node js在Alexa上的引发对话框期间说出“重复”之后,如何返回到原始意图?

时间:2018-10-21 01:58:52

标签: node.js echo alexa alexa-skills-kit

意图:

IntentA

这是场景:

  • U:“ Alexa,打开myapp”
  • A:“欢迎使用myapp”(LaunchHandler)
  • U:“搜索路线”(IntentAHandler)
  • A:“您从哪里出发?” (IntentAHandler,带有addElicitSlotDirective)
  • U:“重复”(RepeatHandler)
  • A:“您从哪里出发?” (IntentAHandler,带有addElicitSlotDirective)<-我无法进入 这个

我尝试了不同的方法来返回原始意图,但出现此错误: INVALID_RESPONSE应该在“ Dialog.ElicitSlot”指令中为slotToElicit指定正在处理的意图的有效插槽

RepeatIntent中的代码:

handlerInput.requestEnvelope.request.intent = attributes.temp_IntentA;
return custom.IntentAHandler.handle(handlerInput);

我没有问题可以重复上一个语音,就像我输出带有结果的语音一样。但是在对话过程中,如何引发? 有办法吗?

2 个答案:

答案 0 :(得分:1)

在与Dialog Model进行多轮对话期间,意图保持不变,在插槽被填充时或在意图/插槽确认期间。现在,当用户说出“重复” 时,Alexa会将其映射到RepeatIntent(除非您出于相同的意图将“重复” 当作发话)。现在,您想要的是从重复意图的处理程序中引出另一个意图(原始意图)的插槽。不幸的是,到目前为止,您无法执行此操作。只能通过Dialog.ElicitSlot指令发送相同类型的更新意图

  

请注意,返回Dialog指令时不能更改意图,   因此,意图名称和插槽组必须匹配发送给您​​的意图   技能。

如果您尝试这样做,将会收到一条错误消息。


解决方案是

  1. 保存IntentA到目前为止的状态和进度。
  2. ({RepeatIntent或其他任何意图被调用并发送响应)
  3. 以适当的发音重新触发原始IntentA
  4. 还原状态和进度。

您可以将状态保存在sessionAttributes中,然后重新触发IntentA,您必须提供一些可以触发状态的语音。就您而言,

"I would like to depart from {city}"

or just (if it doesn't break your VUI)

"{city}"

通过这种方式,用户可以在对话过程中切换上下文并轻松恢复。重新触发意图后,您可以使用任何Dialog模型指令。

阅读this博客文章,以获得有关上下文切换的更多信息。
有关对话框界面here的更多信息。

答案 1 :(得分:0)

我一直在寻找这个东西,在寻找了几个小时之后,我找不到我真正需要的东西。阅读了几篇文章和文章后,我得到了我所需要的。我通过使用请求和响应拦截器将点点滴滴连接在一起,以实现Amazon.RepeatIntent。我为此写了一篇博客文章。您可以查看帖子here