3

我是 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": "Cannot find module 'got'", "name": "Error", "stack": "Error: Cannot find module 'got'\n at 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 [as require] (/var/task/ node_modules/enigma-lambda/src/dependency.js:28:21)\n at require (internal/module.js:11:18)\n at 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)" }

我已经尝试过确保我编写的函数与教程相同。为了确定,我直接从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);
    });
};
4

3 回答 3

3

经过一番研究,我在 GitHub 上发现了一些评论,表明 Twilio 依赖项中默认不再包含“got”。根据那里的说明,我去了 Twilio 控制台的运行时功能配置部分并添加了 6.7.1 版,现在原始源代码可以工作了!

但是,我更喜欢 Alex 的解决方案,因为它“开箱即用”,我将其保留为公认的答案。

于 2018-06-07T14:21:37.947 回答
2

首先,上面的代码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();

};

祝你好运!

于 2018-06-06T19:50:03.237 回答
0

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

功能截图

于 2018-12-01T23:16:27.490 回答