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]
    }
    
    広告ここから
    広告ここまで
    Home
    Search
    Bookmark