如何在 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 = COMPLETEDconfirmationStatus = DENIED 发送相同请求之前就用 dialogState = IN_PROGRESSconfirmationStatus = 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

亚马逊应注意并将其添加到文档中。