Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/taimos/ask-sdk-addon
Addons for Alexa Skill Kit SDK v2
https://github.com/taimos/ask-sdk-addon
alexa alexa-skills-kit ask-cli ask-sdk voice
Last synced: 8 days ago
JSON representation
Addons for Alexa Skill Kit SDK v2
- Host: GitHub
- URL: https://github.com/taimos/ask-sdk-addon
- Owner: taimos
- License: apache-2.0
- Created: 2018-04-27T22:30:33.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-08T09:15:26.000Z (over 2 years ago)
- Last Synced: 2024-10-13T06:21:42.585Z (about 1 month ago)
- Topics: alexa, alexa-skills-kit, ask-cli, ask-sdk, voice
- Language: TypeScript
- Size: 313 KB
- Stars: 1
- Watchers: 4
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Addon package for the Alexa Skills Kit SDK
[![Build Status](https://travis-ci.org/taimos/ask-sdk-addon.svg?branch=master)](https://travis-ci.org/taimos/ask-sdk-addon)
![Build Status](https://codebuild.eu-west-1.amazonaws.com/badges?uuid=eyJlbmNyeXB0ZWREYXRhIjoiZjZqRmZrL3diaXFLZHRFc3pIUERhQ2tGV09IbW5uYStyNTNrT3JkN0NGRHRjRlJsZm1jQk1nNEQ0Y1BQUThYOXJBQ3hJQk5KYlZ2MXpoMGJoWFl0akJ3PSIsIml2UGFyYW1ldGVyU3BlYyI6IkhobTRBUDEwM2JYQWZBeTUiLCJtYXRlcmlhbFNldFNlcmlhbCI6MX0%3D&branch=master)
[![npm version](https://badge.fury.io/js/ask-sdk-addon.svg)](https://badge.fury.io/js/ask-sdk-addon)## Installation
`npm install ask-sdk-addon`
## Features
### Handlers
#### NamedIntentRequestHandler
When creating RequestHandlers you can extend the `NamedIntentRequestHandler` and specify the
intent name instead of implementing the `canHandle` method.The following RequestHandler will handle requests for the intents `SomeIntent` and `FoobarIntent`.
```typescript
import {NamedIntentRequestHandler} from 'ask-sdk-addon';class SomeIntentRequestHandler extends NamedIntentRequestHandler {
constructor() {
super('SomeIntent', 'FoobarIntent');
}public handle(handlerInput : HandlerInput) : Promise | Response {
return null;
}
}
```The following RequestHandler will handle LaunchRequests.
```typescript
import {NamedIntentRequestHandler} from 'ask-sdk-addon';class LaunchRequestHandler extends NamedIntentRequestHandler {
constructor() {
super('LaunchRequest');
}public handle(handlerInput : HandlerInput) : Promise | Response {
return null;
}
}
```#### StatefulNamedIntentRequestHandler
If you want different handlers depending on the current state of your skill, you can extend the `StatefulNamedIntentRequestHandler` and specify the
state and the intent name instead of implementing the `canHandle` method.The following RequestHandler will handle requests for the intent `SomeIntent` if the session attribute `_STATE` is `myState`.
```typescript
import {StatefulNamedIntentRequestHandler} from 'ask-sdk-addon';class SomeIntentRequestHandler extends StatefulNamedIntentRequestHandler {
constructor() {
super('myState', 'SomeIntent');
}public handle(handlerInput : HandlerInput) : Promise | Response {
return null;
}
}
```#### AudioPlayerRequestHandler
You can extend the `AudioPlayerRequestHandler` and implement the methods to facilitate the processing of AudioPlayer events.
```typescript
import {AudioPlayerRequestHandler} from 'ask-sdk-addon';class TestHandler extends AudioPlayerRequestHandler {
public handlePlaybackFailed(handlerInput : HandlerInput) : Promise | Response {
// Handle event
}public handlePlaybackFinished(handlerInput : HandlerInput) : Promise | Response {
// Handle event
}
public handlePlaybackNearlyFinished(handlerInput : HandlerInput) : Promise | Response {
// Handle event
}public handlePlaybackStarted(handlerInput : HandlerInput) : Promise | Response {
// Handle event
}public handlePlaybackStopped(handlerInput : HandlerInput) : Promise | Response {
// Handle event
}}
```### Helper
#### SlotHelper
Use the SlotHelper to get slot values or entity resolutions from slots.
Create an instance of the SlotHelper with `new SlotHelper(requestEnvelope)`.
You can now call `getValue` or `resolveFirstValue` to get appropriate slot values.
```typescript
import {SlotHelper} from 'ask-sdk-addon';async handle({requestEnvelope}) {
const slotHelper = new SlotHelper(requestEnvelope);
let attr = slotHelper.resolveFirstValue('attribute');
console.log(`Resolution Id: ${attr.id}`);
let value = slotHelper.getValue('attribute');
console.log(`Slot Value: ${value}`);
// ... more code
}
```Using the `isConfirmed` method you can get the confirmation status of the intent and slots.
#### StateHelper
Use the StateHelper to manage a state machine for your Skill's intents.
Depending on the current state different handlers will be invoked for the same intent.Create an instance of the StateHelper with `new SlotHelper(handlerInput)`.
You can now call `getCurrentState` to get the current state or `setState(state)` or `clearState()` to set the state for the next invocation.
```typescript
import {StateHelper} from 'ask-sdk-addon';async handle(handlerInput) {
const stateHelper = new StateHelper(handlerInput);const current = stateHelper.getCurrentState();
console.log(`Current state is: ${current}`);stateHelper.setState('newState');
// ... more code
}
```#### ResponseHelper
Use the ResponseHelper to add additional features to skill responses.
Create an instance of the ResponseHelper with `new ResponseHelper(responseBuilder)`.
You can now call the additional methods for enhanced features.
```typescript
import {ResponseHelper} from 'ask-sdk-addon';async handle({requestEnvelope, responseBuilder}) {
const responseHelper = new ResponseHelper(responseBuilder);
responseHelper.speakOneOf(['OutputSpeech 1', 'OutputSpeech 2']);
// ... more code
}
```#### DisplayTemplateBuilder
Use the DisplayTemplateBuilder to ease the creation of RenderTemplates for display devices like Echo Show and Echo Spot.
Create an instance of the Builder with `new DisplayTemplateBuilder({type: 'BodyTemplate2'})`.
```typescript
import {DisplayTemplateBuilder} from 'ask-sdk-addon';if (DisplayTemplateBuilder.isDisplaySupported(handlerInput.requestEnvelope)) {
const builder : DisplayTemplateBuilder = new DisplayTemplateBuilder({type: 'BodyTemplate2'});
builder.withToken('superToken').withBackButton().withImage(myImageUrl).withTitle('Template Title');
builder.withPrimaryRichText('Some Text: Lorem ipsum');
handlerInput.responseBuilder.addRenderTemplateDirective(builder.getTemplate());
}```
#### InterfaceHelper
The InterfaceHelper helps you determine which interfaces are supported by the calling device.
```typescript
import {InterfaceHelper} from 'ask-sdk-addon';InterfaceHelper.isAudioPlayerSupported(requestEnvelope);
InterfaceHelper.isVideoPlayerSupported(requestEnvelope);
InterfaceHelper.isDisplaySupported(requestEnvelope);
```### Interceptor
#### LogRequestInterceptor
This interceptor logs all incoming requests to the console
```typescript
import {SkillBuilders} from 'ask-sdk';
import {LogRequestInterceptor} from 'ask-sdk-addon';SkillBuilders.custom().addRequestInterceptors(new LogRequestInterceptor());
```#### PersistAttributesInterceptor
This interceptor saves the persistent attributes to the data store
```typescript
import {SkillBuilders} from 'ask-sdk';
import {PersistAttributesInterceptor} from 'ask-sdk-addon';SkillBuilders.custom().addResponseInterceptors(new PersistAttributesInterceptor());
```#### ProfileInterceptor
These interceptors call the user profile service and populate request attributes
```typescript
import {SkillBuilders} from 'ask-sdk';
import {ProfileInterceptor} from 'ask-sdk-addon';SkillBuilders.custom().addRequestInterceptors(new TimeZoneInterceptor());
SkillBuilders.custom().addRequestInterceptors(new DistanceUnitsInterceptor());
SkillBuilders.custom().addRequestInterceptors(new TemperatureUnitInterceptor());handlerInput.attributesManager.getRequestAttributes().timeZone;
handlerInput.attributesManager.getRequestAttributes().temperatureUnit;
handlerInput.attributesManager.getRequestAttributes().distanceUnits;```