一、适用的场景
在应用未唤醒的情况下,当用户发起语音请求调用一个技能应用时,若请求中除唤起指令外还指定了需要完成的意图以及意图所需要的参数,此时技能应用需要能够打开意图对应的页面并对同时语音请求中的参数进行处理。
语音请求组成结构:天猫精灵 + 技能唤醒指令 + 意图调用语句/短语(包含请求参数)
例如,“天猫精灵,打开出行助手 查询明天北京到杭州的火车票”,此时会打开“出行助手”技能应用,然后开始查询明天从北京到杭州的车票。
注:若不使用意图&参数NLU透传功能,当说出上述语音请求后,只会打开“出行助手”技能应用,而无法发起查询车票的动作。
二、功能介绍
意图&参数NLU透传功能是指当平台下发调用指令时,除了应用调起链接之外,同时还携带了意图(intent)和参数(slot)信息,这样开发者就可以在应用唤起后通过解析调起链接中的意图(intent)和参数(slot)字段,直接打开用户期望的页面并做相应的处理。
注:目前该功能内测中,需要开发者提供应用相关信息开白名单,请加入我们的开发者钉钉交流群(31630820)进行申请。
三、功能接入流程
3.1 创建APP或小程序应用
创建APP应用参考文档:https://www.aligenie.com/doc/357834/kl0fy3
创建小程序应用参考文档:https://www.aligenie.com/doc/357834/fft03z
3.2 创建应用的语音交互模型
我们以“出行助手”应用举例,里面有三个意图:
- 默认意图,对应欢迎页面;
- 火车票查询意图,对应火车票查询结果页面;
- 飞机票查询意图,对应飞机票查询结果页面;
其中,火车票查询意图有三个参数:日期(date)、出发地(city1)、目的地(city2)。意图配置如下:
3.3 测试语料能否正常进入意图
3.4 猫精平台返回的应用调用链路信息
在开通“意图&参数NLU透传”功能后,天猫精灵下发的应用调起链接中就会携带意图(intent)和参数(slot)信息。
语料:出行助手查询明天北京到杭州的火车票
意图:train
参数:date:明天, city1:北京, city2:杭州
应用调起链接:webapp://xxxxxx?pkg=com.xxx.yyy&intent=train&slot_date=%22%e6%98%8e%e5%a4%a9%22&slot_city1=%22%e5%8c%97%e4%ba%ac%22&slot_city2=%22%e6%9d%ad%e5%b7%9e%22
参数 | Key | Value | 说明 |
---|---|---|---|
Intent | intent | train | URLEncode(UTF-8) |
Slot | slot_date | %22%e6%98%8e%e5%a4%a9%22 “明天” | URLEncode(UTF-8) |
slot_city1 | %22%e5%8c%97%e4%ba%ac%22 “北京” | URLEncode(UTF-8) | |
slot_city2 | %22%e6%9d%ad%e5%b7%9e%22 “杭州” | URLEncode(UTF-8) |
注:应用调起链接中传递参数时 key 的格式为:slot_参数名称,参数值会经过 URLEncode,请开发者获取参数值后进行 URLDecode。如果 URLDecode 后参数值被双引号 “” 包裹,使用时去除即可。
3.5 应用中如何获取应用调起链接
在应用中获取应用调起链接后,就可以解析其中的 intent 和 slot 信息,直接展示用户期望的查询结果页面。
3.5.1 APP应用
APP应用中可以通过scheme获取应用调起链接。示例代码如下:
Intent intent = getIntent();
String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
Uri uri = intent.getData();
if (uri != null) {
String tmjl_intent = uri.getQueryParameter("intent");
String slot_date = uri.getQueryParameter("slot_date");
String slot_city1 = uri.getQueryParameter("slot_city1");
String slot_city2 = uri.getQueryParameter("slot_city2");
}
}
3.5.2 小程序应用
小程序应用可以从onAppShow方法中获取应用调起链接:
my.onAppShow(function (event) {
my.alert({content: 'my.onAppShow.event = ' + JSON.stringify(event)}); //解析event参数,并处理
})
onAppShow具体使用文档:https://opendocs.alipay.com/mini/api/nn7do1