あなたのAlexaダッシュボード 設定

カスタムスキルのAWS Lambda関数を作成する

カスタムAlexaスキル用のクラウドベースのサービスを構築する最も簡単な方法は、AWS Lambdaを使用することです。このAmazon Web Servicesが提供するサービスは、必要なときにのみコードを実行し、自動的にスケールするため、サーバーをプロビジョニングしたり、連続実行したりする必要がありません。Alexaスキル用のコードをLambda関数にアップロードすれば、後はLambdaが処理します。Alexa音声対話に応答してコードを実行し、自動的にコンピューティングリソースを管理します。

Lambda関数とカスタムスキルについて

サービスにLambda関数を使用することで独自のエンドポイントをセットアップ・管理する手間を一部省くことができます。

  • サービス用のコンピューティングリソースを管理する必要がありません。
  • SSL証明書が必要ありません。
  • AWS内の権限によって関数を実行するためのアクセスが制御されるため、Alexaサービスからリクエストが届いたかどうかを自身で確認する必要がありません。
  • AWS Lambdaは、必要な場合にのみコードを実行し、使用状況に合わせてスケールするため、サーバーをプロビジョニングしたり、連続実行したりする必要がありません。
  • AlexaがTLSを使用してLambdaとの通信を暗号化します。AWSセキュリティのベストプラクティスも参照してください。
  • ほとんどの開発者にとって、Alexaスキルをサポートする関数にはLambda無料利用枠で十分です。毎月のリクエストが100万件まで無料になります。Lambda無料利用枠は自動的に期限が切れることはなく、永久に使用できることに注意してください。

AWS Lambdaは、Node.js, Java, Python, or C#で記述されたコードをサポートします。Node.jsまたはPythonコードをAWS Lambdaコンソールのインラインコードエディターでコピーして編集することも、コードをzipファイルでアップロードすることもできます。基本的なテストでは、LambdaコンソールでJSONリクエストを送信することにより、自分の関数を手動で呼び出すことができます。

AWS Lambdaの概要については、AWS Lambdaとはを参照してください。

Lambda関数は、同じサービスインターフェースに準拠し、Alexaから送信される3種類のリクエストを処理する必要があります。Alexaリクエストの処理方法の詳細については、Alexaから送信されたリクエストを処理するを参照してください。JSONインターフェースの詳細については、カスタムスキルのJSONインターフェースのリファレンスを参照してください。

このドキュメントでは、カスタムスキル用の新しいLambda関数の作成方法について説明します。スマートホームスキルAPIを使用する場合は、Lambdaを使用してスキルアダプターを作成します。[Alexaスマートホームスキルの作成手順][steps-to-create-a-smart-home-skill]を参照してください。

Alexaスキル用のLambda関数を作成する

Lambdaコンソールを使用して新しいLambda関数を作成し基本的なテストを実行します。設計図を利用して、Node.jsまたはPythonで基本的な機能を実装したシンプルなスキルを作成することができます。もしくは、設計図の手順をスキップして、Lambda関数を一から作成することもできます。

Javaでサービスをコード化したいが、まだJavaプロジェクトをセットアップしていない場合は、サンプルのいずれかを自分の関数のひな形として使用することもできます。

新しいLambda関数を作成するには:

  1. AWS上にまだアカウントがない場合は、Amazon Web Servicesにアクセスしてアカウントを作成します。
  2. AWSマネジメントコンソールにログインし、AWS Lambdaに移動します。
  3. コンソールの右上にあるリージョンドロップダウンをクリックして、「Asia Pacific(Tokyo)」、「US East (N. Virginia)」、「US West(Oregon)」、「EU (Ireland)」のいずれかを選択します。

    Alexaスキル用のLambda関数は、Asia Pacific(Tokyo)US East (N. Virginia)US West(Oregon)EU (Ireland)のいずれかのリージョンでホストする必要があります。

  4. まだLambda関数がない場合は、Get Started Nowをクリックします。または、関数の作成(Create Function)をクリックします。
  5. Node.jsまたはPythonのサンプルコードから始めるには、Alexa Skills Kitのいずれかの設計図を選択します。
    • alexa-skill-kit-sdk-factskill
    • alexa-skill-kit-sdk-triviaskill
    • alexa-skills-kit-color-expert
    • alexa-skill-kit-sdk-howtoskill
    • alexa-skills-kit-color-expert-python

    GitHub上のAlexaアカウントでこれらのサンプルの詳細を確認できます。

  6. 関数の名前を入力します。
  7. 関数のロールを選択します。ロールにより、関数がアクセスできるAWSリソースを定義します。
    • 既存のロールを使用するには、「既存のロールを選択」でロールを選択します。
    • 新しいロールを作成するには、後述の関数の新しいロールを定義するを参照してください。
  8. 関数の作成を選択します。
  9. ランタイムに使用する言語(Node.js、Java、またはPython)を選択します。
    • Javaを選択した場合は、Javaコードをzipファイルでアップロードする必要があります。
    • 一旦保存した関数の言語は変更できないことに注意してください。
    • トリガータブを選択し「+トリガーを追加」を選択します。ボックスをクリックして、Alexa Skills Kitを選択してから、送信をクリックします。
  10. 保存」をクリックして新しい関数を保存します。
  11. 後述の内容を参照して、コンソールで関数をテストします。 自分のコードを追加する準備ができたら、関数を編集して「関数コード」タブを選択して関数を編集します。ここから以下のいずれかを実行できます。
  • コードをLambdaコンソール内のコードエディターで直接記述します(Node.jsまたはPython)。
  • コードをオフラインで記述し、それをコピーしてLambdaコンソールエディターに貼り付けます(Node.jsまたはPython)。
  • コードをオフラインで記述し、それをLambda関数にzipファイルでアップロードします(Node.jsPython、またはJava)。
  • Eclipse IDEとAWS Toolkit for Eclipseを使用します(Java)。詳細については、AWS LambdaとToolkit for Eclipseを使用するを参照してください。

Defining a New Role for the Function

The role specifies the AWS resources your function can access. To create a new role while configuring your function:

  1. For Role (under Lambda function handler and role), select Create new role from template(s).
  2. Enter the Role Name.
  3. From the Policy templates list, select Simple Microservice permissions.

コンソールでLambda関数をテストする

Lambdaコンソールで、Alexaから送信されたリクエストと同様に書式設定されたサンプルJSONイベントを送信することにより、Lambda関数を手動でテストすることができます。コンソール内のテスト用にサンプルイベントが付属しています。これらのイベントをひな形として使用し、Alexaサービスから自分の関数に送信されたリクエストを表すように変更します。また、AWS CLIでもLambda関数にイベントを送信することができます。

JSONインターフェースの詳細については、カスタムスキルのJSONインターフェースのリファレンスを参照してください。

  1. 「関数」リストで、詳細を開く関数名をクリックします。
  2. アクション」をクリックしてから、「テストイベントの設定」をクリックします。
  3. イベントテンプレート」リストで、サンプルAlexaリクエストのいずれかを選択します。例えば、関数の作成でalexa-skills-kit-color-expert設計図、またはalexa-skills-kit-color-expert-python設計図を選択した場合は以下を選択します。
    • Alexa Start Session
    • Alexa Intent - MyColors
    • Alexa End Session

    これらのリクエストのいずれかをそのまま送信することも、別のインテントとスロット値をテストするひな形として使用することもできます。

  4. イベント名を入力します。
  5. 作成」を選択します。 テストイベントの構成が終了したら、「テスト」をクリックするとその同じリクエストが送信されます。別のイベントを構成するには、「テストイベントの設定」をクリックします。

関数を実行すると、関数から返された応答がJSON形式で「Execution result」セクションに表示されます。「Sample event」ボックスに貼り付けたリクエストに適切な応答が表示されるはずです。たとえば、LaunchRequestの場合は、サンプルが次のような応答を返します。

{
  "version": "1.0",
  "sessionAttributes": {},
  "response": {
    "outputSpeech": {
      "type": "PlainText",
      "text": "Alexa Skills Kitサンプルにようこそ。好きな色を教えてください。たとえば、私の好きな色は赤です、などと言うことができます"
    },
    "card": {
      "type": "Simple",
      "title": "SessionSpeechlet - ようこそ",
      "content": "SessionSpeechlet - Alexa Skills Kitサンプルへようこそ。好きな色を教えてください。たとえば、私の好きな色は赤です、などと言うことができます"
    },
    "reprompt": {
      "outputSpeech": {
        "type": "PlainText",
        "text": "好きな色を教えてください。たとえば、私の好きな色は赤です、などと言うことができます"
      }
    },
    "shouldEndSession": false
  }
}

Execution logs」セクションに、コードによって生成されたログメッセージが表示されます。サンプルは、リクエストの種類ごとにログメッセージを書き込むため、次のように表示されるはずです。

2015-05-18T23:53:22.357Z    0f885f98-fdb9-11e4-80af-1b9f8363b496    onIntent requestId=amzn1.echo-api.request.6919844a-733e-4e89-893a-fdcb77e2ef0d, sessionId=amzn1.echo-api.session.abeee1a7-aee0-41e6-8192-e6faaed9f5ef

Alexa Skills Kitトリガーを構成する

Alexa Skills Kitトリガーを構成すると、関数に必要な呼び出し権限がAlexaに付与されます。

関数を作成しながらトリガーを構成した場合は、次の手順をスキップできます。

1.AWSマネジメントコンソールにログインし、AWS Lambdaに移動します。 2.リストで自分の関数をクリックして、構成の詳細を開きます。 3.「トリガー」タブを選択します。 4.「Add trigger」をクリックします。 5.縁取りされたボックスをクリックし、「Alexa Skills Kit」を選択します。 6.「Submit」をクリックします。

悪意のある呼び出し元から関数を保護するために、呼び出し権限をAlexaのみに制限することを強くお勧めします。

Color Expert設計図用のサンプル対話モデル

alexa-skills-kit-color-expertブループリントとalexa-skills-kit-color-expert-pythonプループリントのどちらかを使用してLambda関数を作成したら、Alexa対応端末とサービスシミュレーターのどちらかを使用してサンプルスキルをテストすることができます。これを行うには、開発者ポータルにスキルを登録し、スキル用の対話モデルを指定する必要があります。

サンプル用の非常に単純な対話モデルを以下に示します。この新しいスキルを登録するときに、この情報を開発者ポータルの「Interaction Model」ページの「インテントスキーマ」ボックスと「サンプル発話」ボックスにコピーします。

インテントスキーマ

{
  "intents": [
    {
      "intent": "MyColorIsIntent",
      "slots": [
        {
          "name": "Color",
          "type": "LIST_OF_COLORS"
        }
      ]
    },
    {
      "intent": "WhatsMyColorIntent"
    },
    {
      "intent": "AMAZON.HelpIntent"
    }
  ]
}

カスタムスロットタイプ

LIST_OF_COLORSという名前のタイプを作成して、次の値を貼り付けます。

緑色
赤色
青色
オレンジ色
金色
銀色
黄色
黒色
白色

サンプル発話

WhatsMyColorIntent 私の好きな色は何ですか
WhatsMyColorIntent 私の好きな色は何ですか
WhatsMyColorIntent 私の色は何ですか
WhatsMyColorIntent 私の色は何ですか
WhatsMyColorIntent 私の色
WhatsMyColorIntent 私の好きな色
WhatsMyColorIntent 私の色を教えて
WhatsMyColorIntent 私の好きな色を教えて
WhatsMyColorIntent 私の好きな色を教えて
WhatsMyColorIntent 私の色を教えて
WhatsMyColorIntent 私の色は何ですか
WhatsMyColorIntent 私の好きな色は何ですか
WhatsMyColorIntent はい
WhatsMyColorIntent いいよ
WhatsMyColorIntent もちろん
WhatsMyColorIntent はいどうぞ
MyColorIsIntent 私の好きな色は{Color}です

注:保存の際にbuild errorが発生する場合は{}の前後に半角スペースを入力してください。

次のステップ

Lambdaと一緒に使用可能なその他のNode.jsサンプルとJavaサンプルについては、以下を参照してください。