如何通过代码向Google Assistant发送指令及解决GA SDK设备交互异常
解决方案
能否程序化控制Google Assistant绑定的智能家居设备
可以,有两种成熟实现路径:
- 直接调用Google Home Graph API的
Execute接口,无需模拟自然语言指令,直接传入设备ID和要执行的操作,是最稳定的程序化控制方案 - 调整现有Google Assistant SDK的配置,修复设备识别问题后即可正常发送文本指令控制设备
Google Assistant SDK无法识别自有智能设备的原因
你遇到的问题是SDK的默认配置没有和你的智能家居项目的家庭结构关联导致的,和凭证无关,具体原因有三个:
- 你的Google Assistant SDK项目默认没有开启智能家居设备访问权限,即使使用同一套凭证,SDK生成的Assistant实例默认是独立的,没有同步你Smart Home App下的设备列表
- 调用SDK文本查询接口时没有传入正确的设备标识参数,Assistant无法判定你是在查询/控制自己家庭下的设备
- 你创建的SDK虚拟设备没有加入到和washer、吊扇相同的Google家庭组,Assistant认为当前场景下不存在对应的设备
修复步骤
方案1:继续使用Assistant SDK
- 进入Google Cloud控制台对应项目的Google Assistant API配置页,找到「Device Registration」模块,注册一个SDK对应的虚拟设备,设备类型任选即可
- 打开手机端Google Home App,将刚注册的虚拟设备添加到存放washer、吊扇的同一家庭组内
- 调用SDK的文本查询接口时,必须传入注册时生成的
device_model_id和device_id参数,示例请求结构如下:
{ "inputs": [ { "intent": "assistant.action.intent.Assist", "query": "is the washer running?", "payload": { "device": { "device_id": "你的SDK虚拟设备ID", "model_id": "你的SDK虚拟设备型号ID" } } } ] }
完成以上配置后即可正常发送文本指令查询、控制你的智能设备。
方案2:使用Home Graph API(更推荐)
如果你的需求仅为程序化控制设备,不需要处理自然语言交互,直接调用Home Graph API的Execute接口即可,无需走Assistant SDK的逻辑,控制精度和成功率更高,请求示例如下:
{ "requestId": "自定义随机请求ID", "inputs": [ { "intent": "action.devices.EXECUTE", "payload": { "commands": [ { "devices": [ { "id": "你的吊扇对应的device ID" } ], "execution": [ { "command": "action.devices.commands.OnOff", "params": { "on": true } } ] } ] } } ] }
调用该接口直接使用你现有Smart Home App的OAuth凭证即可,无需额外配置。
内容的提问来源于stack exchange,提问作者NateS
相关产品推荐
相关产品推荐

