Top / Amazon Alexa / Skillを作ってみる
Amazon Echoに搭載されてるAmazon Alexaは、スキルという仕組みを使うことで、自前のプログラムをEcho上で走らすことができます。 Amazon Echo経由で呼び出されたAmazon Alexaのスキルからは、AWS Lambdaの関数を呼び出せるので、そこにロジックを書いていくわけですね。 やってみる †実際に、Alexaスキル開発トレーニングシリーズ 第1回 初めてのスキル開発 : Alexa Blogs ここの情報ほぼそのままなんですが、Amazon EchoからAWS Lambdaの関数を呼び出してみようと思います。 AWS/Amazon Developer Servicesアカウント作成メモ で作成したアカウントで https://developer.amazon.com/ からログインし、右上のDeveloper Consoleを選択。Devloper Consoleが表示されたら上部メニューの「ALEXA」を選択します。 Alexa Skills Kit を選択。 呼び出し名の定義 †右上の「新しいスキルを追加する」を選択 言語やスキル名、呼び出し名を指定して、保存をクリック。 スキル名: HelloWorld 呼び出し名: うちゅうのまめちしき としました。これで「アレクサ、宇宙の豆知識を開いて」みたいにアプリを起動することができるようになります。 インテントスキーマの設定 †いわゆる呼び出すメソッドを定義します。 下記のように「GetNewFactIntent?」というメソッドを定義してみます。 { "intents": [ { "intent": "GetNewFactIntent" }, { "intent": "AMAZON.HelpIntent" }, { "intent": "AMAZON.StopIntent" }, { "intent": "AMAZON.CancelIntent" } ] } って定義しました。インテント名: GetNewFactIntent? ってのは、いまココで定義したモノで、このあと出てくる「サンプル発話」で日本語に関連付けられます。その他のインテントはあらかじめAmazonが用意してあるビルトインされたインテントです。 インテントの設定には引数などその他の項目もあるのですが、今回はいったんこのままで。 ちなみにインテントのスキーマについては この辺に整理されていて、そこには { "intents": [ { "intent": "GetHoroscope", "slots": [ ↓ GetHoroscope ってインテントはSignとDateっていう引数を持つって意味 { "name": "Sign", "type": "LIST_OF_SIGNS" }, ←型が LIST_OF_SIGNS っていうカスタム型 { "name": "Date", "type": "AMAZON.DATE" } ←型が ビルトインのAMAZON.DATE 型 ] }, { "intent": "GetLuckyNumbers" } ] } こんな感じの、引数を定義した場合のサンプルがあります。 サンプル発話の設定 †「サンプル発話」の欄は以下のように定義します。 GetNewFactIntent 豆知識 GetNewFactIntent 豆知識を教えて GetNewFactIntent 他の豆知識 GetNewFactIntent 雑学 GetNewFactIntent 雑学を教えて GetNewFactIntent 他の雑学 GetNewFactIntent 知識 GetNewFactIntent 何か GetNewFactIntent 何か教えて 上記のようにサンプル発話を指定することで、先の GetNewFactIntent? などのインテント名を日本語に関連付けます。 サンプル発話の仕様についても、先とおなじサイトに説明があって ココをみると GetHoroscope {Sign} の運勢を教えて GetHoroscope {Sign} の {Date} の運勢を教えて というように、インテントの定義で定義したSign/Date などの引数をプレースホルダとして指定することが出来るようですね。 ロジックを記述したLambdaのアップロード †つづいてAlexaが起動した後に実際に動くビジネスロジックを設定しますが、今回は参考にしているサイトにあるLambda関数を使用します。具体的には、 をあらかじめダウンロードしておき、任意のAWSのアカウントにこのLambda関数をアップロードしておけばOKです。 上記のキャプチャのように、Lambda関数のARN名が arn:aws:lambda:ap-northeast-1:422641601508:function:MyFactSkill であることを確認しておきます。 ちなみにこのLambda関数(index.js)はだいたい以下の通りになっているようです。 'use strict'; var Alexa = require('alexa-sdk'); ... 割愛 var data = [ "水星の一年はたった88日です。", "金星は水星と比べて太陽より遠くにありますが、気温は水星よりも高いです。", "金星は反時計回りに自転しています。過去に起こった隕石の衝突が原因と言われています。", "火星上から見ると、太陽の大きさは地球から見た場合の約半分に見えます。", ... "月は毎年3.8cm地球から離れていっています。" ]; exports.handler = function(event, context, callback) { var alexa = Alexa.handler(event, context); alexa.APP_ID = APP_ID; alexa.registerHandlers(handlers); alexa.execute(); }; var handlers = { 'LaunchRequest': function () { this.emit('GetNewFactIntent'); }, 'GetNewFactIntent': function () { var factArr = data; var factIndex = Math.floor(Math.random() * factArr.length); var randomFact = factArr[factIndex]; var speechOutput = GET_FACT_MESSAGE + randomFact; this.emit(':tellWithCard', speechOutput, SKILL_NAME, randomFact) }, 'AMAZON.HelpIntent': function () { var speechOutput = HELP_MESSAGE; var reprompt = HELP_REPROMPT; this.emit(':ask', speechOutput, reprompt); }, 'AMAZON.CancelIntent': function () { this.emit(':tell', STOP_MESSAGE); }, 'AMAZON.StopIntent': function () { this.emit(':tell', STOP_MESSAGE); } }; 動くロジックの指定 †サンプル発話の設定 で「次へ」をクリックしたら、次は実際に動くロジックを指定します。先ほどAWS Lambda のARNを確認しておいたので、そのARN名を指定して「次へ」を選びます。 テストしてみる †次画面で、実際にLambdaのロジックを呼び出したらどうなるかをテストすることが出来ます。 下記画面の サービスシミュレータの「発話を入力してください」のテキストボックスに「宇宙の豆知識を開いて」と入力し「HelloWorld?を呼び出す」ボタンをクリックすると、実際にLambdaの関数を呼び出した結果が出力されます。 その他公開情報の設定 †Echo上でスキルを公開するための情報を記載します。下の図のように、Alexaのスキル一覧のどのカテゴリに表示させるかとか、スキルのアイコンになるアイコン画像などを指定します。 プライバシーとコンプライアンス †下の図のように、プライバシーとコンプラに関する情報を設定します。最後に「保存」ボタンを押せば完了です。 まとめ †以上で、スキルの定義からAWs Lambda関数の紐付け、またドライバ(テスト画面)から起動、最後に公開情報の登録までが完了です。 ちなみに、これまで入力していた情報がもれなく入力されていると、左のメニュー部のチェック(緑のチェック)がすべて緑になり、またおなじくメニュー部の「Skills Beta Testing」のステータスが「まだ利用できません」から「開始されていません」にかわります。ここまで行うと実機でのテストが出来るようになりますが、それはまたあらためて説明します。 関連リンク †
この記事は Top / Amazon Alexa / Skillを作ってみる
現在のアクセス:1831 |