kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Voiceflow: Choice Stepのエラーハンドリングのアップデート

f:id:kun432:20210313005910p:plain

VoiceflowのUIがまた新しくなっています。その中で、Choice Stepのエラーハンドリングが改善されていますのでご紹介します。

これまでのChoice Stepのエラーハンドリング

Choice Stepのエラーハンドリングは以前の記事でご紹介していますが、少しおさらい。

Choice Stepでは、インテントごとに会話フローを分岐させることができます。どのインテントにもマッチしない発話が行われた場合の処理については、これまでは"Else"という設定のところで行えました。

f:id:kun432:20210807153110p:plain

"Else"での設定は2種類ありました。"Path"と"Reprompt"です。

f:id:kun432:20210807153728p:plain

"Path"の場合は、インテントの分岐と同じように、インテントにマッチしない場合のフローに分岐させることができました。以下の例だと、マッチしない場合の発話を行うSpeak Stepにつなげて、そこからChoice Blockに戻して再度ユーザの発話を受ける感じですね。

f:id:kun432:20210807153944p:plain

"Reprompt"の場合は、その場でマッチしない場合の発話を設定して、再度ユーザの発話を受けるようにできました。やっていることは上記と同じなので、上記のように分岐させる手間がなくなりますね。

f:id:kun432:20210807154026p:plain

"Reprompt"の場合、どのインテントにもマッチしないケースが2回続くと、スキルは自動的に終了されます。"Path"の場合にはそういうことはなく、"Else"に流れて独自のエラーフローにすることができます。最初の例のようにChoice Blockに戻すようにすると、マッチするまで延々とループします。この辺が違いでしょうか。

このように、想定していないインテントを受けた場合の処理は、"Path" か "Reprompt"のどちらかを選択するようになっていました。

新しいChoice Stepのエラーハンドリング

新しいChoice Stepのエラーハンドリングを見てみましょう。サンプルとして以下のようなフローを用意しました。

f:id:kun432:20210807175914p:plain

よくあるコーヒーショップの注文を受けるデモです。スキルを起動すると、挨拶のメッセージが流れたあとに、2つのインテントで分岐します。

  • drink_intent
    • 飲み物の注文を行うインテント
  • hour_intent
    • 営業時間を聞くインテント

それぞれのインテントはこんな感じです。

f:id:kun432:20210807180256p:plain

f:id:kun432:20210807180309p:plain

これらのインテントにマッチしない場合の処理は、これまでは"Else"というメニューを選択していましたが、新しいメニューでは"No Match"という名前に変わっています。こちらのほうが直感的な感じがしますね。

f:id:kun432:20210807180522j:plain

"No Match"をクリックすると、これまでの"Else"のメニューと一見同じように見えますが、"Path"と"Reprompts"がチェックボックスに変わっていますね。これまでは「どちらかを選択」だったのが「両方を選択」するということが可能になっています。

f:id:kun432:20210807180731j:plain

Repromptsのみを選択した場合

両方選択してみたくなりますが、まずは一つづつ見てみましょう。最初に"Reprompts"の場合。こちらの場合は、どのインテントにもマッチしない場合に返すメッセージを下のに記載します。

f:id:kun432:20210807182532j:plain

テストしてみるとこうなります。いままでと変わりませんね。どのインテントに2回マッチしなければスキルが強制的に終了しています。

f:id:kun432:20210807182717p:plain

ここで下の方にある"System"をクリックしてみましょう。

f:id:kun432:20210807183704j:plain

新しくメッセージの入力欄が追加されましたね。

f:id:kun432:20210807183754j:plain

ここで別のメッセージを入れてみます。

f:id:kun432:20210807185236j:plain

テストしてみるとこうなります。

f:id:kun432:20210807185329p:plain

インテントにマッチしない1回目と2回目でメッセージが変わっていますね。これまでは、1回目にメッセージを発話して、2回目でスキル終了していましたが、このようにマッチしない回数に応じてメッセージを変えるようになっており、また追加した分、スキル強制終了までの猶予も増えています。

では、何個まで追加できるのでしょうか?ということで、試してみたところ3個まで設定できるようです。3個目のメッセージを追加すると、"System"がグレーアウトしていますね。

f:id:kun432:20210807184240p:plain

テストしてみるとこうなります。

f:id:kun432:20210807184417p:plain

どのインテントにもマッチしないというのが1回ならはともかく、2回以上マッチしない場合、ユーザの発話の問題の可能性もありますが、インテントに紐づくサンプル発話が足りなかったり、ユーザに正しく使い方を伝えきれていないという可能性が高いです。こういった場合でも、メッセージを変えることで可能な限りフォローできるようになったと考えていいのではないかと思います。

Pathのみを選択した場合

"Path"の場合は、どのインテントにもマッチしない場合に独自のフローに流すための分岐を作ってくれます。これまで"Else"となっていたところが"No Match"になっていますね。

f:id:kun432:20210807185505j:plain

こちらの方はこれまでと変わりません。唯一変わったのは、"No Match"と表示されている文字を変更することができるようになっています。

"Path"をクリックします。

f:id:kun432:20210807185824j:plain

"Path Label"と記載されている下の入力欄に"No Match"とありますね。

f:id:kun432:20210807185929j:plain

これを変更すると、キャンバス上の表示も変わります。

f:id:kun432:20210807190045j:plain

Reprompts + Pathを両方選択した場合

では両方選択した場合にどうなるかやってみましょう。"Reprompts"と"Path"を両方選択して、"Reprompts"のメッセージも最大の3つを設定します。

f:id:kun432:20210807190737j:plain

"Path"の分岐にSpeak Stepを追加してこちらにもメッセージを追加しておきます。

f:id:kun432:20210807190900j:plain

テストしてみましょう。

f:id:kun432:20210807192803p:plain

両方設定した場合は、"Reprompts"で設定したメッセージが順番に返されたあとで、"Path"で設定したメッセージが返されているのがわかりますね。

RepromptsとPathを組み合わせることで、インテントにマッチしない場合にメッセージを変えるだけでなく、最終的に独自の処理フローに流してより細かくフォローアップできるというわけですね。

まとめ

予めインテントとそれに紐づくサンプル発話を用意しておくというのが今の音声アプリの標準的な仕組みですが、すべてのユーザの発話を最初からカバーすることは困難です。想定外の発話だったとしても、発話例のヒントをいろんな言い方で伝えたり、独自のエラーハンドリングフローで制御することで、なるだけ多くのユーザをうまく誘導できるとよいですね!