La persistenza delle variabili in Alexa Skills con NodeJS si ottiene tramite PersistantAttributes che si appoggia su DynamoDB in modo trasparente
In questa prima fase viene settata una variabile (per semplicita' statica) in modo persistente. Se non e' settata crea una nuova stringa. Importante impostare la chiamata come asincrona
Da notare che le variabili sono relative ad un determinato account per cui ogni utente ritrovera' le proprie impostazioni
---------------------------------------------------------------------------
const LaunchRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
},
async handle(handlerInput) {
const attributesManager = handlerInput.attributesManager;
var speechText = "Benvenuto nella skill ";
const attributes = await attributesManager.getPersistentAttributes() || {};
if (Object.keys(attributes).length === 0) {
attributes.nameValue = "Luca";
attributesManager.setPersistentAttributes(attributes);
await attributesManager.savePersistentAttributes();
}else {
speechText = "Benvenuto ${attributes.nameValue.toString()}";
}
return handlerInput.responseBuilder
.speak(speechText)
.withShouldEndSession(false)
.getResponse();
},
};
---------------------------------------------------------------------------
Con questo codice si puo' richiamare il valore della variabile da altra intent
---------------------------------------------------------------------------
const attributesManager = handlerInput.attributesManager;
const attributes = await attributesManager.getPersistentAttributes()
var speechOutput = attributes.nameValue.toString();
---------------------------------------------------------------------------
Per salvare i dati e' necessario impostare il nome della tabella in cui sono salvate le variabili e la possibilita' di creare in automatico la tabella ove non esista
---------------------------------------------------------------------------
const skillBuilder = Alexa.SkillBuilders.standard();
exports.handler = skillBuilder
.addRequestHandlers(
LaunchRequestHandler,
YesHandler,
geo,
HelpHandler,
ExitHandler,
SessionEndedRequestHandler
)
.addErrorHandlers(ErrorHandler)
.withTableName('alexa-data')
.withAutoCreateTable(true)
.lambda();
---------------------------------------------------------------------------
Visualizzazione post con etichetta Skills. Mostra tutti i post
Visualizzazione post con etichetta Skills. Mostra tutti i post
mercoledì 23 gennaio 2019
venerdì 7 dicembre 2018
UserId su Alexa Skills
Non ho trovato da solo il modo di richiedere ad Alexa l'identificativo dell'utente che utilizza la skill (serve per poi fornire risposte personalizzate basate su DB)...e' venuto incontro il forum
https://forums.developer.amazon.com/questions/193367/userid-alexa.html
la soluzione e'
const userId = handlerInput.requestEnvelope.context.System.user.userId
attenzione che l'userId mostrato non e' relativo all'account Amazon dell'utente. Ogni skill genera un proprio UserID legato all'account Amazon (quest'ultimo rimane sempre mascherato)..se uno stesso utente usa due skill differenti gli UserId che si leggeranno da Alexa risulteranno differenti
https://forums.developer.amazon.com/questions/193367/userid-alexa.html
la soluzione e'
const userId = handlerInput.requestEnvelope.context.System.user.userId
attenzione che l'userId mostrato non e' relativo all'account Amazon dell'utente. Ogni skill genera un proprio UserID legato all'account Amazon (quest'ultimo rimane sempre mascherato)..se uno stesso utente usa due skill differenti gli UserId che si leggeranno da Alexa risulteranno differenti
giovedì 6 dicembre 2018
Permssi DynamoDB per Alexa Skill
Prima di poter utilizzare DynamoDB in connessione con una Skill si devono settare i permessi del database tramite IAM. Si va quindi in IAM Roles e si ha la lista delle proprie skill. Si clicca su quella di interesse. Di default c'e' solo il permesso per l'uso di Cloudwatch.
Si puo' procedere cliccando su Attach Policy e spuntando AmazonDynamoDBFullAccess
Altrimenti si puo' usare un approccio piu' granulare creando una inline policy e selezionando quanto di interesse
Si puo' procedere cliccando su Attach Policy e spuntando AmazonDynamoDBFullAccess
Altrimenti si puo' usare un approccio piu' granulare creando una inline policy e selezionando quanto di interesse
mercoledì 14 novembre 2018
Alexa Skills
Per usare Alexa Skill in Europa si deve usare la zona AWS denominata Ireland
Per creare un custom intent in lambda NodeJS che legga le variabili passate da Alexa ASK si procede cosi
il modello prevede un custom intent di nome geo che ha uno slot (ovvero una variabile) di nome luogo
---------------------------------------------------------------------------
{
"interactionModel": {
"languageModel": {
"invocationName": "geografia",
"intents": [
{
"name": "AMAZON.CancelIntent",
"samples": []
},
{
"name": "AMAZON.HelpIntent",
"samples": [
"aiuto "
]
},
{
"name": "AMAZON.StopIntent",
"samples": []
},
{
"name": "AMAZON.NavigateHomeIntent",
"samples": []
},
{
"name": "geo",
"slots": [
{
"name": "luogo",
"type": "AMAZON.City"
}
],
"samples": [
"dimmi dove si trova {luogo}",
"dimmi dove è {luogo}"
]
}
],
"types": []
}
}
}
---------------------------------------------------------------------------
le righe in azzurro servono a leggere la variabile luogo che e' passata da ASK (via JSON) e la mettono nella variabile JS ac
---------------------------------------------------------------------------
const geo = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return (request.type === 'IntentRequest'
&& request.intent.name === 'geo');
},
handle(handlerInput) {
const { intent } = handlerInput.requestEnvelope.request;
const ac = intent.slots.luogo.value;
var speechOutput = " ";
if (ac == "firenze")
{
speechOutput = "firenze si trova in toscana"
}
if (ac == "milano")
{
speechOutput = "milano si trova in lombardia"
}
console.log(ac);
//const speechOutput = activity;
return handlerInput.responseBuilder
.speak(speechOutput)
.getResponse();
},
};
---------------------------------------------------------------------------
i messaggi di console.log si leggono si Amazon CloudWatch Logs.Dalla finestra della funzione di Lambda in alto ci sono i tab Configurazione e Monitoraggio..si clicca Monitoraggio e poi visualizza log in CloudWatch
Per fare interagire Alexa con informazioni derivanti da un server esterno mediante richieste http
(lo script test.php e' semplicemente un echo("stringa");
---------------------------------------------------------------------------
var http = require('http');
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
//console.log(JSON.parse(data).explanation);
console.log(data);
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
---------------------------------------------------------------------------
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...