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

一、创建应用

按照 天猫精灵APP接入文档,创建APP智能应用

二、配置语音交互模型

2.1 引用 sys.select 公共实体

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

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

2.2 创建所见即可说参数

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

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

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

2.3 将意图设为动态意图

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

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

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

若页面上没有 新增配置 按钮,可能是还没有上传过APK包,需要先去上传一个APK包。

注意:APK包上传时要填写:包名、版本号、版本Code、Fingerprint。且 包名 和 Fingerprint 上传后就不允许修改,对上传的APK包的要求请参考文档:天猫精灵APP接入
初次上传APK.png

填写页面地址(pageId),为 pageId 绑定动态意图。
配置页面意图.png

三、 绑定真机测试设备

在应用控制台真机测试页面内绑定测试设备。
绑定真机测试设备.png

四、在APP项目中设置参数动态内容

设置上下文数据
void getAppContextData(AppContextData contextData);

  • AppContextData

包括第三方应用的认证信息、私有协议数据和技能上下文信息,接口如下:

  1. public void setSecretKey(String secretKey) //设置认证信息,由开放平台生成
  2. public void setCanExitSkill(boolean canExitSkill) //设置是否可以退出当前技能
  3. public void setSelectListData(SelectListData selectListData) //设置动态语料参数实体相关信息
  4. void setPrivInfo(JSONObject privInfo)// 设置私有协议数据,由技能客户端与技能开发同学约定格式
  • SelectListData

包括动态语料的实体内容

  1. public void setPageId(String pageId) //设置当前页面的pageId。
  2. public void addSelectData(String slotName, List<SelectListItem> selectListItems) //增加动态语料多个参数实体
  3. public void addSelectData(String slotName, SelectListItem item) //增加动态语料单个参数实体
  • SelectListData.SelectListItem

设置指定slot的实体内容,特别提醒,在开放平台配置动态语料的时候,必须保证参数名称唯一

  1. public void setSelectKey(String selectKey) //设置归一化标记值,用于结果匹配
  2. public void addSelectValue(List<String> list) //增加参数多个实体内容
  3. public void addSelectValue(String selectValue) //增加参数单个实体内容

使用说明:
填充当前页面所有文本元素列表,用于匹配下一句用户语音识别结果。

举例:给我放一首刘德华的忘情水吧。 语料:给我放一首@{artist}的@{song}吧
artist、song对应举例语料中的两个参数,需要在意图中定义这两个参数,都引用 sys.select 公共实体。

调用方式:

  1. @Override
  2. public void getAppContextData(AppContextData appContextData) {
  3. //天猫精灵给我放一首刘德华的忘情水吧
  4. //语料:给我放一首@{artist}的@{song}吧
  5. //开放平台申请到认证信息
  6. appContextData.setSecretKey("92939aee9f7a4fc2a899294560b32566");
  7. //如果语料未命中技能,可以执行默认流程
  8. appContextData.setCanExitSkill(true);
  9. SelectListData selectListData = new SelectListData();
  10. //设置当前页面的pageid(配置页面中的页面地址)
  11. selectListData.setPageId("playSong");
  12. //slots - artist
  13. SelectListData.SelectListItem artistEntity = new SelectListData.SelectListItem();
  14. artistEntity.setSelectKey("刘德华"); //用于标记
  15. artistEntity.addSelectValue("刘德华");
  16. artistEntity.addSelectValue("华仔");
  17. selectListData.addSelectData("artist", artistEntity);
  18. //slots - song
  19. SelectListData.SelectListItem songEntity = new SelectListData.SelectListItem();
  20. songEntity.setSelectKey("忘情水"); //用于标记
  21. songEntity.addSelectValue("忘情水");
  22. songEntity.addSelectValue("忘情飞");
  23. selectListData.addSelectData("song", songEntity);
  24. appContextData.setSelectListData(selectListData);
  25. }

selectListData中的数据格式如下:

  1. selectContext: {
  2. artist: {
  3. '刘德华': ['刘德华', '华仔']
  4. },
  5. song: {
  6. '忘情水': ['忘情水', '忘情飞']
  7. }
  8. }

五、测试语料

当用户通过语音或点击图标唤起APP,并进入palySong页面后。就可以说:天猫精灵,给我放一首华仔的忘情飞。

APP应用内就可以通过以下语音回调函数收到返回数据:
public ASRCommandReturn onNLUResult(String domain, String command,String param,Bundle bundle) { }

函数的参数解释如下:

参数名 解释 取值
domain 领域 AliGenie.Screen
command 命令 /SelectContent
param 参数,一段Json字符串 见下文

正常情况:
1.png

异常情况:
2.png