はじめに
2020年7月頃よりβ版だったAlexa-hostedスキルが正式公開となりました。※なったはず。
ここでは新しく実装されたAlexa-hostedスキルを使ってスキルを作っていきます。
Amazon開発者ポータルを使用するためにAmazonデベロッパーアカウントが必要です。
あらかじめ環境を整えてから読んでください。
Alexa-hostedスキル以前の方法
Alexa-hostedスキルが正式に公開されるまではAlexaとのインターフェイスはAlexaスキル、そのプログラムの実装はAWSにて行われていました。
手段 | コンソール | アカウント |
---|---|---|
Alexaにスキルを用意する | Amazon開発者ポータル | Amazonデベロッパー |
Alexaにプログラムを用意する | AWSコンソール | AWSアカウント |
そのためAmazon開発者ポータルとAWSコンソールを行き来して開発する必要があります。
そしてAmazonデベロッパーアカウントのほかにAWSアカウントも必要になります。
さらにこの2つのサーバー?でデータをやりとりするためのインターフェイスを作る必要があります。
データの方向 | 必要な情報 |
---|---|
Alexaスキル→AWS | Amazon開発者ポータルにて取得するスキルID |
AWS→Alexaスキル | AWSのLambdaにて取得するARN |
現状ではこの方法でないと出来ない事もあるのですが、ちょっとAlexaのスキルを作ってみたいという人には壁が高すぎます。
Alexa-hostedスキルを使う
Alexa-hostedスキルを使ってスキルを作ると簡単にスキルを作ることができますが、そのための準備が必要なのでは結局ハードルが高くなっていまいます。
Alexa-hostedスキルはAmzaon開発者ポータルでスキルを作成すると自動的に使えるようになっています!!
早速使ってみましょう。
Amazon開発者ポータル
Amazon開発者ポータルからAlexa SkillsKit を選択して Alexa Developer consle を開きます。
今後このページを頻繁に開くのでブックマークにしておきましょう。
Alexa Developer consle
書籍やネットの情報と見比べるとわかりますが上部のメニューに「コードエディタ」と表示されていますが、これがAlexa-hostedスキルを使ったやり方となるページです。
後の操作説明にも出てくると思いますが、このやり方にAWSが全く関係しないのではなく、Alexa Developer consleにてコードを記述した後デプロイという機能を利用してコードがAWSに送られています。
AWSでのソースコード記述をAlexa Developer consleから送信することでリモートで行っているようなイメージになります。
AWSのアカウントがなくてもAlexa Developer consleと紐付けされたプライベートアカウントとして動作するのでAWSアカウントがなくても動作するようです。本来のAWSアカウントではないのでいくつか出来ないことも存在します。
スキルを作成する
スキル名を入力します。スキル名=スキル呼び出し名ではありませんが、呼び出し名の初期値はスキル名になります。スキル呼び出し名とは「Alexa xxx」の xxx部分になります。
作るスキルは「カスタム」そして「Alexa-Hosted(Node.jp)」が選択されています。Alexa-hostedスキルとしてNode.jpを使うという意味になります。
これまでのようにAlexa-hostedスキルを使わない場合は「ユーザー定義のプロビジョニング」を使います。
HelloWorldをテンプレートとして使用します。
スキル作成には1分かかります。サーバー側の処理のためユーザー環境で速度は変わらないものと思われます。
スキルメニューから呼び出し名を確認します。
次にインテントを確認します。
インテントとは
「Alexa xxx で yyy して」
というときに xxx がスキル呼び出し名で yyy がインテントになります。
テンプレートを使ったのでインテント名が自動的に作られています。
対話するプログラムを作るときに様々な言い回しがプログラムを複雑にします。
たとえば「おはよう」「こんにちは」「こんばんは」と挨拶がありますが
これをプログラムで直接比較しようとすると
if(say=='おはよう'||say=='こんにちは'||say=='こんばんは'){処理}
のように書く必要がありますが曖昧な言い回しが増えるたびにプログラムを変更していくと効率が悪くなります。
そのためインテントを使用して言い回しをここで吸収するようになっています。
言い回しをまとめるグループ名がインテント、その中の1つ1つの要素が発話となります。
インテント名 | 発話 |
---|---|
hello | おはよう こんにちは こんばんは |
eat | みかん リンゴ ステーキ 寿司 |
では実際にインテントと発話の関係を見てみましょう
HelloWorldIntentが用意されていますのでこれをクリックして設定を見てみましょう。
さすがにテンプレートは日本語になっていません。手動で日本語にしましょう。
この設定方法、毎回行うのは手間ですね。左側のメニューでJSONエディターがあるので見てみましょう。
{"interactionModel":{"languageModel":{"invocationName":"ノードテスト","intents":[{"name":"AMAZON.CancelIntent","samples":[]},{"name":"AMAZON.HelpIntent","samples":[]},{"name":"AMAZON.StopIntent","samples":[]},{"name":"HelloWorldIntent","slots":[],"samples":["おはよう","こんにちは","こんばんは"]},{"name":"AMAZON.NavigateHomeIntent","samples":[]}],"types":[]}}}
今まで設定した内容がそのまま反映されていることがわかります。つまりこのJSONを保存しておけば、ほかのスキルを作ったときにインテントを使い回すことができます。
AMAZON.CancelIntentやAMAZON.StopIntent、AMAZON.HelpIntent、AMAZON.NavigateHomeIntentは必須のインテントですが発音はテンプレートに無いようです。
この後コードエディタから保存、デプロイと操作して上部のメニューから「テスト」を選んでいくとAlexaエミュレータからテストを行うことが出来ます。
テストをする前に「非公開」から「開発中」に変更する必要があります。
その後テキスト入力欄に
「ノードテストを開く」
など入力すると まだ設定していないので英語ですが返事が返ってきます。
エミュレータからテストする場合は最初にAlexaを呼ぶ名称がなくても大丈夫です。
実機テスト
Alexaを持っている人ならテストしたいと思うのが当たり前ですが・・・なぜか説明がありません。
それもそのはずです、テストが問題なく行えたのであれば、そのままAlexaを呼んでスキルを実行すれば良いわけです。
うーん、まるでVisualBasicを実行したら実はexeファイルも出来てました!ぐらいの感動ですね。