前言
随着互联网技术的发展,智能音箱正成为智能家居的重要组成部分,而 Amazon 的 Alexa 是其中最受欢迎的智能音箱之一。为了对接 Alexa 平台,开发者需要使用 Alexa Skills Kit (ASK) 平台来创建技能。而为了更好地管理和部署技能代码,使用 npm 包 node-alexa-smapi 是一种很好的选择。
node-alexa-smapi 简介
node-alexa-smapi 是一个 npm 包,提供了一个简单的 API 来和 Alexa Skills Management API (SMAPI) 执行操作,如上传和更新技能代码、发布、部署、测试和撤销技能等。该包是以 Node.js 编写的,并提供了一些简单的方法来操作 SMAPI 接口。
安装
首先,我们需要在安装 node-alexa-smapi 之前,确认已经安装了 Node.js 和 NPM。如果还没有,请先安装它们。
要安装 node-alexa-smapi,请在终端中运行以下命令:
npm install --save node-alexa-smapi
使用方法
在使用 node-alexa-smapi 之前,你需要创建一个 Alexa Developer Console 帐号,并创建一个新的 Alexa 技能。在创建完毕后,你将获得一个 clientId 和 clientSecret 用于后续的操作。
基本操作
我们可以通过以下方式在 Node.js 代码中使用 node-alexa-smapi:
-- -------------------- ---- ------- ----- ------------------------ - ---------------------------- ----- ----------- - --- -------------------------- --------- ------------------- ------------- ----------------------- ------------- ----------------------- --- -- ------------ ----------------------------------- ---- -------------- -- - -------------------- -- -------------- -- - ----------------------------- ---
在上面的代码中,我们首先导入 node-alexa-smapi,然后通过 new SkillManagementApiClient() 创建了一个 smapiClient 并传入了 clientId、clientSecret 和 refreshToken(我们将在后面介绍如何获得 refreshToken)。
然后,我们使用 smapiClient.listSkills() 方法列出了当前帐号中的所有技能,并将结果打印到控制台。
获得 refreshToken
在使用 Alexa Skills Management API 之前,你需要获得一个 refreshToken。你可以通过以下步骤获得 refreshToken:
- 登录 Alexa Developer Console。
- 点击 "Your Alexa Consoles",选择 "Security Profiles"。
- 在 "Security Profiles" 模块中,选择一个工程。
- 选择一个 Skill 并进入 "Overview" 面板。
- 点击 "Permissions" 并在 "OAuth 2.0 Client ID" 下面找到 "Refresh Token" 标签。
- 点击 "Generate New Refresh Token" 并在弹出窗口中输入 "Rewrite profile name for creating new token" 和权限列表,然后点击 "Generate Refresh Token"。
- 记录新生成的 refreshToken,这将是后续使用 SMAPI 的授权凭证。
示例代码
接下来,我们将创建一个 Alexa 技能并使用 node-alexa-smapi 对其进行管理。我们将创建一个简单的 Node.js 程序,该程序将在 Alexa 技能的帮助下向用户提供一个欢迎消息。
1. 创建项目
在你的工作目录中,通过以下命令创建一个新的 Node.js 项目:
mkdir my-skill cd my-skill npm init -y
2. 安装依赖
运行以下命令安装所需的依赖项:
npm install --save express alexa-sdk node-alexa-smapi
3. 编写代码
在 my-skill 目录下创建一个名为 index.js 的文件,并将以下代码复制到其中:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----- - --------------------- ----- ------------------------ - ---------------------------- ----- --- - ---------- ----- ----------- - --- -------------------------- --------- ------------------- ------------- ----------------------- ------------- ----------------------- --- ----- ------------ - ------- -------- --------- -- - ----- ----- - -------------------- -------- ---------- ----------- - ------------------ --------------------------------- ---------------- -- ----- -------- - - ---------------- -------- -- - ------------------ ------- ----- ------ - -- ------------- ----- ---- -- - ---------------------- ----- -------- -- - ------------------- --- --- ------------ ----- ---- -- - ------------ ----- -------- --- ---------------- -- -- - -------------------- --- --------- -- ---- -------- ---
在上面的代码中,我们创建了一个 express 应用程序,并将 SkillManagementApiClient 和 Alexa SDK 导入到应用程序中。
然后,我们使用 SkillManagementApiClient 创建了一个 smapiClient 并传入了 clientId、clientSecret 和 refreshToken。
接下来,我们定义了 skillHandler,并使用 Alexa.handler() 方法将其传递给 Alexa。我们还为 LaunchRequest 事件注册了一个处理程序,该处理程序将欢迎消息发送回用户。
在应用程序中,我们通过将请求体传递给 skillHandler,并使用 res.json() 方法来响应 Alexa 技能的请求。
4. 部署和测试
最后,我们可以使用 npm start 命令来启动我们的程序,并使用 Alexa Developer Console 测试它。必须使用 HTTPS 将应用程序部署到生产环境中,但为了方便,我们可以在本地使用 ngrok 来启动一个加密的隧道,并将请求转发到本地端口。
在终端中,我们可以使用以下命令启动 ngrok:
ngrok http 3000
启动后,ngrok 将在终端中显示一个 HTTPS URL。复制此 URL 并访问 Alexa Developer Console 中的 Skill Information 面板,将其添加到 "Endpoint" 字段中。
现在,我们已经成功创建了一个使用 node-alexa-smapi 的 Alexa 技能!用户将通过说 "Alexa, start my skill" 启动技能,然后 Alexa 将发送一个欢迎消息。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067356890c4f7277583c9b