kun432's blog

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

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

AAJUG神戸 #2 でLTしてきた

f:id:kun432:20190928234847j:plain

昨日は #AAJUG神戸でLTしてきました。「Alexa開発で使えるAWSのサービス」というのがテーマでしたが、ネタ切れなので気にせずVoiceflowでAdvent Calendarをやった話をしてきました。

資料

内容

Voiceflowの話が中心なので、AWSネタはほとんどなくて、なんか絡めたいなーと思ってて、直前にいろいろ調べてたらそういえば昔こんな話があったなーということでちょこっとだけくっつけてみました。取って付けた感は否めないですが、Voiceflowや他のノンコーディングツールなども、おそらくこれを使っているんだろうと思っています。興味があればぜひご覧ください。

他の方のセッションの感想

いろいろテーマがバラエティに富んでておもしろかったです。

※すいません、写真撮り忘れてました。。。。

VUIデバイスを作る。。。作ろうとしている話(@Morita Doragonさん)

  • AVSの話。AVS向けAPIとかもあるのでちょっと触ってみたくなるな。
  • Alexaがもっとアシスタントっぽく、かつ、煽りキャラになると面白そう。
  • 2020年5月までに制作予定、という言質は取りましたw

ハッカソンのシステムを構築していたらAWSで不正利用された話(@Tomohiro Miuraさん)

  • アクセスキーの話は怖い、めんどくさければ環境変数を使うのが一番よさげ。
  • AWSサポートセンターの指示に従って対応、なんとか免除、サポートセンター神!
  • git-secret というのがあるのか
  • IAM周りって大事なんだけど、組織体系とかにもよって変わってくるので、こう勉強がしにくいんだよね。技術書典のIAM本、読んでみよう。

ISPの話(@motchi0214さん)

  • 以前聞いたときよりも、一通りやってみた今なら、わかる・・!わかるぞ・・!!(成長感)
  • 決済処理は丸投げでかんたん・CRMを踏まえると厳しいかもというのはそのとおりで、このあたりの実際の運用知りたい。
  • 商品名をカスタムスロットにしてシノニム使うのは、複数商品を出す場合は確かに良さげ。

Voiceflowを卒業してLambdaにした話(@mt8さん)

  • 懐かしのStoryline・・・
  • 取りたいデータをAPI化しておくと楽。最近思っていたけど、こういうのFirebaseがほんと便利だと聞くのでトライしてみよう。
  • ノンコーディングからのlambda移行、例えばプロトタイプ作ってから実装、みたいな流れでも有用なはず。

Alexaスキル開発におけるAWSの利用とその技術特性(@Harunobu Kamedaさん)

  • Dynamoのほうが設計きちんとやっておかないといけないというのは初めて知った。
  • Aurora関連の話は、少し仕事で検討してたので、かなり参考になった。そんな都合良くは行かないねって感じ。
  • Lambdaのコールドスタート、アプリの特性とか言語によってそれがネックになるかどうかが変わる。
  • Step Functions、うまく使うと面白いかも。

最後に

休みの神戸は家から近くて最高です。ちなみに、家に帰ると晩御飯が餃子で「なにこれ怖い」と思いました。(参加者しかわからない)

今回もありがとうございました!

お知らせ

LTの最後でもお知らせしていますが、AAJUGで関西初のスキル内課金ワークショップやります!

グローバルなコンテストやってますので、挑戦するなら今です!お時間あればぜひぜひお越しください!

大阪スマートスピーカーミーティング #13 で LTしてきた

f:id:kun432:20190927010705j:plain

今月も恒例の @gaomarさん主催の「大阪スマートスピーカーミーティング」でLTしてきました。13回目です!私のLTも7回目!いつもありがとうございます!>@gaomarさん

資料

動画(24:00〜43:00あたり)

動画の撮影、いつもありがとうございます!>@diberidarshiさん

内容

今日はスキル内課金について、ASK-SDKとVoiceflowの両方で実装してみた印象と実装のポイントみたいな話をしてきました。

スキル内課金は流石にそんなにかんたんではないと思い込んでいてトライしてなかったのですが、Voiceflowが日本向けスキル内課金に対応するかも?みたいな話があったので、それに備えて、実は今月の頭ぐらいからちょこちょこやってたのでした。コードでまずざっくりと理解してからVoiceflowやればスムーズにいけるんじゃないかなー、といういつものパターンですね。

ただ、それでもイメージを掴むまでは、かなりAlexa公式ドキュメントのお世話になったし、Voiceflowの公式にも色々聞いたりして、結構勘所みたいなものを掴むのは手こずりました。今でもまだドキュメント読み足りない感が拭えないのですが、まあVoiceflowなら迷わず作れると言う感じなので、ある程度は理解できているかなと言う実感はあります。なお、Voiceflowでのスキル内課金の実装については以下でまとめてますので、そちらもご覧いただければと思います。

ちょうどスキル内課金のキャンペーンやコンテストやってますし、少しアイデアもあるので、なんとか締切に間に合うように完成させたいなと、いうことで、今月から来月にかけては少し集中してスキル開発に取り組む予定です。

あと、今回も他の方でVoiceflowを使われている方がいらっしゃいました!

さって〜さんのこのスキル、少し前に話題になっていた献立スロットマシーンのアイデアを実現されていて、GoogleスプレッドシートやAPLを使って、非常にいい感じにまとめられているのですが、なんと1時間ほどでできたそうです!この辺の敷居の低さがVoicefowのすばらしいところですね!Voiceflowを使う人がどんどん増えていていい感じですねー。

最後に

次回10月は少し多忙ということでまだ日程未定だそうですが、また決まれば告知します。来月は、あまり誰もやっていない skill connections か GameOn SDK にトライしてみたい、あとは久々にGoogleもやってみたい、と思ってるので、この中のどれかで話をします。もし興味があれば是非スマートスピーカーミーティング、お越しください。みんなでゆるーく楽しみましょう!

今回もありがとうございました!

お知らせ

そんな感じで、スキル内課金、かなり今ホットです!

Tシャツキャンペーンやってます。今週末の早めに出して一発で審査通ればギリ間に合うかもw

そしてワールドワイドな総額約1300万円のスキルコンテストも!

というところで、挑戦してみようかな〜と少しでも思った関西のスキル開発者の皆様、

AAJUGで関西初のスキル内課金ワークショップやります!

ゲストに、アマゾンジャパンのAlexaチームをお招きしてのワークショップなので、東京でやっているものと多分同じ感じです。関西ではなかなかない機会なので、お時間あれば是非是非お越しください!

あと、順番前後しちゃってますが、今週末は東京・神戸でもAAJUGあります。

東京では、先日終了したAlexaスキルアワード2019の受賞者の皆さまを招いてのスキル発表会があります。素晴らしいスキルを開発された受賞者の皆様の色んな裏話(?)が聞ける貴重な機会となってます!

神戸の方は、Alexa開発で使えるAWSの様々なサービスについて、AWSの中の人も招きつつ、AWSにチャレンジしている学生さんのLTなど、これからAWSを始めようと思ってる方にも有用な内容でお届けする予定です!そんな中でオサーンな私は懲りずにまたVoiceflowの話をします、はい、どうやってAWSと絡めるのかはまだ考え中です・・・w

お近くの方はぜひぜひお立ち寄りください!

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シャツキャンペーンや、グローバルなスキル内課金チャレンジも開催中ですので、ぜひ挑戦してみてください!