В этой статье мы создадим образец приложения, в котором мы будем хранить / сохранять переменные в последующих заголовках запросов от Alexa.

Но сначала разберемся, что такое атрибуты сеанса. Согласно официальной документации, предоставленной Amazon -

Настройка ссылки ngrok для вашего приложения -

  1. Для этого мы установим ngrok. Скачайте отсюда - https://ngrok.com/download
  2. Откройте другой терминал и выполните следующую команду -
ngrok http 8080

8080 - это номер порта, на котором будет работать наше приложение.

3. После этого появится черный экран терминала. Ищите URL после пересылки. Это будет похоже на -

Https://xxxxxxx.ngrok.io

Сохраните его копию, поскольку она будет использоваться позже для установки конечной точки для Alexa.

Запуск вашего приложения локально -

  1. Клонировать / загрузить zip-архив репозитория. Ссылка на Github - https://github.com/prav10194/alexa-preserve-context
  2. Извлеките содержимое zip-архива.
  3. Откройте cmd, чтобы запустить следующий код -
cd "folderpath where zip is extracted"
npm install

4. После установки запускаем -

npm start

Настройка приложения alexa -

  1. Перейти по этой ссылке - https://developer.amazon.com/alexa/console/ask?
  2. Введите свои учетные данные Amazon.
  3. Создать новый навык -

Выберите Пользовательский и нажмите Создать навык.

4. Выберите Начать с нуля -

5. В меню слева выберите JSON Editor и замените предыдущий объект JSON новым -

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "context preserve",
            "intents": [
                {
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                },
                {
                    "name": "AMAZON.StopIntent",
                    "samples": []
                },
                {
                    "name": "EverythingIntent",
                    "slots": [
                        {
                            "name": "EveryThingSlot",
                            "type": "Bag_of_words"
                        }
                    ],
                    "samples": [
                        "{EveryThingSlot}"
                    ]
                }
            ],
            "types": [
                {
                    "name": "Bag_of_words",
                    "values": [
                        {
                            "name": {
                                "value": "name: bag_of_words"
                            }
                        },
                        {
                            "name": {
                                "value": "value: Hello world"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

Сохраните и постройте модель.

6. Перейдите в конечную точку -

Выберите HTTPS и введите созданную конечную точку ngrok.

Во втором поле щелкните раскрывающееся меню и выберите - Моя конечная точка разработки - это поддомен домена, имеющего подстановочный сертификат от центра сертификации.

Сохраните конечные точки.

7. Теперь перейдите на экран Test и следуйте сценарию -

Понимание приложения NodeJS -

Мы создадим простое приложение для Alexa, которое сохранит контекст как нашего предыдущего, так и текущего разговора.

Мы начнем с создания конечной точки. Назовем его - / api / alexa.

Теперь мы определим структуру для нашего объекта JSON ответа -

var fnl_response = {
 ‘version’: ‘1.0’,
 ‘Content-Type’: ‘application/json’,
 ‘response’: {
 ‘outputSpeech’: {
 ‘type’: ‘SSML’,
 ‘ssml’: ‘’
 },
 ‘sessionAttributes’: ‘’,
 ‘shouldEndSession’: false
 }
 };

Если вы присмотритесь, мы добавили атрибут с именем sessionAttributes в наш объект ответа. Что бы мы ни записали в этот атрибут, это будет в теле запроса следующего вызова, сделанного нашим набором навыков для приложения Node.

fnl_response.sessionAttributes = {
“previousText”: req.body.request.intent.slots.EveryThingSlot.value
};

Мы используем атрибуты сеанса в речевом ответе SSML для Alexa -

fnl_response.response.outputSpeech.ssml = 
‘<speak>’ + ‘Current text — ‘ + 
req.body.request.intent.slots.EveryThingSlot.value + 
‘. Previous text — ‘ + 
req.body.session.attributes.previousText + 
‘</speak>’;

Мы можем увидеть атрибуты сеанса в следующем объекте запроса -

Это был конец статьи. Если у вас возникнут сомнения, пишите ниже.