GROWTH VERSE TECH BLOG

株式会社GROWTH VERSEのテックブログです。

TeamSpirit出社打刻のSlack通知

はじめまして!株式会社GROWTH VERSEにて社内ITを務めている浜田と申します!

前書き

世間ではオフィス回帰のニュースが伝えられていますが、弊社はバリバリのテックカンパニーという事もあり、ハイブリッドワークの様々な対策を講じています。手前味噌ですが東京オリンピックの伴う交通規制に備えていた為、パンデミックに慌てることはありませんでした。その後徐々に対策を強化してきましたが、今回は特に社内コミュニケーションに関するトピックとして、2022年夏に実施して社内で好評だった、TeamSpirit打刻のSlack通知についてお伝えします。

対象読者

TeamSpiritのチムスピ勤怠とSlackを利用している他社のコーポレートSE。つまり世界中の私です。

勤怠状況の共有

当社ではタイムカードの代わりにTeamSpiritで打刻する事で勤怠管理を行っています。ハイブリッドワークが進むと、他の社員の勤怠状況を効率的に共有する方法が必要となります。

TeamSpirit社からは、勤務状況ダッシュボードが提供されていますが、大半の社員はTeamSpirit(Salesforce)を常に開いているわけでは無く、活用状況がイマイチでした。

そこで、TeamSpirit打刻と同時にSlackの勤怠連絡チャンネルにも手動で投稿する運用にしました。これは毎日の挨拶代わりのコミュニケーションとして有用でしたが、2度手間感が強い物でした。今回はそれを自動化するものとなります。

TeamSpirit打刻のSlack通知

TeamSpiritとSlackを連携するため、Slack AppのTeamSpirit連携が提供されています。しかし、Slackから勤怠打刻ができる機能や、各種申請の承認結果がSlackに通知される機能にとどまります。

TeamSpirit勤怠打刻を自動的にSlack通知してほしいので、Salesforce Platformの「フロー」機能で実現しました。幸い、SalesforceによるSlackを買収後にリリースされた「Salesforce for Slack」を利用する事ができました(できたてほやほやでした)

出勤打刻フロー

作成したフローの全体像は下記のようになります。 TeamSpiritのカスタムオブジェクト「勤怠日次」の更新をトリガーにして、Slackのチャンネルに投稿しています。Salesforce内部の処理で完結しませんので「非同期に実行」で処理を行います。

各処理を個別に見ていきましょう

レコードトリガー

まず、レコードトリガーの詳細です。

勤怠日次オブジェクトの出社時刻teamspirit__StartTime__cに値がセットされ、退社時刻teamspirit__EndTime__cに値が入っていない時に処理されるように設定しています。

出勤と休憩からの復帰を区別したい

TeamSpiritでは、退勤打刻後に出勤打刻を行うと、その間の時間を休憩時間として記録します。この時、勤怠日次オブジェクトにセットされる値を見ていると、オブジェクト数を増やさないための工夫を感じられるのですが、出勤打刻と復帰打刻(再度の出勤)を簡単に区別する方法が見つかりませんでした。

復帰打刻を出勤打刻と同じようにSlack通知しても大した問題では無いように感じられるかもしれないのですが、ハイブリッドワークで柔軟な働き方を実現する当社において、用事で席を外す際に退勤打刻してもらわないとモラルハザードを招きかねないため、復帰打刻を明確にするべきと考えています。

ちなみに、休憩に入る際の退勤打刻は、その後復帰するかどうか判別できないため、システム的には通常の退社と同様に表示するようにしています。Slackに投稿されたメッセージに、休憩のリアクションやコメントを手動投稿しています。

出勤と復帰を区別する方法

今回、復帰打刻と出勤打刻を区別する方法として、現在時刻と出社日時teamspirit__StartTime__cを比較して、出社日時が5分以上前の場合に復帰打刻と見なす事にしました。出社→休憩→復帰の間隔が5分以内の場合は出社→休憩→出社と表示されますが、実用上の問題は無いでしょう。

現在時刻:{!$Record.SystemModstamp}
修正判定用出社日時:{!$Record.StartDateTime_Modded__c}

出社日時+5分の計算

フローの条件分岐(意思決定)では計算式を利用できないので、ちょっとしたハックが必要となります。勤怠日次オブジェクトに、出社日時プラス5分の値が自動計算されるカスタム項目「修正判定用出社日時」を追加しています。

# 現在時刻とそのまま比較できるよう、時差や単位を変更する数式です
DATETIMEVALUE(teamspirit__Date__c) - (9 / 24) + teamspirit__StartTime__c / 24 / 60 + 5 / 24 / 60

Slackへの通知

最後に、Salesforce for Slackにメッセージを渡します。

出勤打刻時のメッセージ

🌞出勤:{!$Record.Name} {!$Record.teamspirit__StartTimeHHMM__c} {!$Record.Dakokuikebukuro01__c}

復帰打刻時のメッセージ

♻復帰:{!$Record.Name}

次回予告

今回は、TeamSpirit出社打刻のSlack通知について解説しましたが、退社時のSlack通知フローについては別途機会が有れば解説します。また、池袋オフィスに出社した事をどうやって判別しているかについても解説したいと思います。

留保条件

今回、案内させて頂きました設定内容はSalesforceおよびTeamSpirit社の公式見解とは異なる表現が含まれる可能性もあるため、弊社からの純粋に技術的な情報提供としてお取り扱い下さい。

Salesforceのフローを利用したり、TeamSpiritのカスタムオブジェクトに項目を追加していますが、これらの方法を利用できるライセンスをお持ちかどうかは、各社にお問い合わせください。

また、今後のバージョンアップにより、今回の方法が使えなくなる可能性もありますので、各位の責任にて本記事の内容をご利用ください。

採用情報

弊社ではエンジニアを絶賛募集中です!

findy-code.io