前言
如果有个设备能把你说的话传递到电脑中,这样你可以基于他开发一些软件,动动嘴就可以操作电脑,我想,这一定会给生活添加一些乐趣,而小爱音箱是个不二选择,开发也比较简单,如果用官方方式开发,还需要开发服务端程序,下面说下小爱音箱开发流程。
首先需要在小爱音箱开发官方注册一个应用,如果你有小爱,可能会对他说过进入XXX,这个XXX就是一个应用,而第一步就是填写XXX的信息,我们暂时先把XXX叫成"小林的电脑",之后,你对他说进入小林的电脑,小爱就会处于进入应用的状态,后续你对他说的所有话,都将通过HTTP转发给你的服务器,这里的服务器则是你自己配置的地址。
但是还需要先对小爱说进入开发者模式,否则进入不到你的应用,除非你的应用上线,有的小爱可能进不去开发者模式,如果进去了,可能也不会回复你,但是在小爱APP中的对话记录中会显示已切换为开发者模式。
接着说,请求光到达服务器还没什么用啊,需要进入你的电脑才行,所以你还需要开发一个客户端,连接到你的服务器,你的服务器收到小爱服务器请求后,在转发给你电脑,就这样,小爱音箱识别你的话后磕磕绊绊的才能进入你的电脑。
安装服务端
而为此我把这些代码都封装好了,只需要调用。
那么第一步就是配置服务端,但你首先要安装CoolDesktop,CoolDesktop是一个我开发的服务器管理软件,可以从软件商店中安装小爱开发平台APP,如下图.
CoolDesktop的下载地址点击这里
安装后在启动器中将他打开,如下图。
端口是为客户端提供的,注意如果是云服务器要开放端口。
加入客户端依赖
下载地址
下载后将这个依赖加入到你的项目中,下面用gradle示例。
implementation(files("/home/HouXinLin/project/java/xiaoai-client/build/libs/xiaoai-client-1.0.jar"))
下面是启动方法。
public class Main {public static void main(String[] args) {XiaoAi xiaoAi = new XiaoAi("服务器地址",8086,"密码");xiaoAi.start(Main.class);}
}
那么如何接收小爱的语音呢?
很简单,新建一个类,代码如下。
@XiaoAiAction
public class Actions {@Action(name = "打开终端")public void startTerminal(){try {Runtime.getRuntime().exec("/usr/bin/gnome-terminal");} catch (IOException e) {e.printStackTrace();}}@ActionDefaultpublic String defaultAction(String value){System.out.println(value);return "OK";}
}
这个类必须标有@XiaoAiAction注解,否则不被识别。
@Action注解标注在方法上,name值是当小爱听到这句话时,需要做的事情,比如,当小爱听到打开终端时,调用一个程序,如果返回值是String,小爱会将这个文字朗读出来,如果是void,则默认回复好的。
@ActionDefault注解是当没有方法能处理这个语音的时候,将会调用此方法,value参数是小爱识别到的文字,返回值必须是String。
另外需要注意的是标有@XiaoAiAction的类必须在start(Main.class)
参数的子包路径下,比如Main.java在com.h.xiaoai包下,那么标有@XiaoAiAction也必须在com.h.xiaoai下,如果在com.h则扫描不到。
开放URL
CoolDesktop对请求都会进行校验,那么如果不进行某个地址开放,小爱服务器将进入不到系统,所以,还需要在设置中增加一个开放url,地址为/100003/xiaoai/push/
。
小爱服务器限制
小爱服务器只支持https,还需要配置一个nginx+ssl证书,ssl证书就不说了,配置好后加入下面这个配置,那么小爱服务器调用的地址就是https://你的域名/xiaoai/
,将这个地址配置到小爱开发者官网中即可。
location /xiaoai/ {proxy_pass http://127.0.0.1:3389/100003/xiaoai/push/;
}
这样应用就开发完了,加入开机自启后,敬请体验把