谷歌语音对接-GoogleAssistant-smart-home
google音箱国内使用的不多,有这个需求的时候在网上找文档找了半天,遇到的坑也挺多的,主要是国内相关文档不多
事先准备
首先需要能翻墙的wifi以及音箱,这块就不多说了
其次需要在google cloud platform创建项目(听说先创建action再创建项目会出现问题,没试过)
再开通api与服务点击 api和服务-> 凭据(需要开通home graph api,就是进去之后点击manage按钮就可以了)
选择刚才创建的项目
创建服务账号
创建服务账号,只用服务账号名称与服务账号id,点击完成
下载密钥
我这之前已经创建了,可以创建了再下载程json文件保存在本地
action on google
之后就是在action on google 创建action,此时创建的时候选择项目会出现下拉列表也就是刚才在goole cloud platform创建的那个
这个地方需要填写的是之后做QUERY,EXECUTE,SYNC等需要调用的接口
token url 跟 authorization url填写自己服务的地址
做完这些相当于配置部分的已经全部完成了
代码部分
我这边是用的java,当时存在的问题是调用设备状态上报以及requestSync的时候无法发送请求,后来发现是因为本地虽然可以翻墙,但是给外网发送请求还是不行的
就是上图这两个地方,第一个地方去google 服务拿token,但是国内数据是发出去的,第二个地方是需要发送真正的请求
这个地方读取的文件就是上面下载的密钥json文件
构建自己的https代理
httpTransport = buildHttpProxy();
HttpTransportFactory httpTransportFactory = () -> httpTransport;
googleCredentials = GoogleCredentials.fromStream(HttpsUtils.class.getResourceAsStream("/google/"+configProperties.getServerAccountFileName()),httpTransportFactory)
.createScoped("https://www.googleapis.com/auth/homegraph");
private static HttpTransport buildHttpProxy() throws IOException, GeneralSecurityException {
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(configProperties.getProxyHost(), configProperties.getProxyPort()));
return new NetHttpTransport.Builder().setProxy(proxy).
trustCertificates(GoogleUtils.getCertificateTrustStore()).build();
}
public static void reportStateToHomeGraph(ReportStateAndNotificationRequest request){
try{
HomeGraphService homegraphService =
new HomeGraphService.Builder(
httpTransport,
GsonFactory.getDefaultInstance(),
new HttpCredentialsAdapter(googleCredentials))
.setApplicationName("xxx/1.0")
.build();
ReportStateAndNotificationResponse execute = homegraphService.devices().reportStateAndNotification(request).execute();
}catch (Exception e){
e.printStackTrace();
log.error("发送reportState请求失败:{}",e.getMessage());
}
}
以上就是对接流程,虽然对接完了,还是觉得google音箱国内没啥用,原创不易,转载请注明出处