GAS×freeeAPI連携|自動でファイルをアップロードさせるには?

こんにちは。ITライターのもり(@moripro3)です!

「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。

過去の記事で、GAS × freeeAPI の連携で「データ取得」と「データ作成」の基本的な手順を紹介してきました。

関連記事

こんにちは。ITライターのもり(@moripro3)です! 「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。 前回の記事では、GASでfreeeAPIを使うための作業手順を紹介しました[…]

関連記事

こんにちは。ITライターのもり(@moripro3)です! 「GAS」と「クラウド会計ソフトfreeeのAPI」を使った自動化の記事をお届けしています。 前回の記事では、freeeAPIから取得したデータをスプレッドシートに出力[…]

 

この記事から、freeeAPIを使用した実務的なネタを紹介していきます。テーマは「Googleドライブのファイルを、freee のファイルボックスに自動でアップロードする」です。

freeeのファイルボックスにレシート等の証憑ファイルをアップロードする方法として、スキャナ取り込みやDropbox連携がありますが、IT 環境が整備されていない会社では、経理担当者が毎日手作業でアップロードしているのではないでしょうか。

freeeAPI を使って、freeeのファイルボックスにファイルをアップロードするスクリプトを作成し、GASのトリガーで自動実行することで、例えばこのような使い方ができます。

会計freeeのアカウントを保有しない一般社員にGoogle ドライブの特定フォルダを共有して、請求書や領収書などのファイルを格納してもらう。翌朝の始業時刻までに、自動でfreeeのファイルボックスにアップロードされている仕組みを作りたい。

それではいってみましょう!

freeeAPIリクエストの情報を確認する

APIリクエストに必要な情報を、freeeAPI公式リファレンスで確認していきましょう。

ファイルボックス証憑ファイルアップロードの「メソッド」と「リクエスト URL」

ファイルのアップロードは、以下4種類のリクエストの「データ作成(登録)」にあたるので、通常、POST メソッドを使用します。

処理 メソッド
データの取得 GET
データの作成 POST
データの更新 PUT
データの削除 DELETE

 

これは、リファレンスでも確認できます。

 

リクエスト URLは以下のとおりです。

  • ① APIエンドポイント(固定値) = https://api.freee.co.jp/
  • ②個別URL = /api/1/receipts
  • ③パラメータ = なし

①+②+③を結合した文字列が、目的となるリクエストURLです。

https://api.freee.co.jp/api/1/receipts

(参考)リクエストヘッダーのContent-Type

この記事のテーマは「ファイルのアップロード」であり、freeeAPIを使用した一般的なデータ作成と異なる点があります。それは、リクエストヘッダーに付与するContent-Typeです。Content-Type とは、リクエスト先(ここでは freeeAPI)に「送信データの形式」を伝える情報です。
※単一の JSON データのみを送信する場合は、Content-Typeに “application/json” を指定します(例:GAS×freeeAPIでスプレッドシートのデータをfreeeに登録する方法

contentType: "application/json"

ファイルアップロードの処理で「送信するデータ」とは、PDFファイルやJPEG画像などです。単一のJSONデータではなく、複数の異なる種類のデータを扱うので、Content-Typeは指定不要です。

Googleドライブのファイルをfreeeのファイルボックスにアップロードする

それでは、Googleドライブにファイルを準備して、それらをアップロードするスクリプトを紹介します。

この記事で紹介するスクリプトは『GASでfreeeAPIを使うための作業手順を分かりやすく解説』の作業が完了していることが前提です。また、freeeAPI認証用のスクリプトを、今回紹介するスクリプトと同じプロジェクト内に記述しておく必要があります。

Googleドライブにファイルを格納する

Googleドライブに専用のフォルダを作り、アップロードするファイルをまとめて格納します。スクリプト内に「フォルダID」を指定するのでメモしておきましょう。

 

アップロードに成功したファイルを識別できるよう、別フォルダに移動する処理も作ります。「confirmed」というフォルダも作成して、フォルダIDをメモしておきましょう。

ドライブのファイルをアップロードするスクリプト

以下がスクリプトです。下記の3点を設定して uploadFiles 関数を実行します。

  • アップロード対象のファイルを格納するフォルダID
  • アップロード成功後にファイルを移動するフォルダID(confirmed)
  • freeeの事業所ID
function uploadFiles() {

  const folder_id_source = "ファイル格納場所のフォルダIDを設定";
  const folder_id_confirmed = "ファイル移動先のフォルダIDを設定";
  const files = DriveApp.getFolderById(folder_id_source).getFiles();

  while (files.hasNext()) {

    const file = files.next();
    const blob = DriveApp.getFileById(file.getId()).getBlob();

    const response = postFilebox_(blob);
    Logger.log(response);

    const obj = JSON.parse(response);

    //アップロード成功したらフォルダ移動
    if (obj.receipt.status === "confirmed") {
      DriveApp.getFolderById(folder_id_confirmed).addFile(file);
      DriveApp.getFolderById(folder_id_source).removeFile(file);
    }

  }

}

/**
 * @params {Object} blob アップロードするファイル
 * @return {Object} response freeeAPI送信結果
 */
function postFilebox_(blob) {

  const access_token = getService().getAccessToken();
  const company_id = "事業所IDを設定"; //事業所ID
  const url = "https://api.freee.co.jp/api/1/receipts";

  const body = {
    company_id: company_id,
    receipt: blob
  };

  const params = {
    method: "POST",
    headers: { "Authorization": "Bearer " + access_token },
    payload: body,
    muteHttpExceptions: true //エラー発生時にログ出力
  };

  const response = UrlFetchApp.fetch(url, params);

  return response;

}

実行結果

スクリプトの実行ログを確認してみましょう。freeeAPIからのレスポンスはJSONデータです。”receipt” プロパティの中にある “status” プロパティの値が “confirmed” になっていれば成功です。

 

アップロード成功したファイルが、confirmedフォルダに移動されました。

 

つづいて、freeeのファイルボックスをみてみましょう。ファイルがアップロードされていることを確認できます。

 

他の手段でファイルボックスにアップロードした場合と同様に、画像内の文字からの取引自動入力(OCR)も有効です。

トリガーで自動実行しよう

GASの強みはなんといっても「トリガーによる定期自動実行」です。業務要件にあわせて、トリガーを設定しておくとよいでしょう。

  • n時間おきに実行する
  • 毎日n時 ~ n時に実行する など

 

以上、GAS × freeeAPIで証憑ファイルを自動アップロードする方法を紹介しました。

この記事を読んでfreeeAPIに興味を持ってくれた方は、ぜひこちらの記事もあわせてご覧ください!

請求書の受け取りはsweeepで自動化

【AI請求書処理】従来の請求書OCRでは対応できない非定型帳票や

自動会計仕訳も、sweeepなら対応可能!最短で即日導入、

面倒な設定不要。手軽に導入して請求業務を効率化。