一休.com Developers Blog

一休のエンジニア、デザイナー、ディレクターが情報を発信していきます

「ちょっとしたことを検索できる」Slack botを作った

この記事は一休.com アドベントカレンダーの18日目の記事です。

qiita.com


こんにちは。 社内情報システム部の下村です。
一休ではOfficeITに関する全ての業務、改善を担当しています。いわゆる情シスです。

本日は、一休の情シスが行ってきた活動のうち、開発者ブログらしく社内向けのSlackツールを開発(?)したことについて記載したいと思います。

どんなツールを作ったのか?

一休ではコミュニケーションツールとして、非エンジニアであってもSlackが活用されています。 そのSlackを使って、 「ちょっとしたことを検索できるbotがあれば便利なんじゃないか?」 と思い 社内向けに提供しました。 具体的には下記のようなことがSlack上で検索できるようにしています。

  1. 内線番号や、メールアドレスなどの社員情報を検索。
  2. 「座席表」や「無線LANのキー(パスワード)」などのURLを検索。
  3. 会議室の空き状況を確認。(予定が空いていればbot上から予約も可能にしています。)

デモ

「百聞は一見にしかず」ということで実際の動作デモです。 雰囲気が伝われば幸いです。 ちなみに「ぽ」とはbotの起動トリガーです。 ぽ<なんちゃら>と書くとbotが反応するようにしています。

f:id:undersooon:20181217141737g:plain

余談:なんで「ぽ」なの?

起動トリガーは下記の条件を満たす必要がありました。 下記条件を全て満たすのが「ぽ」でした。

  • 覚えやすい。
    • 「ぽ」ってなんかインパクトありますよね。
  • 打ちやすい。
    • ご自身のキーボード配列見てみてください。「p」と「o」が近くて打ちやすくないですか。
  • かぶらない。
    • かぶりやすいキーワードを起動トリガーにするとbotが誤検知しちゃうので。
    • 「ぽ」で始まるキーワードってなかなかないですよね。

構成

このツールの構成は下記のようになっています。 ツールが検索/回答する順序として、

  1. 投稿されたキーワードが「会議室状況確認」を含む場合、会議室予約情報を回答。
  2. 上記キーワードではない場合「Google SpreadSheet」に記載があるかを確認。あればSpreadSheetの内容を回答。
  3. SpreadSheetにもキーワードが無い場合、ADに登録されている社員情報かどうか確認し回答。

という順序で検索/回答をかけるようにしています。 (botの起動トリガーを無理やり一つで完結するようにしたので若干無理があります。。)

■詳細

  1. 社員が特定のチャンネルに投稿する。
  2. SlackのOutgoing Webhookで投稿された内容を検知し、GAS(Google Apps Script)に投稿内容をPostする。 ※1
  3. 投稿内容が「会議室状況確認」なのか確認。
    • 会議室予約の場合:会議室空き情報を返して終了。 ※2
    • そうではない場合:次のステップへ。
  4. Google SpreadSheetの内容をGASにて確認。
    • 記載がある場合:検索結果を返して終了。 ※3
    • 記載がない場合:次のステップへ。
  5. 検索内容をhubot用のSlackチャンネルに投稿。ADやSlackのユーザ一覧に検索情報が含まれているか確認し、結果を返す。
    • ADからは電話番号や内線番号、部署名などの情報を抽出。 ※4
    • SlackAPIの「users.list」を使って、EmailAddressをキーにSlackUserIDを抽出。 ※5

f:id:undersooon:20181217004143p:plain

※1 参考URL
※2 参考URL
地味にハマったのが対象のリソース(会議室)を閲覧状態にしないと予定が取得できないので、 おまじないとして、 CalendarApp.subscribeToCalendar(\<resourceIDを入力>); と事前に定義しておくと良いです。
※3 こちらのURL を参考に行番号を取得して、こちらを参考に対象のセルを取得してます。
※4 WindowsServerでhubotを起動しています。「Get-AdUser -Filter 'enabled -eq $true' -Properties *」して、AD登録情報を内線番号など必要なものを引っ張ってます。
※5 参考URL

課題

メンテナンス性を考えずに適当に作ってしまったので構成がとても複雑になってしまいました。。
ADについてはいずれ、AWS Directory Serviceに移行予定なので、AD情報などはhubotを使わずに
Lambdaで参照するようにしたら多少はシンプルな構成になるのではないかと考えています。

botをリリースしてから起きたこと

内線番号とか、座席表って参照する機会はあるものの「いざ」という時に 「どこに書いてあったっけ状態」に陥りますよね。

お陰様で「ぽ」は社内でよく利用されていますので、 結果として、「どこに書いてあったっけ状態」を解消でき、 社員が「何かを探す」時間を少しは減らせたのかなと思います。

余談ですが、人が「探す時間」に時間を費やすのは年間150時間もあるそうですよ。
その時間を少しでも減らせる手助けができたかなと思います。

最後に

これからも、一休情シスは今回紹介したツールのようなものなどを提供して、
社員が 「本来やるべき業務に集中して時間を割けるよう」 サポートを続けていきます。
そして、この記事が同じ志を持つ誰かの参考になれば嬉しいです。

id:undersooon でした。

明日は@s-tokutake の 「Hangfire [導入編]」 です。お楽しみに!