Alexaのスキルを開発する ~その2~ 処理の作成(AWS Lambda)

更新履歴:
2018/05/20 AWSの画面を最新版に合わせて更新しました。

前回Amazon Developer ConsoleでAlexaのスキルを作成しました。Amazon Developer Consoleではどういう言葉を言ったときにスキルが起動するのか(呼び出し名)、どういう文章(発話サンプル)で特定の機能(インテント)を呼び出すのか、どういうパラメータ(スロット)を渡すのか、を定義しました。

今度は実際にそのデータを受け取って処理を行う部分を作成してみます。

処理はAWS LambdaかHTTPSを呼び出して行います。今回はLambdaで作ってみます。

AWSを使うにはあらかじめアカウントを作成しておく必要があります。アカウント作成の説明は省略しますが、アカウント作成してIAMでユーザー作成して…といったお決まりの約束をあらかじめ済ましておきます。

AWS Lambda

ここからLambdaで処理を作成していきます。AWSにログインしてサービス一覧からLambdaを選びます。

初めて関数を作る場合は以下の画面が表示されるので、”関数の作成”を押します。

既に何か関数が存在する場合は一覧画面が表示されるので、”関数の作成”を押します。

”設計図”を選択、フィルターに”alexa”と入力してエンター、出てきた一覧から”alexa-skill-kit-sdk-factskill”を選択して”設定”ボタンを押します。

画面が変わるので必要項目を入力していきます。

名前は”alexaCalc”にしました。ロールは”テンプレートから新しいロールを作成”を選び、ロール名は”roleAlexaCalc”にしました。”ポリシーテンプレート”は”Basic Edge Lambda アクセス権限”を選びます。

入力したら画面右下の”関数の作成”を押します。

関数が作成されました。

画面下の”関数のコード”に既に簡単なコードが入力されていますが、消して以下のソースを貼り付けます。

このソースはサンプルソースを元に作成しました。英語やドイツ語のメッセージなど、不要な部分をそぎ落としてシンプルにしてます。

const handlers = …の部分が実際の処理になります。ユーザーが話す内容に応じたインテントが呼び出されるので、該当する部分をプログラムします。

”AMAZON.HelpIntent”、”AMAZON.CancelIntent”、”AMAZON.StopIntent”はどのスキルでも自動的に定義されるビルトインインテントの中の標準インテントです。それぞれヘルプ、キャンセル、ストップ時の処理をを記述します。今回はメッセージを返すだけです。

前回はAmazon Developer Consoleで”Addition”というインテントを”{num1} プラス {num2}”という発話サンプルで定義したので、”1プラス2”と話すとhandersの”Addition”の部分が呼び出されます。

スロットは”this.event.request.intent.slots[“one”].value”という形で取得できます”one”がスロット名です。”one”と”two”のスロットを取り出して整数に変換して足してます。

処理が終わったらEchoに話させたい内容を返します。今回は”計算結果は3”と返します。

固定の文章はconst languageStringsに定義しておき、handlerからthis.t(‘ADDITION’)という形で呼び出します。その文章に計算結果をくっつけてemit()関数に渡してます。

次にトリガー、何がこの処理を呼び出すのか、を設定します。今回はAlexaスキルがこのLambda関数を呼び出すため、”Alexa Skills Kit”を選択します。

選択すると、”Alexa Skill Kit”が画面真ん中の”alexaCalc”の左下に追加されます。

さらに画面下にある”スキルID検証”を今回はテストなので”無効”にしておきます。最後に”追加”ボタンを押します。

画面右上にある”保存”ボタンを押して保存します。

これで処理が完成しました。

あとは前回Amazon Developer Consoleで作成したAlexaスキルにこのLambdaのARN(IDのようなもの)をセットしてあげます。

画面右上の”arn:”で始まる、ARNをコピーします。

Amazon Developer Consoleに戻り、左の”エンドポイント”をクリックし、”AWS LambdaのARN”を選択します。

”デフォルトの地域”にLambdaのARNを貼り付け、”エンドポイントを保存”ボタンを押します。

これでAlexaからLambdaが呼び出されて、足し算の結果を教えてくれるはずです。

次はテストしてみます。