kun432's blog

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

Voiceflowにおける会話のコンテキストを考える ②コンテキストのスイッチ

f:id:kun432:20200724191613p:plain

Voiceflowにおける会話のコンテキストを考える」シリーズの第2回です。今回は「コンテキストの切り替え」です。

第1回はこちら。

目次

②コンテキストのスイッチ

前回の最後に少し紹介した例を振り返ってみましょう。

いらっしゃいませ。ご注文は何になさいますか?

コーヒーを一つ。

砂糖とミルクはおつけしますか?

あ、そうだ、営業時間は何時まで?

営業時間は9:00〜22:00です。ところで砂糖とミルクはおつけしますか?

お願いします

途中で会話の趣旨が「注文を受け付ける」から「営業時間を聞く」に変わっていますよね。しかもそれが終わったら元の「注文」に戻ってます。このように会話のトピックが切り替わることを「コンテキストのスイッチ」といいます。

そして人間の会話ではこれが自然に行われます。

  • 注文をしているコンテキスト中に、営業時間を聞くという異なるコンテキストの会話が始まったら、自然にその内容にスイッチする。
  • 営業時間のコンテキストで必要な情報を得られたら、注文を受けているというコンテキストが継続していたことを記憶していて、元の会話のコンテキストに戻る。

そして、このとき同時に、人間はコンテキスト間の重み付けを認識しています。切り替わったコンテキストをあくまでも「一時的」なコンテキストとして元のコンテキストに戻るべきなのか、それとも元のコンテキスト自体を捨てて新しい「恒久的」なコンテキストに切り替えてしまうべきなのか、です。

上記のうち、今回のテーマは「一時的」なコンテキストスイッチです。そしてVoiceflowでこれを実現するのが「コマンド」です。

コマンド

「コマンド」って何?という方は多いかと思いますが、実はVoiceflowでスキルを作る場合(特に審査に出す場合)は必ず一度は触れています。これです。

f:id:kun432:20200908225508p:plain

Home Blockの下にある「Help」と「Stop」、これが「コマンド」です。Alexaスキルを審査に出す場合に必ず実装する必要がある「ヘルプ」と「ストップ」のインテントはここにあります。そしてこれらは「コマンド」を使って最初から組み込まれているのですね。

ためしにHelpの方をクリックしてみましょう。

f:id:kun432:20200914200215p:plain

右にメニューが表示されます。これはFlow Blockのメニューと同じですね。"Enter Flow"をクリックしてみてください。

f:id:kun432:20200914200105p:plain

「ヘルプ」のFlowが開きました。メッセージは日本語に直してますが、ほぼデフォルトのものです。「ヘルプ」と言ったら、スキルの説明をして、もとに戻るか?で「はい」「いいえ」を答えるというものです。「いいえ」の場合はExit Block、すなわちスキルが終了します。「はい」の場合にはどうなるでしょうか???

f:id:kun432:20200914211441p:plain

試してみましょう。

f:id:kun432:20200914211411p:plain

コーヒーを注文するコンテキストの会話フローの中でヘルプを2回言っています。そして、「ヘルプ」のやりとりが終わったあと、それぞれ呼び出したところに戻っているのがわかるでしょうか?図にするとこういう感じです。

f:id:kun432:20200914214607p:plain

つまり、現在の会話のメインのコンテキストから、一時的に別のコンテキストに飛んで、そのコンテキストが終わればもとのコンテキストに戻る、ということができます。スキルのメインのトピックとまではいかないけど、聞かれたらいつでも答える必要があって、かつ、メインのコンテキストの進行を邪魔しない、重要で短いコンテキストに飛ぶ場合によいでしょう。「ヘルプ」はこの用途にピッタリ合致しますね。

コマンドを追加する

では、コマンドを追加してみましょう。「営業時間」について答えるコマンドを追加したいと思います。Home Blockのグレーの部分をクリックすると右にメニューが表示されるので、"Add Command"をクリックします。

f:id:kun432:20200914220206p:plain

コマンドを実行するサブFlowと、コマンドのトリガーとなるインテントを設定するメニューが表示されます。順に設定していきましょう。

f:id:kun432:20200914220536p:plain

Flowの名前は "open hours flow" とします。Flow名を入力して"Create"をクリックします。

f:id:kun432:20200914220728p:plain

インテント名は "open_hours_intent" にします。こちらも同じように "Create" します。

f:id:kun432:20200914221046p:plain

インテントのサンプル発話を入力します。こんな感じでよいでしょう。

f:id:kun432:20200914221201p:plain

ではフローを作りましょう。"Enter Flow"をクリックします。

f:id:kun432:20200914221306p:plain

open hours flowの画面が開きました。Speak Blockをつなげて、営業時間を伝えるメッセージを入力します。コマンドで作ったFlowはフローの最後がどこにもつながっていなければ元の場所に戻るようになっていますので、これだけでOKです。(「あえて」終了したい場合に限り、Exit Blockを使うと、もとに戻ることなくスキル自体を終了できます。)

f:id:kun432:20200914221506p:plain

Homeアイコンをクリックして、もとのフローに戻りましょう。

f:id:kun432:20200914221754p:plain

ではアップロードしてテストしてみましょう。

f:id:kun432:20200914222327p:plain

うまくいきました!

でも「いらっしゃいませ」ともう一度言うのが少しおかしいですね。コマンドで元のフローに戻った場合、「直前」のSpeak Block「1つ分」が発話されるようになっています。したがって、以下のように「いらっしゃいませ」と「ご注文は何にしますか?」を別々のSpeak Blockを分けてあげるとうまくいきます。

f:id:kun432:20200914222724p:plain

f:id:kun432:20200914222742p:plain

まとめ

「Voiceflowにおける会話のコンテキスト」シリーズの第2回、コンテキストのスイッチ、特に「一時的」なスイッチについてご紹介しました。次回は「恒久的」なコンテキストのスイッチのやり方をご紹介します。