簡単にAlexaスキルが作れると噂の「Storyline」でスキル開発~公開申請まで実際にやってみた
こんにちわんこそば。
SmartHacksチームの「スマートハッカー佐藤」です。
突然ですが、毎日「昼飯」を決めるのが面倒くさい…という方は多いと思います。面倒くさがり屋の極致の私は、ほぼ毎日オフィス近くの同じつけ麺屋に行っています。さすがにこれじゃやばいと思っています。
そんな中、1週間くらい前にコーディング不要でAlexaスキルを開発できる「Storyline」というサービスを見つけたので、実際に試してみました。
この記事では「Storyline」を使って、昼飯を何にすべきかを提案してくれる「今日の昼飯」というAlexaスキルを作成し、申請までしてみた流れを解説していきます。
画像を50枚以上使って全ての流れを説明していくので、エンジニアでない方でもこの記事を見ながら進めれば、簡単なAlexaスキルは作れると思うので、参考にしてみて下さい。
【追記】途中かなりはまりましたが、一応「今日の昼飯」スキルが審査に通り、公開されました。途中から(追記部分)チュートリアルというよりはStorylineとの奮闘記みたいな感じになっています。
目次
スポンサーリンク
Storylineとは?
Storyline(ストーリー・ライン)とは、プログラミングの知識が無くてもAlexaスキルが作れるサービスです。Alexaスキル開発”専用”サービスです。
現在は基本的に無料で利用できますが、フラッシュブリーフィングスキル開発の一部機能だけ有料プラン(49$/月)の契約が必要です。
Alexaスキルとは、スマートスピーカー「Amazon Echo」等で使えるサードパーティー制の拡張機能のことです。Alexaスキルについて詳しくはこちらの記事をご覧ください。
Storylineは、ITスタートアップの聖地、シリコンバレー発のサービスです。Y Combinatorという有名なベンチャーキャピタル兼スタートアップ育成組織から生まれたようです。Y Combinatorについて詳しく知りたい方はこちらの本をお勧めします。私も読みましたが、結構面白いです。
前置きはこれくらいにして、早速「Storyline」でアレクサスキルを開発してみましょう。
大きな流れは、以下の7部構成です。
- StorylineでAlexaスキルを作成
- Amazon開発者ポータルにデプロイ(送信)
- Amazon開発者コンソール上でスキルの確認
- スキルストアへ公開申請
- 【追記】審査落ち→スキル修正&再審査
- 【追記②】再審査落ち→スキル修正&再審査アゲイン
- 【追記③】審査に通った!
最初にこちらの動画を見ておくと、さらに理解がしやすいと思います。
※Storylineのサービス改善スピードはとてつもなく速いので、UI・機能等は一部変わっている部分があります。
StorylineでAlexaスキルを作成
作るスキルの会話の流れとしてはこんな感じです。
Alexa「あなたの代わりに昼飯を決めてあげましょう。『決めて』と言って下さい」
→ユーザー「決めて」
→Alexa「ラーメン(or 寿司 or 牛丼etc…)」
こちらからStorylineのHPに行きましょう。シンプルですね。真ん中の「Sign up」を押しましょう▼
登録(ログイン)にはGoogleアカウントが必要のようです。それ以外の選択肢はありません。ご自身のGoogleアカウントでログインしましょう。▼
広いキャンバスが現れました!!▼
とりあえず左上の「+New skill」をクリック▼
カスタムスキルとフラッシュブリーフィングスキルに対応しているようです。今回はカスタムスキルを選択▼
「Name:」にスキル名を入力しましょう。今回は「今日の昼飯」にします。言語も日本語スキルに対応しているようです。「Japanese」を選択▼
広いキャンバスにWelcome Blockなるものが出てきました▼
Welcome Blockをクリックすると左側にメニューが現れます▼
下の方に5つアイコンがあります▼
とりあえず一番左のスピーカーアイコンをクリックすると、ボックスが出現しました▼
「Enter What Alexa should say」と書かれています。アレクサ側になんと喋らせたいかを入力するようです。ここはスキルを起動した時、一番最初にアレクサが発言する部分です。
こんな感じで入力してみました▼
すると、「Welcome Block」に文字が入りました。文字がはみ出ています▼
続いて、もう一度「Welcome Block」をクリック。次は左から2番目の喋っている人のアイコンをクリックします▼
「New user reply」と書かれているので、ユーザーサイドの発言を入力するようです。命令に従って、「決めて」と入力。▼
続いて、昼飯を決めてもらいましょう。
左側のメニュー「決めて」をクリックすると、「≡」(以下、ハンバーガーメニュー)と「→」がでてきます。「→」をクリック▼
黒い枠が出てくるので、「Create new block」をクリック▼
すると、にょろにょろ矢印と共に新しいブロックが出てきました▼
このブロックをクリックすると、左に「決めて」メニューが現れます。今度はアレクサが喋る番なので、左下のスピーカーアイコンをクリックして昼飯リストを言ってもらいましょう。とりあえず「つけ麺」と入力▼
毎回「つけ麺」と答えられては困るので、昼飯を何個かランダムに言って欲しいです。ハンバーガーメニューをクリック▼
「Enter random option」と書かれています。ここに昼飯リストを入れていきます▼
これで「決めて」と言ったらランダムに昼飯を決めてくれます。
続いては例外処理です。「決めて」と言わないと教えてくれないツンツンな感じにしてみます。
「Welcome Block」をクリックし、例外処理は左から三番目のこちらのマークをクリック▼
すると「else」というボックスが現れました。「→」をクリックし、先ほどと同様に「Create new block」をクリック▼
メインキャンバスに、にょろにょろ矢印と同時に「else」ブロックができました▼
「else」ブロックをクリックし、左メニュー下のスピーカーアイコンをクリックし、発言をツンツンさせてみます▼
命令に従わなかったのがいけません。
文字を入力した後、エンターを押せば、メインキャンバスに反映されています▼
スキル自体の作成は以上で完了です!!
ちゃんと動くか、ページ上部中央の「Play」で試してみましょう▼
Storylineで昼飯を決めてくれる簡単なAlexaスキルを作成中 pic.twitter.com/2oWtKEYBuE
— スマートハッカー佐藤 (@SmartHacker_jp) 2018年2月15日
うまくいきました!
Amazon開発者コンソールにデプロイ(送信)
続いて、Storylineで作成したAlexaスキルをAmazon開発者コンソールにデプロイ(送信)します。
ここからはAmazonアカウントが必要です。特に、Amazon.co.jpアカウントをお持ちじゃない方はAmazon.CO.JPのアカウントを作っておきましょう。詳細は省きますが、間違えてAmazon.comアカウントを作ってしまうと、3日はドハマりします。詳しくはこちらをご覧ください。
Amazon.co.jpアカウントを作成したら、中央上部の「Deplpy」ボタンを押してみましょう▼
Amazonアカウントへの接続確認画面が出るので、「Connent Amazon」をクリック▼
Amazonアカウントのログイン画面が出るので、ログインしましょう▼
これでデプロイされます。最初はデプロイが完了するまでクルクルと数十秒くらいかかると思います▼
Amazon開発者コンソール上でスキルの確認
Amazon開発者ポータルにログインしましょう▼
ログインしたら「Developer Console」をクリック▼
メニューの「ALEXA」をクリック▼
「Alexa Skills Kit」をクリック▼
「今日の昼飯」スキルがちゃんとできてます!クリックしてみましょう▼
クリックしてみると、スキルの詳細が見られます。各項目の詳細な説明は他に譲ります。
とりあえず、ちゃんと動くかを「テスト」から確認してみましょう▼
下の方に移動すると、「サービスシミュレーター」というものがあり、スキルを確認することができます▼
まずは、「発話を入力してください」の下のテキストボックスに「アレクサ、今日の昼飯を開いて」と入力し、「今日の昼飯を呼び出す」をクリックしてみましょう▼
すると、右側の「サービスレスポンス」に「こんにちわんこそば。~~」の文字が!うまくいっているようです。
続いて、「決めて」と入力し、「今日の昼飯を呼び出す」をクリック▼
ちゃんと「パスタ」と答えてくれています!
例外処理も試してみましょう。一旦「リセット」を押した後に「アレクサ、今日の昼飯を開いて」→「今日の昼飯を呼び出す」をクリック→「たーててつー」と入れて→「今日の昼飯を呼び出す」をクリック▼
「今日は昼飯抜きな」と冷たい返答。命令はしっかりと守りましょう。
Amazon Echoの実機を持っている方は実機テストもできます。今回使用したアカウントと同じAmazonアカウントでAlexaアプリにログインし、Amazon Echoと接続すれば実機テストができます。
Amazon Echo Dotで実機テスト! pic.twitter.com/ljOfnxWBKM
— スマートハッカー佐藤 (@SmartHacker_jp) 2018年2月15日
実機テストもうまくいきました!
スキルの公開申請
それではいよいよ、スキルを一般に公開するための申請を行いましょう。
公開情報をクリック▼
まずはカテゴリを選択します。今回は「Novelty&Humor」にしました▼
「テストの手順」には、Amazonの審査官がこのスキルをチェックする際にスムーズにテストするための説明文を入力します▼
続いて「国と地域」を選択します。とりあえず「Japan」にします▼
続いて、「スキルの簡単な説明」と「スキルの詳細な説明」を入力しましょう。ここは公開後にスキルストアに表示される部分なので本気で書きましょう▼
続いて「サンプルフレーズ」これは、このスキルを開くためのユーザーの発話です。デフォルトでは「Alexa, open 今日の昼飯」となっているので、日本語に変えましょう▼
続いて、「キーワード」これはオプションですが、スキルストアで検索した時に引っ掛かるようにするためのものでしょう▼
最後に画像を用意して、アップロードしましょう。108px×108pxと512px×512pxの2枚必要です。今回はSmartHacksのデザイナーにサクッと作ってもらいました▼
以上を入力したら、「次へ」ボタンを押しましょう。
いよいよ最後のページ「プライバシーとコンプライアンス」です。
内容を確認して「はい」「いいえ」を選択していきましょう▼
「プライバシーポリシーURL」と「利用規約URL」はオプションなので入力する必要はありません。一旦左側の「保存」を押した後に、「申請する」を押しましょう!▼
最終確認画面が現れます。内容を確認して「はい」をクリック!▼
申請完了!後は審査を待つだけです▼
審査結果が出次第、追記したいと思います。
気軽にAlexaスキルを開発してみよう
いかがでしたでしょうか?
プログラミングのプの字も知らない方でも、簡単なものであればAlexaスキルを作れそうと思いませんでしたか?
実際には、最初に試した1週間前(2018年2月7日)はそもそも日本語スキルが対応しておらず、さらに色々と問題が起ってうまくスキルが作れなかったのですが、サポートチャットからバグの報告をしたら、1週間もせずにCTOらしき方から日本語対応&バグ修正をしたとの連絡がありました!▼
この連絡が来てから今日(2018年2月15日)実際に試してみたら、日本語スキルをバグなくスムーズに開発できるようになっていました。この記事を書きながら、スキル作成から公開申請まで、2時間くらいでできたので、最初ある程度使い方に慣れれば、1時間でAlexaスキルを開発&公開することも可能だと思います。
プログラミングができないノンエンジニアのみなさんも気軽にAlexaスキルを開発&公開してみましょう!
【追記】審査落ち→スキル修正&再審査
審査の翌日に審査結果が届きましたが、結果は不承認でした。しかし、その理由はしっかりとメールで教えてくれます。素晴らしいですね。今回審査に落ちた理由は要約すると以下の3点です。
- Amazonのブランド及び商標が不正に使用されています。
- 言い回しの異なるサンプル発話が不足しています。
- 「ヘルプ」エラー
実際には審査結果メールでもっと詳しく教えてくれるので、修正箇所は容易に特定できました。
Amazonのブランド及び商標が不正に使用されています
これはおそらく、スキルの説明文に「アレクサ」をいれていたことが原因でしょう。
メールにもはっきりと以下のように書かれています。
また、Alexa標準機能もしくはAlexaの人格であるかのように受け止められるスキル説明は、ユーザーに誤解が生じるため認定を受けることができません。該当箇所: Description(Alexa自体の応答や人格のように受け止められる表現) アレクサが『あなたの代わりに今日の昼飯を決めてあげましょう。「決めて」と言って下さい。』と言うので、「決めて」と答えましょう。 それ以外を答えると、、、アレクサの意外な一面が見られるかもしれません。 スキルを更新して、不正使用されていたAmazonブランドと商標を削除してください。 また、Alexa標準機能もしくはAlexaの人格であるかのように受け止められるスキル説明を全て取り除き、ユーザーに誤った認識が生じないように修正してください。
なので、公開申請時のスキルの説明文を以下のように修正しました。
【スキルの簡単な説明】を変更
アレクサが今日の昼飯を提案してくれます。
→
昼飯を決めるのが面倒くさい方のために、今日の昼飯を提案してくれるスキルです。
【スキルの詳細な説明】を変更
昼飯を毎日選ぶのが億劫な方へ。このスキルは今日の昼飯をランダムに提案してくれるスキルです。アレクサが『あなたの代わりに今日の昼飯を決めてあげましょう。「決めて」と言って下さい。』と言うので、「決めて」と答えましょう。それ以外を答えると、、、アレクサの意外な一面が見られるかもしれません。
→
昼飯を毎日選ぶのが億劫な方へ。このスキルは、今日の昼飯をランダムに提案してくれるスキルです。『あなたの代わりに今日の昼飯を決めてあげましょう。「決めて」と言って下さい。』と言うので、「決めて」と答えましょう。それ以外を答えると、、、意外な回答が待っているかもしれません。
念のため、この記事の該当箇所も修正しておきました。
言い回しの異なるサンプル発話が不足しています。
これはある機能(インテント)を呼び出すためのトリガーとなるユーザーの発話例が少ないことが原因です。メールにはもっと詳しく書かれています。
こちらはStoryline上で、以下のように、「決めて」の他に「決めてに似た言葉」をいくつか付け加えました。
「ヘルプ」エラー
こちらは少しだけやっかいです。Alexaスキルでは、ユーザーが「ヘルプ」と言った場合にそのスキルの使い方を教えてあげなくてはいけません。今回はそれが抜けてました。
なので、Storyline上で「決めて」「else(例外処理)」の他に、以下のような「ヘルプ」ブロックを追加しました▼
そして「ヘルプ」と言うと、『ひるめしを決めて欲しい時は、「ひるめしを決めて」と言って下さい。終了する場合は「終了」と言って下さい。』と答えるようにしました▼
そして、全体はこんな感じになりました▼
以上を修正し、再審査しました。結果が出たらまた報告します。
【追記②】再審査落ち→スキル修正&再審査アゲイン
再審査の翌々日に審査結果が届きましたが、結果はまたも不承認でした。今回もその理由はしっかりとメールで教えてくれます。
原因は「ヘルプ」インテント
理由は「複数インテントに同一のサンプル会話が含まれている」というものでした。具体的には「ヘルプ」関連です。
ここからはそれなりにAlexaスキルについて詳しくないと理解できないかもしれません。しかし、私と同じようにStorylineではまった人のために、全てを説明します。
前回の審査で「ヘルプ」に対応していないという指摘があったので、前回、独自の「ヘルプ」というブロックを作りました。
「ヘルプ」のサンプル発話▼
「ヘルプ」の応答▼
しかし、これが「AMAZON.HelpIntent」とバッティングしていたのです。
Storylineでは、スキルを作成すると自動的に「AMAZON.HelpIntent」が入ります▼
「AMAZON.HelpIntent」とは、Amazonが用意しているビルトインインテントのひとつです。「AMAZON.HelpIntent」のサンプル発話は「ヘルプ」「使い方」「使い方を教えて」等があり、これらはAmazonが既に設定してくれています。
つまり、前回オリジナルで設定した「ヘルプ」「使い方」等の単語が「オリジナルのヘルプインテント」と「AMAZON.HelpIntent」の両方に紐づいてしまっていたのです。
解決策は二つ。これもAmazonからのメールにしっかりと書かれていました。本当に親切です。
1.上記の該当サンプル発話を削除する。→その際、必ずAMAZON.HelpIntent にヘルププロンプトを定義してください。
2. AMAZON.HelpIntentを削除する。→この場合、ユーザーがヘルププロンプトを呼び出すには、上記3つの発話しか使用できないため、より多くの発話に対応したい場合には1の修正方法をお勧めします。
Amazonからの審査結果メール
1はオリジナルで設定した「ヘルプ」ブロックを削除して、AMAZON.HelpIntentにサンプル発話とプロンプト(Alexaの発言)を設定する。
2の場合は、インテントスキーマから「AMAZON.HelpIntent」を削除して、オリジナルの「ヘルプ」インテントにより多くの「サンプル発話」を設定する。
「ヘルプ」で完全にハマる
まず1ですが、独自のヘルプを消すのは簡単。しかし「AMAZON.HelpIntent」で喋らせる方法がStorylineで見あたりません。
できれば、この「else」の横に「Help」があって欲しい▼
そうすれば、Amazonが設定してくれてるサンプル発話を利用し、ヘルプで喋る内容を自分で設定することができます。
しかし、Storylineのどこを探しても「AMAZON.HelpIntent」への接続手段は見当たりません。
さらに、Storylineは”コード不要でAlexaスキルが作れる”が売りのため、もちろん自らコードを書いて設定することもできません。StorylineのエンドポイントはStorylineのサーバー上に置かれており、自分ではいじれないのです▼
ということで2で解決するしかありません。
まずは、Amazon開発者コンソールの「インテントスキーマ」から「AMAZON.HelpIntent」を削除します▼
続いて、オリジナルで作ったヘルプのサンプル発話をたくさん設定します▼
これでうまくいくはず。そしてデプロイして、サービスシミュレーターとEcho実機でテスト。
しかし、うまくいきません。。。「ヘルプ」と言うと、elseで設定した「今日は昼飯抜きな」と言います。何度試しましたが、解決策は見当たりませんでした。完全にはまりました。
なので、またまたStorylineに問い合わせました。「Helpがうまくいかない!どうすればいいの?」と。そしたら例によって、12時間後くらいに返事が▼
回答は、『英語で「help」ブロックを作れ』とのこと。なるほどこれは盲点だった。。。
つまり、Storylien上で「AMAZON.HelpIntent」に繋げて、「AMAZON.HelpIntent」のプロンプトを設定するには、英語で「help」というブロックを作る必要があるのです。
早速「help」を作ります▼
そして「help」で喋らさせたい内容へと繋げます▼
デプロイし、サービスシミュレーターでテスト。うまくいきます!!▼
これで解決と思い、Echo実機でテストしてみると、、、、、「今日は昼飯抜きな」
試行錯誤しながら50回は「ヘルプ」といいましたが、回答は全て「今日は昼飯抜きな」
また完全にはまりました。
原因は「else」のCatch all?
正直、気がめげたので、1週間くらい放置しました。Storylineのバグかなと。そのうち直るかなと。そしてこの追記を書いている今日、再挑戦したのですが状況は変わらず。。
手を変え品を変え、Storylineのブロックや流れを色々と変えながら試していくうちに、なんとなく気付きました。こいつは「else」が問題児だと。
Alexaスキル自体にはelseという機能は今のところありません。基本的に「ユーザーが○○○と言ったら、Alexaが●●●と喋る」ことしかできず、「ユーザーが△△△”以外の発言をしたら”、Alexaが▲▲▲と喋る」ということはできないようです。
では、なぜStorylineには「else」なるものがあるのでしょうか?そしてどんな仕組みなのでしょうか?
Storylineの「else」の仕組みはこんな感じです。「else」ブロックを作ると、「CatchAllIntent(キャッチオールインテント)」なるものが作られます▼
そして、CatchAllIntentのサンプル発話にはこのような意味不明のランダムな単語が設定されています▼
Alexaは優秀なので、サンプル発話に設定した言葉”のみで”インテントが発動する訳ではなく、サンプル発話に設定した近い言葉であればそのインテントが発動する仕組みのようです。
Storylineではこの仕組みを逆手に取っています。つまり、「CatchAllIntent」に無関係の様々な単語を設定することによって、”ある単語以外の言葉を言った時はAlexaがこう言う”というelse機能を働かせてるようです。頭いいね。
つまり「CatchAll(キャッチ・オール)=全て拾う=else」ということです。
実際にStorylineのelseはそれなりに機能します。しかし、「else」と「help」を同時に使うと、(少なくとも私の日本語環境では)うまくいきませんでした。ここがドハマりポイントでした。
サービスシミュレーターで「ヘルプ」と打つとうまくいきます▼
しかしEcho実機で「ヘルプ」というと、必ず「今日は昼飯抜きな」と言われて今います。20回は言われました。このシュミレーターと実機の違いも謎です。
ということで、「ヘルプ」は絶対必要。そして「決めて」と言った時以外は「今日は昼飯抜きな」とツンツンの答えが返ってくるのがこのスキルの唯一のチャームポイント。これには「else」が必要。完全にジレンマです。
設計を変えて再再審査
解決できる気がしなかったので、elseで「今日は昼飯抜きな」は諦めました。
「else」と「help」がごっちゃになっているのが問題。なら統合してしまえということで、以下のようにしました▼
「else」も「help」と同じブロックに繋げました。これで「決めて」以外の言葉を言った時は、毎回スキルの使い方を案内します。
※改めてStorylineの動画や解説・チュートリアルを見てみると、どれも「else」は最終的にWelcomeに返していました。なので「else」にスキルのコアとなる機能を持たせた私の設計ミスだったのです。
代わりに、昼飯リストの中に「今日は昼飯抜きな」を入れておきました▼
これでランダムに1/18の確立で「今日は昼飯抜きな」と言ってくれます。たまには昼飯抜くのもありでしょ。
スキルの説明も以下のように変更しました▼
そして再審査しました。また結果がでれば追記しますが、これでだめだったらもう諦めようかな(笑)
※これをまさに追記している2018年2月24日、なんと「help」ブロックがデフォルトで入るようにStorylineがアップデートされていました(笑)しかも削除不可能。なんてタイミングで。。。(笑)
【追記③】審査に通った!
再々申請から翌々日(土曜に申請して月曜日)、「Alexaスキル 今日の昼飯 が公開されました!」のメールが届きました。わ~い▼
正直、こんなスキルを世に出していいものか。。。という気持ちも無くはなかったですが、Storylineを見つけたその日から「ノンエンジニアでも気軽にAlexaスキルが作れるようになったら日本のスマートスピーカー市場も少しは盛り上がるかな」という思いから始め、「実際にStorylineで作ったスキルを公開までこぎつける」という当初の目標は達成しました。
途中かなりはまってしまったので、逆に難しい…と思われてしまうかもしれませんが、安心してください。単に私の設計ミスだった部分もありますし、「else」に何か特別な機能をもたせようとしてはだめ。「else」はwelcomeに戻せ!さえ覚えておけばOKです。
Storylineも色々と修正されています。今では最初から「help」も入っています。逆にサービス改善が速すぎて、UIも頻繁に変わっているので、この記事のチュートリアルとしての役割は徐々に廃れていくと思います。
ただし、私が言いたいのは「Storylineはコーディング不要でAlexaスキルを作ることができ、実際に審査にも通った」ということです。
是非みなさんもチャレンジしてみて下さいね。
スキル作成してたら仲良くなったのでインタビューもしたよ。
スマートスピーカー対応アプリの開発にご興味がある方はお気軽にご連絡ください。
お問い合わせフォームスポンサーリンク