freee APIを使って打刻してみようとしたのだけれど、、、、


freeeのフリー版に登録して、freee APIを使ってみます!
目標は、「trelloで『勤務報告(出勤)』『勤務報告(退勤)』タスクを完了に動かしたときに、freeeに打刻する」です。

最初にネタバレ書いておくと、「できなかった」エントリーになりますので、ご注意ください。

freeeに登録

会計と労務が無料で30日間使えるようです。
https://www.freee.co.jp/

APIの使い方をリサーチ

自分の事業所IDを知る必要があるようです。
APIドキュメントがとても充実しています。
https://developer.freee.co.jp/docs/accounting/reference

スクリプトの書き方をリサーチ

スプレッドシート+GASで公開してくれている記事とサンプルのスプレッドシートがありました。
素晴らしいです。
これを自分の場所にコピーしつつ、実行してプログラムの動きを見ます。

このスプレッドシートのコピーを利用して、認証を取得してくれるメソッド&認証ダイアログを使って認証し、以下のコードでCompanyIDが取得できます。

freee.gs
function getCompanyId(){

  var freeeApp = getService();
  var accessToken = freeeApp.getAccessToken();

  var headers = {"Authorization" : "Bearer " + accessToken };
  var requestUrl = "https://api.freee.co.jp/api/1/companies"
  let params = {
  'method': 'GET',
  "headers":headers
  };


  let result = UrlFetchApp.fetch(requestUrl, params).getContentText();
  Logger.log(result)
}

レスポンスはこんな感じで事業所毎にcompanyIdが返ってきます。

打刻プログラムの作成

この辺りを修正しつつ、下記のように打刻します。
freeeでは打刻が日付を跨ぐのを許していますが、個人的にそんな働き方はなるべくしたくないので跨がない前提での打刻プログラムです。

freee.gs
function sendEntry() {
  var requestUrl = "https://api.freee.co.jp/hr/api/v1/employees/"+freee_user_id+"/time_clocks"

  var freeeApp = getService();
  var accessToken = freeeApp.getAccessToken();
  requestBody = mkPostData(COMPANY_ID, 'clock_in') //‘clock_in’,‘clock_out’
  var headers = {"Authorization" : "Bearer " + accessToken };
  var options = {
    "method":"POST",
    "headers":headers,
    "payload":requestBody,
    muteHttpExceptions: true
  };

  Logger.log(requestUrl)
  var res = UrlFetchApp.fetch( requestUrl , options );
  Logger.log(res)
}

function mkPostData(company_id, type, d_str){

  return {
    "company_id": company_id,
    "type": type,
    "base_date": getTodayStr(),
    "datetime": getNowStr()//打刻時間
  }

}

function getTodayStr(){
  var date = new Date();
  var today_str = Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd')
  Logger.log(today_str)
  return today_str
}

function getNowStr(){
  var date = new Date();
  var today_str = Utilities.formatDate(date, 'Asia/Tokyo', "yyyy-MM-dd'T'HH:mm:ss'Z'")
  Logger.log(today_str)
  return today_str
}

その結果、、、

アクセス権がないとな!

いやな予感はしていた

打刻に行くまでは、入社お手続き画面で色々入力せねばならぬようです。
労務担当の人と、入社する人の一人二役で色々と入力し(基本嘘入力)、勤怠の管理をできる状態まで行けました。
ただ、ベーシックプランにしないと打刻ができない、、、?ような画面が出ていたのです。

結果、、、、

仕様をよくご存じの方は最初からフリープランで打刻ができない結末が最初からお分かりだっかかもしれませんが、、、、
「アクセス権がありません」でした。

ただ、会社の労務の人がどういう仕事をしているのか知ることができで良い経験になったかなと思います。
労務に全然詳しくなくてもわかりやすくてすんなり進みました。
freeeを労務管理に使ってる会社に転職したら続きをやりたいと思います。

そして、中途半端は悔しいので、目標の「trelloで『勤務報告(出勤)』『勤務報告(退勤)』タスクを完了に動かしたときに、freeeに打刻する」は、「irucaくんに打刻する」仕組みとしましたのでこちらも是非お読み頂ければと思います。
(投稿時点では限定公開記事ですが、この記事公開後に公開に変更します)
Trelloのタスクの移動を検知して、irucaのステータスを変更する