2018-04-15

[ASP.NET] Amazon SNS Service - Send SMS (下集 - 透過 API 查詢發送 Log)

透過 API 發送完簡訊後,只會給你 MessageID,無法知道是否發送成功,我們來看看如何用 MessageID 確認發送結果。


開啟記錄 Log 的服務 - CloudWatch
CloudWatch 不是免費的,會依照產生的 Log 容量收費,每個月超過 5GB 才收費。

到 Amazon SNS Service 主頁,選擇 Text messaging (SMS) -> Manage text messaging preferences。

建立一個 IAM role for CloudWatch Logs access ,建立過程直接按 Allow 即可。

建立完成後,每次傳送簡訊後就會即時 Log 起來,到 CloudWatch Service 就能看 Log,記得 Account Region 要先切換到跟發送簡訊 API 相同的 Region 才看的到喔。
預設會分成兩個 Log Groups,一個是發送成功的 Group,另一個是失敗的 Group。


點選 Group 進去,可以看到一封簡訊就產生一筆 Log。


Log 內文是 JSON,裡面有 MessageID 和 Status,我們就能用 MessageID 找出該筆 Log 檔。




使用 API 讀取 CloudWatch Log
以下是 .Net 版本的使用 API 讀存 CloudWatch Log,使用前要 NuGet Amazon.CloudWatchLogs。
using Amazon.CloudWatchLogs;
using Amazon.CloudWatchLogs.Model;
...
dynamic json = null;
AmazonCloudWatchLogsClient log = new AmazonCloudWatchLogsClient("AccessKey", "SecretKey", Amazon.RegionEndpoint.APSoutheast2);

// 有很多 Filter 條件,這裡是找發送成功的 Log Group
FilterLogEventsRequest filterEvent = new FilterLogEventsRequest();
filterEvent.LogGroupName = "Log Group Name";

FilterLogEventsResponse resp = log.FilterLogEvents(filterEvent);
foreach (FilteredLogEvent evt in resp.Events)
{
 json = JsonConvert.DeserializeObject(evt.Message);

 if (json.notification.messageId == "要尋找的 MessageID")
 {
  ...
 }
}

要注意,AmazonCloudWatchLogsClient API 的 Region 要使用傳送簡訊 API 的 Region 相同,才找的到 Log。
這裡的範例是只找發送成功的 Log Group,有比對到 MessageID 就可判定發送成功了。

沒有留言:

張貼留言