Действия Dialogflow v2 по времени ожидания ответа Google - PullRequest
0 голосов
/ 06 ноября 2018

Привет, у меня проблема с тайм-аутом для получения ответа json; Я использую API мест Google для поиска ближайшего местоположения.

Может ли кто-нибудь помочь мне с этим? Спасибо.

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 голосов
/ 08 ноября 2018

Я решил проблему с помощью запроса к Google API через URL; и используя обещание.

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 вам нужно использовать обещания при отправке запроса.

...