├── .ask
└── config
├── .github
└── PULL_REQUEST_TEMPLATE.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── hooks
├── post_new_hook.ps1
├── post_new_hook.sh
├── pre_deploy_hook.ps1
└── pre_deploy_hook.sh
├── instructions
├── cli.md
├── create-alexa-hosted-function.md
├── create-aws-hosted-function.md
├── customize-skill-content.md
├── setup-vui-alexa-hosted.md
├── setup-vui-aws-hosted.md
├── submit-for-certification.md
└── test-using-simulator.md
├── lambda
└── custom
│ ├── index.js
│ ├── package.json
│ └── recipes.js
├── models
├── de-DE.json
├── en-GB.json
└── en-US.json
└── skill.json
/.ask/config:
--------------------------------------------------------------------------------
1 | {
2 | "deploy_settings": {
3 | "default": {
4 | "skill_id": "",
5 | "was_cloned": false,
6 | "merge": {}
7 | }
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | *Issue #, if available:*
2 |
3 | *Description of changes:*
4 |
5 |
6 | By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
7 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | ## Code of Conduct
2 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
3 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
4 | opensource-codeofconduct@amazon.com with any additional questions or comments.
5 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing Guidelines
2 |
3 | Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional
4 | documentation, we greatly value feedback and contributions from our community.
5 |
6 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary
7 | information to effectively respond to your bug report or contribution.
8 |
9 |
10 | ## Reporting Bugs/Feature Requests
11 |
12 | We welcome you to use the GitHub issue tracker to report bugs or suggest features.
13 |
14 | When filing an issue, please check [existing open](https://github.com/alexa/skill-sample-nodejs-quiz-game/issues), or [recently closed](https://github.com/alexa/skill-sample-nodejs-quiz-game/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), issues to make sure somebody else hasn't already
15 | reported the issue. Please try to include as much information as you can. Details like these are incredibly useful:
16 |
17 | * A reproducible test case or series of steps
18 | * The version of our code being used
19 | * Any modifications you've made relevant to the bug
20 | * Anything unusual about your environment or deployment
21 |
22 |
23 | ## Contributing via Pull Requests
24 | Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that:
25 |
26 | 1. You are working against the latest source on the *master* branch.
27 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already.
28 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted.
29 |
30 | To send us a pull request, please:
31 |
32 | 1. Fork the repository.
33 | 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change.
34 | 3. Ensure local tests pass.
35 | 4. Commit to your fork using clear commit messages.
36 | 5. Send us a pull request, answering any default questions in the pull request interface.
37 | 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation.
38 |
39 | GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and
40 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/).
41 |
42 |
43 | ## Finding contributions to work on
44 | Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels ((enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any ['help wanted'](https://github.com/alexa/skill-sample-nodejs-quiz-game/labels/help%20wanted) issues is a great place to start.
45 |
46 |
47 | ## Code of Conduct
48 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct).
49 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact
50 | opensource-codeofconduct@amazon.com with any additional questions or comments.
51 |
52 |
53 | ## Security issue notifications
54 | If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue.
55 |
56 |
57 | ## Licensing
58 |
59 | See the [LICENSE](https://github.com/alexa/skill-sample-nodejs-quiz-game/blob/master/LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution.
60 |
61 | We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes.
62 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 | This tutorial will walk first-time Alexa skills developers through all the required steps involved in creating a skill using a template called ‘Minecraft Helper’. Ask how to craft an item in the game Minecraft, and this skill will give you instructions.
5 |
6 | ## Skill Architecture
7 | Each skill consists of two basic parts, a front end and a back end.
8 | The front end is the voice interface, or VUI.
9 | The voice interface is configured through the voice interaction model.
10 | The back end is where the logic of your skill resides.
11 |
12 | ## Three Options for Skill Setup
13 | There are a number of different ways for you to setup your skill, depending on your experience and what tools you have available.
14 |
15 | * If this is your first skill, choose the [Alexa-Hosted backend instructions](./instructions/setup-vui-alexa-hosted.md) to get started quickly.
16 | * 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).
17 | * Developers with the ASK Command Line Interface configured may follow the [ASK CLI instructions](./instructions/cli.md).
18 |
19 | ---
20 |
21 | ## Additional Resources
22 |
23 | ### Community
24 | * [Amazon Developer Forums](https://forums.developer.amazon.com/spaces/165/index.html) - Join the conversation!
25 | * [Hackster.io](https://www.hackster.io/amazon-alexa) - See what others are building with Alexa.
26 |
27 | ### Tutorials & Guides
28 | * [Voice Design Guide](https://developer.amazon.com/designing-for-voice/) - A great resource for learning conversational and voice user interface design.
29 | * [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!
30 |
31 | ### Documentation
32 | * [Alexa Skills Kit SDK for Node.js](https://alexa.design/node-sdk-docs)
33 | * [Alexa Skills Kit Documentation](https://developer.amazon.com/docs/ask-overviews/build-skills-with-the-alexa-skills-kit.html)
34 |
35 |
--------------------------------------------------------------------------------
/hooks/post_new_hook.ps1:
--------------------------------------------------------------------------------
1 | # Powershell script for ask-cli post-new hook for Node.js
2 | # Script Usage: post_new_hook.ps1
3 |
4 | # SKILL_NAME is the preformatted name passed from the CLI, after removing special characters.
5 | # DO_DEBUG is boolean value for debug logging
6 |
7 | # Run this script one level outside of the skill root folder
8 |
9 | # The script does the following:
10 | # - Run "npm install" in each sourceDir in skill.json
11 |
12 | param(
13 | [string] $SKILL_NAME,
14 | [bool] $DO_DEBUG = $False
15 | )
16 |
17 | if ($DO_DEBUG) {
18 | Write-Output "###########################"
19 | Write-Output "###### post-new hook ######"
20 | Write-Output "###########################"
21 | }
22 |
23 | function install_dependencies ($CWD, $SOURCE_DIR) {
24 | $INSTALL_PATH = $SKILL_NAME + "\" +$SOURCE_DIR
25 | Set-Location $INSTALL_PATH
26 | Invoke-Expression "npm install" 2>&1 | Out-Null
27 | $EXEC_RESULT = $?
28 | Set-Location $CWD
29 | return $EXEC_RESULT
30 | }
31 |
32 | $SKILL_FILE_PATH = $SKILL_NAME + "\skill.json"
33 | $ALL_SOURCE_DIRS = Get-Content -Path $SKILL_FILE_PATH | select-string -Pattern "sourceDir" -CaseSensitive
34 | Foreach ($SOURCE_DIR in $ALL_SOURCE_DIRS) {
35 | $FILTER_SOURCE_DIR = $SOURCE_DIR -replace "`"", "" -replace "\s", "" -replace ",","" -replace "sourceDir:", ""
36 | $CWD = (Get-Location).Path
37 | if (install_dependencies $CWD $FILTER_SOURCE_DIR) {
38 | if ($DO_DEBUG) {
39 | Write-Output "Codebase ($FILTER_SOURCE_DIR) built successfully."
40 | }
41 | } else {
42 | if ($DO_DEBUG) {
43 | Write-Output "There was a problem installing dependencies for ($FILTER_SOURCE_DIR)."
44 | }
45 | exit 1
46 | }
47 | }
48 |
49 | if ($DO_DEBUG) {
50 | Write-Output "###########################"
51 | }
52 |
53 | exit 0
54 |
--------------------------------------------------------------------------------
/hooks/post_new_hook.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Shell script for ask-cli post-new hook for Node.js
3 | # Script Usage: post_new_hook.sh
4 |
5 | # SKILL_NAME is the preformatted name passed from the CLI, after removing special characters.
6 | # DO_DEBUG is boolean value for debug logging
7 |
8 | # Run this script one level outside of the skill root folder
9 |
10 | # The script does the following:
11 | # - Run "npm install" in each sourceDir in skill.json
12 |
13 | SKILL_NAME=$1
14 | DO_DEBUG=${2:-false}
15 |
16 | if [ $DO_DEBUG == false ]
17 | then
18 | exec > /dev/null 2>&1
19 | fi
20 |
21 | install_dependencies() {
22 | npm install --prefix "$SKILL_NAME/$1" >/dev/null 2>&1
23 | return $?
24 | }
25 |
26 | echo "###########################"
27 | echo "###### post-new hook ######"
28 | echo "###########################"
29 |
30 | grep "sourceDir" $SKILL_NAME/skill.json | cut -d: -f2 | sed 's/"//g' | sed 's/,//g' | while read -r SOURCE_DIR; do
31 | if install_dependencies $SOURCE_DIR; then
32 | echo "Codebase ($SOURCE_DIR) built successfully."
33 | else
34 | echo "There was a problem installing dependencies for ($SOURCE_DIR)."
35 | exit 1
36 | fi
37 | done
38 | echo "###########################"
39 |
40 | exit 0
41 |
42 |
--------------------------------------------------------------------------------
/hooks/pre_deploy_hook.ps1:
--------------------------------------------------------------------------------
1 | # Powershell script for ask-cli pre-deploy hook for Node.js
2 | # Script Usage: pre_deploy_hook.ps1
3 |
4 | # SKILL_NAME is the preformatted name passed from the CLI, after removing special characters.
5 | # DO_DEBUG is boolean value for debug logging
6 | # TARGET is the deploy TARGET provided to the CLI. (eg: all, skill, lambda etc.)
7 |
8 | # Run this script under the skill root folder
9 |
10 | # The script does the following:
11 | # - Run "npm install" in each sourceDir in skill.json
12 |
13 | param(
14 | [string] $SKILL_NAME,
15 | [bool] $DO_DEBUG = $False,
16 | [string] $TARGET = "all"
17 | )
18 |
19 | function install_dependencies ($CWD, $SOURCE_DIR) {
20 | Set-Location $SOURCE_DIR
21 | Invoke-Expression "npm install" 2>&1 | Out-Null
22 | $EXEC_RESULT = $?
23 | Set-Location $CWD
24 | return $EXEC_RESULT
25 | }
26 |
27 | if ($DO_DEBUG) {
28 | Write-Output "###########################"
29 | Write-Output "##### pre-deploy hook #####"
30 | Write-Output "###########################"
31 | }
32 |
33 | if ($TARGET -eq "all" -Or $TARGET -eq "lambda") {
34 | $ALL_SOURCE_DIRS = Get-Content -Path "skill.json" | select-string -Pattern "sourceDir" -CaseSensitive
35 | Foreach ($SOURCE_DIR in $ALL_SOURCE_DIRS) {
36 | $FILTER_SOURCE_DIR = $SOURCE_DIR -replace "`"", "" -replace "\s", "" -replace ",","" -replace "sourceDir:", ""
37 | $CWD = (Get-Location).Path
38 | if (install_dependencies $CWD $FILTER_SOURCE_DIR) {
39 | if ($DO_DEBUG) {
40 | Write-Output "Codebase ($FILTER_SOURCE_DIR) built successfully."
41 | }
42 | } else {
43 | if ($DO_DEBUG) {
44 | Write-Output "There was a problem installing dependencies for ($FILTER_SOURCE_DIR)."
45 | }
46 | exit 1
47 | }
48 | }
49 | if ($DO_DEBUG) {
50 | Write-Output "###########################"
51 | }
52 | }
53 |
54 | exit 0
--------------------------------------------------------------------------------
/hooks/pre_deploy_hook.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Shell script for ask-cli pre-deploy hook for Node.js
3 | # Script Usage: pre_deploy_hook.sh
4 |
5 | # SKILL_NAME is the preformatted name passed from the CLI, after removing special characters.
6 | # DO_DEBUG is boolean value for debug logging
7 | # TARGET is the deploy TARGET provided to the CLI. (eg: all, skill, lambda etc.)
8 |
9 | # Run this script under skill root folder
10 |
11 | # The script does the following:
12 | # - Run "npm install" in each sourceDir in skill.json
13 |
14 | SKILL_NAME=$1
15 | DO_DEBUG=${2:-false}
16 | TARGET=${3:-"all"}
17 |
18 | if [ $DO_DEBUG == false ]
19 | then
20 | exec > /dev/null 2>&1
21 | fi
22 |
23 | install_dependencies() {
24 | npm install --prefix "$1" >/dev/null 2>&1
25 | return $?
26 | }
27 |
28 | echo "###########################"
29 | echo "##### pre-deploy hook #####"
30 | echo "###########################"
31 |
32 | if [[ $TARGET == "all" || $TARGET == "lambda" ]]; then
33 | grep "sourceDir" ./skill.json | cut -d: -f2 | sed 's/"//g' | sed 's/,//g' | while read -r SOURCE_DIR; do
34 | if install_dependencies $SOURCE_DIR; then
35 | echo "Codebase ($SOURCE_DIR) built successfully."
36 | else
37 | echo "There was a problem installing dependencies for ($SOURCE_DIR)."
38 | exit 1
39 | fi
40 | done
41 | echo "###########################"
42 | fi
43 |
44 | exit 0
45 |
--------------------------------------------------------------------------------
/instructions/cli.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 | ## Setup w/ ASK CLI
5 |
6 | ### About
7 | 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=howto-nodejs-V2_CLI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Content_howto-nodejs-V2_CLI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). If not, [click here](./setup-vui-alexa-hosted.md) for a more detailed walkthrough.
8 |
9 | ### Pre-requisites
10 |
11 | * Node.js (> v8)
12 | * Register for an [AWS Account](https://aws.amazon.com/)
13 | * 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=howto-nodejs-V2_CLI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Content_howto-nodejs-V2_CLI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs)
14 | * 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=howto-nodejs-V2_CLI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Content_howto-nodejs-V2_CLI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs)
15 |
16 | ### Installation
17 | 1. **Make sure** you are running the latest version of the CLI
18 |
19 | ```bash
20 | npm update -g ask-cli
21 | ```
22 |
23 | 2. **Clone** the repository.
24 |
25 | ```bash
26 | ask new --url https://github.com/alexa/skill-sample-nodejs-howto.git --skill-name how-to
27 | ```
28 |
29 | ### Deployment
30 |
31 | 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.
32 |
33 | 1. Navigate to the project's root directory. you should see a file named 'skill.json' there.
34 | 2. Deploy the skill and the lambda function in one step by running the following command:
35 |
36 | ```bash
37 | ask deploy
38 | ```
39 |
40 | ### Testing
41 |
42 | 1. To test, you need to login to Alexa Developer Console, and **enable the "Test" switch on your skill from the "Test" Tab**.
43 |
44 | 2. Simulate verbal interaction with your skill through the command line (this might take a few moments) using the following example:
45 |
46 | ```bash
47 | ask simulate -l en-GB -t "start minecraft helper"
48 |
49 | ✓ Simulation created for simulation id: 4a7a9ed8-94b2-40c0-b3bd-fb63d9887fa7
50 | ◡ Waiting for simulation response{
51 | "status": "SUCCESSFUL",
52 | ...
53 | ```
54 |
55 | 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 :
56 |
57 | ```text
58 | Alexa, start minecraft helper
59 | ```
60 | ## Customization
61 |
62 | 1. ```./skill.json```
63 |
64 | Change the skill name, example phrase, icons, testing instructions etc ...
65 |
66 | Remember than many information are locale-specific and must be changed for each locale (en-GB and en-US)
67 |
68 | 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=howto-nodejs-V2_CLI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_CLI-3_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) for more information.
69 |
70 | 2. ```./lambda/custom/index.js```
71 |
72 | Modify messages, and data from the source code to customize the skill.
73 |
74 | 3. ```./models/*.json```
75 |
76 | 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.
77 |
78 | 4. Remember to re-deploy your skill and lambda function for your changes to take effect.
79 |
--------------------------------------------------------------------------------
/instructions/create-alexa-hosted-function.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 | ### Deploying Skill Code
5 |
6 | In the [first step of this guide](./setup-vui-alexa-hosted.md), we built the Voice User Interface (VUI) for our Alexa skill.
7 | On this page, we will be exploring the Alexa-Hosted code editor, and deploying our code to enable testing.
8 |
9 | * *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.*
10 |
11 | 1. Within your skill, click to the Code tab at the top of the page.
12 | 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.
13 | There is also a file called **package.json**. We will be updating both these files next.
14 |
15 | 1. Click into the index.js file, Select-All the code, and delete it.
16 |
17 | 1. Click back to the browser tab with the Github project, locate and open the file [/lambda/custom/index.js](../lambda/custom/index.js).
18 |
19 | 1. 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.
20 |
21 | 1. 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.
22 |
23 | 1. Repeat these steps for the **recipes.js** file: Copy the contents of [/lambda/custom/recipes.js](../lambda/custom/recipes.js), and paste them over the recipes.js file in your skill.
24 |
25 | 1. 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.
26 |
27 | 1. At the bottom left corner of the page, notice the link to **Logs: Amazon CloudWatch**. CloudWatch is the logging service.
28 |
29 | [](./test-using-simulator.md)
30 |
31 |
--------------------------------------------------------------------------------
/instructions/create-aws-hosted-function.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 | ## Setting Up A Lambda Function Using Amazon Web Services
5 |
6 | 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.
7 |
8 | 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).
9 |
10 | [](https://console.aws.amazon.com/console/home)
11 |
12 | 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.
13 |
14 | [](https://console.aws.amazon.com/lambda/home)
15 |
16 | 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.
17 |
18 | 
19 |
20 | 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.)
21 |
22 | 
23 |
24 | 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 a repository as a shortcut to getting everything set up for your skill.
25 |
26 | 6. **Search for the application repository named "alexa-skills-kit-nodejs-howtoskill".** You can find it using the provided search box.
27 |
28 | 7. **Click on the repository.** This repository will create the Lambda function, add Alexa Skills Kit as its trigger, and sets up an IAM role for you. It will also add the code from this GitHub repo and include it's dependencies to your Lambda function so that you don't have to upload it yourself.
29 |
30 | 8. **Click the deploy button** at the bottom of the page.
31 |
32 | 9. Wait for the status of all resources to change to **CREATE_COMPLETE**
33 |
34 | 10. Click the **Test App** button to go to the Lambda console.
35 |
36 | 11. **Open** the function that was **just created** by clicking on it.
37 |
38 | 12. If you want to **secure this Lambda function** follow the instructions found [here](https://alexa.design/secure-lambda-function)
39 |
40 | 13. You should see the Amazon Resource Name (ARN) a unique identifier for this function in the top right corner of the page. **Copy the ARN value for this Lambda function** for use in the next section of the guide.
41 |
42 | 
43 |
44 | ## Connecting Your Voice User Interface To Your Lambda Function
45 |
46 | Now that we have created both the voice user interface for the intents and utterances we expect from our users plus the
47 | Lambda function that contains all of our logic for the skill, we need to connect those them together.
48 |
49 | 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=howto-nodejs-V2_GUI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-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.
50 |
51 | 2. While on the **Build** tab, select the **Endpoint** tab on the left side navigation panel.
52 |
53 | 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=howto-nodejs-V2_GUI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-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=howto-nodejs-V2_GUI-3&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_GUI-3_Convert_WW_beginnersdevs&sc_segment=beginnersdevs).
54 |
55 | 4. Paste your Lambda's ARN (Amazon Resource Name) into the textbox provided for **Default Region**.
56 |
57 | 5. Click the **Save Endpoints** button at the top of the main panel.
58 |
59 | [](./test-using-simulator.md)
60 |
--------------------------------------------------------------------------------
/instructions/customize-skill-content.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 | ## Customize the Skill to be Yours
5 |
6 | At this point, you should have a working copy of our How To 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:
7 |
8 | 1. **New data.** You will need to provide a set of recipes for your topic. We recommend a minimum of 25, but a total closer to 100 offers a better experience.
9 |
10 | 1. **Open a copy of recipes.js.** If you haven't already downloaded the code for this project, you can find a copy of recipes.js [here](../lambda/custom/recipes.js). You can use a simple, lightweight code editor like [Atom](http://atom.io), [Sublime Text](http://sublimetext.com), or [VSCode](http://code.visualstudio.com), but you also have the option to edit the code directly in your Alexa-hosted or AWS-hosted Lambda function.
11 |
12 | 1. **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 list of recipes in name-value pairs.
13 |
14 | 1. **When you have replaced the data in recipes.js, copy the contents of your file to your Lambda function.** This should be as done in the same way as when you first created the skill (if you're not editing directly).
15 |
16 | 1. Open https://developer.amazon.com/alexa/console/ask and select your skill. If you already have it open in the developer console, navigate to the Build tab. Click on the LIST_OF_ITEMS slot type in the left navigation. Update the slot values with the names of each recipe in your recipes.js file. If you have many updates, consider using the **Bulk Edit** feature to edit the list in the browser, using the **Export** option if you want to edit using your favorite spreadsheet editor (you would import after making changes using the **Bulk Edit** feature), or modifying the original **en-US.json** file in a code/text editor and pasting it into the **JSON Editor** section.
17 |
18 | 1. After making changes to the interaction model, be sure to save and build your model.
19 |
20 | 2. **New sentences to respond to your users.** There are several sentences and responses that you will want to customize for your skill.
21 |
22 | 1. **Open a copy of index.js.** If you haven't already downloaded the code for this project, you can find a copy of index.js [here](../lambda/custom/index.js). You can use a simple, lightweight code editor like [Atom](http://atom.io), [Sublime Text](http://sublimetext.com), or [VSCode](http://code.visualstudio.com), but you also have the option to edit the code directly in your Alexa-hosted or AWS-hosted Lambda function.
23 |
24 | 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.
25 |
26 | 3. **Continue through index.js until you reach the bottom of the file.** This will ensure that you cover each of the values that you need to update.
27 |
28 | 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.
29 |
30 | * 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.
31 |
32 | 4. **Once you have made the updates listed on this page, you can click "Next" to move on to Publishing and Certification of your skill.**
33 |
34 | [](./submit-for-certification.md)
35 |
--------------------------------------------------------------------------------
/instructions/setup-vui-alexa-hosted.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 |
5 | 1. **Go to the [Amazon Developer Portal](http://developer.amazon.com?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=howto-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). In the top-right corner of the screen, click the "Sign In" button.**
6 | (If you don't already have an account, you will be able to create a new one for free.)
7 |
8 | 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 (New)** Link.
9 |
10 | 3. From the **Alexa Skills Console (New Console)** select the **Create Skill** button near the top of the screen.
11 |
12 | 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. Push Next.
13 |
14 | 5. Keep the default **Custom** model selected, and scroll the page down.
15 |
16 | 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.
17 | It will take a minute to create your Alexa hosted skill, then you will be taken to the Build tab of the console.
18 |
19 | 7. **Build the Interaction Model for your skill**
20 | 1. On the left hand navigation panel. Select the **Invocation** tab. Enter a **Skill Invocation Name**. This is the name that your users will need to say to start your skill.
21 | 2. Next, select the **JSON Editor** tab. 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), then click "Build Model".
22 |
23 | **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=howto-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs).
24 |
25 | 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.
26 |
27 | 9. If your interaction model builds successfully, proceed to the next step. If not, you should see an error.
28 | Try to resolve the errors. In our next step of this guide, we will be creating our code.
29 |
30 | If you get an error from your interaction model, check through this list:
31 |
32 | * **Did you copy & paste the provided code correctly?**
33 | * **Did you accidentally add any characters to the Interaction Model or Sample Utterances?**
34 |
35 |
36 | #### NEXT: Review and Deploy the Alexa-Hosted Code
37 | [](./create-alexa-hosted-function.md)
38 |
39 |
--------------------------------------------------------------------------------
/instructions/setup-vui-aws-hosted.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 |
5 | 1. **Go to the [Amazon Developer Portal](http://developer.amazon.com?&sc_category=Owned&sc_channel=RD&sc_campaign=Evangelism2018&sc_publisher=github&sc_content=Survey&sc_detail=howto-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). In the top-right corner of the screen, click the "Sign In" button.**
6 | (If you don't already have an account, you will be able to create a new one for free.)
7 |
8 | 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 (New)** Link.
9 |
10 | 3. From the **Alexa Skills Console (New Console)** select the **Create Skill** button near the top of the screen.
11 |
12 | 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. Push Next.
13 |
14 | 5. Select the **Custom** model at the top of the page to add to your skill and select the **Create Skill** button at the top right.
15 |
16 | 6. **Build the Interaction Model for your skill**
17 | 1. On the left hand navigation panel. Select the **Invocation** tab. Enter a **Skill Invocation Name**. This is the name that your users will need to say to start your skill.
18 | 2. Next, select the **JSON Editor** tab. 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), then click "Build Model".
19 |
20 | **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=howto-nodejs-V2_GUI-1&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_GUI-1_Convert_WW_beginnersdevs&sc_segment=beginnersdevs).
21 |
22 | 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.
23 |
24 | 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.
25 |
26 | If you get an error from your interaction model, check through this list:
27 |
28 | * **Did you copy & paste the provided code correctly?**
29 | * **Did you accidentally add any characters to the Interaction Model or Sample Utterances?**
30 |
31 | [](./create-aws-hosted-function.md)
32 |
33 |
--------------------------------------------------------------------------------
/instructions/submit-for-certification.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 | ## Get Your Skill Certified and Published
5 |
6 | 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!
7 |
8 | 1. Select the **Distribution** link from the top navigation menu.
9 |
10 | 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!**
11 | * Take the time to get these right so that your skill will pass certification!
12 |
13 | 3. **Write your skill descriptions.**
14 |
15 | * **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).
16 |
17 | 4. For your example phrases, **come up with the three most exciting ways** a user can talk to your skill.
18 |
19 | * 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:
20 |
21 | | Common Failure Points for Example Phrases |
22 | | ----------------------------------------- |
23 | | 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=howto-nodejs-V2_GUI-6&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_GUI-6_Convert_WW_beginnersdevs&sc_segment=beginnersdevs). |
24 | | Example phrases **must** be based on sample utterances specified in your Intent Schema. |
25 | | Your first example phrase **must** include a wake word and your invocation name. |
26 | | Example phrases **must** provide a contextual response. |
27 |
28 | * **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.
29 |
30 | 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.
31 |
32 | * **Make sure you have the rights to the icons you create.** Please don't violate any trademarks or copyrights.
33 | * **If you don't have software to make icons, try one of these free options:**
34 |
35 | * [Alexa Skill Icon Builder](https://developer.amazon.com/docs/tools/icon-builder.html) (a link to this is included in the console)
36 |
37 | * [GIMP](https://www.gimp.org/) (Windows/Mac/Linux)
38 | * [Canva](https://www.canva.com/) (Web)
39 | * [Paint.NET](http://www.getpaint.net/index.html) (Windows)
40 | * [Inkscape](http://inkscape.org) (Windows/Mac/Linux)
41 | * [Iconion](http://iconion.com/) (Windows/Mac)
42 |
43 | * To make it easier to get started, we've created blank versions of these icons in both sizes for many formats:
44 |
45 | * [PSD](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/psd._TTH_.zip)
46 | * [PNG](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/png._TTH_.zip)
47 | * [GIF](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/gif._TTH_.zip)
48 | * [PDF](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/pdf._TTH_.zip)
49 | * [JPG](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/jpg._TTH_.zip)
50 | * [SVG](https://m.media-amazon.com/images/G/01/mobile-apps/dex/alexa/alexa-skills-kit/tutorials/general/icon-templates/svg._TTH_.zip)
51 | * [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)
52 | * [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/)
53 |
54 | 6. Choose the most appropriate category for your skill.
55 |
56 | 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.
57 |
58 | 8. **Privacy Policy URL.** This is an optional field, and should not be required for this fact skill sample. You can leave it blank.
59 |
60 | 9. **Terms of Use URL.** This is also optional, and you can leave it blank.
61 |
62 | 10. When you're ready, click **Save and Continue** at the bottom of the screen to move onto **Privacy & Compliance**
63 |
64 | 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.
65 |
66 | * **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.
67 | * Answering "yes" to this question will also require you to provide a link to your Privacy Policy on the previous page.
68 |
69 | * **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.
70 | * Factors to consider in determining if this skill is directed to children under 13 include:
71 | * Subject matter of the skill
72 | * Presence of child-oriented activities and incentives
73 | * Type of language used in the skill
74 | * Music and other audio content in the skill
75 | * How the skill is described and marketed
76 | * Intended audience for the skill
77 |
78 | 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.
79 |
80 | 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.
81 |
82 | 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.
83 |
84 | * Since you are using our Sample, make sure to add a sentence to your Testing Instructions referencing the Sample you used. For example:
85 |
86 | ```text
87 | This was built using the how to sample.
88 | ```
89 |
90 | This will let the testing team understand what you're providing them, and should decrease the testing time required.
91 |
92 | **Note:** More details on certification are [available here](https://alexa.design/certification).
93 |
94 | 1. Click the **Save and Continue** button at the bottom of the page to move on to **Availability**.
95 | * You'll want to allow the Public to access the skill unless you are using [Alexa for Business](https://aws.amazon.com/a4b).
96 | * 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.
97 | * 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.
98 |
99 | 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.
100 |
101 | 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.
102 |
103 | 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.
104 |
105 | 1. Click on **Submission**, and the click **Submit for Review**.
106 |
107 | 15. **You're done with your submission!** Here are a few things you might need to know:
108 |
109 | * **Certification can take several days to complete.** Please be patient. It takes time because we want to get it right.
110 |
111 | * **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.
112 |
113 | * **Want to earn developer perks?** Check out current opportunities to earn perks for building skills: https://developer.amazon.com/alexa-skills-kit/alexa-developer-skill-promotion
114 |
115 | If you’re not in the US, please check out our other promotions in the [UK](https://developer.amazon.com/en-gb/alexa-skills-kit/alexa-developer-skill-promotion), [Germany](https://developer.amazon.com/de/alexa-skills-kit/alexa-developer-skill-promotion), [Japan](https://developer.amazon.com/ja/alexa-skills-kit/alexa-developer-skill-promotion), [France](https://developer.amazon.com/fr/alexa-skills-kit/alexa-developer-skills-promotion), [Australia](https://developer.amazon.com/alexa-skills-kit/anz/alexa-developer-skill-promotion), [Italy](https://developer.amazon.com/it/alexa-skills-kit/alexa-developer-skill-promotion), [Spain](https://developer.amazon.com/es/alexa-skills-kit/alexa-developer-skill-promotion), [Mexico](https://developer.amazon.com/es-mx/alexa-skills-kit/alexa-developer-skill-promotion), [Canada](https://developer.amazon.com/alexa-skills-kit/alexa-developer-skill-promotion-canada), and [India](https://developer.amazon.com/alexa-skills-kit/alexa-developer-skill-promotion-india) to see if your country of residence is included.
116 |
117 |
--------------------------------------------------------------------------------
/instructions/test-using-simulator.md:
--------------------------------------------------------------------------------
1 | # Build An Alexa How-To Skill
2 |
3 |
4 | ## Testing Your Alexa Skill
5 |
6 | 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.
7 |
8 | 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=howto-nodejs-V2_GUI-4&sc_funnel=Convert&sc_country=WW&sc_medium=Owned_RD_Evangelism2018_github_Survey_howto-nodejs-V2_GUI-4_Convert_WW_beginnersdevs&sc_segment=beginnersdevs) and select your skill from the list.**
9 |
10 | 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.
11 |
12 | 3. Notice the dropdown labeled "Skill testing is enabled in:", found just underneath the top navigation menu.
13 | Toggle the dropdown from **Off** to **Development**.
14 |
15 | 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.
16 | 1. **Type** "Open" followed by the invocation name you gave your skill in step 1. For example, "Open minecraft helper".
17 | 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.
18 | 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.
19 |
20 | * *Tip: Always finish your test by saying "stop" to formally end your session.*
21 |
22 |
23 | 5. Ensure your skill works the way that you designed it to.
24 | * 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.
25 | * 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.
26 |
27 |
28 | 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.
29 | You will find the log to be incredibly valuable as you move into more advanced skills.
30 |
31 |
32 | [](./customize-skill-content.md)
33 |
34 | ---
35 |
36 | #### Optional: AWS-Hosted skill testing option
37 | 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.
38 |
39 | 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:
40 | 1. Enter an utterance in the service simulator, and copy the generated Lambda Request (JSON Input) for the next step.
41 |
42 | 2. **Open your Lambda function in AWS, open the Actions menu, and select "Configure test events."**
43 |
44 | 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.
45 | 
46 |
47 | 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.
48 |
49 | 5. **Click the "Create" button.** This will save your test event and bring you back to the main configuration for your lambda function.
50 |
51 | 6. **Click the "Test" button to execute the "startSession" test event.**
52 | 
53 |
54 | This gives you visibility into four things:
55 |
56 | * **Your response, listed in the "Execution Result."**
57 | 
58 |
59 | * **A Summary of the statistics for your request.** This includes things like duration, resources, and memory used.
60 | 
61 |
62 | * **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.
63 | 
64 |
65 | * **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.)
66 |
67 | 7. **Other testing methods to consider:**
68 |
69 | * [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.
70 | * [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).
71 |
72 | 8. **If your sample skill is working properly, you can now customize your skill.**
73 |
74 |
--------------------------------------------------------------------------------
/lambda/custom/index.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable func-names */
2 | /* eslint-disable no-console */
3 |
4 | const Alexa = require('ask-sdk-core');
5 | const recipes = require('./recipes');
6 | const i18n = require('i18next');
7 | const sprintf = require('i18next-sprintf-postprocessor');
8 |
9 | /* INTENT HANDLERS */
10 | const LaunchRequestHandler = {
11 | canHandle(handlerInput) {
12 | return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
13 | },
14 | handle(handlerInput) {
15 | const requestAttributes = handlerInput.attributesManager.getRequestAttributes();
16 | const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
17 |
18 | const item = requestAttributes.t(getRandomItem(Object.keys(recipes.RECIPE_EN_US)));
19 |
20 | const speakOutput = requestAttributes.t('WELCOME_MESSAGE', requestAttributes.t('SKILL_NAME'), item);
21 | const repromptOutput = requestAttributes.t('WELCOME_REPROMPT');
22 |
23 | handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
24 |
25 | return handlerInput.responseBuilder
26 | .speak(speakOutput)
27 | .reprompt(repromptOutput)
28 | .getResponse();
29 | },
30 | };
31 |
32 | const RecipeHandler = {
33 | canHandle(handlerInput) {
34 | return handlerInput.requestEnvelope.request.type === 'IntentRequest'
35 | && handlerInput.requestEnvelope.request.intent.name === 'RecipeIntent';
36 | },
37 | handle(handlerInput) {
38 | const requestAttributes = handlerInput.attributesManager.getRequestAttributes();
39 | const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
40 |
41 | const itemSlot = handlerInput.requestEnvelope.request.intent.slots.Item;
42 | let itemName;
43 | if (itemSlot && itemSlot.value) {
44 | itemName = itemSlot.value.toLowerCase();
45 | }
46 |
47 | const cardTitle = requestAttributes.t('DISPLAY_CARD_TITLE', requestAttributes.t('SKILL_NAME'), itemName);
48 | const myRecipes = requestAttributes.t('RECIPES');
49 | const recipe = myRecipes[itemName];
50 | let speakOutput = '';
51 |
52 | if (recipe) {
53 | sessionAttributes.speakOutput = recipe;
54 | // uncomment the _2_ reprompt lines if you want to repeat the info
55 | // and prompt for a subsequent action
56 | // sessionAttributes.repromptSpeech = requestAttributes.t('RECIPE_REPEAT_MESSAGE');
57 | handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
58 |
59 | return handlerInput.responseBuilder
60 | .speak(sessionAttributes.speakOutput)
61 | // .reprompt(sessionAttributes.repromptSpeech)
62 | .withSimpleCard(cardTitle, recipe)
63 | .getResponse();
64 | }
65 | const repromptSpeech = requestAttributes.t('RECIPE_NOT_FOUND_REPROMPT');
66 | if (itemName) {
67 | speakOutput += requestAttributes.t('RECIPE_NOT_FOUND_WITH_ITEM_NAME', itemName);
68 | } else {
69 | speakOutput += requestAttributes.t('RECIPE_NOT_FOUND_WITHOUT_ITEM_NAME');
70 | }
71 | speakOutput += repromptSpeech;
72 |
73 | // save outputs to attributes, so we can use it to repeat
74 | sessionAttributes.speakOutput = speakOutput;
75 | sessionAttributes.repromptSpeech = repromptSpeech;
76 |
77 | handlerInput.attributesManager.setSessionAttributes(sessionAttributes);
78 |
79 | return handlerInput.responseBuilder
80 | .speak(sessionAttributes.speakOutput)
81 | .reprompt(sessionAttributes.repromptSpeech)
82 | .getResponse();
83 | },
84 | };
85 |
86 | const HelpHandler = {
87 | canHandle(handlerInput) {
88 | return handlerInput.requestEnvelope.request.type === 'IntentRequest'
89 | && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.HelpIntent';
90 | },
91 | handle(handlerInput) {
92 | const requestAttributes = handlerInput.attributesManager.getRequestAttributes();
93 | const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
94 |
95 | const item = requestAttributes.t(getRandomItem(Object.keys(recipes.RECIPE_EN_US)));
96 |
97 | sessionAttributes.speakOutput = requestAttributes.t('HELP_MESSAGE', item);
98 | sessionAttributes.repromptSpeech = requestAttributes.t('HELP_REPROMPT', item);
99 |
100 | return handlerInput.responseBuilder
101 | .speak(sessionAttributes.speakOutput)
102 | .reprompt(sessionAttributes.repromptSpeech)
103 | .getResponse();
104 | },
105 | };
106 |
107 | const RepeatHandler = {
108 | canHandle(handlerInput) {
109 | return handlerInput.requestEnvelope.request.type === 'IntentRequest'
110 | && handlerInput.requestEnvelope.request.intent.name === 'AMAZON.RepeatIntent';
111 | },
112 | handle(handlerInput) {
113 | const sessionAttributes = handlerInput.attributesManager.getSessionAttributes();
114 |
115 | return handlerInput.responseBuilder
116 | .speak(sessionAttributes.speakOutput)
117 | .reprompt(sessionAttributes.repromptSpeech)
118 | .getResponse();
119 | },
120 | };
121 |
122 | const ExitHandler = {
123 | canHandle(handlerInput) {
124 | return handlerInput.requestEnvelope.request.type === 'IntentRequest'
125 | && (handlerInput.requestEnvelope.request.intent.name === 'AMAZON.StopIntent'
126 | || handlerInput.requestEnvelope.request.intent.name === 'AMAZON.CancelIntent');
127 | },
128 | handle(handlerInput) {
129 | const requestAttributes = handlerInput.attributesManager.getRequestAttributes();
130 | const speakOutput = requestAttributes.t('STOP_MESSAGE', requestAttributes.t('SKILL_NAME'));
131 |
132 | return handlerInput.responseBuilder
133 | .speak(speakOutput)
134 | .getResponse();
135 | },
136 | };
137 |
138 | const SessionEndedRequestHandler = {
139 | canHandle(handlerInput) {
140 | console.log('Inside SessionEndedRequestHandler');
141 | return handlerInput.requestEnvelope.request.type === 'SessionEndedRequest';
142 | },
143 | handle(handlerInput) {
144 | console.log(`Session ended with reason: ${JSON.stringify(handlerInput.requestEnvelope)}`);
145 | return handlerInput.responseBuilder.getResponse();
146 | },
147 | };
148 |
149 | const ErrorHandler = {
150 | canHandle() {
151 | return true;
152 | },
153 | handle(handlerInput, error) {
154 | console.log(`Error handled: ${error.message}`);
155 |
156 | return handlerInput.responseBuilder
157 | .speak('Sorry, I can\'t understand the command. Please say again.')
158 | .reprompt('Sorry, I can\'t understand the command. Please say again.')
159 | .getResponse();
160 | },
161 | };
162 |
163 | /* Helper Functions */
164 |
165 | // Finding the locale of the user
166 | const LocalizationInterceptor = {
167 | process(handlerInput) {
168 | const localizationClient = i18n.use(sprintf).init({
169 | lng: handlerInput.requestEnvelope.request.locale,
170 | overloadTranslationOptionHandler: sprintf.overloadTranslationOptionHandler,
171 | resources: languageStrings,
172 | returnObjects: true,
173 | });
174 |
175 | const attributes = handlerInput.attributesManager.getRequestAttributes();
176 | attributes.t = function (...args) {
177 | return localizationClient.t(...args);
178 | };
179 | },
180 | };
181 |
182 | // getRandomItem
183 | function getRandomItem(arrayOfItems) {
184 | // the argument is an array [] of words or phrases
185 | let i = 0;
186 | i = Math.floor(Math.random() * arrayOfItems.length);
187 | return (arrayOfItems[i]);
188 | }
189 |
190 | /* LAMBDA SETUP */
191 | const skillBuilder = Alexa.SkillBuilders.custom();
192 | exports.handler = skillBuilder
193 | .addRequestHandlers(
194 | LaunchRequestHandler,
195 | RecipeHandler,
196 | HelpHandler,
197 | RepeatHandler,
198 | ExitHandler,
199 | SessionEndedRequestHandler,
200 | )
201 | .addRequestInterceptors(LocalizationInterceptor)
202 | .addErrorHandlers(ErrorHandler)
203 | .lambda();
204 |
205 | // langauge strings for localization
206 | // TODO: The items below this comment need your attention
207 |
208 | const languageStrings = {
209 | 'en': {
210 | translation: {
211 | RECIPES: recipes.RECIPE_EN_US,
212 | SKILL_NAME: 'Minecraft Helper',
213 | WELCOME_MESSAGE: 'Welcome to %s. You can ask a question like, what\'s the recipe for a %s? ... Now, what can I help you with?',
214 | WELCOME_REPROMPT: 'For instructions on what you can say, please say help me.',
215 | DISPLAY_CARD_TITLE: '%s - Recipe for %s.',
216 | HELP_MESSAGE: 'You can ask questions such as, what\'s the recipe for a %s, or, you can say exit...Now, what can I help you with?',
217 | HELP_REPROMPT: 'You can say things like, what\'s the recipe for a %s, or you can say exit...Now, what can I help you with?',
218 | STOP_MESSAGE: 'Goodbye!',
219 | RECIPE_REPEAT_MESSAGE: 'Try saying repeat.',
220 | RECIPE_NOT_FOUND_WITH_ITEM_NAME: 'I\'m sorry, I currently do not know the recipe for %s. ',
221 | RECIPE_NOT_FOUND_WITHOUT_ITEM_NAME: 'I\'m sorry, I currently do not know that recipe. ',
222 | RECIPE_NOT_FOUND_REPROMPT: 'What else can I help with?',
223 | },
224 | },
225 | 'en-US': {
226 | translation: {
227 | RECIPES: recipes.RECIPE_EN_US,
228 | SKILL_NAME: 'American Minecraft Helper',
229 | },
230 | },
231 | 'en-GB': {
232 | translation: {
233 | RECIPES: recipes.RECIPE_EN_GB,
234 | SKILL_NAME: 'British Minecraft Helper',
235 | },
236 | },
237 | 'de': {
238 | translation: {
239 | RECIPES: recipes.RECIPE_DE_DE,
240 | SKILL_NAME: 'Assistent für Minecraft in Deutsch',
241 | WELCOME_MESSAGE: 'Willkommen bei %s. Du kannst beispielsweise die Frage stellen: Welche Rezepte gibt es für eine %s? ... Nun, womit kann ich dir helfen?',
242 | WELCOME_REPROMPT: 'Wenn du wissen möchtest, was du sagen kannst, sag einfach „Hilf mir“.',
243 | DISPLAY_CARD_TITLE: '%s - Rezept für %s.',
244 | HELP_MESSAGE: 'Du kannst beispielsweise Fragen stellen wie „Wie geht das Rezept für eine %s“ oder du kannst „Beenden“ sagen ... Wie kann ich dir helfen?',
245 | HELP_REPROMPT: 'Du kannst beispielsweise Sachen sagen wie „Wie geht das Rezept für eine %s“ oder du kannst „Beenden“ sagen ... Wie kann ich dir helfen?',
246 | STOP_MESSAGE: 'Auf Wiedersehen!',
247 | RECIPE_REPEAT_MESSAGE: 'Sage einfach „Wiederholen“.',
248 | RECIPE_NOT_FOUND_WITH_ITEM_NAME: 'Tut mir leid, ich kenne derzeit das Rezept für %s nicht. ',
249 | RECIPE_NOT_FOUND_WITHOUT_ITEM_NAME: 'Tut mir leid, ich kenne derzeit dieses Rezept nicht. ',
250 | RECIPE_NOT_FOUND_REPROMPT: 'Womit kann ich dir sonst helfen?',
251 | },
252 | },
253 | };
254 |
--------------------------------------------------------------------------------
/lambda/custom/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "how-to",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "ask-sdk-core": "^2.0.0",
13 | "ask-sdk-model": "^1.0.0",
14 | "i18next": "^10.5.0",
15 | "i18next-sprintf-postprocessor": "^0.2.2"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/models/de-DE.json:
--------------------------------------------------------------------------------
1 | {
2 | "interactionModel": {
3 | "languageModel": {
4 | "invocationName": "assistent für minecraft",
5 | "intents": [
6 | {
7 | "name": "RecipeIntent",
8 | "slots": [
9 | {
10 | "name": "Item",
11 | "type": "LIST_OF_ITEMS"
12 | }
13 | ],
14 | "samples": [
15 | "wie kann ich ein {Item} bauen",
16 | "wie kann ich eine {Item} bauen",
17 | "wie kann ich einen {Item} bauen",
18 | "wie kann ich {Item} bauen",
19 | "wie kann ich ein {Item} craften",
20 | "wie kann ich eine {Item} craften",
21 | "wie kann ich einen {Item} craften",
22 | "wie kann ich {Item} craften",
23 | "wie kann ich ein {Item} bekommen",
24 | "wie kann ich eine {Item} bekommen",
25 | "wie kann ich einen {Item} bekommen",
26 | "wie kann ich {Item} bekommen",
27 | "wie kann ich ein {Item} machen",
28 | "wie kann ich eine {Item} machen",
29 | "wie kann ich einen {Item} machen",
30 | "wie kann ich {Item} machen",
31 | "wie kannst du ein {Item} bauen",
32 | "wie kannst du eine {Item} bauen",
33 | "wie kannst du einen {Item} bauen",
34 | "wie kannst du {Item} bauen",
35 | "wie kannst du ein {Item} craften",
36 | "wie kannst du eine {Item} craften",
37 | "wie kannst du einen {Item} craften",
38 | "wie kannst du {Item} craften",
39 | "wie kannst du ein {Item} bekommen",
40 | "wie kannst du eine {Item} bekommen",
41 | "wie kannst du einen {Item} bekommen",
42 | "wie kannst du {Item} bekommen",
43 | "wie kannst du ein {Item} machen",
44 | "wie kannst du eine {Item} machen",
45 | "wie kannst du einen {Item} machen",
46 | "wie kannst du {Item} machen",
47 | "wie baue ich ein {Item}",
48 | "wie baue ich eine {Item}",
49 | "wie baue ich einen {Item}",
50 | "wie baue ich {Item}",
51 | "wie crafte ich ein {Item}",
52 | "wie crafte ich eine {Item}",
53 | "wie crafte ich einen {Item}",
54 | "wie crafte ich {Item}",
55 | "wie bekomme ich ein {Item}",
56 | "wie bekomme ich eine {Item}",
57 | "wie bekomme ich einen {Item}",
58 | "wie bekomme ich {Item}",
59 | "wie mache ich ein {Item}",
60 | "wie mache ich eine {Item}",
61 | "wie mache ich einen {Item}",
62 | "wie mache ich {Item}",
63 | "wie baust du ein {Item}",
64 | "wie baust du eine {Item}",
65 | "wie baust du einen {Item}",
66 | "wie baust du {Item}",
67 | "wie craftest du ein {Item}",
68 | "wie craftest du eine {Item}",
69 | "wie craftest du einen {Item}",
70 | "wie craftest du {Item}",
71 | "wie bekommst du ein {Item}",
72 | "wie bekommst du eine {Item}",
73 | "wie bekommst du einen {Item}",
74 | "wie bekommst du {Item}",
75 | "wie machst du ein {Item}",
76 | "wie machst du eine {Item}",
77 | "wie machst du einen {Item}",
78 | "wie machst du {Item}",
79 | "wie wird ein {Item} gebaut",
80 | "wie wird eine {Item} gebaut",
81 | "wie wird ein {Item} gecraftet",
82 | "wie wird eine {Item} gecraftet",
83 | "wie wird ein {Item} gemacht",
84 | "wie wird eine {Item} gemacht",
85 | "wie wird {Item} gebaut",
86 | "wie wird {Item} gecraftet",
87 | "wie wird {Item} gemacht",
88 | "Rezept für ein {Item}",
89 | "Rezept für eine {Item}",
90 | "Rezept für einen {Item}",
91 | "Rezept für {Item}",
92 | "Rezepte für ein {Item}",
93 | "Rezepte für eine {Item}",
94 | "Rezepte für einen {Item}",
95 | "Rezepte für {Item}",
96 | "was sind die Zutaten für ein {Item}",
97 | "was sind die Zutaten für eine {Item}",
98 | "was sind die Zutaten für einen {Item}",
99 | "was sind die Zutaten für {Item}",
100 | "was brauche ich für ein {Item}",
101 | "was brauche ich für eine {Item}",
102 | "was brauche ich für einen {Item}",
103 | "was brauche ich für {Item}",
104 | "was brauche ich zum Bau eines {Item}",
105 | "was brauche ich zum Bau einer {Item}",
106 | "was brauche ich zum Bau von {Item}",
107 | "was brauche ich zum Craften eines {Item}",
108 | "was brauche ich zum Craften einer {Item}",
109 | "was brauche ich zum Craften von {Item}",
110 | "was muss ich für ein {Item} bekommen",
111 | "was muss ich für eine {Item} bekommen",
112 | "was muss ich für einen {Item} bekommen",
113 | "was muss ich für {Item} bekommen",
114 | "was muss ich zum Bau eines {Item} besorgen",
115 | "was muss ich zum Bau einer {Item} besorgen",
116 | "was muss ich zum Bau von {Item} besorgen",
117 | "was muss ich zum Craften eines {Item} besorgen",
118 | "was muss ich zum Craften einer {Item} besorgen",
119 | "was muss ich zum Craften von {Item} besorgen",
120 | "was muss ich zum Herstellen eines {Item} besorgen",
121 | "was muss ich zum Herstellen einer {Item} besorgen",
122 | "was muss ich zum Herstellen von {Item} besorgen",
123 | "was muss ich zum Bau eines {Item} haben",
124 | "was muss ich zum Bau einer {Item} haben",
125 | "was muss ich zum Bau von {Item} haben",
126 | "was muss ich zum Craften eines {Item} haben",
127 | "was muss ich zum Craften einer {Item} haben",
128 | "was muss ich zum Craften von {Item} haben",
129 | "was muss ich zum Herstellen eines {Item} haben",
130 | "was muss ich zum Herstellen einer {Item} haben",
131 | "was muss ich zum Herstellen von {Item} haben",
132 | "was brauche ich zum Herstellen eines {Item}",
133 | "was brauche ich zum Herstellen einer {Item}",
134 | "was brauche ich zum Herstellen von {Item}",
135 | "was brauche ich für ein {Item}",
136 | "was brauche ich für eine {Item}",
137 | "was brauche ich für einen {Item}",
138 | "was brauche ich für {Item}",
139 | "welche Zutaten brauche ich zum Bau eines {Item}",
140 | "welche Zutaten brauche ich zum Bau einer {Item}",
141 | "welche Zutaten brauche ich zum Bau von {Item}",
142 | "welche Zutaten brauche ich zum Craften eines {Item}",
143 | "welche Zutaten brauche ich zum Craften einer {Item}",
144 | "welche Zutaten brauche ich zum Craften von {Item}",
145 | "welche Zutaten brauche ich zum Herstellen eines {Item}",
146 | "welche Zutaten brauche ich zum Herstellen einer {Item}",
147 | "welche Zutaten brauche ich zum Herstellen von {Item}",
148 | "was ist in einem {Item}",
149 | "was ist in einer {Item}",
150 | "was ist in {Item}",
151 | "was ist das Rezept für ein {Item}",
152 | "was ist das Rezept für eine {Item}",
153 | "was ist das Rezept für einen {Item}",
154 | "was ist das Rezept für {Item}",
155 | "was ist in {Item}",
156 | "was ist in einem {Item}",
157 | "was ist in einer {Item}",
158 | "was ist in {Item}",
159 | "welches Rezept für ein {Item}",
160 | "welches Rezept für eine {Item}",
161 | "welches Rezept für einen {Item}",
162 | "welches Rezept für {Item}",
163 | "wie soll {Item} gecraftet werden",
164 | "wie soll ein {Item} gecraftet werden",
165 | "wie soll eine {Item} gecraftet werden",
166 | "wie soll ein {Item} gemacht werden",
167 | "wie soll eine {Item} gemacht werden",
168 | "wie soll {Item} gemacht werden",
169 | "wie soll ein {Item} gebaut werden",
170 | "wie soll eine {Item} gebaut werden",
171 | "wie soll {Item} gebaut werden",
172 | "wie soll ein {Item} bezogen werden",
173 | "wie soll eine {Item} bezogen werden",
174 | "wie soll {Item} bezogen werden"
175 | ]
176 | },
177 | {
178 | "name": "AMAZON.RepeatIntent"
179 | },
180 | {
181 | "name": "AMAZON.HelpIntent"
182 | },
183 | {
184 | "name": "AMAZON.StopIntent"
185 | },
186 | {
187 | "name": "AMAZON.CancelIntent"
188 | }
189 | ],
190 | "types": [
191 | {
192 | "values": [
193 | {
194 | "name": {
195 | "value": "Schneegolem"
196 | }
197 | },
198 | {
199 | "name": {
200 | "value": "Quarzsäule"
201 | }
202 | },
203 | {
204 | "name": {
205 | "value": "Feuerwerksrakete"
206 | }
207 | },
208 | {
209 | "name": {
210 | "value": "Kaninchenragout"
211 | }
212 | },
213 | {
214 | "name": {
215 | "value": "Kessel"
216 | }
217 | },
218 | {
219 | "name": {
220 | "value": "Steinschaufel"
221 | }
222 | },
223 | {
224 | "name": {
225 | "value": "Roter Teppich"
226 | }
227 | },
228 | {
229 | "name": {
230 | "value": "Buch und Feder"
231 | }
232 | },
233 | {
234 | "name": {
235 | "value": "Rahmen"
236 | }
237 | },
238 | {
239 | "name": {
240 | "value": "Karte"
241 | }
242 | },
243 | {
244 | "name": {
245 | "value": "Klebriger Kolben"
246 | }
247 | },
248 | {
249 | "name": {
250 | "value": "Brot"
251 | }
252 | },
253 | {
254 | "name": {
255 | "value": "Holzspitzhacke"
256 | }
257 | },
258 | {
259 | "name": {
260 | "value": "Schere"
261 | }
262 | },
263 | {
264 | "name": {
265 | "value": "Rohes Rindfleisch"
266 | }
267 | },
268 | {
269 | "name": {
270 | "value": "Glatter roter Sandstein"
271 | }
272 | },
273 | {
274 | "name": {
275 | "value": "Prismarinkristalle"
276 | }
277 | },
278 | {
279 | "name": {
280 | "value": "Eichenholzstufe"
281 | }
282 | },
283 | {
284 | "name": {
285 | "value": "Holzschwert"
286 | }
287 | },
288 | {
289 | "name": {
290 | "value": "Treppe"
291 | }
292 | },
293 | {
294 | "name": {
295 | "value": "Tropenholzzaun"
296 | }
297 | },
298 | {
299 | "name": {
300 | "value": "Aktivierungsschiene"
301 | }
302 | },
303 | {
304 | "name": {
305 | "value": "Ackerboden"
306 | }
307 | },
308 | {
309 | "name": {
310 | "value": "Golderz"
311 | }
312 | },
313 | {
314 | "name": {
315 | "value": "Andesit"
316 | }
317 | },
318 | {
319 | "name": {
320 | "value": "Roter Farbstoff"
321 | }
322 | },
323 | {
324 | "name": {
325 | "value": "Eisenaxt"
326 | }
327 | },
328 | {
329 | "name": {
330 | "value": "Hellblauer Farbstoff"
331 | }
332 | },
333 | {
334 | "name": {
335 | "value": "Grauer Farbstoff"
336 | }
337 | },
338 | {
339 | "name": {
340 | "value": "Blau gefärbte Glasscheibe"
341 | }
342 | },
343 | {
344 | "name": {
345 | "value": "Eiserne Pferderüstung"
346 | }
347 | },
348 | {
349 | "name": {
350 | "value": "Rot gefärbte Glasscheibe"
351 | }
352 | },
353 | {
354 | "name": {
355 | "value": "Ziegeltreppe"
356 | }
357 | },
358 | {
359 | "name": {
360 | "value": "Goldene Hose"
361 | }
362 | },
363 | {
364 | "name": {
365 | "value": "Schwarzeichenzauntor"
366 | }
367 | },
368 | {
369 | "name": {
370 | "value": "Witherschädel"
371 | }
372 | },
373 | {
374 | "name": {
375 | "value": "Spinnenauge"
376 | }
377 | },
378 | {
379 | "name": {
380 | "value": "Magenta gefärbtes Glas"
381 | }
382 | },
383 | {
384 | "name": {
385 | "value": "Braun gefärbte Glasscheibe"
386 | }
387 | },
388 | {
389 | "name": {
390 | "value": "Kürbiskuchen"
391 | }
392 | },
393 | {
394 | "name": {
395 | "value": "Schneeball"
396 | }
397 | },
398 | {
399 | "name": {
400 | "value": "Jukebox"
401 | }
402 | },
403 | {
404 | "name": {
405 | "value": "Sand"
406 | }
407 | },
408 | {
409 | "name": {
410 | "value": "Toter Busch"
411 | }
412 | },
413 | {
414 | "name": {
415 | "value": "Ziegelstufe"
416 | }
417 | },
418 | {
419 | "name": {
420 | "value": "Seerosenblatt"
421 | }
422 | },
423 | {
424 | "name": {
425 | "value": "Lederhose"
426 | }
427 | },
428 | {
429 | "name": {
430 | "value": "Bemooste Bruchsteinmauer"
431 | }
432 | },
433 | {
434 | "name": {
435 | "value": "Schallplatte 11"
436 | }
437 | },
438 | {
439 | "name": {
440 | "value": "Violett gefärbte Glasscheibe"
441 | }
442 | },
443 | {
444 | "name": {
445 | "value": "Magenta gefärbte Glasscheibe"
446 | }
447 | },
448 | {
449 | "name": {
450 | "value": "Schallplatte Mall"
451 | }
452 | },
453 | {
454 | "name": {
455 | "value": "Tropenholz"
456 | }
457 | },
458 | {
459 | "name": {
460 | "value": "Diamantaxt"
461 | }
462 | },
463 | {
464 | "name": {
465 | "value": "Leere Karte"
466 | }
467 | },
468 | {
469 | "name": {
470 | "value": "Steindruckplatte"
471 | }
472 | },
473 | {
474 | "name": {
475 | "value": "Falltür"
476 | }
477 | },
478 | {
479 | "name": {
480 | "value": "Goldstiefel"
481 | }
482 | },
483 | {
484 | "name": {
485 | "value": "Schallplatte Stall"
486 | }
487 | },
488 | {
489 | "name": {
490 | "value": "Redstone-Kabel"
491 | }
492 | },
493 | {
494 | "name": {
495 | "value": "Kolben"
496 | }
497 | },
498 | {
499 | "name": {
500 | "value": "Weiß gefärbtes Glas"
501 | }
502 | },
503 | {
504 | "name": {
505 | "value": "Antriebslore"
506 | }
507 | },
508 | {
509 | "name": {
510 | "value": "Zucker"
511 | }
512 | },
513 | {
514 | "name": {
515 | "value": "Kettenhemd"
516 | }
517 | },
518 | {
519 | "name": {
520 | "value": "Feder"
521 | }
522 | },
523 | {
524 | "name": {
525 | "value": "Hellblau gefärbtes Glas"
526 | }
527 | },
528 | {
529 | "name": {
530 | "value": "Eichenholzzaun"
531 | }
532 | },
533 | {
534 | "name": {
535 | "value": "Steinspitzhacke"
536 | }
537 | },
538 | {
539 | "name": {
540 | "value": "Rosa Teppich"
541 | }
542 | },
543 | {
544 | "name": {
545 | "value": "Monsterspawner"
546 | }
547 | },
548 | {
549 | "name": {
550 | "value": "Goldene Karotte"
551 | }
552 | },
553 | {
554 | "name": {
555 | "value": "Stock"
556 | }
557 | },
558 | {
559 | "name": {
560 | "value": "Diamantblock"
561 | }
562 | },
563 | {
564 | "name": {
565 | "value": "Grün gefärbtes Glas"
566 | }
567 | },
568 | {
569 | "name": {
570 | "value": "Gebratenes Hühnchen"
571 | }
572 | },
573 | {
574 | "name": {
575 | "value": "Schallplatte 13"
576 | }
577 | },
578 | {
579 | "name": {
580 | "value": "Holzfalltür"
581 | }
582 | },
583 | {
584 | "name": {
585 | "value": "Eichenzauntor"
586 | }
587 | },
588 | {
589 | "name": {
590 | "value": "Werkbank"
591 | }
592 | },
593 | {
594 | "name": {
595 | "value": "Netherquarzerz"
596 | }
597 | },
598 | {
599 | "name": {
600 | "value": "Goldschwert"
601 | }
602 | },
603 | {
604 | "name": {
605 | "value": "Grau gefärbter Ton"
606 | }
607 | },
608 | {
609 | "name": {
610 | "value": "Hellblau gefärbter Ton"
611 | }
612 | },
613 | {
614 | "name": {
615 | "value": "Diamantstiefel"
616 | }
617 | },
618 | {
619 | "name": {
620 | "value": "Steinhacke"
621 | }
622 | },
623 | {
624 | "name": {
625 | "value": "Steinkohle"
626 | }
627 | },
628 | {
629 | "name": {
630 | "value": "Schwarzeichenlaub"
631 | }
632 | },
633 | {
634 | "name": {
635 | "value": "TNT"
636 | }
637 | },
638 | {
639 | "name": {
640 | "value": "Ziegel"
641 | }
642 | },
643 | {
644 | "name": {
645 | "value": "Kartoffel"
646 | }
647 | },
648 | {
649 | "name": {
650 | "value": "Oranger Teppich"
651 | }
652 | },
653 | {
654 | "name": {
655 | "value": "Tintenbeutel"
656 | }
657 | },
658 | {
659 | "name": {
660 | "value": "Redstone"
661 | }
662 | },
663 | {
664 | "name": {
665 | "value": "Schwarzeichenholz"
666 | }
667 | },
668 | {
669 | "name": {
670 | "value": "Diorit"
671 | }
672 | },
673 | {
674 | "name": {
675 | "value": "Grau gefärbtes Glas"
676 | }
677 | },
678 | {
679 | "name": {
680 | "value": "Tropenholzzauntor"
681 | }
682 | },
683 | {
684 | "name": {
685 | "value": "Magenta Wolle"
686 | }
687 | },
688 | {
689 | "name": {
690 | "value": "Erde"
691 | }
692 | },
693 | {
694 | "name": {
695 | "value": "Rüstungsständer"
696 | }
697 | },
698 | {
699 | "name": {
700 | "value": "Gebratener Fisch"
701 | }
702 | },
703 | {
704 | "name": {
705 | "value": "Hebel"
706 | }
707 | },
708 | {
709 | "name": {
710 | "value": "Leine"
711 | }
712 | },
713 | {
714 | "name": {
715 | "value": "Gebratenes Kaninchen"
716 | }
717 | },
718 | {
719 | "name": {
720 | "value": "Tropenholztreppe"
721 | }
722 | },
723 | {
724 | "name": {
725 | "value": "Trichterlore"
726 | }
727 | },
728 | {
729 | "name": {
730 | "value": "Fermentiertes Spinnenauge"
731 | }
732 | },
733 | {
734 | "name": {
735 | "value": "Roher Fisch"
736 | }
737 | },
738 | {
739 | "name": {
740 | "value": "Braun gefärbtes Glas"
741 | }
742 | },
743 | {
744 | "name": {
745 | "value": "Schild"
746 | }
747 | },
748 | {
749 | "name": {
750 | "value": "Trichter"
751 | }
752 | },
753 | {
754 | "name": {
755 | "value": "Lohenrute"
756 | }
757 | },
758 | {
759 | "name": {
760 | "value": "Redstone-Komparator"
761 | }
762 | },
763 | {
764 | "name": {
765 | "value": "Knochen"
766 | }
767 | },
768 | {
769 | "name": {
770 | "value": "Goldene Pferderüstung"
771 | }
772 | },
773 | {
774 | "name": {
775 | "value": "Goldbeinschutz"
776 | }
777 | },
778 | {
779 | "name": {
780 | "value": "Schiene"
781 | }
782 | },
783 | {
784 | "name": {
785 | "value": "Weizenkörner"
786 | }
787 | },
788 | {
789 | "name": {
790 | "value": "Birkenholzzaun"
791 | }
792 | },
793 | {
794 | "name": {
795 | "value": "Violett gefärbter Ton"
796 | }
797 | },
798 | {
799 | "name": {
800 | "value": "Goldharnisch:"
801 | }
802 | },
803 | {
804 | "name": {
805 | "value": "Lederstiefel"
806 | }
807 | },
808 | {
809 | "name": {
810 | "value": "Diamantschaufel"
811 | }
812 | },
813 | {
814 | "name": {
815 | "value": "Roter Sand"
816 | }
817 | },
818 | {
819 | "name": {
820 | "value": "Ranken"
821 | }
822 | },
823 | {
824 | "name": {
825 | "value": "Glasflasche"
826 | }
827 | },
828 | {
829 | "name": {
830 | "value": "Redstone-Erz"
831 | }
832 | },
833 | {
834 | "name": {
835 | "value": "Smaragdblock"
836 | }
837 | },
838 | {
839 | "name": {
840 | "value": "Granit"
841 | }
842 | },
843 | {
844 | "name": {
845 | "value": "Braune Wolle"
846 | }
847 | },
848 | {
849 | "name": {
850 | "value": "Goldener Apfel"
851 | }
852 | },
853 | {
854 | "name": {
855 | "value": "Birkenlaub"
856 | }
857 | },
858 | {
859 | "name": {
860 | "value": "Weiße Wolle"
861 | }
862 | },
863 | {
864 | "name": {
865 | "value": "Violetter Teppich"
866 | }
867 | },
868 | {
869 | "name": {
870 | "value": "Gebrannter Ton"
871 | }
872 | },
873 | {
874 | "name": {
875 | "value": "Zombieschädel"
876 | }
877 | },
878 | {
879 | "name": {
880 | "value": "Eisenfalltür"
881 | }
882 | },
883 | {
884 | "name": {
885 | "value": "Blumentopf"
886 | }
887 | },
888 | {
889 | "name": {
890 | "value": "Eisenerz"
891 | }
892 | },
893 | {
894 | "name": {
895 | "value": "Tropenholzstufe"
896 | }
897 | },
898 | {
899 | "name": {
900 | "value": "Birkenholzstufe"
901 | }
902 | },
903 | {
904 | "name": {
905 | "value": "Tropenholztür"
906 | }
907 | },
908 | {
909 | "name": {
910 | "value": "Goldaxt"
911 | }
912 | },
913 | {
914 | "name": {
915 | "value": "Packeis"
916 | }
917 | },
918 | {
919 | "name": {
920 | "value": "Hellblauer Teppich"
921 | }
922 | },
923 | {
924 | "name": {
925 | "value": "Spender"
926 | }
927 | },
928 | {
929 | "name": {
930 | "value": "Truhe"
931 | }
932 | },
933 | {
934 | "name": {
935 | "value": "Rohes Hühnchen"
936 | }
937 | },
938 | {
939 | "name": {
940 | "value": "Roher Lachs"
941 | }
942 | },
943 | {
944 | "name": {
945 | "value": "Haken"
946 | }
947 | },
948 | {
949 | "name": {
950 | "value": "Eichenholztreppe"
951 | }
952 | },
953 | {
954 | "name": {
955 | "value": "Befehlsblocklore"
956 | }
957 | },
958 | {
959 | "name": {
960 | "value": "Enderauge"
961 | }
962 | },
963 | {
964 | "name": {
965 | "value": "Kohleblock"
966 | }
967 | },
968 | {
969 | "name": {
970 | "value": "Netherstern"
971 | }
972 | },
973 | {
974 | "name": {
975 | "value": "Kies"
976 | }
977 | },
978 | {
979 | "name": {
980 | "value": "Blaue Wolle"
981 | }
982 | },
983 | {
984 | "name": {
985 | "value": "Netherquarz"
986 | }
987 | },
988 | {
989 | "name": {
990 | "value": "Verrottetes Fleisch"
991 | }
992 | },
993 | {
994 | "name": {
995 | "value": "Magenta Teppich"
996 | }
997 | },
998 | {
999 | "name": {
1000 | "value": "Weiß gefärbter Ton"
1001 | }
1002 | },
1003 | {
1004 | "name": {
1005 | "value": "Birkenholzzauntor"
1006 | }
1007 | },
1008 | {
1009 | "name": {
1010 | "value": "Karotten"
1011 | }
1012 | },
1013 | {
1014 | "name": {
1015 | "value": "Violetter Farbstoff"
1016 | }
1017 | },
1018 | {
1019 | "name": {
1020 | "value": "Lapislazuliblock"
1021 | }
1022 | },
1023 | {
1024 | "name": {
1025 | "value": "Obsidian"
1026 | }
1027 | },
1028 | {
1029 | "name": {
1030 | "value": "Schallplatte Mellohi"
1031 | }
1032 | },
1033 | {
1034 | "name": {
1035 | "value": "Graue Wolle"
1036 | }
1037 | },
1038 | {
1039 | "name": {
1040 | "value": "Redstonetruhe"
1041 | }
1042 | },
1043 | {
1044 | "name": {
1045 | "value": "Hellgrau gefärbte Glasscheibe"
1046 | }
1047 | },
1048 | {
1049 | "name": {
1050 | "value": "Eisenspitzhacke"
1051 | }
1052 | },
1053 | {
1054 | "name": {
1055 | "value": "Roter Pilz"
1056 | }
1057 | },
1058 | {
1059 | "name": {
1060 | "value": "Kugelfisch"
1061 | }
1062 | },
1063 | {
1064 | "name": {
1065 | "value": "Smaragd"
1066 | }
1067 | },
1068 | {
1069 | "name": {
1070 | "value": "Holzschaufel"
1071 | }
1072 | },
1073 | {
1074 | "name": {
1075 | "value": "Goldhelm"
1076 | }
1077 | },
1078 | {
1079 | "name": {
1080 | "value": "Melone"
1081 | }
1082 | },
1083 | {
1084 | "name": {
1085 | "value": "Tonblock"
1086 | }
1087 | },
1088 | {
1089 | "name": {
1090 | "value": "Amboss"
1091 | }
1092 | },
1093 | {
1094 | "name": {
1095 | "value": "Tageslichtsensor"
1096 | }
1097 | },
1098 | {
1099 | "name": {
1100 | "value": "Sandstein"
1101 | }
1102 | },
1103 | {
1104 | "name": {
1105 | "value": "Lederjacke"
1106 | }
1107 | },
1108 | {
1109 | "name": {
1110 | "value": "Schwarz gefärbtes Glas"
1111 | }
1112 | },
1113 | {
1114 | "name": {
1115 | "value": "Hellgrün gefärbter Ton"
1116 | }
1117 | },
1118 | {
1119 | "name": {
1120 | "value": "TNT-Lore"
1121 | }
1122 | },
1123 | {
1124 | "name": {
1125 | "value": "Uhr"
1126 | }
1127 | },
1128 | {
1129 | "name": {
1130 | "value": "Schwarzer Teppich"
1131 | }
1132 | },
1133 | {
1134 | "name": {
1135 | "value": "Kakao"
1136 | }
1137 | },
1138 | {
1139 | "name": {
1140 | "value": "Goldbarren"
1141 | }
1142 | },
1143 | {
1144 | "name": {
1145 | "value": "Steinziegelstufe"
1146 | }
1147 | },
1148 | {
1149 | "name": {
1150 | "value": "Clownfisch"
1151 | }
1152 | },
1153 | {
1154 | "name": {
1155 | "value": "Kürbiskerne"
1156 | }
1157 | },
1158 | {
1159 | "name": {
1160 | "value": "Bemooster Steinziegel"
1161 | }
1162 | },
1163 | {
1164 | "name": {
1165 | "value": "Spinnennetz"
1166 | }
1167 | },
1168 | {
1169 | "name": {
1170 | "value": "Milcheimer"
1171 | }
1172 | },
1173 | {
1174 | "name": {
1175 | "value": "Eisenhelm"
1176 | }
1177 | },
1178 | {
1179 | "name": {
1180 | "value": "Gelb gefärbter Ton"
1181 | }
1182 | },
1183 | {
1184 | "name": {
1185 | "value": "Hellgrau gefärbter Ton"
1186 | }
1187 | },
1188 | {
1189 | "name": {
1190 | "value": "Diamant"
1191 | }
1192 | },
1193 | {
1194 | "name": {
1195 | "value": "Steinschwert"
1196 | }
1197 | },
1198 | {
1199 | "name": {
1200 | "value": "Bruchsteintreppe"
1201 | }
1202 | },
1203 | {
1204 | "name": {
1205 | "value": "Bett"
1206 | }
1207 | },
1208 | {
1209 | "name": {
1210 | "value": "Birkenholz"
1211 | }
1212 | },
1213 | {
1214 | "name": {
1215 | "value": "Quarzstufe"
1216 | }
1217 | },
1218 | {
1219 | "name": {
1220 | "value": "Schwamm"
1221 | }
1222 | },
1223 | {
1224 | "name": {
1225 | "value": "Skelettschädel"
1226 | }
1227 | },
1228 | {
1229 | "name": {
1230 | "value": "Eimer"
1231 | }
1232 | },
1233 | {
1234 | "name": {
1235 | "value": "Diamantschwert"
1236 | }
1237 | },
1238 | {
1239 | "name": {
1240 | "value": "Goldschaufel"
1241 | }
1242 | },
1243 | {
1244 | "name": {
1245 | "value": "Fichtenholztreppe"
1246 | }
1247 | },
1248 | {
1249 | "name": {
1250 | "value": "Eisengitter"
1251 | }
1252 | },
1253 | {
1254 | "name": {
1255 | "value": "Rohes Kaninchen"
1256 | }
1257 | },
1258 | {
1259 | "name": {
1260 | "value": "Gelber Teppich"
1261 | }
1262 | },
1263 | {
1264 | "name": {
1265 | "value": "Karottenrute"
1266 | }
1267 | },
1268 | {
1269 | "name": {
1270 | "value": "Rohes Schweinefleisch"
1271 | }
1272 | },
1273 | {
1274 | "name": {
1275 | "value": "Ofen"
1276 | }
1277 | },
1278 | {
1279 | "name": {
1280 | "value": "Netherziegelzaun"
1281 | }
1282 | },
1283 | {
1284 | "name": {
1285 | "value": "Zaun"
1286 | }
1287 | },
1288 | {
1289 | "name": {
1290 | "value": "Diamantene Pferderüstung"
1291 | }
1292 | },
1293 | {
1294 | "name": {
1295 | "value": "Rote Sandsteinstufe"
1296 | }
1297 | },
1298 | {
1299 | "name": {
1300 | "value": "Birkenholzbrett"
1301 | }
1302 | },
1303 | {
1304 | "name": {
1305 | "value": "Grundgestein"
1306 | }
1307 | },
1308 | {
1309 | "name": {
1310 | "value": "Sattel"
1311 | }
1312 | },
1313 | {
1314 | "name": {
1315 | "value": "Hellgrauer Farbstoff"
1316 | }
1317 | },
1318 | {
1319 | "name": {
1320 | "value": "Tropenbaumlaub"
1321 | }
1322 | },
1323 | {
1324 | "name": {
1325 | "value": "Schallplatte Blocks"
1326 | }
1327 | },
1328 | {
1329 | "name": {
1330 | "value": "Kürbis"
1331 | }
1332 | },
1333 | {
1334 | "name": {
1335 | "value": "Ofenkartoffel"
1336 | }
1337 | },
1338 | {
1339 | "name": {
1340 | "value": "Leder"
1341 | }
1342 | },
1343 | {
1344 | "name": {
1345 | "value": "Hellgrauer Teppich"
1346 | }
1347 | },
1348 | {
1349 | "name": {
1350 | "value": "Eisenstiefel"
1351 | }
1352 | },
1353 | {
1354 | "name": {
1355 | "value": "Endstein"
1356 | }
1357 | },
1358 | {
1359 | "name": {
1360 | "value": "Kettenhose"
1361 | }
1362 | },
1363 | {
1364 | "name": {
1365 | "value": "Hasenpfote"
1366 | }
1367 | },
1368 | {
1369 | "name": {
1370 | "value": "Glas"
1371 | }
1372 | },
1373 | {
1374 | "name": {
1375 | "value": "Stein"
1376 | }
1377 | },
1378 | {
1379 | "name": {
1380 | "value": "Prismarin"
1381 | }
1382 | },
1383 | {
1384 | "name": {
1385 | "value": "Kompass"
1386 | }
1387 | },
1388 | {
1389 | "name": {
1390 | "value": "Grün gefärbte Glasscheibe"
1391 | }
1392 | },
1393 | {
1394 | "name": {
1395 | "value": "Goldhose"
1396 | }
1397 | },
1398 | {
1399 | "name": {
1400 | "value": "Befehlsblock"
1401 | }
1402 | },
1403 | {
1404 | "name": {
1405 | "value": "Werfer"
1406 | }
1407 | },
1408 | {
1409 | "name": {
1410 | "value": "Giftige Kartoffel"
1411 | }
1412 | },
1413 | {
1414 | "name": {
1415 | "value": "Apfel"
1416 | }
1417 | },
1418 | {
1419 | "name": {
1420 | "value": "Rote Blume"
1421 | }
1422 | },
1423 | {
1424 | "name": {
1425 | "value": "Magenta Farbstoff"
1426 | }
1427 | },
1428 | {
1429 | "name": {
1430 | "value": "Brauner Teppich"
1431 | }
1432 | },
1433 | {
1434 | "name": {
1435 | "value": "Prismarinscherbe"
1436 | }
1437 | },
1438 | {
1439 | "name": {
1440 | "value": "Redstone-Block"
1441 | }
1442 | },
1443 | {
1444 | "name": {
1445 | "value": "Gelb gefärbte Glasscheibe"
1446 | }
1447 | },
1448 | {
1449 | "name": {
1450 | "value": "Löwenzahngelb"
1451 | }
1452 | },
1453 | {
1454 | "name": {
1455 | "value": "Akazienholztreppe"
1456 | }
1457 | },
1458 | {
1459 | "name": {
1460 | "value": "Sandsteinstufe"
1461 | }
1462 | },
1463 | {
1464 | "name": {
1465 | "value": "Grauer Teppich"
1466 | }
1467 | },
1468 | {
1469 | "name": {
1470 | "value": "Polierter Granit"
1471 | }
1472 | },
1473 | {
1474 | "name": {
1475 | "value": "Lore"
1476 | }
1477 | },
1478 | {
1479 | "name": {
1480 | "value": "Braun gefärbter Ton"
1481 | }
1482 | },
1483 | {
1484 | "name": {
1485 | "value": "Türkis gefärbte Glasscheibe"
1486 | }
1487 | },
1488 | {
1489 | "name": {
1490 | "value": "Buch"
1491 | }
1492 | },
1493 | {
1494 | "name": {
1495 | "value": "Güterlore"
1496 | }
1497 | },
1498 | {
1499 | "name": {
1500 | "value": "Akaziensetzling"
1501 | }
1502 | },
1503 | {
1504 | "name": {
1505 | "value": "Papier"
1506 | }
1507 | },
1508 | {
1509 | "name": {
1510 | "value": "Goldharnisch"
1511 | }
1512 | },
1513 | {
1514 | "name": {
1515 | "value": "Türkis gefärbter Ton"
1516 | }
1517 | },
1518 | {
1519 | "name": {
1520 | "value": "Pilzsuppe"
1521 | }
1522 | },
1523 | {
1524 | "name": {
1525 | "value": "Netherziegel"
1526 | }
1527 | },
1528 | {
1529 | "name": {
1530 | "value": "Magmacreme"
1531 | }
1532 | },
1533 | {
1534 | "name": {
1535 | "value": "Schnee"
1536 | }
1537 | },
1538 | {
1539 | "name": {
1540 | "value": "Oranger Farbstoff"
1541 | }
1542 | },
1543 | {
1544 | "name": {
1545 | "value": "Trank"
1546 | }
1547 | },
1548 | {
1549 | "name": {
1550 | "value": "Hellgrün gefärbte Glasscheibe"
1551 | }
1552 | },
1553 | {
1554 | "name": {
1555 | "value": "Weiß gefärbte Glasscheibe"
1556 | }
1557 | },
1558 | {
1559 | "name": {
1560 | "value": "Boot"
1561 | }
1562 | },
1563 | {
1564 | "name": {
1565 | "value": "Dunkler Prismarin"
1566 | }
1567 | },
1568 | {
1569 | "name": {
1570 | "value": "Eichenholztür"
1571 | }
1572 | },
1573 | {
1574 | "name": {
1575 | "value": "Eichenholz"
1576 | }
1577 | },
1578 | {
1579 | "name": {
1580 | "value": "Rote Wolle"
1581 | }
1582 | },
1583 | {
1584 | "name": {
1585 | "value": "Gebratenes Hammelfleisch"
1586 | }
1587 | },
1588 | {
1589 | "name": {
1590 | "value": "Schwarzeichenholzzaun"
1591 | }
1592 | },
1593 | {
1594 | "name": {
1595 | "value": "Eisentür"
1596 | }
1597 | },
1598 | {
1599 | "name": {
1600 | "value": "Gemälde"
1601 | }
1602 | },
1603 | {
1604 | "name": {
1605 | "value": "Fichtennadeln"
1606 | }
1607 | },
1608 | {
1609 | "name": {
1610 | "value": "Rosa gefärbter Ton"
1611 | }
1612 | },
1613 | {
1614 | "name": {
1615 | "value": "Akazienholzstufe"
1616 | }
1617 | },
1618 | {
1619 | "name": {
1620 | "value": "Schwarzeichenholzstufe"
1621 | }
1622 | },
1623 | {
1624 | "name": {
1625 | "value": "Gemeißelter Sandstein"
1626 | }
1627 | },
1628 | {
1629 | "name": {
1630 | "value": "Eichenholzbrett"
1631 | }
1632 | },
1633 | {
1634 | "name": {
1635 | "value": "Gebratener Lachs"
1636 | }
1637 | },
1638 | {
1639 | "name": {
1640 | "value": "Eisenschaufel"
1641 | }
1642 | },
1643 | {
1644 | "name": {
1645 | "value": "Zaubertisch"
1646 | }
1647 | },
1648 | {
1649 | "name": {
1650 | "value": "Redstone-Verstärker"
1651 | }
1652 | },
1653 | {
1654 | "name": {
1655 | "value": "Schallplatte Far"
1656 | }
1657 | },
1658 | {
1659 | "name": {
1660 | "value": "Grüner Teppich"
1661 | }
1662 | },
1663 | {
1664 | "name": {
1665 | "value": "Eisenbarren"
1666 | }
1667 | },
1668 | {
1669 | "name": {
1670 | "value": "Orange Wolle"
1671 | }
1672 | },
1673 | {
1674 | "name": {
1675 | "value": "Tropenbaumsetzling"
1676 | }
1677 | },
1678 | {
1679 | "name": {
1680 | "value": "Steinstufe"
1681 | }
1682 | },
1683 | {
1684 | "name": {
1685 | "value": "Hellblau gefärbte Glasscheibe"
1686 | }
1687 | },
1688 | {
1689 | "name": {
1690 | "value": "Türkiser Farbstoff"
1691 | }
1692 | },
1693 | {
1694 | "name": {
1695 | "value": "Steak"
1696 | }
1697 | },
1698 | {
1699 | "name": {
1700 | "value": "Orange gefärbtes Glas"
1701 | }
1702 | },
1703 | {
1704 | "name": {
1705 | "value": "Blau gefärbtes Glas"
1706 | }
1707 | },
1708 | {
1709 | "name": {
1710 | "value": "Fichtenholzzaun"
1711 | }
1712 | },
1713 | {
1714 | "name": {
1715 | "value": "Kohle"
1716 | }
1717 | },
1718 | {
1719 | "name": {
1720 | "value": "Kartoffeln"
1721 | }
1722 | },
1723 | {
1724 | "name": {
1725 | "value": "Hellgrau gefärbtes Glas"
1726 | }
1727 | },
1728 | {
1729 | "name": {
1730 | "value": "Zauntor"
1731 | }
1732 | },
1733 | {
1734 | "name": {
1735 | "value": "Ei"
1736 | }
1737 | },
1738 | {
1739 | "name": {
1740 | "value": "Fichtenholzbrett"
1741 | }
1742 | },
1743 | {
1744 | "name": {
1745 | "value": "Orange gefärbte Glasscheibe"
1746 | }
1747 | },
1748 | {
1749 | "name": {
1750 | "value": "Akazienholz"
1751 | }
1752 | },
1753 | {
1754 | "name": {
1755 | "value": "Hellgraue Wolle"
1756 | }
1757 | },
1758 | {
1759 | "name": {
1760 | "value": "Strohballen"
1761 | }
1762 | },
1763 | {
1764 | "name": {
1765 | "value": "Ton"
1766 | }
1767 | },
1768 | {
1769 | "name": {
1770 | "value": "Schüssel"
1771 | }
1772 | },
1773 | {
1774 | "name": {
1775 | "value": "Lederkappe"
1776 | }
1777 | },
1778 | {
1779 | "name": {
1780 | "value": "Rosa gefärbte Glasscheibe"
1781 | }
1782 | },
1783 | {
1784 | "name": {
1785 | "value": "Diamantbrustpanzer"
1786 | }
1787 | },
1788 | {
1789 | "name": {
1790 | "value": "Grau gefärbte Glasscheibe"
1791 | }
1792 | },
1793 | {
1794 | "name": {
1795 | "value": "Schneemann"
1796 | }
1797 | },
1798 | {
1799 | "name": {
1800 | "value": "Diamanterz"
1801 | }
1802 | },
1803 | {
1804 | "name": {
1805 | "value": "Banner"
1806 | }
1807 | },
1808 | {
1809 | "name": {
1810 | "value": "Steinaxt"
1811 | }
1812 | },
1813 | {
1814 | "name": {
1815 | "value": "Feuerwerksstern"
1816 | }
1817 | },
1818 | {
1819 | "name": {
1820 | "value": "Netherwarze"
1821 | }
1822 | },
1823 | {
1824 | "name": {
1825 | "value": "Rot gefärbter Ton"
1826 | }
1827 | },
1828 | {
1829 | "name": {
1830 | "value": "Quarzblock"
1831 | }
1832 | },
1833 | {
1834 | "name": {
1835 | "value": "Mohn"
1836 | }
1837 | },
1838 | {
1839 | "name": {
1840 | "value": "Akazienholzzaun"
1841 | }
1842 | },
1843 | {
1844 | "name": {
1845 | "value": "Kaktus"
1846 | }
1847 | },
1848 | {
1849 | "name": {
1850 | "value": "Fichtenholztür"
1851 | }
1852 | },
1853 | {
1854 | "name": {
1855 | "value": "Schallplatte Cat"
1856 | }
1857 | },
1858 | {
1859 | "name": {
1860 | "value": "Feuerzeug"
1861 | }
1862 | },
1863 | {
1864 | "name": {
1865 | "value": "Schleimball"
1866 | }
1867 | },
1868 | {
1869 | "name": {
1870 | "value": "Gebratenes Schweinefleisch"
1871 | }
1872 | },
1873 | {
1874 | "name": {
1875 | "value": "Polierter Andesit"
1876 | }
1877 | },
1878 | {
1879 | "name": {
1880 | "value": "Prismarinziegel"
1881 | }
1882 | },
1883 | {
1884 | "name": {
1885 | "value": "Wither"
1886 | }
1887 | },
1888 | {
1889 | "name": {
1890 | "value": "Hellgrüner Farbstoff"
1891 | }
1892 | },
1893 | {
1894 | "name": {
1895 | "value": "Blauer Teppich"
1896 | }
1897 | },
1898 | {
1899 | "name": {
1900 | "value": "Tür"
1901 | }
1902 | },
1903 | {
1904 | "name": {
1905 | "value": "Stolperdraht"
1906 | }
1907 | },
1908 | {
1909 | "name": {
1910 | "value": "Türkiser Teppich"
1911 | }
1912 | },
1913 | {
1914 | "name": {
1915 | "value": "Polierter Diorit"
1916 | }
1917 | },
1918 | {
1919 | "name": {
1920 | "value": "Eisenblock"
1921 | }
1922 | },
1923 | {
1924 | "name": {
1925 | "value": "Akazienlaub"
1926 | }
1927 | },
1928 | {
1929 | "name": {
1930 | "value": "Schwarzeichensetzling"
1931 | }
1932 | },
1933 | {
1934 | "name": {
1935 | "value": "Diamantenhacke"
1936 | }
1937 | },
1938 | {
1939 | "name": {
1940 | "value": "Löwenzahn"
1941 | }
1942 | },
1943 | {
1944 | "name": {
1945 | "value": "Lapislazuli"
1946 | }
1947 | },
1948 | {
1949 | "name": {
1950 | "value": "Zuckerrohr"
1951 | }
1952 | },
1953 | {
1954 | "name": {
1955 | "value": "Birkenholztür"
1956 | }
1957 | },
1958 | {
1959 | "name": {
1960 | "value": "Kaktusgrün"
1961 | }
1962 | },
1963 | {
1964 | "name": {
1965 | "value": "Goldblock"
1966 | }
1967 | },
1968 | {
1969 | "name": {
1970 | "value": "Glatter Sandstein"
1971 | }
1972 | },
1973 | {
1974 | "name": {
1975 | "value": "Magenta gefärbter Ton"
1976 | }
1977 | },
1978 | {
1979 | "name": {
1980 | "value": "Notenblock"
1981 | }
1982 | },
1983 | {
1984 | "name": {
1985 | "value": "Schnee-Block"
1986 | }
1987 | },
1988 | {
1989 | "name": {
1990 | "value": "Kreaturenschädel"
1991 | }
1992 | },
1993 | {
1994 | "name": {
1995 | "value": "Diamantbeinschutz"
1996 | }
1997 | },
1998 | {
1999 | "name": {
2000 | "value": "Roter Sandstein"
2001 | }
2002 | },
2003 | {
2004 | "name": {
2005 | "value": "Orange gefärbter Ton"
2006 | }
2007 | },
2008 | {
2009 | "name": {
2010 | "value": "Schleimblock"
2011 | }
2012 | },
2013 | {
2014 | "name": {
2015 | "value": "Bücherregal"
2016 | }
2017 | },
2018 | {
2019 | "name": {
2020 | "value": "Kuchen"
2021 | }
2022 | },
2023 | {
2024 | "name": {
2025 | "value": "Holzknopf"
2026 | }
2027 | },
2028 | {
2029 | "name": {
2030 | "value": "Gemeißelter Quarzblock"
2031 | }
2032 | },
2033 | {
2034 | "name": {
2035 | "value": "Steinknopf"
2036 | }
2037 | },
2038 | {
2039 | "name": {
2040 | "value": "Glowstonestaub"
2041 | }
2042 | },
2043 | {
2044 | "name": {
2045 | "value": "Hellgrün gefärbtes Glas"
2046 | }
2047 | },
2048 | {
2049 | "name": {
2050 | "value": "Bruchsteinmauer"
2051 | }
2052 | },
2053 | {
2054 | "name": {
2055 | "value": "Namensschild"
2056 | }
2057 | },
2058 | {
2059 | "name": {
2060 | "value": "Schwarzpulver"
2061 | }
2062 | },
2063 | {
2064 | "name": {
2065 | "value": "Lohenstaub"
2066 | }
2067 | },
2068 | {
2069 | "name": {
2070 | "value": "Braustand"
2071 | }
2072 | },
2073 | {
2074 | "name": {
2075 | "value": "Fackel"
2076 | }
2077 | },
2078 | {
2079 | "name": {
2080 | "value": "Gelbe Wolle"
2081 | }
2082 | },
2083 | {
2084 | "name": {
2085 | "value": "Schallplatte Wait"
2086 | }
2087 | },
2088 | {
2089 | "name": {
2090 | "value": "Glitzernde Melone"
2091 | }
2092 | },
2093 | {
2094 | "name": {
2095 | "value": "Netherrack"
2096 | }
2097 | },
2098 | {
2099 | "name": {
2100 | "value": "Holzstufe"
2101 | }
2102 | },
2103 | {
2104 | "name": {
2105 | "value": "Netherziegeltreppe"
2106 | }
2107 | },
2108 | {
2109 | "name": {
2110 | "value": "Eis"
2111 | }
2112 | },
2113 | {
2114 | "name": {
2115 | "value": "Großer Farn"
2116 | }
2117 | },
2118 | {
2119 | "name": {
2120 | "value": "Netherziegelstufe"
2121 | }
2122 | },
2123 | {
2124 | "name": {
2125 | "value": "Fichtenholzstufe"
2126 | }
2127 | },
2128 | {
2129 | "name": {
2130 | "value": "Eisenhacke"
2131 | }
2132 | },
2133 | {
2134 | "name": {
2135 | "value": "Farn"
2136 | }
2137 | },
2138 | {
2139 | "name": {
2140 | "value": "Seelaterne"
2141 | }
2142 | },
2143 | {
2144 | "name": {
2145 | "value": "Keks"
2146 | }
2147 | },
2148 | {
2149 | "name": {
2150 | "value": "Melonenkerne"
2151 | }
2152 | },
2153 | {
2154 | "name": {
2155 | "value": "Goldklumpen"
2156 | }
2157 | },
2158 | {
2159 | "name": {
2160 | "value": "Diamanthelm"
2161 | }
2162 | },
2163 | {
2164 | "name": {
2165 | "value": "Fichtenholzzauntor"
2166 | }
2167 | },
2168 | {
2169 | "name": {
2170 | "value": "Goldhacke"
2171 | }
2172 | },
2173 | {
2174 | "name": {
2175 | "value": "Akazienholzbrett"
2176 | }
2177 | },
2178 | {
2179 | "name": {
2180 | "value": "Diamantspitzhacke"
2181 | }
2182 | },
2183 | {
2184 | "name": {
2185 | "value": "Lapislazulierz"
2186 | }
2187 | },
2188 | {
2189 | "name": {
2190 | "value": "Rohes Hammelfleisch"
2191 | }
2192 | },
2193 | {
2194 | "name": {
2195 | "value": "Quarztreppe"
2196 | }
2197 | },
2198 | {
2199 | "name": {
2200 | "value": "Ziegelstein-Block"
2201 | }
2202 | },
2203 | {
2204 | "name": {
2205 | "value": "Bruchsteinstufe"
2206 | }
2207 | },
2208 | {
2209 | "name": {
2210 | "value": "Smaragderz"
2211 | }
2212 | },
2213 | {
2214 | "name": {
2215 | "value": "Gelbe Blume"
2216 | }
2217 | },
2218 | {
2219 | "name": {
2220 | "value": "Kürbislaternen"
2221 | }
2222 | },
2223 | {
2224 | "name": {
2225 | "value": "Rot gefärbtes Glas"
2226 | }
2227 | },
2228 | {
2229 | "name": {
2230 | "value": "Eisenbeinschutz"
2231 | }
2232 | },
2233 | {
2234 | "name": {
2235 | "value": "Rosa gefärbtes Glas"
2236 | }
2237 | },
2238 | {
2239 | "name": {
2240 | "value": "Schwarzer Farbstoff"
2241 | }
2242 | },
2243 | {
2244 | "name": {
2245 | "value": "Holzhacke"
2246 | }
2247 | },
2248 | {
2249 | "name": {
2250 | "value": "Violett gefärbtes Glas"
2251 | }
2252 | },
2253 | {
2254 | "name": {
2255 | "value": "Sensorschiene"
2256 | }
2257 | },
2258 | {
2259 | "name": {
2260 | "value": "Türkise Wolle"
2261 | }
2262 | },
2263 | {
2264 | "name": {
2265 | "value": "Eisenbrustpanzer"
2266 | }
2267 | },
2268 | {
2269 | "name": {
2270 | "value": "Bruchstein"
2271 | }
2272 | },
2273 | {
2274 | "name": {
2275 | "value": "Schwarzeichenholztreppe"
2276 | }
2277 | },
2278 | {
2279 | "name": {
2280 | "value": "Creeperkopf"
2281 | }
2282 | },
2283 | {
2284 | "name": {
2285 | "value": "Karotte"
2286 | }
2287 | },
2288 | {
2289 | "name": {
2290 | "value": "Kaninchenfell"
2291 | }
2292 | },
2293 | {
2294 | "name": {
2295 | "value": "Gras"
2296 | }
2297 | },
2298 | {
2299 | "name": {
2300 | "value": "Schallplatte Strad"
2301 | }
2302 | },
2303 | {
2304 | "name": {
2305 | "value": "Birkensetzlinge"
2306 | }
2307 | },
2308 | {
2309 | "name": {
2310 | "value": "Moosstein"
2311 | }
2312 | },
2313 | {
2314 | "name": {
2315 | "value": "Rosa Farbstoff"
2316 | }
2317 | },
2318 | {
2319 | "name": {
2320 | "value": "Redstone-Fackel"
2321 | }
2322 | },
2323 | {
2324 | "name": {
2325 | "value": "Grün gefärbter Ton"
2326 | }
2327 | },
2328 | {
2329 | "name": {
2330 | "value": "Hohes Gras"
2331 | }
2332 | },
2333 | {
2334 | "name": {
2335 | "value": "Schwarze Wolle"
2336 | }
2337 | },
2338 | {
2339 | "name": {
2340 | "value": "Weizen"
2341 | }
2342 | },
2343 | {
2344 | "name": {
2345 | "value": "Enderperle"
2346 | }
2347 | },
2348 | {
2349 | "name": {
2350 | "value": "Angel"
2351 | }
2352 | },
2353 | {
2354 | "name": {
2355 | "value": "Knochenmehl"
2356 | }
2357 | },
2358 | {
2359 | "name": {
2360 | "value": "Quarz"
2361 | }
2362 | },
2363 | {
2364 | "name": {
2365 | "value": "Schwarzeichenholzbrett"
2366 | }
2367 | },
2368 | {
2369 | "name": {
2370 | "value": "Antriebsschiene"
2371 | }
2372 | },
2373 | {
2374 | "name": {
2375 | "value": "Leuchtfeuer"
2376 | }
2377 | },
2378 | {
2379 | "name": {
2380 | "value": "Blau gefärbter Ton"
2381 | }
2382 | },
2383 | {
2384 | "name": {
2385 | "value": "Schwarzeichenholztür"
2386 | }
2387 | },
2388 | {
2389 | "name": {
2390 | "value": "Eisengolem"
2391 | }
2392 | },
2393 | {
2394 | "name": {
2395 | "value": "Fichtenholz"
2396 | }
2397 | },
2398 | {
2399 | "name": {
2400 | "value": "Rosa Wolle"
2401 | }
2402 | },
2403 | {
2404 | "name": {
2405 | "value": "Feuerkugel"
2406 | }
2407 | },
2408 | {
2409 | "name": {
2410 | "value": "Akazienholztür"
2411 | }
2412 | },
2413 | {
2414 | "name": {
2415 | "value": "Schallplatte Chirp"
2416 | }
2417 | },
2418 | {
2419 | "name": {
2420 | "value": "Eichenlaub"
2421 | }
2422 | },
2423 | {
2424 | "name": {
2425 | "value": "Pfeil"
2426 | }
2427 | },
2428 | {
2429 | "name": {
2430 | "value": "Holzaxt"
2431 | }
2432 | },
2433 | {
2434 | "name": {
2435 | "value": "Glasscheibe"
2436 | }
2437 | },
2438 | {
2439 | "name": {
2440 | "value": "Endertruhe"
2441 | }
2442 | },
2443 | {
2444 | "name": {
2445 | "value": "Hellblaue Wolle"
2446 | }
2447 | },
2448 | {
2449 | "name": {
2450 | "value": "Faden"
2451 | }
2452 | },
2453 | {
2454 | "name": {
2455 | "value": "Rote Sandsteintreppe"
2456 | }
2457 | },
2458 | {
2459 | "name": {
2460 | "value": "Violette Wolle"
2461 | }
2462 | },
2463 | {
2464 | "name": {
2465 | "value": "Schwarz gefärbter Ton"
2466 | }
2467 | },
2468 | {
2469 | "name": {
2470 | "value": "Verzaubertes Buch"
2471 | }
2472 | },
2473 | {
2474 | "name": {
2475 | "value": "Knopf"
2476 | }
2477 | },
2478 | {
2479 | "name": {
2480 | "value": "Hellgrüne Wolle"
2481 | }
2482 | },
2483 | {
2484 | "name": {
2485 | "value": "Grobe Erde"
2486 | }
2487 | },
2488 | {
2489 | "name": {
2490 | "value": "Ghastträne"
2491 | }
2492 | },
2493 | {
2494 | "name": {
2495 | "value": "Seelensand"
2496 | }
2497 | },
2498 | {
2499 | "name": {
2500 | "value": "Brauner Pilz"
2501 | }
2502 | },
2503 | {
2504 | "name": {
2505 | "value": "Kettenhaube"
2506 | }
2507 | },
2508 | {
2509 | "name": {
2510 | "value": "Beschriebenes Buch"
2511 | }
2512 | },
2513 | {
2514 | "name": {
2515 | "value": "Fichtensetzling"
2516 | }
2517 | },
2518 | {
2519 | "name": {
2520 | "value": "Eichensetzling"
2521 | }
2522 | },
2523 | {
2524 | "name": {
2525 | "value": "Nachtlichtsensor"
2526 | }
2527 | },
2528 | {
2529 | "name": {
2530 | "value": "Sandsteintreppe"
2531 | }
2532 | },
2533 | {
2534 | "name": {
2535 | "value": "Redstone-Lampe"
2536 | }
2537 | },
2538 | {
2539 | "name": {
2540 | "value": "Glowstone"
2541 | }
2542 | },
2543 | {
2544 | "name": {
2545 | "value": "Holzdruckplatte"
2546 | }
2547 | },
2548 | {
2549 | "name": {
2550 | "value": "Holzkohle"
2551 | }
2552 | },
2553 | {
2554 | "name": {
2555 | "value": "Kettenstiefel"
2556 | }
2557 | },
2558 | {
2559 | "name": {
2560 | "value": "Leiter"
2561 | }
2562 | },
2563 | {
2564 | "name": {
2565 | "value": "Bemooster Bruchstein"
2566 | }
2567 | },
2568 | {
2569 | "name": {
2570 | "value": "Goldspitzhacke"
2571 | }
2572 | },
2573 | {
2574 | "name": {
2575 | "value": "Akazienholzzauntor"
2576 | }
2577 | },
2578 | {
2579 | "name": {
2580 | "value": "Birkenholztreppe"
2581 | }
2582 | },
2583 | {
2584 | "name": {
2585 | "value": "Schallplatte Ward"
2586 | }
2587 | },
2588 | {
2589 | "name": {
2590 | "value": "Schallplatte"
2591 | }
2592 | },
2593 | {
2594 | "name": {
2595 | "value": "Verzauberter goldener Apfel"
2596 | }
2597 | },
2598 | {
2599 | "name": {
2600 | "value": "Weißer Teppich"
2601 | }
2602 | },
2603 | {
2604 | "name": {
2605 | "value": "Eisenschwert"
2606 | }
2607 | },
2608 | {
2609 | "name": {
2610 | "value": "Gemeißelter roter Sandstein"
2611 | }
2612 | },
2613 | {
2614 | "name": {
2615 | "value": "Steinziegeltreppe"
2616 | }
2617 | },
2618 | {
2619 | "name": {
2620 | "value": "Druckplatte"
2621 | }
2622 | },
2623 | {
2624 | "name": {
2625 | "value": "Tropenholzbrett"
2626 | }
2627 | },
2628 | {
2629 | "name": {
2630 | "value": "Grüne Wolle"
2631 | }
2632 | },
2633 | {
2634 | "name": {
2635 | "value": "Bogen"
2636 | }
2637 | },
2638 | {
2639 | "name": {
2640 | "value": "Feuerstein"
2641 | }
2642 | },
2643 | {
2644 | "name": {
2645 | "value": "Schwarz gefärbte Glasscheibe"
2646 | }
2647 | }
2648 | ],
2649 | "name": "LIST_OF_ITEMS"
2650 | }
2651 | ]
2652 | }
2653 | }
2654 | }
2655 |
--------------------------------------------------------------------------------
/skill.json:
--------------------------------------------------------------------------------
1 | {
2 | "skillManifest": {
3 | "publishingInformation": {
4 | "locales": {
5 | "en-US": {
6 | "summary": "Spend some time coming up with an interesting, succinct description.",
7 | "examplePhrases": [
8 | "Alexa open Minecraft Helper",
9 | "Alexa ask Minecraft Helper what's the recipe for a chest",
10 | "Alexa ask Minecraft Helper how do I get a map"
11 | ],
12 | "keywords": [
13 | "Minecraft",
14 | "game"
15 | ],
16 | "name": "Minecraft Helper",
17 | "description": "Sample Full Description"
18 | },
19 | "de-DE": {
20 | "name": "Assistent für Minecraft in Deutsch"
21 | },
22 | "en-GB": {
23 | "name": "British Minecraft Helper"
24 | }
25 | },
26 | "isAvailableWorldwide": true,
27 | "testingInstructions": "Sample Testing Instructions.",
28 | "distributionCountries": []
29 | },
30 | "apis": {
31 | "custom": {
32 | "endpoint": {
33 | "sourceDir": "lambda/custom",
34 | "uri": "ask-custom-how-to-default"
35 | }
36 | }
37 | },
38 | "manifestVersion": "1.0",
39 | "permissions": [],
40 | "privacyAndCompliance": {
41 | "allowsPurchases": false,
42 | "isExportCompliant": true,
43 | "containsAds": false,
44 | "isChildDirected": false,
45 | "usesPersonalInfo": false
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------