是否有一种方法可以从一个意图临时重定向到另一个意图,以填充插槽或会话属性,然后返回到要响应或实现的原始意图?
我的用例是在链接帐户后要求输入帐户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使用confirmIntent
或elicitSlot
。
意图A将接收下一个用户输入,并现在检测访问令牌。
请注意,您将不得不在切换意图之间使用某种方式来解决用户问题。如果您使用的是confirmIntent
,则可能是一个简单的“是/否”确认问题,例如,“谢谢您的密码,您是否希望我现在检索您的帐户详细信息?”。用户说“是”,然后将其发送回意图A以完成其开始的工作。
如果您不希望与用户来回穿梭,那么据我所知,您必须在可能需要引起每个意图的每个意图中构建pin
插槽。这样,您就可以停留在Intent A中。代码效率较低,但对话效率更高,因此需要进行权衡。
关于node.js - Alexa SDK重定向以设置 session 属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55957867/