3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IntentRequest内でCustom Slot Typeの同義語の情報を取得する

Posted at

Alexa SkillのBuilder BETAを使うと以下のようにスロットに同義語(Synonyms)を設定できる。

{
  "languageModel": {
    "types": [
      {
        "name": "TRAIN",
        "values": [
          {
            "id": "HANKYU",
            "name": {
              "value": "HANKYU",
              "synonyms": [
                "はんきゅう",
                "阪急",
                "阪急電車"
              ]
            }
          }
        ]
      }
    ]
    // 省略
  }
}

これによって、 TRAIN スロットで使われる はんきゅう 阪急 阪急電車 は同じ意味だと認識されるようになるため、 Intentを作って 「TRAIN の運行情報を教えて」 というようなUtterancesを定義する時に、ユーザーが はんきゅう 阪急 阪急電車 のどの言葉を使った場合でも阪急電車の運行情報を応答するというような対話機能が実現できる。詳細は下記の公式にまとめられている。

スロットタイプ値の同義語とIDを定義する(エンティティ解決) | Custom Skills

そしてWebHookをLambdaなどで処理する時もこの同義語の情報をIntentRequestから取得することができると 公式にも解説 されている。

上記の同義語設定によるIntentRequestでは以下のように slots.Train.resolutions 配下に同義語の情報がセットされたリクエストを取得できる。

{
  "type": "IntentRequest",
  "requestId": "amzn1.echo-api.request.***********",
  "timestamp": "2017-12-28T09:16:19Z",
  "locale": "ja-JP",
  "intent": {
    "name": "TrainStatusIntent",
    "confirmationStatus": "NONE",
    "slots": {
      "Train": {
        "name": "Train",
        "value": "阪急",
        "resolutions": {
          "resolutionsPerAuthority": [
            {
              "authority": "amzn1.er-authority.echo-sdk.amzn1.ask.skill.********.TRAIN",
              "status": {
                "code": "ER_SUCCESS_MATCH"
              },
              "values": [
                {
                  "value": {
                    "name": "HANKYU",
                    "id": "HANKYU"
                  }
                }
              ]
            }
          ]
        },
        "confirmationStatus": "NONE"
      }
    }
  }
}

ここで注意点として、開発者コンソールのサービスシュミレーターでは resolutions がセットされず、同義語の情報は取得できない。

image.png

よく読むと公式にも以下のように注意書きがある。

開発者ポータルの「テスト(Test)」ページにあるサービスシミュレーターでは、エンティティ解決はサポートされていません。シミュレーターから送信されるJSONリクエストには、新しいresolutions情報は含まれていません。

ドキュメントをちゃんと読めばわかることではあるが、Amazon Developer ForumsでSynonymsのIDが取得できないと言っている人がいたりしてややこしい。

Alexa not sending slot ID in requests | Amazon Developer Forums

BETA版なのでバグなのかとも思え、混乱しそうなのでまとめておいた。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?