摘要

本接口包含了一些系统级别的接口,如同步设备端状态、设置服务接入端地址、异常信息等指令与事件。

版本变更

变更历史 变更时间 变更描述
1.1.1 2019-12-12 屏幕关闭的时候也也上报displayMode、新增一些开关/视觉的状态上报
1.1.2 2020-07-06 SynchronizeKeyState事件分级,定义为“统计事件"
1.1.3 2020-08-31 UserInactivityReport, ExceptionEncountered事件分级,定义为“统计事件"
1.1.4 2021-03-09 SynchronizeKeyState事件增加screenOrientation数上报屏幕方向
1.1.5 2021-03-30 SynchronizeKeyState事件增加sensorOrientation参数上报传感器方向
1.1.6 2021-06-25 SynchronizeKeyState事件增加video.playerActivity, music.playerActivity, packageName, activityClassName参数,补充了app.id的枚举值,show端SP52生效
1.1.7 2021-11-11 SynchronizeKeyState事件增加isBlueEyeTurnOn蓝光保护参数、isDistanceTurnOn距离保护参数、isEyeLockTurnOn护眼提醒参数,show端SP56生效
1.1.8 2021-12-21 SynchronizeKeyState事件增加 isWifiTurnOn WIFI是否开启、isRandomResponseToneTurnOn随机应答是否开启、 isIntelligentClosingScreenTurnOn智能关屏是否开启、isTimedScreenOffTurnOn定时关屏是否开启、isSayHelloTurnOn 主动问好是否开启、 isHourlyChimeTurnOn 整点报时是否开启、 isAutomaticTurningOnAndOffTurnOn 自动开关机是否开启 、isNightModeTurnOn 夜间模式是否开启、 isMobileScreenProjectionTurnOn 手机投屏是否开启,show端SP58生效
1.1.9 2021-12-27 根据变量名称和代码逻辑,发现原有的变量已经包括了定时关屏\自动开关机\整点报时的状态,所以将1.1.8提交中SynchronizeKeyState类新增的这三个变量isTimedScreenOffTurnOn定时关屏是否开启、isHourlyChimeTurnOn 整点报时是否开启、isAutomaticTurningOnAndOffTurnOn 自动开关机是否开启 去掉,show端SP58生效
1.1.10 2022-01-05 SynchronizeKeyState事件增加 extendDisplay扩展显示,show端H6和H8 SP56生效
1.1.11 2022-01-20 SynchronizeKeyState事件增加 externalMicConnectState字段,上报外接麦克风连接状态
1.1.12 2022-02-09 SynchronizeKeyState事件增加 isBluetoothHandleConnected字段,上报蓝牙连接手柄状态,show端SP60生效
1.1.13 2022-02-11 SynchronizeKeyState事件增加 privacy字段,上报camera和mic提示图标显示的状态
1.1.14 2022-03-15 更新与修正SynchronizeKeyState事件中屏保类型字段文档
1.1.15 2022-04-07 SynchronizeKeyState事件增加freshGestureSwitch,visionDataReflowSwitch,gesturePicReflowSwitch,show端SP61生效
1.1.16 2022-04-18 SynchronizeKeyState事件增加 isScreenRecognitionTurnOn 字段,show端H8 SP61 OTA生效
1.1.17 2022-08-16 SynchronizeKeyState.channels.display.extendDisplay,增加HDMI_INPUT和WIFI_INPUT枚举,在新品春华上SP62生效
1.1.18 2023-02-28 SynchronizeKeyState.settings,增加screenSaverLocalArtNumber字段,在春华春晓上生效
1.1.19 2023-03-01 SynchronizeKeyState.settings,增加audioEffect字段; 增加SynchronizeKeyState.acoustic
1.1.20 2023-03-06 SynchronizeKeyState事件增加电源电池数据
1.1.21 2023-04-17 SynchronizeKeyState事件增加上报 设置-> 电池信息 Tab页的3个开关状态
1.1.22 2023-06-28 SynchronizeKeyState事件增加xdns禁用状态上报
1.1.23 2023-11-28 SynchronizeKeyState事件增加 IsSmartFollowTurnOn字段,上报是否开启智能跟随状态,在秋月设备生效
1.1.24 2023-12-05 SynchronizeKeyState事件增加 isGSensorTurnOn字段,上报是否开启GSensor亮屏
1.1.25 2023-12-11 SynchronizeKeyState事件增加 displayRate字段,上报当前选中的屏幕刷新率选项
1.1.26 2023-12-19 SynchronizeKeyState事件增加 packageNameListHashV2字段,上报当前选中处于前台的页面包名列表,仅用于支持多窗口的设备
1.1.27 2024-01-23 SynchronizeKeyState事件增加 上报声音监控字段

SynchronizeState事件

设备端与服务端建立连接之后上报一次该事件,将设备端当前的状态与服务端进行同步。

消息样例

"clientContext": [
    {{ai.dueros.device_interface.alerts.AlertsState}},
    {{ai.dueros.device_interface.audio_player.PlaybackState}},
    {{ai.dueros.device_interface.speaker_controller.VolumeState}},
    {{ai.dueros.device_interface.voice_output.SpeechState}},
    {{ai.dueros.device_interface.screen.ViewState}}
    ...
],
"event": {
    "header": {
        "namespace": "ai.dueros.device_interface.system",
        "name": "SynchronizeState",
        "messageId": "{{STRING}}"
    },
    "payload": {
    }
}

Client Context说明

本事件需要设备端上报所有端上状态。

SynchronizeKeyState事件

设备开机后,若同步设备关键状态的开关开启,则定期与云端同步关键状态。此开关默认是关闭的。

该事件目前主要用于事件打点,关键状态指端上用户可设置的开关和重点通道的状态。

由于每个设备都周期性高频上报次事件,对于服务端的处理压力很大,本事件的设计以性能优先为原则设计,原 则上事件中不定义以字符串为取值的字段,并且每个字段都从性能优化角度定义,未来boolean型字段可能采用按 位存储方式来节约空间,这样设计可能会牺牲一定的协议可读性来换取效率上的优化,本事件序列化后长度不应 超过1K,建议采用ProtoBuffer格式传输。

事件分级

统计事件: 本事件目前主要用于统计目的,服务端接入层对本事件进行直接处理,不向服务端下游模块透传,无服务响应指令返回。

消息样例

"event": {
    "header": {
        "namespace": "ai.dueros.device_interface.system",
        "name": "SynchronizeKeyState",
        "messageId": "{{STRING}}"
    },
    "payload": {
        "settings" : {
            "isBluetoothEnabled": {{BOOLEAN}},
            "brightness": {{INT}},
            "screenSaverSwitch": {{BOOLEAN}},
            "screenSaverMode": "{{ENUM}}",
            "autoScreenRestSwitch": {{BOOLEAN}},
            "screenRestStartTime": {{INT}},
            "screenRestEndTime": {{INT}},
            "autoShutDownModeSwitch": {{BOOLEAN}},
            "autoShutDownTime": {{INT}},
            "autoStartingUpTime": {{INT}},
            "enableHourlyChime": {{BOOLEAN}},
            "autoBroadcastMode": {{BOOLEAN}},
            "wakeupEnabled": {{BOOLEAN}},
            "isCameraTurnedOn": {{BOOLEAN}},
            "muted": {{BOOLEAN}},
            "volume": {{INT}},
            "voiceId": {{INT}},
            "childFriendlyMode": {{BOOLEAN}},
            "doNotDisturbMode": {{BOOLEAN}},
            "voiceInteractionMode": "{{ENUM}}",
            "gestureControlSwitch": {{BOOLEAN}},
            "gazingDetectionSwitch": {{BOOLEAN}},
            "elderMode": {{BOOLEAN}},
            "screenSaverTimeoutInSeconds": "{{INT}}",
            "screenSaverModeInt": "{{INT}}",
            "pcdnLocalSwitch": {{BOOLEAN}},
            "desktopMode": "{{ENUM}}",
            "screenSaverFaceDetectEnable": {{BOOLEAN}},
            "isBlueEyeTurnOn": {{BOOLEAN}},
            "isDistanceTurnOn": {{BOOLEAN}},
            "isEyeLockTurnOn": {{BOOLEAN}},
            "isWifiTurnOn": {{BOOLEAN}},
            "isRandomResponseToneTurnOn": {{BOOLEAN}},
            "isIntelligentClosingScreenTurnOn": {{BOOLEAN}},
            "isSayHelloTurnOn": {{BOOLEAN}},
            "isNightModeTurnOn": {{BOOLEAN}},
            "isMobileScreenProjectionTurnOn": {{BOOLEAN}},
            "externalMicConnectState": {{ENUM}},
            "isBluetoothHandleConnected": {{BOOLEAN}},
            "freshGestureSwitch": {{BOOLEAN}},
            "visionDataReflowSwitch": {{BOOLEAN}},
            "gesturePicReflowSwitch": {{BOOLEAN}},
            "screenSaverLocalArtNumber": {{INT}},
            "audioEffect": {{ENUM}},
            "autoScreenOffInBatteryMode": {{BOOLEAN}},
            "disableTouchWakeupInBatteryMode": {{BOOLEAN}},
            "disableVoiceWakeupInBatteryMode": {{BOOLEAN}},
            "isXdnsDisabled":{{BOOLEAN}},
            "isSmartFollowTurnOn":{{BOOLEAN}},
            "isGSensorTurnOn":{{BOOLEAN}}, 
            "displayRate":{{ENUM}}
        },
        "channels": {
            "display" : {
                "displayMode": "{{ENUM}}",
                "topBannerIconIntIds": [
                    {{INT}}
                ],
                "screenOrientation" : "{{ENUM}}",
                "sensorOrientation" : {{INT}},
                "packageName": {{INT}},
                "packageNameHashV2": {{INT}},
                "activityClassName": {{INT}},
                "extendDisplay": {{ENUM}},
                "desktopSkinStatus": {{INT}},
                "packageNameListHashV2" : [
                    {{INT}}
                ]
            },
            "music" : {
                "playerActivity": "{{ENUM}}"
            },
            "video" : {
                "playerActivity": "{{ENUM}}"
            }
        },
        "visions": {
            "offsetInSeconds": {{INT}},
            "visualRecognitionRecords":[
                {
                  "faceCount": {{INT}},
                  "ageOfBiggestFace": {{INT}},
                  "distanceOfBiggestFaceInMetre": {{INT}},
                  "ambientBrightness": {{INT}},
                  "existMovingObjects": {{BOOLEAN}},
                  "displayMode": "{{ENUM}}",
                  "faceType": "{{ENUM}}"
                }
            ]
        },
        "app":{
            "id":{{INT}}
        },
        "privacy":{
            "cameraIcon":{{BOOLEAN}},
            "micIcon":{{BOOLEAN}}
        },
        "edgeComputing": {
            "permission": {{ENUM}},
            "workStatus": {{INT}}
        },
        "acoustic": {
            "app": {{INT}},
            "audioEffect": {{ENUM}}
        },
        "power": {
            "isCharging": {{BOOLEAN}},
            "isPowerSaving": {{BOOLEAN}},
            "capacity": {{INT}}, 
        },
        "soundBox": {
            "onLine": {{BOOLEAN}},
            "hwStatus": {{INT}},
            "osVersion": {{INT}},
            "qySoundBtConnected": {{BOOLEAN}}
        }
        "abnormalSoundDetect": {
            "enable": {{BOOLEAN}},
            "isMonitor": {{BOOLEAN}}
        },
    }
}

Playload参数说明

  • (optional) settings
    • 设备端用户可设置的开关和选项的值
  • (optional) settings.isBluetoothEnabled
    • 设备的蓝牙是否打开。
  • (optional) settings.brightness
    • 当前屏幕的亮度值,[0,100]
  • (optional) settings.screenSaverSwitch
    • 屏保开关: true表示打开,false表示关闭。
  • (optional) settings.screenSaverMode
    • 屏保模式
    • 取值
      • DIM: 暗屏模式(即护眼模式),屏幕变灰色。
      • DIGITAL_CLOCK 数字时钟
      • POINT_CLOCK 指针时钟
      • NETDISK_ALUBM 网盘相册
      • DEVICE_ALUBM 设备相册
      • FAMILY_ALUBM 家庭相册
      • PICTORIALS 动态画报
      • OTHER 其他屏保类型(端上屏保类型ID>=9,或付费屏保、动态视频屏保等)
  • (optional) settings.screenSaverModeInt
    • 屏幕当前所处的模式,由于主题屏保、动态屏保的增加,屏保已经无法穷举,所以端上从SP52版本开始会上报这个字段来标识具体的屏保ID
    • 取值
      • 0 < 取值 < 100:这个范围是端上定义的屏保类型,现在已有下面这些类型,后续可能会再扩展
      • 1: 暗屏模式(即护眼模式),屏幕变灰色。 (DIM)
      • 2: 数字时钟 (DIGITAL_CLOCK)
      • 3: 指针时钟 (POINT_CLOCK)
      • 4: 网盘相册 (NETDISK_ALUBM)
      • 6: 家庭相册 (FAMILY_ALUBM)
      • 7: 动态画报 (PICTORIALS)
      • 8:本地相册 (DEVICE_ALUBM)
      • 9:备忘录 (注:自此以下的屏保类型,在上报settings.screenSaverMode枚举时均为OTHER类型)
      • 10:半熄屏模式
      • 11: 艺术画框 (ART_GALLERY)
      • 12: AI表情屏保 (AI_EXPRESSION)
      • 101:故宫定制款屏保,只会出现在故宫定制版的设备上
      • 102: 礼品购销售渠道定制屏保,这个ID是云端针对特定销售渠道设备配置,下发到端上
      • 10000 < 取值 < 20000:主题屏保,这个ID是由云端屏保Bot生成下发给端上的
      • 20001 < 取值 < 50000:DBP定制的静态屏保(ID由DBP云端生成)
      • 50001 < 取值 < 60000:DBP定制的动态屏保(ID由DBP云端生成)
  • (optional) settings.autoScreenRestSwitch
    • 自动息屏开关: true标识打开,false标识关闭。
  • (optional) settings.screenRestStartTime
    • 第一天自动息屏开始时间,ISO 8601格式,用INT类型表示。
      • "hh:mm",样例值:"22:00",用INT类型表示为"2200"。
  • (optional) settings.screenRestEndTime
    • 第二天自动息屏结束时间,ISO 8601格式,用INT类型表示。
      • "hh:mm",样例值:"22:00",用INT类型表示为"2200"。
  • (optional) settings.autoShutDownModeSwitch
    • 是否打开自动开关机: true为打开,false表示关闭。
  • (optional) settings.autoShutDownTime
    • 自动关机的时间,ISO 8601格式,用INT类型表示。
      • "hh:mm",样例值:"22:00",用INT类型表示为"2200"。
  • (optional) settings.autoStartingUpTime
    • 自动开机的时间,ISO 8601格式,用INT类型表示。
      • "hh:mm",样例值:"22:00",用INT类型表示为"2200"。
  • (optional) settings.enableHourlyChime
    • 是否打开整点播报:true为打开整点播报;false为关闭整点播报
  • (optional) settings.autoBroadcastMode
    • 是否打开自动播报: true为打开自动播报模式,false为关闭自动播报模式。
    • 自动模式指的是,在特定时间范围内,设备识别到用户出现后,自动播报例如天气等信息
  • (optional) settings.wakeupEnabled
    • 设备端是否开启了语音唤醒。
  • (optional) settings.isCameraTurnedOn
    • 当前摄像头的状态: true为打开状态,false为关闭状态。
  • (optional) settings.muted
    • 是否静音状态:true为静音状态,false为非静音状态。
  • (optional) settings.volume
    • 当前音量值,范围为[0,100]。
  • (optional) settings.voiceId
    • 当前的设备音色。
  • (optional) settings.childFriendlyMode
    • 儿童模式是否开启,true为开启儿童模式,false为非儿童模式。
  • (optional) settings.doNotDisturbMode
    • 是否打开勿扰模式:true为打开勿扰模式;false为关闭勿扰模式。
  • (optional) settings.voiceInteractionMode
    • 语音交互模式
    • 取值:
      • "HALF_DUPLEX": 一问一答的半双工语音交互模式
      • "FULL_DUPLEX": 一次唤醒持续交互的双工语音交互模式
      • "HALF_DUPLEX_FOLLOWUP": 具体含义参考./settings-private.md
  • (optional) settings.elderMode
    • 长辈模式是否开启,true为开启长辈模式,false为非长辈模式;如果没有该字段,默认为false。
  • (optional) settings.gestureControlSwitch
    • 手势控制开关是否开启,true为开启,false为关闭。
  • (optional) settings.gazingDetectionSwitch
    • 眼神控制开关是否开启,true为开启,false为关闭。
  • (optional) settings.screenSaverTimeoutInSeconds
    • 进入屏保超时时间,单位:秒
  • (optional) settings.externalMicConnectState
    • 外接麦克风连接状态
    • 取值
      • MIC_ALL_CLOSED: 两只麦克风都关闭
      • ONLY_LEFT_MIC_CONNECTED: 仅开启左麦克风(麦克风1)
      • ONLY_RIGHT_MIC_CONNECTED: 仅开启右麦克风(麦克风2)
      • MIC_ALL_CONNECTED: 两只麦克风都开启
  • (optional) settings.audioEffect
    • 选择的音效
    • 取值
      • 0: SMART(智能),根据不同场景,进行匹配不同音效
      • 1: STANDARD(标准),适用于所有场景
      • 2: VOCAL(人声),适用于TTS、有声音频场景
      • 3: MOVIE(电影),适用于长视频、短视频场景
      • 4: GAME(游戏),适用于游戏,包括三方游戏APK
      • 5: MUSIC(音乐),适用于音乐播放场景
  • (optional) settings.isXdnsDisabled
    • xdns是否禁用,从春华春晓OTA8, 主线Sp67开始支持此字段上报。同时支持云端推送ClickLink指令,修改端上xdns开关。url:dueros://com.baidu.duer.setting.device/xdns/xdns_disabled={{BOOLEAN}}
    • 取值
      • true 已禁用
      • false 未禁用
  • (optional) channels
    • 设备端通道的状态,包括:屏幕、扬声器和投屏等。
  • (optional) channels.display
    • 屏幕通道的状态。
  • (optional) channels.display.displayMode
    • 屏幕所处的状态
    • 取值
      • HOMECARD: 处于Homecard轮播模式
      • SCREEN_SAVE: 处于屏保状态
      • OTHER: 其他状态
      • CLOSE: 屏幕处于关闭状态
  • (optional) channels.display.topBannerIconIntIds
    • 屏幕左上角banner位当前展现的icon的intId列表
    • 取值描述:icon的intId会随UpdateTopBanner指令指令带下来,端上有生效时间/优先级/推送时间等特征pk决定展现icon的逻辑,如果端上当前无展现的icon,默认值填空。
  • (optional) channels.display.screenOrientation
    • 当前屏幕的旋转方向
    • 取值
      • LANDSCAPE: 横屏
      • PORTRAIT: 竖屏
  • (optional) channels.display.sensorOrientation
    • 当前设备传感器的方向,这个值只表示当前设备的放置方向,与屏幕显示方向无关。例如screenOrientatio=LANDSCAPE时,这个值可以为0或180
    • 生效端版本: >=sp52时端上报的是[0,360)区间, >=sp47 && <sp52时端上报的是这四种取值:-1、0、90、180、270
    • 取值范围如下(>=sp52):
      • -1: 端上传感器未获取到角度(设备开机后未发生过旋转,新老设备都有这种情况)
      • [0,360)区间某值: 对应的统计逻辑可以按如下区间做划分
        • [330,360) or [0,30]:向右侧倾倒竖屏(即竖屏放置)
        • [60,120]:横屏倒置(可能顶边贴地躺着放)
        • [150,210]:向左侧倾倒竖屏(可能左侧边贴地躺着放)
        • [240,300]:横屏放置
  • (optional) channels.display.packageName
    • ai.dueros.device_interface.screen的packageName的映射,公式为packageName.hashCode()%100000,hashCode方法为j2se的String类的hashCode
  • (optional) channels.display.packageNameHashV2
    • ai.dueros.device_interface.screen的packageName的MD5散列值(128位,16个字节)的前4个字节(int32)
  • (optional) channels.display.activityClassName
    • ai.dueros.device_interface.screen的activityClassName的映射,公式为activityClassName.hashCode()%100000,hashCode方法为j2se的String类的hashCode
  • (optional) channels.display.extendDisplay
    • 扩展显示
    • 取值
      • DEFAULT: 无外接显示
      • HDMI: 外接HDMI显示,把小度设备通过HDMI投屏到其他设备
      • WIFI: WIFI投屏显示,小度设备投屏到其他设备
      • WIFI_INPUT: 其他设备通过WIFI镜像投屏搭配小度设备
      • HDMI_INPUT: 把其他设备HDMI输入投屏到小度设备
  • (optional) channels.display.desktopSkinStatus
    • 桌面皮肤的状态
    • 取值
      • 1 品牌日广告皮肤
      • 0 默认皮肤
  • (optional) channels.display.packageNameListHashV2
    • 当前处于前台的页面所属的包名信息列表,列表每一项的构造方式与channels.display.packageNameHashV2相同。
    • 只有支持多窗口的设备会上报此字段,如:秋月。
  • (optional) channels.music.playerActivity
    • 音乐播放器的状态,同ai.dueros.device_interface.audio_player的playerActivity
    • 取值
      • IDLE: 空闲
      • PLAYING: 播放中
      • STOPPED: 停止
      • PAUSED: 暂停
      • BUFFER_UNDERRUN: 缓冲
      • FINISHED: 完成
  • (optional) channels.video.playerActivity
    • 短视频播放器的状态,同ai.dueros.device_interface.video_player的playerActivity
    • 取值
      • STOPPED: 停止
      • PLAYING: 播放中
      • SCHEDULED_STOP: 播放到指定的停止点
      • PAUSED: 暂停
      • BUFFER_UNDERRUN:
      • FINISHED:
  • (optional) visions
    • 视觉检测的结果。端每隔1min进行视觉检测并本地缓存,缓存结果随本事件上报。最多上报5个检测的 结果,若超过则丢弃较老的检测结果,上报后清空本地缓存。
  • (optional) visions.offsetInSeconds
    • 最近一次视觉检测结果的时间与本次心跳事件上报事件的间隔,比如09:56:50 ~ 10:00:50进行了5次视 觉检测,最近一次是10:00:50,本次事件上报时间是10:01:00,则offsetInSeconds为10。
  • (optional) visions.visualRecognitionRecords[]
    • 视觉检测结果,按检测时间排序,第一个是最新的。
  • (optional) visions.visualRecognitionRecords[].faceCount
    • 检测到的人脸个数,范围为[0,10]。
  • (optional) visions.visualRecognitionRecords[].ageOfBiggestFace
    • 检测到的人脸的年龄(当检测到多张脸时,取最大的那个),范围为[0,100]。
  • (optional) visions.visualRecognitionRecords[].distanceOfBiggestFaceInMetre
    • 检测到的人脸到屏幕的距离,单位:米(当检测到多张脸时,取最大的那个),范围为[0,100]
  • (optional) visions.visualRecognitionRecords[].ambientBrightness
    • 环境亮度,取值[0,100],数值越大代表亮度越高。
  • (optional) visions.visualRecognitionRecords[].existMovingObjects
    • 是否检测到物体移动。
  • (optional) visions.visualRecognitionRecords[].displayMode
    • 视觉检测时屏幕的状态,检测时若屏幕打开则上报此字段,表示屏幕此时的状态。
    • 取值
      • HOMECARD: 处于Homecard轮播模式
      • SCREEN_SAVE: 处于屏保状态
      • OTHER: 其他状态
      • CLOSE: 屏幕处于关闭状态
  • (optional) visions.visualRecognitionRecords[].faceType
    • 检侧到的人脸类型,若检测到多个人脸,则表示检测到的最大人脸的类型
    • 取值
      • NON_BODY: 未检测到人体
      • BODY_NON_FACE: 检测到人体,但未检测到人脸
      • BODY_FRONTAL_FACE: 检测到人体,且检测到正脸
      • BODY_OTHER_FACE: 检测到人体和人脸,但不是正脸
  • (optional) app.id
    • 当前在前台的第三方app的id。app的id会随ai.dueros.device_interface.bot_app_sdk.Open指令带下来。如果前台没有可识别的app id,默认值为0。以下是一些其它app的id的预设值(因为它们不是ai.dueros.device_interface.bot_app_sdk.Open指令打开的):
      • 1 爱奇艺
      • 2 咪咕视频
      • 3 腾讯视频
      • 4 芒果视频
      • 5 H5视频
      • 6 沃视频
      • 7 优酷视频
      • 8 哔哩哔哩
      • 9 奇巴布
  • (optional) privacy.cameraIcon
    • 当前摄像头提示图标显示的状态: true为在显示,false为不在显示。
  • (optional) privacy.micIcon
    • 当前mic提示图标显示的状态: true为在显示,false为不在显示。
  • (optional) settings.pcdnLocalSwitch
    • PCDN上传开关是否打开: true为打开,false为关闭。
  • (optional) settings.desktopMode
    • 桌面模式,定义当前桌面所处的模式,生效版本Sp>=54。为了方便云端统计,把所有桌面模式字段,统一归并到这一个枚举值,避免后续再增加boolean字段判定桌面状态。为保证云端逻辑正常,现存elderMode,childFriendlyMode字段会继续维护。
    • 取值:
      • "STANDARD": 标准模式
      • "SIMPLEMODE": 极简模式
      • "CHILDFRIENDLYMODE": 儿童模式
      • "ELDERMODE": 长辈模式
      • "RAISE_CHILD_MODE": 育儿模式
      • "TV_MODE": 电视模式
    • desktopMode字段在时长统计场景的用法示例:设备状态分两个维度,一个是桌面状态(Homecard轮播,屏保,关屏,其他),另一个是桌面模式(标准,儿童,长辈,极简,育儿,电视)。两个维度的交叉点,就代表某模式下某屏幕状态的定时上报,"√"代表存在该状态
displayMode \ desktopMode STANDARD SIMPLEMODE CHILDFRIENDLYMODE ELDERMODE RAISE_CHILD_MODE TV_MODE
HOMECARD √(标准桌面) √(极简桌面) √(儿童桌面) √(长辈桌面) √(育儿桌面) √(电视桌面)
SCREEN_SAVER
CLOSE
OTHER
  • (optional) settings.screenSaverFaceDetectEnable
    • 信息屏保中是否允许屏保根据面容推荐。该开关在设备的隐私设置中,由用户手动开启/关闭
  • (optional) settings.isBlueEyeTurnOn
    • 设备的蓝光护眼是否打开。
  • (optional) settings.isDistanceTurnOn
    • 设备的距离保护是否打开。
  • (optional) settings.isEyeLockTurnOn

    • 设备的护眼提醒是否打开。
  • (optional) settings.isBluetoothHandleConnected
    • 蓝牙是否连接手柄设备。
  • (optional) settings.freshGestureSwitch
    • 尝鲜手势开关是否开启,true为开启,false为关闭。
  • (optional) settings.visionDataReflowSwitch
    • 视觉回流开关是否开启,true为开启,false为关闭。
  • (optional) settings.gesturePicReflowSwitch
    • 手势快照开关是否开启,true为开启,false为关闭。
  • (optional) settings.screenSaverLocalArtNumber
    • 艺术画廊-自定义影集中照片的数量。
  • (optional) settings.autoScreenOffInBatteryMode
    • 设置-> 电池信息-> 电池供电时,5分钟无操作自动熄屏 的开关状态,true表示开,false为关。
  • (optional) settings.disableTouchWakeupInBatteryMode
    • 设置-> 电池信息-> 电池供电时,熄屏状态下点击屏幕不亮屏 的开关状态,true表示开,false为关。
  • (optional) settings.disableVoiceWakeupInBatteryMode
    • 设置-> 电池信息-> 电池供电时,熄屏状态下禁用语音唤醒 的开关状态,true表示开,false为关。
  • (optional) settings.isSmartFollowTurnOn
    • 设置-> 智能跟随-> 秋月设备智能跟随功能 的开关状态,true表示开,false为关。
  • (optional) settings.isGSensorTurnOn
    • 设置-> 屏幕与亮度-> 使用GSensor亮屏 的开关状态,true表示开,false为关。
  • (optional) settings.displayRate

    • 设置-> 屏幕与亮度-> 屏幕刷新率 当前用户选中的选项。在支持动态选择屏幕刷新率的设备上才会上报,包括:秋月。
    • 取值:
      • 0: AUTO. 对应 设置-屏幕与亮度-屏幕刷新率-智能,根据需要智能切换刷新率。
      • 1: STANDARD_60HZ. 对应 设置-屏幕与亮度-屏幕刷新率-标准,固定60Hz。
      • 2: HIGH_144HZ. 对应 设置-屏幕与亮度-屏幕刷新率-高,固定144Hz。
  • (optional) edgeComputing.permission

    • 设备端上进行边缘计算的状态
    • 取值
    • "DEFAULT": 用户未设置
    • "ALLOW": 用户允许
    • "REJECT": 用户拒绝
  • (optional) edgeComputing.workStatus

    • 设备上规避策略的工作状态
    • 取值 0: 设备空闲,未在规避状态 1:看视频、听歌导致能进入规避状态 2:亮屏导进入规避状态 3:bimesh打开导致进入规避状态
  • (optional) acoustic.app
    • 当前正在生效音效对应的应用packageName或者bot名字的hash值,算法为packageName或bot名字的MD5散列值(128位,16个字节)的前4个字节(int32)hashCode,同于channels.display.packageNameHashV2
  • (optional) acoustic.audioEffect
    • 当前生效的音效, 当用户在设置中选择SMART的时候,此时生效的音效可与设置中的不同
    • 取值
      • 0: SMART(智能),根据不同场景,进行匹配不同音效
      • 1: STANDARD(标准),适用于所有场景
      • 2: VOCAL(人声),适用于TTS、有声音频场景
      • 3: MOVIE(电影),适用于长视频、短视频场景
      • 4: GAME(游戏),适用于游戏,包括三方游戏APK
      • 5: MUSIC(音乐),适用于音乐播放场景
  • (optional) power
    • 电源电池信息,春晓在端版本 >= 87 时生效, 有屏(t10)在端版本 >= 67 时生效
  • (optional) power.isCharging
    • 充电状态: true:充电 false:不充电
  • (optional) power.isPowerSaving
    • 省电状态: true:省电 false:不省电
  • (optional) power.capacity
    • 电池当前电量百分比,如:50表示50%电量
  • (optional) soundBox
    • 音箱底座信息,主机+底座类型设备包含此字段。当前仅秋月设备会带
  • (optional) soundBox.onLine
    • 音箱底座与主机是否处于连接状态。true:已连接;false:未连接
  • (optional) soundBox.hwStatus
    • 音箱底座硬件状态信息,共计四个字节,分别含义:0x00、主板温度、线圈温度、TX芯片温度
  • (optional) soundBox.osVersion
    • 音箱底座版本号
  • (optional) soundBox.qySoundBtConnected
    • 底座蓝牙是否连接
  • (optional abnormalSoundDetect
    • 声音看护
  • (optional) abnormalSoundDetect.enable
    • 是否打开声音看护:true 为打开声音看护,false 为关闭声音看护。
  • (optional) abnormalSoundDetect.isMonitor
    • 当前是否处于声音检测开启状态,例如,每天8:00-20:00开,这个时间段内端上isMonitor应该是true,在其他时间段isMonitor就是false

SetSynchronizeKeyState指令

更新设备端定期同步关键状态的配置。

为保障服务端的稳定,若指令设置的同步频率小于300秒,则忽略此指令。

消息样例

"directive": {
  "header": {
    "namespace": "ai.dueros.device_interface.system",
    "name": "SetSynchronizeKeyState",
    "messageId": "{{STRING}}",
  },
  "payload": {
    "token": "{{STRING}}",
    "synchronizeKeyStateEnabled": {{BOOLEAN}},
    "synchronizeVisionsEnabled": {{BOOLEAN}},
    "synchronizeKeyStateIntervalInSeconds": {{LONG}},
  }
}

Payload参数说明

  • token
    • 当前指令对应的唯一token
  • synchronizeKeyStateEnabled
    • 是否打开定期状态同步开关,默认是关闭的。
  • synchronizeVisionsEnabled
    • 同步状态时,是否上报视觉检测的结果,默认是关闭的。
  • synchronizeStateIntervalInSeconds
    • 状态同步的频率,单位是秒。若小于300秒,则忽略此指令。

UserInactivityReport事件

设备端每隔一个小时需要上报该事件,报告自最近一次用户交互以来所经过的时间。用户发起语音请求、用户通过设备端按键或者屏幕进行交互,都被认为是用户交互。

事件分级

统计事件: 本事件目前主要用于统计目的,服务端接入层对本事件进行直接处理,不向服务端下游模块透传,无服务响应指令返回。

消息样例

"event": {
    "header": {
        "namespace": "ai.dueros.device_interface.system",
        "name": "UserInactivityReport",
        "messageId": "{{STRING}}"
    },
    "payload": {
        "inactiveTimeInSeconds": {{LONG}}
    }
}

Payload参数说明

  • inactiveTimeInSeconds
    • 自最近一次用户交互依赖所经过的时间

ResetUserInactivity指令

重置“用户最近一次交互”的时间点为当前时间。用户通过CompanionApp进行了交互时,服务端有可能会下发该指令来重置设备端上上一次交互的时间点。

消息样例

"directive": {
    "header": {
        "namespace": "ai.dueros.device_interface.system",
        "name": "ResetUserInactivity",
        "messageId": "{{STRING}}"
    },
    "payload": {
    }
}

SetEndpoint指令

设置服务端接入地址,重置连接。设备端需要断开当前连接,并向给定的接入地址创建新的连接。

消息样例

"directive": {
    "header": {
        "namespace": "ai.dueros.device_interface.system",
        "name": "SetEndpoint",
        "messageId": "{{STRING}}"
    },
    "payload": {
      "endpoint": "{{STRING}}"
    }
}

Payload参数说明

  • endpoint
    • 新的服务端接入地址

ExceptionEncountered事件

设备端收到指令,但无法正常执行的时候上报此事件。

事件分级

统计事件: 本事件目前主要用于统计目的,服务端接入层对本事件进行直接处理,不向服务端下游模块透传,无服务响应指令返回。

消息样例

"clientContext": [
    {{ai.dueros.device_interface.alerts.AlertsState}},
    {{ai.dueros.device_interface.audio_player.PlaybackState}},
    {{ai.dueros.device_interface.speaker_controller.VolumeState}},
    {{ai.dueros.device_interface.voice_output.SpeechState}},
    {{ai.dueros.device_interface.screen.ViewState}}
],
"event": {
    "header": {
        "namespace": "ai.dueros.device_interface.system",
        "name": "ExceptionEncountered",
        "messageId": "{{STRING}}"
    },
    "payload": {
        "unparsedDirective": "{{STRING}}",
        "error": {
            "type": "{{STRING}}",
            "message": "{{STRING}}"
        }
    }
}

Payload参数说明

  • unparsedDirective
    • 设备端无法执行的指令原文,原JSON字符串
  • error.type
    • UNEXPECTED_INFORMATION_RECEIVED: 接收到的指令有损坏,或者Payload数据不符合文档描述
    • UNSUPPORTED_OPERATION: 设备端不支持的指令(根据namespace/name判断,收到无法识别的指令)
    • INTERNAL_ERROR: 执行指令当中发生未知错误
  • error.message
    • 详细错误信息

ThrowException指令

当设备端发送的请求格式不正确、登录的认证信息过期等错误情况发生时,服务端会返回ThrowException指令给设备端。

消息样例

"directive": {
    "header": {
        "namespace": "ai.dueros.device_interface.system",
        "name": "ThrowException",
        "messageId": "{{STRING}}"
    },
    "payload": {
        "code": "{{STRING}}",
        "description": "{{STRING}}"
    }
}

Payload参数说明

  • code
    • 错误码, 目前有以下5种错误码:
      • INVALID_REQUEST_EXCEPTION 请求格式错误。
      • REQUEST_ENTITY_TOO_LARGE 整体请求包过大。
      • UNAUTHORIZED_REQUEST_EXCEPTION 请求认证失败。
      • THROTTLING_EXCEPTION 请求数量太多/频率太高。
      • INTERNAL_SERVICE_EXCEPTION 服务端内部错误。
      • RESPONSE_ENTITY_TOO_LARGE 整体响应包过大,阈值设置跟具体端相关,详见设备didp配置信息,详见AppControlConf.sizeLimit
      • N/A 服务端不可用。
  • description
    • 错误的详细描述, 可以用于记录错误细节,或用于帮助开发者调试。description有可能为空。

SetSkin指令

设备端执行SetSkin指令,下载唤醒上屏中的资源,包括应答背景图片、上屏背景图、上屏皮肤图片,以及对应hints文件

消息样例

"directive": {
  "header": {
    "namespace": "ai.dueros.device_interface.system",
    "name": "SetSkin",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}"
  },
  "payload": {
    "adResource": [{ 
        "url": "{{STRING}}",
        "id": "{{STRING}}",
        "adGroupId": "{{STRING}}",
    }]
  }

Payload参数说明

  • (optional) adResource
    • 广告上屏资源信息 包括:设备唤醒时的上屏资源等,以tar包形式下发。tar包中包含描述文件description.json,详情见后面描述。
  • (optional) adResource[].url
    • 资源下载链接,资源文件打tar包格式,tar包含需要展示资源文件列表
    • tar包含上屏皮肤图片、唤醒背景图、上屏背景图图片、hints文件
      • description.json 资源描述文件description.json的格式如下
             {
                 "resources": [{
                     "file" : "{{STRING}}",
                     "brief" : "{{STRING}}",
                     "type": "{{ENUM}}"
                 }]
             }
        • desciption 字段描述:
          • file
            • 资源文件名
          • brief
            • 资源文件对应的内容简介
          • type
            • 文件属性,1 - 唤醒背景、2 - 上屏背景、3 - 上屏皮肤、 4 - 唤醒hints
              • WAKEUP_BG 唤醒背景图
              • HINT_SCREEN_SAVER 屏保唤醒展示的hint
              • HINT_NORMAL 非屏保正常唤醒展示的hint
              • SKIN_PLAY 上屏皮肤展示图片
              • SKIN_BG 上屏背景图
  • (optional) adResource[].id
    • 上屏资源ID
  • (optional) adResource[].adGroupId
    • 广告资源组ID,与屏保广告、上屏皮肤广告联动使用

SetHolidaySkin 指令

端上收到 SetHolidaySkin 指令后,会将此指令缓存下来,同一场景(scene)下只会保存一个指令,后一个覆盖前一个。此指令经常和物料下载指令 Material.Download 配合使用,触发节日换肤场景如下:

  1. 当设备回到桌面(首页后),端上会根据此指令的 scene (=desktop) 和 materialId,找到对应的皮肤物料进行换肤操作
  2. 打开短视频 apk 后,短视频 apk 会根据此指令的 scene (=shortVideo) 和 materialId,找到对应的皮肤物料进行换肤操作

消息样例

"directive": {
  "header": {
    "namespace": "ai.dueros.device_interface.system",
    "name": "SetHolidaySkin",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}"
  },
  "payload": {
    "scene": "{{STRING}}",
    "materials": [{
        "materialId" : "{{STRING}}",
        "effectiveTimeRange" : [{
            "startTimeStamp" : {{INT}},
            "endTimeStamp" : {{INT}}
        }]
    }]
  }

Payload参数说明

  • scene
    • 换肤的场景
      • desktop: 桌面换肤
      • shortVideo: 短视频桌面换肤
  • materials[].materialId
    • 桌面皮肤物料ID,广告物料的唯一标识
    • materials[].effectiveTimeRange
    • 广告物料生效时间范围,需要注意同一个物料会有同时存在多个生效范围的情况
    • materials[].effectiveTimeRange[].startTimeStamp
    • 物料生效时间戳,例如1635804000,表示生效时间为:2021-11-02 06:00:00
    • materials[].effectiveTimeRange[].endTimeStamp
    • 物料生效时间戳,例如1635865200,表示生效时间为:2021-11-02 23:00:00

ClearHolidaySkin 指令

端上收到 ClearHolidaySkin 指令后,端上会删除缓存的 SetHolidaySkin 指令,并清除指定场景下已经生效的节日皮肤。有如下可能

  1. 不指定场景(scene),那么将删除所有场景下缓存的 SetHolidaySkin 指令,并清除所有场景已经生效的节日皮肤(表示恢复默认的皮肤)
  2. 指定场景(scene),那么将会清除 scene 场景下缓存的 SetHolidaySkin 指令, 并清除该场景已经生效的节日皮肤(表示恢复默认的皮肤)

消息样例

"directive": {
  "header": {
    "namespace": "ai.dueros.device_interface.system",
    "name": "ClearHolidaySkin",
    "messageId": "{{STRING}}",
    "dialogRequestId": "{{STRING}}"
  },
  "payload": {
    "scene": "{{STRING}}"
  }

Payload参数说明

  • scene
    • 皮肤场景
      • desktop: 桌面换肤
      • shortVideo: 短视频桌面换肤