kun432's blog

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

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

Voiceflowでやってみるシチュエーショナルデザイン ③わかりやすくする Part2

f:id:kun432:20200719215135j:plain

Voiceflowでやってみるシチュエーショナルデザインの第3回Part2です。前回に引き続き「わかりやすくする」がテーマですが、シチュエーショナルデザインの日本語ドキュメントにあるプリンシパルをいくつかをピックアップしてVoiceflowで実装してみましょう。

Alexa道場のシチュエーショナルデザインの回はこちら。

シチュエーショナルデザインの日本語ドキュメントは以下にあります。

英文の「シチュエーショナルデザイン」のホワイトペーパーは以下でダウンロード可能です。

この記事は「Voiceflowでやってみるシチュエーショナルデザイン」シリーズの第3回 Part2の記事です。他の記事は以下にあります。よろしければあわせて読んでみてください。

第1回 第2回 第3回 Part1 第4回

効果的な呼び出し名を作成する

スキルの呼び出しは通常こういう形になると思います。

アレクサ、◯◯◯をひらいて

ただこれだけではなく以下のような呼び出し方もできます。

アレクサ、◯◯◯をひらいて、✕✕✕をして

アレクサ、◯◯◯で✕✕✕を調べて

スキル起動と同時に特定のインテントを呼び出す「ワンショット発話」という呼び出し方ですね。この場合、インテントとの組み合わせによっては発話が通常よりも非常に長くなる可能性があります。したがって、呼び出し名は一息で言えるような簡潔なものにしましょう、ということですね。

で、本題から少しそれますが、Voiceflowもワンショット発話に対応していますが、標準では動作しません。試しに前回の「お菓子フレンド」をワンショット発話で呼び出してみましょう。

f:id:kun432:20200720075741p:plain

よく見ると一応インテントは呼び出せているのですが、インテントの前のSpeak Blockも呼び出されていますね。ワンショット発話は面倒な前フリなしにインテントを呼び出すためのものなので、これは余計です。前回のフローを見てみてください。

f:id:kun432:20200720085212p:plain

Choice Blockにワンショットで直接呼び出したいインテントがありますが、その前にSpeak Blockがありますよね。Voiceflowでは通常、フローの流れの中でユーザの発話が必要なタイミングが来たときにしかインテント呼び出しができないようになっています。これは制限ということではなくて、フローがいわゆる「コンテキスト」「話の流れ」を表しているので、コンテキストや話の流れの「外」からは呼び出せちゃうと困るからなのですが、逆に言うと通り一辺倒の話の流れでしか対応ができないということでもあります。「ワンショット発話」のようにスキル外から直接呼び出したい場合や、いっそコンテキスト自体をいつでも変えれるようにしたい場合には都合が悪いですね。

そこでIntent Blockの出番です。Intent Blockを使うことで、インテントをフローのどこからでも、もっというとスキルの外からでも直接呼ぶことができるようになります。早速やってみましょう。Choice Blockの各インテントから流れる先のブロックにIntent Blockをつなげて、それぞれChoice Blockと同じインテントを設定します。

f:id:kun432:20200720092852p:plain

これで、各インテントには2つの流れができますので、「ワンショット発話」ができるということです。

f:id:kun432:20200720093641p:plain

試してみましょう。

f:id:kun432:20200720094537p:plain

できてますね!

前回「すべてのオプションをトップに配置すること」というのをやりましたが、あくまでもスキルが通常起動した流れの中でのトップであり、今回のように「スキルの外側からも呼び出せる」「スキルのどこからでも呼び出せる」というのはほんとうの意味での「トップ」といって良いかもしれませんね。

さらにこれを推し進めると、ちょっと前にご紹介したPrompt Blockを使うことになりますが、それについては以下の記事を参照していただければと思います。

呼び出し名について

またちょっと脱線します。先程はワンショット発話の場合を想定した呼び出し名の「長さ」というところがポイントになっていましたが、呼び出し名「そのもの」もとても重要です。

現在のAlexaスキルは、アプリストアから選んでもらって有効化し、呼び出し名を発話することでしか基本的にスキルを利用できません。したがって、

  • 呼び出し名が記憶に残るようなものじゃないと使ってもらえない。
  • 似たような呼び出し名のスキルがあるとそちらが起動したりする。

ということを意識する必要があります。そして大事なことは、

  • 呼び出し名をAlexaがきちんと認識できる必要がある

ということです。例えば、以下のようなスキル名があったとします。

  • 「柿のトリビア」 -「牡蠣のトリビア」

これ発音的には全く同じなのですね。Alexaに普通に話しかけるとどうなるでしょうか?マイクを使いましょう。

f:id:kun432:20200720110915p:plain

はい、「柿」でもなく「牡蠣」でもなく「カキ」でした。このように実際に「マイクを使って」アレクサがどのように認識するか?をきちんと把握しましょう。これは呼び出し名だけでなく、サンプル発話やスロットなどでも同様です。開発者コンソールのテストシミュレータを使ってるとタイピングですませちゃうことが多いと思いますが、必ずマイクまたは実機でテストすることをおすすめします。

また、呼び出し名はなんでもよいというわけではなくルールがあります。呼び出し名の要件については以下をご覧ください。

リストを使用して効果的なペース配分をする

今回の「お菓子フレンド」でも材料を説明しているところとかがそうですが、リスト的なものを列挙してアレクサに発話させる場合、普通だとこんな感じで読点(、)で区切ることが多いと思います。

f:id:kun432:20200720115953p:plain

実際に話させててみるとこんな感じになります。

別に悪くはないですが、リストの場合はもう少しゆっくりしたほうが良さそうです。ということで、SSMLの出番です。SSMLのbreakタグを使うと発話の中に休止を埋め込むことができます。VoiceflowではSpeak Blockの中でSSMLエディターを使えばかんたんです。やってみましょう。

リストの読点のあとにカーソルを挿入します。

f:id:kun432:20200720121031p:plain

"Add Effect"をクリックして、"Break"を選択、一番上の入力欄に"350ms"と入力してENTERキーを押します(350ミリ秒という意味です)。

f:id:kun432:20200720121151p:plain

Speak Blockの発話にbreakタグが挿入されました。これを繰り返して各項目の後ろに休止を入れていきます。最終的にはこんな感じです。

f:id:kun432:20200720121519p:plain

では、実際に話させてみましょう。

違いがわかりますでしょうか。SSMLを入れたほうがリストが聞き取りやすいですね。リストのように多くのものを読み上げる場合、そのままだと少しついていけない感がありますが、このようにSSMLを使って読み上げを調整することで、聞き取りやすさ・記憶しやすさが変わってきます。リストが長くなったり、ユーザが考える必要がある場合などはもう少し長くしたほうが良いようです。このあたりは実際に試してみることをおすすめします。


シチュエーショナルデザインの第3回「3. わかりやすくする」Part2でした。上記でご紹介した以外にも、いろいろ細かい点が記載されています。特にVoiceflowに限った話ではない物も多いので、ぜひ一度ご一読されることをおすすめします。

次回はシチュエーショナルデザインの最終回「4. 自然な会話にする: 一方的なコミュニケーションではなく、会話ができること」です。

続きはこちら