0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GASでGmailの新着をチェックし、指定の件名のメールが来ていたらSlackに通知する簡単なプログラムを書いた

Last updated at Posted at 2023-07-09

はじめに

掲題の小さなプログラムを書いてみました。
Amazonで置き配指定で商品を注文した際、ヤマトのセールスドライバーが荷物を届けてくれると、登録したメールアドレスにヤマトから配達完了メールが届くので、これを検知してスマホに通知->荷物を取りに行く。これを実現したかった、というのが今回のプログラム作成の動機です。

使用技術

  • Google App Script (GAS)
  • Slack Incoming Webhook

作成したプログラム

作成したのは、下記1ファイルだけの小さなプログラムです。

function myFunction() {
    const threads = GmailApp.search('{subject:(お荷物お届け完了のお知らせ) subject:(配達完了:ご注文商品の配達が完了しました。)}');
    let unreadMailExists = false;
    // 未読メッセージがあるかチェック
    for (thread of threads) {
        if (thread.isUnread()) {
            unreadMailExists = true;
            // 既読に更新する
            GmailApp.markThreadRead(thread);
        }
    }
    if (unreadMailExists) {
        // Slackで配達完了したことを通知
        sendSlack("荷物届いたよ!");
    }
}

function sendSlack(slackText) {
    const userProperties = PropertiesService.getScriptProperties();
    const webhookUrl = userProperties.getProperty('webhook_url');

    const jsonData =
    {
        "text": slackText,
        "link_names": 1,
        "username": "荷物配達完了"
    };

    const payload = JSON.stringify(jsonData);

    const options =
    {
        "method": "post",
        "contentType": "application/json",
        "payload": payload
    };

    // リクエスト
    UrlFetchApp.fetch(webhookUrl, options);
}

簡単に解説

  • ヤマトの配達が完了すると、「お荷物お届け完了のお知らせ」という件名のメールが届くので、この件名で未読のメールがあれば通知対象とする。(既読なら荷物が届いたことに気づいているので、未読を対象とする)
    ※(追記)ヤマト以外(日本郵便など)の場合は、Amazonから「配達完了:ご注文商品の配達が完了しました。」の件名のメールが届くことがわかり、件名の条件は複数件にしています。
  • 通知対象のメールは既読に更新する。(既読にしておかないと、次に動いたときにまた通知されてしまうため)
  • プログラム以外に、SlackとGASで下記の設定を行っています
  • Slackの設定
    • 任意のワークスペースを作成する
    • Slackのアプリケーションページから incoming-webhooksを追加・設定する。
    • こちら 参考
  • GASの設定
    • 任意のスタンドアロンプロジェクトを作成
    • GASの左メニュー上から3つ目の「トリガー」で時間主導型・10分単位のトリガーを設定
      スクリーンショット 2023-07-09 201703.png
    • GASの左メニュー上から5つ目の「プロジェクトの設定」->「スクリプト プロパティ」で webhook_urlのキー目でwebhook url を設定。(こうすることで、userProperties.getProperty('webhook_url')で設定値を読み込める)
  • SlackやGASの設定や通知まわりのプログラムは、こちら 参考。

動作確認

荷物の配達が完了していると、下記のメッセージがSlackに通知されます。
スクリーンショット 2023-07-09 140223.png

リアルタイムではないですが・・下記の流れで荷物の配達完了がわかるようになりました。

  1. ヤマトのセールスドライバーが配達完了すると、Gmailに配達完了の旨のメールが届く
  2. 10分間隔のトリガーで今回作成したGASプログラムが起動
  3. Gmailに未読の配達完了メールがあったらSlackに通知
  4. スマホのSlackアプリでプッシュ通知をONにしているので、メッセージが通知されると、プッシュ通知され、スマートウォッチが鳴る
  5. 荷物が届いたことに気づき、玄関に荷物を取りに行く

おわりに

簡単なプログラムですが、これを作ったことで、荷物まだ来てないかなーって何度もメールチェックする手間を減らせたのが良かったです。
あとは、Gmailに新着メール届いたらGAS起動するようにしてリアルタイム検知できればカッコイイけど、そこまで厳密なのは求めていない+GASの実行数が多くなりそう・・なので、10分間隔トリガーに落ち着きました。
また何かちょっとしたプログラムをGASで作ってみたいなと思いました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?