1
Help us understand the problem. What are the problem?

More than 1 year has 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のスクリプトを指定した時間に自動で実行する方法

以上です!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?