クレジットカード払いやQRコード決済などで世の中すっかりキャッシュレス化が進んできましたが、キャッシュレス払いはお財布から現金がなくなるわけではないので、ついついお金を使いすぎてしまいます。
そんな悩みから、クレジットカード会社からメール配信されるカード利用通知から今月いくら使っているのかをLINEで通知するようにしました。
GAS(Google Apps Script)の知識が若干必要ですが、コピペだけなら30分程度でしかも無料で出来るのでぜひ試してみてください!
やりたい事
私は楽天カードユーザーなのですが、楽天カードは速報版利用通知というのがカード利用後最短翌日にメールが届きます。
速報版は、カード利用の度にその金額が(割と)タイムリーに通知されるので、これを月単位で累計して今月分の利用金額としてLINEに通知します。
楽天の速報版利用通知はオプションのため通知設定が必要です。また、全ての利用内容が通知される訳ではありません。楽天の速報版利用通知を元にLINEに通知する金額はあくまでも参考金額です。
カード利用お知らせメール
- 以下の場合配信されません。あらかじめご了承ください。
- – 利用承認照会でカードの有効性が確認できない(例えば、ご利用可能額の超過など)
- – ご利用金額が500円未満
- – 公共料金などの継続的なご利用(ただし、一部携帯電話料金等のご利用については配信される場合がございます。)
- – 楽天PINKカードサービス料・保険料
- – いつでもEdyチャージ(自動設定)分
- – 海外でのご利用
Gmailでの準備
Gmailで楽天カードの速報版利用通知を抽出しますが、抽出済みの通知はラベルを付けて分類し2回目以降は処理しないようにします。
ラベル名は任意で構いませんが、ここでは「カード速報抽出済み」とします。
ラベルの作成手順はGoogleのサポートサイトを参照して下さい。
LINEでの準備
LINEで通知を送りたいメンバーでグループを作成します。自分1人だけでもグループを作れます。
グループを作ったら任意のグループ名を付けましょう。ここでは”楽天カード利用速報”とします。
LINEトークンを発行する
次に、GAS(Google Apps Script) でLINEにメッセージを送信するために、LINE NotifyからLINEトークンというものを発行します。
別の記事で発行手順をまとめていますので、そちらを参照ください。
Googleスプレッドシートでの作業
GoogleスプレッドシートはExcelのような表計算シートです。Googleアカウントがあればすぐに使えます。
スプレッドシートの開き方
こちらはスマホではなくパソコンで操作してください。
Googleのホーム画面右上にある点が9つ並んだアイコンをクリックするとGoogleのソリューション一覧が表示されるので、スプレッドシートを選択します。
その後、”空白”から新しいスプレッドシートを作成します。
シートの準備
シートは2つ使います。シート追加およびシート名を変更します。
①の”+”をクリックし、シートを1つ追加し合計2シートにします。
その後②③でそれぞれのシート名をダブルクリックしシート名を修正します。
シート名は任意で構いませんが、ここでは”サマリ”と”楽天カード速報”という名前のシートを追加します。
シートの編集
スプレッドシートでやりたいことはこちらです。楽天カード速報シートはGASのプログラムによって記述するためシート編集は不要です。サマリシートを編集していきます。
サマリシートは以下のように値と数式を入力しましょう。値や式を入力する位置は画像と合わせてください。
A5セルはツールバーの”¥”マークをクリックして表示形式を通貨にしています。
各セルの関数は以下の通りです。
【A2セル】
=year(today())
【B2セル】
=if(MONTH(today())<10,0&MONTH(today()),MONTH(today()))
【C2セル】
=A2&"/"&if(B2<10,0&B2,B2)&"/"&"*"
【A5セル】
=sumif('楽天カード速報'!A:A,C2,'楽天カード速報'!B:B)
- A2:西暦を表示します。
- B2:月を表示します。一桁の場合は頭に0を付け足します。
- C2:使用金額を集計する条件(年月)を速報版利用通知の形式に合わせて表示します。アスタリスク(*)はワイルドカードで、全ての日にちを集計対象としています。
- A5:集計した利用金額を表示します。この金額をLINEで通知します。
GASでソースコードを書く
GASを開きソースコードを書いていきます。
GoogleスプレッドシートからGASを起動します。
GASを開いた画面です。”ファイル”の右にある”+”から新たなスクリプトを作成できます。
スクリプトファイルは4つ作ります。
一つ一つはそれほど量はなく、ただ分けた方が理解しやすいのでファイルを分けています。
3つのモジュールをメインプログラムで呼び出します。
MAIN.gs:メインプログラム
メインとなるプログラムです。受信メールを確認し速報版利用通知メールがあればフラグを立て、LINE通知メッセージ作成と通知処理を実行します。
function MAIN() {
// メール抽出
let flag = MAIL_Extract();
//更新してたらLINE通知
if( flag == 1 ){
// メッセージ作成
let msg = MSG_Create();
// LINE通知
LINE_Notify(msg);
}
}
メインプログラムで呼び出している3つの関数を見ていきましょう。
MAIL_Extract.gs:速報版利用通知抽出
Gmailから楽天カードの速報版利用通知内容をスプレッドシートに抽出するためのプログラムです。
function MAIL_Extract() {
// 更新フラグを初期化
var update_flag = 0;
// 検索条件に該当するスレッド一覧を取得
var threads = GmailApp.search('subject:【速報版】カード利用のお知らせ(本人ご利用分) -label:カード速報抽出済み');
// スレッドを一つずつ取り出す
threads.forEach(function(thread) {
// スレッド内のメール一覧を取得
var messages = thread.getMessages();
// メールを一つずつ取り出す
messages.forEach(function(message) {
// メール本文を取得
var plainBody = message.getPlainBody();
// メール本文を取得
var plainBody = message.getPlainBody();
// 利用年月日を取り出す
var day_extract = plainBody.match(/■利用日:.*/);
var day = day_extract[0].slice(6,16);
// 利用金額を取り出す
var money_extract = plainBody.match(/■利用金額:.*/g);
var money_len = money_extract.length;
// 書き込むシートを取得
var sheet = SpreadsheetApp.getActive().getSheetByName('楽天カード速報');
// 最終行を取得
var lastRow = sheet.getLastRow() + 1;
// セルを取得して利用年月日を転記
sheet.getRange(lastRow, 1).setValue(day);
// 合計利用金額初期値
var money_total = 0;
// セルを取得して配列に格納された利用金額を転記
for(let i = 0; i < money_len; i++){
// 利用金額の数値の文字列を抽出
var money_first = money_extract[i].slice(0, -1);
var money_str = money_first.slice(7);
// 抽出した利用金額(文字列)をカンマを取り除き数値に変換
var money = Number(money_str.replace(",",""));
// セルを取得して利用金額を転記
sheet.getRange(lastRow, 3 + i).setValue(money);
// その日の合計利用金額を計算
money_total = money_total + money;
}
// セルを取得して利用金額を転記
sheet.getRange(lastRow, 2).setValue(money_total);
});
// スレッドに処理済みラベルを付ける
var label = GmailApp.getUserLabelByName('カード速報抽出済み');
thread.addLabel(label);
// 更新フラグを立てる
update_flag = 1;
});
return update_flag;
}
楽天カードの速報版利用通知メールは件名を検索条件として抽出しています。一度抽出したメールはスレッドにラベルを付けることで、利用金額の重複計上を回避しています。
また、更新フラグを立てそれを本関数の返り値とする事で、メインプログラムに利用金額更新の有無情報を渡しています。
MSG_Create.gs:メッセージ作成
LINEに通知するメッセージを作成するためのプログラムです。
以下のフォーマットで、日付と金額をスプレッドシートのサマリシートから取得します。
[楽天カード利用速報]
20**年**月利用分
¥******
function MSG_Create() {
// 読み込むシートを取得
let sheet = SpreadsheetApp.getActive().getSheetByName('サマリ');
// 利用年取得
let range_year = sheet.getRange('A2');
let msg_year = range_year.getValue();
// 利用月取得
let range_month = sheet.getRange('B2');
let msg_month = range_month.getValue();
// 合計利用金額取得
let range_money = sheet.getRange('A5');
let msg_money = range_money.getValue().toLocaleString();
let msg_create = '\n' + msg_year + '年' + msg_month + '月利用分' + '\n' + '¥' + msg_money;
return msg_create
}
返り値を作成したメッセージにしてメインプログラムに渡します。
LINE_Notify.gs:メッセージ送信
作成したメッセージをLINEトークンを使って実際にLINEに通知するためのプログラムです。
3行目は自分で発行したLINEトークンに書き換えましょう。ダブルクォーテーション(“)の中を書き換えます。
function LINE_Notify(msg) {
// LINEトークン
let LINE_NOTIFY_TOKEN = "***発行したLINEトークン***";
let response = UrlFetchApp.fetch("https://notify-api.line.me/api/notify", {
"method": "post",
"headers": {
"Authorization": "Bearer " + LINE_NOTIFY_TOKEN
},
"payload": {
"message": msg
}
});
}
引数として受け取ったメッセージをLINEで通知します。メインプログラムで、MSG_Createの返り値をLINE_Notifyの引数として渡しています。
参考:logの取り方
GASのlogは以下のコマンドで取得できます。コードをカスタマイズしたいときなど、変数の中身をチェックしながら動作を確認しましょう。
Logger.log(変数);
GASのトリガー設定
メインプログラムを定期的に実行することで、楽天カードの速報版利用通知メールの受信を自動的にチェックしLINEに通知してくれます。
どれくらいの頻度でメインプログラムを実行するかのトリガー設定を行いましょう。
トリガー設定画面は、以下①②の手順で開きます。
以下のように各項目を設定し保存しましょう。
実行する時間間隔を変更したい場合は”時間ベースのトリガータイプを選択”と”時間の間隔を選択”を変更しましょう。
さいごに
LINE Notifyを使いこなせば、自分の知りたい情報を通知してくれるのでとても便利です。
皆さんもぜひ試してみてください!
コメント