Created
March 21, 2018 11:17
-
-
Save dileephell/7dd10775a801c3bdb9986e02619a0ba6 to your computer and use it in GitHub Desktop.
Lambda api
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,callack){ | |
| 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); | |
| }); | |
| } | |
| function getWeatherUpdate(intentRequest, callback) { | |
| const source = intentRequest.invocationSource; | |
| const outputSessionAttributes = intentRequest.sessionAttributes || {}; | |
| console.log("outputSessionArribute", intentRequest.sessionAttributes); | |
| if (source === 'DialogCodeHook') { | |
| const slots = intentRequest.currentIntent.slots; | |
| //const country = intentRequest.currentIntent.slots.TodayWeatherCountry; | |
| const cityName = intentRequest.currentIntent.slots.TodayWeatherCity; | |
| //without promiss implemeation | |
| var validationResult = getCityWeather(cityName, outputSessionAttributes); | |
| 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