Posted at

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

More than 1 year has passed since last update.


前提

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