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

Twilio将短信转发至电子邮件-找不到模块';得到';,twilio,twilio-functions,Twilio,Twilio Functions,我是新来的。我正在尝试使用本教程将SMS转发到电子邮件地址: 我确信我已经完成了它所说的一切,但每次我都会收到一个错误11200 HTTP检索失败,详细信息如下: { “消息”:“找不到模块'got'”, “名称”:“错误”, “堆栈”:“错误:在Function.module中找不到模块'got'。\u resolveFilename(module.js:547:15)\n在 Function.Module.\u在Module.require处加载(Module.js:474:25)\n (

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

我确信我已经完成了它所说的一切,但每次我都会收到一个错误11200 HTTP检索失败,详细信息如下:

{ “消息”:“找不到模块'got'”, “名称”:“错误”, “堆栈”:“错误:在Function.module中找不到模块'got'。\u resolveFilename(module.js:547:15)\n在 Function.Module.\u在Module.require处加载(Module.js:474:25)\n (module.js:596:17)\n位于module.twilioRequire[根据需要] (/var/task/node_modules/enigma lambda/src/dependency.js:28:21)\n在 在对象处需要(internal/module.js:11:18)\n。 (/var/task/handlers/ZFa37cc3db9fd8db0501c2e5fc92137969.js:1:75)\n
在模块处编译(Module.js:652:30)\n在 Object.Module.\u extensions..js(Module.js:663:10)\n位于Module.load (module.js:565:32)\n在tryModuleLoad(module.js:505:12)“}

我已经尽力确保我编写的函数与教程相同。我确实是直接从我的电脑上复制的。我不知道如何进行故障排除,它似乎告诉我找不到“got”,但它应该在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);
    });
};

首先,上面带有
get
的代码适用于我的Twilio和SendGrid帐户,我刚刚测试过,我不知道你为什么会遇到问题…,可能尝试创建Twilio子帐户并从那里运行


第二,如果您仍然无法让
get
工作,这里有一些代码,您可以尝试, 我很抱歉,我们也测试过了,效果很好。它使用的是
https




祝你好运

经过进一步研究,我发现Twilio依赖项中默认不再包含“got”。根据那里的说明,我去了,并添加了版本6.7.1,现在原来的源代码工作


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

我能够通过确保“get”作为依赖项安装在以下设置下来实现这一点:


您是否有
const-got=require('got')
before
exports.handler=函数(…
??@AlexBaban是的,谢谢。我已经编辑了我的问题,以包括我正在使用的代码。我今天再次检查了所有内容,以确保没有遗漏任何内容,但仍然是关于找不到“get”的相同错误。但是您发布的代码第一次运行得非常完美!谢谢您的帮助。使用这种方法,我得到了“没有记录此事件的HTTP请求”,SMS未转发到电子邮件。我必须缺少一个简单的设置步骤,但我不知道缺少什么。我有我的SendGrid API密钥(它被配置为一个环境变量,我使用${context.SendGrid_API_key}访问它@Bugbddy请在Hello上查看评论,我写了你在问题开始时链接的博客文章,我现在就去更新。我知道这件事有一段时间了,所以我很抱歉没有看到。更新了博客文章和你找到评论的GitHub repo(那也是我的,对不起!).@philnash代码的日期为2017年7月5日,但仍然不起作用。这是我第一次尝试使用Twilio,我对文档不感兴趣。嗨@cja,该代码对您来说有什么不起作用?您是否如中所述将
get
作为依赖项添加到您的中?
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();

};