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

一、创建应用

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

二、配置语音交互模型

2.1 引用 sys.select 公共实体

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

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

2.2 创建所见即可说参数

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

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

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

2.3 将意图设为动态意图

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

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

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

为pageId绑定动态意图。
8.png

三、 绑定真机测试设备

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

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

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

  1. my.call('useCustomSkill', {
  2. skillName: '2021002102611878',//小程序id
  3. secretKey: 'aafb8a16-ef4c-4bf0-b5dd-5d6a4ec2769f',//小程序应用的secretKey
  4. pageId: 'pages/index/index'//配置页面意图中定义的页面地址
  5. });
  6. my.call("setSelectContent", {
  7. content: { //所见即可说的参数名, 支持多个(这里是catetroyitem),需要和意图配置的参数名称一致
  8. category: {
  9. 'C0': ['宠物', '小动物'],
  10. 'C1': ['玩具', '毛绒绒玩具']
  11. },
  12. item: {
  13. 'IA': ['狗', '小狗', '汪星人'], //数组内的内容,会归一为KeyIA
  14. 'IB': ['猫', '小猫', '喵星人']
  15. }
  16. },
  17. success: function(res) {
  18. console.log("setSelectContent complete " + JSON.stringify(res))
  19. },
  20. fail: function(res) {
  21. console.log("setSelectContent fail " + JSON.stringify(res))
  22. },
  23. })

五、测试语料

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

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

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

  1. {
  2. "domain": "AliGenie.Text",
  3. "command": "NluResult",
  4. "param": {
  5. "slots": [
  6. {
  7. "domainSlot": "item:sys.select",
  8. "liveTime": 0,
  9. "name": "item",
  10. "norm": "IA",
  11. "value": "小狗"
  12. }
  13. ],
  14. "domain": "所见即可说",
  15. "query": "小狗",
  16. "intent": "default"
  17. }
  18. }

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

  1. {
  2. "domain": "AliGenie.Text",
  3. "command": "NluResult",
  4. "param": {
  5. "slots": [
  6. {
  7. "domainSlot": "category:sys.select",
  8. "liveTime": 0,
  9. "name": "category",
  10. "norm": "C1",
  11. "value": "玩具"
  12. },
  13. {
  14. "domainSlot": "item:sys.select",
  15. "liveTime": 0,
  16. "name": "item",
  17. "norm": "C1",
  18. "value": "小猫"
  19. }
  20. ],
  21. "domain": "所见即可说",
  22. "query": "选择玩具中的小猫",
  23. "intent": "default"
  24. }
  25. }