在APP应用的语音交互中,某些时候意图语料中参数的取值不是固定的,而是由页面上的内容动态确定。这个时候该参数就不能关联自定义实体了,而是需要将其设置为所见即可说参数,其参数的取值由页面动态赋值。这就是所见即可说的使用场景。
一、创建应用
按照 天猫精灵APP接入文档,创建APP智能应用。
二、配置语音交互模型
2.1 引用 sys.select 公共实体
点击 语音交互模型创建 —> 实体 进入实体配置页面,点击 引用公共实体。
在公共实体列表中,找到实体标识 sys.select 公共实体,打开实体后的引用按钮,即可引用此公共实体。
2.2 创建所见即可说参数
返回意图列表页面,可以看到已经存在一个默认意图。点击 编辑 进入默认意图配置页面,配置意图参数和语料。
所见即可说参数可以创建多个,参数名称可以根据业务需要自定义。这里定义两个参数为:artist 和 song,所见即可说参数需要关联前面引用的 sys.select公共实体。参数名称可以根据自己的业务需要起名称,不要求和示例一致;参数数量也可以自己决定。但这里的参数名称和APK内设置动态参数的参数名称要一致。
然后添加一些使用了所见即可说参数的语料,意图需要语料才能进入。
2.3 将意图设为动态意图
返回 意图 列表,将意图设为动态意图。
2.4 配置页面意图(新建pageId)
进入 配置页面意图,点击 新增配置。
若页面上没有 新增配置 按钮,可能是还没有上传过APK包,需要先去上传一个APK包。
注意:APK包上传时要填写:包名、版本号、版本Code、Fingerprint。且 包名 和 Fingerprint 上传后就不允许修改,对上传的APK包的要求请参考文档:天猫精灵APP接入
填写页面地址(pageId),为 pageId 绑定动态意图。
三、 绑定真机测试设备
在应用控制台真机测试页面内绑定测试设备。
四、在APP项目中设置参数动态内容
设置上下文数据
void getAppContextData(AppContextData contextData);
- AppContextData
包括第三方应用的认证信息、私有协议数据和技能上下文信息,接口如下:
public void setSecretKey(String secretKey) //设置认证信息,由开放平台生成
public void setCanExitSkill(boolean canExitSkill) //设置是否可以退出当前技能
public void setSelectListData(SelectListData selectListData) //设置动态语料参数实体相关信息
void setPrivInfo(JSONObject privInfo)// 设置私有协议数据,由技能客户端与技能开发同学约定格式
- SelectListData
包括动态语料的实体内容
public void setPageId(String pageId) //设置当前页面的pageId。
public void addSelectData(String slotName, List<SelectListItem> selectListItems) //增加动态语料多个参数实体
public void addSelectData(String slotName, SelectListItem item) //增加动态语料单个参数实体
- SelectListData.SelectListItem
设置指定slot的实体内容,特别提醒,在开放平台配置动态语料的时候,必须保证参数名称唯一;
public void setSelectKey(String selectKey) //设置归一化标记值,用于结果匹配
public void addSelectValue(List<String> list) //增加参数多个实体内容
public void addSelectValue(String selectValue) //增加参数单个实体内容
使用说明:
填充当前页面所有文本元素列表,用于匹配下一句用户语音识别结果。
举例:给我放一首刘德华的忘情水吧。 语料:给我放一首@{artist}的@{song}吧
artist、song对应举例语料中的两个参数,需要在意图中定义这两个参数,都引用 sys.select 公共实体。
调用方式:
@Override
public void getAppContextData(AppContextData appContextData) {
//天猫精灵给我放一首刘德华的忘情水吧
//语料:给我放一首@{artist}的@{song}吧
//开放平台申请到认证信息
appContextData.setSecretKey("92939aee9f7a4fc2a899294560b32566");
//如果语料未命中技能,可以执行默认流程
appContextData.setCanExitSkill(true);
SelectListData selectListData = new SelectListData();
//设置当前页面的pageid(配置页面中的页面地址)
selectListData.setPageId("playSong");
//slots - artist
SelectListData.SelectListItem artistEntity = new SelectListData.SelectListItem();
artistEntity.setSelectKey("刘德华"); //用于标记
artistEntity.addSelectValue("刘德华");
artistEntity.addSelectValue("华仔");
selectListData.addSelectData("artist", artistEntity);
//slots - song
SelectListData.SelectListItem songEntity = new SelectListData.SelectListItem();
songEntity.setSelectKey("忘情水"); //用于标记
songEntity.addSelectValue("忘情水");
songEntity.addSelectValue("忘情飞");
selectListData.addSelectData("song", songEntity);
appContextData.setSelectListData(selectListData);
}
selectListData中的数据格式如下:
selectContext: {
artist: {
'刘德华': ['刘德华', '华仔']
},
song: {
'忘情水': ['忘情水', '忘情飞']
}
}
五、测试语料
当用户通过语音或点击图标唤起APP,并进入palySong页面后。就可以说:天猫精灵,给我放一首华仔的忘情飞。
APP应用内就可以通过以下语音回调函数收到返回数据:
public ASRCommandReturn onNLUResult(String domain, String command,String param,Bundle bundle) { }
函数的参数解释如下:
参数名 | 解释 | 取值 |
---|---|---|
domain | 领域 | AliGenie.Screen |
command | 命令 | /SelectContent |
param | 参数,一段Json字符串 | 见下文 |
正常情况:
异常情况: