使用 SNS 从 Elastic Beanstalk 应用程序发送事务性文本消息 - Node.js

Send transactional text messages from Elastic Beanstalk app using SNS - Node.js

我正在尝试从我的 Elastic Beanstalk 服务器应用程序发送文本消息,但我不断收到 {"Error":{"message":null,"code":404,... }。我按照 documentation 中的代码进行操作,但仍然无法正常工作。

我遵循了这个 YouTube tutorial 并且我能够从我的本地开发环境发送消息,但似乎无法为我的服务器应用程序复制它。在那个教程中,演示者创建了一个 IAM 组和一个 IAM 用户,并且密钥保存在一个 .env 文件夹中,我想这就是让事情起作用的原因。

我还使用 IAM 授予我的 Elastic Beanstalk EC2 实例对 SNS 的完全访问权限。

有人可以向我解释一下如何在我的服务器应用程序中复制它吗?或者如何从节点发送事务性文本消息。js/express 服务器?

这是我的代码:

//we have to use us-east-1 because sending texts is not allowed in us-east-2
AWS.config.update({region: 'us-east-1'});

var params = {
    Message: "This is a test",
    PhoneNumber: '+' + "phoneNumberGoesHere",
    MessageAttributes: {
        'AWS.SNS.SMS.SenderID': {
            'DataType': 'String',
            'StringValue': "app name goes here"
        }
    }
};

var publishTextPromise = new AWS.SNS({ apiVersion: '2010-03-31'}).publish(params).promise();

publishTextPromise.then(
    function (data) {
        console.log("Message sent successfully...... ", JSON.stringify({ MessageID: data.MessageId }))
        
    }).catch(
        function (err) {
            console.log("Error sending Text Message...... ", JSON.stringify({ Error: err }))
        });

我所要做的就是向这条线添加正确的端点和区域,现在它完美运行了!

var publishTextPromise = new AWS.SNS({ apiVersion: '2010-03-31', endpoint: 'http://sns.us-east-1.amazonaws.com', region: 'us-east-1' }).publish(params).promise();

正如@Raman Damodar Shahdadpuri 提到的,我需要删除 .SenderID 部分。这是最终代码:

var params = {
    Message: "This is a test of text messaging",
    PhoneNumber: '+' + 'phone number goes here',
    MessageAttributes: {
        'AWS.SNS.SMS.SMSType': {
            'DataType': 'String',
            'StringValue': "Transactional"
        }
    }
};

var publishTextPromise = new AWS.SNS({ apiVersion: '2010-03-31', endpoint: 'http://sns.us-east-1.amazonaws.com', region: 'us-east-1' }).publish(params).promise();

publishTextPromise.then(
    function (data) {
        res.end(JSON.stringify({ MessageID: data.MessageId }));
    }).catch(
        function (err) {
            res.end(JSON.stringify({ Error: err }));
        });