Ошибка ENOTFOUND по запросу в диалоге API Google с Nodejs - PullRequest
0 голосов
/ 11 мая 2018

У меня есть приложение Google Dialogflow, и когда я делаю запрос к API с приложением отдыха (например, бессонница о почтальоне), оно работает. Но когда я делаю с nodejs, он возвращает ошибку: ["(...)" добавлено мной]

> getaddrinfo ENOTFOUND
> dialogflow.googleapis.com/v2/projects/(...):detectIntent
> dialogflow.googleapis.com/v2/projects/(...):detectIntent:80

Это мой код на узле:

var datajson = '{"queryInput":{"text":{"text": "hola", "languageCode": "es"}},"queryParams":{"timeZone":"America/Santiago"}}';

var options = {
  host: 'https://dialogflow.googleapis.com/v2/projects/si(...):detectIntent',
  method: 'POST',
  json: datajson,
  headers: {
    'Content-Type': 'application/json; charset=utf-8',
    'Authorization': 'Bearer ya29.c.El-3sdsa(...):detectIntent' 
  }
}

var req = http.request(options, function(res) {
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

В бессоннице:

Example of DialogFlow working on Insomnia

Example of DialogFlow working on Insomnia

Помогите пожалуйста? Спасибо

1 Ответ

0 голосов
/ 11 мая 2018

Эта ошибка возникает из-за того, что вы используете недопустимое значение для host, которое должно быть:

Доменное имя или IP-адрес сервера, на который нужно отправить запрос. По умолчанию: 'localhost'`

И вы должны использовать https вместо http пакета.

var options = {
  host: 'dialogflow.googleapis.com',
  path: '/v2/projects/si(...):detectIntent'
}

И в https/http.request нет опции json, вы должны использовать req.write

req.write(jsondata);
req.end();

Я рекомендую использовать запрос или запрос-обещание , который будет обрабатывать много вещей для вас.

const request = require('request');
const options = {
  url: 'https://dialogflow.googleapis.com/v2/projects/si(...):detectIntent',
  method: 'POST',
  body: datajson,
  headers: {
    'Content-Type': 'application/json; charset=utf-8',
    'Authorization': 'Bearer ya29.c.El-3sdsa(...):detectIntent' 
  }
}

request(options, (err, response, body) => {
    console.log(err, response.statusCode, body);
});
...