n8nでZaimの自動記帳を強力化する話①

前のこの投稿では、あくまで人様の経験を再現したもので、実はあれで1年間運用してきました。だが最近また暇になり、n8nをいじるようになりましたので、これを機にZaimへの自動記帳を強力化してみました。


n8nとは

n8nを一言でいうと、エンジニア目線で使い勝手が最強な、自動化ツールです。

  • 何ができる?: Slack、Google、Notionなど数百のアプリを繋いで、ルーチンワークを自動化します。
  • 最大の強み: 「セルフホスト(自分のサーバーに設置)」すれば、実行回数に関わらず基本無料で使い放題です。
  • 自由度: ノードを線でつなぐ視覚的な操作に加え、必要ならJavaScriptでゴリゴリにカスタマイズも可能です。

と、Geminiがそう答えましたが、前も言ったように私は文系で、とはいってもやはりiftttの代えとしては優秀である。

インストールの方法は割愛します。EasyPanelにテンプレートがあります。


何をしたいか

前回のパクリ(よく言うと、「ひと様の経験を再現しそれを記録」)で下記機能を実現できました。

  • 自動実行: 設定した時間間隔(トリガー)ごとに、楽天ペイから届く通知メールを参照します。
  • 対応メール: 以下の2種類の決済メールに対応しています。
    • 実店舗での支払い
    • オンライン決済
  • 重複チェック: 過去2日間の Zaim 登録情報と照らし合わせ、重複がある場合は追加しません。
  • 決済日の正確性: メールから決済日を取得するため、Zaim には実際に支払った日付で登録されます。
  • 出金元: Zaim 内で手動設定した「楽天ペイ」(名称は任意)のウォレットから出金されます。
  • 店舗名の反映: メールの内容に基づき、以下の名称が登録されます。
    • 実店舗:メールに記載された「店舗名」
    • オンライン:メールに記載された「利用サイト」
  • カテゴリーと内訳: 任意で設定可能です。空欄でも動作しますが、自動分類のために「よく使う分類」を事前に設定しておくことを推奨します。
  • 備考欄: 「システムから登録」と記載されます(この文言はコード内で変更可能です)。

そこで今回、下記仕様にすること目的とします。

  • 自動実行: 設定した時間間隔ではなく、ほぼ楽天ペイのメールが来ると即時記帳します。
  • 対応メール:実店舗とオンラインだけではなく、楽天モバイル、らくらく投資、ネット注文(私の場合それがマックでのオンライン注文)をすべて対応できるようにします。
  • 出金元:楽天ペイ以外、ANA Pay、メルペイなど、決済通知メールさえあれば、すべて自動記帳可能という仕様に。※残念ながらpaypayは今回対象外にせざるを得ない。(が、公式より楽な方法がある)
  • 通知機能:記帳できたらntfyにて通知が来る
  • テスト期間中、失敗時の救済:MarcoDroidで手動記帳ボタンを作って、失敗する場合はスマホでぽちっと記帳。

記帳を自動化するためにこんなことまでするかな。


WorkFlowの設計

ごちゃごちゃになったけど、理屈は簡単で、ざーと言えば下記4ステップがあります。

  • Gmail Trigger(Gメールトリガー)でそれぞれの公式メールをキャッチ
  • 一旦中の内容を整理し、<日時><金額><店舗>だけ記載されるメールとして自分に送信
  • HTTP REQUESTでGASのスクリプトを発動
  • HTTP REQUESTでntfyに通知させる

この設計にした理由

①各社のメールは内容それぞれで、GASで別々で正規表現を必要があります、それもできないことはありませんが、今回複数の会社のメールを解析することになるので、作業量的には正規表現を書けばすぐ結果が見えるn8nで行いたかった。そうすれば今後別の何payを追加するとき、労力を費やさずに簡単に自動記帳の種類を増やせます。

②時間間隔トリガーではなく、GmailTriggerでFlowを始動させたいので、GASにある本来のコードに手を加わって、HTTP REQUESTで動かせるようにしました。

③心配性なので、通知もいります。

できたらこうなる

払って2分後に通知が来ました。一応大成功。WorkFlow上通知に金額を反映させたりすることできますが、一旦これで。

具体的な設定は下記をご参照ください。

コメントは受け付けていません。