[日本語Alexa] ビルトインスロットが大量に追加され、新垣結衣とかスターウォーズがヒットする
1 はじめに
スキルを作成する時に使用するスロットでは、予め提供されているビルトインのスロットタイプが利用可能です。ビルトインスロットのタイプには、大きく、Numbers,Dates, and Times(数値、日付、時刻など)と List Typesがあります。
そして、List Typesでは、従来、下記の3種類が提供されていました。
スロットタイプ | 説明 | リスト値の例 |
---|---|---|
AMAZON.City | 一般的に使用する日本や世界各地の都市の名前 | ニューヨーク、中央区、日本橋本町、東伏見、福岡市 |
AMAZON.FirstName | 名前 | アオイ(葵)、カナ(佳奈)、ソウタ(壮太)、ハルカ(遥河) |
AMAZON.Region | 一般的に使用する都道府県や郡 | 京都府、北海道、南魚沼郡、東京都、福岡県 |
※ https://developer.amazon.com/ja/docs/custom-skills/slot-type-reference.htmlより
今回は、このList Typesが大幅に追加されました。
2 リストタイプ
開発者コンソールで、List Typesを開くと沢山のタイプが追加されていることが分かります。
4月29日現在、まだ日本語のドキュメントには、記載されていないのですが、上記から抜き出すと新しく追加されたのは、下記の12個でした。
スロットタイプ | 説明 | リスト値の例 |
---|---|---|
AMAZON.Actor | 俳優と女優のフルネーム | |
AMAZON.Artist | アーティストのフルネーム | |
AMAZON.Author | 著者のフルネーム | |
AMAZON.Book | 本のタイトル | |
AMAZON.Color | 色の名前 | 赤、青、黄色 |
AMAZON.Corporation | 会社の名前 | アマゾン、フェースブック、HP |
AMAZON.Food | 食べ物の名前 | チョコレートケーキ、レモンジュース、スクランブルエッグ |
AMAZON.Language | 言語の名前 | スペーン語、英語、ドイツ語 |
AMAZON.Movie | 映画のタイトル | ウーマンウーマン、スターウオーズ |
AMAZON.Person | 実在及び架空の人物の名前 | バラック・オバマ、バットマン、アルバート・アインシュタイン |
AMAZON.Room | 住宅やその他の建物に典型的な部屋の名前 | バスルーム、ホール、洗濯室、ロビー、保育園 |
※ https://developer.amazon.com/docs/custom-skills/slot-type-reference.htmlを参考にしてリストしました。
3 試してみた
とりあえず、新しく追加されたリストタイプにどのような値がヒットするのかを試してみました。
作成したテスト用のスキルは、以下のようなものです。新しく追加されたリストタイプの名前をそのままインテント名にして、サンプル発話でそのタイプの値を取るように設定しました。
コードは、次のようになっています。全てのIntentRequestを処理するハンドラーで、インテント名に応じてメッセージを作成しています。これでユーザーの発話した単語が、どのスロットタイプにヒットしたのかが分かるのでは?と考えました。
const Alexa = require('ask-sdk'); let skill; exports.handler = async function (event, context) { if (!skill) { skill = Alexa.SkillBuilders.custom() .addRequestHandlers( LaunchRequestHandler,AllOfIntentHandler) .create(); } return skill.invoke(event); } const LaunchRequestHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'LaunchRequest'; }, handle(handlerInput) { const speechText = '調査する単語を言って下さい'; return handlerInput.responseBuilder .speak(speechText) .reprompt(speechText) .getResponse(); } }; const types = ['Actor','Artist','Author','Book','Color','Corporation','Food','Language','Movie','Person','Room']; const names = ['俳優と女優','アーティスト','著者','本のタイトル','色の名前','会社の名前','食べ物の名前','言語の名前','映画のタイトル','人物の名前','部屋の名前']; const AllOfIntentHandler = { canHandle(handlerInput) { return handlerInput.requestEnvelope.request.type === 'IntentRequest'; }, handle(handlerInput) { const intent = handlerInput.requestEnvelope.request.intent; let type = ''; let value = ''; for (var i=0; i < types.length; i++) { if (intent.name == types[i]+'Intent'){ type = names[i]; value = intent.slots[type].value; break; } } let speechText = value + 'は、' + type + 'です。他に調査する単語を言って下さい。' ; return handlerInput.responseBuilder .speak(speechText) .reprompt('他に調査する単語を言って下さい。') .getResponse(); } };
4 最後に
サンプルの実行画面に紹介したものは、実は、結構うまくヒットした例です。
使ってみると分かりますが、現時点では、まだ完璧とは言い切れません。しかし、まだ、ドキュメント化もされていませんし、過去の例からもわかるように、Alexaは、日々すごい勢いで進化しますので、すぐにいい感じに動き出すのでしょう。
組み込みのスロットタイプが充実すると、スキルの作成は格段に楽になります。英語版では、この他にも沢山のスロットタイプが提供されています。おそらく日本語対応も、これからどんどん増えて来るのでしょう。本当に楽しみです。
5 参考リンク
https://developer.amazon.com/docs/custom-skills/slot-type-reference.html
https://developer.amazon.com/ja/docs/custom-skills/slot-type-reference.html