非エンジニアですが、バックオフィスの効率化を、生成AIの助けと先人の皆様のお知恵を借りながらやっていきます。僭越ですが、こちらに記録として残していくことにします。
実現したいこと
- HRMOS勤怠の月次レポートの一覧から対象月の全社員分の勤務データを取得し長時間労働のアラート対象者リストを作成する
- アラート対象者リストをもとに対象社員へアラートメールや産業医面談の勧奨/依頼メールを送信する
- アラート対象者リストをもとに対象社員の上席社員たちにレポートメールを送信する
「HRMOS勤怠 by IEYASU」のAPI連携で、月次レポート一覧を取得し、Goolgeスプレッドシートに転記、さらに特定の条件を超過した長時間労働者について別のGoogleスプレッドシートにアラート対象者リストとして記載していく。
また、このアラート対象者リストから一定の条件の社員に対してアラートメールや産業医面談の勧奨や面談設定を要請するメールを送信する。
さらに上司に対してもレポートメールを送信する。
方針
私はコードを書けませんので、実際の作業はネット上にある先人のみなさまの記事と生成AIを頼りにして実装していきます。
- 生成AIは有料契約しているChatGPT 4o を使用します(データ提供はoff)
- 作業手順についてもネット上の記事と生成AIを活用していきます
- 当社はGoogle Workspace を使用していますのでデータは基本的にGoogle Drive や Google スプレッドシートで管理します
- GASのソースコードはいったん直接記述することとし、いずれはGithubで管理することを検討します
この記事のゴール:まずはAPI連携できるようにする
ではさっそくAPI連携ができるように準備していきましょう。
スプレッドシートを新規作成して、拡張機能のApps Scriptからエディタを開きます。ここに記述するコードをchatGPTに書いてもらいます。
最初のプロンプトはこんな感じにしてみます。
HRMOS勤怠からAPI連携をしてGoogleスプレッドシートに社員1人1レコードのデータとして転記します。
HRMOS勤怠のAPI仕様書は下記です
https://ieyasu.co/docs/api.html
APIのURLに使用するcompany_nameはGASのプロパティとして保存します。
プロパティ名はHRMOS_COMPANY_URL とします。
API KEYのシークレットKEYもGASのプロパティとして保存します。
プロパティ名はHRMOS_API_KEY とします。
まずはプロパティとして保存するコードを生成してください。
API連携ができるようになったら「月次レポートの一覧」で社員の勤怠データを取得し、スプレッドシートに転記していきます。まずはプロパティへ保存後にAPI連携のコード作成を指示します。
結果として、こんなコードを指示されました。
function saveProperties() {
// スクリプトプロパティを取得
var scriptProperties = PropertiesService.getScriptProperties();
// 保存するプロパティを設定
var companyName = 'your_company_name'; // ここにあなたのcompany_nameを入力
var apiKey = 'your_api_key'; // ここにあなたのAPI_KEYを入力
// プロパティを保存
scriptProperties.setProperty('HRMOS_COMPANY_URL ', companyName);
scriptProperties.setProperty('HRMOS_API_KEY', apiKey);
Logger.log('Properties saved successfully.');
}
プロパティ登録は最初にしか使用しないので、新たに regist.gs というスクリプトを作成して、このコードをペーストします。そしてcompany_nameとyour_api_keyを適切に置き換えてから実行してみます。
結果、実行ログにProperties saved successfully.
と表示されましたので、うまくプロパティに登録できたようです。
Apps Scriptの左側メニューの歯車マークの「プロジェクトの設定」に「スクリプト プロパティ」があり、実際にプロパティとして保存されているか確認できます。
Tokenの発行
次にAPI仕様書のAuthenticationを実行して、API連携に必要なTokenを取得します。
Basic認証云々という記述があり、なんか手順がありそうです。よくわからんのでググってみますと、GASとHARMOSとSlackではじめる勤怠Bot1という記事をみつけました。こちらのコードを参考にさせていただき、まずはコード.gsのほうにgetToken関数を記述します。
function getToken() {
const ps = PropertiesService.getScriptProperties()
const apiKey = ps.getProperty('HRMOS_API_KEY')
const endPoint = 'https://ieyasu.co/api/' + ps.getProperty('HRMOS_COMPANY_URL') + '/v1/authentication/token'
const headerInfo = token => ({
'Content-Type': 'application/json',
'Authorization': 'Basic ' + token
})
const options = {
method: 'get',
headers: headerInfo(apiKey),
"muteHttpExceptions": true,
}
const response = UrlFetchApp.fetch(endPoint, options)
const json = JSON.parse(response.getContentText())
return json.token
}
変数tokenにトークンが入るか確認するために、最後のJSONをパースして返すところ(16行目のreturn のところ)にブレークポイントを設定しデバッグ実行させます。するとHRMOS勤怠へのログイン認証が要求されましたので(初回のみ)、認証します。
デバッガで変数tokenの内容を確認していくと、ばっちりトークンが入っていました。トークンは24時間しか期限がないため、このgetToken関数はそれぞれの処理の冒頭で実行し、取得したトークンを使ってAPI連携をさせていくことになります。
ということで初回はここまで。
参考文献
-
GASとHARMOSとSlackではじめる勤怠Bot mikan Developers' Blog ↩