Twilio转发短信到电子邮件 - 找不到模块'得到'

时间:2018-06-06 15:42:58

标签: twilio twilio-functions

我是Twilio的新手。我正在尝试使用本教程将短信转发到电子邮件地址:

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

我确信我已经完成了它要做的所有事情,但每次都会收到错误11200 HTTP检索失败,并提供以下详细信息:

  

{       “消息”:“找不到模块'得'',       “名字”:“错误”,       “stack”:“错误:无法在Function.Module._resolveFilename(module.js:547:15)找到模块'得到'\ n   Module.require中的Function.Module._load(module.js:474:25)\ n   (module.js:596:17)\ n在Module.twilioRequire [根据要求]   (/var/task/node_modules/enigma-lambda/src/dependency.js:28:21)   在Object处需要(internal / module.js:11:18)\ n。   (/var/task/handlers/ZFa37cc3db9fd8db0501c2e5fc92137969.js:1:75)\n
  在Module._compile(module.js:652:30)\ n at   在Module.load上的Object.Module._extensions..js(module.js:663:10)\ n   (module.js:565:32)\ n在tryModuleLoad(module.js:505:12)“}

我已经尽力确保我的功能与教程相同。我直接从the github page复制了它以确定。我不知道如何继续进行故障排除,它似乎告诉我找不到“得到”但它应该在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 :(得分:2)

经过一番研究后,默认情况下,Twilio依赖项中不再包含表示“got”的found some comments on GitHub。根据那里的说明,我去了Runtime Functions Config section of the Twilio console并添加了版本6.7.1,现在原始源代码可以使用了!

我更喜欢亚历克斯的解决方案,因为它“开箱即用”,我将其作为公认的答案。

答案 1 :(得分:1)

首先,带有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();

};
祝你好运!

答案 2 :(得分:0)

通过确保在以下这些设置下将“ got”安装为依赖项,我能够使其工作: https://www.twilio.com/console/runtime/functions/configure

Functions Screenshot