Per testare una Lambda function per Alexa Skills non e' strettamente necessario utilizzare Amazon AWS con l'editor on line
per esempio si parte dallo scaricare il progetto Basic Starter da SkillTemplates (
ask new --template --url https://skilltemplates.com/templates.json)
Si crea quindi nella root del progetto (dove e' contenuta la directory Lambda per capirsi) una directory test e si inseriscono i seguenti tre files
test.js
----------------------------------------------------------------
---
var lambda = require('../lambda/custom/index.js');
var context = require('./context.js');
var mockEvent = require('./event.json');
var mockContext = new context();
function callback(error, data) {
if(error) {
console.log('error: ' + error);
} else {
console.log(data);
}
}
lambda.handler(mockEvent, mockContext, callback);
-------------------------------------------------------------------
context.js
-------------------------------------------------------------------
module.exports = function() {
return {
succeed: function(result) {
console.log(JSON.stringify(result, null,'\t') );
},
fail: function(err) {
console.log(JSON.stringify(err, null,'\t') );
},
done: function(err, result) {
//console.log("CONTEXT DONE:", err, result);
},
functionName: 'local_functionName',
awsRequestId: 'local_awsRequestId',
logGroupName: 'local_logGroupName',
logStreamName: 'local_logStreamName',
clientContext: 'local_clientContext',
identity: {
cognitoIdentityId: 'local_cognitoIdentityId'
}
};
};
-------------------------------------------------------------------
event.json
-------------------------------------------------------------------
{
"session": {
"new": false,
"sessionId": "mock_sessionId",
"application": {
"applicationId": "mock_applicationId"
},
"attributes": {},
"user": {
"userId": "mock_userId"
}
},
"request": {
"type": "LaunchRequest",
"requestId": "mock_requestId",
"locale": "en-US",
"timestamp": "2017-09-19T11:46:23Z"
},
"context": {
"AudioPlayer": {
"playerActivity": "IDLE"
},
"System": {
"application": {
"applicationId": "mock_applicationId"
},
"user": {
"userId": "mock_userId"
},
"device": {
"supportedInterfaces": {}
}
}
},
"version": "1.0"
}
-------------------------------------------------------------------
se si lancia il file test.js con
node.js
si ha come riposta
-------------------------------------------------------------------
{ version: '1.0',
response:
{ outputSpeech:
{ type: 'SSML',
ssml: '<speak>Hello there. What is your name?</speak>' },
reprompt: { outputSpeech: [Object] },
shouldEndSession: false,
card:
{ type: 'Simple',
title: 'Example Card Title',
content: 'Example card body content.' } },
userAgent: 'ask-node/2.0.5 Node/v10.4.1',
sessionAttributes: {} }
-------------------------------------------------------------------
questo e' il file che normalmente Lambda passa a Alexa per poi essere trasformato in messaggio vocale ed spedito al dispositivo Alexa
In pratica viene generata l'intent LaunchRequest (event.json) della funzione Lambda che corrisponde a
-------------------------------------------------------------------
const LaunchRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
},
handle(handlerInput) {
const speechText = 'Hello there. What is your name?';
const repromptText = 'Can you tell me your name?';
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(repromptText)
.withSimpleCard('Example Card Title', "Example card body content.")
.getResponse();
},
};
-------------------------------------------------------------------