番外編、メッセージの追跡情報の取得!
Silicon Valley Super Ware
2020年7月28日
番外編、メッセージの追跡情報の取得!
7月の残りは、今月実装した、SendGridを利用したサービスの番外編として、 送ったメッセージの追跡(トラッキング)について触れています。ビジネスの場合、あなたが配信したメッセージが読まれたかどうかは、気になる物です。 SendGridのサービスでは、送信したメッセ時の配信完了、開封、リンクのクリックなどを 追跡してデータを集める事も可能です。
こうしたデータを解析してマーケティング戦略を作れば、より効果的にあなたのビジネスを展開できます。
今回は具体的な実装について解説します。WebHookの設定
WebHookは、SendGridが検出した、メッセージのイベント情報を希望のサーバー(URL)に 送ってもらうための機能です。結構いろいろなイベントを検出できます。
- 通知の有無
- グループの再登録
- 配信完了
- グループ登録の解除
- スパムレポート(受信者がスパークとしてマークした)
- エラーで返送(サーバーの受取距離)
- 遅延(一時的な配信拒否~サーバの障害など)
- 登録解除
- 送信処理中(SendGridがメッセージを受け付けた)
- 開封
- リンクのクリック
- 配信不能(登録解除、無効な宛先リストの指定などで)
など結構細かく配信したメッセージの状態を追跡する事ができます。
イベントを検出すると、予め指定したリンクにデータを送信してくれます。バックエンドの実装例
バックエンドの実装例です。
this.app.post(API_TRACKING_EVENTS, async (req, res) => {
const events: string = JSON.stringify(req.body);
const items: Array = JSON.parse(events);
for (const item of items) {
await this.sendgrid.addEvent(item);
}
res.end(JSON.stringify{result:true}) });
Expressのルーティングの部分はこれだけです。あとは、「addEvent(item)」を呼び出すだけです。
const events: string = JSON.stringify(req.body);
const items: Array
for (const item of items) {
await this.sendgrid.addEvent(item);
}
res.end(JSON.stringify{result:true}) });
「addEvent(item)」では、送られてきたイベント情報をFirebase Cloud Firestoreのデータベースに 保存します。
addEvent(event) {
return new Promise(async (resolve) => {
await this.firebaseApp.firestore()
.collection(FB_COLLECTION_EVENTS)
.where("event", "==", event.event)
.where("sg_message_id", "==", event.sg_message_id)
.where("timestamp", "==", event.timestamp)
.get()
.then(async (querySnapshot) => {
if (querySnapshot.size === 0) {
await this.firebaseApp
.firestore()
.collection(FB_COLLECTION_EVENTS)
.add(event)
.then(() => { resolve(true);})
.catch((error) => resolve(false));
}
});
});
}
コードをご覧になるとお分かりの方もいらっしゃると思いますが、
return new Promise(async (resolve) => {
await this.firebaseApp.firestore()
.collection(FB_COLLECTION_EVENTS)
.where("event", "==", event.event)
.where("sg_message_id", "==", event.sg_message_id)
.where("timestamp", "==", event.timestamp)
.get()
.then(async (querySnapshot) => {
if (querySnapshot.size === 0) {
await this.firebaseApp
.firestore()
.collection(FB_COLLECTION_EVENTS)
.add(event)
.then(() => { resolve(true);})
.catch((error) => resolve(false));
}
});
});
}
重複したデータが送られてくる事があるので、
「event」「timestamp」「sg_message_id」をチェックして
重複していない場合のみドキュメントを追加するようにしています。
これで送ったメッセージを追跡できます。
どのメッセージか識別するには?
さて、最後になりますが、送ったメッセージとこの追跡データを関連付ける必要があるかと思います。先日のやり方でメッセージを送る場合、送った際にメッセージのIDを取り込んでおく必要があります。
そうする事で、トラッキングイベントの情報と関連付けて誰がどのメッセージを開けたかがわかります。
シリコンバレースーパーウエアでは、単に機能を作るだけではなく、利用者を第一に考えた 使いやすく価値のあるサービス作りの手法を提供しています。 単純に、Webサービスを作るだけではなく、どのように作って、どのようにビジネスにつなげて 行くかが鍵です。また、フリーランスの方だけではなく、就職を考えている方にも 「実践力」を養うことで「即戦力」のエンジニアとしてのスキルを身に着ける事ができます!
興味のある方は今すぐお問合せください!
またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。
コメント
コメントを投稿