スマートスピーカー

Alexa Skills KitとLambdaでスキルを開発する流れ

Alexa Skills KitとLambdaでスキルを作る流れ

私は現在Alexaスキルを作る練習をしているのですが、備忘録も兼ねて

Alexa Skills Kit(ASK)とAWS Lambdaでスキルを作る流れ

を書いていきたいと思います。

 

Alexaスキルを作ってみたいけど、何をしたらいいか分からない」という方の参考になれば幸いです。

以前、GoogleHomeでスキルを作る流れを書いてきましたが、今回はAlexa版になります。

 

GoogleHomeで簡単なアプリを作る流れは以下の記事をご覧ください。

DialogFlowのinlineエディターでアプリを作る流れ【2019年7月・GoogleHome】
DialogFlowで簡単なアプリを作る流れ【2019年7月・GoogleHome】Actions on GoogleとDialogFlowでGoogleアシスタント対応アプリを作っていきたいと思います。最初は最も簡単な、ただ応答するだけのアプリを作る流れをスクリーンショットで解説しますので、ぜひみなさんも作ってみてください。...
DialogFlowのinlineエディターでアプリを作る流れ【2019年7月・GoogleHome】
DialogFlowのinline Editorでアプリを作る流れ【2019年7月・GoogleHome】DialogFlowのInline EditorでGoogleアシスタント対応アプリを作っていきたいと思います。最初は最も簡単な、ただ条件分岐するだけのアプリを作る流れをスクリーンショットで解説しますので、ぜひみなさんも作ってみてください。...
DialogFlowのWebhookでAzureを指定し呼び出す流れ【2019年7月・GoogleHome】
DialogFlowのWebhookでAzureを指定し呼び出す流れ【2019年7月・GoogleHome】DialogFlowのinlineエディターの代わりにAzure Functionsで作ったAPIを呼んで応答する簡単なプログラムを作成していきたいと思います。AzureのAPIでは地域別の天気情報を取得してそれをDialogflowに返す流れをスクリーンショットで解説しますので、ぜひみなさんも作ってみてください。...

 

今記事では、

  • 「こんにちは」と話しかけたら「こんにちは、ご機嫌いかがですか?」
  • 「またね」と話しかけたら「またお会いしましょう」

と返答するスキルを作ってみたいと思います!

 

なお、AWSアカウントが無くてもLambdaを利用して開発する方法がありますので、AWSアカウントを作りたくない方はこちらの記事をご覧ください。

AWSアカウントが無くてもAlexa-Hostedでスキル開発する流れ
AWSアカウントが無くてもAlexa-Hostedでスキル開発する流れAlexa Skills Kit(ASK)は基本的にAWS Lambdaでスキルを作っていくのですが、AWSアカウントが無くてもLambdaを利用してスキル開発できる方法がありますので、今回はその方法を紹介したいと思います。Alexa Skills Kitでスキルを作る際に、Alexa-Hostedという仕組みを選択するだけなので簡単に利用できますよ!...

 

Alexa Skills KitとLambdaでスキルを作る流れ

Alexaスキルは、Alexa Skills Kit(以下、ASKと記載します)とAWSのLambdaを用いて作成していきます。

ASKはプログラミングの知識は不要ですが、Lambdaはnode.jsやpythonなどのプログラミングの知識が必要です。

ただ、そんなに難しくないので慣れれば大丈夫です。

<必要なモノ>

<Alexaスキルを作る流れ>

  1. ASKとAWSのアカウントを作成する
  2. ASKでスキル(プロジェクト)を作成する
  3. AWS Lambda関数を作成し、スキルとLambdaを紐づける
  4. Lambdaでリクエストを処理する部分を作成する
  5. テストして動作確認する

以上です。それでは順番に実施していきましょう。

 

ASKとAWSのアカウント作成

ASK(Alexa Skills Kit)を利用するためにAmazon開発者ポータルのアカウントを、Lambdaを利用するためにAWS(Amazon Wen Services)のアカウントを作成します。

ASKはスキル本体を作成するサービスで、Lambdaはスキルに話しかけられたリクエストを処理する部分になります。

 

Amazon開発者ポータルのアカウント作成

ASKはAmazon開発者ポータルから利用することができるので、まずはAmazon開発者ポータルのアカウントが必要です。

すでにAmazonのアカウント(買い物に使ってるアカウント)を持っているならそれでログインして作成できますし、新規に作ってもOKです。

ただし、新規に作る場合はハマりどころがあるので以下のブログ記事を参考に作ってください。

Alexa 開発者アカウント作成時のハマりどころ

 

AWSのアカウント作成

AWSのアカウントの作成方法は以下の公式記事を参考にしてください。

AWS アカウント作成の流れ

 

アカウントの作成にはクレジットカードの登録が必要ですが、Lambdaは12か月間の無料枠内で利用できますので恐らく1円もかからないはずです。

 

Amazon開発者ポータルとAWSのアカウントが無事作成できれば、準備OKです。

早速スキルを開発していきましょう。

 

※これより以下の画像はクリック(またはタップ)で拡大しますので、小さくて見にくい場合は拡大してご覧ください。

 

ASKでスキル(プロジェクト)を作成する

Amazon開発者ポータルにログインして、ASKからスキルを作成していきます。

Alexa Skills Kitのページから、「スキル開発を始める」をクリックするとスキル開発の画面に行けます。

alexa26

 

「スキルの作成」をクリックしてスキル開発を始めましょう!

alexa4

 

設定は、以下の画面のようにデフォルトで大丈夫です。適当なスキル名を入力したら、「スキルを作成」をクリックして作成します。

alexa27

 

以下が実際にスキルを作成していくための画面です。

画面右側の「スキルビルダーのチェックリスト」に従ってスキルを作成していきます。

alexa5

 

呼び出し名の設定

まずはスキルの呼び出し名を設定します。

アレクサ、〇〇を起動して

のような、〇〇に入る名前のことです。

 

今回は、「こんにちは世界」(HelloWorld)というスキル名を設定しました。

alexa6

呼び出し名を入力したら、「モデルを保存」をクリックして保存します。

今後、同じように何かを設定したら必ず保存することを忘れないでくださいね

 

最初の画面に戻ると、緑色のチェックマークがついていると思います。これで呼び出し名の設定は完了です。

alexa7

 

インテントの設定

次に、インテントを設定していきます。

スキルには最低限1つ以上のインテントの設定が必要です。(スロットは特に無くても大丈夫です。)

 

今回は、

  • 「こんにちは」と話しかけたら「こんにちは、ご機嫌いかがですか?」
  • 「またね」と話しかけたら「またお会いしましょう」

と返答するスキルを作ってみますので、「こんにちは」と「またね」に関する2種類のインテントを設定していきます。

 

まず最初に「こんにちは」に対応するインテントを作成しましょう。

インテント名は「HelloWorldIntent」という名前にしておきます。

alexa8

 

そして、発話パターンを登録します。

alexa9

「こんにちは」の他に、「ごきげんよう」も登録しておきました。他にも発話パターンがあれば追加しましょう。

追加が終わったら、「モデルを保存」でインテントを保存します。

 

画面左側の「インテント」をクリックすると以下の画面になり、インテント名の一番下に「HelloWorldIntent」が登録されていることが分かります。

alexa10

続いて、「またね」のインテントも追加していきましょう。

 

インテント名は「GoodbyeIntent」、発話パターンは「またね」や「さようなら」を登録しました。

alexa11

 

これでインテントの設定は完了です。

alexa12 alexa13

 

スキルをビルド

では次に、スキルをビルドしてみます。

「モデルをビルド」をクリックするとビルドが始まります。

先ほど追加したインテントに問題が無ければ、無事ビルドが成功するはずです。

alexa15

もし発話パターンが競合していたりするとビルドに失敗しますので、その場合はエラー内容を確認して修正してください。

 

では最後に、エンドポイントを設定します。

 

エンドポイントの設定

エンドポイントとは、リクエストを処理する部分のことです。

 

ASKではインテントなどの発話パターンを設定することができますが、

その発話パターンが来たら何を処理して何を返すか?という複雑なことはASK側では設定できません

なので、そういったリクエストの処理はエンドポイント側で処理することになります。

 

今回やりたいことは、

「こんにちは」という発話が来たら、「こんにちは、ご機嫌いかがですか?」

と応答することなので、「こんにちは、ご機嫌いかがですか?」という応答をエンドポイント側で作成します。

 

具体的には、

「こんにちは」のインテント「HelloWorldIntent」がエンドポイント側に渡るので、

エンドポイント側は「HelloWorldIntent」が来たら、「こんにちは、ご機嫌いかがですか?」という文字列を返す

という処理を行います。

 

それでは実際に設定していきましょう。

エンドポイントの処理はAWSのLambdaで行います。

もちろん、Lambda以外をエンドポイントに設定することもできますが、LambdaはASKと親和性が非常に高いので、Lambdaを使うことが推奨されています。

alexa28

この赤枠のところにLambdaのエンドポイントを入力します。

 

では肝心のLambdaを作成していきましょう。

 

AWS Lambda関数を作成し、スキルとLambdaを紐づける

AWSにログインして、Lambda関数を作成します。

aws16

関数は、「一から作成」、「設計図の使用」、「Serverless Application Repositoryの参照」のいずれから選択します。

本来は、Alexaスキル用のLambda関数テンプレートがあるのですが、「設計図の使用」にAlexa用のテンプレートが出てきません。

aws1

どうやらまだ対応されてないようで、「Serverless Application Repositoryの参照」ならだれかが作ったテンプレートがたくさんあるのですが、要らないコードも混じっているので、

今回は「一から作成」で最小限のテンプレートを持ってくることにしましょう。

 

「一から作成」を選び、適当な関数名を入力し、ロールを選択します。

aws18

すでに使用中のロールがあればそれを使っても良いですが、新規に作っても大丈夫です。

 

関数が作成されると、以下の画面になります。

aws19

赤で囲ったARNという部分がLambdaのエンドポイントなので、これを先ほどのASKに貼り付ければ紐づけはOKです。

その前に、Lambda側に先ほどのASKのプロジェクトを関連付けます。

 

「トリガーを追加」をクリックして、「Alexa Skills Kit」を選択します。

aws4

 

そして、先ほどASKで作成したスキルのIDを入力します。スキルのIDはエンドポイントの設定画面に表示されていますので、コピペします。

aws5

 

これでLambda側の関連付けはOKです。

aws6

 

では、Lambda側のARNをコピーして、ASK側のエンドポイント設定画面に貼り付けましょう。

alexa18

貼り付けたら、「モデルを保存」で保存しましょう。これでASK側の設定は一旦すべて完了です。

alexa19

 

次に、Lambdaでリクエストを処理する部分を作っていきましょう。

 

Lambdaでリクエストを処理する部分を作成する

それではLambdaでプログラミングしていきます。

具体的には、ASKから「HelloWorldIntent」が渡ってきたら、「こんにちは、ご機嫌いかがですか?」という文字列を返す処理を作ります。

 

しかし、デフォルトだとこんな感じで何もない状態です。

aws7

Alexaとやり取りするために適切なテンプレートがあるので、それを外部から持ってくることにします。

テンプレートはQiitaの以下の記事が参考になりました。

Node.js版Alexaスキルの最小構成のテンプレートと、zipファイルでスキルをAWS Lambdaに配置する方法

以下のGitHub上に最小構成のテンプレートがあるので、こちらを拝借します。

https://github.com/shuheydev/MinimumAlexaSkill_lambda_nodejs/blob/master/MinimumAlexaSkill_lambda_nodejs.zip

 

zipをダウンロードして、Lambda上にアップロードしましょう。

aws8

 

するとこんな感じでいいテンプレートができあがります。

aws9

 

ではコードを書き換えていきます。

最初にスキルを起動したときに話してくれる内容と、各インテントの処理を変更していきます。

aws10

 

スキルを起動したときに「ようこそ」と言ってくれるように、そして「HelloWorldIntent」が来た時に「こんにちは、ご機嫌いかがですか?」と言ってくれるように書き換えました。

aws11

 

同じく、「GoodbyeIntent」が来た時に「またお会いしましょう」と言ってもらいたいので、

「HelloWorldIntent」をコピペして「GoodbyeIntent」に書き換えて、応答を「またお会いしましょう」に書き換えました。

aws12 aws13

 

これで、

  • スキルを起動したら「ようこそ」と言ってくれる
  • 「こんにちは」と話したら「こんにちは、ご機嫌いかがですか?」と言ってくれる
  • 「またね」と話したら「またお会いしましょう」と言ってくれる

処理が完成しました!

書き換えは簡単ですよね。

 

ではこれを保存して、実際に動作するかテストしてみましょう。

 

テストして動作確認する

最後のステップです。

作成したスキルとエンドポイント(Lambda)がちゃんと動くかどうかテストしましょう。

実機のEchoでテストしても良いんですが、ASKのテストシミュレーターを使った方が早いです。

 

ASKのメニューの「テスト」から、ステータスを「非公開」→「開発中」に変更しましょう。これでテストができます。

では実際にスキル名「こんにちは世界」を入力して、「こんにちは」と打ってみます。

alexa29

 

おお!いけましたね!成功です。

スキルを起動すると「ようこそ」、「こんにちは」を言うと「こんにちは、ご機嫌いかがですか?」と返してくれていますね。

 

「またね」も打ってみましょう。

alexa30

いけました!ばっちりですね。

一つ注意点として、今回のスキルは「こんにちは」を応答した時点でスキルがいったん終了してしまうので、次の発話は再度スキルを起動してからじゃないと通じない点だけ注意してテストしてください。

 

以上でスキルの作成は完了です!お疲れさまでした。

 

なお、もしAWSを複数人で触る場合は、IAMユーザーの作成をしておいた方がセキュリティ面で便利ですよ。

AWSを複数人で利用する場合はIAMを使ってアクセス制御しよう
AWSを複数人で利用する場合はIAMを使ってアクセス制御しようAWS(Amazon Web Service)アカウントを複数人で使う際に気を付けておくべきこととして、「ルートユーザーは使わない」という定石があります。AWSではIAM(Identity and Access Management)という仕組みを使ってユーザーを作り、アクセス制御を行う(管理する)ことが推奨されていますので、今回はAWSでIAMを使ってユーザーを作る流れを私の備忘録も兼ねて書いてみたいと思います。...

 

まとめ

今回は、ASKとAWS Lambdaで簡単なスキルを作る流れを紹介しました。

ステップとしては長いですが、作り方は意外と簡単だったと思います。

以前紹介した記事ではGoogleHomeでアプリを作りましたが、今回はAlexaでもスキルを作れましたので、これでどちらのスマートスピーカーも扱えることになりました!

ぜひみなさんもAlexaスキルづくりやってみてください。とても楽しいですよ!

RELATED POST