スキル内課金使っていますか?そしてスキル内課金対応スキル作っていますか?私は使っていませんし作っていませんw
以前のLTでご紹介しましたが、スキル内課金の実装では、決められたエンドポイントに対して商品IDの購入・キャンセルの情報だけを投げれば一連の購入処理をよしなにやってくれるという、開発者からすると非常に実装が楽な反面、アレクサとユーザの会話がどういう風になるか?というのがわかりにくいです。
で、も一つ、スキル内課金商品の説明がいくつかありますが、あれも実際にはISP側でやってくれるのでどうやって使われるのかがわかりにくいですよね。このあたりが見えないと、スキル内課金につなげる会話をどう組み立てていいのかも迷いがちです。
ということで、今回はスキル内課金商品の説明がどういう風につかわれるのか?を調べてみました。
サンプル
サンプルは公式の「Premium Hello World」を使います。
これを日本語に変更してやってみたいと思います。(まあ日本語化された某レポジトリがあるのでそれを使っていますw)
前提
BUYもCANCELもディレクティブをMonetizationServiceClient経由で投げるだけです
return handlerInput.responseBuilder .addDirective({ type: 'Connections.SendRequest', name: 'Buy', payload: { InSkillProduct: { productId: theProduct[0].productId, }, }, token: 'correlationToken', }) .getResponse();
つまり商品IDと購入(BUY)かキャンセル(CANCEL)かだけです。商品の説明などは一切意識しません。つまりこれらはすべてアレクサ側で制御されます。
UPSELLだけちょっと違うのでそこは後ほど。
スキル内商品の登録
上記のレポジトリでは、買い切り型とサブスクリプション型が用意されているますが、買い切り型の方で説明します。
説明文がある箇所は4箇所あります。それぞれの用途を踏まえて、内容を微妙に変えてみました。サブスクリプション型もほとんど同じような感じで設定しました。
説明
ツールチップには以下とあります。
商品の説明やユーザーができることをわかりやすく説明した文章です。
まあシンプルな説明ということですね。ただgithubを見ると、以下ともあるので、どうもアレクサがしゃべる箇所があるようです。
Summary description of the product. Customers will hear this.
以下のように設定しました。
挨拶パックでは、様々な言語の挨拶を聞くことができます。
詳細な説明
ツールチップには以下とあります。
商品の機能や使用するための前提条件を説明した詳細な説明です。これは、オファーや画面付きデバイスに表示される購入カードで使用されます。
githubではこうです。
A full description explaining the product's functionality and any prerequisites to using it. Customers will see this.
より詳細な説明です。上記にあるように画面付きデバイスなどで表示されるようです。以下のように設定しました。
挨拶パックでは、フランス語、スペイン語、ヒンズー語など、様々な言語の挨拶を聞くことができます。
購入プロンプトの説明
ツールチップには以下とあります。
ユーザーが購入を実行したときに聴く商品の説明です。
githubの方も見てみると、
The description of the product a customer hears when making a purchase or when they cancel a subscription.
ということは購入時・キャンセル時にアレクサが話すようですね。以下のように設定してみます。ちょっと
挨拶パックを購入すると、フランス語、スペイン語、ヒンズー語など、様々な言語の挨拶を聞くことができます。ぜひご利用ください。
購入確認の説明
ツールチップには以下とあります。
Alexaコンパニオンアプリの購入後確認カードに表示される。商品の説明です。
githubはこう。
A description of the product that displays on the skill card in the Alexa app. Customers will see this.
購入後にアレクサアプリのほうに表示されるようですね。以下としました。
挨拶パックを購入しました。フランス語、スペイン語、ヒンズー語など、様々な言語の挨拶をお楽しみください。
確認
ではサンプルスキルを実際に動かしながらやってみましょう。念の為、買い切り型とサブスクリプション型の両方で確認します。
買い切り型
BUYの場合
BUYの場合の会話の流れはこんな感じです。
購入前の説明で「購入プロンプト」が発話され、その後料金等の説明が行われていますね。購入後に発話されているのは「説明」と同じ内容ですが、ここはスキル内で実装されているので「説明」が自動的に呼び出されているわけではありませんのでご注意ください(ややこしい)。
画面付きデバイスで実行した場合は「購入プロンプト」が発話されているところで以下のように表示されます。
ここで「詳細な説明」が画面に表示されるようです。
あと、Alexaアプリです。以前はアクティビティーに出ていたものがトップにでてくるようになっています。たぶんこれがスキルカードですね(引き続きアクティビティーにしかでないものもあるようです・・・わかりにくい)
ここで「購入確認の説明」が表示されるというわけですね。
CANCEL
キャンセルの場合です。
キャンセルの場合は特に何も出ません。画面付きデバイスもアレクサアプリのカードなどにも特に商品に関する説明は表示されませんでした。
サブスクリプション型
BUYの場合
おっと、サブスクリプションの場合は「購入プロンプト」が表示されずにいきなりサブスクリプションの説明に移るようです。
ただし、画面付きデバイスの場合は、買い切り型と同様に「詳細な説明」が表示されます。
アレクサアプリには特に何も表示されません。
CANCELの場合
キャンセルの場合、確認前に「購入プロンプト」が表示されるようです。画面付きデバイスやアレクサアプリのカード等には商品に関する説明は表示されませんでした。
UPSELLについて
サンプルコードではランダムでアップセルが呼び出されるように実装されています。該当のコードは以下です。
return handlerInput.responseBuilder .addDirective({ type: 'Connections.SendRequest', name: 'Upsell', payload: { InSkillProduct: { productId: greetingsPackProduct[0].productId, }, upsellMessage, }, token: 'correlationToken', }) .getResponse();
アップセルの場合のみ、ディレクティブに商品説明を含めて送る形になっています。これは、アップセルの場合、商品説明後に「もっと知りたいですか?」というユーザへの意思確認を行った上で購入処理につなげるためです(これがないと自分で確認用のインテントを用意しないといけなくなる)。なので実際の購入処理では商品説明は行われません。
まとめ
正直、ちょっとよくわからない結果になりました。買い切り型とサブスクリプション型で商品説明の有無が異なる、かつ、BUYとCANCELでそれぞれ異なる、というのは少し解せない感じがします。コードも見てみたんですが、特に問題なさそうです。
CANCELの場合、返金処理を伴う買い切り型と解約申込後の月末に解約されるサブスクリプションではまあなんとなく理解できる部分もあるかなぁとは思いますが、BUYの場合はどちらでも商品に関する説明はあっていいと思うのですが・・・
ただ、公式のドキュメントを見ても分かる通り、購入処理中のメッセージもそれぞれ異なっているので、意図があってそうなってるのなのかもしれません。消費型はともかく、買い切り型・サブスクリプション型の違いも意識してテストはしておいたほうがいいかなという気はします。
ということで、スキル内商品の説明がどのように使われるか?のまとめでした。