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

Настройка ссылки ngrok для вашего приложения -
- Для этого мы установим ngrok. Скачайте отсюда - https://ngrok.com/download
- Откройте другой терминал и выполните следующую команду -
ngrok http 8080
8080 - это номер порта, на котором будет работать наше приложение.
3. После этого появится черный экран терминала. Ищите URL после пересылки. Это будет похоже на -
Сохраните его копию, поскольку она будет использоваться позже для установки конечной точки для Alexa.
Запуск вашего приложения локально -
- Клонировать / загрузить zip-архив репозитория. Ссылка на Github - https://github.com/prav10194/alexa-preserve-context
- Извлеките содержимое zip-архива.
- Откройте cmd, чтобы запустить следующий код -
cd "folderpath where zip is extracted" npm install
4. После установки запускаем -
npm start
Настройка приложения alexa -
- Перейти по этой ссылке - https://developer.amazon.com/alexa/console/ask?
- Введите свои учетные данные Amazon.
- Создать новый навык -

Выберите Пользовательский и нажмите Создать навык.
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>’;
Мы можем увидеть атрибуты сеанса в следующем объекте запроса -

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