music_player_skill
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
music_player_skill [2016/12/31 03:45] – Finished adding creation pictures santiagoricoy | music_player_skill [2017/01/02 00:38] (current) – santiagoricoy | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Creating an Alexa Skill to Play a Music File ====== | ====== Creating an Alexa Skill to Play a Music File ====== | ||
+ | |||
+ | |||
+ | {{ youtube> | ||
+ | |||
+ | |||
+ | |||
+ | |||
<!-- Replace the above line with the name of your "How To" Tutorial e.g. How to Laser cut Your Name in Wood --> | <!-- Replace the above line with the name of your "How To" Tutorial e.g. How to Laser cut Your Name in Wood --> | ||
Line 10: | Line 17: | ||
**Keywords: | **Keywords: | ||
\\ | \\ | ||
+ | |||
+ | ---- | ||
<!-- Add a representative photo of your tutorial below. | <!-- Add a representative photo of your tutorial below. | ||
Line 18: | Line 27: | ||
This picture shows part of the Amazon Developer console, which allows you to use many items offered by Amazon to developers; in this case, testing the voice-controlled side of an Alexa skill. We need to understand how to stream files through our Alexa-enabled device. Solving this some degree is important because it demonstrates the ability to fetch files from the web with the Alexa Voice Service (AVS), which implies it can be used to manipulate and control other items in the cloud, and connected devices. This tutorial shows you how to set up a lambda function that talks to the voice-operated end of an Alexa skill. | This picture shows part of the Amazon Developer console, which allows you to use many items offered by Amazon to developers; in this case, testing the voice-controlled side of an Alexa skill. We need to understand how to stream files through our Alexa-enabled device. Solving this some degree is important because it demonstrates the ability to fetch files from the web with the Alexa Voice Service (AVS), which implies it can be used to manipulate and control other items in the cloud, and connected devices. This tutorial shows you how to set up a lambda function that talks to the voice-operated end of an Alexa skill. | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
\\ | \\ | ||
Line 42: | Line 55: | ||
* [[music_player_skill# | * [[music_player_skill# | ||
* [[music_player_skill# | * [[music_player_skill# | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
==== Required Items ==== | ==== Required Items ==== | ||
Line 60: | Line 77: | ||
^PART NAME/ | ^PART NAME/ | ||
| Amazon Echo Dot | Amazon.com | | Amazon Echo Dot | Amazon.com | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
Line 205: | Line 226: | ||
It's time to begin testing...maybe troubleshooting? | It's time to begin testing...maybe troubleshooting? | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
==== Programming ==== | ==== Programming ==== | ||
We got it working, so, how exactly does this thing work? | We got it working, so, how exactly does this thing work? | ||
+ | |||
+ | Well, we'll go through a quick overview here, and I'll link relevant content as I go. | ||
+ | |||
+ | 1. **The Alexa Skill** | ||
+ | | ||
+ | The skill built through the developer console has no actual programming involved. | ||
+ | |||
+ | What we do define is what the end user will say to invoke our skill, or navigate options within the skill. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | The intent schema and sample utterances combined represent things the user might say, and what to do in response. | ||
+ | |||
+ | The intent schema is where we set up which intents we will use. Intents are a way of specifying the request sent by the skill to our function in Lambda. | ||
+ | |||
+ | In our example, we use a custom intent called " | ||
+ | |||
+ | For more on defining an Alexa skill' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | |||
+ | We must send our request somewhere, and the global fields section of our skill allows us to specify whether we are sending requests to our own URL or to an AWS Lambda function. It is easier to use the Amazon Resource Number (ARN) of a Lambda function, because we do not have to deal with any specifics concerning how our requests are sent to the Lambda function, we only need to write the code that our function will use to handle requests. | ||
- | + | 2. **The Lambda Function** | |
+ | |||
+ | The Lambda function is where our code is hosted and responds when triggered by the Alexa skill. Otherwise, the function will sit idle and do nothing, making it very efficient for our purposes. With that said, let's take a brief look at our code below. | ||
+ | |||
+ | <code javascript> | ||
+ | |||
+ | 'use strict'; | ||
+ | |||
+ | var Alexa = require(' | ||
+ | var constants = require(' | ||
+ | var stateHandlers = require(' | ||
+ | var audioEventHandlers = require(' | ||
+ | |||
+ | exports.handler = function(event, | ||
+ | var alexa = Alexa.handler(event, | ||
+ | alexa.appId = constants.appId; | ||
+ | alexa.dynamoDBTableName = constants.dynamoDBTableName; | ||
+ | alexa.registerHandlers( //this function allows us to register our handlers | ||
+ | stateHandlers.startModeIntentHandlers,// | ||
+ | stateHandlers.playModeIntentHandlers, | ||
+ | stateHandlers.remoteControllerHandlers, | ||
+ | stateHandlers.resumeDecisionModeIntentHandlers, | ||
+ | audioEventHandlers //there are multiple in this file | ||
+ | ); | ||
+ | |||
+ | alexa.execute(); | ||
+ | |||
+ | }; | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | If you recall in the Lambda function, we use " | ||
+ | |||
+ | For more on handling requests, please visit this link: [[https:// | ||
+ | |||
+ | 3. **IAM and the DynamoDB Table** | ||
+ | |||
+ | {{: | ||
+ | |||
+ | In our example, we don't explicitly setup an Amazon DynamoDB table, but rather it is set up by our Lambda function. However, when we created a role with the Identity and Access Management service (IAM) and set it as our Lambda function' | ||
+ | |||
+ | Amazon CloudWatch is a service that allows us to track metrics of our Amazon Web Services (AWS) account. This ability isn't explicitly used by the skill, but there may be overlap in permissions from CloudWatch that let the function create a table in DynamoDB. | ||
+ | |||
+ | **NOTE:** If you intend to repurpose this sample and change what is actually played by the skill, you will need to go into DynamoDB and delete the table created by the function, as it holds details about what the user has played, but may not replace them correctly with new audio sources. | ||
+ | |||
+ | ---- | ||
==== Final Words ==== | ==== Final Words ==== | ||
Line 217: | Line 312: | ||
This walkthrough has gotten us off the ground with a music-playing Alexa skill, using built-in intents, Amazon DynamoDB, and Amazon IAM. For more on how skills work, please review other links [[echo_tutorial|here]] for an introduction to developing for Alexa. | This walkthrough has gotten us off the ground with a music-playing Alexa skill, using built-in intents, Amazon DynamoDB, and Amazon IAM. For more on how skills work, please review other links [[echo_tutorial|here]] for an introduction to developing for Alexa. | ||
+ | For more information on this particular sample, please go through the README.md file. | ||
music_player_skill.1483184750.txt.gz · Last modified: by santiagoricoy