Что я делаю не так, когда пытаюсь кодировать слоты в свой навык Alexa?

Я создаю собственный навык Alexa с помощью Node.js (в котором я новичок). У меня настроен навык, создано ОДНО настраиваемое намерение и ОДИН настраиваемый слот с некоторыми тестовыми значениями. Моя цель состоит в том, чтобы мой пользователь открыл навык и задал такой вопрос, как "как далеко находится {slotname}", где название слота содержит два значения "Sun" и "Moon", и в зависимости от того, что пользователь спрашивает, мои навык вернет соответствующий ответ. Пример:

Пользователь: «Как далеко находится Солнце» Алекса: «Солнце находится почти в девяноста трех миллионах миль от Земли» Пользователь: «Как далеко находится Луна» Алекса: «Луна находится прямо по улице»

Моя проблема: хотя концепция имеет смысл, я не знаю, как на самом деле применить это к моему коду. Приношу свои извинения, я новенький.

Последние несколько ночей я провел, пытаясь найти похожие сообщения людей, у которых была аналогичная проблема с Node.js. Я попытался найти примеры кодирования, которые могли бы помочь мне сориентироваться, просмотрел видео и т. Д. Пока ничего не помогло, что привело к этому - моему первому посту на Stack Overflow. Так что я надеюсь, что вы, милые люди, можете помочь, и я включил текущее состояние моих кротких попыток ниже.

P.S. Я совершенно не знаком с публикациями на S.O. Если я сделал что-то не так, дайте мне знать! Я просто не знала, куда еще обратиться за помощью.

const MyIntentHandler = {
    canHandle(handlerInput) {
        return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
            && Alexa.getIntentName(handlerInput.requestEnvelope) === 'MyIntent';
    },
    handle(handlerInput) {
        //var bigObect = this.event.request.intent.slots.slotName.value;
        var bigObject = handlerInput.requestEnvelope.request.intent.slots.slotName.value;
        var speakOutput;
        if(bigObect === 'Sun') {
            speakOutput = 'The sun is almost ninety three million miles away from Earth.';
        } else if(bigObject === 'Moon') {
            speakOutput = 'The moon is across the street.';
        }
        return handlerInput.responseBuilder
            .speak(speakOutput)
            //.reprompt('add a reprompt if you want to keep the session open for the user to respond')
            .getResponse();
    }
};

person Everest    schedule 04.09.2019    source источник


Ответы (1)


1. Замените slotName фактическим названием вашего слота (вы можете проверить это в теле запроса).

var bigObject = handlerInput.requestEnvelope.request.intent.slots.slotName.value;

2. Опечатка в if состоянии, должно быть bigObject === 'Sun'.

3. Если это единственный intentHandler в вашем навыке, вам также необходимо добавить обработчик условия request.type === 'LaunchRequest'.

4. Убедитесь, что вы экспортируете Intenthandler, т.е. intentHandler не просто определен в файле, но может использоваться при выполнении запроса.

5.Убедитесь на 100%, что запрос исходит от навыка, который вы намереваетесь использовать, то есть от вашей лямбда-функции (серверная часть) и навыка Alexa (интерфейсная часть) полностью связаны (с ARN и Skill-ID). Это самая частая ошибка :)

person code it up    schedule 04.09.2019
comment
Спасибо! Я проверил все эти предложения, и проблема была устранена. Я ценю, что вы нашли время помочь мне, и приму ваш ответ. - person Everest; 05.09.2019