如何访问 SMS 消息的 Amazon SNS 主题传输日志?

上次更新日期:2021 年 6 月 28 日

我想访问 SMS 消息的 Amazon Simple Notification Service (Amazon SNS) 主题传输日志。

简短描述

完成以下步骤之前,请确认您使用的是支持通知消息日志传输状态的 SNS 终端节点:

  • HTTP(S)
  • Amazon Kinesis Data Firehose
  • AWS Lambda
  • 平台应用程序端点
  • Amazon Simple Queue Service (Amazon SQS)
  • SMS

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您使用的是最新版的 AWS CLI

解决方法

配置 Amazon CloudWatch 日志 SMS 发送状态属性

注意:作为以下控制台步骤的替代方法,您可以使用 AWS 开发工具包AWS CLI 配置消息传输状态。

1.    打开 Amazon SNS 控制台

2.    打开导航窗格,展开 Mobile (移动应用程序),然后选择 Text messaging (SMS) (文本消息 (SMS))

3.    在 Text messaging preferences (文本消息首选项) 部分中,选择 Edit (编辑)

4.    展开 Delivery status logging - optional (传输状态日志记录 – 可选)

5.    对于 Success sample rate (成功采样率),请在 % 文本框中输入 100

注意:成功率是消息成功传输到日志的百分比。

6.    在IAM 角色部分中,对于 Service (服务) 角色,选择 Create new service role (创建新的服务角色),然后选择 Create new roles (创建新角色)。打开 AWS Identity and Access Management (IAM) 控制台。

注意:如果您已经拥有具有适当权限的 IAM 角色,则可以通过选择 Use existing service role (使用现有服务角色) 来使用该服务角色。

7.    在 IAM 控制台权限请求页面上,选择 Allow (允许)

8.    返回到 Amazon SNS 控制台后,选择 Save changes (保存更改)

现在,通过以下针对 Amazon SNS 的策略和信任关系,创建 IAM 角色以实现成功和失败传输。

IAM 角色:

arn:aws:iam::1111111111:role/SNSSuccessFeedback

策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:PutMetricFilter",
                "logs:PutRetentionPolicy"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Trust relationships (信任关系):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "sns.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

查看传输状态日志

1.    打开 Amazon CloudWatch console (Amazon CloudWatch 控制台)

2.    在导航窗格上,展开 Logs (日志),然后选择 Log groups (日志组)

3.    在筛选器搜索框中,输入 DirectPublishtopPhoneNumber 以仅查找 Amazon SNS 的 SMS 日志组。

注意:根据目的地电话号码运营商,传输日志可能最长需要 72 小时才能显示在 Amazon SNS 控制台中。

例如:

sns/your-AWS-region/your-AWS-account-ID/DirectPublishToPhoneNumber 日志组包含成功传输日志:

sns/us-east-1/1111111111/DirectPublishToPhoneNumber

成功传输日志示例:

{
    "notification": {
        "messageId": "34d9b400-c6dd-5444-820d-fbeb0f1f54cf",
        "timestamp": "2016-06-28 00:40:34.558"
    },
    "delivery": {
        "phoneCarrier": "My Phone Carrier",
        "mnc": 270,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 310,
        "providerResponse": "Message has been accepted by phone carrier",
        "dwellTimeMs": 599,
        "dwellTimeMsUntilDeviceAck": 1344
    },
    "status": "SUCCESS"
}

sns/your-AWS-region/your-AWS-account-ID/DirectPublishToPhoneNumber/Failure 日志组包含失败传输日志:

sns/us-east-1/1111111111/DirectPublishToPhoneNumber/Failure

失败传输日志示例:

{
    "notification": {
        "messageId": "1077257a-92f3-5ca3-bc97-6a915b310625",
        "timestamp": "2016-06-28 00:40:34.559"
    },
    "delivery": {
        "mnc": 0,
        "destination": "+1XXX5550100",
        "priceInUSD": 0.00645,
        "smsType": "Transactional",
        "mcc": 0,
        "providerResponse": "Unknown error attempting to reach phone",
        "dwellTimeMs": 1420,
        "dwellTimeMsUntilDeviceAck": 1692
    },
    "status": "FAILURE"
}

4.    选择要查看的 SNS 日志组。

5.    在 Log streams (日志流) 选项卡上,选择特定日志流以查看 SMS 传输日志。

6.    要查看 SMS 的传输状态,请展开日志事件并选中 ProvierResponse

查看已退出的电话号码

收件人可以选择退出不从其 AWS 账户接收手机上的短信。有关更多信息,请参阅退出接收 SMS 消息

1.    打开 Amazon SNS 控制台

2.    打开导航窗格,展开 Mobile (移动应用程序) 部分,然后选择 Text messaging (SMS) (文本消息 (SMS))

3.    如需查看已选择退出的电话号码,请转至已选择退出的电话号码部分。