# 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,若responserequest_idcurrent_request_id,则执行;若不是,则不执行。
  • auto:均需要执行。

设备需要维护执行队列,将待执行的指令均按照收到response的顺序放入执行队列,按顺序执行。

执行过程中,若用户发起了新的请求(manual类),设备清空待执行队列。

# 音频焦点管理

audio_player设备模块和recognizer可能会影响到设备的音频焦点,为了良好的用户体验,我们建议设备音频焦点管理按照以下逻辑进行实现:

  1. 同时只有一个通道在前景活跃,一个在背景活跃。
  2. 多个通道需要活跃时,按照优先级分配焦点。优先级高(数字小)的通道给予前景活跃,优先级低的通道给予背景活跃,其他模块失去焦点。
  3. 同一通道的不同业务,采用就近原则分配焦点,即:新来的业务打断原本在活跃的业务,并开始活跃。
  4. 部分模块请求焦点时,需先抢焦点(释放当前前景活跃的模块的焦点),再请求焦点,依据优先级进行焦点分配。详见表格
  5. 某一业务需要使用音频模块时,主动请求获取焦点;音频模块使用完成,主动释放焦点。

在以上的基础上,为了良好的用户体验,我们建议:

  • 在检测到用户唤醒或录音中检测到用户开始说话时,主动停止正在播放的TTS或设备提示音
  • 通话过程中,不处理云端推送的除挂断电话之外的任何response

# 网络处理

  1. 设备进入网络配置模式时,若设备已经联网,不断开当前的网络连接,直到连接上新的网络。
  2. 设备连接上网络时,设备本地储存WiFi名和密码。直到设备恢复出厂设置才清空。
  3. 设备断网(没有联网)时,每5min进行一次网络重连,遍历尝试设备本地的WiFi名和密码是否能够连接网络。
  4. 设备联网,但所连网络无法建立与IVS的连接时,每10s发送一次建立连接的请求。
  5. 云端每隔2分钟会发送一次ping指令,设备在2min中内时间没有收到云端返回的ping时,设备主动重连网络。建议客户端每隔2分钟检测是否有正常收到该响应

# 设备升级处理

iFLYOS提供了通用的OTA升级服务,当你需要升级新版本时,可以在设备控制台中上传测试通过的系统安装包,iFLYOS的OTA服务会将新版本推送给设备。

当设备收到OTA推送的新版安装包时,我们建议在网络良好的情况下自动下载安装包。

下载完成后。用户第一次语音唤醒,播放TTS提示音:发现新版本,你可以对我说立即升级,并继续录音。

  • 此后若设备收到安装更新的返回,则安装新版本。
  • 若设备没有在此次交互中收到安装更新的返回(说明用户说了其他的内容),设备继续执行云端返回的指令。在用户没有语音交互的10分钟后,用户唤醒设备,设备再次播放TTS提示音:发现新版本,你可以对我说立即升级,并继续录音。

另外,我们建议下载完成后,若设备重启或关机再开机,则自动安装新版本。

开始安装新版本时,播放TTS提示音:固件升级中

升级完成后,播放TTS提示音:升级成功,久等了。

注意:升级过程中,设备可能会多次重启。

# 设备音量处理

  1. 当用户把设备音量设置为0时,设备发送audio_in请求,此时设备音量需自动恢复到10%。(否则会让用户认为自己发送的请求无效或设备没有反馈)
  2. 若设备条件允许,建议播放PLAYBACK时:音频从无到有时,音频渐入(500ms内从音量从0到正常音量);音频从有到无时,直接停止。
  3. 设备音量调整时,请参考设备提示音-音量设置进行处理,向用户反馈操作已完成。

# 唤醒处理

一般来说,当设备识别到唤醒时,需开启设备麦克风录音,并发送recognizer.audio_in请求。在以下情况我们建议:

  1. 当设备正在录音的过程中,再次识别到用户唤醒。建议取消当前发送的audio_in请求(发送__CANCEL__),开启新的请求。
  2. 在设备刚录音结束,还没有收到云端返回的时候,识别到用户唤醒。应该开启新的audio_in请求,在新请求的过程中若收到云端的返回,应该忽略,不予执行。
  3. 在设备录音结束,收到云端返回后,无论是否已经开始执行。若识别到用户唤醒,应该打断当前的执行,开启新的audio_in请求。
  4. 在设备执行与某request_id相关的回复的过程中,若开启了新的request_id的请求,与旧的request_id相关的还未执行的操作,应该抛弃,不予执行。
  5. 在网络配置模式和设备升级过程中,我们建议不响应用户唤醒。

说明

设备可存在多个唤醒词,不同唤醒词可能承载不同的功能,比如你可以把"下一首"作为控制命令的唤醒词,当识别到唤醒时,进行NEXT的操作。

# 设备闹钟

相同时间点不应该出现两个闹钟。

若设备云端下发的闹钟的timestamp与设备已有闹钟相同,则新闹钟覆盖旧的闹钟。

设备闹钟响铃时,使用audio_player.audio_out.ring的播放器。

# 设备按键

一般来说,设备会有一些实体按键或界面通用操作按键,当用户点击按钮后,你可以发送按钮对应的request告知服务端用户点击了按键,也可以发送text_in请求服务端进行语义理解。以下是我们对按键操作的一些建议:

按钮 动作 按钮reqeust text_inrequestquery内容
播放/暂停 单击 - 若设备播放中,发送type取值为PAUSEplayback_controllerrequest
- 若设备未播放,发送type取值为RESUMEplayback_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检查设备更新 升级完成-失败 用户主动触发的升级,升级失败后提示。