はじめに
No, | タイトル |
---|---|
1 | (インストールから、ハンドラー作成編)Lambdaで使える、Clova(CEK)のSDK作ってみた |
2 | (Clovaに喋らすメソッド編)Lambdaで使える、Clova(CEK)のSDK作ってみた |
3<<今ここ | (スロット、セッション情報取得編)Lambdaで使える、Clova(CEK)のSDK作ってみた |
前回は、Clovaに喋らすテキストの定義方法を説明しました。
今回はスロットとセッション情報の取得を実践してみたいと思います。
スロットの取得
Fruit
という名前のスロットがあったときの取得方法は以下になります。
var value = handlerInput.requestEnvelope.request.intent.slots.Fruit.value;
または、以下でも取得できます。
var slots = handlerInput.requestEnvelope.getSlot();
var value = slots.Fruit;
セッション情報(sessionAttributes)
そもそもsessionAttributesとは
1回のスキル起動中に保存しておきたい値を置いておくオブジェクトです。
これだと想像が難しいので例で説明します。
例えば、カフェでコーヒーを頼むスキルがあったとします。
以下のような会話が想定されます。
ユーザー: 「Clova, カフェスキルを起動して」
Clova: 「いらっしゃいませ。頼みたいメニューをおっしゃてください。」
ユーザー: 「コーヒー」 << ここでコーヒーを発言している
Clova: 「コーヒーですね。何杯頼みますか?」
ユーザー: 「2杯」 << ここではコーヒーを言っていないのでスロットとして取得できない。
Clova: 「コーヒーを2杯ですね。ただいまお持ちいたしますので少々お待ちください。」
ここで、この会話の中に、もしsessionAttributes
が存在しなかったら成り立たない部分があります。
それは、「コーヒーを2杯ですね。」
の部分です。
なぜ成り立たないかというと、「2杯」の部分はスロットで取得できますが「コーヒー」の部分はスロットで取得できません。
ユーザーの2回目の発話の「コーヒー」
でsessionAttribute
にコーヒー
という値を保存します。
これにより、3回目以降の会話でもコーヒー
を頼もうとしていることを取得できるのです。
取得
以下でsessionAttributesのオブジェクトを取得することができます。
var attributes = handlerInput.sessionAttributeManager.getSessionAttributes();
console.log(attributes);
// 例
// {
// key: "value"
// }
保存
CEK側にsessionAttributesを返したい場合は以下になります。
var attributes = {
key: "value"
}
handlerInput.sessionAttributeManager.setSessionAttributes(attributes);