首页 > 文章列表 > 快速构建一个适用于亚马逊Echo的知识问答游戏

快速构建一个适用于亚马逊Echo的知识问答游戏

EchoGame(Echo游戏) KnowledgeQuest(知识探索) Q&AChallenge(问答挑战)
201 2023-09-03

长期以来,人们认为与计算机的通信是通过物理设备上的用户界面进行的:在键盘上编写命令或点击或单击图标。用自然语言与计算机对话只发生在科幻小说中。

但世界正在发生变化,语音用户界面终于进入我们的家庭和办公室,模糊了计算与现实生活之间的界限。

Amazon Echo 和为其提供支持的语音服务 Alexa 是这项新技术的首批示例。

在本教程中,我们将使用 Alexa Skills Kit、AWS Lambda 和 Amazon 的一些模板源代码来创建一个问答游戏,可以使用 Amazon Echo 设备或任何支持 Alexa 的设备(例如 Amazon Fire TV)来玩该游戏、Echo Dot 或 Amazon Tap。

完成本教程后,您将对为 Alexa 创建新技能有一个良好的基本了解,并准备好参与探索语音驱动的用户体验的新领域。

架构快速概览

Alexa 技能(语音驱动的 Alexa 应用程序)由两部分组成:

  • 技能,在亚马逊开发者门户中定义。通过链接用户所说的与游戏互动的短语(例如“开始驯鹿游戏”)到应用程序的逻辑。
  • 一种 Web 服务,每当用户向技能发出命令时就会调用该服务。该服务可以在任何响应基于 JSON 的 API 的安全 Web 服务器上运行。

在本教程中,我们将在 AWS Lambda 上运行 Web 服务,该服务执行代码以响应事件,从而为开发人员省去了维护服务器的麻烦。 Lambda 还无缝链接到 Alexa Skills Kit,这使其成为运行 Alexa Skills 代码的出色工具。

我们将把服务器功能实现为 Node.js 模块,因此要完成本教程,您需要对 JavaScript 有基本的了解。有 Node.js 经验优先,但绝对不是完成本教程的必要条件。

1. 创建 Lambda 函数

让我们通过设置 AWS Lambda 函数来运行其业务逻辑来开始构建游戏。

第 1 步:开始使用 AWS Lambda

要使用 Lambda,您首先需要一个 Amazon Web Services (AWS) 帐户。

如果您已有帐户,请点击页面右上角的登录控制台开始使用。

如果您是新用户,您将看到一个不同的链接,创建 AWS 账户。单击链接,然后按照页面上的说明注册免费套餐帐户。

快速构建一个适用于亚马逊Echo的知识问答游戏

注册过程中,您需要输入有效的信用卡信息。但不用担心,除非您的使用量超过免费使用套餐,否则不会向您收取费用,这对于 Lambda 来说意味着 100 万个免费请求和最多 320 万秒的计算时间每月 em> 时间” — 足以完成教程并测试其功能。

完成注册并登录AWS 控制台后,您可以为您的账户激活 Lambda。

首先,检查页面右上角,确认您使用的是美国东部(弗吉尼亚北部)区域。

然后,在服务列表中选择Lambda

快速构建一个适用于亚马逊Echo的知识问答游戏

如果这是您第一次使用该工具,您将看到以下屏幕,其中包含有关您可以执行的操作的一些信息用它。

点击立即开始

快速构建一个适用于亚马逊Echo的知识问答游戏

步骤 2:配置 Lambda 函数

由于您尚未创建任何 Lambda 函数,因此用户界面将在新建函数向导中启动。首先,它会向您显示蓝图列表以及各种常见用例的示例 Lambda 配置。

我们将从头开始构建我们的问答游戏,因此向下滚动并单击页面底部的跳过按钮。

快速构建一个适用于亚马逊Echo的知识问答游戏

向导中的下一步是“配置功能”:

快速构建一个适用于亚马逊Echo的知识问答游戏

输入有关新 Lambda 函数的一些信息:

快速构建一个适用于亚马逊Echo的知识问答游戏

  • 名称:为函数选择一个描述性名称。此名称不是您将向 Alexa 用户公开的名称,因此您无需担心使其在您的 Lambda 帐户之外是唯一的。只需提供一些描述性内容即可帮助您识别 AWS Lambda 控制台中的函数。在示例中,我们将使用 MyTriviaGame,但您可以选择任何您喜欢的内容。
  • 描述:此字段是可选的,用于记录您的工作。如果您愿意,可以输入“我的第一个问答游戏”之类的内容。
  • 运行时:用于运行代码的服务器语言。 AWS Lambda 支持 Node.js、Java 和 Python。在本教程中,我们将使用Node.js

接下来在页面上,您将看到一个用于输入函数代码的编辑器。

不过,在我们开始之前,请向下滚动并配置其余选项:

快速构建一个适用于亚马逊Echo的知识问答游戏

  • 处理程序:指定 Lambda 在运行您的代码时应调用的 JavaScript 函数,格式为 .<函数名称>。使用内联编辑器时,代码保存为 index.js。我们很快就会看到,问答游戏中的处理程序函数称为 handler。因此,要使用该函数,请输入 index.handler

  • 角色:运行 Lambda 函数时要使用的 IAM 安全角色。在下拉列表中选择“基本执行角色”以创建新角色。如果您以前使用过 Lambda,您可能有一个名为 lambda_basic_execution 的角色。在这种情况下,您可以使用现有的。

将会显示一个用于配置角色的新窗口或选项卡。如果没有任何反应,请确保您的浏览器设置已设为允许弹出窗口,然后重试。

快速构建一个适用于亚马逊Echo的知识问答游戏

无需更改这些默认值。单击允许创建新的 IAM 规则并返回上一页。另外,请将高级设置中的字段保留为默认值。

然后,准备好配置后,让我们输入代码。

第 3 步:添加 JavaScript 代码

定义 Lambda 函数时,您可以直接在 Amazon Lambda 界面中的内联编辑器中编写代码,也可以将其作为 zip 文件上传。内联编辑器目前的上限为 20KB,因此对于更大的函数,或者如果您需要将代码拆分为多个文件(例如,如果您使用库),则可以使用 zip 文件方法。

但是,这一次,我们不会创建任何太复杂的内容,因此我们可以使用内联编辑器。

从亚马逊的“Reindeer Games”示例技能中复制源代码并将其粘贴到代码编辑器中。 Reindeer Games 是一个完整的问答游戏实现,您可以自由地将其用作您自己的游戏的模板。

快速构建一个适用于亚马逊Echo的知识问答游戏

在此步骤的其余部分中,我们将浏览问答游戏代码的主要部分,看看它是如何交互的我们将在本教程后面创建 Alexa Skills Kit 配置,并为您提供一些指导,帮助您开始自行探索和自定义代码。

JavaScript 代码以包含问答游戏问题的数据结构(模板源代码中的第 18-265 行)开始。每个问答题均由一个问题和一个至少包含四个选项的数组组成:正确答案后跟至少三个错误答案:

/**

 * When editing your questions pay attention to your punctuation. Make sure you use question marks or periods.

 * Make sure the first answer is the correct one. Set at least 4 answers, any extras will be shuffled in.

 */

var questions = [

    {

        "Reindeer have very thick coats, how many hairs per square inch do they have?": [

            "13,000",

            "1,200",

            "5,000",

            "700",

            "1,000",

            "120,000"

        ]

    },

    {

        "The 1964 classic Rudolph The Red Nosed Reindeer was filmed in:": [

            "Japan",

            "United States",

            "Finland",

            "Germany"

        ]

    },

   

    // ...

];

自定义问答游戏时,请将问题替换为您自己的问题:添加至少 20 个,但最好更多。一个不错的数字是 100 个问题。另外,请记住,正确答案始终是第一位的。

接下来,在问题之后的第 267-305 行上,您将找到我们在上一步中指定的处理函数。每当 Alexa Skills Kit 向 Lambda 函数发送请求时,都会调用此函数 handler

该函数有两个参数:

  • event 将包含一个包含请求信息的对象。
  • context 将表示 Lambda 函数的状态(例如,函数超时之前还剩多少时间)。上下文参数还用于将响应发送回调用者。

有关更多信息,请参阅 AWS Lambda 文档。

该函数如下所示:

// Route the incoming request based on type (LaunchRequest, IntentRequest,

// etc.) The JSON body of the request is provided in the event parameter.

exports.handler = function (event, context) {

    try {

        console.log("event.session.application.applicationId=" + event.session.application.applicationId);



        /**

         * Uncomment this if statement and populate with your skill's application ID to

         * prevent someone else from configuring a skill that sends requests to this function.

         */



//     if (event.session.application.applicationId !== "amzn1.echo-sdk-ams.app.05aecccb3-1461-48fb-a008-822ddrt6b516") {

//         context.fail("Invalid Application ID");

//      }



        if (event.session.new) {

            onSessionStarted({requestId: event.request.requestId}, event.session);

        }



        if (event.request.type === "LaunchRequest") {

            onLaunch(event.request,

                event.session,

                function callback(sessionAttributes, speechletResponse) {

                    context.succeed(buildResponse(sessionAttributes, speechletResponse));

                });

        } else if (event.request.type === "IntentRequest") {

            onIntent(event.request,

                event.session,

                function callback(sessionAttributes, speechletResponse) {

                    context.succeed(buildResponse(sessionAttributes, speechletResponse));

                });

        } else if (event.request.type === "SessionEndedRequest") {

            onSessionEnded(event.request, event.session);

            context.succeed();

        }

    } catch (e) {

        context.fail("Exception: " + e);

    }

};

第 278-280 行(此代码段中的第 12-14 行)上,您会发现一个已注释掉的 if 结构。需要进行此检查,以防止您即将配置的技能之外的其他技能调用您的 Lambda 函数。

现在,保留代码不变。在本教程的后面部分,一旦您创建了 Alexa Skill 并拥有了唯一的 ID,请返回此检查并将第 278 行上的示例应用程序 ID 替换为新 ID。然后,取消注释代码以使用它。

来自 Alexa Skills Kit 的每个请求都有一个类型,通过 event.request.type 传递。

总共有三种请求类型,服务需要分别响应这三种请求类型:

  • LaunchRequest:当用户启动技能时发送。示例代码调用辅助函数 onLaunch 来初始化游戏、选择问题并发回第一个问题以及欢迎消息。
  • SessionEndedRequest:当用户通过说“退出”、暂时没有响应或发生错误而停止使用技能时发送。该示例代码调用辅助函数 onSessionEnded,该函数目前只是一个占位符,不执行任何操作。
  • IntentRequest:当用户说出映射到意图的命令时发送。意图。该示例代码调用辅助函数 onIntent

亚马逊的文档解释说:

“[A]n意图表示满足用户口头请求的高级操作。意图可以选择包含称为的参数,这些参数收集实现所需的附加信息用户的要求。”

当用户说出命令时,Alexa 会将其转换为文本,并将其与应用程序理解的短语列表进行比较。每个短语都映射到一个意图定义,这样您的代码就不必担心解析用户的自由格式输入,而是可以依赖意图来组织与用户的通信。

您很快就会了解如何指定技能的意图,但首先,让我们看一下 onIntent 函数,了解游戏如何处理意图。

您可以在源代码中的第327-371行找到该函数:

/**

 * Called when the user specifies an intent for this skill.

 */

function onIntent(intentRequest, session, callback) {

    console.log("onIntent requestId=" + intentRequest.requestId

        + ", sessionId=" + session.sessionId);



    var intent = intentRequest.intent,

        intentName = intentRequest.intent.name;



    // handle yes/no intent after the user has been prompted

    if (session.attributes && session.attributes.userPromptedToContinue) {

        delete session.attributes.userPromptedToContinue;

        if ("AMAZON.NoIntent" === intentName) {

            handleFinishSessionRequest(intent, session, callback);

        } else if ("AMAZON.YesIntent" === intentName) {

            handleRepeatRequest(intent, session, callback);

        }

    }



    // dispatch custom intents to handlers here

    if ("AnswerIntent" === intentName) {

        handleAnswerRequest(intent, session, callback);

    } else if ("AnswerOnlyIntent" === intentName) {

        handleAnswerRequest(intent, session, callback);

    } else if ("DontKnowIntent" === intentName) {

        handleAnswerRequest(intent, session, callback);

    } else if ("AMAZON.YesIntent" === intentName) {

        handleAnswerRequest(intent, session, callback);

    } else if ("AMAZON.NoIntent" === intentName) {

        handleAnswerRequest(intent, session, callback);

    } else if ("AMAZON.StartOverIntent" === intentName) {

        getWelcomeResponse(callback);

    } else if ("AMAZON.RepeatIntent" === intentName) {

        handleRepeatRequest(intent, session, callback);

    } else if ("AMAZON.HelpIntent" === intentName) {

        handleGetHelpRequest(intent, session, callback);

    } else if ("AMAZON.StopIntent" === intentName) {

        handleFinishSessionRequest(intent, session, callback);

    } else if ("AMAZON.CancelIntent" === intentName) {

        handleFinishSessionRequest(intent, session, callback);

    } else {

        throw "Invalid intent";

    }

}

如您所见,大部分函数都是 if..else 结构,用于将请求中的意图名称与游戏接受的一组意图进行比较。根据意图名称,它然后调用匹配的游戏功能。

例如,当游戏收到意图名称为 AnswerIntent 的请求时,它知道该请求是当前问题的答案,并调用函数 handleAnswerRequest处理一下。

第 4 步:保存 Lambda 函数

由于这是一个关于为支持 Alexa 的设备创建技能而不是游戏开发的教程,因此我们不会更深入地研究游戏的逻辑。但现在您应该对从哪里开始自己探索代码有了一些想法。

向下滚动到页面末尾,然后单击下一步保存配置。

在向导的最后一步中,您将看到 Lambda 函数设置的概述。检查一切是否正确,然后点击创建函数

快速构建一个适用于亚马逊Echo的知识问答游戏

Lambda 函数现已创建。

如果您需要更改向导中的任何选项,可以在配置选项卡上进行。

快速构建一个适用于亚马逊Echo的知识问答游戏

第 5 步:定义 Lambda 函数的触发方式

现在您已经创建了函数并将其代码放置到位,是时候指定如何调用它了。我们将通过添加事件源来完成此操作。

首先,单击事件源选项卡。

快速构建一个适用于亚马逊Echo的知识问答游戏

配置完成后,您将在此选项卡上找到已为此 Lambda 函数设置的事件源列表。点击添加事件源链接添加一个。

打开一个用于选择事件源类型的弹出窗口:

快速构建一个适用于亚马逊Echo的知识问答游戏

选择Alexa 技能套件。然后点击提交

这就是使 Lambda 函数侦听 Alexa Skills Kit 中的事件所需执行的所有配置。

新的事件源现已列在事件源选项卡上:

快速构建一个适用于亚马逊Echo的知识问答游戏

请注意右上角带有标签 ARN 的标识符。您很快就会使用它来配置 Alexa Skill 以调用正确的 Lambda 函数。

现在,让我们定义技能。

2. 在亚马逊开发者门户中设置技能

您现在已经将问答游戏的逻辑放在适当的位置,并将函数配置为根据 Alexa Skills Kit 的请求执行。

剩下的就是创建技能,以便您和您的用户可以使用实际的支持 Alexa 的设备(例如 Amazon Echo)与代码对话。

为此,我们将使用 Amazon 开发者门户。

第 1 步:创建 Amazon 开发者帐户

首先注册开发者门户帐户。

点击亚马逊开发者页面右上角的登录或创建免费帐户。首先,您将看到默认的亚马逊登录信息。使用它可以创建一个全新的帐户,也可以使用您现有的 Amazon 帐户(例如,您在注册 AWS 时使用的帐户)进行登录。

快速构建一个适用于亚马逊Echo的知识问答游戏

如果您之前没有使用过开发者门户,系统会要求您输入有关您公司的一些信息,然后接受应用程序分发协议。此信息在您可能使用此帐户为 Amazon Marketplace 创建的任何应用程序之间共享。

最后,在最后一步中,注册流程会询问您有关付款的信息。。目前,Alexa 技能无法出售或购买,因此,如果您只打算开发 Alexa 技能,请为两个问题选择,以跳过任何与获利相关的设置步骤。如果您决定稍后通过您的应用获利,您可以随时返回相关设置。

快速构建一个适用于亚马逊Echo的知识问答游戏

点击保存并继续

现在,您已注册并准备好添加您的第一项技能。

第 2 步:添加您的第一个 Alexa 技能

登录开发者控制台后,导航至Alexa Skills Kit页面:首先,点击顶部的应用和服务菜单,然后在子菜单中选择 Alexa

快速构建一个适用于亚马逊Echo的知识问答游戏

在此页面上,您将看到以下选项:

快速构建一个适用于亚马逊Echo的知识问答游戏

点击开始按钮选择Alexa Skills Kit .

在显示的屏幕中,您将找到您已构建的所有 Alexa 技能:

快速构建一个适用于亚马逊Echo的知识问答游戏

列表仍为空,因此点击添加新技能开始定义您的第一个技能使用五步向导将引导您一路发布技能,以便其他 Alexa 用户可以找到并使用它。

首先,在技能信息选项卡上,输入一些基本信息来识别您的新技能。

快速构建一个适用于亚马逊Echo的知识问答游戏

  • 技能类型选择“自定义交互模型”,因为您将在其中定义交互模型来创建自定义技能。您可以在此处详细了解不同类型的 Alexa 技能。
  • 名称:技能的描述性名称。一旦您发布了您的技能,您的潜在用户就会看到这个名称。在示例中,亚马逊使用Reindeer Games,但您应该选择自己的名称,因为该名称已被使用。
  • 调用名称:用户想要告诉 Alexa 执行此技能时将使用的名称,例如“Alexa,打开Reindeer Games”。请注意,它不必与技能名称相同。在决定调用名称时,请使用 Echo 设备测试您的想法,以确保您选择的名称易于 Alexa 识别。这样您就可以确保您的用户能够轻松激活您的技能。

信息准备就绪后,点击下一步

请注意,如果出现错误,您稍后可以随时返回编辑此信息。保存该步骤后,您还可以通过返回此步骤找到技能的应用程序 ID(这样您就可以在 JavaScript 代码中使用它来验证请求,正如我之前提到的)。

第 3 步:定义交互模型

交互模型是用户与支持 Alexa 的设备(例如 Amazon Echo)对话与我们之前设置的 Lambda 函数之间的链接。在某种程度上,它是我们语音驱动软件的用户界面定义。

该模型由意图架构组成,该架构定义了技能使用的意图集、意图参数(称为槽位)和话语 >,用户为执行意图架构中定义的意图之一而说出的短语。

快速构建一个适用于亚马逊Echo的知识问答游戏

意图架构

将以下代码复制并粘贴到标记为意图架构的文本字段中:

{

  "intents": [

    {

      "intent": "AnswerIntent",

      "slots": [

        {

          "name": "Answer",

          "type": "LIST_OF_ANSWERS"

        }

      ]

    },

    {

      "intent": "AnswerOnlyIntent",

      "slots": [

        {

          "name": "Answer",

          "type": "LIST_OF_ANSWERS"

        }

      ]

    },

    {

      "intent": "DontKnowIntent"

    },

    {

      "intent": "AMAZON.StartOverIntent"

    },

    {

      "intent": "AMAZON.RepeatIntent"

    },

    {

      "intent": "AMAZON.HelpIntent"

    },

    {

      "intent": "AMAZON.YesIntent"

    },

    {

      "intent": "AMAZON.NoIntent"

    },

    {

      "intent": "AMAZON.StopIntent"

    },

    {

      "intent": "AMAZON.CancelIntent"

    }

  ]

}

查看数据结构,您会注意到列表中定义的意图名称如何与我们在教程前面查看的 JavaScript 代码中的意图名称相匹配。例如,第一个意图 AnswerIntent 是映射到检查用户答案是否正确的函数的意图。

有关设计语音界面的更多信息,请参阅 Alexa Skills Kit 文档。

插槽

虽然大多数意图只是标识符,只有名称,但其中一些意图指定参数,称为槽。

继续查看 AnswerIntent,请注意该 Intent 定义了一个参数 Answer,槽类型为 LIST_OF_ANSWERS

LIST_OF_ANSWERS 是自定义插槽类型,因此我们必须在配置中指定它。

点击添加插槽类型,然后输入以下信息:

快速构建一个适用于亚马逊Echo的知识问答游戏

  • 输入类型:插槽类型的名称,由意图架构引用。输入 LIST_OF_ANSWERS
  • 输入值:插槽可接受的值,每行一个值。输入从 14 的数字,每个数字都在其行上,以便用户通过说出正确答案的数字来回答问题。

然后点击确定

现在,让我们回到 JavaScript 并查找名为 isAnswerSlotValid 的函数(第 599-603 行),看看该函数如何使用槽来检索用户的答案:

function isAnswerSlotValid(intent) {

    var answerSlotFilled = intent.slots && intent.slots.Answer && intent.slots.Answer.value;

    var answerSlotIsInt = answerSlotFilled && !isNaN(parseInt(intent.slots.Answer.value));

    return answerSlotIsInt && parseInt(intent.slots.Answer.value) < (ANSWER_COUNT + 1) && parseInt(intent.slots.Answer.value) > 0;

}

在这里,您可以看到 Intent 对象包含一个属性 slots,用于传递 Intent Schema 中定义的任何参数。

在本例中,只有一个,Answer。因此,通过查看 intent.slots.Answer.value,该函数可以查看用户选择的答案,并检查它是否是当前问题的正确答案。

示例话语

最后,为了完成交互模型,您需要定义示例话语,用户可以说出这些句子来调用架构中指定的意图。

快速构建一个适用于亚马逊Echo的知识问答游戏

在文本字段中,每行输入一个短语,格式为 <短语>。要包含参数槽,请使用 {Answer}。然后,当用户说出该短语时,Alexa 将对其进行解析并调用服务,传入匹配的意图和 Answer 插槽的解析值。

首先插入以下示例话语。然后,您可以继续添加任意数量的话语。事实上,您能想出的(相关)短语越多越好。

AnswerIntent the answer is {Answer}

AnswerIntent my answer is {Answer}

AnswerIntent is it {Answer}

AnswerIntent {Answer} is my answer

AnswerOnlyIntent {Answer}



AMAZON.StartOverIntent start game

AMAZON.StartOverIntent new game

AMAZON.StartOverIntent start

AMAZON.StartOverIntent start new game



DontKnowIntent i don't know

DontKnowIntent don't know

DontKnowIntent skip

DontKnowIntent i don't know that

DontKnowIntent who knows

DontKnowIntent i don't know this question

DontKnowIntent i don't know that one

DontKnowIntent dunno

有了这些话语,例如,当用户说“两个是我的答案”时,Alexa 将发送 IntentRequest到 Lambda 函数,传递 AnswerIntent 作为意图,并传递 2 作为 Answer 槽的值。

点击下一步保存您的交互模型。构建交互模型可能需要一两分钟,所以请给它一些时间。然后,构建完成后,您就可以配置您的 Alexa Skill。

第 4 步:配置您的 Alexa 技能

在“配置”选项卡上,输入一些信息来配置您的技能并定义负责其逻辑的 Web 服务。

  • 端点:执行技能功能的方法。我们的代码位于 AWS Lambda,因此选择 Lambda ARN。然后,在文本字段中输入我在教程第一部分末尾指出的标识符。
  • 帐户关联:选择否。

信息到位后,单击下一步。您已准备好开始测试新的 Alexa Skill!

快速构建一个适用于亚马逊Echo的知识问答游戏

3.测试问答游戏

虽然测试新 Alexa 技能的最佳方法是在实际的 Echo 设备上玩问答游戏,但您也可以使用添加下一步中的工具在浏览器中测试该技能。新技能流程。

第 1 步:在模拟器中测试游戏

在测试页面上,您会发现两个测试工具:

快速构建一个适用于亚马逊Echo的知识问答游戏

  1. 语音模拟器可用于测试 Alexa 如何说出任何句子。例如,在为问答游戏设计问题时,这很有用:如果问题在语音模拟器中听起来不正确,请重试并用正确的版本替换它。
  2. 服务模拟器测试该技能的功能,几乎就像您使用实际的支持 Alexa 的设备一样。使用此工具,您可以输入话语,并通过 Alexa Skills Kit 查看您的应用程序如何响应它。

那么,让我们使用服务模拟器来测试游戏。

输入话语文本框中,输入:

open reindeer games

然后,点击下方的询问 Reindeer Games 按钮。

测试工具使用您的交互模型来解析命令,然后向技能的 Lambda 函数发出请求。

如果一切顺利,您将看到命令框下方显示的 JSON 请求和响应:

快速构建一个适用于亚马逊Echo的知识问答游戏

在左侧,您将看到 Alexa Skills Kit 发送到您的 Lambda 函数的请求,然后右边,你的代码如何响应它。

现在,您可以分析 JSON 响应,或者为了获得更真实的 Echo 体验,请单击收听按钮以听到 Alexa 为您说出响应。

听到问题后,尝试回答它。选择您在上一步中指定的一种言语格式,并将其输入到输入言语文本字段中。

例如:

the answer is four

请注意,您必须将数字写为单词,而不是实际的数字 4。

你答对了吗?继续使用不同的话语和流程变化进行测试,直到您确信应用程序按预期工作,并且充分了解它的工作原理。

如果出现问题并且您从服务器收到无效响应,您可能需要检查以下一些常见错误,如示例代码开发人员所列:

  • 您是否已将 Lambda 函数的正确 ARN 复制到开发者门户中的技能中?
  • 您使用的调用名称正确吗?也许您将其更改为与驯鹿游戏不同的内容,并且现在仍在使用示例名称进行测试?
  • 您是说启动、启动还是打开?
  • 您确定您的帐户中没有具有相同调用名称的其他技能吗?
  • 具体而言,对于此模板,您需要至少提出七个问题和答案,业务逻辑才能发挥作用。

第 2 步:在设备上测试游戏

正如我们在上一步中看到的,在线工具与测试应用程序逻辑和交互架构的实际设备一样好。

但是,此测试方法不会向您展示 Alexa 理解和解析话语的能力。因此,如果您正在创建计划发布的技能,您还可以在提交技能之前使用设备(而不仅仅是这些在线工具)进行一些最终测试。

Amazon Alexa 认证团队还将在接受您的技能进入市场之前进行彻底的测试。如果您的技能尚未准备好进行认证,他们会向您发送其他反馈,让您了解所需的编辑并帮助您做好发布技能的准备。

要在 Echo 设备上测试游戏,请首先使用您在 Amazon 开发者门户上注册开发者帐户时所用的电子邮件地址注册该设备。完成后,您就可以像真正的最终用户一样使用该技能。

请参阅 Alexa 文档以获取更多测试说明。

4. 发布您的 Alexa 技能

当您的技能准备好迎接黄金时段时,您可以继续将其发布给全世界观看。

不过,不要按原样发布示例应用程序。

相反,使用模板和您在本教程中学到的内容作为您惊人的新技能的基础,制作您自己的游戏。修改 AWS Lambda 编辑器中的代码以替换问题、向技能配置添加新的话语,或许还可以进行一些适合您的问答游戏版本的其他修改。

然后,在测试标签上,当您对自己的申请充满信心后,点击下一步进入最后两个步骤,然后发布技能 .

快速构建一个适用于亚马逊Echo的知识问答游戏

发布信息选项卡上,根据需要详细描述技能新用户可以轻松找到您的技能,了解其工作原理、为什么值得尝试以及如何使用它。这是您吸引新用户的唯一机会!

图标也是一个重要的营销元素。它应该是潜在用户会注意到并感到好奇的东西。另外,请确保仅上传您有权使用的图像。

在编辑数据时,您可以随时点击保存来保存更改,并在 Alexa Companion 应用程序中预览技能的描述页面。当技能生效时,描述也会显示在此处。

仔细浏览各个字段,密切注意说明。在上面的屏幕截图中,您可以看到来自 Amazon 的 Reindeer Games 模板的示例值。

如果您使用这些值的变体,请记住将示例短语中的“Reindeer Games”替换为您的技能调用名称。

测试说明仅对 Amazon Alexa 认证团队可见。您可以只提及:“我正在使用基于 Reindeer Games 代码示例的 Trivia 技能模板。”

然后,准备好后,点击下一步

快速构建一个适用于亚马逊Echo的知识问答游戏

在最后一步中,您将回答一些有关游戏隐私选项的问题。

对于基于本教程的问答游戏,请在是/否问题中选择:该技能不允许用户花钱或收集用户信息。

隐私政策 URL使用条款 URL 是可选的。

当您认为游戏已准备就绪时,请点击提交进行验证。然后等待 Alexa Skills 团队的输入:您将收到进度电子邮件,并可能收到一些有关如何提高技能的建议。

如果一切顺利,不久之后您的问答游戏将可供用户在 Amazon Echo 或任何支持 Alexa 的设备上试用!

下一步是什么?

您现在已经实施了第一个 Alexa Skill,并且应该对构建块和用于构建该技能的流程有很好的了解。但这仅仅是开始。

深入挖掘,构思使用语音界面的新方法,或向现有 Web 应用程序添加语音界面。语音驱动应用程序的市场才刚刚起步,仍然有许多未使用的想法等待您实施。

享受创造未来的乐趣!

创建 Alexa 技能并免费使用 Envato Tuts+ 三个月

您想免费使用我们包含 750 多个视频课程的丰富库吗?如果是这样,那么你很幸运。 Amazon 向 2016 年 3 月 31 日至 2016 年 5 月 31 日期间发布 Alexa 技能的前 500 名读者提供三个月免费的 Envato Tuts+ 订阅。

详细了解限时优惠,以及如何提交您的技能以获得三个月的免费订阅!