[英]How to send SMS using Amazon SNS from a AWS lambda function
Amazon SNS 提供了一種在全球范圍內發送 SMS 的工具。
如果我們提供手機號碼和文本消息並使用 SNS 傳遞該消息,我想從 Lambda 函數發送 SMS,但我沒有找到有用的文檔或 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
});
};
因此,您需要編寫以某種方式調用的 Lambda 函數,比如說通過 HTTP 請求,因此您還需要設置 API 網關以將連接路由到您的 Lambda 函數。
接下來,您的 Lambda 函數會將該數據推送到“SNS 主題”,而 SMS 訂閱將“輪詢”此“主題”中的任何新數據。 一旦有任何數據進入該主題,它將被訂閱消耗並發送短信。
幾天前,我寫了一篇關於 SNS 和 Lambda 的文章,可能會對你有所幫助。 您想要實現的流程與本文中描述的流程非常相似。
可能有幫助的文檔頁面:
請嘗試將區域明確設置為“us-east-1”。 我通過明確設置這個區域來設法向印度發送短信。 我也嘗試過“ap-south-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;
如果可以確保您具有發布到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:
- '*'
請注意,您必須允許所有資源使用PhoneNumber
發送SMS
這是所有支持的 SNS 區域的鏈接
這是我所做的
使用您選擇的運行時Author from scratch
創建一個新的 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
,您應該會收到一條 SMS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.