作者:重庆互联网小徐 发布时间:2024-04-28 浏览:19743 赞(1950) 收藏 评论(0)
这里通过下面一张图,简要总结一下使用小微的流程
初始化小微device,并等待成功
自己唤醒,与小微无关
调用request接口发送第1个语音包
收到on_dialog_begin
回调
调用request接口发送第2个语音包
调用request接口发送第m个语音包
收到on_speak
回调
调用request接口发送第n个语音包
收到on_recognize
回调,拿到ASR实时结果
调用request接口发送第k个语音包
收到on_recognize
回调,拿到ASR实时结果
调用request接口发送第p个语音包
收到on_silence
回调,停止发送语音包
等待一小会儿
收到on_response
回调,获得NLP结果和资源
对小微而言,对话到此结束,收到on_dialog_end
用户自己处理资源和控制命令(或者是我们提供的开源控制层)
结束
上述流程是一个最标准的流程,当然在这个过程中可以主动停止对话,或者主动发送静音包,这在接口说明中有详细描述。如果用户发起的是文本请求,那么上述过程第3步就变成了发送文本请求包,5到第13步就不存在了。
在上述中的流程图中,有一个ON_RESPONSE
事件,即在回调中拿到了最终响应,也就是获得了NLP的结论和资源。这里详解一下response的数据结构,即XWResponseInfo
这轮请求命中了哪一个技能,如音乐、闲聊等,一般来讲用户应根据命中的不同技能进行不同的操作,如打开音乐播放器,加载UI等。
这个和appInfo结构一样,标识了您当前处于的skill状态,这个状态事实上是依赖于您的状态上报的,这在后续有详细说明。
这个响应针对哪一次请求,voiceID唯一标识了一次请求。
上下文信息。每次请求您都需要携带一个context,同样在返回时您会获得一个context。在context中维护了多轮对话的状态,当您收到响应时发现context中申明了id和speakTimeout时,则表明这是一个多轮对话,在下次请求的时候带上这个id标记。关于context的具体说明请参考接口说明。
这个字段主要针对一些自定义技能,小微APP在responseData中返回某些技能所需的额外数据或资源。
这个字段向用户暴露意图槽位以及用户定制的一些返回。该字段默认不返回任何数据,如果您需要定制化某些内容,请与商务联系。
小微返回的资源全部位于这里。 XWResGroupInfo是一个数组,在每个元素中又有若干个resources(XWResourceInfo),XWResourceInfo代表一个具体的资源。
在正常情况下,是按照二维数组的顺序一个一个进行播放。如果发生用户主动切换“上一首”、“下一首”操作,则需要按照Group这个一维数组的维度进行切换。具体的意义可以参考下图:
正常情况下先播放resources[0].resource[0]
,然后播放resources[0].resource[1]
,当第一个resources的资源全部播放完毕之后,播放第二个resources。而当切歌时,则应该从resources[0]
直接切换到resources[1]
。
这个字段表示是否还有更多的资源可以拉取,在某些skill下,例如音乐,点歌时只会返回若干首(默认6首)资源,当您快要播放完毕的时候,可以调用资源拉取接口来获得更多的资源。
在某些sikill下(目前只支持音乐),我们还为您维护了历史播放列表,当用户使用上一首功能到第一首的时候,可以调用拉取历史列表的接口来获取历史歌单。
当前资源(resourceGroup)被打断后是否应该继续播放。例如音乐一般就是可以继续播放的,当设备播放音乐时,如果与小微闲聊几句,聊完之后音乐应该恢复播放。天气就是一种不能恢复播放的资源,当询问小微天气后,小微正在播报天气的过程中如果打断她,后续就不应该再播放天气了。
这个字段表示当前资源是否是一个notify资源。对于notify资源,不应该对当前的资源列表产生任何操作,这里在下面playBehavior里面有体现。notify资源应该单独起一个线程去播放,播完就释放。在我们的Android Demo中,当收到notify资源时,当前正在播放的资源音量会降低到20%,然后另起一个播放器播放notify,二者叠加。当notify播放完毕后,当前资源恢复100%音量。常见的notify例子是,播放音乐的时候对小微说收藏这首歌,然后收到notify:"收藏xxx成功"。
资源列表拼接类型,如替换当前列表、插入尾部、插入头部等。
当前列表或历史列表
小微回答对应的文本,一般来说resourceGroup[0].resources[0]就是这句话的TTS。
控制指令ID,例如播放、暂停等。当这个值为0时,表示默认操作,也就是按顺序播放(处理)所有资源。注意当某次返回既有资源又有controlId时,应该先按照playBehavior处理资源,然后再执行控制指令。
与controlId对应,某些控制没有controlValue,例如暂停。而某些控制则有,例如快进到某个位置,这个value就是快进到的offset值。
重庆互联网项目从2004年开始为各行各业提供互联网发展解决方案,专业从事网站、小程序、微信公众号、APP、电商平台、系统等互联网平台开发,帮助企业实现从传统行业到互联网的完美转型。截止目前,重庆互联网合作的企业遍布全国各地,20年的开发经验和完善的售后服务体系获得合作客户的高度认可!
关注重庆互联网官方公众号,即可获取粉丝专享福利!
欢迎广大用户为此页面进行评价,评价成功将获得积分奖励!