SendGridのメール送信イベントをLINE Notifyで通知する ~Microsoft Flowによるノンプログラミング連携~

菊田(@kikutaro_)です。先月9/29に開催された「LINE DEVELOPER DAY 2016」で新しく「LINE Notify」が発表されました。さっそく触ってみたのですが、LINE Notifyを利用することで、外部のWebサービスから簡単にLINEへ通知できて、面白いサービスだと感じました。

LINE Notify
今回のブログでは、このLINE Notifyを利用して、SendGridのメール送信状況をLINEへ通知する方法について紹介します。

SendGridには、メールを送信する際に発生するイベントを取得する「Event Webhook」機能があります。Event Webhookを利用するには、SendGridから送信されるPOSTデータを受け取るWebサーバが必要です。今回はWebサーバを用意する代わりに、Microsoft Flowを利用しました。Microsoft Flowは、様々なアプリケーションを組合せて、処理を自動化することができるサービスです。プログラミングレスに処理フローを定義できます。現在Microsoft Flowはプレビュー版ですが、無料で利用することができます。

Microsoft Flow
Microsoft Flowでは、HTTPのリクエストを受け取るフローを作成することができます。このフローを利用することで、Event Webhookの中継を行い、LINE Notifyへ連携します。

全体の流れ
なお、上図のMicrosoft Flow部分は、先日、福岡で開催された「SendGrid Night in Fukuoka #1」で株式会社オルターブースの松本様が紹介されていたMicrosoft AzureのLogic Appsを利用しても同じことができると思います。

LINE Notifyの準備

まずはじめに、LINE Notifyを準備します。ここでは、既にLINEを利用している(アカウント情報を持っている)前提とします。ログイン画面からメールアドレスとパスワードを入力してログインします。

LINE Notifyログイン

「トークンを発行する」ボタンでアクセストークンを発行します。

LINE Notifyトークンを発行する次にトークン名を入力します。ここでは「sendgrid_kikutaro」としました。トークルームはLINEグループなども含めて出てきますが、今回は検証用に自分のLINEのみへ送る「1:1でLINE Notifyから通知を受け取る」を選びました。

LINENotifyトークン名とトークルーム選択発行されたトークンは1度しか表示されないので、コピーを忘れないように注意が必要です。

発行したトークンこれでLINE Notifyの準備は完了です。続けてMicrosoft Flowの準備を行います。

Microsoft Flowの準備

Microsoft Flowのアカウント登録後、「一から作成」でフローを定義していきます。

Microsoft Flow
最初のフローとして「Request」を選択します。外部からのHTTPリクエスト(GETやPOSTなど)を受けることができます。

Microsoft FlowでRequestフローを選択
「Request」を選択すると下のような画面となります。この時点ではまだPOST先のURLは決まっていませんが、フローの保存後にURLが発行されます。Request Body JSON Schemeの部分はJSONスキーマを定義する部分ですが、今回は特に整形せず、空欄のまま進めます。

Microsoft FlowのRequestフローを設定

続けて「Request」の下に表示されている「+ New step」をクリックし「Add an action」を選択します。ここでは「HTTP」を選択します。

Microsoft FlowでHTTPフローを選択

LINE Notifyでは、HTTPのPOSTを利用してLINEへ通知することができます。LINE Notifyで呼出し可能なAPIのエンドポイントについては、開発者ドキュメント(LINE Notifyでトークン発行するボタンの下から取得)を参照してください。フローの定義では、Methodは「POST」を選択し、Uriに「https://notify-api.line.me/api/notify」と入力します。Headersには、Content-Typeと、さきほど取得したLINE NotifyのトークンをJSON形式で指定します。Bodyは「message=」と入力して、「Bodyタグ」を選びます。この「Bodyタグ」には、前のフローのBodyが入ります。つまり、SendGridから送信されたデータが入ります。

10
ここまで設定したら、フロー名を入力して、「フローの作成」を押して保存します。

フロー名を設定
保存すると、POST可能なURLが発行されているので、コピーします。

フローの保存

完了ボタンを押して、Microsoft Flowの設定は終了です。

SendGridの設定

さいごにSendGrid側で「Event Webhook」の設定を行います。SendGridにログインし、「Settings」->「Mail Settings」から「Event Nortification」を選択します。HTTP POST URLに先ほどMicrosoft Flowで作成されたURLを貼り付けます。イベントとしては、今回「Processed」「Delivered」「Opened」にチェックを入れましたが、メールが大量に飛ぶような場合は通知が多くなるので少し注意してください。

SendGridでEvent Webhookの設定

SendGrid × Microsoft Flow × LINE Notify

以上ですべての準備が整いました。それではSendGridでメールを送信してみましょう!しばらくすると、以下のような通知がLINEから届きます。トークン名でつけた「sendgrid_kikutaro」というヘッダ付きでSendGridのメール送信情報が通知されます。メールが「delivered」「processed」の状況であることがわかります。

LINE通知その1
続けて、届いたメールを開封すると、今度は「open」の通知がLINEに届きました。通知に表示されているように、SendGridではメールが開かれた環境などもわかります。

LINE通知その2
LINE Notify、非常に手軽で面白いですね。また、今回はMicrosoft Flowを利用することで、ノンプログラミング、かつWebサーバなども使わずにLINE Notifyと連携することができました。

なお、このブログネタは先日、福岡で開催したSendGrid Night in FukuokaでAzure LogicAppsの話を聞いたり、LINE Fukuokaの方が参加して下さったことをきっかけに浮かびました!是非試してみてください。