api - getaddrinfo ENOTFOUND API Google Cloud

标签 api bots getaddrinfo

我正在尝试执行 API.AI 教程来为 Google Assistant 构建天气机器人(这里的那个:https://dialogflow.com/docs/getting-started/basic-fulfillment-conversation)

我成功地完成了一切,在 API 中创建了机器人,创建了 Fulfillments,在我的电脑上安装了 NodeJS,连接了谷歌云平台等。

然后我创建了 index.js 文件,通过使用我来自世界天气组织的 API key (见下文)准确复制它在 API.ai 教程中的说明。

但是当我使用机器人时,它不起作用。在 Google Cloud Platform 上,错误始终相同:

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

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


无论我多久做一次,我都会遇到同样的错误。所以我实际上并没有到达 API。我试图查看 WWO 方面(URL 等)是否有任何变化,但显然没有。我更新了 NodeJS,但仍然是同样的问题。我完全刷新了 Google Cloud 平台,但没有帮助。

那个我真的无法调试。有人可以帮忙吗?

这是来自 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);
      });
    });
  });
} 

最佳答案

哦,天哪,其实原因是有史以来最愚蠢的。我没有在 Google Cloud Platform 上启用“计费”,这就是它阻止所有内容的原因(即使我正在使用 API 的免费测试)。他们只是想要我的信用卡号码。它现在有效

关于api - getaddrinfo ENOTFOUND API Google Cloud,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46692267/

相关文章:

ios - 返回所有关注的 Instagram API 哈希不再有效

php - 拉维尔智威汤逊 : generated tokens on the localhost are valid on the server

c - 为什么 getaddrinfo() 在函数的输入部分返回一个值?

c - WinSock 函数 - 传递 argc 和 argv 异常

node.js - 如何捕获 getaddrinfo ENOTFOUND

java - 错误 - 尝试关闭结果集或准备好的 JDBCResourceDAO 时发生 SQLException 错误

PHP 创建 API 连接同一服务器上的 2 个应用程序

python - balebot 支付信息错误

python - 如何使我的Discord机器人播放YouTube上的音频

Python - 循环追加到 Json 文件