可以使用AlexaLambda函数或RESTAPI端点开发Alexa技能。Lambda函数是Amazon实现AWS中提供的无服务器功能。Amazon建议使用Lambda函数,尽管它们不容易调试。虽然您可以登录到CloudWatch日志,但您不能命中断点并进入代码。

这使得对Alexa请求的实时调试成为一项非常困难的任务。在这篇文章中,我们将使用Node.js、NPM和AWSLambda函数来实现AmazonAlexa的自定义技能。这个技能基本上就是一个“Hello World”的例子。通过这篇文章,您将能够为AmazonAlexa创建一个自定义技能,通过使用Node.js实现功能,并从本地计算机和AWS开始您的自定义技能。

先决条件

以下是该项目使用的技术:

  • 亚马逊开发者帐户-如何得到它.
  • AWS账户-免费报名.
  • 问问CLI-安装和配置Ask CLI.
  • v10.x.
  • VisualStudio代码
  • NPM包装经理。
  • Alexa请求Node.js(版本>2.7.0)
  • ngrok.

Alexa技能工具包命令行接口(Ask CLI)是用于管理Alexa技能和相关资源(如AWS Lambda函数)的工具。使用ASKCLI,您可以访问技能管理API,它允许您从命令行以编程方式管理Alexa技能。我们将使用这个强大的工具来创建、构建、部署和管理我们的“HelloWorld”技能。我们开始吧!

使用ASKCLI创建技能

对于创建Alexa技能,我们将使用之前配置的deAskCLI。首先,我们必须执行以下命令:

ask new

此命令将一步一步地运行和交互创建过程:

Ask CLI要问的第一件事是我们的技能的运行时。在我们的情况下,Node.js v10:

Setting Skill runtime

第二步是我们的技能所基于的模板。在本例中,我们将选择Hello World模板:

Selecting Hello World template

最后,Ask CLI将向我们询问该技能的名称:

Adding name of our Skill

项目档案

这些是该项目的主要文件:

├───.ask

│ config

├───.vscode

│ launch.json

├───hooks

├───lambda

│ └───custom

│ ├───errors

│ ├───intents

│ ├───interceptors

│ ├───utilities

│ ├─── index.js

│ ├─── local-debugger.js

│ └─── package.json

├───models

│ es-ES.json

└───skill.json

  • ASK:包含ASKCLI配置文件的文件夹。在执行命令之前,此配置文件将保持为空。ask deploy
  • vscode/launch.json启动首选项以在本地运行您的本地测试技能。此设置启动lambda/custom/local-debugger.js。此脚本在http://localhost:3001用于调试技能。
  • 钩子:包含钩子脚本的文件夹。亚马逊提供了两个钩子,post_new_hook和pre_deploy_hook.
  1. post_new_hook技能创造后执行。InstituteNode.js运行npm install在每一个信息源中skill.json
  2. pre_deploy_hook在技能部署之前执行。在Node.js中运行npm install在每一个信息源中skill.json也是。
  • LAMBDA/定制:包含该技能的AWS Lambda函数的源代码的文件夹:
  1. index.js*Lambda主要入口点。
  2. utilities/languageStrings.js::图书馆使用的i18n字典i18next,它允许我们在不同的配置语言中运行相同的技能。
  3. package.json这个文件是Node.js生态系统的核心,是理解和使用Node.js、NPM甚至现代JavaScript的一个基本部分。
  4. utilities/util.js*具有有用功能的文件。
  5. local-debugger.js*用于本地调试我们的技能。
  6. errors*包含所有错误处理程序的文件夹。
  7. intents*包含所有意图处理程序的文件夹。
  8. interceptors在这里你可以找到所有的拦截器。
  • 模型:包含技能交互模型的文件夹。每个交互模型都在一个根据地区命名的JSON文件中定义。比如Es-ES.json。
  • skill.json技能表现。我们项目中最重要的文件之一。

JavaScript中的Lambda函数

Ask SDK for Node.js允许您花费更多的时间实现特性,减少编写样板代码的时间,从而使您更容易构建高度吸引人的技能。

您可以在它们的官方网站上找到文档、示例和有用的链接。GitHub储存库

我们的lambda项目中的主要JavaScript文件是index.js,位于lambda/custom文件夹。此文件包含所有处理程序、拦截器和导出exports.handler.

这个exports.handler函数每次为该特定函数启动AWSLambda时都会执行。理论上,AWS Lambda函数仅仅是一个函数。这意味着我们需要定义调度逻辑,以便单个函数请求可以路由到适当的代码,因此是处理程序。

/**

* This handler acts as the entry point for your skill, routing all request and response

* payloads to the handlers above. Make sure any new handlers or interceptors you've

* defined are included below. The order matters - they're processed top to bottom

* */

exports.handler = Alexa.SkillBuilders.custom()

.addRequestHandlers(

LaunchRequestHandler,

HelloWorldIntentHandler,

HelpIntentHandler,

CancelAndStopIntentHandler,

FallbackIntentHandler,

SessionEndedRequestHandler,

IntentReflectorHandler)

.addErrorHandlers(

ErrorHandler)

.addRequestInterceptors(

LocalisationRequestInterceptor)

.lambda();

查看一下LaunchRequestHandler作为用Node.js编写的Alexa技能处理程序的一个例子:

const LaunchRequestHandler = {

//Method that returns true if this handler can execute the current request

canHandle(handlerInput) {

return Alexa.getRequestType(handlerInput.requestEnvelope) === 'LaunchRequest';

},

//Method that will process the request if the method above returns true

handle(handlerInput) {

const speakOutput = handlerInput.t('WELCOME_MSG');

return handlerInput.responseBuilder

.speak(speakOutput)

.reprompt(speakOutput)

.getResponse();

}

};

使用VisualStudio代码生成技能

package.json,我们几乎总是会找到特定于项目的元数据。这些元数据有助于识别项目,并作为用户和贡献者获取项目信息的基线。

以下是该文件的外观:

{

"name": "alexa-nodejs-lambda-helloworld",

"version": "1.0.0",

"description": "Alexa HelloWorld example with NodeJS",

"main": "index.js",

"scripts": {

"test": "echo "Error: no test specified" && exit 1"

},

"repository": {

"type": "git",

"url": "https://github.com/xavidop/alexa-nodejs-lambda-helloworld.git"

},

"author": "Xavier Portilla Edo",

"license": "Apache-2.0",

"dependencies": {

"ask-sdk-core": "^2.7.0",

"ask-sdk-model": "^1.19.0",

"aws-sdk": "^2.326.0",

"i18next": "^15.0.5"

}

}

有了JavaScript或Node.js,构建就有点不同了。为了提高我们的技能,我们可以运行以下命令:

npm install

此命令安装包和它所依赖的任何包。如果包有包锁或收缩包装文件,则依赖项的安装将由该文件驱动。

这可能是建立我们Alexa技能的方法。

使用VisualStudio代码运行技能

这个launch.json文件在.vscode文件夹具有VisualStudio代码的配置,允许我们在本地运行lambda:

{

"version": "0.2.0",

"configurations": [

{

"type": "node",

"request": "launch",

"name": "Launch Skill",

// Specify path to the downloaded local adapter(for Node.js) file

"program": "${workspaceRoot}/lambda/custom/local-debugger.js",

"args": [

// port number on your local host where the alexa requests will be routed to

"--portNumber", "3001",

// name of your Node.js main skill file

"--skillEntryFile", "${workspaceRoot}/lambda/custom/index.js",

// name of your lambda handler

"--lambdaHandler", "handler"

]

}

]

}

此配置文件将执行以下命令:

node --inspect-brk=28448 lambdacustomlocal-debugger.js --portNumber 3001 --skillEntryFile lambda/custom/index.js --lambdaHandler handler

此配置使用local-debugger.js文件运行TCP服务器倾听

对于新的传入技能请求,将建立新的套接字连接。从套接字上接收到的数据中,提取请求主体,将其解析为JSON,并将其传递给技能调用者的lambda处理程序。来自lambda处理程序的响应被解析为指定的HTTP 200消息格式这里。响应被写入套接字连接并返回。

配置了Launch.json文件并了解了本地调试器的工作方式,现在是单击Play按钮的时候了:

Running initial Skill

使用VisualStudio代码调试技能

按照前面的步骤,现在可以在所有JS文件中的任何地方设置断点,以便调试技能:

Debugging Skill

本地测试请求

我肯定你已经知道那个著名的工具电话了Postman。RESTAPI已经成为为您的服务提供公共和安全接口的新标准。虽然REST已经变得无处不在,但它并不总是容易测试的。Postman使测试和管理HTTPRESTAPI更加容易。Postman为我们提供了导入、测试和共享API的多种特性,这将帮助您和您的团队从长远来看更有效率。

运行应用程序后,将在http://localhost:3001。有了Postman,你可以模仿任何Alexa的请求。

例如,您可以测试LaunchRequest:

{

"version": "1.0",

"session": {

"new": true,

"sessionId": "amzn1.echo-api.session.[unique-value-here]",

"application": {

"applicationId": "amzn1.ask.skill.[unique-value-here]"

},

"user": {

"userId": "amzn1.ask.account.[unique-value-here]"

},

"attributes": {}

},

"context": {

"AudioPlayer": {

"playerActivity": "IDLE"

},

"System": {

"application": {

"applicationId": "amzn1.ask.skill.[unique-value-here]"

},

"user": {

"userId": "amzn1.ask.account.[unique-value-here]"

},

"device": {

"supportedInterfaces": {

"AudioPlayer": {}

}

}

}

},

"request": {

"type": "LaunchRequest",

"requestId": "amzn1.echo-api.request.[unique-value-here]",

"timestamp": "2020-03-22T17:24:44Z",

"locale": "en-US"

}

}

部署你的Alexa技能

在代码准备就绪之后,我们需要将其部署到AWS Lambda上,以便将其连接到Alexa。

在部署Alexa技能之前,我们可以展示config文件在.ask文件夹它是空的:

{

"deploy_settings": {

"default": {

"skill_id": "",

"was_cloned": false,

"merge": {}

}

}

}

使用ASKCLI部署Alexa技能:

ask deploy

正如官方文件所述:

当尚未部署本地技能项目时,请询问CLI在开发阶段为您的帐户创建一个新技能,然后部署该技能项目。如果适用,Ask CLI在AWS帐户中创建一个或多个新的AWSLambda函数,并上传Lambda函数代码。具体来说,要求CLI执行以下操作:

在技能项目的配置文件(在技能项目文件夹中,它位于技能项目文件夹中)中查找现有的技能ID。如果配置文件不包含技能ID,请询问CLI使用技能项目的skerc.json文件中的技能清单创建新技能,然后将技能ID添加到技能项目的配置文件中。

查看您的技能项目的清单(asc.json文件),了解该技能发布的区域设置。这些都列在工程量清单中,即InformationInformationlocales对象中。对于每个地区,Ask CLI都会在技能项目的Models文件夹中查找相应的模型文件(例如,es-ES.json),然后将模型上传到您的技能中。询问CLI等待上传的模型构建,然后将每个模型的eTag添加到技能项目的配置文件中。

在您的技能项目的清单中查看AWS Lambda端点的清单(asc.json文件)。这些都列在jav.apis..终结点或明显.apis.区域..端点对象中(例如,jav.apis.custom.终结点或明显.apis.Smart Home.Regis.NA.终结点)。每个端点对象都包含一个sourceDir值,也可以选择URI值。的内容。sourceDir文件夹到相应的AWS Lambda函数,并将Lambda函数命名为与URI值相同的函数。有关Ask CLI如何执行上载到Lambda的详细信息,请参阅AWS Lambda部署详细信息。

在您的技能项目文件夹中查找技能产品,如果找到,将它们上传到您的技能中。有关技能内产品的更多信息,请参见技能采购概述。

在执行上述命令之后,我们将拥有config正确填写的档案:

{

"deploy_settings": {

"default": {

"skill_id": "amzn1.ask.skill.ed038d5e-61eb-4383-a480-04e3398b398d",

"was_cloned": false,

"merge": {},

"resources": {

"manifest": {

"eTag": "faa883c92faf9a495407f0d03d5e3790"

},

"interactionModel": {

"es-ES": {

"eTag": "c9e7fd862be0dd3b21252b8bca53c7f7"

}

},

"lambda": [

{

"alexaUsage": [

"custom/default"

],

"arn": "arn:aws:lambda:us-east-1:141568529918:function:ask-custom-alexa-nodejs-lambda-helloworld-default",

"awsRegion": "us-east-1",

"codeUri": "lambda/custom",

"functionName": "ask-custom-alexa-nodejs-lambda-helloworld-default",

"handler": "index.handler",

"revisionId": "ef2707ee-a366-484d-a4b7-3826a44692dd",

"runtime": "nodejs10.x"

}

]

}

}

}

}

直接来自Alexa的测试请求

ngrok是一个非常酷的轻量级工具,它在本地机器上创建一个安全隧道,以及一个可用于浏览本地站点或API的公共URL。

当ngrok运行时,它侦听本地web服务器正在运行的同一个端口,并代理对本地计算机的外部请求。

从那里,这是一个简单的步骤,让它听你的Web服务器。假设您正在3001端口上运行本地Web服务器。在你的终端里,你可以输入:ngrok http 3001。这将启动ngrok侦听端口3001并创建安全隧道:

所以现在,你得去Alexa开发者控制台,去你的技能>端点>https,添加上面生成的HTTPS URL。

选择我的发展端点作为子域选项,然后单击页面顶部的保存端点。

去试验选项卡在Alexa开发者控制台并启动您的技能。

Alexa Developer控制台将向ngrok端点发送一个HTTPS请求(https://20dac120.ngrok.io),这将其路由到您在WebAPI服务器上运行的技能。

结语

这是使用Node.js学习Alexa技能的基本教程。正如您在本例中所看到的,Alexa Node.js技能工具包和Alexa工具(如Ask CLI)可以帮助我们很大程度上帮助我们,它们还为我们提供了以一种简单的方式创建技能的可能性。我希望这个例子项目对你有帮助。

我希望它会有用!如果您有任何疑问或问题,请立即与我联系或在下面发表评论!

编码愉快!

为感谢您对我们的认可,特意准备了一些IT入门和进阶的干货

包括:Java、UI设计、H5前端、Python+人工智能、软件测试和新媒体运营六大学科视频资料。以及IT就业大礼包。

线上视频、音频,随时学习观看

关注我们并私信“资料”即可获取。

android studio使用nodejs本地服务器json数据_使用Node.js的Alexa技巧相关推荐

  1. 如何在安卓上android studio上构建本地服务器

    首先我们要下载一个jdk,然后环境变量把JDK配置全机任意地方都可操作,不懂的可以直接百度 网上很多教程都说10.1.1.0代替localhost或者127.0.0.1,其实有的电脑ip并非如此,导致 ...

  2. node爬取app数据_使用node.js如何爬取网站数据

    数据库又不会弄,只能扒扒别人的数据了. 搭建环境: (1).创建一个文件夹,进入并初始化一个package.json文件. npm init -y (2).安装相关依赖: npm install -- ...

  3. python爬取大众点评数据_利用Node.js制作爬取大众点评的爬虫

    前言 Node.js天生支持并发,但是对于习惯了顺序编程的人,一开始会对Node.js不适应,比如,变量作用域是函数块式的(与C.Java不一样):for循环体({})内引用i的值实际上是循环结束之后 ...

  4. Flutter 项目编写 第三方插件库文件引入,本地图片 json数据引入解析

    FlutterDemo是如何一步一步搭建起来的 最初就是直接新建flutter项目,就会自动建立一个入门项目.(开始项目前,需先学习Dart语言) flutter项目代码都在lib目录下编写: 新建包 ...

  5. android studio数据库存储数据,如何使用API​​ 23在android studio中的数据库中存储数据?...

    大多数时候我不会发布任何内容,因为我可以在其他帖子中找到我需要的所有内容,但是现在我已经有几天了,您如何在数据库中存储任何内容?这是我的Java代码如何使用API​​ 23在android studi ...

  6. Ace教你一步一步做Android新闻客户端(三) JSON数据解析

    对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式,现在给大家讲解一下json这个知识点, 1 如何通过json-lib和gson这两个json解析库来对解析我们的j ...

  7. WIFi 开关控制实现-ESP8266 物联网 android studio arduino QT多线程服务器

    WIFi 开关控制实现-ESP8266 物联网 android studio arduino QT多线程服务器 WIFI局域网/外网 开关控制实现-物联网ESP8266 android QT 简介:本 ...

  8. 本地服务器json文件,从本地ftp服务器读取Json文件

    我是存储在本地服务器中的名为File1.js的json文件.我想读取json文件的内容,并希望在其他文件中显示数据.我已经尝试使用JavaScript编码,但它不能正常工作.从本地ftp服务器读取Js ...

  9. 小程序模拟服务器,小程序模拟请求服务器json数据

    那么,怎么请求服务器json数据? 如果你是一枚前端,不会写后端接口的话 又想测试数据,看自己写的效果的时候 不要慌 那么,把你的json放在服务器底下 模拟请求服务器json数据即可 步骤: 1用能 ...

最新文章

  1. HTML5 音频audio 和视频video实用基础教程
  2. python3多线程协程_python3-----多进程、多线程、多协程
  3. java 对象 转换 工具类_Java中excel与对象的互相转换的通用工具类编写与使用(基于apache-poi-ooxml)...
  4. IP地址专题二:子网掩码入门
  5. asp.net在ie7中使用FileUpload上传前预览图片
  6. 存储过程系列之存储过程返回值总结
  7. kylin版本_kylin多维数据分析(一)单机部署
  8. linux小米随身wifi,小米随身wifi for mac版详细使用图文步骤
  9. Aspose.Cells生成Excel图表
  10. TKMybatis的使用大全和例子(example、Criteria、and、or)
  11. xboxone硬盘坏的表现_移动硬盘打不开认不到以后的数据恢复所需要涉及到知识与恢复过程...
  12. 论文解读:PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
  13. python八卦阴阳_GitHub - meetingFuture/godwill: 周易八卦,占一卦,知来世,肖今生。...
  14. 高级软件程序员养成记
  15. 今年-计划写一本java方面的书籍
  16. expert个人版 sqlite_SQLite Expert Personal
  17. 使用IDL显示DICOM文件的信息
  18. OE分布式智能云生态助力全民挖矿
  19. 伦敦旅游必玩的密室逃脱体验——《神探夏洛克:官方现场游戏》
  20. 【C 语言基础】C 世界函数的故事,今天带你详细了解各组件原理

热门文章

  1. QDU第一届程序设计大赛——E到I题解法(非官方题解)
  2. erlang进程的调度效率
  3. 计算机网络 浏览器发送http请求的过程分析
  4. EOS绑定以太坊地址
  5. css border 制作三角形
  6. winform groupbox控件放到窗体中间位置
  7. 执行目标文件引发的问题:syntax error: word unexpected (expe...
  8. COM Surrogate 遇到问题需要关闭。我们对此引起的不便表示抱歉
  9. web.config文件中的特殊字符处理
  10. *17.解释一下最小生成树