絖綛 N@i.jp  昨日:00000000
 今日:00021304
 総計:00021304
keywords
管理者専用
  Post   Add link   Control Panel 






























新しいトピック
最新:05/21 10:47


新しいコメント
最新:06/28 21:33






管理人へMAIL

プライバシーポリシー

Alexa(amazon Echo)のIRKitスキルを作る(3)

では作り始めましょう


3. IRKitスキルを作る

3.1 始めに

 先ず最初に、これから作成するAlexaのIRKitスキルについて断っておく事柄がいくつかあります。それは、以下の事柄です。

  • 必要最小限の機能しかありません
     LAN内のIRKitデバイスを検出したり、リモコン信号を学習して保存しておくような機能はありません。また、スキルとして持っているべきいくつかの機能についても、組み込んでいません。これはスキル、Lambdaの基本機能を分かりやすくするため、意図的に組み込んでいないという事もありますが、半分以上はワタシの理解不足によるものです(^^;)。
  • 汎用性がなく、一般に公開できるレベルのものではありません
     と言うのも、送信する赤外線リモコン信号は、IRKitで事前に学習、保存しておいたものをLambdaプログラム内にハードコーディングしてあるからです。そのため、IRKitから送信する信号は、自分が操作したい家電のリモコン信号をIRKitの公開API等を使って取得し、それで書き換える必要があります。それ以外にも、IRKitデバイス情報なども適宜自分のIRKitのものに書き換える必要があります。
  • スマートホームスキルではありません
     Alexaのスキルの機能には以下の種類があるのですが、今回作成するのはカスタムスキルになります(スマートホームスキルにも挑戦しているのだけど、何だかうまくいかないんです(*1))。
    • カスタムスキル(カスタム対話モデル)
      どのようなタイプのリクエストでも処理できるスキル
    • スマートホームスキル
      クラウド対応スマートホームデバイスを制御するためのスキル
    • ビデオスキル
      クラウド対応エンターテイメント端末を制御するためのスキル
    • フラッシュブリーフィングスキル
      フラッシュニュースの基となるコンテンツを提供するスキル

     これが何を意味するかと言うと、ウェイクワード(アレクサ)の後に必ず「呼びだし名」を言わなければならないという事なのです。つまり「アレクサ、エアコンを点けて」では動いてくれません。「アレクサ、○○○でエアコンを点けて」と、一言余計に言わなければならないという事です。う〜ん、スマートじゃない。申し訳ないけど、勘弁してください。

  • 無保証です
     まだまだ勉強中で試行錯誤しながらの段階でして、記載している内容が必ずしも正しいとは限りません。あくまで自分のとこでは何とか動いていると言ったレベルです。正常に動作しない場合は自力でデバッグしていただく必要があります。

3.2 Alexa Skills Kitでスキルを作成する

 では、IRKitのスキルを作っていきましょう。最初は照明器具(シーリングライト)をオン、オフするだけの簡単なものを作りたいと思います。
 amazon開発者ポータルサイトからamazon開発者コンソールにサインインし「ALEXA」を選択します。

 Alexaで開発を始めるのページが表示されたら、Alexa Skills Kitの「始める>」ボタンをクリックします。

 「新しいスキルを追加する」ボタンをクリックします。

 Alexaスキルの作成画面です。左側に、上から順に

  • スキル情報
  • 対話モデル
  • 設定
  • SSL証明書(カスタム対話モデルでは不要になります)
  • テスト
  • 公開情報
  • プライバシーとコンプライアンス

という項目が並んでおり、これらの項目を上から順に設定していく事でスキルが作成できる仕組みになっています。
 最初はスキル情報です。ここでは、

  1. スキルの種類
    「カスタム対話モデル」を選択
  2. 言語
    「Japanese」を選択
  3. スキル名
    作成するスキルの名前を入力します。今回は「IRKitスキル」という名前にしてみました。
  4. 呼びだし名
    ウェイクワード(アレクサ)に続ける本スキルの呼びだし名です。長い名前や認識されにくい名前は避けましょう。なるべくシンプルな名前の方が良いので、ここでは「リモコン」としていますが、もしIRKitをリビングに置いているのなら「リビング」、寝室に置いているのなら「寝室」なんてのも良いかも。その場合、「アレクサ、リビングエアコンを点けて」という呼び出し方になります。「アレクサ、リビングエアコンを点けて」ではスマートホームスキルの呼び出しになるようなので、少し不自然な呼び出し方になってしまう所は我慢してください。
  5. グローバルフィールド
    全てデフォルト(いいえ)のままで構いません。

を設定します。設定したら「保存」ボタンをクリック

 これでスキルが作成され、アプリケーションIDが割り付けられました。アプリケーションIDとはこのスキル固有の識別子で、後でAWS Lambdaの作成時に使います。「次へ」ボタンをクリックします。

 対話モデルを作成する画面に移りました。ここでは、

  1. インテントスキーマ
  2. カスタムスロットタイプ
  3. サンプル発話

を入力して行きます(スキルビルダーを使う方法もありますが、まだ日本語化されていないし、この程度の内容なら直接入力する方が簡単でしょう)。

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のスマートホームスキルも作成することができました。後日(来年?)徐々に記事を書いていきたいと思います。


< 過去の記事 [ 12月の 全てのカテゴリ リスト ] 新しい記事 >

2017 calendar
12月
12
3456789
10111213141516
17181920212223
24252627282930
31


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.