Alexa(amazon Echo)のIRKitスキルを作る(3)
では作り始めましょう
3. IRKitスキルを作る
3.1 始めに
先ず最初に、これから作成するAlexaのIRKitスキルについて断っておく事柄がいくつかあります。それは、以下の事柄です。
3.2 Alexa Skills Kitでスキルを作成する
では、IRKitのスキルを作っていきましょう。最初は照明器具(シーリングライト)をオン、オフするだけの簡単なものを作りたいと思います。
amazon開発者ポータルサイトからamazon開発者コンソールにサインインし「ALEXA」を選択します。
Alexaで開発を始めるのページが表示されたら、Alexa Skills Kitの「始める>」ボタンをクリックします。
「新しいスキルを追加する」ボタンをクリックします。
Alexaスキルの作成画面です。左側に、上から順に
- スキル情報
- 対話モデル
- 設定
- SSL証明書(カスタム対話モデルでは不要になります)
- テスト
- 公開情報
- プライバシーとコンプライアンス
という項目が並んでおり、これらの項目を上から順に設定していく事でスキルが作成できる仕組みになっています。
最初はスキル情報です。ここでは、
- スキルの種類
「カスタム対話モデル」を選択
- 言語
「Japanese」を選択
- スキル名
作成するスキルの名前を入力します。今回は「IRKitスキル」という名前にしてみました。
- 呼びだし名
ウェイクワード(アレクサ)に続ける本スキルの呼びだし名です。長い名前や認識されにくい名前は避けましょう。なるべくシンプルな名前の方が良いので、ここでは「リモコン」としていますが、もしIRKitをリビングに置いているのなら「リビング」、寝室に置いているのなら「寝室」なんてのも良いかも。その場合、「アレクサ、リビングでエアコンを点けて」という呼び出し方になります。「アレクサ、リビングのエアコンを点けて」ではスマートホームスキルの呼び出しになるようなので、少し不自然な呼び出し方になってしまう所は我慢してください。
- グローバルフィールド
全てデフォルト(いいえ)のままで構いません。
を設定します。設定したら「保存」ボタンをクリック
これでスキルが作成され、アプリケーションIDが割り付けられました。アプリケーションIDとはこのスキル固有の識別子で、後でAWS Lambdaの作成時に使います。「次へ」ボタンをクリックします。
対話モデルを作成する画面に移りました。ここでは、
- インテントスキーマ
- カスタムスロットタイプ
- サンプル発話
を入力して行きます(スキルビルダーを使う方法もありますが、まだ日本語化されていないし、この程度の内容なら直接入力する方が簡単でしょう)。
1) インテントスキーマ
インテントスキーマには、IRKitスキルで処理できるインテント、スロットをJSON形式で記述します。以下をコピペします。
{
"intents": [
{
"slots": [
{
"name": "Switch",
"type": "OnOff"
}
],
"intent": "LightControl"
},
{
"intent": "AMAZON.HelpIntent"
},
{
"intent": "AMAZON.CancelIntent"
},
{
"intent": "AMAZON.StopIntent"
}
]
}
|
今回は照明器具を操作するので、"LightControl"というインテントを定義し、スロット(インテントへの引数)には電源スイッチを示す"Switch"を一つ定義しています。"Switch"のタイプは、ビルトインタイプに適当な型が無いため、"OnOff"というカスタムスロットタイプにしています。
また、スキルには必ず備えていなければならないインテントとして"AMAZON.HelpIntent", "AMAZON.CancelIntent", "AMAZON.StopIntent"があるので、これらも定義しています。
2) カスタムスロットタイプ
"OnOff"カスタムスロットタイプを定義します。照明器具のオン/オフを意味する語彙を、思いつく限りとにかく書き並べます。オン、オフ、点ける、消すは勿論、「切る」という言い方をする人もいるでしょう。点灯、消灯も入れておいた方が良いかもしれません。と言うことで、"OnOff"カスタムスロットタイプは以下を列挙しました。
言語が日本語の場合、列挙する値は全て日本語でないとダメなのでそうです(on, offなどを混ぜてはいけない)。なお、Alexaは聞き取った内容をここに書き並べた語彙と優先的にマッチングしてくれますが、ここに無い語彙でも同じ意味と解釈できれば、それをスロットに入れてインテントへ渡して来ます。スロットに対応した処理をするのはAWS Lambdaの役目になりますので、カスタムスロットタイプに無い語彙が渡されて来ても自然に処理できるようにするにはLambdaで頑張るしかありません。
3) サンプル発話
サンプル発話では、ユーザが話しそうなフレーズを書き並べて、それを"LightControl"インテントと結びつけます。今回は以下のような感じにしてみました。
LightControl 明り {Switch}
LightControl 明り {Switch} て
LightControl 明り {Switch} る
LightControl 明り {Switch} ろ
LightControl 明り {Switch} して
LightControl 明り {Switch} に して
LightControl 明り を {Switch}
LightControl 明り を {Switch} て
LightControl 明り を {Switch} る
LightControl 明り を {Switch} ろ
LightControl 明り を {Switch} して
LightControl 明り を {Switch} に して
LightControl 照明 {Switch}
LightControl 照明 {Switch} て
LightControl 照明 {Switch} る
LightControl 照明 {Switch} ろ
LightControl 照明 {Switch} して
LightControl 照明 {Switch} に して
LightControl 照明 を {Switch}
LightControl 照明 を {Switch} て
LightControl 照明 を {Switch} る
LightControl 照明 を {Switch} ろ
LightControl 照明 を {Switch} して
LightControl 照明 を {Switch} に して
|
スロット"{Switch}"と前後の語の間には必ず半角空白が必要なことに注意です。これで「明り点けて」や「照明を消灯」という言い方をしても"LightControl"インテントが呼び出されるようになります。
入力が完了したら「保存」して「次へ」をクリック。
設定の画面に移りました。ここでは、サービスエンドポイントのタイプに「AWS LambdaのARN」の方を選択します。開発者コンソールは一旦ここで停めておき、次はAWS Lambdaの作成に移ります。開発者コンソールは閉じずに開きっ放しにしておきます。
[続く]
(*1):2017/12/24追記
何とかIRKitのスマートホームスキルも作成することができました。後日(来年?)徐々に記事を書いていきたいと思います。
|