Google响应超时上的Dialogflow v2操作

时间:2018-11-06 18:32:58

标签: google-places-api dialogflow actions-on-google chatbot fulfillment

嗨,我遇到超时问题,无法得到json响应;我正在使用Google Places API查找最近的位置。

有人可以帮我吗?谢谢。

const PlaceSearch = require("./node_modules/googleplaces/lib/NearBySearch.js");
const PlaceDetailsRequest = require("./node_modules/googleplaces/lib/PlaceDetailsRequest.js");

app.intent('Ask Location', conv => {conv.ask(new Permission({context: 'To start',permissions: 'DEVICE_PRECISE_LOCATION',}));});

app.intent('geolocation.intent', (conv,params,granted) =>{   
if(granted){    
    var coordinates = conv.device.location.coordinates;
    var location = [coordinates.latitude, coordinates.longitude];
    var searchParameters = {
        location: location,
        name:'Store Name',
        radius:10000    
    };     
    var config = {
        apiKey:'#####',
        outputFormat:'json'
    };
    var placeSearch = new PlaceSearch(config.apiKey, config.outputFormat);
    var placeDetailsRequest = new PlaceDetailsRequest(config.apiKey, config.outputFormat);     
    placeSearch(searchParameters, function (error, search_response) {
        if(search_response.status === 'OK'){             
            placeDetailsRequest({reference: search_response.results[0].reference}, function (error, details_response) {
            conv.ask(`Your closest store is at ${details_response.result.formatted_address}.`);
            });            
        }
    });
}
});

1 个答案:

答案 0 :(得分:1)

我通过URL向Google API的请求解决了该问题;并遵守诺言。

const request = require("request");
app.input("geolocation.intent", conv => {
  return new Promise((resolve, reject) => {
    ...
    request(options, (error, response, body) => {
      ...
      if (error) {
        ...
        reject(...);
      } else {
        ...
        resolve(...);
      }
  }).then(result => {
    const address = result.address;
    conv.ask('Your closest store is...');
  }).catch(error => {
    conv.close('Error in Promise');
  });
});

我了解到,在Dialogflow API v2中,您在发出请求时需要使用Promise。