Voiceflow夏休みAdvent Calendarの11日目です。
前回に引き続き、Voiceflowのヘルプについて、少し面白い使い方をやってみたいと思います。
前回のVoiceflowのヘルプインテント説明したとおり、Voiceflowのヘルプは、Flowを使っているので、「ヘルプ」を言ったタイミング(ただしくはその少し前)に戻ってきます。
文脈の流れを途切れさせることなく、ヘルプが動くということですね。であれば、文脈に応じてヘルプのメッセージを変えるとより人間らしくなりますよね?こんな感じのイメージです。
今日はこれをやってみたいと思います。
スキルの全体図
全体図はこんな感じです。前回のフローをベースに、赤枠のところを追加してます。
ヘルプはこんな感じ。コンバインブロックになっていたのを分解して、If Blockで分岐させてます。
では順に見ていきます。
メインのフロー
今回追加したところだけ説明します。それ以外のところは前回のエントリを参考にしてください。(画面キャプチャを追加しておきました!)
基本的な考え方としては、今どの文脈にいるか?を管理するために、ROOTフロー側で変数を用意して、ヘルプに行く前に文脈を表す変数をセット、ヘルプの中ではその変数を参照して分岐する、という形です。そこで再度、Voiceflowのヘルプインテント で説明したことを思い出してください。
抜粋します。
- Flow Blockの中でしか使えないフロー変数を定義できる。他のFlow Block(ROOTフローも含めて)からも見えない。
- ROOTフローで作成したプロジェクト変数は、グローバル変数となり、どこからでも読み書きできる。
- ROOTフローで作成したプロジェクト変数は、永続扱いとなり、セッションを跨いでも維持される。
- ROOTフローとFlow Blockでフロー変数の受け渡しができる
ヘルプはFlowになっています。なので、ROOTフロー内の変数の受け渡しは、グローバルであるプロジェクト変数にするか、Flowに変数を渡す必要があります。が、デフォルトで用意されているヘルプフローは変数の受け渡しができません。となると、プロジェクト変数で管理するしかありません。
また、プロジェクト変数の場合、永続扱いになります。つまりセッションをまたいでも保持されてしまいます。今回のケースでは、1セッションの中だけで管理すれば良いものなので、セッションをまたいで保持されると想定外のケースが起きる可能性もあります。その場合にはスキル起動時に初期化する必要があります。
前振りが長くなってしまいましたが、上記の点を抑えて、フローを変更していきましょう。
1. 文脈を管理するプロジェクト変数の作成
プロジェクト変数を作成します。ここでは"context"という名前にしました。ユーザの好きな色と数字を保持しておくためのフロー変数"favColor"、”favNumber”と別にプロジェクト変数として作成されているのがわかりますね。
2. プロジェクト変数の初期化
Homeと最初のSpeakの間に一つSet Blockを追加します。ここで”Context”を一旦初期化します。セットする値はなんでもいいんですけど、とりあえず”NONE”という値を入れておくようにしました。
3. 「色」の話の文脈をセット
最初のSpeakとCaptureが、ユーザの好きな「色」の話の「文脈」になりますので、この間に一つSet Blockを追加して”Context”にそれをセットします。ここでは”ASK_COLOR”という値を入れておくようにしました。
4. 「数字」の話の文脈をセット
上と同様にして、2番めのSpeakとCaptureが、ユーザの好きな「数字」の話の「文脈」になるので、ここにも一つSet Blockを追加して”Context”に”ASK_NUMBER”という値を入れるようにします。
メインのフローはこれで終わりです。ヘルプに行きましょう。
ヘルプ
最初にお伝えしたとおり、ここは一旦コンバインブロックになっているのを分解してから直していきます。
1. どの文脈から来たかをチェックして分岐
If Blockで”Context”の中身をチェックして、分岐させます。"Context"はプロジェクト変数なのでフローの中かららでも参照できます。"ASK_COLOR"なら色の文脈ということで1へ、"ASK_COLOR"なら数字の文脈ということで2へ、それ以外はElseというふうに分岐します。
2. 分岐に応じたメッセージの設定
あとは、分岐に応じてメッセージを変えるだけです。
テスト
ではテストしてみましょう。
こんな感じで文脈に応じて、ヘルプの内容が変わっているがわかりますでしょうか?ユーザがどうすればいいかわからないタイミングに応じて、適切なヘルプを返せるようにすると面白いですね。
おまけ
ただ、ちょっといちいち「続けますか?」って確認するのウザいですね。ヘルプフローのChoiceとExitは取ってしまいましょう。併せて3つのSpeak Blockから「続けますか?」という部分もカットして、代わりに少し無音を入れてみます。
で再度テスト。
自然な感じになりましたね。
Exitしなければ元の場所に戻るというFlowの特徴を逆手に取るとこういうこともできます。ただし、ブロックの並べ方によっては戻る場所が適切でない・自然な会話にならない可能性もあると思うので、そのあたりは事前に検証してみることをおすすめします。
おまけ その2
メインのフロー、ブロックが増えちゃって見づらくなりましたね。一方通行のフローなので、こういう場合はコンバインブロックを使ってまとめましょう。ブロックの上にブロックをドラッグアンドドロップすればOKです。
コンバインブロックを右クリックすると名前の変更ができます。
非常にスッキリしますね!
まとめ
ということで、地味だけど奥が深いヘルプの話を2回に分けて説明しました。参考になれば幸いです。