alexa - 从 JSON 请求中识别 Alexa 设备的类型
问题描述
我想确定使用我的 Alexa 技能的设备是否有屏幕,以便我可以提供正确的响应并包括卡片或图像等。
我查看了请求和响应 JSON 参考,并希望在 Context 或 System 对象中找到可以将设备分开的内容。
从文档和我自己的测试日志来看,event.context.System.device.supportedInterfaces
似乎是一个空数组,或者包含一个AudioPlayer
数组。没有可视化界面吗?
我想寻找的另一个选择是event.context. Viewport
数组的差异。有没有办法通过比较尺寸和形状来知道正在使用哪个设备?
视口参考和示例:
[Viewport] => Array (
[experiences] => Array (
[0] => Array (
[arcMinuteWidth] => 144
[arcMinuteHeight] => 144
[canRotate] =>
[canResize] =>
)
)
[shape] => ROUND
[pixelWidth] => 480
[pixelHeight] => 480
[dpi] => 160
[currentPixelWidth] => 480
[currentPixelHeight] => 480
[touch] => Array (
[0] => SINGLE
)
[keyboard] => Array ()
)
但我找不到与视口尺寸相匹配的可能设备的属性。
那么有没有人有解决方案来识别正在使用的 Alexa 设备,特别是知道该设备是否有内置屏幕?
解决方案
在测试了我可用的设备后,我发现只有在设备有屏幕时才Viewport
提供数组。无需比较元素。Viewport
因此,要确定传入的 Alexa 请求是否有附加屏幕,我只需执行以下操作:
if (event.context.Viewport) {
// device has a screen
}
注意:将卡片发送到任何设备(屏幕或非屏幕)也将在 Alexa 应用程序中可见。因此,在检测到屏幕后,我会发送一张卡片,每轮都显示。如果没有检测到屏幕,那么我只是偶尔发送卡片让用户检查他们的 Alexa 应用程序以查看卡片。所以我很惊讶地看到屏幕上显示的所有卡片,也淹没了应用程序。
推荐阅读
- javascript - 从另一个 wwwroot/JS 文件中的 CSHTML 脚本标签调用 JS 函数
- c - 函数被用作指针
- log4j - 在 Log4j 中监控异步记录器队列大小
- javascript - 如果点击函数内的条件连接变量
- excel - 是否可以在没有循环的情况下进行插值
- python - 如何阅读第 1 列和第 2 列,以及第 n 列到最后一列。麻木的
- java - 将 Firebase 存储与 Firebase Cloud Firestore Android Java 关联
- c# - 如何在 C# WPF 中禁用鼠标按钮?
- c - 如何在同一行中使用 %d 作为十进制整数和 %f?
- java - Spring Boot Rest Controller 上的 HttpMediaTypeNotAcceptableException 以下载 csv 文件