Es importante tener una mecanismo para guardar información de sesión para no tener que preguntarle al usuario lo mismo más de una vez. Algunos ejemplos:
- Si es un juego, se puede querer guardar el estado, si ya ha comenzado o no, si el tiempo se ha cumplido …
- Si es un juego de palabras encadenadas, como el mío, se deben guardar las palabras ya utilizadas por el usuario y por Alexa para que no se repitan.
‘alexa-sdk’ implementa esta funcionalidad de una manera muy sencilla. En una tabla (TABLE_NAME en el código de más abajo) se guarda el userId y todo lo que haya en this.attributes. Automáticamente se guarda al terminar la llamada y se recupera en la siguiente llamada.
const Alexa = require('alexa-sdk'); // Nombre de la tabla, cualquiera vale pero mejor que esté relacionado // con el nombre de la skill const alexaTable = TABLE_NAME; ///////////////////////// exports.handler = function (event, context) { const alexa = Alexa.handler(event, context); alexa.appId = 'amzn1.ask.skill.xxxxxx'; alexa.resources = languageStrings; alexa.dynamoDBTableName = alexaTable; alexa.registerHandlers( handlers ); alexa.execute(); }; const handlers = { 'NewSession' : function () { // Attributes contiene lo guardado en la ultima ejecucion console.log( "Attrs = " + JSON.stringify(this.attributes)); if( this.attributes.state === undefined ) // ejemplo this.attributes.state = 'NOT_STARTED'; ..... }, 'SessionEndedRequest': function () { console.log('session ended!'); this.emit(':saveState', true); this.emit(':tell', 'Sesión finalizada' ); } }
Aunque los atributos de sesión se guardan y recuperan automáticamente en cada intent, se debe hacer la llamada explícita a that.emit(‘:saveState’, true) cuando la sesión termine.
Trackbacks/Pingbacks