簡體   English   中英

如何使用 Amazon SNS 從 AWS lambda 函數發送 SMS

[英]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 的文章,可能會對你有所幫助。 您想要實現的流程與本文中描述的流程非常相似。

https://medium.com/@rafalwilinski/use-aws-lambda-sns-and-node-js-to-automatically-deploy-your-static-site-from-github-to-s3-9e0987a073ec#.3x6wbrz91

可能有幫助的文檔頁面:

請嘗試將區域明確設置為“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;

這是一個教程的鏈接,用於構建與 AWS SNS 連接以發送文本消息的 Alexa 技能。

如果可以確保您具有發布到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 區域的鏈接

這是我所做的

  1. 使用您選擇的運行時Author from scratch創建一個新的 Lambda 函數Author from scratch (我去了最新的Node.js 12.x

  2. 對於執行角色,選擇Create a new role from AWS policy templates

  3. 輸入您的Role name ,因為您想向任何手機號碼發送短信,您必須將Resource設置為*

  4. 將此作為您的 IAM 角色模板。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "sns:Publish"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
  1. 使用此代碼片段
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);
            }
        })
    })
}
  1. 僅此而已。 單擊“ Deploy然后單擊“ Test ,您應該會收到一條 SMS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM