Amazon Alexa Skills Kitを調べてみる

  • 30
    いいね
  • 0
    コメント

先日AWSで公開されたBlogで興味深いエントリーがありました。

Create New Voice-Driven Capabilities for Alexa with AWS Lambda
TechCrunchの紹介記事はこちら
Amazon、AlexaとEchoをアンバンドル、それぞれをサードパーティーに公開―1億ドルの支援ファンドも

先のブログで発表されたのは、以下の3つのこと。

今回はこの内のAlexa Skills Kitについて、調べてみた。

そもそもAlexaって何って?

AlexaはAmazon Echoに採用されているクラウドベースの音声認識サービスです。

どのようにしてユーザーがAlexa Skillを使うか

Getting Started with the Alexa Skills Kitの図によれば、ユーザーが「Alexa, ask Greeter to say hello world.」と質問すると、Alexaがこの文脈を以下のように解析します。

  • Alexa はセッションの開始を意味します
  • ask 〜1〜 to 〜2〜は、Alexaがサポートしているフレーズの文脈
  • 〜1〜にはinvocation nameと呼ばれる機能を識別する名称が入る
  • 〜2〜invocation nameという機能に対して渡される質問やコマンド

このように、Alexaが対応しているフレーズに沿って話しかけることで、特定の機能に対して指示をだすことが出来ます。

Amazon Alexa Skills Kitはどのように使うか

Lambdaファンクションの作成

発表ではLambdaを使えるということだったので、こちらのドキュメントを参考に進めます
Developing an Alexa Skill as a Lambda Function

Lambdaファンクションをus-east-1に作成します。
(Amazon Alexa Skillsが対応しているリージョンはus-east-1だけです)
作成するLambdaファンクションのCode TemplateAlexa Skills Kit Color Expertを選択します。
スクリーンショット 2015-06-28 22.13.59.png

Lambdaファンクションの編集画面でSample EventとしてドロップダウンにAlexa用のサンプルが3つ追加されています。
スクリーンショット 2015-06-28 22.23.13.png

Sample EventでAlexa Intent - MyColorlsを実行してみます。

  "request": {
    "type": "IntentRequest",
    "requestId": "request5678",
    "intent": {
      "name": "MyColorIsIntent",
      "slots": {
        "Color": {
          "name": "Color",
          "value": "blue"
        }

サンプルのJSONでは、request typeがIntentRequestとなっているので、ファンクションのソースを覗くと、以下の判定によりonIntentが呼び出されるのがわかります。

}  else if (event.request.type === "IntentRequest") {
  onIntent(event.request,
           event.session,
           function callback(sessionAttributes, speechletResponse) {
              context.succeed(buildResponse(sessionAttributes, speechletResponse));
  });
} else if (event.request.type === "SessionEndedRequest") {

onIntentの中では、Sample Eventで指定されているintent nameのMyColorIsIntentが実行されるようになっています

function onIntent(intentRequest, session, callback) {
    console.log("onIntent requestId=" + intentRequest.requestId
                + ", sessionId=" + session.sessionId);

    var intent = intentRequest.intent,
        intentName = intentRequest.intent.name;

    // Dispatch to your skill's intent handlers
    if ("MyColorIsIntent" === intentName) {
        setColorInSession(intent, session, callback);
    } else if ("WhatsMyColorIntent" === intentName) {

setColorInSessionの中では、Sample Eventで指定されている、slots Colorがある場合は、I now know your favorite color is〜とEventで指定した色が含まれた返事が生成されます。

つまり、Alexaに対してAlexa, my favorite color is blueと問いかけるとSample EventのようなデータがLambdaファンクションに渡されてきます。
Lambdaで処理した結果、I now know your favorite color is blue. You can ask me your favorite color by saying, what's my favorite color?が呼び出し元(Amazon Echoなど)に返されます。

Alexa Skillsを登録する

実際に作成したLambdaファンクションをAmazon Echoから実行するには、Alexa Skillsを登録する必要があります。
Alexa Skillsを作るにはdeveloper portalにアカウントが作られている必要があります。

ダッシュボードのAlexaからAdd a New skillボタンをクリックします。
スクリーンショット 2015-06-28 21.48.21.png

Skillの情報を入力しますスクリーンショット 2015-06-28 22.01.43.png

  • Name:Echo Appに表示される名称
  • Invocation Name:Alexaに対して実行させる機能を識別するための名称
  • Version:バージョン
  • Endpoint:LambdaファンクションのARNを入力します

Skillが登録されるとApplication IDが発行されるので、このIDをLambdaファンクションに書きます。
さっきのサンプルはLambda上で動かすだけだったので、ソース上でコメントアウトされていましたが、実際に外部から呼び出す場合は、Application IDが必須となります。

exports.handler = function (event, context) {
    try {
        console.log("event.session.application.applicationId=" + event.session.application.applicationId);

        /**
         * Uncomment this if statement and populate with your skill's application ID to
         * prevent someone else from configuring a skill that sends requests to this function.
         */
        /*
        if (event.session.application.applicationId !== "amzn1.echo-sdk-ams.app.[unique-value-here]") {
             context.fail("Invalid Application ID");
         }
        */

これでテスト用のAmazon Echoを登録して、実行できるようになるみたいですが、、、
Amazon Echoを持っていないので、試すことが出来ません。。
ほしいな〜〜

あとがき

Amazon Alexaを利用することで、音声から新しいサービスを利用できるようになるわけですが、現状はAmazon EchoとEcho Appしか対応していません。
しかし、今回の発表では音声入力するデバイス側に対してもAlexa Voice Servicesとして提供されるので、Alexaを使うデバイスと、Alexaを介してオリジナルのサービスを提供する事が可能な環境が出来上がります。

新しいスタートアップが登場して、今までにないサービスが提供されるかもしれませんね。