未收到短信,但没有来自 AWS/Lamda 的错误

SMS text not received but no errors from AWS/Lamda

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

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

也有效

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

当我 运行 来自 AWS 内联代码编辑器中的 TEST 按钮的相同代码时,我得到 "Successful",干净的日志但没有文本..

失败的代码是:

// 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 中的另一个问题中得到的代码,它被证明对另一个用户有效。

知道可能是什么问题吗?

非常感谢

凯文

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

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

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

AWS 建议使用 E.164 格式指定 phone 号码。例如:+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.
    }
  }
};

请参考答案,对我有用。默认情况下,消息类型设置为促销,您必须将其覆盖为交易。