kun432's blog

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

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

Voiceflow TIPS #33 Voiceflowで日本語スキル内課金(その2)※2019/09/23大幅に修正

追記:2019/09/23 一通りフローについては確認ができましたので、大幅に修正しました。以前の記事をご覧になられた方は、お手数ですが改めてご覧いただければと思います。

前回に続いて、スキル内課金の続きをやっていきます。

今日はUpsellの購入処理です。早速やっていきましょう。

購入処理(Upsell)

f:id:kun432:20190923234101p:plain

"Upsell"の場合は、前提として「英語パック」未購入状態で「英語で言って」という発話が行われた場合になります。つまり、未課金ユーザが課金が必要な有料コンテンツに対してアクセスしてきた場合に購入を促すようなフローですね。こんな感じになります。


アレクサ、「プレミアムハローワールド」をひらいて

プレミアムハローワールドへようこそ。「こんにちは」と話しかけてください。英語の「こんにちは」を聞きたい時は、「英語で言って」と言ってください。どうしますか?

英語で言って

英語の「こんにちは」を聞くには、英語パックが必要です。詳しく聞きたいですか?

はい

英語パックを購入すると、英語で「こんにちは」と言ってくれます。 ・・・(料金等の説明)・・・。同意して、購入しますか?

はい

注文を確定するために、4桁の確認コードを言ってください。

一二三四

はい、英語パックの購入処理が完了しました。(基本フローに戻る)「こんにちは」と話しかけてください。・・・


ちなみに、紫の部分は、Alexa側ですべてやってくれますので、フローの中で発話を作り込む必要はありません。

では、フローを作っていきます。基本機能のフローで作ったInteraction Blockの「英語で言って」のインテントから分岐させる形で作っていきます。

まずは、基本フローと同じように商品を購入しているかどうかをチェックするためのUser Info BlockをおいてInteraction Blockからつなげます。設定も同じです。

f:id:kun432:20190923185419p:plain

購入済の場合は、基本フローで既に作ってある、英語で発話するSpeak Blockにつなげます。

f:id:kun432:20190923185633p:plain

未購入の場合は、購入を促すためのUpsellのフローを作っていきます。今日の本題ですね。まず、Speak Blockをつなげて、商品について説明を聞くかを発話させます。

f:id:kun432:20190923190255p:plain

Interaction BlockをおいてYes Intent/No Intentで確認・分岐を行います。No・Yesの順番になってることにご注意ください(配置上こうしてます)。

f:id:kun432:20190923212225p:plain

「はい」と答えた場合は、いよいよ購入です。一番最初に商品登録の際に作っておいたPayment Blockをフローにつなげます。ちょっと離れた場所においているのは、あとで説明します。そしてPayment Blockの設定で購入する商品を選択しますので「英語パック」を選択してください。

f:id:kun432:20190923212641p:plain

Payment Blockの成功・失敗は、「買い切り型」「サブスクリプション型」の場合は判断して処理を変えたりする必要はないようです。なぜかというと、Payment Blockが実行されると、商品内容・料金の説明、および購入の最終意思などの課金関連のやりとりが開始されるのですが、この部分はAlexa側で自動的に発話され、スキル側では考慮する必要がないためです。また、この課金処理の結果についても同様にAlexa側で自動的に発話されるため、スキル側で結果を見て発話する必要はありません(二重に繰り返して発話しちゃうことになるため)。

ただし、例外として、消費型の場合は、成功・失敗の結果に応じて商品数の増減を考慮する必要があるため、きちんと処理を分ける必要があります。ここはまた別の機会にご紹介したいと思います。

今回は「買い切り型」でのサンプルなので、購入処理がどういう結果になったとしても、スキルが継続するようにすればよいので、基本フローに戻しておくようにします。

f:id:kun432:20190924001327p:plain

あと、商品説明を聞くか確認したところで「いいえ」となった場合についても、Speak Blockを使って基本フローに戻るようにしておきます。

f:id:kun432:20190924001337p:plain

はい、これでUpsellの購入処理は完了です。

購入処理(Buy)

f:id:kun432:20190923234101p:plain

追記:2019/09/23 Buyについては、公式に確認した中でいろいろ誤解があり、以前のやり方に誤りがあることがわかりましたので、大幅に修正してます。

”Upsell"は、会話フローに沿って、未課金ユーザが有料コンテンツにアクセスしてきた際に課金処理へ誘導するパターンだったのに対し、明示的な購入意思がユーザから伝えられた場合の処理が"Buy"になります。全体でいうと左下になります。会話の流れはこんな感じです。


アレクサ、「プレミアムハローワールド」をひらいて

プレミアムハローワールドへようこそ。「こんにちは」と話しかけてください。英語の「こんにちは」を聞きたい時は、「英語で言って」と言ってください。どうしますか?

英語パックを購入

英語パックを購入すると、英語で「こんにちは」と言ってくれます。 ・・・(料金等の説明)・・・。同意して、購入しますか?(あとはUpsellと同じ)


こちらは会話フローに沿う必要はなく、いつでも受け付けることができる方が良いので、Intent Blockを使います。こんな感じで、Buy用のインテントを作ってください。ちなみにサンプル発話は商品登録時に設定したものと同じものが含まれるようにしてください。

f:id:kun432:20190924003257p:plainf:id:kun432:20190924003316p:plain

次にUser Info Blockにつなげて、すでに商品を持っているかどうかをチェックします。

f:id:kun432:20190924003901p:plain

持っている場合は購入する必要はありませんので、Speak Blockで購入済みであることを伝えて、基本フローに戻します。

f:id:kun432:20190924004757p:plain

持っていない場合はPayment Blockにつないで、購入処理に進みます。したがって、あとの流れはUpsellと同じになります。(Payment Blockを予めこのあたりに置いたのは、Buyのフローからつなぎやすくしたかったためでした。)

f:id:kun432:20190924004740p:plain

はい、これでBuyも完了です。

キャンセル処理

f:id:kun432:20190923234101p:plain

最後にキャンセルです。全体でいうと左の真中部分ですね。キャンセルは、前提として「英語パック」購入状態で「英語パックをキャンセル」という発話が行われた場合になります。会話の流れはこんな感じです。


アレクサ、「プレミアムハローワールド」をひらいて

プレミアムハローワールドへようこそ。「こんにちは」と話しかけてください。英語の「こんにちは」を聞きたい時は、「英語で言って」と言ってください。どうしますか?

英語パックをキャンセル

返金については、・・・。(基本フローに戻る)「こんにちは」と話しかけてください。・・・


キャンセルもBuyと同じようにいつでも受け付けれるようにIntent Blockを使います。「商品をキャンセル」「商品を返品」といった発話に対応するインテントを用意します。

f:id:kun432:20190924005430p:plainf:id:kun432:20190924005438p:plain

Buyの時と同様に、次にUser Info Blockにつなげて、すでに商品を持っているかどうかをチェックします。

f:id:kun432:20190924005613p:plain

で、Buyの時とは逆で、商品をまだ持ってない場合はキャンセルできないので、Speak Blockで未購入であることを伝えて、基本フローに戻します。

f:id:kun432:20190924010434p:plain

購入済みの場合はキャンセルに進みます。購入済み商品のキャンセルはCancel Payment Blockを使います。User Info Blockからつなげて、キャンセルする商品は「英語パック」を選びます。

f:id:kun432:20190924010922p:plain

最後に、Cancel Payment Blockから基本フローに戻るようにします。ここもPayment Block同様、「買い切り型」の場合は、成功・失敗を区別する必要はないでしょう。購入処理と同様に、キャンセル処理でもメッセージはAlexa側で自動で返されますし、さらに「買い切り型」の場合のキャンセルは「返金」等の扱いになりますので、スキル提供者側で何かしらの処理が必要になると思われるためです。(提供者側が何もしなければ購入済み状態のままになる。)つまり、あくまでも「返金」の受付だけみたいな感じですね。このあたりは提供タイプによって変わってくると思います。「サブスクリプション型」や「消費型」の場合についてはまた別の機会に確認したいと思います。

f:id:kun432:20190924013211p:plain

はい、ということで、キャンセルも終わりましたので、これですべての処理が完了しました。お疲れさまでした!

テスト

では、テストしてみましょう。"Upload to Alexa"をクリックして、開発者コンソールからテストします。

まずは「未購入」の状態で基本機能を試してみます。

f:id:kun432:20190924013612p:plain

はい、では購入してみましょう。"Upcell"の流れに進んでみたいと思います。

f:id:kun432:20190924013930p:plain

購入前と購入後にはAlexaアプリにカードが飛びます。

f:id:kun432:20190921185523p:plain

f:id:kun432:20190921185532p:plain

キャンセルしてみます。

f:id:kun432:20190921185919p:plain

キャンセルの場合もカードが飛びます。「買い切り型」の場合、キャンセルは返金処理になるので一旦はサポートの方で対応となるようですね。

f:id:kun432:20190921190218p:plain

ちなみに、テスト時は未購入状態に戻して繰り返しテストしたいですよね。その場合には、Alexa開発者コンソールのスキル内商品のページで強制的に購入状態をリセットできます。

f:id:kun432:20190924013427p:plain

最後に"Buy"です。購入状態をリセットして試してみます。

f:id:kun432:20190924014418p:plain

はい、こちらもきちんと動いてますねー、以上でテストは終了です!


とりあえず一通り動作するところまでは実装できました。ノンコーディングでここまでできるのは素晴らしいですね!

ただ、実際の審査に通るには色々とクリアすべき点があると思いますし、今回のデモでは「買い切り型」でやっていますが、「サブスクリプション型」「消費型」では違った考慮も必要になると思います。そのあたりは実際にスキルを作成・公開する予定ですので、その過程でまたまとめてみたいと思います。

現在、スキル内課金向けのTシャツキャンペーンや、グローバルなスキル内課金チャレンジも開催中ですので、ぜひ挑戦してみてください!