Отправить POST запрос через AWS Lambda в Node.js - PullRequest
0 голосов
/ 03 января 2019

Я хочу отправить POST-запрос в Twilio, когда из моего Alexa Skill вызывается Intent.При тестировании Кодекса ошибок нет, но Запрос, похоже, не проходит.Тестирование POST-запроса в Postman работает.

function postToTwilio() {

var http = require("https");
var postData = JSON.stringify({
      'To' : '1234567',
      'From': '1234546',
      'Url': 'https://handler.twilio.com/twiml/blablabla',


  });

var options = {
  "method": "POST",
  "hostname": "https://api.twilio.com",
  "path": "/12344/Accounts/blablablablba/Calls.json",
  "headers": {
    "Authorization": "Basic blblablablablabla",
    "Content-Type": "application/x-www-form-urlencoded",
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(postData);
req.end();

}

1 Ответ

0 голосов
/ 04 января 2019

Прежде всего, запрос является асинхронным вызовом, поэтому вам нужно заставить Алексу ждать ответа.

Для этого вам нужно использовать async await process и использование обещаний.

var postData = JSON.stringify({
      'To' : '1234567',
      'From': '1234546',
      'Url': 'https://handler.twilio.com/twiml/blablabla',


  });

var options = {
  "method": "POST",
  "hostname": "https://api.twilio.com",
  "path": "/12344/Accounts/blablablablba/Calls.json",
  "headers": {
    "Authorization": "Basic blblablablablabla",
    "Content-Type": "application/x-www-form-urlencoded",
  }
};

function get(options) {
  return new Promise(((resolve, reject) => {
    const request = https.request(options, (response) => {
      response.setEncoding('utf8');
      let returnData = '';

      if (response.statusCode < 200 || response.statusCode >= 300) {
        return reject(new Error(`${response.statusCode}: ${response.req.getHeader('host')} ${response.req.path}`));
      }

      response.on('data', (chunk) => {
        returnData += chunk;
      });

      response.on('end', () => {
        resolve(JSON.parse(returnData));
      });

      response.on('error', (error) => {
        reject(error);
      });
    });
    request.write(postData)
    request.end();
  }));
}

Затем, когда вы вызываете эту функцию get:

let response = await get(options)

Я не тестировал в целом, но это базовый скелет.

Дайте мне знать, если это работает.

...