Node.js 如何在Alexa中使用意图链接和意图确认?
我尝试将对话管理和意图链接结合起来。我已禁用自动授权 但是我被困在, 当用户填充所有插槽值,然后我使用意向确认并提示他数据是否正确时 如果用户说“不”。 出于同样的目的,我想重新启动对话框管理 但我得到的错误是, “指令”Dialog.Delegate“只能在对话框处于活动状态且尚未完成时使用” 我试着用其他的意图替换第15行,它可以工作,但当我发送相同意图的指令时就不行了。 有人知道我错过了什么吗Node.js 如何在Alexa中使用意图链接和意图确认?,node.js,alexa,alexa-skills-kit,alexa-skill,Node.js,Alexa,Alexa Skills Kit,Alexa Skill,我尝试将对话管理和意图链接结合起来。我已禁用自动授权 但是我被困在, 当用户填充所有插槽值,然后我使用意向确认并提示他数据是否正确时 如果用户说“不”。 出于同样的目的,我想重新启动对话框管理 但我得到的错误是, “指令”Dialog.Delegate“只能在对话框处于活动状态且尚未完成时使用” 我试着用其他的意图替换第15行,它可以工作,但当我发送相同意图的指令时就不行了。 有人知道我错过了什么吗 const DeniedPostMessageIntentHandler = { can
const DeniedPostMessageIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'PostMessageIntent' &&
handlerInput.requestEnvelope.request.dialogState === 'COMPLETED' &&
handlerInput.requestEnvelope.request.intent.confirmationStatus === 'DENIED';
},
handle(handlerInput) {
let speechText = ri('POST_MESSAGE.DENIED');
return handlerInput.jrb
.speak(speechText)
.addDelegateDirective({
name: 'PostMessageIntent',
confirmationStatus: 'NONE',
slots: {}
})
.getResponse();
},
};
注意-我正在使用禁用自动委派的对话框管理
Alexa发送请求时使用的是dialogState=IN_PROGRESS
和confirmationStatus=DENIED
,甚至在发送相同请求时使用的是dialogState=COMPLETED
和confirmationStatus=DENIED
错误
“指令”Dialog.Delegate“只能在对话框处于活动状态时使用
而且还没有完成”
这是一种提示,但需要注意的是,我们可以在dialogState=COMPLETED
中为单独的目的启动对话委派,但不能为相同的目的执行
因此,如果您想为相同的意图重新启动对话框,当意图确认被拒绝时,您必须在对话框状态仍在进行中时重新启动对话框。如果您希望以任何其他方式处理被拒绝的意图确认,那么您也可以在dialogState完成时执行此操作
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'PostMessageIntent' &&
handlerInput.requestEnvelope.request.dialogState === 'IN_PROGRESS' &&
handlerInput.requestEnvelope.request.intent.confirmationStatus === 'DENIED';
}
我上述问题的解决方案是将canHandle函数中的dialogState更改为in\u PROGRESS,而不是COMPLETED
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'PostMessageIntent' &&
handlerInput.requestEnvelope.request.dialogState === 'IN_PROGRESS' &&
handlerInput.requestEnvelope.request.intent.confirmationStatus === 'DENIED';
}
在地下深处发现了这个-
亚马逊应该注意这一点,并将其添加到文档中。我在我的技能中尝试了这种方法,但我总是发现请求的技能的响应存在问题。请参阅我的stackoverflow问题[此处](:)。