kun432's blog

技術ネタ、読書記録、など。2015年から人生をやり直し中です。

Voiceflow TIPS #32 Voiceflowで日本語スキル内課金(その1)

追記2019/09/23:色々確認し直して一部修正しました。

Advent Calendar、終わってからもう半月以上、経つのですねぇ・・・。

ちょっと落ち着いたところで、折を見てVoiceflow夏休みAdvent Calendar延長戦をやっていきたいと思います。ということで延長線の第1回は今日発表されたばかりの日本語スキル内課金を2回に分けてやってみたいと思います!

※第2回はこちら kun432.hatenablog.com

で、スキル内課金の実装を始める前に、スキル内課金について最低限知っとかないといけないことがあるのですが、ざっくりポイントだけ。

  • スキル内商品のタイプは3つ。「買い切り型」「サブスクリプション型」「消費型」
  • スキル内商品の購入パターンは2つ。”Buy”と”Upsell”。
  • キャンセルも実装する必要がある。
  • 購入・キャンセルまで誘導すると、あとの会話はAlexa側で用意されたものが発話される。つまり、スキル開発者がやるのは、商品を購入している場合・未購入の場合の処理の振り分けと、購入の手前・購入後の結果を踏まえた会話フローの作り込み、になる。
  • 料金は商品登録時に設定するだけで、スキルの発話には含めないようにする。(Amazonさん側でプライム向け割引等が行われるため)
  • 実装自体はできるけど、審査を通すにはいろいろルールがある(はず)

とりあえずこんなとこかなと思います。まずは一旦作ってみてスキル内課金対応スキルがどういう動きをするのか?を知るのが大事かなと思いますので、皆さんご存じの方のサンプルを参考に、「スキル内課金対応ハローワールド」を作っていきたいと思います。ちなみに、今回は「買い切り型」のデモです。

https://github.com/toshimin/skill-sample-nodejs-simple-hello-world/

スキルの仕様はこんな感じです。

  • 「こんにちは」というと、通常は、日本語で「こんにちは」と言い返してくれる。
  • 「買い切り型」の商品「英語パック」を持っていると、「こんにちは」というと「Hello」といってくれる
  • 「英語パックを購入」で”Buy"
  • 「英語で言って」と言った場合、「英語パック」を持っている場合は上と同じく「Hello」といってくれる。「英語パック」を持っていない場合は"Upsell"として商品を紹介、購入を促す。

ではやってみましょう。

スキルの全体像

例によって、エラー処理は甘めです。大まかな機能ごとに分けてみました。

追記2019/09/23:フロー見直しました

f:id:kun432:20190923234023p:plain

結構線がすごいことになってますね・・・"Buy"が見当たりませんが、後で説明しますので気にしないでください。では順にやっていきましょう。

商品の登録

まず最初に商品を登録します。商品の登録は”Payment Block”から行います。とりあえず適当なところにドラッグ&ドロップしてください。先は繋げなくて良いです。Payment Blockのメニューが表示されるので"Add Products"をクリックします。

f:id:kun432:20190921005138p:plain

まだ商品が登録されていないので"Nop products exists"と表示されています。"Create a product"をクリックして商品を登録しましょう。

f:id:kun432:20190921005313p:plain

商品の登録画面が開きます。商品の登録は6つのステップに分かれています。まず、1つ目のステップ、"Name & Description"で商品の概要を入力しましょう。以下の通り入力してください。終わったら”Next”をクリックします。

f:id:kun432:20190921005838p:plain

2つ目のステップ、"Pricing Model"では、商品のタイプを設定します。"One-Time Purchase(売り切り型)"、"Consumable(消費型)"、"Subscription(サブスクリプション型)"から選択可能です。今回は”One-Time Purchase”で1回売り切りとします。Tax Categoryは商品によって税額が変わるそうなので実際には専門家の確認が必要らしいですが、とりあえずここは"Software"を選んでおきます。終わったら”Next”をクリックします。

f:id:kun432:20190921010445p:plain

3つ目のステップ、"Availablility"では、どの国で買えるか、いくらで買えるか、など料金の設定を行います。デフォルトだと以下のようになっています。

f:id:kun432:20190921010658p:plain

とりあえず日本国内だけにしましょう。一番上のMarketplace Availabilityの下のMARKETPLACESをクリックすると、どこのストアで買えるか?を選べますので、"amazon.co.jp(JPY)"以外のチェックを全部外します。

f:id:kun432:20190921011018p:plain

こんな感じに日本だけになればOKです。金額は適当に変えてもいいです。One-Time Purchaseの場合は99〜9999円の間で指定してください。終わったら"Next"をクリックします。

f:id:kun432:20190921011211p:plain

追記2019/09/23:この項目は大幅に見直してます

4つ目のステップ、"Phrases"では、"Buy"につなげるためのサンプル発話スキル内商品を購入する際の「説明」としてサンプル発話を入力します。ここで入力した内容は、スキルの挙動には全く影響しませんが、審査を通す場合には、実際に購入を行う際の発話内容と一致してないと審査的にはNGのようです。詳しくは公式のドキュメントをご覧ください。(ただし、この設定がどこで表示されるのかまだちょっとわかってませんし、開発者コンソール側で設定する箇所が見つからないです・・・)

ちょっとここだけ設定項目に違和感あるのですが、とりあえず気にせずに、以下のような感じで3つまで設定します。1つ入力したら右端の+をクリックすると次の項目が入力可能になります。(最初の「アレクサ、・・・」はもしかすると不要かもしれませんが未確認)。終わったら"Next"をクリックします。

f:id:kun432:20190921011619p:plain

5つ目のステップ、"Product Icons"では商品のアイコンを設定します。ストアやAlexaアプリで表示されるようです(未確認)。大小それぞれ適当に設定してください。終わったら"Next"をクリックします。

f:id:kun432:20190921011958p:plain

最後のステップ、"Details"では、ストアでの検索キーワードや、カードでの購入後確認内容、購入・キャンセル実行時の商品説明を入力し、最後に審査時のテスト方法を入力します。とりあえず以下のような形で入力してください。最後に"Create Product"をクリックすると、完了です。

f:id:kun432:20190921012930p:plain

商品が登録されると以下のように表示されます。複数の商品を登録することもできますが、今回は一つだけです。”Return to Canvas”をクリックして、フローを作っていきましょう。

f:id:kun432:20190921013127p:plain

スキルの基本機能

はい、ではフローを作っていきます。まずは右上の基本機能からです。

追記2019/09/23:フロー見直しました

f:id:kun432:20190923234101p:plain

会話イメージだとこんな感じです。「英語パック」購入/未購入で動きが変わります。まず「英語パック」未購入時。


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

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

こんにちは

こんにちは。もっと聞きたいですか?

はい

こんにちは。もっと聞きたいですか?

いいえ

また呼んでくださいね。


「英語パック」購入時だとこうなります。


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

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

こんにちは

Hello。もっと聞きたいですか?

はい

Hello。もっと聞きたいですか?

いいえ

また呼んでくださいね。


では順にやっていきます。かんたんなところは省略してポイントのところだけ説明します。

Speak Blockを2つおいてこんな感じで設定してください。

f:id:kun432:20190921013852p:plainf:id:kun432:20190921013854p:plain

Interaction Blockをおいて、「こんにちは」といった場合と、「英語で言って」といった場合の分岐を作ります。

f:id:kun432:20190921014741p:plainf:id:kun432:20190921014750p:plain

「こんにちは」といった場合の標準フローをまず作りましょう。「こんにちは」といった場合、「英語パック」の購入有無で、日本語で喋らせるのか、英語で喋らせるのかを分岐させる必要があります。商品の購入有無はUser Info Blockを使ってチェックします。"User Info Block”をおいて、Interaction Blockからつなげます。そして、"+ Add Permission Request"をクリックします。

f:id:kun432:20190921015322p:plain

"Check Permission Enabled" で "Product" を選択します。すると、"Check If Product Purchased"で対象の商品を購入しているかどうかを選択可能になりますので、ここで「英語パック」を選択します。

f:id:kun432:20190921015534p:plain

これで、「英語パック購入済」の場合と「英語パック未購入(fail)」の場合で分岐するようになりますので、それぞれSpeakで発話内容を変えておきます。英語の場合はPollyを使うようにすればよいですね。

f:id:kun432:20190921020045p:plainf:id:kun432:20190921020053p:plain

最後に「もっと聞きたいですか?」という流れに合わせて、2つのSpeak Blockからntenteraction Blockにつないで、Interaction BlockでYesIntent/NoIntentで分岐、「はい」の場合は、もう一度User Info Blockまで戻して、「いいえ」の場合はFlow BlockでStop Flowに流して終わらせます。

f:id:kun432:20190921020728p:plain

基本フローはこれで終わりです。最初のInteraction Blockの「英語で言って」のインテントはUpsellにつながるので、そこで説明したいと思います。

追記2019/09/23:全体フローの変更に伴い、少し追記しました

さて、今の時点でこんな感じになってると思います。

f:id:kun432:20190923183026p:plain

全体フローと位置取りがあっていたほうがわかりやすいと思うので、少し位置だけ調整しておきますね。スキルの挙動とは全く関係ありません。

f:id:kun432:20190923183436p:plain


現時点では、まだ購入処理ができてないので、ただの「こんにちは」と言ってくれるだけのスキル(英語の流れに行くこともない)ですが、商品の登録方法と、登録済み商品の購入有無をUser Info Blockでチェックする、ということだけ覚えていただければと思います。

購入処理を用意すると一気に面白くなりますのでお楽しみに。続きは以下。