在Google Actions执行fulfillment请求时,如何确定发起设备?
识别Google Assistant指令发起设备的方法
当然可以!在Google Assistant的fulfillment逻辑里,你完全可以获取到发起指令的设备相关信息,甚至能拿到持久化的唯一标识。下面给你拆解具体能拿到的内容和怎么用:
1. 设备唯一持久ID
你可以通过user.device.deviceId(在Dialogflow或者Actions on Google的请求 payload里)拿到一个持久化的唯一设备ID。这个ID是绑定到具体硬件设备的,只要设备不被重置或者关联的Google账号不解除绑定,这个ID就不会变。比如你客厅的Google Home和卧室的会有完全不同的deviceId,手机上的Assistant也会有独立的ID。
2. 设备名称与类型
除了ID,请求里还会包含设备的友好名称(就是你在Google Home app里给设备起的名字,比如"Living Room Speaker"),还有设备类型(比如action.devices.types.SPEAKER、action.devices.types.PHONE这类枚举值)。这些信息可以在user.device或者contexts对应的字段里找到,不同的开发框架(比如Dialogflow vs. Actions Builder)位置可能略有不同,但核心数据都存在。
3. 注意事项
- 这些设备信息需要用户授权吗?不需要!只要用户发起了指令,fulfillment就能直接拿到这些基础设备标识,不需要额外的权限申请。
- 有没有例外情况?如果用户是通过Google Assistant网页版发起的指令,可能不会返回具体的硬件设备ID,因为网页版没有绑定固定硬件。
举个简单的代码示例(用Node.js的Actions on Google SDK):
app.intent('Make Martini', (conv) => { const deviceId = conv.user.device.deviceId; const deviceName = conv.user.device.modelId; // 或根据框架取友好名称 if (deviceId === '客厅设备的ID') { conv.ask('好的,这就为你准备客厅专属的马提尼配方!'); } else { conv.ask('收到,马上给你调出一杯经典马提尼~'); } });
这样你就能精准区分是哪个设备发起的指令啦!
内容的提问来源于stack exchange,提问作者Richard Neil Ilagan
相关产品推荐
相关产品推荐

