我正在尝试混合使用对话框管理和意图链接。我已禁用自动委派。
但是我被困在 当用户填满所有广告位值后,我将使用意图确认并提示他数据是否正确。
如果用户说“否”。 我想出于相同的目的重新启动对话框管理。
但是我得到的错误是, “仅当对话框处于活动状态且尚未完成时,才可以使用指令“ 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();
},
};
答案 0 :(得分:1)
注意-我正在使用禁用自动委派的对话框管理。
Alexa发送dialogState = IN_PROGRESS
和confirmationStatus = DENIED
的请求,甚至在发送dialogState = COMPLETED
和confirmationStatus = DENIED
的相同请求之前。
错误
仅当对话框处于活动状态时,才可以使用“指令“ Dialog.Delegate” 尚未完成”
关于它的种种提示,但是要注意的一件事是,我们可以在dialogState = COMPLETED
中为单独的意图启动对话框委托,但是不能为相同的意图进行对话。
因此,如果要针对相同的意图重新启动对话框,则在拒绝意图确认时,必须在dialogState仍然为 IN_PROGRESS 时执行此操作。如果您想以其他任何方式处理意图确认被拒绝的情况,那么也可以在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
的深处发现了它Amazon应该注意并将其添加到文档中。