使用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中的另一个问题得到的代码,它被证明适用于另一个用户。
知道可能是什么问题吗?
非常感谢
凯文
答案 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,它对我有用。默认情况下,邮件类型设置为“促销”,您必须将其替换为“事务性”。