Alexa ASK SDK V2 Nodejs对话框委托指令覆盖卡响应

时间:2018-09-25 08:25:15

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

我将ASK SDK V2用于node.js来开发alexa技能。根据文档,我们需要添加Inprogress以及Completed对话框处理程序以实现对话框委托。它工作正常,但是响应在某种程度上超越了我期望的响应。

进行中的意图处理程序:

const InProgressGetAuthors = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
            handlerInput.requestEnvelope.request.intent.name === 'GetAuthors' &&
            handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED';
    },
    handle(handlerInput) {
        const currentIntent = handlerInput.requestEnvelope.request.intent;
        if (handlerInput.requestEnvelope.request.dialogState === "STARTED") {
            return handlerInput.responseBuilder
                .addDelegateDirective(currentIntent)
                .getResponse();
        } else if (handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED') {
            return handlerInput.responseBuilder
                .addDelegateDirective()
                .getResponse();
        } else {
            return currentIntent;
        }
    }
}

完成的意图处理程序:

const CompletedGetAuthors = {
    canHandle(handlerInput) {
        return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
            handlerInput.requestEnvelope.request.intent.name === 'GetAuthors';
    },
    handle(handlerInput) {
        return handlerInput.responseBuilder
            .speak(author_propmt)
            .reprompt(author_propmt)
            .withStandardCard(
                author_title,
                author_copy,
                author.imageUrl,
                author.imageUrl
            )
            .withShouldEndSession(false)
            .getResponse(); 
    }
}

在完成的意图处理程序中,我将在响应中发送卡片。它确实会说出文字,但不会显示卡。

响应对象:

{
    "body": {
        "version": "1.0",
        "response": {
            "directives": [
                {
                    "type": "Dialog.Delegate"
                }
            ]
        },
        "sessionAttributes": {},
        "userAgent": "ask-node/2.0.9 Node/v6.10.3"
    }
}

如果您查看响应正文,则该卡丢失。我究竟做错了什么 ?有人可以让我知道吗?

谢谢

1 个答案:

答案 0 :(得分:0)

对于任何面临此问题的人,请在Inprogress Intent处理程序中添加以下条件:

    handlerInput.requestEnvelope.request.dialogState !== 'COMPLETED' &&
    handlerInput.requestEnvelope.request.dialogState !== 'IN_PROGRESS';

该卡片现在正在显示。

谢谢