kun432's blog

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

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

Voiceflow TIPS #8 いろんなランダム

Voiceflow夏休みAdvent Calendar、遅ればせながら8日目の穴埋めです。

5日目で「重複しないランダムな数字を取得したい」方法をご紹介しました。何かしらのランダムな処理を行いたい場合は、他にも色々方法がありますので、ご紹介します。


Random Block

Random Blockはこんな感じで初期状態だと分岐がない状態です"Add Path"をクリックします。

f:id:kun432:20190812111152p:plain

すると2つに分岐します。どんどん"Add Path"を追加します。

f:id:kun432:20190812111329p:plain

こんな感じで分岐がどんどん増えていきます。

f:id:kun432:20190812111428p:plain

それぞれにSpeak Blockをつなげます。メッセージはこういうふうにそれぞれの分岐で数字を変えておきます。

f:id:kun432:20190812112153p:plain

Interactionを使って、繰り返すかの確認を追加します。「はい」の場合は再度Random Blockに戻るようにします。

f:id:kun432:20190812112400p:plain

ではテストしてみます。

f:id:kun432:20190812112906p:plain

数字がランダムに並んでいるのがわかるかと思います。ただ、重複してる箇所がいくつかありますね。重複しないようにするには、Random Blockにある"No Duplicates"にチェックを入れます。

f:id:kun432:20190812113049p:plain

再度テストしてみます。

f:id:kun432:20190812113342p:plain

今回は分岐を5つ用意したので、最初の5回で重複していないことがわかりますでしょうか?一巡すると再度また繰り返しになり次の5回でも重複していませんね。

こんな感じで、Random Blockはシンプルに分岐だけを作るためのブロックになっています。特に変数も使わずに喋らせる内容をランダムにすることができます。

ただし、喋らせる内容だけをランダムにするならSpeak Blockだけでできます。

Speak Block

Speak Blockの一番下にある"Output Random Entry"にチェックを入れると、"Add Speech"や"Add Audio"で追加したそれぞれをランダムで発話/再生させることができます。

f:id:kun432:20190812114728p:plain

めちゃめちゃブロックとしてはシンプルになります。ただしこの場合は、重複しないようにすることはできません。

Random Block+変数

最初の2つの例は、どちらも変数を使わずに、Speakで発話させる内容を直接変えていました。シンプルでわかりやすいのですが、そこから応用を効かせることはできません。そこでRandom Blockに変数を組み合わせて、少し応用の幅を持たせてみましょう。

変数を作成します。

f:id:kun432:20190812120008p:plain

RandomのあとにSet Blockをおいて、変数をそれぞれセットします。

f:id:kun432:20190812120038p:plain

Speak Blockをつなげて、変数を発話で喋らせます。

f:id:kun432:20190812120114p:plain

この方法だと、変数を別の目的で使うことも可能ですねー。


ユースケースに合わせて最適な方法を選択すればよいかと思いますが、色々やり方があって迷うかもしれませんね。個人的に考えるユースケースはこんな感じかなぁと思います。

  • Speak Block
    • ランダムの数が少ない場合
    • 発話のバリエーションを増やすだけで、複雑な判断が不要で、重複しても問題ない場合
    • 例えば、いつも同じ挨拶ばかりだとロボットっぽくなるので「こんにちは」「お元気ですか」みたいに同じ意味だけど言い方だけを変えたい場合など
  • Random Block
    • ランダムの数が少ない場合
    • 発話の内容を変えたい場合、複雑な判断は不要だけど、重複チェックがほしい場合
    • 例えば、豆知識みたいに話す内容そのものを変えたい場合など
  • Random Block+変数
    • ランダムの数が少ない場合
    • 発話内容以外にも変えたい場合、複雑な判断は不要だけど、重複チェックがほしい場合
    • 発話以外の用途でランダム性を活かしたい場合
    • 例えば、足し算などの問題をランダムに作る場合など
  • TIPS #5のCode Block
    • ランダムの数が多い場合
    • ランダム性をいろんな処理に応用したい場合、複雑な判断を行いたい場合、重複チェックもほしい場合
    • 例えば、Integration BlockでGoogleスプレッドシートからのデータ取得をランダムかつ重複なしでやりたい場合

数が少ないうちやVoiceflowに慣れてないうちは、Random Blockなどを使うほうがわかりやすくて楽かもしれません。ただし、数が増えてきたり複雑な処理をやる場合には、今回ご紹介したやり方は徐々に辛くなっていくので、ケースバイケースで使い分けていただければと思います。