如何在Alexa中使用带有意图确认的意图链接?

时间:2019-06-29 21:36:28

标签: node.js alexa alexa-skills-kit alexa-skill

我正在尝试混合使用对话框管理和意图链接。我已禁用自动委派。

但是我被困在 当用户填满所有广告位值后,我将使用意图确认并提示他数据是否正确。

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

但是我得到的错误是, “仅当对话框处于活动状态且尚未完成时,才可以使用指令“ 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();
    },
};

1 个答案:

答案 0 :(得分:1)

注意-我正在使用禁用自动委派的对话框管理。

Alexa发送dialogState = IN_PROGRESSconfirmationStatus = DENIED的请求,甚至在发送dialogState = COMPLETEDconfirmationStatus = 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应该注意并将其添加到文档中。