未收到SMS文本但AWS / Lamda没有错误

时间:2018-02-20 08:55:57

标签: node.js amazon-web-services sms aws-lambda amazon-sns

使用Lambda处理SMS文本消息,将EC2 LAMP堆栈迁移到无服务器架构。 我的PHP代码也可以在控制台上正常工作:

aws sns publish --phone-number 0044xxxxxxxxxx --message boo --region eu-west-1

也有效

当我从命令行运行Lambda中的NodeJS时,我得到" Status":202但没有文本。

当我从AWS上的内联代码编辑器中的TEST按钮运行相同的代码时,我得到"成功",清理日志但没有文本..

代码失败的是:

// dependencies
var AWS = require('aws-sdk');
var sns = new AWS.SNS();
exports.handler = function(event, context) {
var params = {
   MessageStructure: 'string',
   PhoneNumber: '0044xxxxxxxxxx',
   Message:'An error occurred'

};
sns.publish(params, function(err, data) {
if (err) {
   console.log(err, err.stack); // an error occurred
   context.done(err, 'Finished with Errors!');  
   return;
}
else     console.log(data);           // successful response
});
  context.done(null,'finished');
};

这也是我从SO中的另一个问题得到的代码,它被证明适用于另一个用户。

知道可能是什么问题吗?

非常感谢

凯文

2 个答案:

答案 0 :(得分:1)

您可能想要了解的一些事项:

您需要确保使用Node.js运行时v6.10或v4.3。 (节点v0.10.42当前标记为已弃用.AWS建议尽快将现有功能迁移到较新的Node.js运行时版本)

lambda函数的IAM角色需要为sns:Publish操作设置允许规则。

AWS建议使用E.164格式指定电话号码。例如:+ 44xxxxxxxxxx。 (more info

此外,AWS 强烈建议更新context方法的任何使用,并将其替换为callback方法(more info)。例如:

const AWS = require("aws-sdk");
const sns = new AWS.SNS({apiVersion: "2010-03-31"});

exports.handler = (event, context, callback) => {
  const params = {
    PhoneNumber: "+44xxxxxxxxxx", // E.164 format.
    Message: "STRING_VALUE",
    MessageStructure: "STRING_VALUE"
  }
  sns.publish(params, (err, data) => {
    if (err) {
      console.error(`Error ${err.message}`);
      callback(err);
    } else {
      console.log("Success");
      callback(null, data); // callback instead of context.
    }
  }
};

答案 1 :(得分:0)

请参考答案SO Link,它对我有用。默认情况下,邮件类型设置为“促销”,您必须将其替换为“事务性”。