2017-10-11 2 views
0

Je suis en train d'exécuter tutoriel API.AI pour la construction d'un bot météo pour Google assistant (celui qui est ici: https://dialogflow.com/docs/getting-started/basic-fulfillment-conversation)getaddrinfo ENOTFOUND API Google Cloud

J'ai fait tout avec succès, a créé le robot à l'intérieur de l'API, a créé le Réalisations, installé NodeJS sur mon pc, connecté à Google Cloud Platform, etc.

Puis j'ai créé le fichier index.js en le copiant exactement comme indiqué sur le tutoriel API.ai avec ma clé API de World Weather Organization (voir ci-dessous)). Mais quand j'utilise le bot, ça ne marche pas. Sur le Google Cloud Platform l'erreur est toujours le même:

Error: getaddrinfo ENOTFOUND api.worldweatheronline.com api.worldweatheronline.com:80

at errnoException (dns.js:28) 
    at GetAddrInfoReqWrap.onlookup (dns.js:76) 

Peu importe combien de fois je le fais je reçois la même erreur. Donc, je n'atteins pas l'API. J'ai essayé de voir si quelque chose a changé du côté de WWO (URL, etc.) mais apparemment non. J'ai mis à jour NodeJS et toujours le même problème. J'ai rafraîchi la plate-forme Google Cloud complètement et n'ai pas aidé.

Celui que je ne peux vraiment pas déboguer. Quelqu'un pourrait-il aider?

est ici le code de API.ai:

'use strict'; 
const http = require('http'); 
const host = 'api.worldweatheronline.com'; 
const wwoApiKey = '[YOUR_API_KEY]'; 
exports.weatherWebhook = (req, res) => { 
    // Get the city and date from the request 
    let city = req.body.result.parameters['geo-city']; // city is a required param 
    // Get the date for the weather forecast (if present) 
    let date = ''; 
    if (req.body.result.parameters['date']) { 
    date = req.body.result.parameters['date']; 
    console.log('Date: ' + date); 
    } 
    // Call the weather API 
    callWeatherApi(city, date).then((output) => { 
    // Return the results of the weather API to Dialogflow 
    res.setHeader('Content-Type', 'application/json'); 
    res.send(JSON.stringify({ 'speech': output, 'displayText': output })); 
    }).catch((error) => { 
    // If there is an error let the user know 
    res.setHeader('Content-Type', 'application/json'); 
    res.send(JSON.stringify({ 'speech': error, 'displayText': error })); 
    }); 
}; 
function callWeatherApi (city, date) { 
    return new Promise((resolve, reject) => { 
    // Create the path for the HTTP request to get the weather 
    let path = '/premium/v1/weather.ashx?format=json&num_of_days=1' + 
     '&q=' + encodeURIComponent(city) + '&key=' + wwoApiKey + '&date=' + date; 
    console.log('API Request: ' + host + path); 
    // Make the HTTP request to get the weather 
    http.get({host: host, path: path}, (res) => { 
     let body = ''; // var to store the response chunks 
     res.on('data', (d) => { body += d; }); // store each response chunk 
     res.on('end',() => { 
     // After all the data has been received parse the JSON for desired data 
     let response = JSON.parse(body); 
     let forecast = response['data']['weather'][0]; 
     let location = response['data']['request'][0]; 
     let conditions = response['data']['current_condition'][0]; 
     let currentConditions = conditions['weatherDesc'][0]['value']; 
     // Create response 
     let output = `Current conditions in the ${location['type']} 
     ${location['query']} are ${currentConditions} with a projected high of 
     ${forecast['maxtempC']}°C or ${forecast['maxtempF']}°F and a low of 
     ${forecast['mintempC']}°C or ${forecast['mintempF']}°F on 
     ${forecast['date']}.`; 
     // Resolve the promise with the output text 
     console.log(output); 
     resolve(output); 
     }); 
     res.on('error', (error) => { 
     reject(error); 
     }); 
    }); 
    }); 
} 

Répondre

2

Oh boy, en fait, la raison est toujours la plus stupide. Je n'ai pas activé la "facturation" sur Google Cloud Platform et c'est pourquoi tout a été bloqué (même si j'utilise un test gratuit de l'API). Ils voulaient juste mon numéro de carte de crédit. Cela fonctionne maintenant