LINEで有給申請してもらう
あなたの会社の有給申請システムはどんなものですか?
有給休暇申請書類を記入して提出すると承認印鑑を貰えたり、専用の勤怠システムを使ったりしていると思います。
しかし私の小さな会社では有給休暇簿に日付や時間を記入して、残り時間を記載しております。
至って簡単でアナログなシステム ⋯。
そういった管理や計算はエクセルで管理したいですよね。でもいちいちエクセルに転写するのは面倒・・・。
じゃあ、こんなシステムにしてしまおう!
ということで、今回はMakeの練習もかねて、『LINEで有給休暇を申請すると、
スプレッドシートへ日付と有給休暇の残時間を記載して、
LINEで登録した旨を返信する』というLINEbotを作ってみました。
実際の様子👇
よほど変な有給休暇申請が届かない限りは、想定通りに動作しました。
従業員からのLINEメッセージに必要なものは「日にち」と「有給休暇を取得したい開始時刻と終了時刻」です。
以下のようなシナリオを作成します。
- LINEで日時が届く
- ChatGPTがスプレッドシート用にメッセージを整形する
- Googleスプレッドシートに記入
- ChatGPTが返信用メッセージを作成
- LINEで登録した旨の返信
この操作をマスターすると、色んなことに応用が利くので、ぜひ作ってみて下さいね。
LINEで有給申請botのシナリオ作成
必要なAPIなどを用意
今回Makeで使うモジュールに必要なAPIやアカウントは下記となります。
【必要なもの】
・Makeのアカウント(シナリオ作成)
・LINEdevelopersのAPI(LINEbotの作成)
・ChatGPT3.5のAPI(メッセージの整形)
・Googleスプレッドシート(有給休暇時間の管理)
Make(旧:Integromat)はノーコードで各種サービスを連携できるツールです。
プログラミング初心者でも簡単操作でおすすめです!👉無料で新規登録してみる!
作成するシナリオの全体像
まずは完成図です。
もう少し削れそうですが、そこは改善していくとして、こんなシナリオとなります。
事前準備:LINEとIDとGoogleスプレッドシートを用意する
まずはLINEdevelopersで有給申請するためのbotを作成してください。
LINEdevelopersでのChatbotの作り方は下記の記事を参考にして下さいね。
Googleスプレッドシートは下記のように準備してください。
「user管理」という名前のSheetと「有給休暇申請」という名前のSheetです。
(ファイル名は「有給休暇」としました。任意でどうぞ)
1行目は項目名を「ID」「従業員」「残時間」「有給時間」「消化時間」
2行目には以下のように入力する。
「ID」には従業員のLINE IDを入力します
(従業員のLINE IDはLINEbotにメッセージを投げてもらって確認ください)
従業員名は「LINE ID」に対応する従業員の名前を入力します。
「残時間」には「=D2-E2」と数式を入れてください。
「有給時間」にはその従業員の有給で使える時間を入力ください(例では40時間となっています)
消化時間は「=SUMIF(‘有給休暇申請’!A:A,A2,’有給休暇申請’!G:G)」と数式を入れてください。
ID | 従業員名 | 残時間 | 有給時間 | 消化時間 |
LINE ID入力 | 名前入力 | =D2-E2 | 40 | =SUMIF(‘有給休暇申請’!A:A,A2,’有給休暇申請’!G:G) |
C2からE2までは表示形式を「経過時間」にしておきます。
(C列~E列を選択して「表示形式」👉「数字」👉「経過時間」)
入力が終わったら、次に「有給休暇申請」Sheetを作成します。
それぞれスクショのようにA1の「ID」から順番にI1の「消化時間」まで項目を入力してください。
Makeのシナリオにモジュールを設定する
下記の完成図を目指して、10個のモジュールを作成していきましょう。
LINEモジュール
完成図を参考に、最初はLINEモジュール(WatchEvent)を作成します。
新たに作ったLINEbotと連携してください。
LINEモジュールのWatchEventの連携の仕方はこちらの記事を参考ください。
Routerモジュール
2つ目にRouterモジュールが来ていますが、これは『届いたメッセージに有給休暇という言葉がなかったら、違う処理をする』ために配置しているので、今は無くても良いです。拡張のため置いてあるだけです。
Google Sheets(Search Rows)モジュール
3つめは「Google Sheets(Search Rows)」モジュールです。
これはGoogleスプレッドシートの情報を持ってきてくれます。
最終行を取得するための設定が必要なのでこのモジュールで行います。
スプレッドシートに保存してあるファイル名「有給休暇」の「有給休暇申請」シートにある
「A」行に「Exist(値が入っている)」である行数を数えてもらいます。
Google Sheets(Search Rows)は条件に当てはまる「行」の情報を全て拾ってきます。
例えば、めろんに一致する条件と指定すると、
A1に「めろん」B1「1,000円」C1「特上」
A2に「りんご」B2「180円」C2「上級」
A3に「みかん」B3「100円」C3「中級」
とセルに入っていた場合、前のモジュールから「めろん」が届くと、
「めろん」「1,000円」「特上」という情報を変数に格納してくれます。
このように条件に一致する行の情報を取得できるので、スプレッドシートの情報を扱うときにはよく使うモジュールとなります。
今回は次に出てくるモジュールで最終行を変数に格納したいので、このモジュールをセットします。
Array aggregatorモジュールで最終行を取得
完成図の4つ目は、Array aggregatorモジュールとなります。
1つ前のモジュールで情報が多い時、ひとつにまとめるモジュールとなります。
Search RowモジュールでA列には、文字が何行目まで入っているかを確認しています。
しかしA列に文字が入っている一行すべての情報が格納されているので、
行数だけをまとめて取り出します。
個人的な話ですが、
Iterator (イテレーター)とAggregator(アグリゲーター)の使い方がいまいちよく分かっていません。
日本語で使い方がわかりやすく説明されたサイトがあれば教えてほしいです。
Makeって名前は、検索するにはちょっと汎用的すぎて、
関係ない情報が多数ヒットして探しにくい★
Integromatの名前の方が好きでした。
ToolモジュールのSet variableで最終行の次の行数を取得
さて、Array aggregatorモジュールで最終行を取得できたので、
次は最終行の次の行数を変数に格納します。
下図では、左のArray aggregatorモジュールで最終行の行数が、
IMTAGGLENGTHに格納されています。
(5が表示されていますね。)
Tools(Set variable)モジュールを使って、最終行に+1をして、「最終行の次の行」という名前の変数に格納します。
IMTAGGLENGTHに「+1」をくっつけています。
数式がセットできるのもMakeの使いやすい部分ですね。
「+」はモジュール内にあるので、「+」をセットして、数字の1を入力します。
「IMTAGGLENGTH+1」が格納された「最終行の次の行」という変数は後ほど出てくるスプレッドシートモジュールで使います。
ChatGPTモジュールにメッセージを整形してもらう
次はOpenAIモジュールを使います。
Connectionの設定方法は、過去の記事を参考ください。
OpenAIのConnectionとつながったら、ChatGPT3.5をセットします。
Item 1にはユーザーから届いたLINEメッセージを格納します。
Item 2には「Role」に「System」、
「Message Content」には整形したい形をChatGPTへ指示を入力します。
Item 2はRoleを「System」、MessageContentは下記の文章を入れてください。
有給休暇申請のメッセージです。
【今日の日付】は{LINEのTimeStamp}です。
メッセージには日付と、
早い時間は有給休暇の開始時刻、
遅い時間は有給休暇の終了時刻となります。経過時間は終了時刻ー開始時刻を計算して、以下の例に従って、カンマ区切りで出力する。
【出力】
日付,開始時刻,終了時刻,経過時間,
例:
有給休暇申請,
4月1日,
9:00,
12:00,
3:00,
LINEモジュールが取得しているTimeStampをChatGPTへ渡しているのがポイントです。
ChatGPTへの指示の大事なポイントは以下となります。
- 有給休暇申請, 👈何の申請かわかるようにする。
- 4月1日, 👈有給休暇の日にち
- 9:00, 👈有給休暇の開始時刻
- 12:00, 👈有給休暇の終了時刻
- 3:00, 👈終了時刻ー開始時刻(取得時間)
この部分が重要でして、コンマ区切りで出力するように指示してあります。
スプレッドシートの指定したセルへ、コンマ区切りで記入するように設定します。
もう1点、 - 「LINEのTimeStamp」には、ユーザーのLINEMessageに格納してある「Event」「TimeStamp」をセットしてください。これでChatGPTが今日の日付を取得できます。
(これにより、ユーザーから「明日有給取得」と言われたときに、正確な日付を出力することができます)
Googleスプレッドシートモジュールでセルへ書き込み
ChatGPTに出力形式を整形してもらったら、必要な情報をGoogleスプレッドシートへ書き込みます。
自分のGoogleスプレッドシートをConnectionで接続
スプレッドシートは「有給休暇」を選択
シートネームは「有給休暇申請」
Table Contains headersは「YES」
Valueの設定です。
ID(A)はLINEのUser IDをセット
名前(B)は=VLOOKUP(A最終行の次の行
,’user管理’!A:B,2,FALSE)
メモ:この数式は「user管理」SheetにLINEUserIDと従業員の名前がA列、B列に入っているので、Sheetを検索してLINE IDと一致する従業員の名前を返します。
LINE(B)は従業員からのLINEメッセージを加工なしで、B列に保存しておきます。
ChatGPT(D)には加工後のChatGPTが作成した文章をセットします。OpenAIモジュールの「Choice」「Message Content」を選んでください。
申請(E)は =split(D最終行の次の行
,”,”)
メモ:E列に「split」関数(数式)を入力します。コンマ区切りになっている文字列を隣のセル(E・F・G)に自動で入力してくれます。
有給日時(F)・開始時刻(G)・終了時刻(H)・消化時間(I)は空白で大丈夫です。
以上でOKを押してセット完了。
文字だとわかりにくいかもしれません。コメントいただければ可能な限り説明しますね。
ChatGPTはユーザーのメッセージを下記のように整形してくれます。
「有給休暇申請,5月12日,10:00,12:00,2:00」
これをD列にChatGPTデータとして入力します。
下記のsplitを使った数式をE列に入力することで
C列に入力されているChatGPTデータを「,」で区切った文字列をそれぞれE列からI列に自動で入力してくれます。
「=split(D最終行の次の行
,",")」
とっても便利な関数(split)ですね✨
Google Sheetsモジュールで従業員の有給休暇残時間を取得
次にLINEで登録した日時や残りの有給休暇の時間を返信するために、その従業員のデータを取得します。
スプレッドシートのデータは下記のように蓄積されるので、
「user管理」Sheetの情報をGoogle Sheetsモジュールを利用して読み込みます。
「user管理」SheetからLINEで送ってきた従業員の現在の有給休暇情報を取得します。
下記のようにGoogle Sheets(Search Row)で設定してください。
Googleスプレッドシートから今LINEメッセージを送ってきた従業員のLINE IDをFilter処理して取得します。
Filterは「ID(A)」の行からLINEのuserIDと一致する一行すべての情報を取得する、処理となります。
従業員名「井上」の残時間を取得するため、Google Sheetsモジュールをつかって、「井上」に関する2行目の情報をいったんすべて取得します。
ChatGPTでLINEの返信文章を作成してもらう
先ほど今メッセージを送ってきた従業員の有給休暇に関する情報が入力されている行を取得したら、
ChatGPTに返信用の文章を作成してもらいます。
OpenAIモジュールでConnectionをつなげる。
ChatGPTは3.5で大丈夫
Item 1には
RoleはUserとして、MessageContentは下記の文章を入力します。
【前回のChatGPTの出力コンテンツ(メッセージ)】
は有給取得申請のデータです。
データの項目は順番に下記となります。
有給取得日,
開始時刻,
終了時刻,
有給取得時間数,
となっています。
登録内容にある〇〇にそれぞれの数字を入れてください。
【登録内容】
【Google Sheetsモジュールー従業員名】さん
有給取得日:〇〇
開始時刻:〇〇
終了時刻:〇〇
有給取得時間数:〇〇
有給の残り時間:【Google Sheetsモジュールー残時間】
以上、登録しました。
変更がある場合は管理者へ問い合わせください。
LINEモジュールで返信しよう
ChatGPTに返信用の登録内容メッセージを作成してもらったら、LINEモジュールで返信します。
LINEモジュールのConnectionは有給休暇取得ボットを選択(私はスタッフAIという名前にしてあります)
ReplyTokenを選択して、Item 1にはTypeーText、
Text内容は一つ前のChatGPTの出力コンテンツをセットしてください。
LINEの有給休暇申請ボットでメッセージを送ってみる
完成したら、いろんなパターンで送信してみよう。
ChatGPTの力を借りることで、LINEから届くメッセージに多少揺らぎがあっても、
柔軟に対応してくれます。
ノーコードでここまでできるってとっても楽々!
これからもChatGPTを上手に使って、仕事を楽にしていけるといいですね✨
Make(旧:Integromat)はノーコードで各種サービスを連携できるツールです。
プログラミング初心者でも簡単操作でおすすめです!👉無料で新規登録してみる!
コメント