Flask-askを利用したAlexaスキル開発

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

今回はFlask-askを利用したAlexaスキル開発でのデプロイ方法やスキルを公開するときの審査で大変だったことについてまとめてみました。

前編 Alexaでスカイアーチスキルを公開しました
https://www.skyarch.net/blog/?p=14637

目次

Flask-Askを利用したAlexaスキル開発

概要

Flask-askとはFlaskと呼ばれるPython用のウェブアプリケーションフレームワークでAlexa Skills Kit(ASK)の開発をするための拡張機能として作成されているものです。

デプロイ方法

まず、作成するためのフレームワークとしてFlask-askをインストールします。

pip install flask-ask

また、Zappaというサーバーレスフレームワークを利用することで、Flask-askで作成したものをAWS上に自動でデプロイすることができるので、Zappaが依存しているVirtualenvと一緒にインストールします。

pip install zappa virtualenv

インストールができたら、Virtualenvで仮想環境を作成します。

virtualenv venv

Virtualenvで作成した仮想環境を有効にします。

source venv/bin/activate

Zappaのセットアップを行います。

zappa init

環境名を求められるので、開発環境であればdevとしておくと良いです。

What do you want to call this environment (default 'dev'): dev

その後のS3バケット名を求められるので、変更が必要であれば入力し、必要なければそのままエンターを押します。

Your Zappa deployments will need to be uploaded to a private S3 bucket.
If you don't have a bucket yet, we'll create one for you too.
What do you want call your bucket? (default 'zappa-xxxxxxxxx'):

次にファンクション名を求められるので、今回はmain.appとしておきます。

Where is your app's function?: main.app

次にアプリケーションをグローバルに展開するかを聞かれるので、nとしておきます。

If you are using Zappa for the first time, you probably don't want to do this!
Would you like to deploy this application globally? (default 'n') [y/n/(p)rimary]: n

すると、zappa_settings.jsonの中身が表示されるので、正しければyを入力することで、設定を完了できます。

Does this look okay? (default 'y') [y/n]: y

作成前の下準備はこれで完了したので、main.pyファイルにAlexaスキルを作成します。
作成が完了したらZappaでデプロイをしましょう。

zappa delpoy {環境名(今回はdev)}

デプロイが完了するとAPIGatewayのエンドポイントが表示されるので、Alexaスキルのエンドポイントに設定すると作成したスキルが手持ちのデバイスで動作します。
コードのアップデート時は以下のアップデートコマンドでアップデートを行えます。

zappa update {環境名(今回はdev)}

スキル公開に関して大変だったこと

Alexaスキルでは、公開前にAmazonの基準に適合しているかの審査があるのですが、今回のスキルではAudioPlayerインターフェースを利用しているため、以下の機能を実装する必要がありました。

  • 中断・再開機能
  • キャンセル機能
  • ループ再生機能
  • 前の曲や次の曲へのシーク機能
  • 終了後に同じ曲を再生し直す機能
  • シャッフル再生機能
  • 再生中の曲を最初から再生し直す機能
  • 曲の停止機能

これらは再生する曲が1曲のみであるときも実装の必要があるようです。
そのため、今回は呼び出された際にはエラーが出ずにユーザーへきちんと返答する必要があるという指摘を何回か受けました。
今回は、ループ再生機能とシーク機能・シャッフル再生機能は呼び出されても「利用できません」と返答することで対応しました。
実は、音楽中断後の再開部分が一番大変で、Flask-askでは音楽再生後のステータスを保持してはくれるものの、再開可能かなどの判断はしてくれないので、自分で変数から確認し、条件式を書く必要がありました。
また、ヘルプ(Alexaから呼び出す)を作成する必要がありますが、このヘルプはスキルがどのように動くかを細かく説明した上で最後にユーザーへ発話を促す必要がありますが、ストアにあるアプリの説明と同じ文章を最初に入れていたのですが、スキルについての説明を追加してくださいと指摘をされ、ストアの説明よりも詳しく説明したところ指摘はなくなりました。

また、審査時にエラーなどが起きるとどのような状況でエラーになったのかをメールで教えていただくことができるので、それをもとに修正していけばそのうち審査を通過することができると思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.