智能应用开放平台

在小程序的语音交互中,某些时候语料中的参数取值范围不是固定的,而是由页面上展示的内容动态确定。这个时候该参数就不能关联自定义实体了,而是需要将其设置为所见即可说参数,其参数的取值由页面动态赋值。这就是所见即可说的使用场景。


一、创建应用

按照小程序接入流程文档,创建智能应用语音小程序


二、配置语音交互模型

2.1 引用 sys.select 公共实体


点击 语音交互模型创建 --> 实体 进入实体配置页面,点击 引用公共实体

image


在公共实体列表中,找到实体标识 sys.select 公共实体,打开实体后的引用按钮,即可引用此公共实体。

image


2.2 创建所见即可说参数


返回意图列表页面,可以看到已经存在一个默认意图。点击 编辑 进入默认意图配置页面,配置意图参数和语料。

image


所见即可说参数可以创建多个,参数名称可以根据业务需要自定义。这里定义两个参数为:category 和 item,所见即可说参数需要关联前面引用的 sys.select公共实体。参数名称可以根据自己的业务需要起名称,不要求和示例一致;参数数量也可以自己决定。但这里的参数名称和小程序内设置动态参数的参数名称要一致。


然后添加一些使用了所见即可说参数的语料,意图需要语料才能进入。

image



2.3 将意图设为动态意图


返回 意图 列表,将意图设为动态意图。

image



2.4 配置页面意图(新建pageId)


进入 配置页面意图,点击新增配置。

image


为pageId绑定动态意图。

image


三、 绑定真机测试设备

在小程序IDE中,绑定真机测试设备。

image



四、在小程序项目中设置参数动态内容

在页面 js文件 Page中的 onShow() 方法中注册语音能力和设置所见即可说参数的取值内容:

my.call('useCustomSkill', {
    skillName: '2021002102611878',//小程序id
    secretKey: 'aafb8a16-ef4c-4bf0-b5dd-5d6a4ec2769f',//小程序应用的secretKey
    pageId: 'pages/index/index'//配置页面意图中定义的页面地址
});

my.call("setSelectContent", {
    content: { //所见即可说的参数名, 支持多个(这里是catetroy和item),需要和意图配置的参数名称一致
        category: {
            'C0': ['宠物', '小动物'],
            'C1': ['玩具', '毛绒绒玩具']
        },
        item: {
            'IA': ['狗', '小狗', '汪星人'], //数组内的内容,会归一为Key值IA
            'IB': ['猫', '小猫', '喵星人']
        }
    },
    success: function(res) {
        console.log("setSelectContent complete " + JSON.stringify(res))
    },
    fail: function(res) {
        console.log("setSelectContent fail " + JSON.stringify(res))
    },
})


五、测试语料

参数动态内容设置好之后,可以通过Page中的 onVoiceEvent (event) 方法接收语音回调:

Page({
    //Page中的onShow()等方法;
    
    onVoiceEvent(event){
        my.alert({content: "onVoiceEvent = " + JSON.stringify(event)}); 
    }
});


此时说“天猫精灵,小狗”,  则会获取到如下结果:

{
    "domain": "AliGenie.Text",
    "command": "NluResult",
    "param": {
        "slots": [
            {
                "domainSlot": "item:sys.select",
                "liveTime": 0,
                "name": "item",
                "norm": "IA",
                "value": "小狗"
            }
        ],
        "domain": "所见即可说",
        "query": "小狗",
        "intent": "default"
    }
}


说“天猫精灵,选择玩具中的小猫” 则会获取如下结果:

{
    "domain": "AliGenie.Text",
    "command": "NluResult",
    "param": {
        "slots": [
            {
                "domainSlot": "category:sys.select",
                "liveTime": 0,
                "name": "category",
                "norm": "C1",
                "value": "玩具"
            },
            {
                "domainSlot": "item:sys.select",
                "liveTime": 0,
                "name": "item",
                "norm": "C1",
                "value": "小猫"
            }
        ],
        "domain": "所见即可说",
        "query": "选择玩具中的小猫",
        "intent": "default"
    }
}