Created
March 28, 2018 08:27
-
-
Save dileephell/a4e55384420abc0fd1b162a898f3ea68 to your computer and use it in GitHub Desktop.
dataApi.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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