IFTTTとSendGridを使って自動通知メールを送ろう
はじめに
会員登録時の認証メールや決済完了通知など、SendGridを使えば様々なメールを自動で送信できます。これまでブログでも、空メール登録システムやSMSを使ったメール送信システムなどの実装方法をご紹介しましたが、今回はIoT機器を使った通知システムを構築します。
Wi-Fiに接続してデータを送信できる温湿度計を使って、室温があらかじめ設定した温度を超えたら自動でメールが送られるようにします。IFTTTとSendGridを組み合わせることでプログラミング不要で簡単に作成できますので、ぜひ試してみてください。
使用するもの
今回使用するのは以下の3つです。
- SwitchBot 温湿度計、ハブミニ
Wi-Fiに接続し、温湿度のデータを送信することができます。
ハブミニはSwitchBot製品や赤外線リモコンを登録し、Wi-Fi接続によりインターネットを介した操作を可能にする製品です。温湿度計単体ではWi-Fi接続ができないため、ハブミニを中継する必要があります。
事前準備としてスマートフォンにSwitchBotアプリをインストールし、各製品の登録を完了させておきましょう。 - SendGrid
メール送信にはSendGridのWeb APIを使います。 - IFTTT
複数のWebサービスを連携させることができます。
SwitchBot用のプラグインが用意されており、SwitchBot製品で取得したデータの値から判断して他のWebサービスを動かすことができます。IFTTTにSendGridのプラグインはありませんが、「Webhooks」というサービス(HTTPリクエストの送受信等ができる機能)を使えばSendGridと連携できます。
まずは上記サービスのアカウント作成を済ませてください。
SwitchBot製品は購入する必要がありますが、IFTTTとSendGridは無料アカウントで問題ありません。
アプリケーションの構成
アプリケーションの構成は下図の通りです。
IFTTTを使ってSwitchBotの温度データを取得し、設定した条件を満たすとSendGridにHTTPリクエストが送られます。SendGridはこのリクエスト内容に従ってメールを送信します。
IFTTTとSwitchBotの連携
まずはIFTTTでSwitchiBotをトリガとするアプレットを作成します。IFTTTにおけるアプレットとは、「○○したら~~する」といった指示のことです。
1. 温湿度計のクラウドサービス連携を有効にする
a. SwitchBotアプリを開き、デバイスの一覧から今回使用する温湿度計を選択します。
b. 右上の歯車マークから設定画面を開きます。
c. 「クラウドサービス」をオンにします。
2. IFTTTでアプレットを作成
IFTTTにログインし、上部にある「Create」ボタンをクリックします。
3. 「If This」を追加
a. 「○○したら~~する」の「○○」にあたる「If This」にSwitchBotを設定します。
b. SwitchBotには様々な製品があります。今回使用するのは温湿度計なので「温度・湿度の変化」を選択します。
初めてIFTTTでSwitchBotを利用する場合は、SwitchBotのアカウントを紐付ける必要があります。「Connect」ボタンが表示されたらクリックし、画面の指示に従ってSwitchBotアカウントにログインしてください。
4. メールを送る条件を設定
続いて通知メールを送る条件を指定します。今回は室温が25℃を超えたら通知されるようにします。
下図を参考に「温度単位を選択」「温度条件」「温度値」「湿度条件」の4項目を設定してください。
必要箇所を入力し「Create Trigger」をクリックすると、「If This」部分に設定が反映されます。
IFTTTとSendGridの連携
次はいよいよメールを送るための設定です。
1. SendGridでAPIキーとメール本文を作成
SendGridのダッシュボードを開き、APIキーとメール本文を用意しましょう。
a. APIキーの作成
SendGridでメールを送るためには、メール送信権限を付与したAPIキーが必要です。作成方法はドキュメントをご覧ください。
作成したAPIキーは1度しか表示されないため、メモしておきましょう。
b. Dynamic Transactional Templateの作成
メール本文となるテンプレートを作成します。今回はDynamic Transactional Templateを利用します。作成方法はドキュメントをご覧ください。
テンプレートの一覧に表示されるテンプレートIDは後で使用します。
2. 「Then That」を追加
次は「○○したら~~する」の「~~」を表す「Then That」の部分を設定します。
前述の通りSendGridのプラグインはありませんが、「Webhooks」を使ってメール送信機能を実現します。
「Make a web request」を選択します。これを使えば任意のエンドポイントにHTTPリクエストを送ることができます。
3. リクエスト内容を入力
設定する項目は以下の通りです。
メール送信APIに関する詳しい説明はこちらのAPIリファレンスページをご確認ください。
設定項目 | 入力/選択内容 |
---|---|
URL | https://api.sendgrid.com/v3/mail/send |
Method | POST |
Content Type | application/json |
Additional Headers | Authorization: Bearer <ダッシュボードで作成したAPIキー> |
Body |
{
“personalizations”: [ { “to”: [{“email”: “<宛先メールアドレス>”}], } ], “from”: {“email”: “<送信元メールアドレス>”}, “template_id”: “<ダッシュボードで作成したテンプレートのID>” } |
全て入力できたら「Create action」をクリックしましょう。
「Then That」が設定されたことを確認し、「Continue」をクリックします。
ここまで設定できたら、アプレットに名前を付けて完成です。「Finish」をクリックしましょう。
設定した温度を超えたら実際にメールが送られてくることを確認しましょう。
条件を満たしているにも関わらずメールが送られない場合は、「Webhooks」の設定内容にミスがあるのかもしれません。こちらのブログなどを参考に、入力した内容でHTTPリクエストが正しく受け付けられるか確かめてみるとよいでしょう。
なお、アプレットの画面にある「Check now」ボタンをクリックすると「Check completed」と表示されますが、「Webhooks」の処理(メール送信)は実行されないので注意してください。
さいごに
「Email」などIFTTTのプラグインを使えばSendGridなしでもメールを送信できますが、今回紹介した方法ならSendGridのダッシュボードで作成したテンプレートを使ってHTMLメールを送ることができます。
例えば、メールの内容をカスタマイズし、次のようなことを試してみてはいかがでしょう?
- メール内にエアコンをオンにするボタンを設置する
- ヒント:SwitchBotのハブミニとIFTTTを使えばエアコンをオンにするURLを作成できます。
- メール内に挿入する文字をIFTTTで設定する
- ヒント:SendGridは件名や本文に文字列の埋め込みができるため、「Webhooks」のBodyで指定した任意の文字列をメールに挿入することができます。
ぜひオリジナルの便利な使い方を見つけてください!