# EVS设备体验参考规范
说明
本文档是iFLYOS 团队在开发智能硬件设备时总结出来的设备体验规范,意在帮助首次开发,或开发经验不足的团队设计更好的设备交互体验。除基础约定和音频焦点管理等基础实现外,如果你已经有一套完善的,成体系的,有经验的设备体验规范,你并不需要完全遵循本规范进行实现。
# 基础约定
我们建议,设备生成requets_id
时,requets_id
分为两类:
- manual:用户在设备端主动发起的请求,包括
text_in
,audio_in
,按键,屏幕触控等。建议格式为manual_{uuid}
- auto:非用户在设备端主动发起的请求,包括APP推送,云端推送,设备自动状态同步等。建议格式为
{uuid}
收到response
时,设备判断response
中的request_id
类型,决定该response
是否执行:
manual
:设备本地维护current_request_id
,若response
的request_id
是current_request_id
,则执行;若不是,则不执行。auto
:均需要执行。
设备需要维护执行队列,将待执行的指令均按照收到response
的顺序放入执行队列,按顺序执行。
执行过程中,若用户发起了新的请求(manual
类),设备清空待执行队列。
# 音频焦点管理
audio_player设备模块和recognizer可能会影响到设备的音频焦点,为了良好的用户体验,我们建议设备音频焦点管理按照以下逻辑进行实现:
- 同时只有一个通道在前景活跃,一个在背景活跃。
- 多个通道需要活跃时,按照优先级分配焦点。优先级高(数字小)的通道给予前景活跃,优先级低的通道给予背景活跃,其他模块失去焦点。
- 同一通道的不同业务,采用就近原则分配焦点,即:新来的业务打断原本在活跃的业务,并开始活跃。
- 部分模块请求焦点时,需先抢焦点(释放当前前景活跃的模块的焦点),再请求焦点,依据优先级进行焦点分配。详见表格
- 某一业务需要使用音频模块时,主动请求获取焦点;音频模块使用完成,主动释放焦点。
在以上的基础上,为了良好的用户体验,我们建议:
- 在检测到用户唤醒或录音中检测到用户开始说话时,主动停止正在播放的TTS或设备提示音
- 通话过程中,不处理云端推送的除挂断电话之外的任何response
# 网络处理
- 设备进入网络配置模式时,若设备已经联网,不断开当前的网络连接,直到连接上新的网络。
- 设备连接上网络时,设备本地储存WiFi名和密码。直到设备恢复出厂设置才清空。
- 设备断网(没有联网)时,每5min进行一次网络重连,遍历尝试设备本地的WiFi名和密码是否能够连接网络。
- 设备联网,但所连网络无法建立与IVS的连接时,每10s发送一次建立连接的请求。
- 云端每隔2分钟会发送一次ping指令,设备在2min中内时间没有收到云端返回的
ping
时,设备主动重连网络。建议客户端每隔2分钟检测是否有正常收到该响应
# 设备升级处理
iFLYOS提供了通用的OTA升级服务,当你需要升级新版本时,可以在设备控制台中上传测试通过的系统安装包,iFLYOS的OTA服务会将新版本推送给设备。
当设备收到OTA推送的新版安装包时,我们建议在网络良好的情况下自动下载安装包。
下载完成后。用户第一次语音唤醒,播放TTS提示音:发现新版本,你可以对我说立即升级,并继续录音。
- 此后若设备收到安装更新的返回,则安装新版本。
- 若设备没有在此次交互中收到安装更新的返回(说明用户说了其他的内容),设备继续执行云端返回的指令。在用户没有语音交互的10分钟后,用户唤醒设备,设备再次播放TTS提示音:发现新版本,你可以对我说立即升级,并继续录音。
另外,我们建议下载完成后,若设备重启或关机再开机,则自动安装新版本。
开始安装新版本时,播放TTS提示音:固件升级中
升级完成后,播放TTS提示音:升级成功,久等了。
注意:升级过程中,设备可能会多次重启。
# 设备音量处理
- 当用户把设备音量设置为0时,设备发送
audio_in
请求,此时设备音量需自动恢复到10%。(否则会让用户认为自己发送的请求无效或设备没有反馈) - 若设备条件允许,建议播放
PLAYBACK
时:音频从无到有时,音频渐入(500ms内从音量从0到正常音量);音频从有到无时,直接停止。 - 设备音量调整时,请参考设备提示音-音量设置进行处理,向用户反馈操作已完成。
# 唤醒处理
一般来说,当设备识别到唤醒时,需开启设备麦克风录音,并发送recognizer.audio_in
请求。在以下情况我们建议:
- 当设备正在录音的过程中,再次识别到用户唤醒。建议取消当前发送的
audio_in
请求(发送__CANCEL__
),开启新的请求。 - 在设备刚录音结束,还没有收到云端返回的时候,识别到用户唤醒。应该开启新的
audio_in
请求,在新请求的过程中若收到云端的返回,应该忽略,不予执行。 - 在设备录音结束,收到云端返回后,无论是否已经开始执行。若识别到用户唤醒,应该打断当前的执行,开启新的
audio_in
请求。 - 在设备执行与某
request_id
相关的回复的过程中,若开启了新的request_id
的请求,与旧的request_id
相关的还未执行的操作,应该抛弃,不予执行。 - 在网络配置模式和设备升级过程中,我们建议不响应用户唤醒。
说明
设备可存在多个唤醒词,不同唤醒词可能承载不同的功能,比如你可以把"下一首"作为控制命令的唤醒词,当识别到唤醒时,进行NEXT
的操作。
# 设备闹钟
相同时间点不应该出现两个闹钟。
若设备云端下发的闹钟的timestamp与设备已有闹钟相同,则新闹钟覆盖旧的闹钟。
设备闹钟响铃时,使用audio_player.audio_out.ring的播放器。
# 设备按键
一般来说,设备会有一些实体按键或界面通用操作按键,当用户点击按钮后,你可以发送按钮对应的request
告知服务端用户点击了按键,也可以发送text_in
请求服务端进行语义理解。以下是我们对按键操作的一些建议:
按钮 | 动作 | 按钮reqeust | text_inrequest 的query 内容 |
---|---|---|---|
播放/暂停 | 单击 | - 若设备播放中,发送type 取值为PAUSE 的 playback_controllerrequest - 若设备未播放,发送 type 取值为RESUME 的 playback_controllerrequest | - 若设备播放中,发送暂停 - 若设备未播放,发送 播放 |
音量+ | 单击 | 设备音量+10,并发送system.state_sync | 发送声音大一点 |
音量- | 单击 | 设备音量-10,并发送system.state_sync | 发送声音小一点 |
音量+/- | 长按超过500s | 以每200ms为音量10%进行计算,调整设备音量并发送system.state_sync | 发送把音量设为{80} (数值根据用户长按的时间进行计算) |
# 设备提示音
我们整理了常用的设备提示音效和提示音,你可以点击下载 (opens new window)。如果你需要自定义TTS提示音,可以使用TTS文件合成工具 (opens new window)进行生成。
# 开机
- 设备第一次开机时,播放开机提示音。之后TTS提示用户:“hi,欢迎使用iFLY OS设备,请扫描说明书上的二维码,或在各大应用市场下载小飞在线APP,添加购买的设备,和我一起前往未来世界吧。” 不主动进入网络配置模式。
- 设备升级成功后开机,播放TTS提示:升级成功。若本次升级造成断开网络连接,设备不主动进入网络配置模式。
# 发送audio_in请求
- 正常情况下唤醒,播放提示音效。
- 按键开始录音时,播放提示音效。
# 麦克风状态
设备可以通过按键进行麦克风禁用操作。
- 当麦克风被禁用时,播放TTS:麦克风已禁用。
- 当麦克风被取消禁用时,播放TTS:麦克风已打开。
# 音量设置
当用户调整音量时,播放提示音效,向用户反馈操作已完成。
# 蓝牙连接(设备作为扬声器使用)
- 当设备从无蓝牙连接到有蓝牙连接时,提示用户:蓝牙已连接。
- 当设备从蓝牙连接设备A到连接设备B时,提示用户:蓝牙已连接。
- 当设备从有蓝牙连接到无蓝牙连接时,提示用户:蓝牙已断开。
- 当用户操作设备(比如按键),打开蓝牙,使设备进入等待蓝牙连接的模式时,提示用户:蓝牙已打开。
- 蓝牙可发现时,提示用户:等待蓝牙连接
# 闹钟
为了避免云端发送的音频播放失败,设备本地需要存储默认闹钟音频。
- 当收到云端的
audio_player.audio_out.ring
返回时,播放返回中的音频。若音频播放失败,播放本地闹钟音频。 - 当设备本地的闹钟时间到时,播放
alarm.set_alarm
返回中的音频。若音频播放失败,播放本地闹钟音频。
# 网络
TTS提示内容 | 代表状态 | 播放时机 |
---|---|---|
进入网络配置模式,请打开APP按照流程指引设置网络。 | 进入网络配置模式 | 设备进入网络配置模式时 |
收到密码,正在努力联网 | 开始联网 | 设备接收到WiFi名和密码信息,开始尝试联网时 |
WiFi密码好像不对 | 因WiFi密码错造成联网失败 | 设备联网时,联网失败,报错信息:WiFi名和密码不匹配 |
我已联网,你可以对我说:来点音乐 | 设备联网成功 | 设备在网络配置模式连上网络,并与iFLYOS建立了连接注意:设备主动重连时,不播放该提示。 |
联网超时,请重试 | 超时主动退出网络配置模式 | 当设备超时,主动退出网络配置模式时 |
网络配置失败,请重试 | 设备联网失败 | 设备因为非配置原因无法联网,主动退出网络配置时。 |
网络好像出了点问题,检测下网络吧 | 设备连上了不可用的网络 | 当设备连上网络,但无法访问互联网时 |
蓝牙已连接 | 设备已连接上BLE | 设备连接上BLE时 |
已失去网络连接,请打开APP检查网络配置 | 设备断开WiFi连接 | 断网情况下用户唤醒时。 断网情况下用户进行需要网络请求的操作(上一首、下一首、播放等) 设备正在播放PLAYBACK,失去网络连接时。 |
登录状态失效,请打开APP重新登录 | 设备token失效 | 用户请求时(语音或按键),云端报错:token失效 |
网络好像有点问题,休息下再试试吧 | 弱网条件,请求超时,或IVS没有返回 | 用户请求时(语音或按键),5秒未收到云端的返回。 |
# 设备升级
设备升级时需提示用户。注意:系统自动升级不播放提示。
TTS提示内容 | 代表状态 | 播放时机 |
---|---|---|
设备升级中,请耐心等待。在升级过程中,设备可能重启,请保持电源连接 | 开始升级 | 用户主动触发的升级,开始升级时提示。 |
设备升级成功 | 升级完成-成功 | 用户主动触发的升级,升级成功后提示。 |
设备升级失败,请打开APP检查设备更新 | 升级完成-失败 | 用户主动触发的升级,升级失败后提示。 |