早くなんとかしないと…

社会人としてもシステムエンジニアとしても駄目になってしまう…

初めてのAlexaスキル申請で得た知見まとめ

個人で開発したAlexaスキル後出しじゃんけんクラブが公開されました。
本記事は、初めてのAlexaスキル(カスタムスキル)申請で得た知見のまとめです。


Amazon開発者アカウント作成

1/10の記事にも追記して書いたのですが、見事にハマリました。結果、開発者名に「HAL」が使えなくなり、別名での公開となっております。

本件、Amazonさんも把握しており、Alexaハンズオントレーニング参加者に、以下の記事が案内されています。
Alexa 開発者アカウント作成時のハマりどころ : Alexa Blogs
が、中身をあまり読まない人はどうもこのいちばん上の誤ったやり方で取り組んでしまうようです…。

下記の手順で作成するのが分かりやすいはず。
Amazon.co.jpでアカウントをつくる(AmazonEcho実機を使う場合はこのアカウントに紐付ける)
→居住国を日本にする
Amazon 開発者ポータルAmazon.co.jpのアカウントでサインイン
サインイン後の画面右上に「AMAZON CUSTOMER」と表示されていればOK。


スキルID

"alexa.APP_ID"から"alexa.appId"に変更になったようですが、一部のLambda設計書に反映されていません。
直さなくてもAlexaスキルは動作しますが、ワーニングログが出力されます。
github.com
上記の設計書を利用する場合、41行目を変更してください。

exports.handler = function(event, context, callback) {
    var alexa = Alexa.handler(event, context);
    alexa.appId = APP_ID;
    alexa.registerHandlers(handlers);
    alexa.execute();
};

【参考】Alexaのスキル開発中、Warning: Application ID is not set - Qiita


申請から公開までの経過

4/3(火) 初申請(新規作成)
4/6(金) 取り下げ
4/7(土) 再申請
4/9(月) 公開

バグ(後述)を見つけたため、審査申請を取り下げて修正し、再申請しました。
私が申請した時は5営業日でフィードバックする旨が審査申請受付メールに記載されていました。
※この日数は時期で変わるかと思います。(7営業日のキャプチャをどこかで見たため)
再申請したのでフィードバックは4/13(金)かと思っていたのですが、初申請からの日数で審査していただいたようです。
先人の記事をたくさん拝見させていただいていたからか、一発で審査に通り、その旨のメールが届いた数時間後に公開となりました。
※公開タイミングは開発者で決めることはできないようです。


サンプルフレーズ

この項目は、利用者に対して確実に応答するフレーズを提示するもの、という認識です。
設定するとスキルがフレーズに応答するようになるわけではないはず。
カスタムスキルであれば、下記のドキュメントを参考になります。
developer.amazon.com


スキルアイコン

フリー素材を使用させていただこうかと思ったのですが、規約確認が面倒になり、ペイントで自作しました。作成時間5分。


テストの手順

クイズゲームスキルのサンプル(https://github.com/alexa/skill-sample-nodejs-quiz-game/tree/ja-JP)をベースに作成した、後出しじゃんけんゲームのスキルです。
アカウントリンクやアクセス権限は使用しておりません。
審査のほど、よろしくお願い致します。

4/3 初申請(新規作成)
4/6 取り下げ
4/7 再申請

【初申請から再申請までの修正内容】
・「後出しじゃんけんクラブで、○○を××して」で本スキルを起動した場合に応答不具合となるバグを解消
AMAZON.HelpIntentで本スキルを起動した場合、その次の発話で応答不具合となるバグを解消
・エンドポイントの変更(Lambdaバージョン管理のため)

後出しじゃんけんクラブで、○○を××して」で本スキルを起動した場合に応答不具合となるバグ

サンプルフレーズを決めるために色々な呼び出し方法を試していた時に、「後出しじゃんけんクラブのゲームをやろう」と言うところを、誤って「後出しじゃんけんクラブで、ゲームをやろう」と言ったことで発覚。
テンプレートのstate管理をなくした状態で作っていたため、UnhandledからAnswerIntentへ遷移するものの、問題を作成していないため答えなどあるわけなく、応答不具合となっていました。

state管理については下記参照。
Alexaスキル開発トレーニングシリーズ 第3回 音声ユーザーインターフェースの設計 : Alexa Blogs

AMAZON.HelpIntentで本スキルを起動した場合、その次の発話で応答不具合となるバグ

ヘルプ周りの設計が漏れまくってました。

いきなりヘルプを呼び出すルートを失念

開発ドキュメントのヘルプの提供を読んで気づきました。
ヘルプから起動してしまうと、問題を出題するルートが「最初に戻って」しかなくなるという…。
上記の問題共々解決するため、state管理を追加しました。

ヘルプ応答発話の見直し

「スマホアプリはオワコン。今開発するならスマートスピーカーで!」スキル「旬の食材」開発者 立花氏に聞く。 – SmartHacks Magazine
上記のインタビュー記事内の

ヘルプの返答の後は質問で終わる必要がある

という記述を見て修正しました。
『(前略)終わりたい時は、「ストップ」と言ってください。(終)』だったんです、初申請時。
これを、下記の内容で直しました。
・いきなりヘルプを呼び出した時→問題出題
・ゲーム中に呼び出した時→問題をもう一度言う

エンドポイントの変更(Lambdaバージョン管理のため)

開発者アカウント側だと、スキル公開後は開発バージョンと公開バージョンに分かれるのですが、LambdaはAWSでバージョン管理しないといけません。
バージョン管理できることはAlexaハンズオントレーニングに参加した際に教えていただいたので知っていたのですが、やり方は知りませんでした。
申請前に調べてやろうと思ってたのに忘れてたので、再申請時に対応しました。
下記の記事をそのまま参考にさせていただきました。
qiita.com


特典

Alexaスキル開発者向けの特典があるので、ちゃっかり申し込んでおきましょう。
AlexaのAWSプロモーションクレジットのご紹介 | Amazon Alexa | アレクサ
スキルを開発して、特典をもらおう | Amazon Alexa | アレクサ



node.jsもAWSも初めてだったけど、アイデア出したりベターな方法考えたりするの楽しかった!