关于Java代码对接Alexa以及部署到Lambda
说明:我的Java项目是基于Maven管理的,新手可以先去了解Maven
1.创建Java maven项目,用于对接Alexa,需要上传到Lambda
在pom.xml文件中,引入对接alexa的jar包
<dependency>
<groupId>com.amazon.alexa</groupId>
<artifactId>ask-sdk</artifactId>
<version>2.3.4</version>
</dependency>
<!-- aws iot -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-iot-device-sdk-java</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-iot-device-sdk-java-samples</artifactId>
<version>1.2.0</version>
</dependency>
由于项目需要打包成jar包或者其他包,需要引入打包插件
<build>
<finalName>lhzm-business-alexa</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2.创建AlexaHandler.java,在类中创建handleRequest方法,用于接收Alexa发送的设备控制指令
handleRequest代码如下:
/**
* 处理Alexa指令请求公开方法
* @param inputStream
* @param outputStream
* @param context
*/
public static void handleRequest(InputStream inputStream, OutputStream outputStream, Context context){
try {
//获取请求流数据
String requestInfo = AlexaUtil.getRequest(inputStream);
//解析请求数据
JSONObject requestJsonObject = new JSONObject(requestInfo);
//获取请求数据JSON体directive指令
JSONObject directive = (JSONObject) requestJsonObject.get("directive");
//获取directive指令中的头部信息
JSONObject header = (JSONObject) directive.get("header");
//解析头部信息参数
String namespace = header.optString("namespace","INVALID");//指令名称
//定义响应结果信息
String result = "";
//判断当前用户的指令:授权接口
if(namespace.equalsIgnoreCase("Alexa.Authorization") && header.getString("name").equalsIgnoreCase("AcceptGrant")){
//具体实现,可以在评论@我
}
//判断当前用户的指令:发现设备
if (namespace.equalsIgnoreCase("Alexa.Discovery")){
//具体实现,可以在评论@我
}
//判断当前用户的指令:操作设备开关
if(namespace.equalsIgnoreCase("Alexa.PowerController")){
//具体实现,可以在评论@我
}
//响应alexa指令
outputStream.write(result.getBytes(Charset.forName("UTF-8")));
}catch (Exception e){
e.printStackTrace();
}
}
3.对项目执行maven打包命令,生成jar包,如 lhzm-business-alexa.jar
4.进入到Lambda后台(可以参考第一篇博客),上传刚刚生成的jar包。关于项目的包名,类名,方法名一定要对应好