摘要
本接口包含了一些系统级别的接口,如同步设备端状态、设置服务接入端地址、异常信息等指令与事件。
版本变更
变更历史 | 变更时间 | 变更描述 |
---|---|---|
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"。
- 第一天自动息屏开始时间,ISO 8601格式,用INT类型表示。
- (optional) settings.screenRestEndTime
- 第二天自动息屏结束时间,ISO 8601格式,用INT类型表示。
- "hh:mm",样例值:"22:00",用INT类型表示为"2200"。
- 第二天自动息屏结束时间,ISO 8601格式,用INT类型表示。
- (optional) settings.autoShutDownModeSwitch
- 是否打开自动开关机: true为打开,false表示关闭。
- (optional) settings.autoShutDownTime
- 自动关机的时间,ISO 8601格式,用INT类型表示。
- "hh:mm",样例值:"22:00",用INT类型表示为"2200"。
- 自动关机的时间,ISO 8601格式,用INT类型表示。
- (optional) settings.autoStartingUpTime
- 自动开机的时间,ISO 8601格式,用INT类型表示。
- "hh:mm",样例值:"22:00",用INT类型表示为"2200"。
- 自动开机的时间,ISO 8601格式,用INT类型表示。
- (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
- ai.dueros.device_interface.screen的packageName的映射,公式为
- (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
- ai.dueros.device_interface.screen的activityClassName的映射,公式为
- (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 奇巴布
- 当前在前台的第三方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指令打开的):
- (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 服务端不可用。
- 错误码, 目前有以下5种错误码:
- 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 上屏背景图
- 文件属性,1 - 唤醒背景、2 - 上屏背景、3 - 上屏皮肤、 4 - 唤醒hints
- file
- desciption 字段描述:
- description.json 资源描述文件description.json的格式如下
- (optional) adResource[].id
- 上屏资源ID
- (optional) adResource[].adGroupId
- 广告资源组ID,与屏保广告、上屏皮肤广告联动使用
SetHolidaySkin 指令
端上收到 SetHolidaySkin 指令后,会将此指令缓存下来,同一场景(scene)下只会保存一个指令,后一个覆盖前一个。此指令经常和物料下载指令 Material.Download 配合使用,触发节日换肤场景如下:
- 当设备回到桌面(首页后),端上会根据此指令的 scene (=desktop) 和 materialId,找到对应的皮肤物料进行换肤操作
- 打开短视频 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 指令,并清除指定场景下已经生效的节日皮肤。有如下可能
- 不指定场景(scene),那么将删除所有场景下缓存的 SetHolidaySkin 指令,并清除所有场景已经生效的节日皮肤(表示恢复默认的皮肤)
- 指定场景(scene),那么将会清除 scene 场景下缓存的 SetHolidaySkin 指令, 并清除该场景已经生效的节日皮肤(表示恢复默认的皮肤)
消息样例
"directive": {
"header": {
"namespace": "ai.dueros.device_interface.system",
"name": "ClearHolidaySkin",
"messageId": "{{STRING}}",
"dialogRequestId": "{{STRING}}"
},
"payload": {
"scene": "{{STRING}}"
}
Payload参数说明
- scene
- 皮肤场景
- desktop: 桌面换肤
- shortVideo: 短视频桌面换肤
- 皮肤场景