未收到短信,但没有来自 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.
}
}
};
请参考答案,对我有用。默认情况下,消息类型设置为促销,您必须将其覆盖为交易。
将 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.
}
}
};
请参考答案