前回では無事ラズパイがAlexaと連携出来たので、 今回はSkillの作成を試してみようと思います。
目次
Skill 今回作成するスキル Skill作成① Intent,Utterances,Slots Lambdaの作成 Skillの作成② Skillのテスト Skillの作成③ Skillの審査
Skill
前回導入したAVSは音声認識や、音声再生等を行いますが、 AlexaのSkillはこの間の処理をしてくれます。
例えば、"Alexa, ask Hogehoge to Nantoka" とAlexaに命令したとします。
Alexaは"Alexa"に反応し、ask Hogehogeと聞くと、HogehogeのSkillを起こします。 起こされたHogehoge Skillはその後に続く命令に従って、Lambdaに支持を出し、レスポンスをもらいます。
今回作成するスキル
今回は試しにRSSフィードから、地震速報を日本語で読み上げるSkillを作成してみようと思います。
以下想定しているSkillの流れとなります。
まずはラズパイに、スキルを呼び出し、速報を読み上げる命令を出します。 この動作によってAVSはSkillを呼び出し、SkillがLambdaにリクエストを送信します。 ↓ 送信したリクエストに基づいて、RSSフィードから必要な情報を引っ張りだし、読み上げたい文章を整理します。 ↓ (現時点ではAlexaは日本語を読み上げてくれない為)Amazon Pollyを使って、 日本語で文章を読み上げた音声ファイルを作成します。 ↓ Lambdaから受け取った文章をPollyがmp3としてLambdaへ返し、それをLambdaがS3バケットにあげます。 ↓ S3上にあるMP3のアドレスをLambdaがSkillに返し、それをAVSが再生します。
これでラズパイは日本語で地震速報を読み上げてくれます。
ではこれを元にSkillを作成していきましょう。
Skillの作成
開発者コンソールへログインし、Alexa→Alexa Skill Kitと移動し、「Add a new Skill」でスキルを追加しましょう。 https://developer.amazon.com/ja/
書いてある通り、スキルの基本情報を入力していきましょう。 Nameはスキルの名前、Invocation Nameはスキルを呼ぶ出す時の名前となります(Alexa, ask Hogehogeと呼び出すときはここをHogehogeと指定する)。
今回は日本での地震速報なので、Invocation Nameをjapan earthquakeに設定しました。
設定が終わりましたら次のInteraction Modelの作成に進みましょう。
Interaction Modelでは、Alexaに命令した内容を実際の処理と結びつける設定を行います。
コードですべて書くことも可能ですが、今回はGUIで簡単に設定出来るSkill Builderを使うので、 「Launch Skill Builder」をクリックしましょう。
Intent,Utterances,Slots
今回のSkillでは以下の二つの機能を追加しようと考えております。 ・間近5件の地震速報を取得 ・指定した震度以上の地震速報を取得
つまり命令によって動作を変えてもらう必要があるので、これら用のIntentを二つ作成し、 それらを呼び出すUtteranceを追加します。
Intentは個別の機能、Utteranceはその機能を呼び出す為のキーフレーズと覚えておけば問題無いでしょう。
では実際左のサイドバーからADDからIntentを追加しましょう。
間近5件の地震速報を取得するIntentなので、recentIntentと名付けてみました。
次は作成したIntentにUtteranceを追加します。
recentIntentを呼び出すキーフレーズを登録して行きます。
同様にもう一つの機能の設定を行おうと思いますが、この機能は震度の指定を必要とするので、Slotsを使用します。
SlotsはUtteranceからIntentに変数を渡す役割を持っています。
震度num以上の地震を取得するには、Intentに変数numを渡す必要があるので、 numという名のSlotを作りましょう。Utteranceを追加するページの右側にあります。
何がnumに保存されるかはSlot Typeで指定できます。 今回は数字を扱うので、Built-inのAMAZON.NUMBERのSlot Typeをnumに設定します。
追加したSlotをutterenceで使用する時は、以下の様に{}でSlotを囲みます "Alexa, ask Japan Earthquake for quakes above {num}
IntentとUtterancesの設定が終われば終了です。 上のバーより「save model」で保存し、「build model」でビルドしましょう。
Lambdaの作成
Alexaに出した命令はSkillによりIntentとして処理され、Lambdaへ引き渡されます。 その後LambdaがIntentに従った処理を行い、レスポンスを返します。
ではLambdaを作成しましょう。
先程のページとは別タブを開いて、AWSコンソールへ移動します。
現在Skillで使うLambdaはUS East (N. Virginia)、もしくはEU (Ireland)に配置されている必要があります。 今回はN. Virginiaで作りましょう。
サンプルとしてAlexaの設計図が存在するので、設計図選択画面でAlexaと入力し、それをベースにLambda関数を作っていきます。
ロールはPollyに音声を作成してもらうpolly:SynthesizeSpeech、 音声ファイルをS3に保存するs3:PutObjectを付与します。
トリガーはAlexa Skill Kitに設定します。
後はサンプルの関数コードを書き換えるだけです。
サンプルで使用しているIntentを参考に、作成したSkillのIntentを加えましょう。
また、Skill BuilderでIntentを追加する時に気付いたと思いますが、Skillには最初からAMAZON.CancelIntent, AMAZON.HelpIntent, AMAZON.StopIntent の三つのIntentが登録されています。
これらのIntentは必須なのでLambdaの方でも処理を追加しておきましょう。
機能に付きましては……名前の通りキャンセル、ヘルプ、ストップの機能です。
作成し終わったらLambda関数のARNをメモリましょう。 Lambda、及びSkillテストは後程行えます。
Skillの作成②
ではSkillの作成を行っていたページへ戻りましょう。
Interaction Modelの設定が終わったので次はConfigurationの設定を行います。
今回作成するスキルがLambda関数と呼び出せるようにするため、 Service Endpoint TypeをAWS Lambdaに変更し、先程メモったARNを入力します。
後はデフォルトのままでいいのでTest に進みましょう。
Skillのテスト
おおよそ必要な設定が終わったので動作確認を行えます。
Service SimulatorのEnter Utteranceに実際行う命令を入力すると、Lambdaよりレスポンスが戻ってきます。 エラー等が表示された場合は、送ったリクエストをLambda関数のテスト機能を使いデバッグを行い修正します。
Skillの作成③
テストして問題なさそうならPublishing Informationに進みましょう。
Skillの説明等を記載する必要があるので適当に埋めていきましょう。
Example Phrasesでは実際にAlexaに出す命令の例を記載します。 一文字でもUtteranceと違うと公開する時に通らない可能性があるので気を付けましょう。 (私はUtteranceでEarthquakeとなっている物を、Example PhrasesでEarthquakes と入力したら、直してね!とメールが来ました)
後はスキル用のアイコンを設定してPrivacy & Complianceに進みます。
こちらの記載が終わりましたら、Submit for Certificationをクリックすることによって、一般公開用の審査にSkillを出します。
Skillの審査
AlexaのSkillはいくつかのガイドラインに沿って作られていないと審査を通りませんので、下記のページのガイドラインを読んでおきましょう。
https://developer.amazon.com/ja/docs/custom-skills/certification-requirements-for-custom-skills.html
審査に落ちるとここ直してください、と下記の様なメールが親切に来ます。
震度の指定を数字以外にしたらエラーが出るから直してね!とのことです。
審査が通った時もメールですぐ知らせてくれます。
審査の結果は7営業日以内とありましたが、審査を落ちた時も、通った時も翌日にはメールが来てました。
以上、無事Skillの作成が出来ました。
今回はリアルタイムでフィードを入手し、Pollyに音声化させ、S3に置いたファイルを読み上げさせていますから、地震速報を読み上げるまで 5秒程かかってしまいます。
Amazon Echoの国内販売と同時に、Alexaは日本語対応する可能性があるので発売が楽しみですね。