From e504ebe9d86e79514e83d622de744b34a5c3ac52 Mon Sep 17 00:00:00 2001 From: akersh-s Date: Mon, 26 Aug 2019 13:41:28 -0700 Subject: [PATCH 1/6] Added ask-cli-x branch --- ask-resources.json | 33 ++++++++ {lambda/custom => code}/index.js | 0 {lambda/custom => code}/package.json | 0 hooks/post_new_hook.ps1 | 53 ------------- hooks/post_new_hook.sh | 41 ---------- hooks/pre_deploy_hook.ps1 | 54 ------------- hooks/pre_deploy_hook.sh | 44 ---------- models/hi-IN.json | 39 --------- skill-package/assets/en-US_largeIcon.png | Bin 0 -> 41316 bytes skill-package/assets/en-US_smallIcon.png | Bin 0 -> 12447 bytes .../interactionModels/custom}/de-DE.json | 0 .../interactionModels/custom}/en-AU.json | 0 .../interactionModels/custom}/en-CA.json | 0 .../interactionModels/custom}/en-GB.json | 0 .../interactionModels/custom}/en-IN.json | 0 .../interactionModels/custom}/en-US.json | 0 .../interactionModels/custom}/es-ES.json | 0 .../interactionModels/custom}/es-MX.json | 0 .../interactionModels/custom}/es-US.json | 0 .../interactionModels/custom}/fr-CA.json | 0 .../interactionModels/custom}/fr-FR.json | 0 .../interactionModels/custom}/it-IT.json | 0 .../interactionModels/custom}/ja-JP.json | 0 .../interactionModels/custom}/pt-BR.json | 0 skill.json => skill-package/skill.json | 23 +----- test/unit/README.md | 53 ------------- test/unit/index.test.yml | 75 ------------------ test/unit/testing.json | 11 --- 28 files changed, 34 insertions(+), 392 deletions(-) create mode 100644 ask-resources.json rename {lambda/custom => code}/index.js (100%) mode change 100644 => 100755 rename {lambda/custom => code}/package.json (100%) mode change 100644 => 100755 delete mode 100755 hooks/post_new_hook.ps1 delete mode 100755 hooks/post_new_hook.sh delete mode 100755 hooks/pre_deploy_hook.ps1 delete mode 100755 hooks/pre_deploy_hook.sh delete mode 100644 models/hi-IN.json create mode 100644 skill-package/assets/en-US_largeIcon.png create mode 100644 skill-package/assets/en-US_smallIcon.png rename {models => skill-package/interactionModels/custom}/de-DE.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/en-AU.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/en-CA.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/en-GB.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/en-IN.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/en-US.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/es-ES.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/es-MX.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/es-US.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/fr-CA.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/fr-FR.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/it-IT.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/ja-JP.json (100%) mode change 100644 => 100755 rename {models => skill-package/interactionModels/custom}/pt-BR.json (100%) mode change 100644 => 100755 rename skill.json => skill-package/skill.json (90%) delete mode 100644 test/unit/README.md delete mode 100644 test/unit/index.test.yml delete mode 100644 test/unit/testing.json diff --git a/ask-resources.json b/ask-resources.json new file mode 100644 index 00000000..b40df967 --- /dev/null +++ b/ask-resources.json @@ -0,0 +1,33 @@ +{ + "askcliResourcesVersion": "2019-08-23", + "profiles": { + "default": { + "skillId": "", + "skillMetadata": { + "src": "./skill-package", + "lastDeployHash": "" + }, + "code": { + "default": { + "src": "./code", + "lastDeployHash": "" + }, + "EU": { + "src": "./code", + "lastDeployHash": "" + }, + "FE": { + "src": "./code", + "lastDeployHash": "" + } + }, + "skillInfrastructure": { + "userConfig": { + "runtime": "nodejs8.10", + "handler": "index.handler" + } + } + } + } + } + \ No newline at end of file diff --git a/lambda/custom/index.js b/code/index.js old mode 100644 new mode 100755 similarity index 100% rename from lambda/custom/index.js rename to code/index.js diff --git a/lambda/custom/package.json b/code/package.json old mode 100644 new mode 100755 similarity index 100% rename from lambda/custom/package.json rename to code/package.json diff --git a/hooks/post_new_hook.ps1 b/hooks/post_new_hook.ps1 deleted file mode 100755 index 56f21247..00000000 --- a/hooks/post_new_hook.ps1 +++ /dev/null @@ -1,53 +0,0 @@ -# Powershell script for ask-cli post-new hook for Node.js -# Script Usage: post_new_hook.ps1 - -# SKILL_NAME is the preformatted name passed from the CLI, after removing special characters. -# DO_DEBUG is boolean value for debug logging - -# Run this script one level outside of the skill root folder - -# The script does the following: -# - Run "npm install" in each sourceDir in skill.json - -param( - [string] $SKILL_NAME, - [bool] $DO_DEBUG = $False -) - -if ($DO_DEBUG) { - Write-Output "###########################" - Write-Output "###### post-new hook ######" - Write-Output "###########################" -} - -function install_dependencies ($CWD, $SOURCE_DIR) { - $INSTALL_PATH = $SKILL_NAME + "\" +$SOURCE_DIR - Set-Location $INSTALL_PATH - Invoke-Expression "npm install" 2>&1 | Out-Null - $EXEC_RESULT = $? - Set-Location $CWD - return $EXEC_RESULT -} - -$SKILL_FILE_PATH = $SKILL_NAME + "\skill.json" -$ALL_SOURCE_DIRS = Get-Content -Path $SKILL_FILE_PATH | select-string -Pattern "sourceDir" -CaseSensitive -Foreach ($SOURCE_DIR in $ALL_SOURCE_DIRS) { - $FILTER_SOURCE_DIR = $SOURCE_DIR -replace "`"", "" -replace "\s", "" -replace ",","" -replace "sourceDir:", "" - $CWD = (Get-Location).Path - if (install_dependencies $CWD $FILTER_SOURCE_DIR) { - if ($DO_DEBUG) { - Write-Output "Codebase ($FILTER_SOURCE_DIR) built successfully." - } - } else { - if ($DO_DEBUG) { - Write-Output "There was a problem installing dependencies for ($FILTER_SOURCE_DIR)." - } - exit 1 - } -} - -if ($DO_DEBUG) { - Write-Output "###########################" -} - -exit 0 diff --git a/hooks/post_new_hook.sh b/hooks/post_new_hook.sh deleted file mode 100755 index 970ce568..00000000 --- a/hooks/post_new_hook.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# Shell script for ask-cli post-new hook for Node.js -# Script Usage: post_new_hook.sh - -# SKILL_NAME is the preformatted name passed from the CLI, after removing special characters. -# DO_DEBUG is boolean value for debug logging - -# Run this script one level outside of the skill root folder - -# The script does the following: -# - Run "npm install" in each sourceDir in skill.json - -SKILL_NAME=$1 -DO_DEBUG=${2:-false} - -if [ $DO_DEBUG == false ] -then - exec > /dev/null 2>&1 -fi - -install_dependencies() { - npm install --prefix "$SKILL_NAME/$1" >/dev/null 2>&1 - return $? -} - -echo "###########################" -echo "###### post-new hook ######" -echo "###########################" - -grep "sourceDir" $SKILL_NAME/skill.json | cut -d: -f2 | sed 's/"//g' | sed 's/,//g' | while read -r SOURCE_DIR; do - if install_dependencies $SOURCE_DIR; then - echo "Codebase ($SOURCE_DIR) built successfully." - else - echo "There was a problem installing dependencies for ($SOURCE_DIR)." - exit 1 - fi -done -echo "###########################" - -exit 0 - diff --git a/hooks/pre_deploy_hook.ps1 b/hooks/pre_deploy_hook.ps1 deleted file mode 100755 index 39c6c906..00000000 --- a/hooks/pre_deploy_hook.ps1 +++ /dev/null @@ -1,54 +0,0 @@ -# Powershell script for ask-cli pre-deploy hook for Node.js -# Script Usage: pre_deploy_hook.ps1 - -# SKILL_NAME is the preformatted name passed from the CLI, after removing special characters. -# DO_DEBUG is boolean value for debug logging -# TARGET is the deploy TARGET provided to the CLI. (eg: all, skill, lambda etc.) - -# Run this script under the skill root folder - -# The script does the following: -# - Run "npm install" in each sourceDir in skill.json - -param( - [string] $SKILL_NAME, - [bool] $DO_DEBUG = $False, - [string] $TARGET = "all" -) - -function install_dependencies ($CWD, $SOURCE_DIR) { - Set-Location $SOURCE_DIR - Invoke-Expression "npm install" 2>&1 | Out-Null - $EXEC_RESULT = $? - Set-Location $CWD - return $EXEC_RESULT -} - -if ($DO_DEBUG) { - Write-Output "###########################" - Write-Output "##### pre-deploy hook #####" - Write-Output "###########################" -} - -if ($TARGET -eq "all" -Or $TARGET -eq "lambda") { - $ALL_SOURCE_DIRS = Get-Content -Path "skill.json" | select-string -Pattern "sourceDir" -CaseSensitive - Foreach ($SOURCE_DIR in $ALL_SOURCE_DIRS) { - $FILTER_SOURCE_DIR = $SOURCE_DIR -replace "`"", "" -replace "\s", "" -replace ",","" -replace "sourceDir:", "" - $CWD = (Get-Location).Path - if (install_dependencies $CWD $FILTER_SOURCE_DIR) { - if ($DO_DEBUG) { - Write-Output "Codebase ($FILTER_SOURCE_DIR) built successfully." - } - } else { - if ($DO_DEBUG) { - Write-Output "There was a problem installing dependencies for ($FILTER_SOURCE_DIR)." - } - exit 1 - } - } - if ($DO_DEBUG) { - Write-Output "###########################" - } -} - -exit 0 diff --git a/hooks/pre_deploy_hook.sh b/hooks/pre_deploy_hook.sh deleted file mode 100755 index 33207e68..00000000 --- a/hooks/pre_deploy_hook.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash -# Shell script for ask-cli pre-deploy hook for Node.js -# Script Usage: pre_deploy_hook.sh - -# SKILL_NAME is the preformatted name passed from the CLI, after removing special characters. -# DO_DEBUG is boolean value for debug logging -# TARGET is the deploy TARGET provided to the CLI. (eg: all, skill, lambda etc.) - -# Run this script under skill root folder - -# The script does the following: -# - Run "npm install" in each sourceDir in skill.json - -SKILL_NAME=$1 -DO_DEBUG=${2:-false} -TARGET=${3:-"all"} - -if [ $DO_DEBUG == false ] -then - exec > /dev/null 2>&1 -fi - -install_dependencies() { - npm install --prefix "$1" >/dev/null 2>&1 - return $? -} - -echo "###########################" -echo "##### pre-deploy hook #####" -echo "###########################" - -if [[ $TARGET == "all" || $TARGET == "lambda" ]]; then - grep "sourceDir" ./skill.json | cut -d: -f2 | sed 's/"//g' | sed 's/,//g' | while read -r SOURCE_DIR; do - if install_dependencies $SOURCE_DIR; then - echo "Codebase ($SOURCE_DIR) built successfully." - else - echo "There was a problem installing dependencies for ($SOURCE_DIR)." - exit 1 - fi - done - echo "###########################" -fi - -exit 0 diff --git a/models/hi-IN.json b/models/hi-IN.json deleted file mode 100644 index f91cdb28..00000000 --- a/models/hi-IN.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "interactionModel": { - "languageModel": { - "invocationName": "अंतरिक्ष facts", - "intents": [ - { - "name": "AMAZON.CancelIntent", - "samples": [] - }, - { - "name": "AMAZON.HelpIntent", - "samples": [] - }, - { - "name": "AMAZON.StopIntent", - "samples": [] - }, - { - "name": "GetNewFactIntent", - "samples": [ - "मुझे एक fact बताओ", - "मुझे अंतरिक्ष के बारे में एक fact बताओ", - "मुझे space के बारे में एक fact बताओ", - "मुझे अंतरिक्ष के बारे में ज्ञान बताओ", - "मुझे एक fact दो", - "मुझे एक space fact दो", - "मुझे एक अंतरिक्ष ज्ञान बताओ" - ], - "slots": [] - }, - { - "name": "AMAZON.NavigateHomeIntent", - "samples": [] - } - ] - } - } - } - \ No newline at end of file diff --git a/skill-package/assets/en-US_largeIcon.png b/skill-package/assets/en-US_largeIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..28ee1aa79a66324cb0af6accc1f4976c94455927 GIT binary patch literal 41316 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 gmwX)05Dp}WtI4TCu=L6Au=FXG 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%0AQQ+A;%U}qpL#z%U_@L04;4Ir~mB% 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 S`Rio}_|w-h(yrHZ#QYzmZGqAN literal 0 HcmV?d00001 diff --git a/skill-package/assets/en-US_smallIcon.png b/skill-package/assets/en-US_smallIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1e0daf5b6208d9263cf7c688899eb4b6ea6522 GIT binary patch literal 12447 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 literal 0 HcmV?d00001 diff --git a/models/de-DE.json b/skill-package/interactionModels/custom/de-DE.json old mode 100644 new mode 100755 similarity index 100% rename from models/de-DE.json rename to skill-package/interactionModels/custom/de-DE.json diff --git a/models/en-AU.json b/skill-package/interactionModels/custom/en-AU.json old mode 100644 new mode 100755 similarity index 100% rename from models/en-AU.json rename to skill-package/interactionModels/custom/en-AU.json diff --git a/models/en-CA.json b/skill-package/interactionModels/custom/en-CA.json old mode 100644 new mode 100755 similarity index 100% rename from models/en-CA.json rename to skill-package/interactionModels/custom/en-CA.json diff --git a/models/en-GB.json b/skill-package/interactionModels/custom/en-GB.json old mode 100644 new mode 100755 similarity index 100% rename from models/en-GB.json rename to skill-package/interactionModels/custom/en-GB.json diff --git a/models/en-IN.json b/skill-package/interactionModels/custom/en-IN.json old mode 100644 new mode 100755 similarity index 100% rename from models/en-IN.json rename to skill-package/interactionModels/custom/en-IN.json diff --git a/models/en-US.json b/skill-package/interactionModels/custom/en-US.json old mode 100644 new mode 100755 similarity index 100% rename from models/en-US.json rename to skill-package/interactionModels/custom/en-US.json diff --git a/models/es-ES.json b/skill-package/interactionModels/custom/es-ES.json old mode 100644 new mode 100755 similarity index 100% rename from models/es-ES.json rename to skill-package/interactionModels/custom/es-ES.json diff --git a/models/es-MX.json b/skill-package/interactionModels/custom/es-MX.json old mode 100644 new mode 100755 similarity index 100% rename from models/es-MX.json rename to skill-package/interactionModels/custom/es-MX.json diff --git a/models/es-US.json b/skill-package/interactionModels/custom/es-US.json old mode 100644 new mode 100755 similarity index 100% rename from models/es-US.json rename to skill-package/interactionModels/custom/es-US.json diff --git a/models/fr-CA.json b/skill-package/interactionModels/custom/fr-CA.json old mode 100644 new mode 100755 similarity index 100% rename from models/fr-CA.json rename to skill-package/interactionModels/custom/fr-CA.json diff --git a/models/fr-FR.json b/skill-package/interactionModels/custom/fr-FR.json old mode 100644 new mode 100755 similarity index 100% rename from models/fr-FR.json rename to skill-package/interactionModels/custom/fr-FR.json diff --git a/models/it-IT.json b/skill-package/interactionModels/custom/it-IT.json old mode 100644 new mode 100755 similarity index 100% rename from models/it-IT.json rename to skill-package/interactionModels/custom/it-IT.json diff --git a/models/ja-JP.json b/skill-package/interactionModels/custom/ja-JP.json old mode 100644 new mode 100755 similarity index 100% rename from models/ja-JP.json rename to skill-package/interactionModels/custom/ja-JP.json diff --git a/models/pt-BR.json b/skill-package/interactionModels/custom/pt-BR.json old mode 100644 new mode 100755 similarity index 100% rename from models/pt-BR.json rename to skill-package/interactionModels/custom/pt-BR.json diff --git a/skill.json b/skill-package/skill.json similarity index 90% rename from skill.json rename to skill-package/skill.json index 60858d13..20c9a77c 100644 --- a/skill.json +++ b/skill-package/skill.json @@ -153,22 +153,6 @@ "name": "Anecdotes de l'Espace", "description": "Demandez des anecdotes sur l'espace et découvrez ce qui compte vraiment, comme la matière noire.\n\nLes anecdotes de l'espace vont régaler toute la famille et garantir de vous rendre plus intelligent.\n\nPour commencer, dites simplement \"Alexa, lance anecdotes de l'espace\" ou \"Alexa, ouvre anecdotes de l'espace\" pour obtenir une anecdote \".\n\nÀ tout moment, vous pouvez arrêter en disant \"Alexa, stop \"" }, - "hi-IN": { - "summary": "अंतरिक्ष के बारे में कुछ नया सीखें", - "examplePhrases": [ - "Alexa अंतरिक्ष facts शुरू करो", - "Alexa अंतरिक्ष facts open करो और मुझे एक fact बताओ", - "Alexa अंतरिक्ष facts खोलो और मुझे एक fact दो" - ], - "keywords": [ - "अंतरिक्ष", - "ज्ञान", - "space", - "trivia" - ], - "name": "अंतरिक्ष Facts", - "description": "अंतरिक्ष facts skill आपको अंतरिक्ष के बारे में कुछ दिलचस्प जानकारी देगा. इसे शुरू करने के लिए कहें,\"Alexa, अंतरिक्ष facts शुरू करो\". इसे रोकने के लिए, \"Alexa, चुप\"" - }, "it-IT": { "summary": "Impara informazioni divertenti sullo spazio.", "examplePhrases": [ @@ -216,12 +200,7 @@ "category": "KNOWLEDGE_AND_TRIVIA" }, "apis": { - "custom": { - "endpoint": { - "sourceDir": "lambda/custom", - "uri": "ask-custom-fact-default" - } - } + "custom": {} }, "manifestVersion": "1.0" } diff --git a/test/unit/README.md b/test/unit/README.md deleted file mode 100644 index 5eef00c5..00000000 --- a/test/unit/README.md +++ /dev/null @@ -1,53 +0,0 @@ -## **How to setup and run Unit Tests** - -There are several methods commonly used to test and simulate Alexa skills during the development process. -See the Alexa Cookbook [testing guide](https://github.com/alexa/alexa-cookbook/tree/master/guides/testing) for more details. - -For running formal QA tests, developers can leverage third-party tools that run on standard unit test frameworks like [Jest](https://jestjs.io/) or [Mocha](https://mochajs.org/). - -Here we will focus on running a test suite against your local code project using the Bespoken CLI (`bst`) from [Bespoken](https://bespoken.io). - -To get started, you need to install the Bespoken CLI, please follow the next steps: -1. Install the Bespoken CLI by running `npm install -g bespoken-tools` on your command line. -2. Create the main testing folder. We recommend to name it `test`; it should be under the root of your skill's directory. -3. Create a folder named `unit` under `test\`, this folder will store your unit test script files. -4. Add the test configuration file `testing.json`. This file should be located under your `test\unit` directory. It might look like this: - ```JSON - { - "handler": "../../src/index.js", - "locale": "en-US", - "trace": true, - "jest": { - "silent": false - } - } - ``` - The most important parameter is the handler where you indicate Bespoken's Skill Tester where the source code of your skill is. These parameters can be overwritten on each test script file under their configuration section. -5. Add your test scripts. We recommend to use next convention when naming your test script files: - * If you have only one test script: `index.test.yml` - * If you want to create more than one test script: `functionalityName.test.yml`. - - The yml extension indicates this is a YAML file, which is the syntax we use to create test scripts; `test` means that is a unit test script file. A test script looks like this: - ```YAML - --- - configuration: # Here you define your locales and mocks - locale: en-US - - --- # Three dashes start a new YAML document - - test: Launch request, no further interaction. # A description of this test sequence - - LaunchRequest: # LaunchRequest is not an utterance but a request type - - response.outputSpeech.ssml: Here's your fact - - response.card.type: Simple - - response.card.title: Space Facts - - response.card.content: "*" # A wildcard means any text will match - ``` - A typical YAML sentence is composed of 2 parts separated by a colon; in the left part we have the intent name we want to test; in the right part we have the expected result. You can also access any element on the JSON response object like the session attributes. -6. To execute the scripts go to the root of your project and run `bst test`. That will find and run all the unit test scripts files. - -For more information about skill unit testing with Bespoken, please read [here](https://read.bespoken.io/unit-testing/getting-started/). - -If you need assistance, reach Bespoken on any of these channels: -* [Chat with us](https://bespoken.io/testing) (chat is in lower right-hand corner of the page) -* [Email](mailto:support@bespoken.io) -* [Twitter](https://twitter.com/bespokenio) -* [Gitter](https://gitter.im/bespoken) diff --git a/test/unit/index.test.yml b/test/unit/index.test.yml deleted file mode 100644 index 24201d76..00000000 --- a/test/unit/index.test.yml +++ /dev/null @@ -1,75 +0,0 @@ -#===================================================================================================================== -# ______ _ ____ ______ __ _ -# / __/ /__ (_) / / /_ __/__ ___ / /_(_)__ ___ _ -# _\ \/ '_// / / / / / / -_|_-/lambda/data", - "/lambda/custom/.*cook.*" - ] - } -} From e6efd76492bfaae670c254e4c97ec4903cb7b3f6 Mon Sep 17 00:00:00 2001 From: akersh-s Date: Mon, 26 Aug 2019 15:56:43 -0700 Subject: [PATCH 2/6] removed instructions --- README.md | 35 ------ instructions/cli.md | 94 --------------- instructions/create-alexa-hosted-function.md | 31 ----- instructions/create-aws-hosted-function.md | 64 ----------- instructions/customize-skill-content.md | 35 ------ instructions/setup-vui-alexa-hosted.md | 46 -------- instructions/setup-vui-aws-hosted.md | 35 ------ instructions/submit-for-certification.md | 114 ------------------- instructions/test-using-simulator.md | 76 ------------- 9 files changed, 530 deletions(-) delete mode 100644 README.md delete mode 100644 instructions/cli.md delete mode 100644 instructions/create-alexa-hosted-function.md delete mode 100644 instructions/create-aws-hosted-function.md delete mode 100644 instructions/customize-skill-content.md delete mode 100644 instructions/setup-vui-alexa-hosted.md delete mode 100644 instructions/setup-vui-aws-hosted.md delete mode 100644 instructions/submit-for-certification.md delete mode 100644 instructions/test-using-simulator.md diff --git a/README.md b/README.md deleted file mode 100644 index 8d9ec517..00000000 --- a/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# Build An Alexa Fact Skill - - -This Alexa sample skill is a template for a basic fact skill. -Provided a list of interesting facts about a topic, Alexa will select a fact at random and tell it to the user when the skill is invoked. - - -## Skill Architecture -Each skill consists of two basic parts, a front end and a back end. -The front end is the voice interface, or VUI. -The voice interface is configured through the voice interaction model. -The back end is where the logic of your skill resides. - -## Three Options for Skill Setup -There are a number of different ways for you to setup your skill, depending on your experience and what tools you have available. - - * If this is your first skill, choose the [Alexa-Hosted backend instructions](./instructions/setup-vui-alexa-hosted.md) to get started quickly. - * If you want to manage the backend resources in your own AWS account, you can follow the [AWS-Hosted instructions](./instructions/setup-vui-aws-hosted.md). - * Developers with the ASK Command Line Interface configured may follow the [ASK CLI instructions](./instructions/cli.md). - ---- - -## Additional Resources - -### Community -* [Amazon Developer Forums](https://forums.developer.amazon.com/spaces/165/index.html) - Join the conversation! -* [Hackster.io](https://www.hackster.io/amazon-alexa) - See what others are building with Alexa. - -### Tutorials & Guides -* [Voice Design Guide](https://developer.amazon.com/designing-for-voice/) - A great resource for learning conversational and voice user interface design. -* [Codecademy: Learn Alexa](https://www.codecademy.com/learn/learn-alexa) - Learn how to build an Alexa Skill from within your browser with this beginner friendly tutorial on Codecademy! - -### Documentation -* [Official Alexa Skills Kit SDK for Node.js](http://alexa.design/node-sdk-docs) - The Official Node.js SDK Documentation -* [Official Alexa Skills Kit Documentation](https://developer.amazon.com/docs/ask-overviews/build-skills-with-the-alexa-skills-kit.html) - Official Alexa Skills Kit Documentation \ No newline at end of file diff --git a/instructions/cli.md b/instructions/cli.md deleted file mode 100644 index d9ca051f..00000000 --- a/instructions/cli.md +++ /dev/null @@ -1,94 +0,0 @@ -# Build An Alexa Fact Skill - - -## Setup w/ ASK CLI - -### About -This readme assumes you have your developer environment ready to go and that you have some familiarity with CLI (Command Line Interface) Tools, [AWS](https://aws.amazon.com/), and the [ASK Developer Portal](https://developer.amazon.com/alexa-skills-kit?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Content&sc_detail=fact-nodejs-V2_CLI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Content_fact-nodejs-V2_CLI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). If not, check out this [detailed walkthrough creating an Alexa-hosted skill](./setup-vui-alexa-hosted.md) or this [detailed walkthrough creating a skill hosted in your AWS account](./setup-vui-aws-hosted.md). - -### Pre-requisites - -* Node.js (> v8) -* Register for an [AWS Account](https://aws.amazon.com/) -* Register for an [Amazon Developer Account](https://developer.amazon.com?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Content&sc_detail=fact-nodejs-V2_CLI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Content_fact-nodejs-V2_CLI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) -* Install and Setup [ASK CLI](https://developer.amazon.com/docs/smapi/quick-start-alexa-skills-kit-command-line-interface.html?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Content&sc_detail=fact-nodejs-V2_CLI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Content_fact-nodejs-V2_CLI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) - -> Note: If you would like to setup the ASK CLI using AWS Cloud9 (a cloud-based IDE with pay-as-you-go pricing and is eligible for AWS Free Tier pricing), step-by-step instructions can be found [here](https://alexa.design/cli-on-cloud9). - -### Installation -1. **Make sure** you are running the latest version of the CLI - - ```bash - npm update -g ask-cli - ``` - -2. **Clone** the repository. - - ```bash - git clone https://github.com/alexa/skill-sample-nodejs-fact/ - ``` - -3. Explore the repository. - - ```bash - cd skill-sample-nodejs-fact - ls -al - ``` - -4. Install npm dependencies by navigating into the `/lambda/custom` directory and running the npm command: `npm install` - - ```bash - cd lambda/custom - npm install - ``` - -### Deployment - -ASK CLI **will create the skill and the lambda function for you**. The Lambda function will be created in ```us-east-1 (Northern Virginia)``` by default. - -1. Navigate to the project's root directory. you should see a file named 'skill.json' there. -2. Deploy the skill and the lambda function in one step by running the following command: - - ```bash - ask deploy - ``` - -### Testing - -1. To test, the skill needs to be enabled. From the developer console, open your skill and click the Test tab. Ensure the skill is available for testing in Development. - -2. Simulate verbal interaction with your skill through the command line (this might take a few moments) using the following example, using the locale of your choice (en-US, en-GB, en-IN, en-CA, en-AU): - - ```bash - ask simulate -l en-GB -t "start space facts" - - ✓ Simulation created for simulation id: 4a7a9ed8-94b2-40c0-b3bd-fb63d9887fa7 - ◡ Waiting for simulation response{ - "status": "SUCCESSFUL", - ... - ``` - -3. Once the "Test" switch is enabled, your skill can be tested on devices associated with the developer account as well. Speak to Alexa from any enabled device, from your browser at [echosim.io](https://echosim.io/welcome), or through your Amazon Mobile App and say : - - ```text - Alexa, start space facts - ``` -## Customization - -1. ```./skill.json``` - - Change the skill name, example phrase, icons, testing instructions etc ... - - Remember than many information are locale-specific and must be changed for each locale (en-GB, en-US, etc.) - - See the Skill [Manifest Documentation](https://developer.amazon.com/docs/smapi/skill-manifest.html?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_CLI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_CLI-3_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) for more information. - -2. ```./lambda/custom/index.js``` - - Modify messages, and facts from the source code to customize the skill. - -3. ```./models/*.json``` - - Change the model definition to replace the invocation name and the sample phrase for each intent. Repeat the operation for each locale you are planning to support. - -4. Remember to re-deploy your skill and lambda function for your changes to take effect. diff --git a/instructions/create-alexa-hosted-function.md b/instructions/create-alexa-hosted-function.md deleted file mode 100644 index fb428a44..00000000 --- a/instructions/create-alexa-hosted-function.md +++ /dev/null @@ -1,31 +0,0 @@ -# Build An Alexa Fact Skill - - - -### Deploying Skill Code - -In the [first step of this guide](./setup-vui-alexa-hosted.md), we built the Voice User Interface (VUI) for our Alexa skill. -On this page, we will be exploring the Alexa-Hosted code editor, and deploying our code to enable testing. - - * *For details on what the Alexa-Hosted skills service provides, open [this page](https://developer.amazon.com/docs/hosted-skills/build-a-skill-end-to-end-using-an-alexa-hosted-skill.html) in a new tab.* - - -1. Within your skill in the developer console, click to the Code tab at the top of the page. -You should see folders and files within the left panel, and the **index.js** file opened in the main panel. This index.js file is the main code file for the skill. -There is also a file called **package.json**. We will be updating both these files next. - -2. Click into the index.js file, Select-All the code, and delete it. - -3. From the Github project folders (above), locate and open the file [/lambda/custom/index.js](../lambda/custom/index.js). - -4. Click the "Raw" button just above the code, and Select-All and copy the code. Return to the Alexa skill console and paste this into the index.js file you had previously cleared. - -5. Repeat these steps for the **package.json** file: Copy the contents of [/lambda/custom/package.json](../lambda/custom/package.json), and paste them over the package.json file in your skill. - -6. Select the Save button, then select Deploy. This will deploy your code into a Lambda function that is automatically managed for you by the Alexa-Hosted service. - -7. At the bottom left corner of the page, notice the link to **Logs: Amazon CloudWatch**. CloudWatch is the logging service. - - -[![Next](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/buttons/button_next_testing._TTH_.png)](./test-using-simulator.md) - diff --git a/instructions/create-aws-hosted-function.md b/instructions/create-aws-hosted-function.md deleted file mode 100644 index b307bba0..00000000 --- a/instructions/create-aws-hosted-function.md +++ /dev/null @@ -1,64 +0,0 @@ -# Build An Alexa Fact Skill - - - - -## Setting Up A Lambda Function Using Amazon Web Services - -In the [first step of this guide](./setup-vui-aws-hosted.md), we built the Voice User Interface (VUI) for our Alexa skill. On this page, we will be creating an AWS Lambda function using [Amazon Web Services](http://aws.amazon.com). You can [read more about what a Lambda function is](http://aws.amazon.com/lambda), but for the purposes of this guide, what you need to know is that AWS Lambda is where our code lives. When a user asks Alexa to use our skill, it is our AWS Lambda function that interprets the appropriate interaction, and provides the conversation back to the user. - -1. **Go to http://aws.amazon.com and sign in to the console.** If you don't already have an account, you will need to create one. [If you don't have an AWS account, check out this quick walkthrough for setting it up](https://alexa.design/create-aws-account). - - [![Developer Console](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/2-1-sign-in-to-the-console._TTH_.png)](https://console.aws.amazon.com/console/home) - -2. **Click "Services" at the top of the screen, and type "Lambda" in the search box.** You can also find Lambda in the list of services. It is in the "Compute" section. - - [![Lambda](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/2-2-services-lambda._TTH_.png)](https://console.aws.amazon.com/lambda/home) - -3. **Check your AWS region.** AWS Lambda only works with the Alexa Skills Kit in these regions: US East (N. Virginia), US West (Oregon), Asia Pacific (Tokyo) and EU (Ireland). Make sure you choose the region closest to your customers. - - ![Check Region](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/2-3-check-region._TTH_.png) - -4. **Click the orange "Create function" button.** It should be near the top of your screen. (If you don't see this button, it is because you haven't created a Lambda function before. Click the blue "Get Started" button near the center of your screen.) - - ![Create lambda function](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/2-4-create-a-lambda-function._TTH_.png) - -5. There are three boxes labeled "Author from scratch", "Blueprints" and "Serverless Application Repository". **Click the radio button in the box titled "Serverless Application Repository"** We have created an application in the repository as a shortcut to getting everything set up for your skill. - -6. **Enter `fact` to search for the application repository named `alexa-skills-kit-nodejs-factskill`.** Enter the full name into the search box if you need to narrow the search results. - -7. **Click on the application.** This template will create the Lambda function, grant the Alexa Skills Kit permission to invoke it, and set up an IAM role for you. It will also add the code from this GitHub repo and include the required dependencies so that you don't have to upload them yourself. - -8. Change the application name if so desired and then **Click the deploy button** at the bottom of the page. - -9. Wait for the status of all (three) resources to change to **CREATE_COMPLETE**. The banner at the top will also change to say **Application successfully deployed**. - -11. Open the function that was just created in the Lambda console by clicking on the link in the list of resources. It is normally the first resource and the only link in the list. - -12. (Optional, but recommended) To **secure this Lambda function** follow the instructions found here: [alexa.design/secure-lambda-function](https://alexa.design/secure-lambda-function) - -13. Scroll down the page until you see a section called **Function code**. - -14. You are not required to make any changes, however for your knowledge, the code which was pre-loaded into the function comes from [here](../lambda/custom/index.js). If you modify the code, be sure to click "Save". - -15. You should see the Amazon Resource Name (ARN) for this function in the top right corner of the page. (You may need to scroll back up.) **Copy the ARN value for this Lambda function** by clicking the small copy button; we will use this ARN in the next section of the guide. - - -## Connecting Your Voice User Interface To Your Lambda Function - -Now that you've created a voice user interface for the intents and utterances we expect from our users, and a Lambda function that contains all of our logic for the skill, we need to connect those two pieces together. - -1. **Go back to the [Amazon Developer Portal](https://developer.amazon.com/alexa/console/ask?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-3_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) and select your skill from the list.** You may still have a browser tab open if you started at the beginning of this tutorial. - -2. While on the **Build** tab, select the **Endpoint** tab on the left side navigation panel. - -3. **Select the "AWS Lambda ARN" option for your endpoint.** You have the ability to host your code anywhere that you would like, but for the purposes of simplicity and frugality, we are using AWS Lambda. ([Read more about Hosting Your Own Custom Skill Web Service](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/developing-an-alexa-skill-as-a-web-service?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-3_Convert_WW_beginnersdevs&sc_segment=beginnersdevs).) With the AWS Free Tier, you get 1,000,000 free requests per month, up to 3.2 million seconds of compute time per month. Learn more at [aws.amazon.com/free](https://aws.amazon.com/free/). In addition, Amazon now offers [AWS Promotional Credits for developers who have live Alexa skills that incur costs on AWS related to those skills](https://developer.amazon.com/alexa-skills-kit/alexa-aws-credits?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-3_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). - -4. Paste your Lambda's ARN (Amazon Resource Name) into the textbox provided for **Default Region**. - -5. Click the **Save Endpoints** button at the top of the main panel. - -6. **Click the "Next" button to continue.** - -[![Next](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/buttons/button_next_testing._TTH_.png)](./test-using-simulator.md) - diff --git a/instructions/customize-skill-content.md b/instructions/customize-skill-content.md deleted file mode 100644 index f9e24503..00000000 --- a/instructions/customize-skill-content.md +++ /dev/null @@ -1,35 +0,0 @@ -# Build An Alexa Fact Skill - - - -## Customize the Skill to be Yours - -At this point, you should have a working copy of our Fact skill. In order to make it your own, you will need to customize it with data and responses that you create. Here are the things you will need to change: - -1. **New data.** You will need to provide a set of facts for your topic. We recommend a minimum of 25, but a total closer to 100 offers a better experience. - - 1. Open your code file in the online editor: **index.js.** - - 2. Search for the comment **"TODO: Replace this data with your own."** This is the data for our skill. You can see that it is a simple list of facts. - - 3. Update the facts with new facts, or quotes, jokes, etc. - -2. **New sentences to respond to your users.** There are several sentences and responses that you will want to customize for your skill. - - 1. Go back to **[index.js](../lambda/custom/index.js).** - - 2. **Look for the comment "TODO: The items below this comment need your attention."** This is the beginning of the section where you need to customize several text strings for your skill. - - 3. **Continue through index.js until you reach the bottom of the section.** This will ensure that you cover each of the values that you need to update. - -3. **New language.** If you are creating this skill for another language other than English, you will need to make sure Alexa's responses are also in that language. - - * For example, if you are creating your skill in German, every single response that Alexa makes has to be in German. You can't use English responses or your skill will fail certification. - -4. **Once you have customized the skill's data, languages and/or sentences, return to the [Amazon Developer Portal](https://developer.amazon.com/alexa/console/ask?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-5&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-5_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) and select your skill from the list.** - -5. **Click on "Distribution" in the top navigation to move on to the publishing and certification of your skill.** - - -[![Next](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/buttons/button_next_publication._TTH_.png)](./submit-for-certification.md) - diff --git a/instructions/setup-vui-alexa-hosted.md b/instructions/setup-vui-alexa-hosted.md deleted file mode 100644 index da352d75..00000000 --- a/instructions/setup-vui-alexa-hosted.md +++ /dev/null @@ -1,46 +0,0 @@ -# Build An Alexa-Hosted Fact Skill - - - -With an Alexa-hosted skill, you can build, edit, and publish a skill without leaving the developer console. -The skill includes a code editor for managing and deploying the backend code for your skill. -For details on what the Alexa-Hosted skills service provides, open [this page](https://developer.amazon.com/docs/hosted-skills/build-a-skill-end-to-end-using-an-alexa-hosted-skill.html) in a new tab. - -### Steps -1. **Go to the [Amazon Developer Portal](http://developer.amazon.com/alexa?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). In the top-right corner of the screen, click the "Sign In" button.** -(If you don't already have an account, you will be able to create a new one for free.) - -2. Once you have signed in, move your mouse over the **Your Alexa Consoles** text at the top of the screen and Select the **Skills** Link. - -3. From the **Alexa Skills Console** select the **Create Skill** button near the top-right of the list of your Alexa Skills. - -4. Give your new skill a **Name**. This is the name that will be shown in the Alexa Skills Store, and the name your users will refer to. Also change the locale if so desired. - -5. Keep the default **Custom** model selected, and scroll the page down. - -6. Choose **Alexa-Hosted** for the method to host your skill's backend resources. Scroll backup and select the **Create Skill** button at the top right. -It will take a minute to create your Alexa hosted skill, then you will be taken to the Build tab of the console. - - -7. **Build the Interaction Model for your skill** - 1. On the left hand navigation panel, select the **JSON Editor** tab under **Interaction Model**. In the textfield provided, replace any existing code with the code provided in the [Interaction Model](../models) (make sure to pick the model that matches your skill's language). Click **Save Model**. - 2. If you want to change the skill invocation name, select the **Invocation** tab. Enter a **Skill Invocation Name**. This is the name that your users will need to say to start your skill. - 3. Click "Build Model". - - **Note:** You should notice that **Intents** and **Slot Types** will auto populate based on the JSON Interaction Model that you have now applied to your skill. Feel free to explore the changes here, to learn about **Intents**, **Slots**, and **Utterances** open our [technical documentation in a new tab](https://developer.amazon.com/docs/custom-skills/create-intents-utterances-and-slots.html?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). - -8. **Optional:** Select an intent by expanding the **Intents** from the left side navigation panel. Add some more sample utterances for your newly generated intents. Think of all the different ways that a user could request to make a specific intent happen. A few examples are provided. Be sure to click **Save Model** and **Build Model** after you're done making changes here. - -9. If your interaction model builds successfully, proceed to the next step. If not, you should see an error. -Try to resolve the errors. In our next step of this guide, we will be creating our code. - - - If you get an error from your interaction model, check through this list: - - * **Did you copy & paste the provided code correctly?** - * **Did you accidentally add any characters to the Interaction Model or Sample Utterances?** - - -#### NEXT: Review and Deploy the Alexa-Hosted Code -[![Next](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/buttons/next._TTH_.png)](./create-alexa-hosted-function.md) - diff --git a/instructions/setup-vui-aws-hosted.md b/instructions/setup-vui-aws-hosted.md deleted file mode 100644 index 666a3c05..00000000 --- a/instructions/setup-vui-aws-hosted.md +++ /dev/null @@ -1,35 +0,0 @@ -# Build An Alexa Fact Skill using AWS - - - -1. **Go to the [Amazon Developer Portal](http://developer.amazon.com/alexa?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). In the top-right corner of the screen, click the "Sign In" button.** -(If you don't already have an account, you will be able to create a new one for free.) - -2. Once you have signed in, move your mouse over the **Your Alexa Consoles** text at the top of the screen and Select the **Skills** Link. - -3. From the **Alexa Skills Console** select the **Create Skill** button near the top-right of the list of your Alexa Skills. - -4. Give your new skill a **Name**. This is the name that will be shown in the Alexa Skills Store, and the name your users will refer to. Also change the locale if so desired. - -5. Select the **Custom** model button to add it to your skill, and select the **Create Skill** button at the top right. - -6. **Build the Interaction Model for your skill** - 1. On the left hand navigation panel, select the **JSON Editor** tab under **Interaction Model**. In the textfield provided, replace any existing code with the code provided in the [Interaction Model](../models) (make sure to pick the model that matches your skill's language). Click **Save Model**. - 2. If you want to change the skill invocation name, select the **Invocation** tab. Enter a **Skill Invocation Name**. This is the name that your users will need to say to start your skill. - 3. Click "Build Model". - - **Note:** You should notice that **Intents** and **Slot Types** will auto populate based on the JSON Interaction Model that you have now applied to your skill. Feel free to explore the changes here, to learn about **Intents**, **Slots**, and **Utterances** open our [technical documentation in a new tab](https://developer.amazon.com/docs/custom-skills/create-intents-utterances-and-slots.html?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). - -7. **Optional:** Select an intent by expanding the **Intents** from the left side navigation panel. Add some more sample utterances for your newly generated intents. Think of all the different ways that a user could request to make a specific intent happen. A few examples are provided. Be sure to click **Save Model** and **Build Model** after you're done making changes here. - -8. If your interaction model builds successfully, proceed to the next step. If not, you should see an error. Try to resolve the errors. -In our next step of this guide, we will be creating our Lambda function in the AWS developer console, but keep this browser tab open, because we will be returning here again. - - - If you get an error from your interaction model, check through this list: - - * **Did you copy & paste the provided code correctly?** - * **Did you accidentally add any characters to the Interaction Model or Sample Utterances?** - -[![Next](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/buttons/button_next_lambda_function._TTH_.png)](./create-aws-hosted-function.md) - diff --git a/instructions/submit-for-certification.md b/instructions/submit-for-certification.md deleted file mode 100644 index 0b67d87e..00000000 --- a/instructions/submit-for-certification.md +++ /dev/null @@ -1,114 +0,0 @@ -# Build An Alexa Fact Skill - - - -## Get Your Skill Certified and Published - -We are almost done! The last step is to add the metadata that your skill will use in the [Skill Store](http://amazon.com/skills). This page will walk you through the remaining steps to launch your skill! - -1. Select the **Distribution** link from the top navigation menu. - -2. Fill out the form fields per the guidance on the screen. Hover over the question mark icons for details regarding each respective field. **Fields marked with an Asterisk, are required!** - * Take the time to get these right so that your skill will pass certification! - -3. **Write your skill descriptions.** - - * **Spend some time coming up with an enticing, succinct description.** This is one of the few places you have an opportunity to attract new users, so make the most of it! These descriptions show up in the list of skills available in the [Alexa app](http://alexa.amazon.com/spa/index.html#skills) and the [skills store](http://www.amazon.com/skills). - -4. For your example phrases, **come up with the three most exciting ways** a user can talk to your skill. - - * Make sure that each of your example phrases are a **perfect match with one of your Sample Utterances.** Incorrect example phrases are one of the most common reasons that skills fail certification, so we have provided a short list of things to consider as you write your example phrases: - - | Common Failure Points for Example Phrases | - | ----------------------------------------- | - | Example phrases **must** adhere to the [supported phrases](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/supported-phrases-to-begin-a-conversation?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). | - | Example phrases **must** be based on sample utterances specified in your Intent Schema. | - | Your first example phrase **must** include a wake word and your invocation name. | - | Example phrases **must** provide a contextual response. | - - * **Choose three example phrases that are likely to be the most common ways that users will attempt to interact with your skill.** Make sure that each of them works well, and provides an excellent user experience. - -5. **Create your skill's icons.** You need two sizes of your icon: 108x108px and 512x512px. When you upload an image, it will be automatically fit to the required dimensions. - - * **Make sure you have the rights to the icons you create.** Please don't violate any trademarks or copyrights. - * **If you don't have software to make icons, try one of these free options:** - - * [Alexa Skill Icon Builder](https://developer.amazon.com/docs/tools/icon-builder.html) (a link to this is included in the console) - - * [GIMP](https://www.gimp.org/) (Windows/Mac/Linux) - * [Canva](https://www.canva.com/) (Web) - * [Paint.NET](http://www.getpaint.net/index.html) (Windows) - * [Inkscape](http://inkscape.org) (Windows/Mac/Linux) - * [Iconion](http://iconion.com/) (Windows/Mac) - - * To make it easier to get started, we've created blank versions of these icons in both sizes for many formats: - - * [PSD](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/psd._TTH_.zip) - * [PNG](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/png._TTH_.zip) - * [GIF](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/gif._TTH_.zip) - * [PDF](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/pdf._TTH_.zip) - * [JPG](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/jpg._TTH_.zip) - * [SVG](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/svg._TTH_.zip) - * [PDN](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/pdn._TTH_.zip) - for [Paint.NET](http://www.getpaint.net/index.html) - * [XCF](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/xcf._TTH_.zip) - for [GIMP](https://www.gimp.org/) - -6. Choose the most appropriate category for your skill. - -7. **Provide a comprehensive list of keywords for users that are searching for new skills.** This is an optional field, and searching the [Alexa app](http://alexa.amazon.com) or the [skill store](http://www.amazon.com/skills) will also find the words in your Skill Name and descriptions, so you don't need to overdo it. That being said, if there are words that you want users to find your skill with, you should include them here. Separate the keywords with commas. - -8. **Privacy Policy URL.** This is an optional field, and should not be required for this fact skill sample. You can leave it blank. - -9. **Terms of Use URL.** This is also optional, and you can leave it blank. - -10. When you're ready, click **Save and Continue** at the bottom of the screen to move onto **Privacy & Compliance** - -11. * **Does this skill allow users to make purchases or spend real money?** For this fact skill, the answer is no. For future skills, make sure you answer this appropriately. - - * **Does this Alexa skill collect users' personal information?** Again, for this fact skill, the answer is no. If you do collect information about a user, such as names, email addresses, phone numbers, and so forth, ensure that you answer Yes to this question. - * Answering "yes" to this question will also require you to provide a link to your Privacy Policy on the previous page. - - * **Is your skill directed to children under the age of 13?** Because you customized this skill with data you provided, it is possible that you created a skill that targets children under the age of 13. For this fact skill, the answer is **no** because it doesn't target a specific age group. - * Factors to consider in determining if this skill is directed to children under 13 include: - * Subject matter of the skill - * Presence of child-oriented activities and incentives - * Type of language used in the skill - * Music and other audio content in the skill - * How the skill is described and marketed - * Intended audience for the skill - - If you're not sure, please see the [FTC's COPPA Guidance and FAQ](https://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions) for more information. - -12. **Export Compliance.** Be certain that you agree with all of the conditions. If you do, make sure to check this box, as Amazon requires this permission to distribute your skill around the globe. - -13. **Provide testing instructions.** Testing instructions give you an opportunity to explain your skill, and any special or possibly confusing features, to the certification team. A value is required in this box. - - * Since you are using our Sample, make sure to add a sentence to your Testing Instructions referencing the Sample you used. For example: - - ```text - This was built using the Fact Sample. - ``` - - This will let the testing team understand what you're providing them, and should decrease the testing time required. - - **Note:** More details on certification are [available here.](https://alexa.design/certification) - -1. Click the **Save and Continue** button at the bottom of the page to move on to **Availability**. - * You'll want to allow the Public to access the skill unless you are using [Alexa for Business](https://aws.amazon.com/a4b). - * Beta testing is a good idea for every skill, however since this is from a template and is very basic, we'll skip that for now. When you make your next skill, don't skip this step. Seriously. You won't regret it. - * It is recommended to allow your skill to be available in all countries and regions where Amazon distributes skills, unless you are using facts which aren't applicable to a given area. Reasons to restrict distribution include not having intellectual property rights to distribute to that area and the content being illegal, offensive or otherwise prohibited in that area. - -1. If you feel that your skill is ready for certification, click the **Save and Continue** button at the bottom of the page and you'll be taken to the certification tab. - -1. The **Validation** page will tell you if you have missed any steps along the way which will prevent your skill from being submitted. You shouldn't see anything on this page, but if you do, go back and fix the issues. - -1. Click on the **Functional test** section and click the **Run** button to run functional tests against your skill. You shouldn't see any errors on this page, but if you do, go back and fix the issues. - -1. Click on **Submission**, and the click **Submit for Review**. - -15. **You're done with your submission!** Here are a few things you might need to know: - - * **Certification can take several days to complete.** Please be patient. It takes time because we want to get it right. - - * **Did something go wrong?** Our team of evangelists run [online office hours every Tuesday from 1-2pm Pacific Time](https://alexa.design/officehours). They can help answer any questions you might have. - - * **Want the coolest t-shirt you've ever seen?** Every month, we create a brand-new Alexa Developer t-shirt or hoodie, and send them out to developers that published a skill that month. [You can get yours here if you live in the US](https://developer.amazon.com/alexa-skills-kit/alexa-developer-skill-promotion?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs), [here for the UK](https://developer.amazon.com/en-gb/alexa-skills-kit/alexa-developer-skill-promotion?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs), [here for Germany](https://developer.amazon.com/de-de/alexa-skills-kit/alexa-developer-skill-promotion?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs), [here for India](https://developer.amazon.com/alexa-skills-kit/alexa-developer-skill-promotion-india?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs), [here for Japan](https://developer.amazon.com/ja/alexa-skills-kit/alexa-developer-skill-promotion?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs), [here for France](https://developer.amazon.com/fr/alexa-skills-kit/alexa-developer-skill-promotion?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs), and [here for Australia](https://developer.amazon.com/alexa-skills-kit/anz/alexa-developer-skill-promotion). diff --git a/instructions/test-using-simulator.md b/instructions/test-using-simulator.md deleted file mode 100644 index fd647417..00000000 --- a/instructions/test-using-simulator.md +++ /dev/null @@ -1,76 +0,0 @@ -# Build An Alexa Fact Skill - - - - -## Testing Your Alexa Skill - -So far, we have created a Voice User Interface, and deployed code to a backend service linked to the skill. Your skill is now ready to test. - -1. If you are not continuing immediately from the previous step, **go back to the [Amazon Developer Portal](https://developer.amazon.com/alexa/console/ask?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=fact-nodejs-V2_GUI-4&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_fact-nodejs-V2_GUI-4_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) and select your skill from the list.** - -2. Access the **Alexa Simulator**, by selecting the **Test** tab from the top navigation menu. Your browser may request permission to access your microphone. While it is recommended to do so, it is not required. Do note that if you don't allow access to the microphone, you must type your utterances to Alexa in the simulator. - -3. Notice the dropdown labeled "Skill testing is enabled in:", found just underneath the top navigation menu. -Toggle the dropdown from **Off** to **Development**. - -4. To validate that your skill is working as expected, invoke your skill from the **Alexa Simulator** just below. You can either type or click and hold the mic from the input box to use your voice. - 1. **Type** "Open" followed by the invocation name you gave your skill previously. For example, "Open space facts". - 2. **Use your voice** by clicking and holding the mic on the side panel and saying "Open" followed by the invocation name you gave your skill. - 3. **If you've forgotten the invocation name** for your skill, revisit the **Build** panel on the top navigation menu and select **Invocation** from the sidebar to review it. - -* *Tip: Always finish your test by saying "stop" to formally end your session.* - - -5. Ensure your skill works the way that you designed it to. - * After you interact with the Alexa Simulator, you should see the Skill I/O **JSON Input** and **JSON Output** boxes get populated with JSON data. You can also view the **Device Log** to trace your steps. - * If it's not working as expected, you can dig into the JSON to see exactly what Alexa is sending and receiving from the endpoint. If something is broken, you can find the error in AWS Cloudwatch. - - -6. Troubleshooting with CloudWatch log messages: You can add console.log() statements to your code, to track what is happening as your code executes, and help to figure out what is happening when something goes wrong. -You will find the log to be incredibly valuable as you move into more advanced skills. - - -[![Next](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/buttons/button_next_customization._TTH_.png)](./customize-skill-content.md) - ---- - -#### Optional: AWS-Hosted skill testing option -If you are not using Alexa-Hosted, but are hosting the code in your AWS account, you can run unit tests within the AWS Lambda console to help test and troubleshoot your code. - -1. **Configure a test event in AWS Lambda.** Now that you are familiar with the **request** and **response** boxes in the Service Simulator, it's important for you to know that you can use your **requests** to directly test your Lambda function every time you update it. To do this: - 1. Enter an utterance in the service simulator, and copy the generated Lambda Request (JSON Input) for the next step. - - 2. **Open your Lambda function in AWS, open the Actions menu, and select "Configure test events."**![Configure Test events drop down](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/4-5-2-configure-test-event._TTH_.png) - - 3. **Select "Create new test event". Choose "Amazon Alexa Start Session" as the Event Template from the dropdown list.** You can choose any test event in the list, as they are just templated event requests, but using "Amazon Alexa Start Session" is an easy one to remember. -![Alexa Start Session](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/4-5-3-alexa-start-session._TTH_.png) - - 4. Type in an Event Name into the **Event Name** field. Delete the contents of the code editor, and paste the Lambda request you copied above into the code editor. The Event Name is only visible to you. Name your test event something descriptive and memorable. For our example, we entered an event name as "startSession". Additionally, by copying and pasting your Lambda Request from the service simulator, you can test different utterances and skill events beyond the pre-populated templates in Lambda. - - 5. **Click the "Create" button.** This will save your test event and bring you back to the main configuration for your lambda function. - - 6. **Click the "Test" button to execute the "startSession" test event.** -![Test with event](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/4-5-5-save-and-test._TTH_.png) - - This gives you visibility into four things: - - * **Your response, listed in the "Execution Result."** -![execution result](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/fact/4-5-5-1-execution-result._TTH_.png) - - * **A Summary of the statistics for your request.** This includes things like duration, resources, and memory used. -![Summary](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/4-5-5-2-summary._TTH_.png) - - * **Log output.** By effectively using console.log() statements in your Lambda code, you can track what is happening inside your function, and help to figure out what is happening when something goes wrong. You will find the log to be incredibly valuable as you move into more advanced skills. -![CloudWatch Logs](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/4-5-5-3-log-output._TTH_.png) - - * **A link to your [CloudWatch](https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logs:) logs for this function.** This will show you **all** of the responses and log statements from every user interaction. This is very useful, especially when you are testing your skill from a device with your voice. (It is the "[Click here](https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logs:)" link in the Log Output description.) - -7. **Other testing methods to consider:** - - * [Echosim.io](https://echosim.io) - a browser-based Alexa skill testing tool that makes it easy to test your skills without carrying a physical device everywhere you go. - * [Unit Testing with Alexa](https://github.com/alexa/alexa-cookbook/tree/master/testing/postman/README.md) - a modern approach to unit testing your Alexa skills with [Postman](http://getpostman.com) and [Amazon API Gateway](http://aws.amazon.com/apigateway). - -8. **If your sample skill is working properly, you can now customize your skill.** - -[![Next](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/buttons/button_next_customization._TTH_.png)](./customize-skill-content.md) From 98e922bb722f88322ad68f1c11792ff061ac7c29 Mon Sep 17 00:00:00 2001 From: chihying7509 Date: Tue, 24 Dec 2019 15:01:09 -0800 Subject: [PATCH 3/6] upgraded Nodejs skill templates from v8 to v10 --- ask-resources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ask-resources.json b/ask-resources.json index b40df967..e6754062 100644 --- a/ask-resources.json +++ b/ask-resources.json @@ -23,7 +23,7 @@ }, "skillInfrastructure": { "userConfig": { - "runtime": "nodejs8.10", + "runtime": "nodejs10.x", "handler": "index.handler" } } From caca728d80c5b706d367868f93106cdf5487311c Mon Sep 17 00:00:00 2001 From: "Nong (Ron) Wang" Date: Fri, 27 Mar 2020 13:18:52 -0700 Subject: [PATCH 4/6] ask-cli-x branch update (#135) * change the "code" folder name to "lambda" and remove states from ask-resources.json * Fix the resources config to use lambda instead of code --- .ask/config | 8 -------- ask-resources.json | 17 ++++++----------- {code => lambda}/index.js | 0 {code => lambda}/package.json | 0 4 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 .ask/config rename {code => lambda}/index.js (100%) rename {code => lambda}/package.json (100%) diff --git a/.ask/config b/.ask/config deleted file mode 100644 index 37d8c7ad..00000000 --- a/.ask/config +++ /dev/null @@ -1,8 +0,0 @@ -{ - "deploy_settings": { - "default": { - "skill_id": "", - "merge": {} - } - } - } \ No newline at end of file diff --git a/ask-resources.json b/ask-resources.json index e6754062..db35dc1d 100644 --- a/ask-resources.json +++ b/ask-resources.json @@ -1,24 +1,19 @@ { - "askcliResourcesVersion": "2019-08-23", + "askcliResourcesVersion": "2020-03-31", "profiles": { "default": { - "skillId": "", "skillMetadata": { - "src": "./skill-package", - "lastDeployHash": "" + "src": "./skill-package" }, "code": { "default": { - "src": "./code", - "lastDeployHash": "" + "src": "./lambda" }, "EU": { - "src": "./code", - "lastDeployHash": "" + "src": "./lambda" }, "FE": { - "src": "./code", - "lastDeployHash": "" + "src": "./lambda" } }, "skillInfrastructure": { @@ -30,4 +25,4 @@ } } } - \ No newline at end of file + diff --git a/code/index.js b/lambda/index.js similarity index 100% rename from code/index.js rename to lambda/index.js diff --git a/code/package.json b/lambda/package.json similarity index 100% rename from code/package.json rename to lambda/package.json From 076364f816681e6da8b53b7cf38a54cd90d9470e Mon Sep 17 00:00:00 2001 From: "Nong (Ron) Wang" Date: Fri, 23 Jul 2021 14:46:00 -0700 Subject: [PATCH 5/6] Bump the runtime version to nodejs12.x Node.js 10 has been declared end of life as of April 30, 2021 and will no longer be supported by AWS on July 30, 2021. This change updates the default Node.js runtime to version 12.x. --- ask-resources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ask-resources.json b/ask-resources.json index db35dc1d..d8e9ed63 100644 --- a/ask-resources.json +++ b/ask-resources.json @@ -18,7 +18,7 @@ }, "skillInfrastructure": { "userConfig": { - "runtime": "nodejs10.x", + "runtime": "nodejs12.x", "handler": "index.handler" } } From b960c929494330ddf913d12c6850399066aa3e8b Mon Sep 17 00:00:00 2001 From: aszk <114033493+aszk@users.noreply.github.com> Date: Mon, 20 Mar 2023 11:36:40 -0700 Subject: [PATCH 6/6] Update runtime from 12.x to 16.x Update runtime from 12.x to 16.x --- ask-resources.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ask-resources.json b/ask-resources.json index d8e9ed63..621d49a0 100644 --- a/ask-resources.json +++ b/ask-resources.json @@ -18,7 +18,7 @@ }, "skillInfrastructure": { "userConfig": { - "runtime": "nodejs12.x", + "runtime": "nodejs16.x", "handler": "index.handler" } }