チャットボットなどの対話型UIにおける課題と解決策

Matty Mariansky

Meekanのプロダクトデザイナー。スロットマシンから金融に関するニュースサイトまで幅広くデザインを手がけています。

この記事はA List Apartからの翻訳転載です。配信元または著者の許可を得て配信しています。

Designing the Conversational UI

SlackやHipchat上でチーム間のスケジューリングをチャットボット形式でスムーズに実現する、Meekanというプロダクトがあります。この記事では、スマートスケジューリングサービスのMeekanのプロダクトデザイナーが、チャットボット形式のUIをデザインするにあたって気をつけた点や施した工夫などを紹介していきます。

sc1-quick-timed

スマートスケジューリングサービス Meekan(Slack robot版)

今回は対話型のUIをデザインすることの難しさを、いくつかの例を通して紹介しつつ、それに対してMeekanが見つけた解決方法を見ていきたいと思います。 

入力内容の検証

典型的なGUI、つまりフォームなどでユーザーに更なる情報を求めるときは、処理が行われる前に正しい形式で入力が行われているかどうかをあらゆる手を使って検証すると思います。

これは有効なメールアドレスか? これは電話番号か? このユーザーネームはすでに別の人に使われていないか? 項目によっては数字やあらかじめリストを準備し、そこから選ぶだけにするといったこともするでしょう。

対話型UIではこのようなことはできません。あなたの話相手は何でも自由に入力(発言)することができるので、正しい答えが返ってくるようにきちんと質問を考えなければなりませんし、可能な限りスマートに返答を処理する必要があります。

情報を集約するために要求をストックする

あなたのボットがTシャツを配っているとしましょう。そのボットはユーザーにサイズと色を聞かなければなりません。もしユーザーが「Mサイズの赤いTシャツが欲しい」と言ったとすると、あなたが欲しい情報はすでにそこにあります。

ですが、もしボットが勝手に会話を始めたり、ユーザーが「Tシャツを買ってもいいですか?」とだけ言ったとすると、情報の断片をかき集めていく必要があります。

ヒントを出す

可能な限り、オープンな質問(具体的な答えのない質問)は控え、あなたの求めている答えに誘導するようにしましょう。求めている答えの選択肢が少ない場合は、リストとして示してあげましょう。

サイズは何にしましょうか。M、L、XLがございます。

通常、全ての項目に対して別々に質問していくことが望ましいです。サイズについて答えを聞き出せたら、次に色を聞きましょう。一つの文章に色々な情報を入れてしまうと解析が難しくなるため、できるだけ具体的な答えを聞けるようにしましょう。

確認をする

入力内容が有効であった場合、内容を復唱し、ボットがきちんと要求を理解できているかを確かめてから次に進みましょう。

かしこまりました。Lサイズですね。色はいかがしましょうか。

何が間違っているかを説明する

もし入力内容が間違っていたら、あなたが受け取った情報と期待する情報で何が違っているのかを再度説明しましょう。もし可能であれば、ボットがそもそも理解できない答えなのか、それとも意味は通じるけれどこの場合受け入れられないのか、違いをきちんと示しておきましょう。

それでは、何色がよろしいでしょうか。

申し訳ございません。紫はございません。白と、グレー、ブラウン、赤、オレンジ、ピンク、黒がございます。どちらの色がよろしいでしょうか。

くぁwせdrftgyふじこlp

申し訳ございません、「くぁwせdrftgyふじこlp」は色でしょうか? 白とグレー、ブラウン、赤、ピンク、黒がございます。どちらの色がよろしいでしょうか。

グレー

かしこまりました! LサイズでグレーのTシャツですね!

許容する

ユーザーはリストの項目を指さしているのではなく、あなたと話しているということを忘れないでください。ユーザーが自分の欲しいものを表現する方法は何通りもあります。もしあなたがシャツのサイズを聞いているなら、「エクストラL」、「XL」、さらに「一番大きいサイズ」など、様々な言い方があり、どれもここでは同じ意味です。英語の木曜日という単語も「Thursday」、「thu」、「thrusday(スペル間違い)」もしかしたら明日を意味する「tomorrow」も、同じ木曜日のことを言っているのかもしれません。

タスクの切り替え

従来のGUIの話に戻しましょう。昔ながらのアプリは様々な機能を実行することができ、それは複数のウィンドウやページや画面に分けられます。

カレンダーのアプリがあるとしたら、スクリーンにその月のすべての会議を表示し、その会議の一つを編集するときは違うスクリーンに切り替わり、作業が終われば再び最初のスクリーンに戻ってくることができます。

これに対して、対話は文章であり、一本の長い糸のようなものです。どうやって別の機能に切り替えるのでしょうか。今あなたが実行中のタスクをどう把握するのでしょうか。Meekanでこれがどのように解消されているか見てみましょう。

ユーザーは新しいタスクを始めます。

Meekan、明日のチームミーティングの予定を入れておいて。

ボットは「新しいミーティングをスケジュールする」ステータスになり、必要な情報を集め始めるでしょう。しかしここで事態が変わります。ユーザーは新しいミーティングのスケジュールを立てるよりも先に、木曜日の議事録をチェックしたいと心変わりしました。

Meekan、私は木曜日どのくらい忙しいのかしら?

これは従来のGUIで言うと、「新しいミーティングを追加する」ウィンドウを閉じたり、キーボードのEscボタンを押すことと同じです。

この事態に対処する方法はいくつかあります。

変更を拒否する

ボット側でユーザーが違うタスクに切り替えたいということを察知したとき、ボットはユーザーに今行っているタスクを先に中断するかを尋ねます。

まだミーティングの予定入力が完了していません。もし現在のミーティングの登録を中止したい場合は「キャンセル」と言ってください。

もし現在のタスクに対してユーザーが多くの手順を踏む必要があったならば、今までの手順が水の泡となってしまうので、この施策が有効でしょう。

流れに沿って進む

ユーザーがまたもやタスクの切り替えを望んでおり、このタスクはあまり重要ではないため、ボットはすぐさま新しいタスクへと移るとします。この場合は、ユーザーに現状何が起こっているのか知らせることが大切です。すなわち、現在のタスクを中止し、新しいタスクに移っているということを伝えましょう。 

ここで、ボットはユーザーに対して次のミーティングの確認を求めていますが、ユーザーはそれをすっ飛ばして新しい予定を立てようとしています。

クリスが金曜日10:00AMのプロジェクトのキックオフミーティングにあなたを招待しています。承認しますか?

明日@jesseとミーティングを設定

わかりました。今この予定の確認を飛ばします。

明日のミーティング設定のためにカレンダーを参照しています…

前のタスクに戻る

タスクBを行うためタスクAを中止しました。Bは終了しましたが、もう一度Aに戻るべきでしょうか。

Meekanでは前の作業に戻ることが筋かと思いましたが、これはしばし混乱を招くようです(例えば、ユーザーはタスクAが再開されたとことに気づかず、もう一度最初からタスクAを開始しようとしました)。

もしもタスクを戻さなければならない場合は、適切なコミュニケーションを取る必要があります。そうすればユーザーは現状を把握し、双方のタスクに対する期待値をならすことができます。

もう一度Tシャツの例を見てみましょう。これならば問題はないでしょう。

お客様のサイズは何でしょう。M、L、XLがございます。

L

かしこまりました。Lサイズですね。それでは何色がよろしいでしょうか。

やっぱりXLにしてください。

かしこまりました。XLですね。何色がよろしいでしょうか。

タイムアウト

チャットなどが中断してしまうことがよくあります。何かを話している途中で、お昼ご飯に行ったり、会議に呼び出されたりなどして、戻る頃には何の会話をしていたか覚えていません。おまけにやりとりをするチャンネルでは別の議題を話している人も多くおり、書いていたことはスクロールされてしまい、忘れ去られます。

ボットを運用する際はこの点を理解しておくべきです。ユーザーが何か別のことを始め、そのまま一日不在で、帰ってきたときにはきっとまた何か新しいことを始めたりします。その場合、ボットは昨日のタスクは終了しておくべきでしょう。

必須となる情報の入力を待つ

時には進行上、絶対取得しなければならない情報があります。もしかしたら、基本的な仕様としてメールアドレスを必要とするかもしれません。もしかしたら、最初に何かを消去して、ユーザーが承認しない限り先に進めないものもあるかもしれません。 

GUI環境では、モーダルウィンドウが飛び出します。それはユーザーがこの質問を答えるまで全てのアクセスをブロックするためのものです。「本当に全てを削除しますか?」。そのウィンドウはユーザーが「はい」か「いいえ」をクリックするまでそこにあります。 

会話でこれをするとなると、ボットにユーザーから必要な情報を得るまで、すべてのアクションを拒否させるようにする必要があります。これは非常にうっとおしいものとなってしまうでしょう。

あなたが必要とするもの、そしてなぜそれが必要なのか説明することを忘れないようにしましょう。説明に何パターンか用意しておけばユーザーが何度もその質問を遮っていても、ボットは繰り返すことができます(ただしおそらく状況を悪化させるということは理解しておきましょう)

私が役目を果たすためには、あなたのスケジュールにアクセスしなければなりません。あなたのスケジュールと連携するため、このリンクにアクセスしてください。

明日ミーティングを入れて。

私は真剣です、私のスケジューリング機能を使うにはカレンダーの連携が必要です。

明日私は忙しいの?

私も早くあなたのスケジュールをチェックしてお役に立ちたいのです。お願いですから私が魔法を使うためにカレンダーと連携してください。

これは理想ではありません。この情報がないと本当に次の作業に進めないのかじっくり検討しましょう。もし可能であれば、知識に基づけて考えステップを踏みましょう。そうでなければ、何種類かの機能は残し、あなたが本当に必要になったとき再び情報を求めましょう。

リストから選択する

あなたのロボットの仕事によっては、ユーザーに最終的にリストから選択させなければならないところへ到達するでしょう。忘れないでください、この場合ドロップダウンメニューとコンボボックス、ラジオボタンは禁止です。

リストがあるときは、ユーザーに一つもしくはそれ以上の項目を選んでもらいましょう。ユーザーにどのオプションが良いか教えてもらうため、それぞれの項目はユニークな名前か数字を割り当てましょう。 

Meekan、明日のミーティングをキャンセルして。

 明日のミーティングは3つあります。どれをキャンセルしましょうか。

(1)10:00AMのプロジェクトキックオフ

(2)11:00AMのチーム会議

(3)2:30PMのジェイクとの1on1

3をキャンセル

わかりました。明日のジェイクとの1on1をキャンセルします。ジェイクにもお知らせを送信しておきます。

リストのミーティングに番号を振るというのは、ユーザーに項目を選ばせる最も簡単な方法です。

まとめ

まだまだこの領域にはルールというものがありません。自分たちのルールを作らなければならないのです。自分たちにとって何が良くて何が良くなかったのか、お互いに教え合いましょう。そしてそれをシェアし、話し、書き上げてみましょう。この領域のパイオニアになるためには、今がちょうどいいタイミングです。 

私が挙げた例で、何らかのアイディアが浮かんでくると嬉しいです。この記事をあなたのボットの世界への入り口になればと思います。さあボットを作りましょう!