Alexa SDK重定向以设置会话属性

时间:2019-05-02 17:58:51

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

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

我的用例是在链接帐户后要求输入帐户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版本是否可以实现?

1 个答案:

答案 0 :(得分:1)

是的,Alexa现在可以轻松地在意图之间进行切换,并直接跳转到为新意图吸引特定的位置。

我将使用 ElicitSlot Dialog Directive 并为新的意图添加updatedIntent对象。

  

updatedIntent

     

使用此选项在对话框期间更改意图或设置插槽值和确认状态。在对话框期间,请参阅更改意图或更新插槽值。如果您不需要更改意图,广告位值或确认状态,则可以将该属性保留在响应范围之外。

     

使用此参数切换意图时,Alexa会尝试在新意图上引发指定的插槽值。对您的技能而言,下一个IntentRequest将是新的意图,而不是原始的意图。

示例:

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

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

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