まだ書いてる途中です!
もう少しで公開できる、かな。
IP Messagingが使えるようになったので、早速デモを作ってみました。名前の由来はこちら。
Waiting Roomとは
待合室向けのソリューションです。行列ができる店舗(銀行、病院、回転寿しなどなど)によく設置されている、タッチパネルを操作して自分の順番を予約する仕組みを作ってみました。もちろんプリンタなどハードウェアの制限はどうしようもないので、とりあえずタッチパネルと管理者向けPCやタブレット、ネットワーク環境があるという前提で話を進めます。
もちろん、Twilioならではの機能も用意しましたのでお楽しみください。
機能その1 順番を予約する
これでもかというくらいデザインのセンスがないですね。はい、まずは基本の機能です。タブレット機などの端末からタッチパネルを操作して順番を予約します。大きな「受付」ボタンをタップすると、順番が予約されます。現在待機中の人数も表示されます。
クリックするとサーバは並び順を設定して返します。その際IP Messagingを通じて全てのクライアントに更新が通知されます。
いつの間にかいっぱいクリックしていましたね。意味もなく占いも追加しました。
連番を利用するのにRedisのINCRを使って番号の発行処理を行っています。また順番を保証するために(ほら、番号札が最初に戻ったりするでしょ?)同じくRedisのLISTを使った実装になっています。
こちらの表示はIP Messagingの機能で全ての端末で同期しています。つまり、これって実際に店舗に出向かなくても順番を予約することができるんですよね。待ち人数も表示されますので、ユーザーは手元の端末から予約だけして適当な時間に店舗に出向くこともできます。
ええ、勘のいい人なら、それRedisのPub/Subでついでにやればいいんじゃない?って思ったかもしれませんが、もちろん可能です。ただ、IP Messagingに備え付けのREST APIの開発やRedisのサーバの運用が必要になるので、電話機能があるならこちらを使う方が便利ではあります。
また、今回のデモはReact.jsを利用しているのですが、最初にサーバからトークンを発行してもらい、IP Messagingの初期設定が完了したところで各種コンポーネントがロードされるようになっています。一旦起動したら、あとはサーバとクライアント、管理画面がそれぞれ通信しながら、IP Messagingで同期し合うようになっています。
機能その2 呼び出し電話を予約する
Twilioならではの機能の登場です。ユーザーは端末で予約してから電話番号を登録して自分の順番が近づいたら電話で呼び出してもらうことができます。電話番号を登録するとSMSが送信されるので、URLをタップすれば登録が完了します。これで間違い電話を防ぐことができます。
もっともSMSの到達率を考えると、ここはユーザーに特定の番号に電話してもらうソリューションもいいかもしれませんが、時間がないのでとりあえずデモはこれでいきます。
機能その3 呼び出す
管理画面からは待機中のユーザーを順番に呼び出すことができます。通常、店舗ではマイクや大声でお客さんを呼び出すわけですが、機能その2で電話を登録している場合は音声通話で呼び出すことも可能です。また呼び出し電話を予約したユーザーの順番が近づいてきたら(初期の閾値はあと3人)自動的に通話が開始されます。
開発の動機
待合室から離れて順番を待つことができる機能は、例えば病院などでは実際とても役に立つはずです。というのも、例えばちょっとした用事で内科に子供を連れて行くと、そこにはインフルエンザに罹患した患者さんが待っているなんてことは割とよく経験します。また、逆に風邪やインルエンザのように空気感染する病気になって病院に行くと、そこには免疫力の弱い高齢者や幼児、妊婦や免疫不全の方がいらっしゃることもありえます。こうした二次感染のリスクを低減するためには待合室を利用する時間を減らすのが効率的ですが、現在の仕組みではせいぜいネットで予約したら待機人数をチェックすることができるくらいが関の山で、メールでお知らせが届けばまだマシな方、でもメールを見落としてしまえばもうどうしようもありません。
他にも、例えばショッピングモールの飲食店などでは、もっと時間を有効活用したいので行列に並ぶのを躊躇しているお客様にアピールするでしょう。欲を言えばきりがないかもしれませんが、ディズニーランドだってこんな仕組みがあればあのとんでもない行列がなくなり、みんなもっと効率的に園内を回遊するので、さらにもっとたくさんのお金を落としてくれるようになるんじゃないかと思います。
ソースコード
簡単なデモですが、こちらに公開してあります鋭意準備中です。
もし「こんな機能は実現できないか」「こんな機能があれば是非導入したい」などのご提案があればおしらせください。