DEV Community 👩‍💻👨‍💻

Hidetaka Okamoto
Hidetaka Okamoto

Posted on

Launch Utility package for Alexa Skills Kit SDK for Node.js

Alexa Skills Kit SDK for Node.js version 2 (ask-sdk) is very useful to create own Alexa Skill.
But some time we have to write long source code to handle Alexa's request.

const HelpIntentHandler = {
  canHandle (handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
      handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent'
  },
...

I think the code handlerInput.requestEnvelope.request.type === 'IntentRequest' && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent' can be more shorty.
So I've launched utility packages for ask-sdk.

What is ask-utils ?

ask-utils is utility packages for ask-sdk.

Install

$ npm i -S ask-utils

Easy to handle request

Before ask-utils

const HelpIntentHandler = {
  canHandle (handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
      handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent'
  },
...

After ask-utils

const { canHandle } = require('ask-utils')
const HelpIntentHandler = {
  canHandle (handlerInput) {
    return canHandle(handlerInput, 'IntentRequest', 'AMAZON.HelpIntent')
  },
...

Easy to create random message

Alexa blog says Let's randomize your response!.
Alexa Skill Recipe: Randomize Your Responses to Add Variety to Your Skill
https://developer.amazon.com/ja/blogs/alexa/post/37e732b7-48fa-4940-9f12-9ffde7eeeaf8/alexa-skill-recipe-randomize-your-responses-to-add-variety-to-your-skill

So ask-utils provides helper function to make randomize response.

Before ask-utils

You have to make function to create random paharse.

function randomPhrase(myData) {

  // the argument is an array [] of words or phrases

  var i = 0;

  i = Math.floor(Math.random() * myData.length);

  return(myData[i]);

}
const welcomeGreetings = ['hello','howdy','hi', 'good day'];
const speachText = randomPhrase(welcomeGreetings);

After ask-utils

ask-utils provides helper function.

const { getRandomMessage } = require('ask-utils')
const welcomeGreetings = ['hello','howdy','hi', 'good day'];
const speachText = getRandomMessage(welcomeGreetings);

And More features !

Get slot value

const { canHandle, getSlotValueByName } = require('ask-utils')
const ExampleIntentHandler = {
  canHandle (handlerInput) {
    return canHandle(handlerInput, 'IntentRequest', 'ExampleIntent')
  },
  handle (handlerInput) {
    const yourName = getSlotValueByName(handlerInput, 'nameSlot')
    const speechText = `Hello ${yourName} ! Welcome to our skill !`

Progressive response

const { enqueueProgressiveResponseDirective } = require('ask-utils') 
const GetFirstEventHandler = {
  canHandle (handlerInput) {
    const request = handlerInput.requestEnvelope.request
    return request.type === 'IntentRequest' && request.intent.name === 'GetFirstEventIntent'
  },
  async handle (handlerInput) {
    try {
      await enqueueProgressiveResponseDirective(handlerInput, 'Please wait for a while')
    } catch (err) {
      // if it failed we can continue, just the user will wait longer for first response
      console.log(err)
    }
    // call some api
    const content = await get()
    return responseBuilder
        .speak(content)
        .getResponse()
  }
}

Need your feedback !

The package is developing in GitHub.
https://github.com/ask-utils/ask-utils

And I provides example project too.
https://github.com/ask-utils/example

If you have interest to the packages, please try it and give me feedback, feature request, pul request !

Thanks !

Top comments (0)

DEV has this feature:

Settings

Go to your customization settings to nudge your home feed to show content more relevant to your developer experience level. 🛠