在Alexa SDK中保存数据供以后的会话使用,可以使用Alexa SDK提供的Session Attributes来存储和检索数据。下面是一个使用Node.js和Alexa SDK的示例代码:
const Alexa = require('ask-sdk-core');
const LaunchRequestHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';
},
handle(handlerInput) {
const speechText = '欢迎使用我的技能!请告诉我您的名字。';
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
const NameIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'NameIntent';
},
handle(handlerInput) {
const name = Alexa.getSlotValue(handlerInput.requestEnvelope, 'name');
handlerInput.attributesManager.getSessionAttributes().name = name;
const speechText = `您好,${name}!请告诉我您的年龄。`;
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
}
};
const AgeIntentHandler = {
canHandle(handlerInput) {
return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
&& Alexa.getIntentName(handlerInput.requestEnvelope) === 'AgeIntent';
},
handle(handlerInput) {
const age = Alexa.getSlotValue(handlerInput.requestEnvelope, 'age');
handlerInput.attributesManager.getSessionAttributes().age = age;
const name = handlerInput.attributesManager.getSessionAttributes().name;
const speechText = `您好,${name}!您今年${age}岁了。`;
return handlerInput.responseBuilder
.speak(speechText)
.getResponse();
}
};
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler,
NameIntentHandler,
AgeIntentHandler
)
.lambda();
上述代码中,我们使用了Alexa SDK提供的attributesManager.getSessionAttributes()
来获取和设置Session Attributes。在NameIntentHandler
中,我们从用户的请求中获取名字,并将其设置为Session Attribute。在AgeIntentHandler
中,我们从用户的请求中获取年龄,并将其设置为Session Attribute。然后,我们可以在后续的请求中使用handlerInput.attributesManager.getSessionAttributes()
来获取先前设置的数据。