2016-09-09 10 views
1

У меня возникли проблемы с моей модификацией messenger.js от wit.ai на GitHub. Я добавил некоторые вызовы API для получения погоды в режиме реального времени, но у меня возникли проблемы с получением результата в ответ бота (context.forecast). Строка context.forecast не может «видеть» мои данные о погоде.Wit.ai Не обрабатывать данные в чате Ответ

Наиболее значимая линия:

context.forecast = 'Todays forecast is: ' + hourlyWeather +' in ' + location; 

hourlyWeather имеет такие данные, как "Light дождь до вечера." но ответчики ботов не позволяют.

Вот соответствующий код, я надеюсь, что у меня есть что-то не в том месте/порядке, поскольку я новичок в узле. Я ценю помощь.

// Our bot actions 
const actions = { 
send({sessionId}, {text}, request) { 
//const {context, entities} = request; 
// Our bot has something to say! 
// Let's retrieve the Facebook user whose session belongs to 
const recipientId = sessions[sessionId].fbid; 

if (recipientId) { 
    // Yay, we found our recipient! 
    // Let's forward our bot response to her. 
    // We return a promise to let our bot know when we're done sending 
    return fbMessage(recipientId, text) 
    .then(() => null) 
    .catch((err) => { 
    console.error(
     'Oops! An error occurred while forwarding the response to', 
     recipientId, 
     ':', 
     err.stack || err 
    ); 
    }); 
} else { 
    console.error('Oops! Couldn\'t find user for session:', sessionId); 
    // Giving the wheel back to our bot 
    return Promise.resolve() 
} 
}, 



// You should implement your custom actions here 
    // See https://wit.ai/docs/quickstart 



//Problems start here. ---------------- 

    getForecast({context, entities}) { 
    return new Promise(function(resolve, reject) { 
     var location = firstEntityValue(entities, 'location') 
     if (location) { 
     // we should call a weather API here 



     //API call to convert city name to longitude latitude 
     const requestw = require('request'),url = 'http://nominatim.openstreetmap.org/search?q='+location+'&format=json' 

     request(url, (error, response, body)=> { 
      if (!error && response.statusCode === 200) { 
      const fbResponse = JSON.parse(body) 
      //console.log("Got a response: ", fbResponse) 
      //convert JSON to array 
      var arr = []; 
      for(var x in fbResponse){ 
      arr.push(fbResponse[x]); 
     } 
      //find latitude and longitude in array and store for later weather api call 
      if(arr[0].hasOwnProperty('lat')){ 
      var lat = arr[0].lat; 
     } 
      if(arr[0].hasOwnProperty('lon')){ 
      var lon = arr[0].lon; 
     } 
      console.log(lat, lon) 

      //API call for weather status 
      forecast.get([lat, lon], function(err, weather) { 
      if(err) return console.dir(err); 
      //console.dir(weather); 
//Store weekly and daily report - Cant get to show up in forecast string. -------------- 
       console.log(weather.hourly.summary) 
      var hourlyWeather = weather.hourly.summary; 
       console.log(weather.daily.summary) 
      var dailyWeather = weather.daily.summary; 

      }); 
      } else { 
      console.log("Got an error while grabbing coordinates of city: ", error, ", status code: ", response.statusCode) 
      } 
     }) 

//Cant get hourlyWeather or dailyWeather to show here. Location works fine. Have tried declaring the variables elsewhere. ----------- 
     //context.forecast = hourlyWeather; 
     context.forecast = 'Todays forecast is: ' + hourlyWeather +' in ' + location; 



     delete context.missingLocation; 
     } else { 
     context.missingLocation = true; 
     delete context.forecast; 
     } 
     return resolve(context); 
    }); 
    }, 
}; 

Ответ бота будет только читать: «Сегодняшний прогноз: в Атланте».

ответ

0

Вам необходимо сохранить часовой пояс в соответствии с контекстом.

var hourlyWeather = weather.hourly.summary; 
context.hw = hourlyWeather; 

Затем получить доступ к погоде через контекст.

context.forecast = 'Todays forecast is: ' + context.hw +' in ' + location;