Create and Manage Alexa-hosted Skills

You can use the Alexa developer console to create and manage Alexa-hosted skills. For more details about hosted skills, see Build a Skill End-to-end Using an Alexa-hosted Skill.

You can also create an Alexa-hosted skill in the following alternate ways:

  • You can create an Alexa-hosted skill by using the developer console and importing a skill project from a public Git repository.
  • You can create an Alexa-hosted skill by using the ASK CLI.

Create an Alexa-hosted skill in the console

You can create an Alexa-hosted skill in the developer console by using the following procedure.

To create an Alexa-hosted skill in the console

  1. Open the Alexa developer console and log in.
  2. Click Create Skill. The Create a new skill page appears.
  3. At the top of the page, for Hosting region, accept the default or choose a new hosting region. The hosting region determines the location of your Amazon S3 bucket and Amazon DynamoDB table. For details, see Hosting your skill resources in different AWS Regions.
  4. For Skill name, enter a name.
  5. For Default language, choose a language.
  6. For Choose a model to add to your skill, select Custom.
  7. For Choose a method to host your skill's backend resources, select Alexa-Hosted (Node.js) or Alexa-Hosted (Python).
  8. Click Create Skill. The Choose a template to add to your skill page appears.
  9. Choose a template and click the Continue with template button, or click the Import skill button. For details, see Import an Alexa-hosted Skill from a Public Git Repository. After about one or two minutes, your skill appears in the console open to the Build page.

After you create your skill, the voice model, AWS resources, and code editor are activated, and the developer console initiates a build process for the voice model.

You can store audio and visual files in Amazon S3 to use with your Alexa-hosted skill. For details, see Use Media Files with Your Alexa-Hosted Skill.

You can store data in Amazon DynamoDB to use with your Alexa-hosted skill. For details, see Use DynamoDB for Data Persistence.

Add dependencies

Alexa provisions AWS CodeBuild as part of your skill to run the build script. NPM (Node.js) or pip (Python) runs automatically as part of the build script. You can add new libraries and dependencies to your skill, and dependencies are fetched and built when you click the Deploy button.

  • Node.js — Add dependencies in the dependencies section of your package.json file:

    "i18next": "^10.5.0"
    
  • Python — Add dependencies in the dependencies section of your requirements.txt file. For example:

    boto3==1.9.216
    

View Amazon CloudWatch logs

Your Alexa-hosted skill automatically provides you with Amazon CloudWatch logs so you can access information critical to developing your skill.

For skills with Alexa-hosted endpoints in multiple regions, Cloudwatch logs appear separately for each region from which users access your skill. Logs that you generate when you test your skill by using the Test page in the console appear with the CloudWatch logs in the default hosting region for your skill. You choose the default hosting region for your skill when you create your skill, and afterwards it appears on the Endpoint tab of the Build page for your skill.

To view your CloudWatch logs

  1. Open the Alexa developer console and log in.
  2. In the list of your skills, click the name of the skill that you want to view.
  3. Click the Code tab.
  4. In the toolbar, click the arrow next to Logs, and then choose your region.
    The AWS console opens to Amazon CloudWatch and your logs appear.
  5. Change the region in the AWS console to see the logs for your skill in other regions.

Convert an existing skill to an Alexa-hosted skill

You can convert an existing custom-model skill to an Alexa-hosted skill in the developer console by using the following procedure.

To convert an existing skill to an Alexa-hosted skill in the console

  1. Open the Alexa developer console and log in.
  2. In your skill list, click the name of your skill, or in the Actions column, choose Edit.
  3. Click Code to open the code page.
  4. Click Convert to Alexa-hosted. The Convert to Alexa-hosted dialog appears.
  5. For Programming language, choose Node.js or Python.
  6. For Hosting Region, choose the primary hosting region. The hosting region determines the location of your Amazon S3 bucket and Amazon DynamoDB table. For details, see Hosting your skill resources in different AWS Regions.
  7. Click Convert. After about one or two minutes, the console opens to the Code page.

After your skill is converted to an Alexa-hosted skill, you must manually copy your skill code into the code editor. After your code is ready, click Deploy to build and deploy your skill code.

You can always revert your skill to self-hosted. For details, see Convert from Alexa-hosted to self-hosted.

Convert from Alexa-hosted to self-hosted

If you have an Alexa-hosted skill and you want to host it yourself, you must move any resources hosted in Amazon S3 and Amazon DynamoDB from your Alexa-hosted skill to your own storage, manually move your code to your new skill endpoint, and change the endpoint of your skill in the developer console. You can download your skill to help convert your skill from Alexa-hosted to self-hosted.

Download your skill

You can download your skill from the Code tab of your skill, either in the development stage or the live stage. In the development stage, you can download the skill with the latest code changes. In the live stage, you can download a copy of the live skill. The download package includes the skill's interaction model, source code files, and skill manifest.

To download a copy of your skill

  1. Open the Alexa developer console and log in.
  2. In the list of your skills, click the name of the skill that you want to download.
  3. Click the Code tab.
  4. In the upper left corner, click the Download Skill icon.
  5. In the pop-up window, choose Continue.
  6. Save your skill as a .zip file.

Filter out skill availability checks

The hosted skills service periodically sends an availability check to your AWS Lambda function to verify that calls to AWS Lambda from your Alexa-hosted skill work properly. Alexa sends the availability check in the form of a LaunchRequest from the user alexa-lambda-availability. If your skill performs an action when it receives a LaunchRequest, filter out requests from the user alexa-lambda-availability to prevent your skill from performing unnecessary actions.

The following code illustrates an availability check sent from Alexa to your skill.

{
  "version": "1.0",
  "session": {
    "new": true,
    "sessionId": "alexa-lambda-availability",
    "application": {
      "applicationId": "YOUR_SKILL_ID"
    },
    "user": {
      "userId": "alexa-lambda-availability"
    }
  },
  "context": {
    "AudioPlayer": {
      "playerActivity": "IDLE"
    },
    "System": {
      "application": {
        "applicationId": "YOUR_SKILL_ID"
      },
      "user": {
        "userId": "alexa-lambda-availability"
      },
      "device": {
        "deviceId": "test-device",
        "supportedInterfaces": {
          "AudioPlayer": {}
        }
      },
      "apiEndpoint": "https://api.amazonalexa.com",
      "apiAccessToken": "{token}"
    }
  },
  "request": {
    "type": "LaunchRequest",
    "requestId": "amzn1.echo-api.request.alexa.lambda.availability",
    "locale": "en-US",
    "shouldLinkResultBeReturned": false
  }
}