Отправлять транзакционные текстовые сообщения из приложения Elasti c Beanstalk через SNS - Node.js - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь отправить текстовые сообщения из своего серверного приложения Elasti c Beanstalk, но продолжаю получать {"Error": {"message": null, "code": 404, ...}. Я следил за кодом в документации , но все еще не могу заставить его работать.

Я следил за этим учебником YouTube и могу отправлять сообщения из моя локальная среда разработки, но, похоже, не могу воспроизвести это для моего серверного приложения. В этом руководстве докладчик создает группу IAM и пользователя IAM, а ключи сохраняются в папке .env, что, как я полагаю, заставляет все работать.

Я также предоставил свой Elasti c Beanstalk EC2 экземпляры полный доступ к SNS с использованием IAM.

Кто-нибудь может объяснить мне, как я могу воспроизвести это в моем серверном приложении? Или как я могу отправлять транзакционные текстовые сообщения с сервера node.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 }))
        });

1 Ответ

0 голосов
/ 01 августа 2020

Все, что мне нужно было сделать, это добавить правильную конечную точку и регион в эту строку, теперь все работает отлично!

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