首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wit.ai不解析数据以进行聊天响应

Wit.ai不解析数据以进行聊天响应
EN

Stack Overflow用户
提问于 2016-09-09 17:47:55
回答 1查看 170关注 0票数 1

我在修改wit.ai的messenger.js on GitHub时遇到了一些问题。我添加了一些API调用来获取实时天气,但是我在将结果输入机器人的回复(context.forecast)时遇到了困难。context.forecast线似乎无法“看到”我的天气数据。

最相关的一行是:

代码语言:javascript
复制
context.forecast = 'Todays forecast is: ' + hourlyWeather +' in ' + location;

hourlyWeather有“直到今天晚上的小雨”等数据。但机器人的回答却忽略了这一点。

这是相关的代码,我希望我只是在错误的地方/顺序,因为我是新的节点。我很感激你的帮助。

代码语言:javascript
复制
// 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);
    });
  }, 
};

机器人的答复只写着“今天的预测是:在亚特兰大”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-27 09:02:44

您需要针对上下文存储hourlyWeather。

代码语言:javascript
复制
var hourlyWeather = weather.hourly.summary;
context.hw = hourlyWeather;

然后通过上下文访问天气。

代码语言:javascript
复制
context.forecast = 'Todays forecast is: ' + context.hw +' in ' + location;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39417130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档