关键要点
Alexa 原生支持许多内置技能,例如将项目添加到您的购物清单或请求歌曲。但是,开发者可以使用 Alexa Skill Kit (ASK) 构建新的自定义技能。
ASK 是一套 API 和工具的集合,它处理与语音界面相关的大部分工作,包括语音识别、文本转语音编码和自然语言处理。ASK 帮助开发者快速轻松地构建技能。
简而言之,Alexa 能够理解用户语音命令的唯一原因是它定义了技能。每个 Alexa 技能都是旨在理解语音命令的软件。此外,每个 Alexa 技能都有其自身定义的逻辑,该逻辑会为语音命令创建适当的响应。为了让您了解一些现有的 Alexa 技能,它们包括:
如上所述,我们可以使用 Alexa Skill Kit 开发满足我们需求的自定义技能,这是一套为此目的而设计的 API 和工具的集合。ASK 包括语音识别、文本转语音编码和自然语言处理等工具。该工具包应该能够让任何开发者快速开始开发他们自己的自定义技能。
在本文中,您将学习如何创建一个基本的“获取事实”Alexa 技能。简而言之,我们可以要求 Alexa 向我们展示一个随机的猫事实。完成任务的完整代码可以在 GitHub 上找到。在我们开始之前,让我们确保我们理解 Alexa 技能术语。
掌握 Alexa 技能术语
首先,让我们学习用户如何与自定义技能交互。这对于理解与技能相关的不同概念非常重要。
为了激活特定技能,用户必须呼叫 Alexa 并要求打开技能。例如:“Alexa,打开猫事实”。通过这样做,我们正在调用技能的调用名称。基本上,调用名称可以看作是应用程序的名称。
现在我们已经启动了正确的技能,我们可以访问技能理解的语音意图/命令。由于我们希望保持简单,我们定义了一个“获取猫事实”意图。但是,我们需要提供示例句子来触发意图。一个意图可以由许多示例句子触发,这些句子也称为话语。例如,用户可能会说“给出一个事实”。因此,我们定义了以下示例句子:
甚至可以将调用名称与意图结合起来,如下所示:“Alexa,要求猫事实给出事实”。
现在我们知道了调用名称和意图之间的区别,让我们继续创建您的第一个 Alexa 技能。
创建亚马逊开发者帐户
首先,我们需要一个亚马逊开发者帐户。如果您已经有一个,您可以跳过本节。
注册亚马逊开发者帐户是一个三步过程。亚马逊需要一些个人信息,接受服务条款并提供付款方式。注册亚马逊开发者帐户的优势在于您可以访问大量其他亚马逊服务。成功完成注册后,您将看到亚马逊开发者控制面板。
登录控制面板,然后单击右上角的“开发者控制台”按钮。
接下来,我们想打开 Alexa Skills Kit。
如果您无法打开 Alexa Skills Kit,请使用此链接。
在下一节中,我们将创建我们实际的技能。
创建我们的第一个自定义 Alexa 技能
好的,我们准备创建我们的第一个自定义 Alexa 技能。单击蓝色按钮“创建技能”以打开创建新技能的菜单。
首先,它会提示我们输入技能的名称。正如您已经知道的那样,我们想要随机的猫事实,因此将技能称为“自定义猫事实”(我们不能使用“猫事实”,因为这是 Alexa 设备的内置技能)。接下来,它会提示我们为您的技能选择一个模型。我们可以选择一些预定义的模型,或者选择一个自定义模型,这给我们提供了完全的灵活性。由于我们不想处理不需要的代码,我们选择“自定义”选项。
*注意:如果您选择预定义技能,您将获得交互模型和示例句子(话语)的列表。但是,即使是自定义技能也配备了最基本的意图,如取消、帮助、导航到主页和停止。
接下来,我们需要选择一种托管技能的方式。同样,我们不想使事情过于复杂,并选择“Alexa 托管 (Node.js)”选项。这意味着我们不必自己运行后端,这需要一些努力才能使其“符合 Alexa 标准”。这意味着您必须根据亚马逊 Alexa 标准格式化响应,以便设备能够理解这一点。Alexa 托管选项将:
在您的帐户中托管技能,直到 AWS 免费套餐限制,并让您开始使用 Node.js 模板。您将可以访问 AWS Lambda 端点、5 GB 的媒体存储空间(每月 15 GB 的数据传输)和用于会话持久性的表格。
好的,现在所有设置都已到位,您可以单击屏幕右上角的“创建技能”按钮。此按钮将在我们的亚马逊开发者帐户中生成实际的技能。
修改您的第一个 Alexa 技能
现在,如果您导航到 Alexa 开发者控制台,您会发现您的技能已列在那里。单击“编辑”按钮以开始修改技能。
接下来,亚马逊将显示“猫事实”技能的“构建”选项卡。在左侧,您会找到为技能定义的意图列表。如前所述,默认情况下,Alexa Skills Kit 会生成一个“取消”、“停止”、“帮助”和“导航到主页”意图。前三个对于想要退出技能或不知道如何使用技能的用户很有帮助。“导航到主页”最后一个仅用于涉及多个步骤的复杂技能。
首先,让我们验证技能的调用名称是否正确。名称应显示为“自定义猫事实”。
如果您更改名称,请确保点击页面顶部的“保存模型”按钮。
第二步,我们要修改默认意图“HelloWorldIntent”。
单击意图,我们将获得一个不错的图形界面,允许我们更改意图名称或添加示例话语。
我个人更喜欢使用 JSON 编辑器,您可以在左侧菜单中找到它。打开 JSON 编辑器时,您将看到以下 JSON 对象。
JSON 编辑器的优点是您可以一次修改所有意图。首先,让我们添加一个名为“GetFactIntent”的新意图。
接下来,我们想添加一些示例话语,如下面的图片所示。
修改后,您的 JSON 对象应如下所示。目前,我们不想为其他意图定义示例话语。Alexa Skills Kit 默认情况下会将“帮助”句子链接到“HelpIntent”。
注意:不要忘记单击“保存模型”按钮,然后单击“构建模型”按钮。Alexa 基本上会构建模型并根据您使用示例话语定义的模型进行自我训练。
让我们转到水平菜单中的“测试”选项卡。现在,将“技能测试已在”的下拉菜单切换到“开发”。这将允许我们测试技能。
目前,让我们尝试激活技能以查看一切是否正确。我们可以通过调用调用名称来激活技能,如下图所示。
接下来,我们将深入研究代码选项卡。单击“代码”选项卡时,您将获得一个包含默认代码的在线编辑器。
首先,我们要复制 HelloWorldIntentHandler 的代码并将其重命名为 GetFactIntentHandler。
之后,我们必须指定此处理程序可以处理哪种类型的意图。第 21 行查找名为 GetFactIntent 的意图。
现在我们找到了意图,让我们定义一个静态响应:“我会说一个事实!”,我们将其分配给 speakOutput 变量。
最后,我们必须将 GetFactIntentHandler 添加到其他请求处理程序。我们可以简单地将其添加到 addRequestHandlers 函数中。不要忘记保存并构建意图!
现在技能已保存并构建,让我们简要验证一下响应。如果我们要求技能说出事实,它应该回复“我会说一个事实!”
如果一切正确,您可以继续下一步。
作为最后一步,我们要查询一个返回猫事实的简单 API。为此,我使用以下 API 端点:https://www.php.cn/link/2c5baeed3fd870447056fc00bf792427。
此 API 端点返回事实和事实的长度。
<code>{ "fact": "Smuggling a cat out of ancient Egypt was punishable by death. Phoenician traders eventually succeeded in smuggling felines, which they sold to rich people in Athens and other important cities.", "length": 192 }</code>
由于 https 包是为 Node.js 内置的,因此我们可以在代码中使用它来从 API 检索数据。这就是我们如何做到的:
实际代码可以在这里找到:
const https = require('https'); const httpGet = () => { return new Promise(((resolve, reject) => { var options = { host: 'catfact.ninja', port: 443, path: '/fact', method: 'GET', }; const request = https.request(options, (response) => { response.setEncoding('utf8'); let returnData = ''; response.on('data', (chunk) => { returnData += chunk; }); response.on('end', () => { resolve(JSON.parse(returnData)); }); response.on('error', (error) => { reject(error); }); }); request.end(); })); }
现在我们已经准备好了辅助方法,我们可以将其添加到 GetFactIntentHandler 中。请注意,由于我们要对请求使用 await,因此我们必须使 handle 函数成为异步函数。除此之外,我们调用 httpGet 函数以获取猫事实响应并将 response.fact 分配给 speakOutput 变量。接下来,speakOutput 变量传递给 speak 命令,该命令由 Alexa 使用:
const GetFactIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'GetFactIntent'; }, async handle(handlerInput) { // const speakOutput = 'I will tell a fact!'; const response = await httpGet(); const speakOutput = response.fact; return handlerInput.responseBuilder .speak(speakOutput) //.reprompt('add a reprompt if you want to keep the session open for the user to respond') .getResponse(); } };
我们已经准备好代码更改了。再次保存代码,然后单击部署按钮。
作为最后一步,让我们验证技能是否从 API 获取随机猫事实。再次,让我们转到“测试”选项卡。
通过调用“打开猫事实”来启动技能。接下来,您可以要求“说出事实”。如果一切顺利,您应该会收到一个事实作为回复。
成功!
为了在支持 Alexa 的设备上测试您的自定义技能,您需要在与您的亚马逊开发者帐户相同的电子邮件地址下注册 Alexa 设备。
更多信息可以在 Alexa 文档中找到:
要使用支持 Alexa 的设备(例如 Amazon Echo)进行测试,请使用您用于在亚马逊开发者门户网站上注册开发者帐户的相同电子邮件地址注册该设备。然后,您可以使用唤醒词和您的调用名称来调用您的技能:“Alexa,打开<调用名称>。”
如果您的设备使用的是除您的开发者帐户以外的帐户进行设置,请重置设备,然后使用您的开发者帐户重新注册。
理解基础知识
这只是使用 Alexa 构建技能的开始。更高级的示例是可能的,例如使用意图传递参数(选项)。还可以开发许多其他类型的技能,例如控制智能家居设备的技能。
如果您想了解有关 Alexa Skill 开发的更多信息,请查找以下资源:
关于亚马逊 Alexa Skill 的常见问题解答 (FAQ)
为您的网站创建 Alexa 技能涉及多个步骤。首先,您需要设置一个亚马逊开发者帐户。拥有帐户后,导航到 Alexa Skills Kit 开发者控制台并单击“创建技能”。您需要为您的技能提供一个名称并选择一个要添加到您的技能中的模型。之后,您需要为您的技能构建交互模型,其中包括意图、槽和示例话语。构建交互模型后,您可以在发布之前继续在开发者控制台中测试您的技能。
Alexa 技能包含几个关键组件。这些包括调用名称(用户用来激活您的技能的名称)、意图(代表满足用户请求的操作)、槽(充当用户输入占位符的变量)和示例话语(用户可能用来与您的技能交互的短语)。这些组件中的每一个都在您的技能如何运行以及与用户交互方面发挥着至关重要的作用。
测试您的 Alexa 技能是开发过程中的重要部分。您可以在 Alexa Skills Kit 开发者控制台中测试您的技能。只需导航到控制台中的“测试”选项卡,即可开始测试您的技能。您可以键入或说出短语以查看您的技能如何响应,还可以测试多轮对话以查看您的技能如何处理正在进行的交互。
构建和测试 Alexa 技能后,您可以在 Alexa Skills Kit 开发者控制台中提交进行认证。在提交技能之前,请确保您已完成开发过程中的所有必要步骤,包括设置技能的元数据和彻底测试您的技能。提交技能后,它将经过审核过程,然后才能发布。
Alexa Presentation Language (APL) 是一种允许开发者为 Alexa 技能创建视觉和音频体验的语言。使用 APL,您可以为带有屏幕的设备设计丰富、交互式的显示,还可以为没有屏幕的设备创建音频响应。APL 是增强 Alexa 技能用户体验的强大工具。
要在您的 Alexa 技能中使用 APL,您需要在技能的响应中包含 APL 指令。这些指令定义响应的视觉和音频组件。您可以使用 Alexa Skills Kit 开发者控制台中的 APL 创作工具设计您的 APL 文档,该工具提供了一个用于创建和预览设计的可视化界面。
用于游戏的 Alexa Web API 是一组 Web 技术,允许开发者为带有屏幕的 Alexa 设备创建视觉丰富且交互的游戏体验。使用用于游戏的 Alexa Web API,您可以使用标准 Web 技术(如 HTML、CSS 和 JavaScript)来构建您的游戏体验。
要在您的 Alexa 技能中使用用于游戏的 Alexa Web API,您需要在技能的清单中包含用于游戏的 Alexa Web API 接口。然后,您可以使用 Alexa.Presentation.HTML.Start 指令启动 Web 应用程序会话,并可以使用 Alexa.Presentation.HTML.HandleMessage 指令处理来自 Web 应用程序的消息。
Alexa Skills Kit (ASK) 是一套自助服务 API、工具、文档和代码示例的集合,使您可以更轻松地为 Alexa 构建技能。使用 ASK,您可以利用亚马逊在语音设计领域的知识和开创性工作。
您可以通过利用其各种功能和工具来使用 Alexa Skills Kit (ASK) 构建您的 Alexa 技能。ASK 提供了一系列资源,包括 ASK SDK、ASK CLI、ASK 开发者控制台和 ASK 文档。这些资源提供了一套全面的工具,用于构建、测试和发布您的 Alexa 技能。
以上是如何建立第一个亚马逊的Alexa技能的详细内容。更多信息请关注PHP中文网其他相关文章!