如何在 Alexa 中使用带有意图确认的意图链接?
How to use Intent Chaining with Intent Confirmation in Alexa?
我正在尝试混合使用对话管理和意图链接。我已禁用自动委派。
但我被困在,
当用户填写所有槽值然后我使用意图确认并提示他数据是否正确。
如果用户说"No"。
我想出于同样的目的重新启动对话框管理。
但我得到的错误是,
"Directive "Dialog.Delegate"只能在对话框处于活动状态且尚未完成时使用"。
我尝试用其他意图替换第 15 行,它有效,但当我为相同的意图发送指令时却无效。
有谁知道我错过了什么?
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 = COMPLETED
和 confirmationStatus = DENIED
发送相同请求之前就用 dialogState = IN_PROGRESS
和 confirmationStatus = DENIED
发送了一个请求。
错误
"Directive "Dialog.Delegate" can be used only when a dialog is active
and hasn't been completed"
对此有一些提示,但需要注意的是,我们可以在 dialogState = COMPLETED
中为单独的意图启动对话委托,但不能为相同的意图启动对话委托。
因此,如果您想为相同的意图重新启动对话,当意图确认被拒绝时,您必须在 dialogState 仍然是 IN_PROGRESS[=40= 时执行此操作].如果您想以任何其他方式处理被拒绝的意图确认,那么您也可以在 dialogState 为 COMPLETED.
时执行此操作
我的上述问题的解决方案只是将 canHandle 函数中的 dialogState 更改为 IN_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';
}
发现这个深埋在 - https://forums.developer.amazon.com/comments/206243/view.html
亚马逊应注意并将其添加到文档中。
我正在尝试混合使用对话管理和意图链接。我已禁用自动委派。
但我被困在, 当用户填写所有槽值然后我使用意图确认并提示他数据是否正确。
如果用户说"No"。 我想出于同样的目的重新启动对话框管理。
但我得到的错误是, "Directive "Dialog.Delegate"只能在对话框处于活动状态且尚未完成时使用"。
我尝试用其他意图替换第 15 行,它有效,但当我为相同的意图发送指令时却无效。 有谁知道我错过了什么?
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 = COMPLETED
和 confirmationStatus = DENIED
发送相同请求之前就用 dialogState = IN_PROGRESS
和 confirmationStatus = DENIED
发送了一个请求。
错误
"Directive "Dialog.Delegate" can be used only when a dialog is active and hasn't been completed"
对此有一些提示,但需要注意的是,我们可以在 dialogState = COMPLETED
中为单独的意图启动对话委托,但不能为相同的意图启动对话委托。
因此,如果您想为相同的意图重新启动对话,当意图确认被拒绝时,您必须在 dialogState 仍然是 IN_PROGRESS[=40= 时执行此操作].如果您想以任何其他方式处理被拒绝的意图确认,那么您也可以在 dialogState 为 COMPLETED.
时执行此操作我的上述问题的解决方案只是将 canHandle 函数中的 dialogState 更改为 IN_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';
}
发现这个深埋在 - https://forums.developer.amazon.com/comments/206243/view.html
亚马逊应注意并将其添加到文档中。