Amazonの配達完了メールが届いたらSlackにDM送信する
こんにちは、TRUSTDOCKのよもぎたです。
はじめに
私はよくAmazonで買い物をします。最近は置き配がデフォルトになって、受け取りが楽になったのはいいのですが、荷物が届いたタイミングが分かりにくくなりました。配達完了するとメールは届くのですが、平日はプライベートのメールを確認する頻度は高くありません。そこで、配達完了メールが届いたらSlackにDM送信するようにしてみました。
別の言い方をすると、前回の記事でSlackにDMを送れるようになったので、何か作ってみようというわけです。
アプローチ
配達完了メールの送信元メールアドレスは固定、Subject(件名)は定型です。Gmailからそれらと、未読であることを条件にメールを検索して、1件以上ヒットすればSlackにDM送信してメールを既読にします。
これだけです。
条件、制限
アプローチをご覧頂ければわかるとおり、Gmailのフィルタで配達完了メールを自動で既読にしないことが必要です。
スクリプトはGoogle Apps Scriptの時間ベースのトリガーで起動します。メール着信をトリガーにしたDM送信ではありません。
分ベースのタイマーで1分おきと指定すればほぼ即時通知に出来ますが、そこまでの必要性は感じなかったので、私は15分おきのタイマーにしました。
実践
Google Apps Script
スクリプトのサマリ
Class GmailAppのリファレンスを見ると、search
メソッドでWebアプリのGmailと同じ条件でスレッドを検索できます。戻り値はスレッドの配列です。検索して戻り値のスレッド配列のlength
が0より大きければSlackにDM送信することにしました。
メールのクエリ
メール検索の条件は次の3つです。
- 送信元メールアドレスが
order-update@amazon.co.jp
であること - Subject(件名)が
配達完了:ご注文商品の配達が完了しました
であること - 未読であること
この条件でメールを検索するGoogle Apps Scriptコードは次のようになります。
const query_string = 'from:order-update@amazon.co.jp subject:"配達完了:ご注文商品の配達が完了しました" is:unread';
const threads = GmailApp.search(query_string);
SlackでDM送信
threads.length
が0より大きければ、SlackでDM送信します。
if(threads.length > 0){
send_slack_message();
}
send_slack_message()
の中身は、前回の記事をご覧ください。message
をAmazonの配達完了を検知しました
に変更した以外、まるっと使いまわしています。
配達完了メールを既読にする
次の実行時に重複して検索にヒットしないように、メールを既読にします。Class GmailThreadのリファレンスを見ると、markRead
メソッドを使えばよいことが分かります。
threads.forEach((thread) =>
{
thread.markRead();
}
)
テスト
配達完了メールを1件未読に戻してスクリプトを実行します。
SlackでDMが来てメールが既読になればOKです。
トリガー設定
Google Apps Scriptのページの左のメニューのトリガーを選択します。
右下のトリガーを追加
をクリックして、出てきたウィンドウの各メニューを設定します。私は次のようにしました。
しばらくするとスクリプトが実行されて、実行結果が分かるようになります。この時、1件未読に戻しておくのもよいと思います。
さいごに
弊社は在宅勤務が基本で平日は家で仕事をしています。これまでは、Amazonで配達予定があるときは、トイレに立った時などに玄関先を見ていました。でも、これでSlackでDMが来たときに見に行けばよいことになります。どんどん怠惰になって行きますが、**怠惰はプログラマの三大美徳のひとつ**です。
コンピュータをビシバシ使って、どんどん生活を便利にしていきたいと思います!
最後までお読みいただきありがとうございました。
Discussion