トイレから始まった「IoTとメッセンジャーボットの連携」とは

2016年12月06日 火曜日


【この記事を書いた人】
工藤 隆久

ネットワーク本部 プロダクト推進部 企画業務課の所属。新プロダクトの企画/推進、主にメッセンジャー「direct」に関するプロジェクトに従事しています。

「トイレから始まった「IoTとメッセンジャーボットの連携」とは」のイメージ

プロダクト推進部企画業務課の工藤です。新たなプロダクトの開発展開を促進するべく企画/開発に関する業務を担っています。
今回は、だれもが体験したことがあるであろう身近な課題から発足したプロジェクトと、メッセンジャーのボットを活用したユーザインタフェースを紹介します。

トイレが空いてない!!

唐突にトイレの話で恐縮です。
弊社は2年前に飯田橋の新しいオフィスビルに移転しました。執務室環境はとても良好なのですが、日常的に困ったことが起きています。男子トイレの個室不足です。
特に、社内業務が中心の男性エンジニアが多いフロアで顕著で、朝の始業後や昼休み後にはトイレの個室が空いていないことがしばしばあります。緊急時には冷や汗モノです。
社内SNSで不満の声が高まる中、この状況に立ち上がった有志たちがいました。IoTを活用して状況を改善しようとする試みです。
名付けて「IoT(oilet)」プロジェクトです。

トイレ運行システム

トイレには入室状況を確認するセンサーシステム「はいってルンバ♪」が既に設置されていましたが、入室データを外部システムに連携できる機能はありませんでした。「IoT(oilet)」プロジェクトでは、このセンサーシステムを独自に拡張して、データを取得し配信してくれる「トイレ運行(うんこ・う)システム」を開発しました。

「IoT(oilet)」プロジェクトでは、データを集約/配信するソフトウェアはもちろんですが、Raspberry Piを使ったセンサー拡張も手作りで実装しています。実装したハードはこんな感じです。わくわくしますね。

01_img

IoTプロジェクトでは、センサーから取得したデータをWebアプリやChromeブラウザの拡張で社員に提供していました。この機能は十分に便利なのですが、もっと手軽にオフィス内での移動中でも空き情報がみたい、という要望を受けて生まれたのがメッセンジャーボット=「厠君」です。

厠君

まずは厠君の画面をごらんください。
メッセンジャーで「厠君」とのトークルームを作り、「w」(waitの意)と話しかけます。
個室が空いていればその場所を教えてくれて、空いていない場合は空き次第プッシュ通知がくるようになっています。

02_img
トイレに行きたい!と思ったとき、スマホでメッセンジャーを開いて「厠君」に「w」と問いかければ、トイレ探しに苦労しなくて済むようになりました。
厠君のシステム構成を紹介します。構成はシンプルですので、ボットアプリケーションのリファレンスとしても参考になると思います。
03_img
バックエンドのシステムは、トイレに設置したセンサーと集計サーバ&アプリケーション、さらにメッセンジャーシステム、と複数のシステムで構成されていますが、実際に利用するユーザは簡単な操作で利用できます。
このように、ボットを活用したアプリケーションは比較的容易な開発で利用者のUX(ユーザエクスペリエンス)を改善できるのです。

LINE使ってますか?

私もプライベートなコミュニケーションで便利に活用しています。
メールにはない即時性やグループトークやスタンプでの感情表現など、他のコミュニケーションツールにはない便利さがすばらしいです。すでに社会インフラと言っても過言ではないほど普及していますよね。
この便利なLINEでのコニュニケーションを業務でも使いたい、実際に会社的には非公式だが使ってしまっている、という方は多いのではないでしょうか。
便利さとは裏腹に、会社の業務情報を扱う上では情報の安全性というリスクも伴います。大事な情報が漏洩してしまったら大変です。情報セキュリティを管理する方は、利用者を管理したり、過去に送受信されたメッセージのアーカイブ取得など、管理機能も必要になるでしょう。
このようなニーズに向けて、弊社では充実した管理機能で業務でも安心してご利用いただける企業向けメッセンジャー「direct」を提供しています。
メッセンジャーでのコミュニケーションはとても便利ですが「direct」はそれだけではないのです。「厠君」の例のように「ボット」を活用してメッセンジャーの可能性をさらに広げることができます。

ボットのメリット

ボットとはコミュニケーションツールの相手としてつくられたプログラムの総称です。語源がロボットから来ていますので広義に解釈することもできますが、今回の紹介では「メッセンジャーの相手となるプログラム」とします。
メッセンジャーの相手なので、見た目はユーザ(ともだち)です。このボットに何か話しかけたり、なんらかのイベントを検出して、メッセージを送ってくれます。
ボットはプログラムですので、疲れることはありません。プログラムなので情報さえあれば、いつでも、すぐに、正確に、欲しい情報を教えてくれます。
利用者はいつも使い慣れたメッセンジャーの操作性で、時間や場所を問わずに簡単に情報にアクセスできるようになります。
また、欲しい情報にアクセスするための専用アプリを作るのに比べると、はるかに低いコストで作成することができます。

directの紹介

「direct」は企業向けに特化したメッセンジャーサービスです。
LINE等のメッセンジャーの利便性をそのままに、管理機能で情報セキュリティへの対策が可能です。
単なるコミュニケーションツールではなく、「direct」では標準機能としてボット連携が可能です。既存・新規問わず、様々な業務アプリケーションと連携して、メッセンジャーを業務ツールとして拡張することができます。
「direct」のボット連携機能「daab (direct assist agent bot)」は、directの標準機能として無償で利用できます。

daab(direct assist agent bot)について

directのボット連携機能「daab」はGithub社のHubotを拡張したものです。Hubotのスクリプトがそのまま動作しますので、開発するための学習コストが少ないのも特徴です。
daabのインストールはとても簡単です。セットアップとデーモンの起動を1つのコマンドで実行できる「daab」コマンドがnpmで公開されています。

daab環境のセットアップ

「daab」コマンドを使って環境をセットアップしてみます。
node.js環境が必要ですので、事前にインストールしておいてください。
まずはじめに「daab」コマンドをインストールします。

$ npm install -g daab
$ daab help

ヘルプが表示されるはずです。
次にボットを作成します。

$ mkdir mybot && cd $_
$ daab init

必要なパッケージがインストールされ、daab環境がセットアップされます。
では、ボットを起動してみましょう。
ボットのアカウントでログインします。

$ daab login
Email: botaccount@example.com
Password: *****
logged in.

logged in. と表示されれば成功です。
ボットを起動します。

$ daab run

インストールから起動まで、手順は以上です。
早速ボットに話しかけてみましょう。「PING」と問いかけてみてください。「PONG」と返ってくはずです。
あとは任意のスクリプト追加していくだけです。
このように、簡単な手順でボットの環境を構築することができます。

daab(Hubot)のアーキテクチャとdaabの実装例

daab(Hubot)を用いたシステム構成の概略です。

04_img

 

ボットサーバはdirectサーバに接続するためにインターネットにつながるネットワークがあれば、任意のサーバに構築することができます。弊社クラウドサービス「IIJ GIO(ジオ)」のパブリッククラウド環境はもちろん、手元のPC環境でも起動することが可能です。
daab(Hubot)はAdapterというプラグインを用いて、様々なチャットツールと接続することができます。daabはdirect用のAdapterと一部機能拡張されたHubotで構成されています。
daab(Hubot)はAdapterからdirectサーバにwss(Websocket on SSL)で接続されます。このためdaabサーバは、firewall内でhttpプロキシを介した環境でも起動可能です。
次に、daabを用いたボットのスクリプト例を紹介します。
daab(Hubot)では、ボットの本体動作部分をスクリプトに書いていきます。coffeescriptまたはJavaScriptで記述できますので、比較的簡単に作成できます。

PING/PONGスクリプトの例

module.exports = (robot) ->
  robot.respond /PING$/i, (msg) ->
    msg.send "PONG"

入力する文字列を正規表現等で受けて、コールバックで応答メッセージを返すようにします。
ボットの利用例として、利用者の入力に対しての応答だけではなく、何らかのイベントをプッシュ通知したいケースもあると思います。
daab(Hubot)では、サーバサイドからのプッシュ通知も簡単に実装できます。

プッシュ通知スクリプトの例(通知先ユーザを指定しボットとのペアトークルームに通知する例です)

module.exports = (robot) ->
  robot.router.post "/hubot/notify", (req, res) ->
    data = req.body
    alert = data.alert
    robot.logger.info alert
    if alert
      if !alert.email
        res.writeHead 400, {'Content-Type': 'text/plain'}
        res.end "Bad Request"
        return
      msg = "#{alert.subject}"
      if alert.body.length > 1
        msg += "\n#{alert.body}"
      for id,talk of robot.brain.rooms()
        if talk.type is 1
          if talk.users[0].email is alert.email or talk.users[1].email is alert.email
            robot.messageRoom talk.id, msg
    res.end ""
 
# {
#   "alert": {
#     "email": "user@example.com",
#     "subject": "alert subject",
#     "body": "alert body"
#     }
#   }
# }

robot.router.postに指定したURIでHubotはHTTPリクエストをLISTENします。ポート番号はデフォルトで8080ですが、起動時の引数または環境変数で変更することができます。
http://localhost:8080/hubot/notify
URLにコードの末尾にコメントで追記したJSONをPOSTすると、emailで指定したユーザにプッシュ通知がされます。

実用的なボットの活用事例

IIJ社内では、厠君の他にも幾つかの検証用ボットが稼働しています。
もう1つ実際に業務で活用されているボットを紹介します。

パーソナルアシスタントボット(スケジューラ確認/内線検索等)

IIJ社内で利用しているスケジューラの情報を取得できるボットです。
スケジューラシステムはIIJ社内で以前から利用されていた既存のシステムで、外部アプリケーションから利用できるAPIが公開されていました。ボットはこのAPIを利用しています。
システム構成はとてもシンプルです。

05_img

今日のスケジュールを取得

今日のスケジュールを取得することができます。メッセンジャーから簡単にスケジュールをチェックできるようになりました。
特定のスタンプがコマンドのエイリアスになっています。特にスマホでの利用で便利です。

06_img

モーニングコール機能

プッシュ通知も活用されています。指定した時間に今日の天気とスケジュールを通知してくれます。時間を朝に設定すると便利ですので、モーニングコール機能と呼んでいます。

07_img

この例ではスケジューラシステムと連携していますが、同様の仕組みでSFA(営業支援システム)など様々な連携が考えられます。

最後に

いかがでしたでしょうか。
今回はメッセンジャー「direct」を活用したボットシステムの紹介でした。
ChatOpsというキーワードで開発ワークフロー等にメッセンジャーを活用して、コミュニケーションのオープン化と高速化を図っている方はすでにいらしゃるかもしれません。弊社でも一部のシステムの開発や運用で実践導入されています。
今回はより広い利用者向けのボット活用の可能性として、2つの事例を紹介させていただきました。
この記事で、ボットやメッセンジャーに興味がわいたという方がいらっしゃれば幸甚です。
IIJは次世代メッセンジャーツール「direct」を販売しています。問い合わせ、ご相談など、お気軽にご連絡ください。

関連URL

工藤 隆久

2016年12月06日 火曜日

ネットワーク本部 プロダクト推進部 企画業務課の所属。新プロダクトの企画/推進、主にメッセンジャー「direct」に関するプロジェクトに従事しています。

Related
関連記事