是否有一种方法可以暂时将一个意图重定向到另一个意图,以填充时隙或会话属性,然后返回到要响应或实现的原始意图?
我的用例是请求帐户PIN作为帐户链接后的第二身份验证。例如,如果有人问“我的帐户详细信息是什么?”,如果会话属性存在,我希望该意图更改,如果不存在,则临时重定向到提示他们输入密码并设置it...then的意图--返回并回答他们的帐户详细信息请求。类似于下面的例子:
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
}
}我可以使用插槽填充提示符来完成这个任务,但是这是一个常见的任务,并且希望将它分开,这样就不需要在控制台中对所有需要的内容进行配置了。
FYI:使用ask-sdk for Node.js
这在当前版本的ask-sdk中可能吗?
发布于 2019-05-03 06:14:28
是的,Alexa使得现在很容易在意图之间切换,然后跳到为新的意图找到一个特定的插槽。
我将使用ElicitSlot对话指令并为新的意图包含updatedIntent对象。
updatedIntent 使用此选项可在对话框期间更改意图或设置槽值和确认状态。请参阅在对话框中更改意图或更新插槽值。如果不需要更改意图、槽值或确认状态,则可以将此属性排除在响应之外。 使用此参数切换意图时,Alexa将尝试在新意图上引出指定的槽值。下一个IntentRequest对你的技能将是新的意图,而不是原来的。
示例:
"pin" (在sessionAttributes中包括信息,如"previousIntent“或"nextIntent”,作为指向意图B的指示)"pin"。"pin"填充和意图B设置访问令牌在sessionAttribtues。sessionAttribtues的方向,以确定返回到哪个意图,以及从该意图得到哪个时段。所以你可以用confirmIntent或者elicitSlot来表示意图A。请注意,您必须在切换意图之间使用某些内容对用户进行寻址。如果您正在使用confirmIntent,那么它可以是一个简单的是/否确认问题,例如:“谢谢您的密码,您想让我现在检索您的帐户详细信息吗?”用户说“是”,这将被发送回意图A来完成它启动的内容。
如果您不希望这个额外的与用户来回,那么据我所知,您将不得不构建pin插槽的每一个意图,您可能需要得到它。这样的话,你只需停留在意图A.效率较低的代码中,而是更有效的对话,所以这是一种权衡。
https://stackoverflow.com/questions/55957867
复制相似问题