【问题标题】:Alexa SDK Redirect to Set Session AttributesAlexa SDK 重定向以设置会话属性
【发布时间】:2019-05-02 17:58:50
【问题描述】:

有没有办法暂时从一个意图重定向到另一个意图以填充插槽或会话属性,然后返回到原始意图以得到响应或实现?

我的用例是在帐户链接后要求提供帐户 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
  }
}

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

仅供参考:在 Node.js 中使用 ask-sdk

当前版本的ask-sdk 可以做到这一点吗?

【问题讨论】:

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


    【解决方案1】:

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

    我会使用 ElicitSlot Dialog Directive 并将 updatedIntent 对象包含在新意图中。

    更新意图

    使用它在对话期间更改意图或设置槽值和确认状态。请参阅在对话期间更改意图或更新槽值。如果您不需要更改意图、槽值或确认状态,则可以将此属性排除在响应之外。

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

    例子:

    1. Intent A 缺少访问令牌。
    2. 意图 A 将 Alexa 引导至意图 B 中的 elicitSlot "pin"。(在 sessionAttributes 中包含信息,例如“previousIntent”或“nextIntent”以用作指向意图 B 的方向)
    3. Alexa 使用 Intent B 的插槽 "pin" 的引出提示响应用户。
    4. 用户提供密码。
    5. Alexa 向 Intent B(不是 A)提供用户输入,其中插槽 "pin" 已填充,Intent B 在 sessionAttribtues 中设置访问令牌。
    6. 然后意图 B 检查sessionAttribtues 以了解返回到哪个意图的方向以及从该意图中引出哪个槽。所以你可以confirmIntentelicitSlot 用于 Intent A。
    7. Intent A 将接收下一个用户输入,现在检测访问令牌。

    请注意,您必须在切换意图之间向用户传达一些信息。如果您使用的是confirmIntent,那么它可以是一个简单的是/否确认问题,例如,“感谢您的密码,您希望我现在检索您的帐户详细信息吗?”。用户说“是”,然后将其发送回 Intent A 以完成它开始的工作。

    如果您不希望与用户进行这种额外的来回交流,那么据我所知,您必须将pin 插槽构建到您可能需要引发它的每个意图中。这样一来,您只需停留在意图 A 中。代码效率较低,但对话效率较高,因此需要权衡取舍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-18
      • 2013-08-04
      相关资源
      最近更新 更多