第17話 完璧な自動予約BOTを目指すために
こんにちは!Kenです。
いよいよLINEBOT構築編ラストです。えっ!?もうラストなの?全然まだ完成してないじゃん!って思われるかもしれませんが、ここまで書いてきた記事の知識(JavaScriptの基礎知識があることが前提ですが・・・)を使えば、特別に新しく覚えることはないのです。
後は自動予約BOTでどのような機能が必要か考えれば良いということになります。
私の作りたいBOTでは次のような機能が必要となります。
1.予約は2つ以上入れれないようにする
今は予約を何個でも入れれてしまいます。普通に考えれば、予約を2つ以上入れれる必要はないですよね。なので、予約しようとしている人の予約が未来に入っていれば、それをできないような機能を実装します。ただし、開発段階ではいくつも予約を入れて5で述べるような予約可能時間帯の計算ができるかをチェックしなければならないので、この機能は一番最後に取り組んだ方が良いかもしれません。実装だけして、正常に動くことが確認できたら、コメントアウトしておくのも手ですかね。
2.過去の日時を選択しての予約はできないようにする
当たり前ですが、過去の日時を選択して予約するなんてことは普通ないでしょうけど、間違って選択してしまうかもしれません。システム上もそれをできないようにしておきます。
3.2ヶ月以上先の予約は入れれないようにする
美容院であれば、普通は2ヶ月以上先の予約は入れないでしょう。てか、来週行こうかなとかそのくらいのレベルだと思うので、2ヶ月以上先の予約はできないようにしておきます。
4.定休日の予約は入れれないようにする
チェーン店でない限り、定休日はあるかと思います。定休日には予約を入れれないようにします。
5.複数メニューを選べるようにする
美容院には様々なメニューがあり、オプションのようにいろいろ選ぶことができます。その組み合わせのパターンが多すぎるため、お客様が自ら希望のメニューを選べるようにしたいと思います。"選択終了"をタップするまで、お客様はメニューを選べるものとします。
6.予約可能な時間をチェックする
ここが本アプリの肝であり、最難関となります。現在入っている予約から、どの時間帯であれば予約可能かをリストアップします。例えば、お客様が13時の時間帯でカットを希望されたとします。この方のカット時間が20分とすると、13時台に他の予約が全く入っていなかった場合には、13:00、13:20、13:40を選べるようにします。まず初めに13:00で良いか聞き、「いいえ」が選択されたら、次に13:20を提案するという感じです。また、13時台に13:15〜13:40にすでに予約が入っていた場合、13時台で提案可能な時間帯は13:40のみになります。
7.予約可能な時間帯のボタン配色を変える
現状、時間帯選択のボタンは全て緑色だったかと思います。6で予約可能な時間帯をチェックしたら、その結果を用いて、ボタン配色も変えることができます。例えば、緑→予約可能時間帯、赤→予約不可時間帯などのように。
8.他の人との予約ダブりを防ぐ
予約処理はいくつかのメッセージ応答を繰り返した後、最後に予約しますか?→「はい」で予約が確定します。6の予約可能な時間帯はこの「はい」をタップする少し前に計算しており、予約する時間帯を悩み、「はい」をタップするまでに時間があくことが想定されます。そのため、「はい」をタップした時点で、本当にその時間帯に予約が入っていないか最終チェックを行いデータベースへINSERTするということが必要になります。
もしLINEアカウントを2つ持っていたら、もしくは誰か知り合いに頼んで、同時に「はい」で予約確定させてみましょう。この時、どちらかが予約NGとなればOKです。
9.過去メッセージの時間制限
もうお気づきかと思いますが、BOTから返されたメッセージはいつまでも有効になってます。8のようにタップされた瞬間に最終チェックを行えれば問題はないかと思いますが、BOTからのメッセージに返答するまでの時間制限を設けることもできます。そのBOTメッセージが発行されたtimestampをpostback.dataに記載しておくと、例えば、そのメッセージに返答した時間が3分を経過していたら返信できない旨をメッセージとして出すことも可能です。
10.友達登録した人のみが利用できる
よっぽど大丈夫だと思いますが、公式アカウントに友達登録した人だけが予約BOTを使えるようにできます。具体的には、usersテーブルにデータがある人なのかチェックし、友達登録していることが確認できたら、各々の処理に移るという記述をしてあげます。セキュリティも考えての念のための処置です。
11.スタッフが複数人いる場合
私のアプリでは店主1人用でしたが、もしスタッフが複数人いる場合はどうすれば良いでしょう。私は実装していませんが、もしやるなら、スタッフごとにreservationテーブルを分けると思います。テーブルが増えるだけなので、指名あり・なしに関わらず今のプログラムがそのまま使い回せると思います。
実装にあたり
私のアプリは最低限このくらいの機能はほしかったです。作りたいBOTによってはまだまだいろいろな機能が必要かもしれませんね。それはご自分の作りたいアプリを様々な利用ケースで考えてみましょう。
今回挙げた1〜11の機能もぜひご自分の力で作ってみてください。自分で考えながら、試行錯誤してコーディングするとプログラミング能力が飛躍的に上がりますし、何よりもデバッグ能力がつくと思います。
もしその際にお困りでありましたらメンターはぜひとも私へ(笑)MENTA も同じ名前で登録しており、LINEBOT開発をサポートしております。お気軽に相談くださいませ。
それでは、今回はこの辺で。
次回からは予約の管理画面の作成(フロントエンド)をしていきたいと思います。
最後までお読みいただきましてありがとうございました。