Ben Zenker
Ben Zenker

Reputation: 148

Pass Alexa Skill slot name to a new intent on emit

When triggering one intent from another, such as

'LaunchRequest': function () {
    this.emit('MyCustomIntent')
}

The request object passed to MyCustomIntent is

"request": { 
  type: 'LaunchRequest',
  requestId: '...',
  timestamp: '...',
  locale: 'en-US'
}

Notice that no intent nor slot information is passed to MyCustomIntent.

However, every MyCustomIntent request that is sent by the Alexa will include

"request": {
  "type": "IntentRequest",
  ...,
  "intent": {
    "name": "MyCustomIntent",
    "slots": {
      "MyCustomSlot": {
        "name": "MyCustomSlot"
      }
    }
  }
}

This creates a schism in the development process. When attempting to use MyCustomSlot within MyCustomIntent, if intent, intent.slots, and each respective intent.slots.MyCustomSlotdoes not exist, I will then have to use some default value to allow my code to function properly.

This means it will now be necessary for me to maintain my intent schema in both my Interaction Model, and within my Lambda Function. That sounds very messy, and could get out hand quickly when multiple slots and intents are introduced.

My Question

Is there any way to send the default slot values into the emit, so that I know, without a doubt, that I can always guarantee the same basic request object within MyCustomIntent?

Upvotes: 2

Views: 677

Answers (1)

MONTYHS
MONTYHS

Reputation: 924

You can use session attribute to pass slot values like

'firstIntent': function() {
    this.attributes['slot_value1']= value;
    alexa.emit('secondIntent');
 }

Upvotes: 1

Related Questions