日本国のマイナンバーを登録した場合については、今回は確認しておりません。「支払設定」と「納税情報」の登録が終わったら、スキルの作成に取り掛かります。re:newalに詳しく、記載しておりますので、そちらのご確認よろしくお願いします。今回は、スキル内課金を既存のスキルに組み込むので、スキル内にスキル内商品を登録しなければなりません。商品と呼ばれているのか?1つのスキルに複数のスキル内課金を登録でき、ユーザーはお金を支払って購入するからです。スキルの作成画面から「スキル内商品」を選択します。画面右上の「スキル内商品の作成」を押します。「新しいスキル内商品を作成」画面で「スキル内商品名」を入力し「スキル内商品の種類を選択」で今回は「消費型」を選択します。入力が終わったら再度、画面右上の「スキル内商品の作成」を押します。スキル内商品画面です。商品IDは自動的に割り振られています。商品IDはコードでの開発の際に必要になってきます。サポートされている言語を「日本語」を選択し「編集」を押します。表示名は既に入力済みなので、それ以外を全て入力。アイコン画像をドラッグ&ドロップで登録後、右上の「保存」ボタンを押します。選択し、価格を日本円で設定します。JPY」と最安値を設定しています。99円より安い価格設定はできません。「テスト」購入する際のテスト手順をここに記載します。全て入力が完了したら、右上の「保存」ボタンを押します。スキル内商品画面に戻ると、先ほど作成した商品が「リンク可能な商品」に登録されており、商品右端のアクションの「有効化」をクリックします。すると画面のようになり「リンクした商品」に作成した商品が一覧として表示されます。有効化しておかないとコードから呼び出すことができません。開発者コンソールでスキルにスキル商品を組み込むスキル商品を購入してもらうため、購入フローに移動するためのインテントを追加する必要があります。今回追加したカスタムインテントは、購入用のインテントと返金用のインテントです。購入しますか?の質問に対して「はい」「いいえ」とユーザーが言うと予想されるので、ビルドインインテントである「AMAZON.YesIntent」と「AMAZON.NoIntent」を追加します。「AMAZON.YesIntent」「AMAZON.NoIntent」には「はい」「いいえ」以外に「そうです」「いいよ」「そうじゃない」のような一般的な肯定語、否定語が含まれており、別途カスタムインテントを作成する必要がないので便利です。Lambdaコードを編集、デプロイできます。DynamoDBを使用するなど、手の込んだことをする場合は「ユーザー定義のプロビジョニング」でスキルを作成することをお勧めします。re:newalに詳しく、記載しておりますので、そちらのご確認よろしくお願いします。Lambdaコードに購入リクエストハンドラーを追加します。下記コードでは「購入しますか?」の質問に対し、ユーザーが「はい」と応答した場合のコードです。payloadのInSkillProductにスキル商品であるproductIDを渡します。これにより、購入フローが呼び出され、購入処理に入ります。tokenは必須ですが、値は任意で何でも構いませんが、推測されにくいものにしましょう。スキル開発者は購入リクエストを呼び出すだけで、特に購入処理を作成する必要がありません。Lambdaコードに購入レスポンスハンドラーを追加します。下記コードでは、購入レスポンスハンドラーから購入処理結果を取得しています。購入レスポンスハンドラーまず、購入処理が正常に行われたか確認します。あることを確認します。ない場合は「購入に失敗しました」というメッセージを表示するようにしています。あるかを確認しています。購入処理が受理された、またはもう既に購入済みである場合、サービスを提供しています。それ以外の場合は、購入処理が却下されたということで、スキルの終了処理を行っています。Lambdaコードに返金リクエストハンドラーを追加します。下記コードではユーザーが「返金して」の発話に対し、スキルが返金リクエストを行います。payloadのInSkillProductにスキル商品であるproductIDを渡します。これにより、返金フローが呼び出され、返金処理に入ります。tokenは必須ですが、値は任意で何でも構いませんが、推測されにくいものにしましょう。スキル開発者は返金リクエストを呼び出すだけで、特に返金処理を作成する必要がありません。Lambdaコードに返金レスポンスハンドラーを追加します。下記コードでは、返金レスポンスハンドラーから返金処理結果を取得しています。購入処理と同様、返金処理が正常に行われたか確認します。あることを確認します。ない場合は「キャンセルリクエスト処理中にエラーが発生しました。」というメッセージを表示するようにしています。返金処理が正常に処理された場合、返金レスポンスのpayloadから返金処理が正しく行われたか確認し、その後の処理を割り振っています。Attributes(セッション属性)を使用して開発している場合、購入処理や返金処理に移動した際、一旦それまでの会話のセッションは切断されてしまいます。購入処理や返金処理が終了し、レスポンスが返ってきた時には、新たなセッションが作成されています。DynamoDBに会話内容を保存するようにしましょう。Lambdaの実装も終わりましたら、いよいよ公開申請です。re:newalをご覧ください。スキル内課金を含むスキルを公開申請するときは、いくつか異なる点があります。「はい」を選択しなければなりません。エラーメッセージが表示されますので気を付けてください。無事に成功しましたら、いよいよ、申請です。申請画面で新たに追加された選択項目についてご説明いたします。以前は「公開の詳細設定」と言う項目がありませんでした。今までは認定されると即公開となっていましたが「公開の詳細設定」で「認定と公開」か「認定のみ」を選べるようになりました。新たに設けられた「認定のみ」の使いどころは、例えば、○月×日の夜中0時からスキルを公開して、先着10名様にスキル内で使用できるスペシャルアイテムをプレゼントみたいな使い方が可能です。スキルの認定作業は昼間しか行われておらず、今までは、いつ公開されるかは認定されるまではわかりませんでした。「認定のみ」が選択できるようになり、公開開始日時をこちらでコントロールできるのは、非常に有り難い機能です。「公開の詳細設定」を選択したら右上の「はい、審査を申請します」ボタンを押します。審査は大抵は翌営業日に行われ、問題なければ審査日と同じ日に認定を受けることができます。公開承認を受けると開発者宛に上記のようなemailが届きます。Alexaスキルの認定に関するフィードバックここでは「認定に関するフィードバック」について、スキル内課金特有のフィードバックを、具体例を交えながら説明していきます。多数のフィードバックがあり長くなりますが、参考になると思いますので書かせていただきます。その1フィードバック:スキル内課金機能を提供しているスキルは、スキルコンテンツの一部を無料で提供する、もしくはスキルの無料トライアルのバージョンを提供する必要があります。スキル内課金についての詳細はこちらを参照してください。Kit原因:作成したスキルが、スキル呼び出し後、スキル商品を購入しないとサービスを利用できないスキル構成になっていました。対処方法:スキルを1日3回までは無料で利用できるように変更し、4回目からスキル商品の購入を促すように変更しました。その2フィードバック:スキル内課金商品のアップセル中に金額情報の提示はできません。スキルの商品購入プロンプトと同様の内容を繰り返さないよう、適宜削除、及び変更してください。スキルガイドラインでは直接説明されていませんが、以下の文脈から必要ということなのでしょう。Kit原因:金額は購入フロー後、Alexa側で提示するので、スキル側では金額を表示しないでください。対処方法:購入リクエストから購入フローを呼び出す際に表示していたメッセージから金額を全て削除しました。その3フィードバック:スキル内課金商品のアップセル中には、スキルは消費型の課金商品について、明確な数量や時間等の情報を提供する必要があります。Kit原因:消費型の課金商品を作成したため、まとめ買いができたりするので、数量等の情報を提供してください。消費型故の指摘内容です。対処方法:今更、買い切り型やサブスクリプション型に変更するのは面倒だったので、1日4回目からでないと購入リクエストできない。購入後直ちにサービスが実施されスキル商品の在庫がいつも0である状態を説明し、数量情報を提示する義務は無いと説明し、再申請を行いました。その4フィードバック:申請いただいたスキルはユーザーに対し、直接スキル内課金商品を購入する方法を提供していません。Kit原因:スキル内課金商品の購入方法を提示していませんでした。対処方法:スキル内課金商品購入ヘルプインテントを作成し、ユーザーが購入ヘルプインテントを呼び出した際に「1日4回以上ご利用になった場合のみ、購入することができます。」というメッセージを追加しました。その5フィードバック:申請いただいたスキルはユーザーに対し、購入したスキル内課金商品の返金やキャンセルについての情報を提供していません。Kit原因:スキル内課金は消費型であり返金処理は必要ないと考えていたが、返金情報を提供してください。対処方法:このスキル内課金商品は常に在庫を抱えない状態になっているので、返金情報を提供する義務はありません。再申請を行ったが「例え在庫が常に存在しない状態のスキルであっても、返金処理を提供する義務はあり、その情報を提供していないスキルを公開認定することはできません。返金リクエストインテントを作成し、返金情報を提供するメッセージを追加しました。反省点:常に在庫が発生しない状況であれば、返金処理を作る必要はないと考えていましたが、甘かったです。初動態勢、スキル内課金の設計をミスしてしまいました。その6フィードバック:言い回しの異なるサンプル発話が不足しています。スキルを確実に起動させ、多くのユーザーのリクエストに対応するためには、サンプル発話を充実させる必要があります。今回ご提示いただいたサンプル発話のみでは、スキルが確実に起動しない可能性があります。以下のようなサンプル発話を追加して、再度ご申請ください。Kit原因:スキル内課金「しりとり待った」を購入しますか?の質問に対し、AMAZON.YesIntentとAMAZON.NoIntentしか用意していなかったので、ユーザーが「購入します」「購入する」「購入しません」「購入しない」と言った場合、購入リクエストやキャンセルリクエストが呼ばれなかった。対処方法:AMAZON.YesIntentに「購入します」「購入する」とAMAZON.NoIntentに「購入しません」「購入しない」を追加し、ユーザーが「購入します」や「購入しません」と言った場合でも、購入リクエストやキャンセルリクエストを呼び出されるように変更しました。補足:ビルドインインテントにカスタムサンプルフレーズを追加できるので便利です。その7フィードバック:申請いただいたスキルは、一度スキルを終了し、再度起動した際に、すでに購入されているスキル内課金商品の使用をユーザーに提供していません。Kit原因:サービスを提供した後、スキル内商品は消費されているという説明がありませんでした。追加で、スキル内課金商品購入ヘルプインテントが呼び出された際のメッセージに「この商品は消費型であり1回利用すると、この商品は消費され無くなります。」というメッセージを追加しました。その8フィードバック:スキル審査の結果、下記のスキル内課金商品についてアップセルが提供されていないと判断されました。現在、スキルから提示される情報だけでは、ユーザーがどのようにスキル内課金商品を購入できるかが不明瞭です。購入プロセスへ誘導するためのフレーズをスキルからのプロンプトにご提示ください。対応しましたが、その結果として、スキル内課金商品説明だけでなく、購入プロセスに誘導するフレーズをメッセージとして提示してくださいと指摘されました。対処方法:購入リクエストハンドラーを呼び出すためのフレーズを、スキル内課金商品購入ヘルプインテントが呼び出された際のメッセージに追加しました。その9フィードバック:次のインテント名を使用してスキルを起動した際、スキルの応答にリクエストとの関連性がありません。原因:しりとりスキルで、ユーザーがしりとりの途中で「返金」と発話した際に「んで終わる言葉を言いましたね。しりとりを終了します。」としりとりを終了してしまい、返金処理に応じなかったのが原因でした。対処方法:ユーザーが「返金」と言った場合に、返金リクエストハンドラーを呼び出し、返金処理に応じるように変更しました。その10フィードバック:スキルのホームカードにスキル内課金商品の金額を含めないようにしてください。返金フロー後、Alexa側で提示するので、スキル側では金額を表示しないでください。対処方法:返金リクエストから返金フローを呼び出す際に表示していたメッセージから金額を全て削除しました。その11フィードバック:スキル内課金商品のアップセル中に、そのスキル内課金商品をスキルでどのように使用できるかの情報を提供する必要があります。「1回だけしりとりを待ったできます。」という情報だけでは、1回負けた後も継続することが可能ということがユーザーにわからない可能性があります。課金商品の機能がアップセルで明確にわかるよう修正してください。Kit原因:「しりとりを待った、を購入すると、1回だけしりとりを待ったできます。」という説明が不適切と判断されました。対処方法:「しりとりを待った、を購入すると、しりとりに負けた時、1回だけしりとりをやり直すことができます。その12フィードバック:スキルは、スキル内課金商品の購入が正常に完了したにも関わらず、その商品の機能をユーザーに提供していません。Kit原因:ユーザーがスキル内課金「しりとり待った」を購入後、即しりとりを終了し、再度しりとりスキルを起動し「ん」で終わる言葉でわざと負けた場合に、購入したはずの「しりとり待った」を使用できませんでした。DynamoDBを使用しました。DynamoDBへのアクセスは困難となります。DynamoDBへのアクセスが自由にできます。Attributes(永続属性)を使用するスキルを作成する場合は、「ユーザー定義のプロビジョニング」でスキルを作成することをお勧めします。その13フィードバック:申請いただいたスキルは、ユーザーが購入した消費型の課金商品の使用可能な残量を示すオプションを提供していません。残量を示す義務がありました。DynamoDBから取得しユーザーに提示するように変更しました。その14フィードバック:申請いただいたスキルは、アップセルメッセージが提供された後の取引のキャンセルが適切に処理されていません。Kit原因:ユーザーが課金商品を「購入する」と言い、スキルが「...同意して、購入しますか?」と確認した後、ユーザーが「いいえ」と言った場合に「そうですか、お役に立てず残念です。」とスキルを終了してしまった。対応方法:スキルを終了する前に「購入はキャンセルされました。」というメッセージを追加しました。その15フィードバック:スキル内課金商品は、無料版のスキルに何らかの機能が追加される必要があります。スキル内で負けた際にもアップセル後に購入せずに単語を発話するとしりとりが続けられました。上記を修正、アップデートした上で再申請してください。原因:ユーザーがしりとりに負けた後、スキルが課金商品を購入するか確認した際に「AMAZON.YesIntent」と「AMAZON.NoIntent」以外の言葉を話しかけた場合、しりとりを再開できてしまったのが問題でした。対応方法:しりとりに負けた後、課金商品を購入するか確認中の時は「AMAZON.YesIntent」と「AMAZON.NoIntent」だけを受け付けるようにし、その他の言葉を話しかけられた場合は、再度「...同意して、購入しますか?」と確認するように変更しました。その16フィードバック:スキル審査の結果、下記のスキル内課金商品についてアップセルが提供されていないと判断されました。スキルを申請する際には、すべてのスキル内課金商品にアクセス出来るよう、開発者ポータル上のテストの手順でそちらの手順の記載をお願いします。アップセルを通さず、購入プロンプトが返ってきます。アップセルを追加してください。その際には消費型の課金商品について、明確な数量等の情報を一緒に提供する必要があります。Kit原因:購入リクエストインテントが呼ばれたら直ぐに購入フローに移っていた。購入フローに移る前にその課金商品について説明しなければならなかった。対応方法:購入リクエストインテントが発話された場合は、購入リクエストハンドラーを呼び出して購入フローに移動する前に、その課金商品についての説明を追加し、必要に応じて課金商品の在庫がある場合は、その残量をお知らせするようにしました。その17フィードバック:スキルは、ユーザーがアップセルに同意したにも関わらず、スキル内課金プロセスを正常に完了する事が出来ませんでした。スキル内商品を購入できません。ユーザーが購入済みのコンテンツを利用することは可能です。そのため、4回目以上使用の場合は、Echoデバイス側で商品の購入ができて、且つスマートフォン端末で購入済みの商品を使用できるようにする必要があります。ご確認後、修正をお願いします。Kit原因:「ここどこなの」というスキルを無料公開していた時は、位置情報が取得できるスマートフォンのAlexaアプリのみ利用可能にしていたが、Alexaアプリからはスキル内課金商品が購入できないため、1日4回以上利用することができなくなっていました。解決方法:Echoデバイス側でも「ここどこなの」のスキル利用を有効にし、スキル内課金商品の購入のみ利用可能としました。DynamoDBに格納し、スマートフォンのAlexaアプリでは1日4回以上利用する場合は、購入したユーザー情報と課金商品の在庫数を確認後、購入済みの場合のみ、現在の位置情報から住所をお知らせするサービスを提供するように変更しました。その18フィードバック:Amazonにとって知的財産権の保護は非常に重要です。スキル内で使用されているコンテンツを販売する権利があることを確認できませんでした。販売する権利を持っていることを示す文書を提示してください。いうスキルで、年度別の新入社員のタイプを説明するスキルを作成しました。タイプ」を引用させていただいていました。「我々が公開しているコンテンツに関して引用していただいて問題ございません。」とお墨付きをいただいていたが、有料スキルでの引用に関して、今回尋ねたところ「有料コンテンツでの引用は認めておりません。スキル内課金化を断念しました。5が10個届きました。アマゾンジャパン合同会社より荷物が届きました。荷送人はAlexaスキル開発者キャンペーンです。5が10個入っていました。5を10個、ピラミッド状に並べてみました。5欲しさに、スキル内課金の勉強がてら既存の無料スキルにスキル内課金を組み込み、公開申請しました。無料スキル公開申請同様、スキル内課金の公開申請ならではの、フィードバック(申請却下)をたくさん頂きました。今回もサンドバック状態で滅多打ちにされましたが、雨にも負けず、風にも負けず、めでたく10個のスキル内課金が組み込まれたスキルを無事に公開することができました。このブログを最後まで、読んでいただき、ありがとうございます。Alexaに限らず、音声アシストを作成依頼したいところをお探しの場合は、是非弊社までご連絡ください。技術開発室の佐藤です。需要が高まっています。用途のほとんどはディープラーニングのモデルトレーニングです。