Twilio Forward SMS на электронную почту - Не удается найти модуль "получил" - PullRequest
0 голосов
/ 06 июня 2018

Я новичок в Twilio.Я пытаюсь переслать SMS на адрес электронной почты с помощью этого учебника:

https://www.twilio.com/blog/2017/07/forward-incoming-sms-messages-to-email-with-node-js-sendgrid-and-twilio-functions.html

Я уверен, что сделал все, что он говорит, но я получаю ошибку 11200Ошибка HTTP-поиска каждый раз, с указанием следующих данных:

{"message": "Не удается найти модуль" получил "," name ":" Ошибка "," стек ":" Ошибка: не удается найти "module 'got' \ n в Function.Module._resolveFilename (module.js: 547: 15) \ n в Function.Module._load (module.js: 474: 25) \ n в Module.require (module.js: 596: 17) \ n в Module.twilioRequire [как требуется] (/var/task/node_modules/enigma-lambda/src/dependency.js:28:21)\n по требованию (внутренняя / module.js: 11: 18)\ n в Object. (/var/task/handlers/ZFa37cc3db9fd8db0501c2e5fc92137969.js:1:75)\n
в Module._compile (module.js: 652: 30) \ n в Object.Module._extensions..js(module.js: 663: 10) \ n в Module.load (module.js: 565: 32) \ n в tryModuleLoad (module.js: 505: 12) "}

I 'Мы постарались сделать так, чтобы функция была написана так же, как и учебник.Я скопировал его прямо с страницы github , чтобы быть уверенным.Я не уверен, что делать с устранением неполадок, кажется, это говорит мне, что «получил» не найден, но он должен быть доступен в функциях Twilio.Есть идеи?Спасибо.

Редактировать: Вот код:

const got = require('got');

exports.handler = function(context, event, callback) {
  const requestBody = {
    personalizations: [{ to: [{ email: context.TO_EMAIL_ADDRESS }] }],
    from: { email: context.FROM_EMAIL_ADDRESS },
    subject: `New SMS message from: ${event.From}`,
    content: [
      {
        type: 'text/plain',
        value: event.Body
      }
    ]
  };

  got
    .post('https://api.sendgrid.com/v3/mail/send', {
      headers: {
        Authorization: `Bearer ${context.SENDGRID_API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(requestBody)
    })
    .then(response => {
      let twiml = new Twilio.twiml.MessagingResponse();
      callback(null, twiml);
    })
    .catch(err => {
      callback(err);
    });
};

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

После небольшого исследования я нашел несколько комментариев на GitHub , которые указывают, что 'got' больше не включен по умолчанию в зависимости Twilio.В соответствии с инструкциями, я зашел в раздел Конфигурация функций времени выполнения консоли Twilio и добавил полученную версию 6.7.1, и теперь оригинальный исходный код работает!

Однако я предпочитаю решение Алекса, так как оноработает "из коробки", и я оставляю его как принятый ответ.

0 голосов
/ 02 декабря 2018

Мне удалось заставить это работать, убедившись, что "got" установлен как зависимость в следующих настройках: https://www.twilio.com/console/runtime/functions/configure

Снимок экрана функций

0 голосов
/ 06 июня 2018

Во-первых, приведенный выше код с got работает с моими учетными записями Twilio и SendGrid, я только что протестировал, я не знаю, почему у вас проблемы ..., возможно, попробуйте создать субсчет Twilio и запустить оттуда.


Во-вторых, если вы все еще не можете заставить got работать, вот код, который вы можете попробовать, и я также проверил, и он работает.Вместо этого используется https:


const https = require('https');

exports.handler = function (context, event, callback) {

    let postData = JSON.stringify({
        personalizations: [{
            to: [{
                email: 'somebody@gmail.com'
            }]
        }],
        from: {
            email: 'somebody@gmail.com'
        },
        subject: `New SMS message from: ${event.From}`,
        content: [{
            type: 'text/plain',
            value: event.Body
        }]
    });

    let postOptions = {
        host: 'api.sendgrid.com',
        port: '443',
        path: '/v3/mail/send',
        method: 'POST',
        headers: {
            'Authorization': 'Bearer YOUR_API_KEY',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(postData),
        }
    };

    let req = https.request(postOptions, function (res) {
        // some code to handle the async response if needed
        let twiml = new Twilio.twiml.MessagingResponse();
        callback(null, twiml);
    });

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

};

Удачи!

...