BOOTH通販の注文が入ったらLINE通知を受け取る

BOOTH通販を始めてみたのですがあまりメールを見ないため、LINE通知が来るようにしてみました。

前提としてBOOTHからのメールはGmailで受信する必要があります。

仕組みとしては新規注文メールが受信されたらGmail側で自動でboothラベルを付け、Google Apps Scriptにて一定時間ごとに監視し、boothラベルの中に未読のメールがあればLINE通知を送信してメールを既読にします。

続きを読む

Gmailの設定

フィルタ機能を使ってBOOTHから注文完了メールが来たら自動でboothタグが付くように設定します。

受信するアカウントのGmailを開いて先にboothラベルを新規作成しておきます。

右上の設定(⚙️)ボタン→すべての設定を表示→「フィルタとブロック中のアドレス」タブ→「新しいフィルタを作成」で新規フィルタを作成します。

Fromに「*@booth.pm」、含むに「商品が購入されました」を入力して「続行」、「ラベルを付ける」を選択してboothラベルを選択します。

これで新規注文メールが入ったら自動でboothラベルが付くようになります。

LINEの設定

LINE通知を受け取る方法は2種類あります。

LINE Notifyを使用する方法とLINE Messaging APIを使用する方法です。自分は元々Misskeyやブログのデーターベースのバックアップエラーの通知のためbotを作成しているので後者を使用していますが、前者の方が楽かもです。

LINE Notifyを使用する場合

LINE Notifyという公式アカウントから通知を受信する方法です。

LINE側の設定

自分のLINEアカウントから先にLINEアカウントでグループを作成しておきます。名前はBOOTHなど適当に。

LINE Notify公式サイトにアクセスし、右上のログインからログインします。QRコードログインが楽です。

マイページにアクセスし、「アクセストークンの発行(開発者向け)」から「トークンを発行する」を押してトークンを発行します。トークン名は任意です。グループは先ほど作成したグループを指定します。

Google Apps Scriptの設定

Gmailと同じアカウントでGoogle Driveにアクセスします。左上の+新規ボタンからその他→Google Apps Scriptを選択します。コードを書く画面に最初から入力してあるコードはすべて消して下記を貼り付けます。

ACCESS_TOKENの“内の部分を先ほどLINEで取得したトークンに置き換えて下さい。

function sendLineNotification() {
  var ACCESS_TOKEN = 'ここに取得したトークン';
  
  // 'booth' ラベルがついた未読メールを検索
  var threads = GmailApp.search('label:booth is:unread');
  if (threads.length > 0) {
    // 未読メールがあればLINEに通知
    var message = '✅BOOTHに注文が入りました';
    
    // LINE Notifyで通知
    var options = {
      'method' : 'post',
      'payload' : 'message=' + message,
      'headers' : {'Authorization' : 'Bearer ' + ACCESS_TOKEN},
      'muteHttpExceptions': true
    };

    UrlFetchApp.fetch('https://notify-api.line.me/api/notify', options);
    
    // すべての未読メールを既読に
    for (var i = 0; i < threads.length; i++) {
      threads[i].markRead();
    }
  }
}

次に左側のトリガー(⏱)ボタンを押して右下の「トリガーを追加」、「実行する関数を選択」で「sendLineNotification」を選び、「時間主導型」「時間ベースのタイマー」にして任意の時間間隔を設定します。あまり頻繁に受信する必要がなければ数時間おきでOKだと思います。LINEもGASも無料だと上限があるので4時間程度~半日とかでもいいかも。

保存ボタンを押すとポップアップが出ると思うので「Choose an account」で自分のアカウントを選択、「Advanced(詳細)」→「Go to …(unsafe)」を押し、

下にスクロールして「Allow(承認)」を押します。GASは色々出来ちゃうのでセキュリティの確認ですね。

これで設定完了です。

あとは設定した時間間隔でスクリプトが実行され、boothラベルのついた未読メールがあれば通知してくれます。

適当な未読メールににboothラベルを付けて、Google Apps Scriptのコード画面上の「実行」を押してテストしてみると良いです。

LINE Messaging APIの場合

自分用のbotとしてアイコンなども好きにしたい場合こちらが便利です。自分はこちらを使用しています。

LINE Messaging APIから登録します。詳しいことは省きますがチャネルアクセストークンを発行して、ユーザーIDはメモしておきます。

Google Apps Scriptの設定

コード以外はLINE Notifyと同様です。

function sendLineNotification() {
  var CHANNEL_ACCESS_TOKEN = 'チャネルアクセストークン';
  var USER_ID = 'ユーザーID';

  // 'booth' ラベルがついた未読メールを検索
  var threads = GmailApp.search('label:booth is:unread');
  if (threads.length > 0) {
    // 未読メールがあればLINEに通知
    var message = '✅BOOTHに注文が入りました';

    // LINE Messaging API
    var postData = {
      "to": USER_ID,
      "messages": [
        {
          "type": "text",
          "text": message
        }
      ]
    };

    var options = {
      "method": "post",
      "contentType": "application/json",
      "headers": {
        "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN
      },
      "payload": JSON.stringify(postData),
      "muteHttpExceptions": true
    };

    var response = UrlFetchApp.fetch("https://api.line.me/v2/bot/message/push", options);
    console.log(response.getContentText());

    // すべての未読メールを既読に
    for (var i = 0; i < threads.length; i++) {
      threads[i].markRead();
    }
  }
}

おわり

注文が入ると上記のような通知が来ます。やったね。

BOOTH,LINE