是否有一种方法可以从一个意图临时重定向到另一个意图,以填充插槽或会话属性,然后返回到要响应或实现的原始意图?
我的用例是在链接帐户后要求输入帐户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
版本是否可以实现?
答案 0 :(得分:1)
是的,Alexa现在可以轻松地在意图之间进行切换,并直接跳转到为新意图吸引特定的位置。
我将使用 ElicitSlot Dialog Directive 并为新的意图添加updatedIntent
对象。
updatedIntent
使用此选项在对话框期间更改意图或设置插槽值和确认状态。在对话框期间,请参阅更改意图或更新插槽值。如果您不需要更改意图,广告位值或确认状态,则可以将该属性保留在响应范围之外。
使用此参数切换意图时,Alexa会尝试在新意图上引发指定的插槽值。对您的技能而言,下一个IntentRequest将是新的意图,而不是原始的意图。
示例:
"pin"
。(在sessionAttributes
中包含诸如“ previousIntent”或“ nextIntent”之类的信息,以用作指向意图B的方向)"pin"
。"pin"
的情况下向意图B(不是A)提供用户输入,意图B在sessionAttribtues
中设置访问令牌。sessionAttribtues
的方向,以返回该意图以及从该意图中引出哪个插槽。因此,您可以confirmIntent
或elicitSlot
获得Intent A。请注意,您将不得不在切换意图之间用某种方式来解决用户问题。如果您使用的是confirmIntent
,则可能是一个简单的是/否确认问题,例如“谢谢您的固定密码,您要我现在检索您的帐户详细信息吗?” 。用户说“是”,然后将其发送回Intent A以完成它的开始。
如果您不希望与用户来回穿梭,那么据我所知,您将必须在每个可能要引起它的意图中构建pin
槽。这样,您就可以停留在Intent A中。代码效率较低,但对话效率更高,因此这是一个折衷方案。