获取 AWS SMS 的发送状态

Posted

技术标签:

【中文标题】获取 AWS SMS 的发送状态【英文标题】:Getting delivery status of AWS SMS 【发布时间】:2017-09-21 20:47:31 【问题描述】:

我通过节点 SDK 从 AWS 发送短信。短信发送良好,我正在尝试获取送货信息。显然这并不容易,必须设置 SNS 以将日志发送到 Cloudwatch 并解析 CloudWatch 以获取查找 MessageId 的传递信息:https://***.com/a/40327061/2054629

如果我通过 SNS Web 界面发送短信,日志我会在 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 应用程序才能获取日志,我不想让事情变得简单。

【问题讨论】:

我也想这样做,自 2017 年以来你有没有得到任何地方!? 【参考方案1】:

您可能已经这样做了,但要为 SMS 传送配置 cloudwatch 日志,您必须配置 SMS 首选项。为此,您需要创建一个 IAM 角色以允许 cloudwatch 日志访问。通过 AWS 控制台非常简单。步骤在http://docs.aws.amazon.com/sns/latest/dg/sms_preferences.html

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

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

【讨论】:

【参考方案2】:

通过更改 import 语句(缺少 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' 

【讨论】:

我不认为 ES6 是个问题。如何从node SDK获取短信对应的CloudWatch日志?

以上是关于获取 AWS SMS 的发送状态的主要内容,如果未能解决你的问题,请参考以下文章

Amazon Cognito 未向我的应用程序用户发送 SMS 文本消息

Android SMS 发送结果

在 Cordova 中发送和阅读通过本机 SMS 应用程序发送的 SMS 内容

从 Cloud Function 本身获取 Cloud Function 名称

amazon aws sns,sms选项不可用?

在 AWS Cognito 中为 MFA 配置自定义 SMS 消息