kun432's blog

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

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

Voiceflow TIPS #22 AMAZON.RepeatIntent/ResumeIntentを使ってみる

Voiceflow夏休みAdvent Calendarの22日目です。21日の分は週末にキャッチアップ!

ゲームを始めるときはコンフィグから始めるゲーマーの皆さん、こんばんわ。ということで、今日は普段もしかしたらあまり見てないかもしれない、設定画面の機能を少しだけご紹介します。

設定画面

Voiceflowではスキルごとに設定ができるようになっています。設定画面を表示するには、アップロードボタンのすぐ横にある「歯車」のアイコンをクリックします。

f:id:kun432:20190823012009p:plain

設定画面が開きました。タブが4つありますが、今日はBasicのタブだけです。その他の設定についてはまた別の機会に説明したいと思います(他のタブにも面白い機能があるので、ぜひぜひ調べてみてください)

Basicのタブです。ここにはプロジェクト名と呼び出し名があります。ここを修正すると変わります。あと、下の方に3つほどON/OFFできるスイッチがありますね。今日のテーマはこれです。後で説明します。

f:id:kun432:20190823012430p:plain

例によってサンプルとして以下のようなスキルを作成しましたのでそれを使って説明します。


アレクサ、「設定のテスト」をひらいて

設定のテストです。シーンごとに進んでよいかを確認しますので、進んでよければ、はい、と言ってください。いいえといった場合は、30病そこで待機した後、もう一度、進んでよいかをお聞きします。

シーン1です。進みますか?

はい

シーン2です。進みますか?

いいえ

(♪〜音楽〜♪)

シーン2です。進みますか?

はい

シーン3です。進みますか?

はい

おしまいです。


意味もなにもないスキルですが、設定の動きがよく分かると思いますので、今回はこれで進めたいと思います。

f:id:kun432:20190822202722p:plain

一部分だけ説明します。

f:id:kun432:20190822203039p:plain

この3つがひとかたまりで1ブロックとなってます。「シーン○です。次に進みますか」というSpeakと「はい」「いいえ」を取るInteraction Blockがメインで、「はい」といえば次のシーンに進みますし、「いいえ」というと、下のSpeak Blockで30秒の音楽を流して、再度、次に進むかを聞いてきます。

で、これを普通に実行すると、こうなります。

f:id:kun432:20190822203725p:plain

ストーリー性のあるようなスキルとかはこういう感じですね。

各設定について

3つの設定について順次説明していきますね。

Allow Users to Repeat

f:id:kun432:20190823014347p:plain

デフォルトでONになっています。この機能は、ユーザが発話を求められるタイミングで「もう一度言って」というと、Alexaの前回の発話内容を繰り返してくれるという機能です。Alexaスキルでいうところの、AMAZON.repeatIntentという標準インテントですね。実際にどういうふうに動くのかを見て見ましょう。

f:id:kun432:20190823014659p:plain

こんな感じで、Interaction Blockでユーザの発話時に、「もう一度言って」というと直前の発話を繰り返してくれます。例えば、クイズスキルとかで問題聞き逃したとか、レシピスキルでもう一回聞きたいとかの場合に良さげです。

では、これをオフにするとどうなるでしょうか?Allow Users to Repeatをオフにすると、Complete Repeatも消えてしまいました。ということは関連する設定のようですね。

f:id:kun432:20190823015015p:plain

とりあえず試してみましょう。

f:id:kun432:20190823015421p:plain

スキルが終了していまいました・・・実はこれ当然で「もう一度言って」を受けるのはInteraction Blockなんですが、Interaction Blockに今あるのは「はい」と「いいえ」だけなんですね。これ以外のインテントを発話した場合はElseに行くんですが、今回はElseを用意していません。なのでインテントが見つからないということで終了してしまったのです。つまり、この機能を有効化しておくと、意識しなくても「もう一度行って」というインテントが用意されているということですね!

ちなみに、回避するには、以下のようにElse Pathで想定していないインテント以外が来た場合にもとに戻すか、

f:id:kun432:20190823020129p:plain

Interaction Blockで「敢えて」RepeatIntentを呼び出してフローをつなげるか、ですね。こちらのほうが少なくとも「もう一度言って」に対応できるので良さそうですが、そもそもそんな事を考えなくてもデフォルトでRepeatIntentが使えるのでとても便利ですね!

f:id:kun432:20190823020400p:plain

Complete Repeat

f:id:kun432:20190823014351p:plain

Allow Users to Repeatを無効化すると、選べなくなってしまったので、少なくともAllow Users to Repeatは有効化しておきます。で、ここのオン/オフの違いは少しわかりにくいので、実例をお見せします。

起動直後のブロックがわかりやすいです。

f:id:kun432:20190823021936p:plain

Complete Repeatがオンの場合です。

f:id:kun432:20190823022242p:plain

次に、Complete Repeatがオフの場合です。

f:id:kun432:20190823022306p:plain

違いがわかりますでしょうか?Complete Repeatがオンの場合は直前のSpeak Blockだけでなく、その手前のSpeak Blockも発話されています。オフの場合は逆に直前のSpeak Blockだけが発話されています。

TIPS #16 音声データ・音楽データの再生の際に、Speak Blockは何個並べても発話としては一つの応答になるということをお伝えしましたが、この設定を無効にすると、あくまでもRepeatIntentの動作に限っては、ブロックの並べ方に応じた発話が繰り返されるということですね。

このあたりを見ていると、VUIの弱点である「聞いたことを覚えられない」というところについて、Voiceflowがとてもよく考えているのが分かりますね!

Restart Every Session

f:id:kun432:20190823014355p:plain

AMAZON.RepeatIntentとは少し違いますが、この設定は「スキルの起動時に毎回最初に戻るか?」という設定になってて、デフォルトはONになってます。要は「スキルを途中で止めた後、もう一度起動するとまた最初から始まる」ということです。別におかしくもなんともないですね。

逆にこれをオフにするとどうなるでしょうか?

f:id:kun432:20190823023842p:plain

また新たなスイッチが出てきました。「Allow Users to Resume」、「ユーザにレジュームさせるかさせないか」という意味になります。つまり、「Restart Every Session」を無効化すると、スキルは前回の途中から再実行されるということですね!これも実は標準ビルトインでAMAZON.ResumeIntentというものがあり、こちらは逆に普段はオフになっていて、ここを無効化するとAMAZON.ResumeIntentが有効化される(日本語って難しい・・・)ということのようですね。

Allow Users to Resumeを更に有効化すると、こんな感じで、レジュームさせるときのメッセージが設定できるようです。実際に設定してみるとこういう感じで動きます。

f:id:kun432:20190823025948p:plain

きちんと、前回の途中から再開しているのがわかりますでしょうか?アドベンチャーゲームのような1回のプレーが長いスキルだと役に立つシーンがあるかもしれませんね!


はい、いかがでしたか?普段は全く意識しなくても、実は色々考えられていてきちんと組み込まれているよ、ということが設定画面からわかります、というお話でした。いろいろ試してみると面白いと思います。

また、設定画面には他にもいろいろ面白いものがありまして、

  • アカウントリンキングの設定
  • スキルイベントの設定

あたりはなんとかAdvent Calendarの中で紹介したいなぁと思っています。

あと、実はこんな新機能が・・・・・

f:id:kun432:20190823030428p:plain

(残念ながら現在は不具合で動かない様子、、、残念。。。。)