[新機能] Amazon Lex スキーマ Import/Export

2018.02.14

渡辺です。

東京リージョン対応が待望されるLexですが、スキーマのImport/Export機能がリリースされました。 これまでGUIで操作するだけで不便な部分もありましたが、便利になりますね。

Export

ExportはBot一覧から行います。

フォーマットが2種類ありました。 Lex用のスキーマとAlexa用のスキーマが選べるようです。

Lexフォーマット

設定項目がGUIとほぼリンクしています。

{
  "metadata": {
    "schemaVersion": "1.0",
    "importType": "LEX",
    "importFormat": "JSON"
  },
  "resource": {
    "name": "Appointment",
    "version": "1",
    "intents": [
      {
        "name": "Reservation",
        "version": "3",
        "fulfillmentActivity": {
          "type": "ReturnIntent"
        },
        "sampleUtterances": [
          "I want to see you.",
          "I want reservation."
        ],
        "slots": [
          {
            "name": "Date",
            "slotConstraint": "Required",
            "slotType": "AMAZON.DATE",
            "valueElicitationPrompt": {
              "messages": [
                {
                  "contentType": "PlainText",
                  "content": "What day do you want to reserve?"
                }
              ],
              "maxAttempts": 2
            },
            "priority": 1,
            "sampleUtterances": []
          },
          {
            "name": "Time",
            "slotConstraint": "Required",
            "slotType": "AMAZON.TIME",
            "valueElicitationPrompt": {
              "messages": [
                {
                  "contentType": "PlainText",
                  "content": "At what time do you want to reserve?"
                }
              ],
              "maxAttempts": 2
            },
            "priority": 2,
            "sampleUtterances": []
          }
        ],
        "dialogCodeHook": {
          "uri": "arn:aws:lambda:us-east-1:378384917084:function:appointment",
          "messageVersion": "1.0"
        }
      }
    ],
    "voiceId": "0",
    "childDirected": false,
    "locale": "en-US",
    "idleSessionTTLInSeconds": 300,
    "clarificationPrompt": {
      "messages": [
        {
          "contentType": "PlainText",
          "content": "Sorry, can you please repeat that?"
        }
      ],
      "maxAttempts": 5
    },
    "abortStatement": {
      "messages": [
        {
          "contentType": "PlainText",
          "content": "Sorry, I could not understand. Goodbye."
        }
      ]
    }
  }
}

Alexaフォーマット

Alexaの発話モデルの形式でエクスポートされます。 LexボットをAlexaに対応させるケースで利用できそうです。

{
    "intents": [
        {
            "name": "Reservation",
            "samples": [
                "I want to see you.",
                "I want reservation."
            ],
            "slots": [
                {
                    "name": "Date",
                    "type": "AMAZON.DATE",
                    "samples": []
                },
                {
                    "name": "Time",
                    "type": "AMAZON.TIME",
                    "samples": []
                }
            ]
        }
    ],
    "types": [],
    "prompts": [
        {
            "id": "Elicit.Intent-Reservation.IntentSlot-Date",
            "promptVersion": "1.0",
            "definitionVersion": "1.0",
            "variations": [
                {
                    "type": "PlainText",
                    "value": "What day do you want to reserve?"
                }
            ]
        },
        {
            "id": "Elicit.Intent-Reservation.IntentSlot-Time",
            "promptVersion": "1.0",
            "definitionVersion": "1.0",
            "variations": [
                {
                    "type": "PlainText",
                    "value": "At what time do you want to reserve?"
                }
            ]
        }
    ],
    "dialog": {
        "version": "1.0",
        "intents": [
            {
                "name": "Reservation",
                "confirmationRequired": false,
                "prompts": {},
                "slots": [
                    {
                        "name": "Date",
                        "type": "AMAZON.DATE",
                        "elicitationRequired": true,
                        "confirmationRequired": false,
                        "prompts": {
                            "elicit": "Elicit.Intent-Reservation.IntentSlot-Date"
                        }
                    },
                    {
                        "name": "Time",
                        "type": "AMAZON.TIME",
                        "elicitationRequired": true,
                        "confirmationRequired": false,
                        "prompts": {
                            "elicit": "Elicit.Intent-Reservation.IntentSlot-Time"
                        }
                    }
                ]
            }
        ]
    }
}

Import

インポートも同様にボット一覧から行います。 Alexaフォーマットではインポートできません。

まとめ

LexのスキーマがImport/Exportできるようになりました。 Alexa用のスキーマもExportできるため、設計時にLexで流れの検証を行ったり、LexとAlexaを両対応させたいようなケースでも活用できそうです。