我目前正在使用Google SDK上的操作创建多层面操作。在此操作中,我的用户需要输入密码,如果他们3次未能输入密码,我想检查用户是否有可用的手机,以便他们可以通过电话键盘输入密码。
我已经尝试过使用surface capabilities,但是我注意到没有检查特定的设备类别。而是根据capabilities进行检查。
我想实现的是,如果用户无法通过语音输入代码,如果他们使用的是没有键盘的设备(Google Home或Google Nest Hub),并且有可用的手机,则系统会提示他们将对话移至他们的移动设备。
我目前使用以下代码来确定用户是否拥有移动设备,并且尚未使用移动设备:
const hasOtherDeviceWithScreen = conv.available.surfaces.capabilities.has("actions.capability.SCREEN_OUTPUT");
const hasOtherDeviceWithBrowser = conv.available.surfaces.capabilities.has("actions.capability.WEB_BROWSER");
const hasAvailableMobileDevice = (hasOtherDeviceWithScreen === true && hasOtherDeviceWithBrowser === true);
const currentDeviceHasScreen = conv.screen;
const currentDeviceHasBrowser = conv.surface.capabilities.has("actions.capability.WEB_BROWSER");
const handOverAvailable = (hasAvailableMobileDevice === true && currentDeviceHasBrowser === false);
我知道移交只能使用IOS和Android手机完成,因此检查屏幕+上网应该可以检测到手机,但是我不确定如果有多于1台其他设备可用,该操作如何。
检查屏幕设备和浏览器设备是否可以确保用户拥有具有这些功能的单个设备,或者当用户拥有多个设备时是否可以返回true?
conv.surface.capabilities
是特定设备的所有功能的数组,而conv.available.surfaces.capabilities
是用户在其所有设备上的所有功能的数组。
当您从智能扬声器之类的东西过渡到电话之类的东西时,会在每个有效表面上收到通知。基本上是您的手机。
尽管功能框架是专门设计的,所以检查Web浏览器和屏幕通常应该与移动设备匹配,因此您无需直接进行设备类型检查。