PowerAutomateを使ってfreeeの入金明細をkintoneに同期してみた
記事概要
PowerAutomateのクラウドフローを使って、freeeの入金明細をkintoneに同期してみました。
銀行毎に開発をするのは大変なので、一旦freeeに入金記録を集約することで、まとめてkintoneに放り込むことができます。
自社でもこの記事の内容を実現してみたい。という方がおみえでしたら、kintoneスポット開発無料相談フォームから、ぜひお問い合わせください。
手順
- freeeのAPIを使用するための認可コードを取得
- 認可コードを使ってリフレッシュトークンを取得。
- リフレッシュトークンを使って、アクセストークンを取得。同時に、新しいリフレッシュトークンをkintoneに保管。
- アクセストークンを使って、freeeの口座明細一覧の取得APIをたたく。
- 取得した記録をkintoneのアプリにアップサート (Upsert) する。
OAuth 2.0の認証まわりは、PowerAutomateでカスタムコネクタを作る等、色々とスマートな方法もあるようですが、当記事では一歩一歩そのまま組み込んでいきますので、少々冗長になっていると思います。また、試作ということもあり、リフレッシュトークンをkintoneに保管していますので、権限まわりは適切に設定してください。
細かい部分は端折って、大きな流れを記載していきます。認証まわりはあまり詳しくないため、勘違いがあったらすみません。きちんとした手順を知りたい方は、freee API スタートガイドをご参照ください。
1.freeeのAPIを使用するための認可コードを取得
まずは、連携のために必要なアプリをfreee側で作ります。

ここで一旦大事なのが、Client ID、Client Secret、Webアプリ認証用URLの3項目です。きちんと控えておきます。また口座まわりの情報にアクセスできるように権限を付与しておきます。

Webアプリ認証用URLにアクセスすると、「認可コード」が付与されます。

この認可コードは1回だけ使用するコードと解釈してよいと思います。この認可コードを使って、後手順で取得する、「リフレッシュトークン」を今後、使っていくことになります。
2.認可コードを使ってリフレッシュトークンを取得
この作業は一回きりなので、curlコマンドを使って、処理しました。下記項がわかりやすいと思います。
そこで得られたレスポンスの、「refresh_token」と「company_id」を記録しておきます。
3.リフレッシュトークンを使って、アクセストークンを取得。同時に、新しいリフレッシュトークンを取得。
ここからPowerAutomateとkintoneを使っていきます。
まずはPowerAutomate起動のトリガ用に、kintoneで一つアプリを作ります。
取得する入金日の期間を指定したいので、日付指定欄を設置しておきます。

そして画面には出していませんが、リフレッシュトークン格納用の項目もこのアプリに設置しています。
毎回のアクセストークンの取得時に得られる、リフレッシュトークンをこのレコードに書き戻しておくことで、次回のアクセストークン取得時に参照して使おうという考え方です。
クラウドフローはkintoneのアプリレコード追加をトリガに起動。

最後にアクセストークンを取得したときのレコードを探して、そこからリフレッシュトークンの値を取得します。

クエリー文はご自由にとなりますが、イメージとしてはレコード番号降順に並べて、limit 1 で1行だけ取得すれば、それが最終のレコードと判断できると思います。下記は一例。
app=***&query=refresh_token!="" order by $id desc limit 1&fields[0]=refresh_token
取得したリフレッシュトークンを使って、アクセストークンを取得します。
公式手順は下記URLに記載があります。
下図が上記サイトから引用した、取得方法の例です。
curl -i -X POST \
-H "Content-Type:application/x-www-form-urlencoded" \
-d "grant_type=refresh_token" \
-d "client_id=あなたのClient ID" \
-d "client_secret=あなたのClient Secret" \
-d "refresh_token=取得したrefresh_token" \
"https://accounts.secure.freee.co.jp/public_api/token"
PowerAutomateではHTTPコネクタを使います。
grant_typeにrefresh_tokenを、refresh_tokenにはkintoneから取得したリフレッシュトークンを指定します。

得られたレスポンスの中に、アクセストークンとリフレッシュトークンが含まれますので、まず、リフレッシュトークンをkintoneに書き戻します。これがないと、次回困るためです。

これで、アクセストークンの取得と、リフレッシュトークンの保管ができました。
4. アクセストークンを使って、freeeの口座明細一覧の取得APIをたたく。
freee APIから口座明細のAPIを使用します。APIリファレンスはこちら。
使用するのは、「/api/1/wallet_txns 口座明細一覧の取得」です。
下図はAPIリファレンスからの引用です。赤枠でくくった部分を指定します。

下記を指定して、HTTPコネクタでAPIをたたきます。
- company_id:手順2で取得したcompany_id
- start_date:kintoneアプリの日付範囲From
- end_date:kintoneアプリの日付範囲To
- entry_side:income (入金のみ取得したいため)
- limit:100 (最大100件取得)

5. 取得した記録をkintoneのアプリにアップサート (Upsert) する。
あとは取得した入金記録をkintoneの別アプリに投入します。
得られるレスポンスから、id、date、amount、description、walletable_idをkintoneに投入します。idがユニークキーになっていますので、Upsertで処理可能です。
投入成功すると下記の様に、kintoneで入金記録確認が可能になります。

PowerAutomateのクラウドフローを使って、freeeの入金明細をkintoneに同期することができました。これを定期的に自動起動することも可能ですね。
しばらく実運用でまわしてみて、挙動を確認していきたいと思います。
フォームからのお問い合わせはこちら kintoneスポット開発無料相談フォーム
Discussion