求めるは休息

作ったプログラムとか公開していきます

AlexaSkill開発 ステップ1(もう少し細かい理解-AlexaSkill編-) ~echoこなくてこじらせた結果~

echoの招待メールを常日頃待っているがこないので、もう先にスキルを作って全裸待機と意気込んだときのメモ

 一言

ここでは、AWSってきいたことあるなー、echoが販売されたのでAlexaSkillつくりたいなーな私が、ネットを漁って調べた結果をメモしたものなので、間違いが多分に含まれる場合があることに注意してください。

あと、Lambdaで使用するコードはPython3.xですので、注意が必要です。

 ステップ1・・・もう少し細かい理解(-AlexaSkill編-)

 頭に入れるべき要素(下のサンプルコードを見ながらだとより分かりやすいかと思います)

 :intent(意味は意思とか目的とか)

 :sample utterance(サンプル発話)

 :slot(スロット、読めば分かるが)

  ↑これらを総称して「対話モデル」となる

 

 各要素についての説明(天気アプリを例にして)

 :intent

  こいつが「機能名」です。intent名はAWS Lambdaに「引数」として渡されます。

  天気アプリで例えると、

   天気を教えてくれる機能

   降水確率を教えてくれる機能

  などが予想されます。

  機能ごとにintentを用意するようです。

  ビルトイン(Amazon側で用意したもの)のintentもあり、

   停止(AMAZON.StopIntent)

   取り消し(AMAZON.CancelIntent)

   ヘルプ(AMAZON.HelpIntent)

  などがあったが、明確な使い方はゴメンナサイまだ調べていないのでわかりません。

  多分だけどalexaが長話したら止めたり、処理途中でのキャンセルが思い当たりますね。

  ↑キャンセルは、天気アプリだと都市の指定が必要ですが、

  1.天気スキルを開いて

  2.alexaが都市を聞いてきて

  3.キャンセルとほざくと

  4.中止するんだとおもいます

 

 :sample utterance

  こいつがintentを呼び出すときに必要な「会話のサンプルパターン」です。

  先ほどの「天気を教えてくれる機能」を呼び出すためのサンプルだと、

   {都市}の天気を教えて

  などが予想されるし、「降水確率を教えてくれる機能」だと、

   {都市}の降水確率を教えて

  となります。

  sample utteranceは、intent毎に用意する必要があります。

  また、様々なパターンを用意した方が柔軟性が増すそうです。(当たり前だが)

  

 :slot

  最後がスロットです。

  こいつは、sample utteranceの所に出てきた「{都市}」です。

  つまり、AWS Lambdaに渡すための「引数」になります。

  これもintentと同様にビルトインとカスタムがあります。

  ビルトインでは

  Alexa Skill KitでAmazonが用意したBuilt-In IntentとBuilt-In Slot Typeをひたすらまとめてみる | Developers.IO

  等が用意されているそうです。

  {都市}もAMAZON.Cityのビルトインのスロットタイプが用意されています。

   ↑こちらは、スキル作成時に選択する国(というか言語)で変わるのかなぁ、と思っていますが、検証していません。今のところ使う予定がないので

  因みに、sample utteranceを

   {都市}の{種類}を教えて

  とすることで、intentを天気と降水確率に分けずに、引数で処理を変える事が出来そうです。

  上の「{種類}」がカスタムスロットで自分でスロットに当てはまるであろうリストを用意できます。

  この場合は、例えば、

   天気

   降水確率

  が当てはまります。

 

 

 下のコードをまとめた感じの画像

f:id:umi_hiiragi:20171130021202j:plain

 

{
  "languageModel": {
    "intents": [
      {
        "name": "getWeather",
        "samples": [
          "{city} の天気を教えて"
        ],
        "slots": [
          {
            "name": "city",
            "type": "AMAZON.City"
          }
        ]
      },
      {
        "name": "getRainyPercent",
        "samples": [
          "{city} の降水確率を教えて"
        ],
        "slots": [
          {
            "name": "city",
            "type": "AMAZON.City"
          }
        ]
      },
      {
        "name": "AMAZON.CancelIntent",
        "samples": [
          "中止",
          "キャンセル",
          "中止して",
          "取り消して"
        ]
      },
      {
        "name": "AMAZON.HelpIntent",
        "samples": [
          "ヘルプ",
          "使い方"
        ]
      },
      {
        "name": "AMAZON.StopIntent",
        "samples": [
          "停止",
          "止めて"
        ]
      }
    ],
    "invocationName": "お天気スキル"
  }
}