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」を選択します。

IMG_3741.png_new.png

Alexa Skills Kit を選択。

IMG_3742.png_new.png

呼び出し名の定義

右上の「新しいスキルを追加する」を選択

IMG_3743.png_new.png

言語やスキル名、呼び出し名を指定して、保存をクリック。

IMG_3745.png_new.png
スキル名: HelloWorld
呼び出し名: うちゅうのまめちしき

としました。これで「アレクサ、宇宙の豆知識を開いて」みたいにアプリを起動することができるようになります。

インテントスキーマの設定

いわゆる呼び出すメソッドを定義します。 下記のように「GetNewFactIntent?」というメソッドを定義してみます。

IMG_3746.png_new.png
{
  "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" }
  ]
}

こんな感じの、引数を定義した場合のサンプルがあります。

サンプル発話の設定

「サンプル発話」の欄は以下のように定義します。

IMG_3747.png_new.png
GetNewFactIntent 豆知識
GetNewFactIntent 豆知識を教えて
GetNewFactIntent 他の豆知識
GetNewFactIntent 雑学
GetNewFactIntent 雑学を教えて
GetNewFactIntent 他の雑学
GetNewFactIntent 知識
GetNewFactIntent 何か
GetNewFactIntent 何か教えて

上記のようにサンプル発話を指定することで、先の GetNewFactIntent? などのインテント名を日本語に関連付けます。

サンプル発話の仕様についても、先とおなじサイトに説明があって

ココをみると

GetHoroscope {Sign} の運勢を教えて
GetHoroscope {Sign} の {Date} の運勢を教えて

というように、インテントの定義で定義したSign/Date などの引数をプレースホルダとして指定することが出来るようですね。

ロジックを記述したLambdaのアップロード

つづいてAlexaが起動した後に実際に動くビジネスロジックを設定しますが、今回は参考にしているサイトにあるLambda関数を使用します。具体的には、

https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/jp/tutorials/fact/lambda.zip

をあらかじめダウンロードしておき、任意のAWSのアカウントにこのLambda関数をアップロードしておけばOKです。

lambda.png

上記のキャプチャのように、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名を指定して「次へ」を選びます。

IMG_3748.png_new.png

テストしてみる

次画面で、実際にLambdaのロジックを呼び出したらどうなるかをテストすることが出来ます。

下記画面の サービスシミュレータの「発話を入力してください」のテキストボックスに「宇宙の豆知識を開いて」と入力し「HelloWorld?を呼び出す」ボタンをクリックすると、実際にLambdaの関数を呼び出した結果が出力されます。

IMG_3749.png_new.png

その他公開情報の設定

Echo上でスキルを公開するための情報を記載します。下の図のように、Alexaのスキル一覧のどのカテゴリに表示させるかとか、スキルのアイコンになるアイコン画像などを指定します。

IMG_3753.png_new.png
IMG_3754.png_new.png

プライバシーとコンプライアンス

下の図のように、プライバシーとコンプラに関する情報を設定します。最後に「保存」ボタンを押せば完了です。

IMG_3755.png_new.png

まとめ

以上で、スキルの定義からAWs Lambda関数の紐付け、またドライバ(テスト画面)から起動、最後に公開情報の登録までが完了です。

ちなみに、これまで入力していた情報がもれなく入力されていると、左のメニュー部のチェック(緑のチェック)がすべて緑になり、またおなじくメニュー部の「Skills Beta Testing」のステータスが「まだ利用できません」から「開始されていません」にかわります。ここまで行うと実機でのテストが出来るようになりますが、それはまたあらためて説明します。

IMG_3756.png_new.png

関連リンク


この記事は

選択肢 投票
おもしろかった 0  
そうでもない 0  

Top / Amazon Alexa / Skillを作ってみる

現在のアクセス:736


添付ファイル: fileIMG_3756.png_new.png 148件 [詳細] fileIMG_3755.png_new.png 131件 [詳細] fileIMG_3754.png_new.png 171件 [詳細] fileIMG_3749.png_new.png 172件 [詳細] fileIMG_3748.png_new.png 151件 [詳細] fileIMG_3753.png_new.png 139件 [詳細] filelambda.png 149件 [詳細] fileIMG_3747.png_new.png 152件 [詳細] fileIMG_3746.png_new.png 169件 [詳細] fileIMG_3745.png_new.png 168件 [詳細] fileIMG_3743.png_new.png 151件 [詳細] fileIMG_3742.png_new.png 177件 [詳細] fileIMG_3741.png_new.png 172件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-09 (火) 09:16:28 (674d)