4
1

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 3 years have passed since last update.

マネーフォワードからの出金お知らせをラインに通知する

Posted at

やったこと

Google APP Scriptでマネーフォワードからのメールを定期取得
LINE Notify APIを使用してメール本文をLINEに通知
image.png

なぜやるのか

  • 不正利用やサービスの解約し忘れで意図せず引き落とされてないか怖い
  • できるだけリアルタイムに通知を受け取りたい
  • 複数のクレジットカードを使用しているので、それぞれの明細を把握するのは手間
  • Gmail見る頻度低いので日常的に目に触れるLINEに通知したい

なぜGoogle APP Scriptか

  • マネーフォワードにLINE通知機能はない
  • IFTTTはLINE通知できるが、Gmailをアクション元に設定できない
  • ZapierはGmailをアクション元に設定できるが、LINE通知できない

--> 仕方ないのでGoogle APP Scriptで書く

本題

Gmail側の設定で送信元メールアドレスがマネーフォワードのメールにラベルを付ける

image.png
ラベルを付けるとlabel:"ラベル名"で検索できるようになります。

LINE通知に必要なトークンを取得する

LINEに通知はLINE Notify APIを使用します。

以下の記事が分かりやすく説明されていました。
[超簡単]LINE notify を使ってみる

Google APP Scriptで直近30分間に受信したラベルのついたメールを取得してLINEに通知

以下のコードを書く。

var lineToken = "ラインのトークン"
var interval = 30
var label = "ラベル名(今回はmoney_forward)"

function fetchMoneyForwardMail() {
  //取得間隔
  var now = Math.floor(new Date().getTime() / 1000);
  var time = now - (60 * interval);
  var searchCond = '(label:' + label + ' after:' + time + ')';

  var thread = GmailApp.search(searchCond);
  var messages = GmailApp.getMessagesForThreads(thread);
  var formattedMsgs = [];
  for (var i = 0; i < messages.length; i++) {
    formattedMsgs[i] = "\n【date】: " + messages[i].slice(-1)[0].getDate() +
      "\n【Subject】: " + messages[i].slice(-1)[0].getSubject() +
      "\n【Body】: \n" + messages[i].slice(-1)[0].getPlainBody().slice(0, 200);
    return formattedMsgs;
  }
}

function send_line(message) {
  var payload = {
    'message': message
  };
  var options = {
    "method": "post",
    "payload": payload,
    "headers": {
      "Authorization": "Bearer " + lineToken
    }
  };
  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

function main() {
  newMessages = fetchMoneyForwardMail()
  if (newMessages && newMessages.length > 0 && newMessages.length < 50) {
    for (var i = newMessages.length - 1; i >= 0; i--) {
      Logger.log(newMessages[i])
      send_line(newMessages[i])
    }
  }
}

Google APP Scriptの時間ベースイベントで上記処理を30分に一度実行する

以下のように設定します。
GASのスクリプトを指定した時間に自動で実行する方法

以上です!

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?