Node.js 如何在Alexa中使用意图链接和意图确认?

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

我尝试将对话管理和意图链接结合起来。我已禁用自动授权

但是我被困在, 当用户填充所有插槽值,然后我使用意向确认并提示他数据是否正确时

如果用户说“不”。 出于同样的目的,我想重新启动对话框管理

但我得到的错误是, “指令”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=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问题[此处](:)。