ABEJA Tech Blog

中の人の興味のある情報を発信していきます

オフィスDXを支える技術2022年版(チャットツール連携編)

ABEJA Advent Calendar 2022 11日目の記事です。昨日は服部さんの夫婦で納得の土地探しをするためにLINE Bot作ったりデータサイエンスした話でした。

はじめに

こんにちは、こんばんは、おはようございます、エンジニアの小笠原(@seiro-ogasawara)です。
去年の Advent Calendar@toshitanianオフィスDXを支える技術(バックエンド編)という記事を書いていましたが、本記事はそれの2022年版です。5日の記事で石川 (@ishikawa) がフロントエンド、というかネイティブアプリの機能紹介を行っているので、興味のある方はそちらもご覧ください。
この記事では、今年 Bizflex システムに追加した機能のうち、チャットツール連携機能、なかでも、(1) ゲスト来館時通知 (2) 勤怠サービス連携 についてご紹介します。
(ちなみに、チャットツールは現在は Slack に対応しています。要望があれば Microsoft Teams 等他のチャットツールにも...)

ゲスト来館時通知

去年の記事で、

ゲストが来訪した際に、招待メールに添付されたQRコードを受付端末を読み込ませると、セキュリティドアが解錠されて会議室にご案内されます。

と書いてありましたが、もちろん招待登録した人に対して通知も行っていました。当時はアプリ(ネイティブ/Web)への Push 通知をと Email での通知を実施していたのですが、なかなか気づかない場合も多く、注意していると今度は業務に集中できない、と本末転倒です。
そこで、チャットツールに来館通知を投稿するようにしました。チャットツールなら、ディスプレイの一角を常に占めているという人も少なくありませんし、更新情報は普段から気にかけている方も多いでしょう。単純に気づくためのチャンネルを増やすと言う理由もあります。
来館したゲストが受付端末に QR コードをかざすと、チャットツールの Direct Message 機能を使って招待者宛にメッセージを送信します。

ゲスト来館時の通知

ここで、招待者が即出迎えられる場合は 対応する ボタンを押下して迎えに出向けばそれで終了です。
ちょっと手が離せなくて他の人にお願いしたい、と言う場合に 他の人に頼む ボタンを押す(あるいはいずれのボタンも押さないまま一定時間が経過する)と、ゲスト招待登録時にあらかじめ登録しておいた追加の担当者へ、同様に Direct Message を送信します。通知のエスカレーションですね。ここで、その人が 対応する ボタンを押してゲストを迎えに行ってくれれば、招待者の人への DM が以下のように更新されて、対応してくれたことがわかります。

他の人が対応してくれた場合

その人も手が離せなくて迎えに行けない、といった場合に同様のアクションを取ると、専用のチャンネルへメッセージを投稿して、そのチャンネルに参加している誰かが対応してくれるように促します(このチャンネルには配達業者が来館した際などにも通知を行っていて、ある程度受付業も担当するような人に参加してもらいます)。

技術的には、Slack API を使って愚直に実装しています。

メッセージ送信については特段変わったこともしていないのですが、1点つまずいたのが、試しにメッセージだけ送信していた時は問題なかったのに、アクションのためのボタンを組み込んだ瞬間から、OS の通知欄の表示が This content can't be displayed と表示されるようになったことでしょうか。これについては、 Message payloads のトップレベルに text という項目があり、そこに設定した値が表示されることがわかり、ことなきを得ました。

厄介だったのは、アクションを受ける処理です。
ユーザーがアクションを行うと、当然リクエストが飛んでくるのですが、3秒以内にレスポンスを返す必要があります
「3秒とか楽勝じゃん」と思っていた時期が私にもありました... これが DB 更新してレスポンスを返す、だけなら確かに楽勝なのですが、外部サービスが絡むと途端に管理不能になります。
今回ですと、 対応する ボタンが押された時にやりたいこととしては以下のことが挙げられます。

1. 対応する ボタンの押されたメッセージを更新する

招待者/追加の担当者のメッセージの場合は「よろしくお願いします」的な文言に差し替えます。
チャンネル通知のメッセージの場合は、上記画像のように、「○○さんは△△さんがお迎えします」的なメッセージに差し替えます。

2. 同じゲストに対する他の来館通知メッセージを差し替える

招待者の人が対応してくれれば他へはメッセージ送信されていませんが、エスカレーションが進んでいると、それ以前に送信済みのメッセージも更新する必要があります。

3. 他の経路での来館通知の更新

push 通知などの他の経路での通知に対しても、対応している旨の再通知が必要です。

4. DB の更新

もちろん通知状況や対応状況などは DB に更新登録します。

上記全て行っていると、並列化しても3秒以内にレスポンスを返せるかは定かではありません... 仕方ないので、非同期で行うようにしました。
処理時間が不安定なのは主に外部サービスとのやりとりなので、2. と 3. は非同期にして後から処理を行うようにします。1. も 別途 Slack API の呼び出しが必要になるので外部サービスとのやり取りなのですが、これも非同期にしてしまうと反映が遅くなり過ぎてしまいユーザー体験が損なわれるので、DB 更新と併せて1. と 4. は同期で処理してレスポンスを返すようにしました。
簡略化したシーケンスはこんな感じです。

簡略化したシーケンス

勤怠サービス連携

皆さんの会社でも、なんらかの手段で勤務時間を管理していると思います。
どんなサービスを使っていても、面倒&忘れがちなのが出退勤のタイミングでのアクションですよね。Web アプリならサイトを開いてボタンを押す、Slack 連携してくれるツールなら Slack コマンド送信、、、限りなく簡単化してくれているけれど、やっぱり忘れてしまう。
じゃぁ自動で入力すれば良いじゃない、という機能が勤怠サービス連携です。 Bizflex では、以下のデータを用いることができるので、利用者のオフィス入退館がだいたい把握できます。

  • 入館記録
    • カード/顔認証/スマホ認証による自動ドアの解錠記録
  • WiFi の接続ログ
    • Bizflex では CISCO Meraki の WiFi Router/Access Point を導入しており、 WPA2 Enterprise を使用しているので、個人単位での接続記録が取得可能

いずれの情報も Bizflex システムから見ると外部サービスに記録されているため、定期的にデータを取り込んでいます。

勤怠サービスの打刻情報をチェックし打刻漏れがある場合に、上記記録を組み合わせることで利用者の勤怠開始/終了時刻を類推して、朝11時に打刻状況と共に打刻を促します。

打刻の推奨

上記画像だと、前日の退勤時も当日の出勤時も打刻し忘れてますね。。
このまま登録する ボタンを押せば、勤怠サービスの API を使って自動的に打刻します。

これはリモートワークでは享受できない、オフィスへ来た人だけが享受できる便利機能となっています。

まとめ

今回は、今年実装した Bizflex のチャットツール連携機能についてご紹介しましたが、如何だったでしょうか。
今まで面倒だったことをオフィスへ来ることで少しずつ便利に快適にすることで、これからのリモート/出社のハイブリッドワークに対応したオフィス環境を提供するべく、これからもどんどん新機能を実現していきたいと考えています。

採用メッセージ

ABEJAではエンジニア採用を積極的に行っております!ご興味があればご確認くださいませ。 careers.abejainc.com