Alexa ASK SDK V2 Директива делегата Nodejs Dialog, отменяющая ответ карты - PullRequest
0 голосов
/ 25 сентября 2018

Я использую ASK SDK V2 для node.js для развития навыка alexa.Согласно документации, нам нужно добавить Inprogress, а также обработчики диалоговых окон Completed для реализации делегирования диалога.Он работает правильно, но ответ каким-то образом переопределяет ожидаемый ответ.

Обработчик намерений Inprogress:

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 голосов
/ 25 сентября 2018

Для тех, кто сталкивается с этой проблемой, добавьте следующее условие в обработчик намерений Inprogress:

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

Карта отображается сейчас.

Спасибо

...