私は現在Alexaスキルを作る練習をしているのですが、備忘録も兼ねて
Alexa Skills Kit(ASK)とAWS Lambdaでスキルを作る流れ
を書いていきたいと思います。
「Alexaスキルを作ってみたいけど、何をしたらいいか分からない」という方の参考になれば幸いです。
以前、GoogleHomeでスキルを作る流れを書いてきましたが、今回はAlexa版になります。
GoogleHomeで簡単なアプリを作る流れは以下の記事をご覧ください。
今記事では、
- 「こんにちは」と話しかけたら「こんにちは、ご機嫌いかがですか?」
- 「またね」と話しかけたら「またお会いしましょう」
と返答するスキルを作ってみたいと思います!
なお、AWSアカウントが無くてもLambdaを利用して開発する方法がありますので、AWSアカウントを作りたくない方はこちらの記事をご覧ください。
目次
Alexa Skills KitとLambdaでスキルを作る流れ
Alexaスキルは、Alexa Skills Kit(以下、ASKと記載します)とAWSのLambdaを用いて作成していきます。
ASKはプログラミングの知識は不要ですが、Lambdaはnode.jsやpythonなどのプログラミングの知識が必要です。
ただ、そんなに難しくないので慣れれば大丈夫です。
<必要なモノ>
- Amazon開発者ポータルのアカウント
- AWSのアカウント
- Amazon Echo本体(シミュレーターの代用でもOK)
<Alexaスキルを作る流れ>
- ASKとAWSのアカウントを作成する
- ASKでスキル(プロジェクト)を作成する
- AWS Lambda関数を作成し、スキルとLambdaを紐づける
- Lambdaでリクエストを処理する部分を作成する
- テストして動作確認する
以上です。それでは順番に実施していきましょう。
ASKとAWSのアカウント作成
ASK(Alexa Skills Kit)を利用するためにAmazon開発者ポータルのアカウントを、Lambdaを利用するためにAWS(Amazon Wen Services)のアカウントを作成します。
ASKはスキル本体を作成するサービスで、Lambdaはスキルに話しかけられたリクエストを処理する部分になります。
Amazon開発者ポータルのアカウント作成
ASKはAmazon開発者ポータルから利用することができるので、まずはAmazon開発者ポータルのアカウントが必要です。
すでにAmazonのアカウント(買い物に使ってるアカウント)を持っているならそれでログインして作成できますし、新規に作ってもOKです。
ただし、新規に作る場合はハマりどころがあるので以下のブログ記事を参考に作ってください。
AWSのアカウント作成
AWSのアカウントの作成方法は以下の公式記事を参考にしてください。
アカウントの作成にはクレジットカードの登録が必要ですが、Lambdaは12か月間の無料枠内で利用できますので恐らく1円もかからないはずです。
Amazon開発者ポータルとAWSのアカウントが無事作成できれば、準備OKです。
早速スキルを開発していきましょう。
※これより以下の画像はクリック(またはタップ)で拡大しますので、小さくて見にくい場合は拡大してご覧ください。
ASKでスキル(プロジェクト)を作成する
Amazon開発者ポータルにログインして、ASKからスキルを作成していきます。
Alexa Skills Kitのページから、「スキル開発を始める」をクリックするとスキル開発の画面に行けます。
「スキルの作成」をクリックしてスキル開発を始めましょう!
設定は、以下の画面のようにデフォルトで大丈夫です。適当なスキル名を入力したら、「スキルを作成」をクリックして作成します。
以下が実際にスキルを作成していくための画面です。
画面右側の「スキルビルダーのチェックリスト」に従ってスキルを作成していきます。
呼び出し名の設定
まずはスキルの呼び出し名を設定します。
「アレクサ、〇〇を起動して」
のような、〇〇に入る名前のことです。
今回は、「こんにちは世界」(HelloWorld)というスキル名を設定しました。
呼び出し名を入力したら、「モデルを保存」をクリックして保存します。
今後、同じように何かを設定したら必ず保存することを忘れないでくださいね。
最初の画面に戻ると、緑色のチェックマークがついていると思います。これで呼び出し名の設定は完了です。
インテントの設定
次に、インテントを設定していきます。
スキルには最低限1つ以上のインテントの設定が必要です。(スロットは特に無くても大丈夫です。)
今回は、
- 「こんにちは」と話しかけたら「こんにちは、ご機嫌いかがですか?」
- 「またね」と話しかけたら「またお会いしましょう」
と返答するスキルを作ってみますので、「こんにちは」と「またね」に関する2種類のインテントを設定していきます。
まず最初に「こんにちは」に対応するインテントを作成しましょう。
インテント名は「HelloWorldIntent」という名前にしておきます。
そして、発話パターンを登録します。
「こんにちは」の他に、「ごきげんよう」も登録しておきました。他にも発話パターンがあれば追加しましょう。
追加が終わったら、「モデルを保存」でインテントを保存します。
画面左側の「インテント」をクリックすると以下の画面になり、インテント名の一番下に「HelloWorldIntent」が登録されていることが分かります。
続いて、「またね」のインテントも追加していきましょう。
インテント名は「GoodbyeIntent」、発話パターンは「またね」や「さようなら」を登録しました。
これでインテントの設定は完了です。
スキルをビルド
では次に、スキルをビルドしてみます。
「モデルをビルド」をクリックするとビルドが始まります。
先ほど追加したインテントに問題が無ければ、無事ビルドが成功するはずです。
もし発話パターンが競合していたりするとビルドに失敗しますので、その場合はエラー内容を確認して修正してください。
では最後に、エンドポイントを設定します。
エンドポイントの設定
エンドポイントとは、リクエストを処理する部分のことです。
ASKではインテントなどの発話パターンを設定することができますが、
その発話パターンが来たら何を処理して何を返すか?という複雑なことはASK側では設定できません。
なので、そういったリクエストの処理はエンドポイント側で処理することになります。
今回やりたいことは、
「こんにちは」という発話が来たら、「こんにちは、ご機嫌いかがですか?」
と応答することなので、「こんにちは、ご機嫌いかがですか?」という応答をエンドポイント側で作成します。
具体的には、
「こんにちは」のインテント「HelloWorldIntent」がエンドポイント側に渡るので、
エンドポイント側は「HelloWorldIntent」が来たら、「こんにちは、ご機嫌いかがですか?」という文字列を返す
という処理を行います。
それでは実際に設定していきましょう。
エンドポイントの処理はAWSのLambdaで行います。
もちろん、Lambda以外をエンドポイントに設定することもできますが、LambdaはASKと親和性が非常に高いので、Lambdaを使うことが推奨されています。
この赤枠のところにLambdaのエンドポイントを入力します。
では肝心のLambdaを作成していきましょう。
AWS Lambda関数を作成し、スキルとLambdaを紐づける
AWSにログインして、Lambda関数を作成します。
関数は、「一から作成」、「設計図の使用」、「Serverless Application Repositoryの参照」のいずれから選択します。
本来は、Alexaスキル用のLambda関数テンプレートがあるのですが、「設計図の使用」にAlexa用のテンプレートが出てきません。
どうやらまだ対応されてないようで、「Serverless Application Repositoryの参照」ならだれかが作ったテンプレートがたくさんあるのですが、要らないコードも混じっているので、
今回は「一から作成」で最小限のテンプレートを持ってくることにしましょう。
「一から作成」を選び、適当な関数名を入力し、ロールを選択します。
すでに使用中のロールがあればそれを使っても良いですが、新規に作っても大丈夫です。
関数が作成されると、以下の画面になります。
赤で囲ったARNという部分がLambdaのエンドポイントなので、これを先ほどのASKに貼り付ければ紐づけはOKです。
その前に、Lambda側に先ほどのASKのプロジェクトを関連付けます。
「トリガーを追加」をクリックして、「Alexa Skills Kit」を選択します。
そして、先ほどASKで作成したスキルのIDを入力します。スキルのIDはエンドポイントの設定画面に表示されていますので、コピペします。
これでLambda側の関連付けはOKです。
では、Lambda側のARNをコピーして、ASK側のエンドポイント設定画面に貼り付けましょう。
貼り付けたら、「モデルを保存」で保存しましょう。これでASK側の設定は一旦すべて完了です。
次に、Lambdaでリクエストを処理する部分を作っていきましょう。
Lambdaでリクエストを処理する部分を作成する
それではLambdaでプログラミングしていきます。
具体的には、ASKから「HelloWorldIntent」が渡ってきたら、「こんにちは、ご機嫌いかがですか?」という文字列を返す処理を作ります。
しかし、デフォルトだとこんな感じで何もない状態です。
Alexaとやり取りするために適切なテンプレートがあるので、それを外部から持ってくることにします。
テンプレートはQiitaの以下の記事が参考になりました。
Node.js版Alexaスキルの最小構成のテンプレートと、zipファイルでスキルをAWS Lambdaに配置する方法
以下のGitHub上に最小構成のテンプレートがあるので、こちらを拝借します。
zipをダウンロードして、Lambda上にアップロードしましょう。
するとこんな感じでいいテンプレートができあがります。
ではコードを書き換えていきます。
最初にスキルを起動したときに話してくれる内容と、各インテントの処理を変更していきます。
スキルを起動したときに「ようこそ」と言ってくれるように、そして「HelloWorldIntent」が来た時に「こんにちは、ご機嫌いかがですか?」と言ってくれるように書き換えました。
同じく、「GoodbyeIntent」が来た時に「またお会いしましょう」と言ってもらいたいので、
「HelloWorldIntent」をコピペして「GoodbyeIntent」に書き換えて、応答を「またお会いしましょう」に書き換えました。
これで、
- スキルを起動したら「ようこそ」と言ってくれる
- 「こんにちは」と話したら「こんにちは、ご機嫌いかがですか?」と言ってくれる
- 「またね」と話したら「またお会いしましょう」と言ってくれる
処理が完成しました!
書き換えは簡単ですよね。
ではこれを保存して、実際に動作するかテストしてみましょう。
テストして動作確認する
最後のステップです。
作成したスキルとエンドポイント(Lambda)がちゃんと動くかどうかテストしましょう。
実機のEchoでテストしても良いんですが、ASKのテストシミュレーターを使った方が早いです。
ASKのメニューの「テスト」から、ステータスを「非公開」→「開発中」に変更しましょう。これでテストができます。
では実際にスキル名「こんにちは世界」を入力して、「こんにちは」と打ってみます。
おお!いけましたね!成功です。
スキルを起動すると「ようこそ」、「こんにちは」を言うと「こんにちは、ご機嫌いかがですか?」と返してくれていますね。
「またね」も打ってみましょう。
いけました!ばっちりですね。
一つ注意点として、今回のスキルは「こんにちは」を応答した時点でスキルがいったん終了してしまうので、次の発話は再度スキルを起動してからじゃないと通じない点だけ注意してテストしてください。
以上でスキルの作成は完了です!お疲れさまでした。
なお、もしAWSを複数人で触る場合は、IAMユーザーの作成をしておいた方がセキュリティ面で便利ですよ。
まとめ
今回は、ASKとAWS Lambdaで簡単なスキルを作る流れを紹介しました。
ステップとしては長いですが、作り方は意外と簡単だったと思います。
以前紹介した記事ではGoogleHomeでアプリを作りましたが、今回はAlexaでもスキルを作れましたので、これでどちらのスマートスピーカーも扱えることになりました!
ぜひみなさんもAlexaスキルづくりやってみてください。とても楽しいですよ!