Alexaのビルトインスロットタイプを試す(日時編)

Alexaには「ビルトスロット」というAmazon側で用意されたスロット(変数)があります。それらを使うことで、例えば2018年5月1日にAlexaスキルを利用した場合に「今日」と「2018年5月1日」がどちらも同じ意味 […]

広告ここから
広告ここまで

目次

    Alexaには「ビルトスロット」というAmazon側で用意されたスロット(変数)があります。それらを使うことで、例えば2018年5月1日にAlexaスキルを利用した場合に「今日」と「2018年5月1日」がどちらも同じ意味を持つということを判断できるようになります。

    今回は例に上げたような日時に関するビルトインスロットを触ってみましょう。

    ビルトインスロットの種類

    2018年4月末時点では、以下の5種類のスロットが利用できます。

    • AMAZON.DATE
    • AMAZON.DURATION
    • AMAZON.FOUR_DIGIT_NUMBER
    • AMAZON.NUMBER
    • AMAZON.TIME

    これらの詳細はAlexaコンソールの[ビルド]タブで対話モデルを作る際に確認できます。

    日時を確認するスキルを作りたい場合、このうちAMAZON.DATEとAMAZON.TIMEが利用できそうです。

    使用するスロットが決まれば、[+スロットタイプを追加]をクリックしてスキルに登録しましょう。

    AMAZON.DATE / AMAZON.TIMEを利用する

    早速登録したスロットタイプを使ってインテントとスロットを作りましょう。サンプルでは旅行の出発日時を入力するようなものを用意しました。

    これでスキルバックエンドには、dateに日時・timeに時間が投入されるようになります。

    シュミレーターから値を確認する

    実際にAlexaへの発話がどのように認識されるか確認してみましょう。

    先ほどの例では、「{date}の{time}に出発したい」とAlexaに話しかけるサンプルを定義しています。ですのでこの{date}と{time}をいろいろな形に変えてトライしてみます。

    サンプル1:「今日の午後5時に出発したい」

    バックエンドへのリクエスト内容は以下のようになりました。

    {
    	"version": "1.0",
    	"session": {...},
    	"context": {...},
    	"request": {
    		"type": "IntentRequest",
    		"requestId": "amzn1.echo-api.request.xxxxxxxx",
    		"timestamp": "2018-04-27T12:21:14Z",
    		"locale": "ja-JP",
    		"intent": {
    			"name": "StartTripIntent",
    			"confirmationStatus": "NONE",
    			"slots": {
    				"date": {
    					"name": "date",
    					"value": "2018-04-27",
    					"confirmationStatus": "NONE"
    				},
    				"time": {
    					"name": "time",
    					"value": "17:00",
    					"confirmationStatus": "NONE"
    				}
    			}
    		}
    	}
    }

    「今日」が「YYYY-MM-DD」形式に、「午後5時」が「HH:MM」形式に変換されています。

    サンプル2:「5月の17時に出発したい」

    何日かを指定せずに試してみましょう。

    {
    	"version": "1.0",
    	"session": {...},
    	"context": {...},
    	"request": {
    		"type": "IntentRequest",
    		"requestId": "amzn1.echo-api.request.xxxxxxxx",
    		"timestamp": "2018-04-27T12:21:14Z",
    		"locale": "ja-JP",
    		"intent": {
    			"name": "StartTripIntent",
    			"confirmationStatus": "NONE",
    			"slots": {
    				"date": {
    					"name": "date",
    					"value": "2018-05",
    					"confirmationStatus": "NONE"
    				},
    				"time": {
    					"name": "time",
    					"value": "17:00",
    					"confirmationStatus": "NONE"
    				}
    			}
    		}
    	}
    }

    「5月」に2018年がつき、「YYYY-MM」形式になりました。17時はそのまま17:00となっています。

    サンプル3:「5月1日の朝に出発したい」

    今度は時間を曖昧にしてみます。

    {
    	"version": "1.0",
    	"session": {...},
    	"context": {...},
    	"request": {
    		"type": "IntentRequest",
    		"requestId": "amzn1.echo-api.request.xxxxxxxx",
    		"timestamp": "2018-04-27T12:21:14Z",
    		"locale": "ja-JP",
    		"intent": {
    			"name": "StartTripIntent",
    			"confirmationStatus": "NONE",
    			"slots": {
    				"date": {
    					"name": "date",
    					"value": "2018-05-01",
    					"confirmationStatus": "NONE"
    				},
    				"time": {
    					"name": "time",
    					"value": "MO",
    					"confirmationStatus": "NONE"
    				}
    			}
    		}
    	}
    }

    timeMOという文字列が入ってきました。だとNIが、夕方だとEVが入ってきますので、これらの文字列がきた場合の処理についても考慮する必要がありそうです。

    おわりに

    取り急ぎ3パターンほどどのような値が入ってくるのかを確認してみました。それぞれのスロットでどのように値が取り扱われるかについては、スロットタイプリファレンスを確認してみましょう。

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark