利用若琪WEBHOOK实现TTS主动播报及伪主动问询

其实TTS播报这事在智能家居玩家群体里时非常稀松平常的一件事,玩的人也非常多。一般以两个流派为主,一个是DLNA串流播报,不过因为国内主(PIAN)流(YI)的智能音箱对DLNA的支持基本都不是很好,例如天猫精灵是先天残疾。小爱同学是后天被打残的,至今未愈。而叮咚依旧是”智障“本身,DLNA之后会出现不可预期的状况。所以更多人选择了第二个流派,就是蓝牙播报,而蓝牙播报的话,其实对音箱是不是智能的就毫无要求了,哪怕是普通的蓝牙音箱也可以胜任。但是,无论是DLNA还是蓝牙连接,都需要我们先自行做好TTS的转换,也就是先要自己把文字内容转化成音频文件,然后系统再将音频文件串流到音箱上进行播报。当然,TTS这部分其实也是有多个开放平台可以使用的,例如百度和微软。这方面的文章其实网上也有许多,不过今天在这要说的是使用一个非(YOU)主(DIAN)流(GUI)的智能音箱——若琪自带的WEBHOOK来实现TTS语音播报以及伪主动询问的案例。

一、TTS播报有什么用?

在很长的时间里,我一直觉得TTS播报这事是没有啥意义的,所以这功能我也一直没有去仔细研究。因为我自己更期望的功能是主动问询,比如当你在家,气温有点热的时候,音箱就能主动询问说”是否需要打开空调?“当然,空调只是举例,是冷是热我自己会不知道么,还需要你来提醒。但是在domoticz群里交流的时候,@blindlight 点化了下,说是如果连TTS都不做,从何去谈主动询问。并且即使不能实现主动询问,语音播报也能作为自动提醒功能,例如室外空气质量较差,TTS就可以提醒你关窗。出门时候,TTS也能提醒天气情况等等。当然,还是那句话,不管你用不用,技术就在那,但是千万别为了用技术而去用,从而导致音箱整天就在那呱噪的想个不停,例如我目前在用的其实只有回家欢迎播报并询问是否需要打开客厅电视以及抽油烟机和净化器自动开启告知,因为新风系统的自动控制,家里颗粒物污染除了做菜时会高以外,其余时刻都挺好,而如果不是在做菜或有人抽烟啥的,PM浓度上升必然有蹊跷,所以适当提醒,可以杜绝某些隐患(例如锅烧糊了)。

二、如何利用若琪实现TTS播报?

虽然若琪在国内智能家居生态圈里的占比并不十分大(主要还是贵),但是若琪官方却提供了非常完善的API可以方便大家折腾。例如这次TTS使用的技能就是官方提供的WEBHOOK功能。详细点击连接

其实根据官方说明,这个WEBHOOK的用法非常简单,就是通过http post相关信息至指定URL,然后智能音箱执行指定操作,除了TTS播报外,还能执行ASR指令(利用文本来执行指令),串流音乐。这儿我们只需要在若琪APP-家庭-设置(右上角小齿轮)-Webhook里创建一条新的Webhook并记录下其URL:

然后再去我的页面抄录下TTS播报所使用的若琪的序列号。如果你有多个若琪的话,可以全部记录下来,播报时可以通过指定序列号来选择不同的设备进行播报:

准备工作做完了之后,我们就可以找一个在线http post测试的网页进行测试:

如果看到Response里面出现Congratulations! You've triggered the webhook就说明一切就绪,你也可以打开若琪app查看:

”可以看到各位值友,大家好~i“已被若琪正确播报,不过我多打了i。下面进入实战应用。

三、实战应用

在本文前段就提过,若琪的价格相对天猫,叮咚,甚至小爱来说都是偏贵的。而根据楼主的一番查询,用于播报最便宜的若琪设备是若琪梵星。这款产品在京东的售价为399元,并且标明为合作专供。这主要是因为梵星这款产品并不是直接面向消费者的,一般都是合作定制款,所以我们可以转战”闲鱼“

我是在闲鱼上花了200元收了一台全新未拆封的,基本也是梵星在闲鱼平台的均价了。要是拆封二手的价格还会更低一些,不过也就差一杯咖啡钱。

收到货,和卖家描述一致,原封未拆,是电信版的,据说是电信套餐送的,为啥我就没?回头抽空了也去电信问问。

侧边写的清清楚楚,这是一台智能语音遥控器,并非智能音箱,不过其内容资源并没有阉割,可能只是因为音质太差,不配使用音箱这个名字。

打开包装,其简介也符合遥控器定位,只宣传语音控制功能。

整套遥控器包括主机,数据线,电源和说明书。

主机上贴膜有简单的使用说明。

背面铭牌再次强调,我只是个遥控器。

电源接口与时俱进用了TYPE C,以及还有一个3.5mm立体声耳机接口,可以连接其他音箱。

联网配置啥的就不说了,语音提示,step by step就好。我配好了之后就把它粘在冰箱上了:

白色配白色,毫不起眼,真是完美。

接着就是系统了,如果你是home assitant玩家,那么祝贺你,hassbian论坛上有各种现成插件,直接配置使用就好了,例如囧大的:

而即使你是domoticz玩家,也没关系,因为py脚本我已经给你准备好了:

代码不长,就不给文件了,自己注意空格问题。第二段elif的内容其实与第一段相同,只是在text字段多了he, siri的字段,用于唤醒siri,假装是主动询问。这里的he并不是笔误,实测hey, siri无法唤醒siri。你也可以把这个换成天猫精灵,小爱同学,叮咚,叮咚等你需要主动唤醒的其他智能音箱。而在执行时,domo内脚本如下:

不触发siri的命令:

触发siri的命令:

中间的变量可以自己设。基本上就是播报和主动询问,这里主动询问的话还需要另一台智能音箱来执行,略显复杂,但是我就是这么任性。当然,如果若琪的接口ASR能设定一个文本唤醒词,通过webhook唤醒音箱的话,就可以直接使用一台若琪来实现了。

至于主动询问,开始时我的思路是播报时就将相关的设备开关设定到待机状态,然后SIRI里有一个场景就叫”好的“这样询问完成后,我只要回答”好的“,相应设备就执行动作。不过在配置的时候发现,其实直接回复”打开XX“也并不比”好的“麻烦,就给省了。而关于若琪,其实单单作为TTS播报设备来说有点浪费,因为其绑定QQ音乐,资源相对还是比较丰富的,不过本篇文章主要还是讲解TTS的,所以其余内容就不做展开。

当然,Webhook里还有个ASR功能,只要将脚本里"type" : "tts"改成"type" : "asr",text的内容为指令就能执行,例如每天早上起来后可以触发”今天天气怎么样?“的asr指令,若琪就会为您播报当天天气,提醒出行注意事项。

最后祝大家玩的开心。