ask-sdk(v2)のスロット、attribute


前提

fruitスロットというものがあって、値は以下の通り

みかん
[類義語]
オレンジ
[id]
mikann

drinkスロットがあって以下の通り

お茶
[類義語]
茶
紅茶
[id]
otya

sampleIntentというものがあって、サンプル発話は以下の通り

{fruit} と {drink} が飲みたい
// 例 みかんとお茶が飲みたい

スロット

ユーザーが以下のように発話をしたとする

アップルと紅茶が飲みたい

そのまま取得

アップルと、紅茶を取得

var request = handlerInput.requestEnvelope.request;
var fruit = request.intent.slots.fruit.value;
var drink = request.intent.slots.drink.value;
console.log(fruit, drink); // アップル 紅茶

類義語ではなく大元の単語で取得

りんごと、お茶で取得

var request = handlerInput.requestEnvelope.request;

if(request.intent.slots["fruit"].resolutions.resolutionsPerAuthority[0].values){
  var fruit = request.intent.slots["fruit"].resolutions.resolutionsPerAuthority[0].values[0].value.name;
}

if(request.intent.slots["drink"].resolutions.resolutionsPerAuthority[0].values){
  var drink = request.intent.slots["drink"].resolutions.resolutionsPerAuthority[0].values[0].value.name;
}
console.log(fruit, drink); // りんご お茶

id取得

var request = handlerInput.requestEnvelope.request;

if(request.intent.slots["fruit"].resolutions.resolutionsPerAuthority[0].values){
  var fruit = request.intent.slots["fruit"].resolutions.resolutionsPerAuthority[0].values[0].value.id;
}

if(request.intent.slots["drink"].resolutions.resolutionsPerAuthority[0].values){
  var drink = request.intent.slots["drink"].resolutions.resolutionsPerAuthority[0].values[0].value.id;
}
console.log(fruit, drink); // ringo otya

セッションAttribute

保存

var attributes = {
  "key": "value"
}
handlerInput.attributesManager.setSessionAttributes(attributes);

取得

var attributes = handlerInput.attributesManager.getSessionAttributes();
console.log(attributes.key); // value