car 1060+
{ "name": "service.vui" }
import vui from '@service.vui'
内置语音需要建立连接等初始化过程,成功后才可使用后面的能力;
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
domains | Array | 否 | 应用关注的垂域。目前支持music和interactive两个垂域,参考意图列表 |
success | Function | 否 | 初始化成功 |
fail | Function | 否 | 失败原因 |
import vui from '@service.vui'
vui.initialize({
success: function(){
console.log(`### 内置语音接口 ### 初始化成功`)
},
fail: function(err){
console.log(`### 内置语音接口 ### 初始化失败:`, err)
}
})
应用关注的垂域
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
domains | Array | 是 | 应用关注的垂域。目前支持music和interactive两个垂域,参考意图列表 |
success | Function | 否 | 成功回调 |
fail | Function | 否 | 失败回调 |
vui.setDomains({
domains: ["common", "music"],
success: function(){
},
fail: function(err){
}
})
获取内置语音能力的基本信息,如:语音提供商、版本、及其额外携带的信息;
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 成功回调 |
fail | Function | 否 | 失败回调 |
参数值 | 类型 | 说明 |
---|---|---|
name | String | 提供商名称 |
version | String | 提供商版本 |
vui.getProviderInfo({
success: function(data){
const { name, version } = data
console.log(`### 内置语音接口 ### 获取基本信息成功:`, data)
},
fail: function(err){
console.log(`### 内置语音接口 ### 获取基本信息失败:`, err)
}
})
监听期间发生的错误并回调
vui.onError = function (err) {
// err拥有 message, stack 属性
}
开麦,打开收音能力;
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 成功回调 |
fail | Function | 否 | 失败回调 |
vui.openMic({
success: function(){
},
fail: function(err){
}
})
关麦,关闭收音能力;
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 成功回调 |
fail | Function | 否 | 失败回调 |
vui.closeMic({
success: function(){
},
fail: function(err){
}
})
当用户说话时,ASR持续识别中返回的结果;
参数值 | 类型 | 说明 |
---|---|---|
originalText | String | 初始ASR用户解析结果 |
vui.onAsrPartialResult = function (response) {
const { originalText } = response
console.info(`语音识别中的结果:`, originalText)
}
当用户说话经过判停后,ASR识别返回的结果;
场景举例:CP自己根据ASR结果去做后续的意图识别,并完成对应的操作:页面元素的点击 或 意图业务逻辑;
参数值 | 类型 | 说明 |
---|---|---|
originalText | String | 经过ASR后用户最原始的结果 |
rewrittenText | String | 经过纠错等环节后的最终结果 |
// 识别结束
vui.onAsrCompleteResult = function (response) {
const { originalText, rewrittenText } = response
// 如果开发者希望根据ASR结果去决策,而不用到默认语音的NLP能力,那么可以在这里拦截并处理;
// 伪代码处理方式,比如:本地做意图识别、UI事件分发
// const { text } = values[0]
// const viewControlList = vui.getVuiContext()
// const controlList = searchViewControls(text, viewControlList)
// if (controlList.length > 0) {
// vui.dispatchEvent(controlList[0])
// }
}
当用户说话得到ASR结果,然后NLP处理后,返回对应的处理结果。
参数值 | 类型 | 说明 |
---|---|---|
pageChanged | Boolean | 语音识别中页面是否切换了 |
instructions | Array | 指令对象数组 |
指令对象包含两种类型:
参数值 | 类型 | 说明 |
---|---|---|
type | String | 识别出来的类型,元素指令永远是vui.INSTRUCTION_TYPE.ELEMENT |
参数值 | 类型 | 说明 |
---|---|---|
type | String | 识别出来的类型,意图指令永远是vui.INSTRUCTION_TYPE.INTENT |
name | String | 意图的名称 |
params | Object | 意图的参数 |
支持的意图详情见意图列表
开发者需要在函数中返回一个布尔值。当返回true时,表明开发者已经自行处理了上述指令;否则框架将使用默认处理策略。
框架的默认处理策略如下:
vui.onNlpResult = function (response) {
const { pageChanged, instructions } = response
// 取第0个元素
const instructionItem = instructions[0]
const { type } = instructionItem
if (instructionItem.type === vui.INSTRUCTION_TYPE.ELEMENT) {
// 识别结果为:UI事件操作
if (!pageChanged) { // 只有页面没有切换的情况下,才处理元素指令
// 触发UI事件操作,如:某个页面中某个元素的点击事件
vui.dispatchEvent(instructionItem)
}
}
else if (instructionItem.type === vui.INSTRUCTION_TYPE.INTENT) {
// 识别结果为:之前注册的意图命令
// 开发者根据识别出来的意图结果,完成对应的业务响应;如:"CART_OPEN"
const { name } = instructionItem
// ... switch case ...
}
}
如果开发者希望,用户说的话识别为对UI元素的操作,那么就需要做到:某个元素对应的操作尽量符合用户的话语;
比如:页面中有一个"购物车"按钮,CP希望尽量匹配:"第5个,打开购物车,查看购物车,看看点了哪些"这样的话术;
那么,CP在代码中写该节点时,就声明对应的:vtags, vindex的属性;
如:
设置TTS播报内容;
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
text | String | 是 | 播报的内容 |
success | Function | 否 | 成功回调 |
fail | Function | 否 | 失败回调 |
vui.requestTts({
text: '这是要语音播报的内容',
success: function(){
console.log(`### 内置语音接口 ### TTS成功`)
},
fail: function(err){
console.log(`### 内置语音接口 ### TTS失败:`, err)
}
})
停止TTS播报内容;
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 成功回调 |
fail | Function | 否 | 失败回调 |
vui.cancelTts({
success: function(){
console.log(`### 内置语音接口 ### 停止TTS成功`)
},
fail: function(err){
console.log(`### 内置语音接口 ### 停止TTS失败:`, err)
}
})
当NLP识别结果的类型为界面元素的操作时,用于触发该元素的事件操作;
事件包含了:发生在哪个页面、哪个元素、什么操作(如:点击);
注意:该方法的参数,不支持开发者自己定义;通常传递该类型时指令的结果即可;
// 触发DOM操作
vui.dispatchEvent(instructionItem)
关闭语音接受能力;
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
success | Function | 否 | 成功回调 |
fail | Function | 否 | 失败回调 |
vui.close({
success: function(){
console.log(`### 内置语音接口 ### 关闭成功`)
},
fail: function(err){
console.log(`### 内置语音接口 ### 关闭失败:`, err)
}
})
领域(domain) | 意图(name) | 参数(params) | 说明 | 默认响应 | 话术示例 |
---|---|---|---|---|---|
music(音乐) | intent.music.previous | 无 | 上一首 | 是 | 上一首、前一首、上一个 |
intent.music.next | 无 | 下一首 | 是 | 下一首、后一首、下一个 | |
intent.music.play | 无 | 播放 | 是 | 播放、放歌 | |
intent.music.pause | 无 | 暂停 | 是 | 暂停、停止、安静 | |
intent.music.resume | 无 | 继续 | 是 | 继续、继续放 | |
intent.music.stop | 无 | 停止 | 是 | 停止、停、别放了 | |
interactive(交互) | intent.interaction.back | 无 | 返回 | 是 | 返回、后退 |
intent.interaction.exit | 无 | 退出 | 是 | 退出、关闭 |