如何在Alexa Skill中存储启动时间并实现后续调用?
保存并获取Alexa Skill的启动时间
一、保存启动时间
要在用户触发startTIME请求时保存当前时间,你可以利用Alexa的**会话属性(Session Attributes)**存储这个值,它会在当前Skill会话的整个生命周期内保持有效。修改你的PlayGameHandler代码如下:
const PlayGameHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'startTIME'; }, handle(handlerInput) { // 获取当前时间,这里用ISO标准格式,也可根据需求改用时间戳或其他格式 const startTime = new Date().toISOString(); // 获取会话属性管理器 const attributesManager = handlerInput.attributesManager; // 读取现有会话属性并存入启动时间 const sessionAttributes = attributesManager.getSessionAttributes(); sessionAttributes.startTime = startTime; attributesManager.setSessionAttributes(sessionAttributes); const speechText = 'Test Reply!'; return handlerInput.responseBuilder .speak(speechText) .reprompt(speechText) .withSimpleCard('Hello World', speechText) .getResponse(); }, };
二、后续获取该值
当你需要在Skill的其他Handler(比如结束Skill的处理逻辑)中读取这个启动时间时,同样通过attributesManager读取会话属性即可:
// 示例:结束Skill的Handler const EndGameHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'EndGameIntent'; }, handle(handlerInput) { // 获取会话属性管理器 const attributesManager = handlerInput.attributesManager; const sessionAttributes = attributesManager.getSessionAttributes(); // 读取之前保存的启动时间 const startTime = sessionAttributes.startTime; // 这里可对startTime做后续处理,比如计算会话时长 const speechText = `你本次启动的时间是${startTime}`; return handlerInput.responseBuilder .speak(speechText) .withSimpleCard('结束会话', speechText) .getResponse(); }, };
补充说明
- 如果需要跨会话保存时间(比如用户下次打开Skill仍能读取),可以改用持久属性(Persistent Attributes),这需要配置Skill的持久存储(如DynamoDB),但你的需求是在本次Skill结束时调用,会话属性完全够用。
- 时间格式可按需调整,比如用
new Date().getTime()获取时间戳,后续计算时长会更便捷。
内容的提问来源于stack exchange,提问作者Lolli Group
相关产品推荐
相关产品推荐

