Skip to content

Instantly share code, notes, and snippets.

@dileephell
Created March 28, 2018 08:27
Show Gist options
  • Select an option

  • Save dileephell/a4e55384420abc0fd1b162a898f3ea68 to your computer and use it in GitHub Desktop.

Select an option

Save dileephell/a4e55384420abc0fd1b162a898f3ea68 to your computer and use it in GitHub Desktop.
dataApi.js
function elicitSlot(sessionAttributes, intentName, slots, slotToElicit, message, responseCard) {
return {
sessionAttributes,
dialogAction: {
type: 'ElicitSlot',
intentName,
slots,
slotToElicit,
message,
responseCard,
},
};
}
function delegate(sessionAttributes, slots) {
return {
sessionAttributes,
dialogAction: {
type: 'Delegate',
slots,
},
};
}
function close(sessionAttributes, fulfillmentState, message) {
return {
sessionAttributes,
dialogAction: {
type: 'Close',
fulfillmentState,
message,
},
};
}
function buildValidationResult(isValid, violatedSlot, messageContent) {
if (messageContent == null) {
return {
isValid,
violatedSlot
};
}
return {
isValid,
violatedSlot,
message: { contentType: 'PlainText', content: messageContent }
};
}
var http = require('http');
function getJSON(options, callback){
http.request(options, function(res){
var body = "";
console.log('calling the http');
res.on('data', function(chunk){
console.log('body' + chunk);
body+=chunk;
console.log(body + "I am in the body");
});
res.on('end', function(){
console.log('end event');
var result = JSON.parse(body);
console.log(result + "I am the result");
callback(null, result);
})
res.on('error', function(error){
console.log('Error event');
callback('error', callback);
console.log(error + "I am the error");
})
})
.on('error', callback)
.end();
}
function getCityWeather(cityName, outputSessionAttributes,callback){
var options = {
host: `api.openweathermap.org`,
port: 80,
path: `/data/2.5/weather?q=${cityName}&appid=b20db28dc5de27f47ce67d6381326268`,
method: 'GET'
};
getJSON(options, function(err, result){
if(err){
console.log(err + "I am error in getjson");
return buildValidationResult(false, 'TodayWeatherCity', `Invalid city name. Please let me know the city again.`);
}
outputSessionAttributes.temprature = result.main.temp;
console.log(outputSessionAttributes.temprature + ' value');
return buildValidationResult(true, null, null);
});
return callback;
}
function getWeatherUpdate(intentRequest, callback) {
const source = intentRequest.invocationSource;
const outputSessionAttributes = intentRequest.sessionAttributes || {};
console.log("outputSessionArribute", intentRequest.sessionAttributes);
if (source === 'DialogCodeHook') {
var slots = intentRequest.currentIntent.slots;
//const country = intentRequest.currentIntent.slots.TodayWeatherCountry;
const cityName = intentRequest.currentIntent.slots.TodayWeatherCity;
//without promiss implemeation
var validationResult = getCityWeather(cityName, outputSessionAttributes,callback);
console.log(validationResult + " Here is the validationResult");
if(!validationResult.isValid) {
console.log('after calling getCityWeather with result');
slots[`${validationResult.violatedSlot}`] = null;
//if response not found then return the invalid city message
callback(elicitSlot(intentRequest.sessionAttributes, intentRequest.currentIntent.name, slots, validationResult.violatedSlot, validationResult.message));
return;
}
console.log('getWeatherUpdate after calling getCityWeather');
callback(delegate(outputSessionAttributes, slots));
return;
}
console.log('getWeatherUpdate after DialogCodeHook');
// if(outputSessionAttributes.temprature){
// console.log('getWeatherUpdate inside outputSessionAttributes.temprature return');
// //get the value from the session variable and prompt to user
// callback(close(outputSessionAttributes, 'Fulfilled', { contentType: 'PlainText',
// content: `Okay, temprature reading for ${cityName} is ${outputSessionAttributes.temprature}` }));
// }
//get the value from the session variable and prompt to user
callback(close(outputSessionAttributes, 'Fulfilled', { contentType: 'PlainText',
content: `Sorry, I couldn't server your request` }));
}
// --------------- Main handler -----------------------
// Route the incoming request based on intent.
// The JSON body of the request is provided in the event slot.
exports.handler = (event, context, callback) => {
try {
getWeatherUpdate(event,
(response) => {
callback(null, response);
});
} catch (err) {
callback(err);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment