追蹤 AWS SES 開信率及點擊率 part1 — 使用 CloudWatch

Luyo
verybuy-dev
Published in
8 min readAug 17, 2017

最近接到一個行銷部門的需求,想要知道 user 的開信率是否正常。

辜狗了一下,發現這個時間點還真是巧,因為這篇文章 Open and Click Tracking Have Arrived 的發文日期是 2017/08/01,也就是 AWS SES 推出追蹤開信事件及點擊事件的功能才剛正式宣布上線!

好那就二話不說馬上來實作吧。

NOTE:本文先實作 CloudWatch 的部分,但我覺得用 CloudWatch 的缺點是如果要給非開發人員要看的話會比較麻煩,所以下一篇 part2 會分享如何使用 AWS Elasticsearch Service 內建的 Kibana 來監看。

本文流程大致上會分成下面幾個部分:

  1. 新增 SES 的 Configuration Set
  2. 修改 SES API 程式碼
  3. 進入 CloudWatch console 觀看統計圖表

參考文件如下:

  1. Monitoring Your Amazon SES Sending Activity
  2. Introducing Sending Metrics

1. 新增 SES 的 Configuration Set

首先打開 SES console,記得選擇 Region,然後點擊左側欄的 Configuration Sets,然後按下 Create Configuration Set 按鈕:

圖 1

請自己取一個 Configuration Set 的名字,我的取名叫 SetForMarketing

圖 2

然後按下 Create Configuration Set 按鈕就完成了,新增完成後會出現列表頁面,在剛剛新增的這個項目上按一下:

圖 3

NOTE:若你對 SES — CloudWatch 的實作沒興趣,想直接實作 SES — Kinesis Firehose — Kibana 的話,可以先做到這邊,然後跳到本文的第 2 章「修改 SES 程式碼」,再直接跳到 part2 的開頭。

按下去後會出現以下畫面,請選擇 CloudWatch

圖 4

按著會出現設定 Destination 的對話框,設定方式可參考下圖:

圖 5

Event types 的部份可以只選你想要追蹤的事件,不一定要像我一樣全都勾選,簡單說明一下這些事件項目代表的意義:

  • Sends — SES 接受寄送請求並嘗試寄送信件
  • Deliveries —信件成功寄送至接收者的 mail server
  • Opens — 接收者打開信件
  • Clicks — 接收者點擊了一個或多個信件內的連結
  • Bounces — 接收者的 mail server 永久拒絕接收此 email。bounce 分為 hard bouncesoft bounce,此事件為 hard bounce。若接收端的 mail server 暫時接收失敗則為 soft bounce,若是這種情況 SES 會隔一段時間後自動重新寄送,不會計算在這個 Bounces 的數字裡
  • Complaints — 接收者回報此信件為垃圾信
  • Rejects —SES 接受寄送請求,但偵測到此信件內有病毒並予以回絕

其實感覺每個事件都值得追蹤的啦,所以我就全勾了。對於行銷部門來說,我覺得至少要勾 Deliveries、Opens、Clicks 這幾個,才能計算開信率跟點擊率。

另外在 Value Source 這個選項中有好幾個選擇,一開始我也是霧煞煞,雖然參考文件 2 中有說明,但我看了還是沒有很懂差別在哪,好像是 Message Tag 可以追蹤的資訊比較多。不過我試過 Message Tag 跟 Email header 這個兩選項最後都是可以運作的。

至於 Dimension Name 及 Default Value 這兩格到底要填什麼,我也是揣測了蠻久的,圖 9 及圖 10 會說明這兩個東西會顯示在哪裡,可以先拉下去看看再決定你要填什麼。

設定好之後就按下 Save 按鈕,最後畫面會長這樣:

圖 6

到這邊 SES — CloudWatch 的部分就完成囉。

2. 修改 SES API 程式碼

這部分是要去修改你自己寄送 SES 的程式碼。

我們用的是 AWS SDK for PHP 3.x 的 SendEmail (SendRawEmail 也可以) 這支 API:

http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-email-2010-12-01.html#sendemail

裡面有個參數叫 ConfigurationSetName

$result = $client->sendEmail([
'ConfigurationSetName' => '<string>',
'Destination' => [ // REQUIRED
'BccAddresses' => ['<string>', ...],
'CcAddresses' => ['<string>', ...],
'ToAddresses' => ['<string>', ...],
],
...(略)

在自己實際使用的程式碼內加上這行:

'ConfigurationSetName' => 'SetForMarketing',

這樣就 OK 了。

再來就請你自己用修改好的程式碼去寄送幾封測試信件,然後開啟 CloudWatch console。

3. 進入 CloudWatch console 觀看統計圖表

打開 CloudWatch console 後,點擊左側的 Metrics 選單:

圖 7

然後將右邊主畫面往下拉,如果你已經成功寄送測試信件的話,在 All metrics 頁籤中應該會看到 SES 這一格:

圖 8

點進去接著會看到 Service 這一格,這就是剛剛我們在圖 5 裡填的 Dimension Name:

圖 9

按下去之後就會出現各個事件的列表了:

圖 10

一開始如果只成功寄了測試信,應該只會有 Send 跟 Delivery 這兩列;因為我的程式碼已經上了 production 並跑了一段時間,所以會有比較完整的事件列表如上圖。

再來可以稍微玩一下 CloudWatch 的圖表。將全選框框打勾,然後按下 Graghed metrisc 頁籤:

圖 11

預設會以折線圖呈現統計圖表,我們可以按 StatisticsPeroid 來更改統計方式及單位時間:

圖 12

或是想要單純以數字方式呈現也可以,將下拉選單改成 Number 就行了,記得將 Period 更換為你想統計的單位;按上面的 custom 可以選擇欲統計的相對或絕對時間區間。效果類似這樣:

圖 13

有了這些數字,我們就可以給行銷部門計算開信率跟點擊率囉!

實作 SES events — CloudWatch 的整合其實還蠻簡單的,只要設定好一組 Configuration Set 就結束了。

但是一開始有提到,對我來說用 CloudWatch 的缺點是行銷人員不方便自己追蹤,因為我能想到最簡單的方法就只有幫他們開 AWS IAM 帳號讓他們自己登進去 CloudWatch console 看,但我對管理 IAM 這件事有些本能上的抗拒……

還好我們還有其他選擇,參考文件 1 中提到了其他可整合的服務:Kinesis Firehose 及 SNS notification,而其中 Kinesis Firehose 又提供的 AWS Elasticsearch Service 的整合服務。

簡直是太感人了,這樣我只要設定公司的 IP 可以存取 Elasticsearch Service,就可以讓行銷部門人員進入 Elasticsearch Service 附帶的 Kibana 系統自己去撈數據了!

因篇幅關係,SES events — Kinesis Firehose — Kibana 這部分實作記錄我們留到下一篇 part2 吧。

--

--