是否有一种方法可以从一个意图临时重定向到另一个意图,以填充插槽或会话属性,然后返回到要响应或实现的原始意图?

我的用例是在链接帐户后要求输入帐户PIN作为辅助身份验证。例如,如果有人问“我的帐户详细信息是什么?”,我希望该意图更改会话属性(如果存在),如果不存在,请暂时重定向到一个意图,提示他们输入PIN并进行设置...然后回来回答他们的帐户详细信息请求。与下面的示例类似:

const IntentHandler = {
  canHandle(input) {
    return (
      input.requestEnvelope.request.type === 'IntentRequest' &&
      input.requestEnvelope.request.intent.name === 'MyIntent'
  },
  handle(input) {
    const { accessToken } = input.requestEnvelope.context.System.user
    // ... do stuff with accessToken

    if (!input.attributesManager.getSessionAttributes().pin) {
      // redirect to other intent to set the pin session attribute
    }

    // ...response to intent request
  }
}


我可以使用插槽填充提示使用单个意图进行此操作,但这对于多个意图是一项常见的任务,并且希望将其分离出来,因此不必在控制台中为所有需要它进行配置。

仅供参考:将ask-sdk用于Node.js

当前版本的ask-sdk是否可以实现?

最佳答案

是的,Alexa现在使在意图之间进行切换变得容易,并且可以直接跳转到为新意图指定特定的位置。

我将使用ElicitSlot Dialog Directive并包括updatedIntent对象用于新的意图。


  UpdatedIntent
  
  使用此选项可在对话框期间更改意图或设置插槽值和确认状态。在对话框期间,请参阅更改意图或更新插槽值。如果您不需要更改意图,广告位值或确认状态,则可以将该属性保留在响应范围之外。
  
  当使用此参数切换意图时,Alexa会尝试在新意图上引发指定的插槽值。您技能的下一个IntentRequest将是新的意图,而不是原始的。


例:


意图A缺少访问令牌。
意图A指示Alexa从意图B引出插槽"pin"。(在sessionAttributes中包含诸如“ previousIntent”或“ nextIntent”之类的信息,以用作指向意图B的方向)
Alexa用Intent B的插槽"pin"提示提示响应用户。
用户提供了图钉。
Alexa在填充了插槽"pin"的情况下向Intent B(不是A)提供用户输入,Intent B在sessionAttribtues中设置访问令牌。
然后,意图B检查sessionAttribtues以获得返回该意图的方向以及从该意图中引出哪个插槽的方向。因此,您可以针对意图A使用confirmIntentelicitSlot
意图A将接收下一个用户输入,并现在检测访问令牌。


请注意,您将不得不在切换意图之间使用某种方式来解决用户问题。如果您使用的是confirmIntent,则可能是一个简单的“是/否”确认问题,例如,“谢谢您的密码,您是否希望我现在检索您的帐户详细信息?”。用户说“是”,然后将其发送回意图A以完成其开始的工作。

如果您不希望与用户来回穿梭,那么据我所知,您必须在可能需要引起每个意图的每个意图中构建pin插槽。这样,您就可以停留在Intent A中。代码效率较低,但对话效率更高,因此需要进行权衡。

关于node.js - Alexa SDK重定向以设置 session 属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55957867/

10-12 07:09