首页 > 解决方案 > 如何以编程方式获取 aws 短信发送报告?

问题描述

我正在使用AWS SNSSMS 发送到 mobile

我可以看到S3选项上的S3 交付状态上传。但为此,我必须每天运行批处理。报告将几乎延迟。

我可以在 Cloudwatch 上看到的第二个选项。

是否可以从 cloudwatch 发布带有日志详细信息的 SQS 事件,以便我可以编写 SQS 订阅者来获取消息传递状态?或者如果到目前为止我还没有探索过任何其他可用的选项,请告诉我。

我正在使用 Java 和 aws-java-sdk 来获取详细信息。

请注意,我已经浏览了文档,但找不到有用的东西。

欢迎任何建议。

请我浏览了文档但找不到

标签: amazon-web-servicesamazon-cloudwatchamazon-sns

解决方案


要获取 SMS 发送状态,您必须执行以下操作

  1. 对 AWS Cloudwatch 启用“交付状态日志记录”更多信息
  2. 为用户(在脚本中使用)设置访问 AWS Cloudwatch 日志的权限
  3. 使用 awssdk 从 cloudwatch 读取日志条目。

请参阅下面我在项目中使用的 PHP 代码,您可以将其参考创建 java 代码

require 'inc/awsSdkForPhp/aws-autoloader.php';
$params = array(
    'credentials' => array(
        'key' => '<YOUR KEY>',
        'secret' => '<YOUR SECRET>',
    ),
    'region' => 'us-east-1', //  your aws from SNS region
    'version' => 'latest'
);
$cwClient = new \Aws\CloudWatchLogs\CloudWatchLogsClient($params);
$queryRes = $cwClient->startQuery([
  'endTime' => 1621231180,  // UNIX TIMESTAMP 
  'logGroupName' => 'sns/us-east-1/***/DirectPublishToPhoneNumber', // YOUR LOG GROUP NAME
  'queryString' => 'fields @timestamp, status, @message
  | filter notification.messageId="5a419afc-c4b3-55b3-85f9-c3e7676b2dd2"', // YOUR MESSAGE ID
  'startTime' => 1620954551 // START UNIX TIMESTAMP 
]);

$qryID = $queryRes->get('queryId');
sleep(3); // To wait the execution to be completed.
$resultObj =  $cwClient->getQueryResults(array(
  'queryId' => $qryID, // REQUIRED
));

//echo "<pre>";print_r($resultObj);echo "</pre>";
$result = $resultObj->get('results');

$jsnRs = json_decode($result[0][2]['value']); // TO get the delivery array 

echo "<br>status :".$jsnRs->status;
echo "<br>phone Carrier :".$jsnRs->delivery->phoneCarrier;
echo "<br>provider Response :".$jsnRs->delivery->providerResponse;
echo "<pre>";print_r($jsnRs);echo "</pre>";

我相信它会帮助某人


推荐阅读