获取AWS SMS的交付状态

我通过节点SDK从AWS发送短信。 短信发送情况良好,我正在尝试收到发送信息。 显然不是那么容易,而且必须设置SNS才能将日志发送到Cloudwatch,并parsingCloudWatch以获取查找MessageId的传递信息: https ://stackoverflow.com/a/40327061/2054629

如果我通过SNSnetworking界面发送短信,日志中会看到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发送一个SMS请求,并用类似的东西来解决

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

我不确定是否需要设置SNS应用程序才能获取日志,我不想让事情变得简单。

你的代码通过改变import语句(缺lessES5 / 6支持)似乎可以很好地工作在nodejs v6上。 在启用日志到cloudwatch之后,每条SMS(通过Web界面和此代码)都会在CloudWatch日志中创build日志stream。 我认为您应该重新安装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' } 

您可能已经完成了此操作,但要configuration用于SMS传送的CloudWatch日志,您必须configurationSMS首选项。 为此,您需要创buildIAMangular色以允许cloudwatch日志访问。 通过AWS控制台执行操作非常简单。 步骤在http://docs.aws.amazon.com/sns/latest/dg/sms_preferences.html上给出。

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

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