------------------------------------------------------------
{
"interactionModel": {
"languageModel": {
"invocationName": "indirizzo",
"intents": [
{
"name": "GetAddressIntent",
"slots": [],
"samples": [
"dove vivo"
]
},
{
"name": "AMAZON.CancelIntent",
"samples": []
},
{
"name": "AMAZON.HelpIntent",
"samples": []
},
{
"name": "AMAZON.StopIntent",
"samples": []
}
],
"types": []
}
}
}
------------------------------------------------------------
------------------------------------------------------------
/* eslint-disable no-console */
const Alexa = require('ask-sdk-core');
const messages = {
WELCOME: 'Benvenuto, cosa vuoi?',
WHAT_DO_YOU_WANT: 'Cosa vuoi chiedere?',
NOTIFY_MISSING_PERMISSIONS: 'Abilita i permessi sulla app Alexa',
NO_ADDRESS: 'Non è stato impostato un indirizzo',
ADDRESS_AVAILABLE: 'Ecco il tuo indirizzo completo: ',
ERROR: 'Errore.',
LOCATION_FAILURE: 'C\'è un errore.Riprova',
GOODBYE: 'Arriverderci',
UNHANDLED: 'This skill doesn\'t support that. Please ask something else.',
HELP: 'Chiedimi dove vivo?',
STOP: 'Stop',
};
const PERMISSIONS = ['read::alexa:device:all:address'];
const LaunchRequest = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
},
handle(handlerInput) {
return handlerInput.responseBuilder.speak(messages.WELCOME)
.reprompt(messages.WHAT_DO_YOU_WANT)
.getResponse();
},
};
const GetAddressIntent = {
canHandle(handlerInput) {
const { request } = handlerInput.requestEnvelope;
return request.type === 'IntentRequest' && request.intent.name === 'GetAddressIntent';
},
async handle(handlerInput) {
const { requestEnvelope, serviceClientFactory, responseBuilder } = handlerInput;
const consentToken = requestEnvelope.context.System.user.permissions
&& requestEnvelope.context.System.user.permissions.consentToken;
if (!consentToken) {
return responseBuilder
.speak(messages.NOTIFY_MISSING_PERMISSIONS)
.withAskForPermissionsConsentCard(PERMISSIONS)
.getResponse();
}
try {
const { deviceId } = requestEnvelope.context.System.device;
const deviceAddressServiceClient = serviceClientFactory.getDeviceAddressServiceClient();
const address = await deviceAddressServiceClient.getFullAddress(deviceId);
console.log('Address successfully retrieved, now responding to user.');
let response;
if (address.addressLine1 === null && address.stateOrRegion === null) {
response = responseBuilder.speak(messages.NO_ADDRESS).getResponse();
} else {
const ADDRESS_MESSAGE = `${messages.ADDRESS_AVAILABLE + address.addressLine1}, ${address.stateOrRegion}, ${address.postalCode}`;
response = responseBuilder.speak(ADDRESS_MESSAGE).getResponse();
}
return response;
} catch (error) {
if (error.name !== 'ServiceError') {
const response = responseBuilder.speak(messages.ERROR).getResponse();
return response;
}
throw error;
}
},
};
const SessionEndedRequest = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest';
},
handle(handlerInput) {
console.log(`Session ended with reason: ${handlerInput.requestEnvelope.request.reason}`);
return handlerInput.responseBuilder.getResponse();
},
};
const UnhandledIntent = {
canHandle() {
return true;
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(messages.UNHANDLED)
.reprompt(messages.UNHANDLED)
.getResponse();
},
};
const HelpIntent = {
canHandle(handlerInput) {
const { request } = handlerInput.requestEnvelope;
return request.type === 'IntentRequest' && request.intent.name === 'AMAZON.HelpIntent';
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(messages.HELP)
.reprompt(messages.HELP)
.getResponse();
},
};
const CancelIntent = {
canHandle(handlerInput) {
const { request } = handlerInput.requestEnvelope;
return request.type === 'IntentRequest' && request.intent.name === 'AMAZON.CancelIntent';
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(messages.GOODBYE)
.getResponse();
},
};
const StopIntent = {
canHandle(handlerInput) {
const { request } = handlerInput.requestEnvelope;
return request.type === 'IntentRequest' && request.intent.name === 'AMAZON.StopIntent';
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(messages.STOP)
.getResponse();
},
};
const GetAddressError = {
canHandle(handlerInput, error) {
return error.name === 'ServiceError';
},
handle(handlerInput, error) {
if (error.statusCode === 403) {
return handlerInput.responseBuilder
.speak(messages.NOTIFY_MISSING_PERMISSIONS)
.withAskForPermissionsConsentCard(PERMISSIONS)
.getResponse();
}
return handlerInput.responseBuilder
.speak(messages.LOCATION_FAILURE)
.reprompt(messages.LOCATION_FAILURE)
.getResponse();
},
};
const skillBuilder = Alexa.SkillBuilders.custom();
exports.handler = skillBuilder
.addRequestHandlers(
LaunchRequest,
GetAddressIntent,
SessionEndedRequest,
HelpIntent,
CancelIntent,
StopIntent,
UnhandledIntent,
)
.addErrorHandlers(GetAddressError)
.withApiClient(new Alexa.DefaultApiClient())
.lambda();
------------------------------------------------------------
Per la skill deve essere abilitato il permesso nella parte Permission di Alexa Console
Si devono abilitare i permessi di localizzazione su https://alexa.amazon.it
(attenzione : per ricevere una risposta di deve inserire l'indirizzo di ogni dispositivo all'interno della app Alexa, non esiste un geocoding basato su IP o su GPS