2017-04-25 112 views
12

我通过节点SDK从AWS发送SMS。短信发送很好,我正在尝试收到传送信息。显然,这不是那么容易,人们必须建立SNS将日志发送到CloudWatch的和解析的CloudWatch获得配送信息查找邮件ID:https://stackoverflow.com/a/40327061/2054629获取AWS SMS的交付状态

如果我通过SNS网络接口发送短信,登录我看到CloudWatch的日志,但不是在我通过节点SDK发送它们时。在从节点发送它们之前,我无法获得有关如何设置的信息。

理想情况下,我想实现的东西,如:

const sendSMS = async (message, number) => { 
    // send the SMS 
    // wait to get delivery info 
    // resolve with delivery info, or reject if failed 
} 

目前我有:

import AWS from 'aws-sdk'; 

AWS.config.update({ 
    accessKeyId: accessKey, 
    secretAccessKey: secretKey, 
    region: 'us-east-1', 
}); 

const sns = new AWS.SNS(); 

const sendSMS = async (message, number) => { 
    return await new Promise((resolve, reject) => { 
    sns.publish({ 
     Message: message, 
     MessageStructure: 'string', 
     PhoneNumber: number, 
    }, (err, res) => { 
     if (err) { return reject(err); } 
     resolve(res); 
    }); 
    }); 
} 

只发送短信请求,AWS和喜欢的东西

{ 
    ResponseMetadata: { RequestId: '7e0999a3-xxxx-xxxx-xxxx-xxxxxxxxxxxx' }, 
    MessageId: 'f7f21871-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 
} 
解析

我不确定是否必须设置SNS应用程序才能获取日志,而且我不想保持简单。

回答

1

通过更改导入语句(缺少对ES5/6的支持),您的代码似乎可以与nodejs v6一起正常工作。在启用日志记录到cloudwatch之后,每条SMS(通过Web界面和此代码)都会在CloudWatch日志中创建日志流。我认为您应该重新安装AWS SDK或避免使用ES5/6来使SDK正常工作。

对于第二个问题,如果没有交付的消息,你会得到一个错误:

(err, res) => { 
     if (err) { return reject(err); } 
     resolve(res); 
    }); 

如果成功发送的消息,你得到的回应:

{ ResponseMetadata: { RequestId: 'e31feda6-669c-5b13-XXX-bc25b07877b5' }, 
    MessageId: '53555115-6acb-5684-XXXX-0096bc2f6a22' } 
+0

我不认为ES6是一个问题。如何从节点SDK获取与SMS相对应的CloudWatch日志? – Guig

0

您可能已经完成了此操作,但为了配置SMS传递的cloudwatch日志,您必须配置SMS首选项。为此,您需要创建一个IAM角色以允许cloudwatch日志访问。通过AWS控制台执行它非常简单。步骤如下:http://docs.aws.amazon.com/sns/latest/dg/sms_preferences.html

如果需要,您甚至可以控制成功交付的百分比+失败的SMS。完成此操作后,无论您发送SMS的方式如何,都应该开始查看CloudWatch日志。

我想将此添加为评论,但我没有足够的代表。如果它不起作用,我会删除这个答案。