alexa-sdkでslotの値を取り扱う
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の15日目の記事です。 Alexa Skillでは、ユーザー発話の変数部分をSlotという形で処理します。 […]
広告ここから
広告ここまで
目次
この記事は一人Alexa Skills Kit for Node.js Advent Calendar 2017の15日目の記事です。
Alexa Skillでは、ユーザー発話の変数部分をSlot
という形で処理します。
Alexa SkillからトリガーされたLambdaやAPIでは、以下のような形でSlotが送られてきます。
exports.event = {
'session': {},
'version': '1.0',
'request': {
'intent': {
'slots': {
'{SLOT_NAME}': {
'name': '{SLOT_NAME}',
'value': '{SLOT_VALUE}'
}
}
},
}
...
alexa-sdkを使っている場合は、this.event.request.intent.slots[{SLOT_NAME}].value
で{SLOT_VALUE}
にアクセスできます。
Slotはthis.event.request.intent.slots
の下にオブジェクトとして登録されていく仕様です。
slots: {
slot1: {
name: 'slot1',
value: ''
},
slot2: {
name: 'slot2',
value: ''
}
}
ですので、以下のようなヘルパー関数を作っておくと便利です。
function getSlots (event) {
const { request } = event
if (!request) return {}
const { intent } = request
if (!intent) return {}
const { slots } = intent
return slots
}
function getSlotByName(event, name) {
const slots = getSlots(event)
if (!slots[name]) return {}
return slots[name]
}