如何使用AWS lambda函数从Amazon SNS发送SMS

时间:2016-07-26 11:40:03

标签: node.js amazon-web-services amazon-s3 aws-lambda amazon-sns

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
});
};

6 个答案:

答案 0 :(得分:2)

因此,您需要编写以某种方式调用的Lambda函数,假设通过HTTP请求,因此您还需要设置API网关以将连接路由到您的Lambda函数。

接下来,您的Lambda函数会将该数据推送到“SNS主题”,而SMS订阅将“轮询”此“主题”中的任何新数据。一旦任何数据进入该主题,它将被订阅消耗并且将发送SMS。

前几天我写了一篇关于SNS& amp; Lambda可能会帮助你。您想要实现的流程与本文中描述的非常类似。

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

可能有用的文档页面:

答案 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

这里是所有supported SNS regions

的链接

答案 5 :(得分:0)

这就是我所做的

  1. 使用您选择的运行时创建一个新的 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,您应该会收到一条短信。