kun432's blog

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

Voiceflow TIPS #6 ワンショット発話

勝手にVoiceflow 夏休みAdvent Calendarをはじめました。

ということで、この記事は6日目の記事です。(1日と2日どうしよ。。。)

今日のテーマは「ワンショット発話」。なんのことやら?と思う方もいらっしゃるかと思いますが、例を出すと、あー、ってなると思います。


普通のスキルの利用ってこんな感じですよね。

アレクサ、レシピスキルをひらいて

レシピスキルです。なんのレシピを知りたいですか?

カレーライスのレシピを教えて

カレーライスのレシピをご紹介します。・・・・


ワンショット発話の場合はこういう感じです。

アレクサ、レシピスキルで、カレーライスのレシピを教えて

カレーライスのレシピをご紹介します。・・・・


慣れてくるとワンショット発話のほうが便利ですよね!通常のAlexaスキル開発だと、インテント作れば勝手にこれを実現してくれるんですが、Voiceflowの場合は意図的に作ってあげる必要があります。以前ご紹介したハンズオンのサンプルスキル「我が家の食卓」をベースにやってみます。

vf-handson-01.netlify.com

サンプルスキル

スキルの全体像はこんな感じです。

f:id:kun432:20190806230835p:plain

詳細はハンズオン資料を見ていただきたいのですが、キモとなるのは中央のInteraction Blockです。

f:id:kun432:20190806231052p:plain

[recipe_name]スロットがレシピ名になり、以下のようなサンプル発話を受け付けるインテントになります。

カレーライスのレシピを教えて

肉じゃがのレシピを教えて

カルボナーラ

これでも十分動きそうなものなのですが、Voiceflowの場合は会話フローに沿って処理が行われるため、フロー「外」のインテントを受け付けてくれません。

そこでIntent Blockを使います。Intent Blockは基本的にInteraction Blockと中身は同じものです。ただし、通常のブロック、例えばInteraction Blockの場合、

f:id:kun432:20190806232422p:plain

入り口と出口があるのに対して、Intent Blockは、

f:id:kun432:20190806232434p:plain

入り口がなく、出口のみになっています。つまり、会話フローの途中で使うのではなく、会話フローがここからはじまり、かつ、それがインテントで始まるというわけです。

百聞は一見に如かず、やってみましょう。

Advancedの中にあるIntentを、Canvasのどこでもよいのでドラッグ&ドロップします。

f:id:kun432:20190806232943p:plain

配置したIntent Blockをクリックするとメニューが出てきます。ここで一度、Intentsタブをクリックしてみましょう。

f:id:kun432:20190806233505p:plain

はい、見たことありますよね?Interaction Blockで設定したインテントです。

f:id:kun432:20190806233606p:plain

ちなみに、スロットもInteraction Blockのものと同じですね。

f:id:kun432:20190806233658p:plain

このように、Intent Blockでは、Interaction Blockで作成したインテントが共有されています。なので、会話フロー中で使っているインテントをフロー外でも共有することができるというわけですね。

ただし、Interaction Blockで設定していたIntentsのところだけは設定されませんので、ここだけ設定する必要があります。

f:id:kun432:20190806234031p:plain

"Select Intent"のドロップダウンをクリックして、インテントを選択します。ここではInteraction Blockと同じ「recipe」を選択します。

f:id:kun432:20190806235438p:plain

recipeを選択するとスロットと変数のマッピングが選択できるようになるので、ここもInteraction Blockと同じように設定します。ちなみにこの下にある"Can Fullfill Intent"は日本では非対応ですので無視してください。(Voiceflowが、というよりも、Alexa自体がまだ日本では非対応ですね)

f:id:kun432:20190806235453p:plain

Interaction Blockと同じように、サンプル発話で拾ったスロット値をIF Blockに渡して以降の処理を行うので、If Blockに線をつなげます。

f:id:kun432:20190806235508p:plain

はい、これで終了です。ではアップロードしてテストしてみます。普通に起動してインテントを実行する場合と、ワンショット発話の場合を試してみます。

f:id:kun432:20190806235307p:plain

呼び出し方が違うだけで、同じ動きになっています。あと、こんなふうに会話フローの途中で突然呼び出されても実行されます。

f:id:kun432:20190807001342p:plain

とてもかんたんですねー。


最近のVUIのベストプラクティス的に、フローチャート的な会話フローは行き詰まりやすい、様々なインテントを用意して多面的に多くのハッピーパスを作ることが重要、と言われています。

Voiceflowのような会話フローを作るツールにとっては非常に難しいことを言われているわけですが、だからといって会話のフローがゼロになるわけではありません。Voiceflowだと会話フローを効率的に作ることができる上、Intent Blockを使うことで、ワンショット発話や突然呼び出される場合などにも対応ができます。多くの会話の可能性に対応できるようにして使いやすいVUIスキルを作りたいものです。

ぜひご活用ください。