网易首页 > 网易号 > 正文 申请入驻

如何使用Spring Boot的Alexa技巧?

0
分享至

您可以通过扩展一个servlet来构建Alexa的自定义技能,该servlet接受来自云中Alexa服务的请求并向其发送响应。

本项目将介绍如何使用SpringBoot和HTTPservlet映射示例构建Alexa技能。

可以通过以下方法实现servlet映射ServletRegistrationBean在SpringBoot中,以及使用Spring注释。在本例中,我们将使用ServletRegistrationBean类将Alexaservlet注册为Springbean。

先决条件

这里有在这个项目中使用的技术。

  • Java 1.8

  • Alexa技能工具包2.29.0

  • Spring Boot 2.5.0.RELEASE

  • Maven 3.6.1

  • IntelliJ IDEA

  • ngrok

项目结构

该项目的结构如下:

├────src
2
│ └───main
3
│ ├───java
4
│ │ └───com
5
│ │ └───xavidop
6
│ │ └───alexa
7
│ │ ├───configuration
8
│ │ ├───handlers
9
│ │ ├───properties
10
│ │ └───servlet
11
│ │
12
│ └───resources
13
│ application.properties
14
│ log4j2.xml
15
└── pom.xml

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

  • 配置*该文件夹具有WebConfig类,它将注册AlexaHTTPservlet。

  • 操作者所有的alexa处理程序。他们将处理所有的Alexa请求。

  • 特性在这里你可以找到PropertiesUtils类读取Springapplication.propeties档案。

  • Servlet*邮寄请求的入境点在此。这是AlexaServlet.

  • 资源:Alexa、Spring和Log4j2配置。

  • Pom.xml*该项目的依赖性。

Maven属地

这些是本例中使用的依赖项。你可以在pom.xml档案:

Spring Boot:


org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE

Alexa技能工具包:


com.amazon.alexa
ask-sdk
2.29.0

Log4j2:


org.apache.logging.log4j
log4j-api
2.13.1
org.apache.logging.log4j
log4j-core
2.13.1

SpringBootMaven构建插件:



org.springframework.boot
spring-boot-maven-plugin

Alexa HTTP servlet

由于AlexaHTTPservlet支持,您可以在官方GitHub储存库及其SkillServlet类,我们可以使用SpringBoot注册它ServletRegistrationBean如下所示。

这个SkillServlet类从SkilBuilder对象注册技能实例,并提供doPost方法,该方法负责对传入请求进行反序列化,在调用技能之前验证输入请求,以及序列化生成的响应。

我们的AlexaServlet类,位于servlet文件夹扩展SkillServlet注册为servlet之后,它将成为我们的主要入口点。

这个类是这样的:

public class AlexaServlet extends SkillServlet {
public AlexaServlet() {
super(getSkill());
}
private static Skill getSkill() {
return Skills.standard()
.addRequestHandlers(
new CancelandStopIntentHandler(),
new HelloWorldIntentHandler(),
new HelpIntentHandler(),
new LaunchRequestHandler(),
new SessionEndedRequestHandler())
// Add your skill id below
//.withSkillId("")
.build();
}
}

它将接收alexa的所有帖子请求,并将它们发送给位于handlers文件夹,可以管理这些请求。

使用ServletRegistrationBean将AlexaHTTPservlet注册为Springbean

我们需要在Spring配置类中创建该类的bean。最相关的方法ServletRegistrationBean我们在此项目中使用的类是:

  • setServlet::设置要注册的servlet。在我们的情况下,AlexaServlet.

  • addUrlMappings:为servlet添加URL映射。我们用/alexa.

  • setLoadOnStartup::在启动时设置加载servlet的优先级。它不像上面这两种方法那么重要,因为在本例中我们只有一个HTTPservlet。

这个WebConfig类是我们注册AlexaHTTPservlet的地方。以下是我们注册servlet的方式:

@Bean
public ServletRegistrationBean alexaServlet() {
loadProperties();
ServletRegistrationBean servRegBean = new ServletRegistrationBean<>();
servRegBean.setServlet(new AlexaServlet());
servRegBean.addUrlMappings("/alexa/*");
servRegBean.setLoadOnStartup(1);
return servRegBean;
}

设置属性

servlet必须满足某些要求,以处理Alexa发送的请求,并遵守Alexa技能工具包接口标准。有关更多信息,请参见将自定义技能作为Web服务托管在Alexa技能工具包技术文档.

在本例中,您可以设置四个属性。application.properties档案:

  • Server.port使用SpringBoot应用程序的端口。

  • Com.amazon.ask.servlet.disableRequestSignatureCheck*禁用/启用安全性。

  • Com.amazon.speech.speechlet.servlet.timestampTolerance请求的时间戳与当前本地执行时间之间的最大差距。以毫秒为单位。

  • Javax.net.ssl.keyStore*如果第一个属性设置为false然后,您必须指定Keystore文件的路径。

  • Javax.net.ssl.keyStorePassword*如果第一个属性设置为false然后您必须指定Keystore的密码。

使用SpringBoot建立技能

由于它是一个maven项目,您可以构建运行以下命令的SpringBoot应用程序:

mvn clean package

使用SpringBoot运行技能

以Java应用程序的形式运行AlexaSkilAppStadi.java类,即以→Java应用程序的身份运行→

或者,你可以使用:

mvn spring-boot:run

执行主类后,可以将alexa POST请求发送到http://localhost:8080/alexa.

用SpringBoot调试技巧

要将Springboot应用程序调试为JAVA应用程序,即转到Debug→Debug作为→JavaApplication。

或者,如果您使用IntellijIDEA,您可以在AlexaSkillAppStarter班级:

在调试模式下执行主类之后,可以将alexa POST请求发送到http://localhost:8080/alexa并调试技能。

本地测试请求

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

运行应用程序后,将在http://localhost:8080/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"

请注意使用属性完成请求的时间戳字段。com.amazon.speech.speechlet.servlet.timestampTolerance.

直接来自Alexa的测试请求

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

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

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

所以现在你得去Alexa开发者控制台,转到您的技能>端点>https,添加上面生成的https URL,后面是/Alexa。例:https://fe8ee91c.ngrok.io/alexa.

选择MyDevelopment终结点是子域.选项,然后单击页面顶部的保存端点。

转到AlexaDeveloper控制台中的Test选项卡并启动您的技能。

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

结语

对于所有不想在云中托管代码或不想使用AWSLambda函数的开发人员来说,这个示例非常有用。这不是一个问题,因为,正如您在本例中所看到的,Alexa为您提供了以不同方式创建技能的可能性。我希望这个例子项目对你有帮助。

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

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
嘉兴炒房客肠子都悔青了,嘉兴南湖区房价从19000元降至14000元

嘉兴炒房客肠子都悔青了,嘉兴南湖区房价从19000元降至14000元

有事问彭叔
2024-04-24 15:53:23
深夜3点! 曼城倒下, 决战英超黑马, 输球=提前丢冠, 重创瓜迪奥拉

深夜3点! 曼城倒下, 决战英超黑马, 输球=提前丢冠, 重创瓜迪奥拉

创作者_1649388329706
2024-04-24 16:57:20
刚刚还在炒菜,命瞬间就没了,千万不要在厨房做这6件事

刚刚还在炒菜,命瞬间就没了,千万不要在厨房做这6件事

室内设计师有料儿
2024-04-23 11:03:22
火箭与快船3换2交易报价!

火箭与快船3换2交易报价!

晨语者
2024-04-25 09:20:09
涉赌4800万被抓的小团团真实颜值体重被扒:忘开美颜堪比乔碧萝!

涉赌4800万被抓的小团团真实颜值体重被扒:忘开美颜堪比乔碧萝!

听风听你
2024-04-24 21:26:13
曝大S复出录节目现场昏厥,台媒却反而感慨:汪小菲的好机会来了

曝大S复出录节目现场昏厥,台媒却反而感慨:汪小菲的好机会来了

西瓜叨娱乐
2024-04-25 00:50:52
我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

我78岁风流才子和妙龄少妇同居两年后,她怀孕还发财了

叶天辰故事会
2024-04-23 22:26:35
苏纳克宣布“有史以来最大规模军援”!英国军工业转入战时状态

苏纳克宣布“有史以来最大规模军援”!英国军工业转入战时状态

鹰眼Defence
2024-04-24 16:47:10
有没有一瞬间感觉公公婆婆虚伪的都想笑?

有没有一瞬间感觉公公婆婆虚伪的都想笑?

户外阿崭
2024-04-24 10:42:26
线上讨薪!郭艾伦喊话贾跃亭:贾总我的150万什么时候结一下

线上讨薪!郭艾伦喊话贾跃亭:贾总我的150万什么时候结一下

懂球帝
2024-04-25 08:27:11
善恶终有报!“港独分子”陈方安生,现在已活成了一个“笑话”?

善恶终有报!“港独分子”陈方安生,现在已活成了一个“笑话”?

韶华倾覆i
2024-04-24 11:51:55
国乒圈子,马琳陈梦同桌,马龙带2人,王曼昱独处,孙颖莎意外

国乒圈子,马琳陈梦同桌,马龙带2人,王曼昱独处,孙颖莎意外

东球弟
2024-04-25 09:26:22
汪小菲带马筱梅与洪秀柱聚餐,马筱梅得到洪秀柱认可后,害羞掩面

汪小菲带马筱梅与洪秀柱聚餐,马筱梅得到洪秀柱认可后,害羞掩面

星动娱乐时光
2024-04-24 12:35:24
颜值即正义?男子吐槽女儿懒惰,网友却争相表示愿意“当牛做马”

颜值即正义?男子吐槽女儿懒惰,网友却争相表示愿意“当牛做马”

佑宛故事汇
2024-04-24 11:03:18
工友因父亲身份被批斗,我把高考名额给他,多年后提拔我当省长

工友因父亲身份被批斗,我把高考名额给他,多年后提拔我当省长

叶天辰故事会
2024-04-23 08:00:03
打疯了!新版雷霆三少合砍80分,狂屠鹈鹕32分!

打疯了!新版雷霆三少合砍80分,狂屠鹈鹕32分!

篮球扫地僧
2024-04-25 12:23:46
特维斯被紧急送往医院

特维斯被紧急送往医院

星耀国际足坛
2024-04-25 01:25:03
恭喜张柏芝喜添小公主,大家都为她祝贺,网友们也为她点赞?

恭喜张柏芝喜添小公主,大家都为她祝贺,网友们也为她点赞?

娱乐圈酸柠檬
2024-04-25 06:42:45
事闹大了,美航母冲向黄岩岛,15国重兵也跟上,中方深夜接到电话

事闹大了,美航母冲向黄岩岛,15国重兵也跟上,中方深夜接到电话

朝晖前哨
2024-04-25 10:06:38
TikTok宣布自愿暂停TikTok Lite奖励系统,寻求解决欧盟担忧

TikTok宣布自愿暂停TikTok Lite奖励系统,寻求解决欧盟担忧

界面新闻
2024-04-25 07:18:34
2024-04-25 12:46:44
源码时代
源码时代
专注中国高端IT教育培训
358文章数 61关注度
往期回顾 全部

科技要闻

雷军:希望小米SU7能成为苹果用户购车首选

头条要闻

泰国坠崖孕妇:他当时以为我死了 看到救护车来了折返

头条要闻

泰国坠崖孕妇:他当时以为我死了 看到救护车来了折返

体育要闻

足智多谋的哈姆,温水里的青蛙

娱乐要闻

心疼!伊能静曝儿子曾被狗仔追到洗手间

财经要闻

先涨价再降价,特斯拉“打脸”只用20天?

汽车要闻

这灯效我能看半小时 奥迪Q6L e-tron有备而来

态度原创

旅游
房产
健康
教育
亲子

旅游要闻

“宝总同款”?布林肯入住上海和平饭店总统套房

房产要闻

涉及黄埔、番禺、增城!广州新一轮大规模征地启动

这2种水果可降低高血压死亡风险

教育要闻

一年级考试附加题,很多学生完全读不懂题目,也是一脸蒙圈

亲子要闻

笑不活了,七秒记忆的小鱼儿,遇到心爱玩具记忆力大爆发

无障碍浏览 进入关怀版