Атрибуты сессии не устанавливаются - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в навыках Alexa, поэтому, возможно, я использую неправильный подход для управления диалогами, но я пытаюсь определить реакцию пользователя следующим образом, используя условия в обработчиках YesIntent и NoIntent. Я размещаю и тестирую все в консоли разработчика Alexa. Вот базовый c сценарий счастливого пути, где они уже сказали «да», они заинтересованы в событии, и теперь я спрашиваю, хотят ли они, чтобы они отправили текстовую информацию:

const YesIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
        && (Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.YesIntent');
    },
    async handle(handlerInput) {
        const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
        const { askedUserIfTheyWantText, textUser } = sessionAttributes;
        let speakOutput;

        if (askedUserIfTheyWantText === undefined) { // I have yet to ask
            speakOutput = 'Alright, want me to text you the info?';
            sessionAttributes.askedUserIfTheyWantText = true;
            handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
        } else if (askedUserIfTheyWantText) { // I already asked and they said yes
            // assume I already have number, so I will now text them
            const successfullyTextedUser = await textUserInfo();
            if (successfullyTextedUser) speakOutput = 'Texted you the info!';
            else speakOutput = 'There was a problem texting you the info.';
        }

        return handlerInput.responseBuilder
            .speak(speakOutput)
            .getResponse();
    }
}

Проблема в том, что askUserIfTheyWantText никогда не обновляется до true (остается неопределенным), поэтому Alexa продолжает спрашивать: «Хорошо, хотите, чтобы я отправил вам текст информации?». Что я делаю неправильно?? Как я уже сказал, я тестирую (с помощью текста) в консоли разработчика Alexa.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Похоже, что ваш ответ заканчивает сеанс, поэтому теряет все sessionAttributes.

Вам нужно добавить вызов .reprompt(speakOutput), если вы хотите, чтобы сеанс оставался открытым, или настроить свой навык для работы с DynamoDB и используйте persistentAttributes.

1 голос
/ 12 апреля 2020

Я не знаю, сработает ли это, но вы можете взять ответ пользователя в значение слота, а затем вызвать это значение слота вместо использования атрибутов сеанса.

...