从JSON请求中识别Alexa设备的类型

时间:2019-03-22 10:34:13

标签: alexa alexa-skill

我想确定使用我的Alexa技能的设备是否具有屏幕,以便我可以提供正确的响应并包括卡片,图像等。

我已经浏览过 Request and Response JSON Reference ,并期望在Context或System对象中找到可以将设备区分开的东西。

从文档和我自己的测试日志来看,event.context.System.device.supportedInterfaces似乎是一个空数组,或者包含一个AudioPlayer数组。视觉界面没有东西吗?

我想寻找的另一个选择是event.context. Viewport数组中的一个区别。有没有一种方法可以通过比较尺寸和形状来知道正在使用哪个设备?

Viewport Reference 和示例:

[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设备的解决方案,特别是要知道该设备是否具有内置屏幕?

2 个答案:

答案 0 :(得分:1)

在测试了可用的设备之后,我发现当设备具有屏幕时,{strong}仅提供Viewport阵列。无需比较Viewport元素。

所以要确定传入的Alexa请求是否具有附加的屏幕,我只需这样做:

if (event.context.Viewport) {
    // device has a screen
}

注意:在Alexa应用程序中也可以看到将卡片发送到任何设备(无论是否有屏幕)。因此,在检测到屏幕之后,我将发送一张卡片,该卡片要在每回合显示。而且,如果未检测到任何屏幕,那么我只会发送偶尔的卡片,供用户检查其Alexa应用程序以查看该卡片。因此,我很惊讶地看到屏幕上显示的所有卡片也淹没了该应用程序。

答案 1 :(得分:0)

对于在这里尝试使用 Alexa 技能获得视觉效果的其他人。

要让 "Alexa.Presentation.APL" 出现在您的 supportedInterfaces 数组中,您需要在 Alexa 开发人员控制台中为该技能启用它。您必须在 Alexa Presentation Language 标签下启用 InterfacesReference

如果启用并且 supportedInterfaces 仍然为空(来自具有屏幕/APL 支持的设备),请确保不存在具有相同调用短语的其他技能(将其命名为可笑的独特测试),并且然后重试。