こんにちは。小売業で働いているtakumaといいます。
私は当日や翌日に、他に誰が出勤しているかによってやらなければならない仕事や、仕事の優先順位がよく変わります。
「今日はあれやって、これやって…そういえば今日アルバイトいたっけ?」
「明日の朝あの人いたっけ?」
ふと思った時にシフト表を確認するのですがこれが結構 面倒 です。
文字は小さいし、シフト表の左にある日付から指でなぞって誰がいるのか追うのが手間。
手元にシフト表がないときはもう 最悪 です。
毎日ちゃんとメンバーを把握しなさいと言われればそれまでですが…
今回は LINE bot に助けてもらいたいと思います。
今回作成したのは出勤日をLINEで送るとその日のメンバーとそれぞれの出勤時間を確認できるLINE botです。ついでに自分のシフトも確認できるようにしました。
使用ツール
・Make
・LINE
・Googleスプレッドシート
Makeシナリオ
LINE Botを作成するための準備
LINE Botを作成するために LINE Messaging API の設定が必要になります。
こちらの記事を参考に設定を完了させましょう。
出勤メンバー確認機能
上半分のルートはLINEで日付をMM/DD(スプレッドシート内と同じ形式)または「今日」「明日」「明後日」と送信するとGoogleスプレッドシートに記入したシフトを参照してその日の出勤メンバーが返信されます。
Tools のSet multiple variables でMM/DD以外の「今日」「明日」「明後日」といった入力を日付に変換します。
Varirable valueには以下のコードを入力しました。
(ChatGPT様に教えていただきました!)
{{
if(contains(32.events[].message.text; "今日");
formatDate(now; "MM/DD");
if(contains(32.events[].message.text; "明日");
formatDate(addDays(now; 1); "MM/DD");
if(contains(32.events[].message.text; "明後日");
formatDate(addDays(now; 2); "MM/DD");
32.events[].message.text
)))
}}
これはLINEで受け取ったメッセージに「今日」「明日」「明後日」などが含まれている場合に、それに対応する日付を返す仕組みです。
これを作り始めた当初の私のように「なんだこのわけ分からない文字は…。」とさっぱり意味が分からない人は以下で分解して説明します!
分解して説明
if(contains(32.events[].message.text; "今日"); formatDate(now; "MM/DD");if~
こちらを分解します。
if(条件; 真のとき; 偽のとき)の役割
・条件を見て、当てはまれば「真のとき」を返す
・当てはまらなければ次の if(...) に進む(入れ子になってる)
ここでいう条件はこの部分
contains(32.events[].message.text; "今日")
contains(...)の役割
・(...)に特定の単語が含まれているかどうかを調べる
つまりこれは32.events[].message.text
(LINEのメッセージ)に「今日
」が含まれているかということ!
; 真のとき; 偽のときはこの部分です。
;formatDate(now; "MM/DD");if~
formatDate(now; "MM/DD")の役割
・今日の日付を「月/日」の形式で表示
32.events[].message.text
に今日が含まれていたら(真のとき)formatDate(now; "MM/DD")
=今日の日付を月/日の形式で表示する。含まれていなかったら(偽のとき)次のif~
に進みます。
次のif~である2個目以降もほぼ同じ形ですが
"明日")formatDate(addDays(now; 1)
"明後日")formatDate(addDays(now; 2)
と少し変わっています。
(addDays(now; 1)
は今日の日付に1日足すという意味です。2の場合は2日足した日付を表示します。
つまりこのコードは
「今日」を含むメッセージが来たとき、今日の日付を月/日で表示。
「今日」を含まないメッセージで「明日」を含むメッセージが来たら今日に1日足した日付を表示。
「今日」も「明日」も含まないメッセージで「明後日」を含むメッセージが来たら今日に2日足した日付を表示する という意味になります。
Google SheetsのSearch Rows でLINEで送られてきた該当日が書いてある行から勤務情報を取得します。
その後Get Range Valuesでそれぞれの列から社員名を取得します。
それらを掛け合わせてLINEで返信!
Get Range Valuesから得たC列の社員名
Search Rowsで得た該当日のC列の出勤情報
Get Range Valuesから得たE列の社員名
Search Rowsで得た該当日のE列の出勤情報
Get Range Valuesから得たG列の社員名
Search Rowsで得た該当日のG列の出勤情報
...
といった形で見やすいよう整形しました。
自分のシフト確認機能
下半分のルートは「シフト」と入力すると自分の1か月分のシフトが返信されます。
Router で「シフト」と入力すると下半分のルートに繋がるように条件を設定。
Get Range Valuesで1か月分の日付、曜日、出勤時間を取得し、 Tools のText aggregatorで見やすいテキストに整形し、LINEで返信!
もっと使いやすくするためには
・日付入力に柔軟性を持たせたい。
現状、日付はMM/DDで入力しなければならず、それ以外は「今日」「明日」「明後日」のみ対応しています。「30日」など他の入力形式でも対応できるようにしたい。
・指定した条件に当てはまる人のみを抽出し返答できるようにしたい。
「出勤者のみ」や「17時以降に勤務している人」など条件を絞り込んで表示できるようにしたい。
・特定の名前や日付を指定し、勤務計画を表示したい。
「Aさんの30日のシフトは?」といった内容に回答できるようにしたい。
今回作成したLINE Botは改善点がたくさんあります。つまり 伸びしろしかありません。 今後私の成長とともにこのツールも進化させていきたいと思います。
感想
今回、出勤確認ができるLINE botを作成しました。正直、私はデジタルツールに対して少し苦手意識があり、Makeもまったくの初心者だったので最初はさっぱり訳が分かりませんでした。 コードもなんだか難しそうな文字がいっぱいで意味がわからないという感じでした。
ですが、色々調べながら実際に手を動かしてみると「こうすれば動くんだ!」という発見の連続で、次第に仕組みがわかっていくことが楽しくなってきました。作る過程ではつまずくこともありましたが、ひとつずつ解決していく中で、自分が成長していくのを実感できたのがとても嬉しかったです。
そして何より、「自分の手で役立つツールを作れた」という達成感は本当に大きなものでした。まだまだ改善できる部分や、追加したい機能もたくさんあるので、これからさらに進化させていきたいと思っています。