Amazon SNS提供了一种全球发送短信的工具。
我想从Lambda函数发送短信,如果我们提供手机号码和短信,并使用SNS传递该消息,但我没有找到有用的文档或NodeJS或java的示例代码。
任何人都可以提出解决方案吗?
代码:
var params = {
Message: 'Hi this is message from AWS_SNS', /* required */
MessageAttributes: {
someKey: {
DataType: 'String' ,
StringValue: 'String'
},
},
MessageStructure: 'String',
PhoneNumber: '+91MyNUMBER',
Subject: 'MYSubject',
//TargetArn: 'arn:aws:sns:us-west-2:798298080689:SMS',
//TopicArn: 'arn:aws:sqs:us-west-2:798298080689:SendSMS'
};
sns.publish(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
};
答案 0 :(得分:2)
因此,您需要编写以某种方式调用的Lambda函数,假设通过HTTP请求,因此您还需要设置API网关以将连接路由到您的Lambda函数。
接下来,您的Lambda函数会将该数据推送到“SNS主题”,而SMS订阅将“轮询”此“主题”中的任何新数据。一旦任何数据进入该主题,它将被订阅消耗并且将发送SMS。
前几天我写了一篇关于SNS& amp; Lambda可能会帮助你。您想要实现的流程与本文中描述的非常类似。
可能有用的文档页面:
答案 1 :(得分:1)
请尝试将区域明确设置为" us-east-1"。我设法通过明确设置这个地区向印度发送短信。我也尝试了#34; ap-south-1",但没有成功。
答案 2 :(得分:1)
基于最新的AWS SNS> SMS文档,当您没有任何topicArn并且需要直接将短信发送到电话号码时,您需要发送以下参数:
const AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
const sns = new AWS.SNS();
const publish = (phone, text, subject) => {
// Create publish parameters
var params = {
Message: text,
Subject: subject,
PhoneNumber: phone,
MessageAttributes: {
'AWS.SNS.SMS.SMSType' : {
DataType : 'String',
StringValue: 'Transactional'
},
},
};
console.log('------------- text message param before sending------------');
console.log(params);
console.log('----------------------------------------------------');
// Create promise and SNS service object
var publishTextPromise = sns.publish(params).promise();
// Handle promise's fulfilled/rejected states
publishTextPromise.then(
function(data) {
console.log("MessageID is " + data.MessageId);
}).catch(
function(err) {
console.error(err, err.stack);
});
}
exports.publish = publish;
答案 3 :(得分:0)
以下是a link指南,用于构建与AWS SNS连接以发送短信的Alexa技能。
答案 4 :(得分:0)
如果可以确保您具有发布到SNS
的权限,则效果很好。
const smsParams = ()=>({
Message: getUpdateMessage(order),
PhoneNumber: `+91${order.contactNo}`,
MessageAttributes: {
'AWS.SNS.SMS.SMSType' : {
DataType : 'String',
StringValue: 'Transactional'
},
},
})
我的lambda的权限:
- Effect: 'Allow'
Action:
- "sns:Publish"
Resource:
- '*'
请注意,您必须允许所有资源使用SMS
PhoneNumber
的链接
答案 5 :(得分:0)
这就是我所做的
使用您选择的运行时创建一个新的 Lambda 函数 Author from scratch
。 (我去了最新的,Node.js 12.x
)
对于执行角色,选择 Create a new role from AWS policy templates
。
输入您的 Role name
,因为您想向任何手机号码发送短信,您必须将 Resource
设置为 *
。
将此作为您的 IAM 角色模板。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"sns:Publish"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
const AWS = require('aws-sdk');
const SNS = new AWS.SNS();
exports.handler = async (event) => {
let params = {
PhoneNumber: '+123xxxxxxx',
Message: 'You are receiving this from AWS Lambda'
};
return new Promise((resolve, reject) => {
SNS.publish(params, function(err, data) {
if(err) {
reject(err);
}
else {
resolve(data);
}
})
})
}
Deploy
,然后点击Test
,您应该会收到一条短信。