APP 技能接入与开发流程
APP 技能同样是一种 DBP 的自定义技能,于其他自定义技能的区别在于需要开发者可以开发客户端。APP 技能的推出使得 Android App 可以很快地成为 DuerOS 设备上的技能,使安卓系统的 app 生态能够于 DuerOS 的技能生态水乳交融,为用户带来更多的价值。
APP 技能的接入和开发与 DBP 自定义技能的开发类似,同样遵循六个步骤:
- 开发者认证 APP
- 技能创建
- 技能开发
- 技能调试
- 技能审核
- 技能上线
目前,DBP 平台推出的技能作为 Preview feature 开放给广大企业开发者,遵循预览版的相关审核和规范流程。
1. 开发者认证
开发者需要在 DBP 平台上传身份证、个人邮箱、手机号等信息,通过审核后成为认证开发者。
对应企业开发者而言,还要上传企业的营业执照扫描件,通过审核后成为认证开发者。
APP 技能的开发目前只对认证的企业开发者开放。
2. APP 技能创建
APP 技能目前作为 Preview feature 开放,开发者在创建 APP 技能的时候首先要阅读并确认《DBP 应用开发者协议》。
然后,填写技能名称等相关信息,提交后,等候 Preivew 的审核。
在 Preview 审核通过后,即表示 APP 技能创建完成。
3. APP 技能的开发
APP 技能开发包括两部分: bot 服务的开发和 APP 客户端的开发。
3.1 Bot 服务的开发
APP 技能的 bot 服务开发与 DBP 上其他自定义技能的开发类似,尤其与交互模型的建立,关于意图、槽位、词典、常用表达等参考《技能交互模型》。
目前,多数 APP 技能都采用了 DBP 平台的代理服务 AVC(App Voice Control),这样无需独立部署服务器即可使用语音交互的能力。简单地说, 设计并填写完交互模型,就可以认为是开发完成了。AVC 将语音交互的结果以结构化数据返回给 APP 客户端,由客户端完成对应的操作。
对于复杂交互的 APP 技能而言,同样可以部署自己的物理 bot,接入流程联系dueros-bd@baidu.com.
3.2 APP 客户端的开发
针对语音交互的复杂程度,APP 客户端的开发可以分为 4 个等级:
- L1: 只支持打开/退出的语音指令
- L2: 支持有限的语音指令
- L3: 支持多种意图\槽位\词典\常用表达的语音指令
- L4: 支持用户话术的内容直达以及使用自己的物理 bot 处理更复杂的语音指令
从客户端的维度看,可以分为集成 Bot App SDK 的 APP 技能和未集成 Bot APP SDK 的 APP 技能。L1 等级的 APP 技能没有集成了 Bot APP SDK,L2/L3/L4 等级的 APP 技能集成了 Bot APP SDK。
3.2.1 L1 APP 技能的开发
在 DBP 平台的控制台,依次选择 【创建技能】->【自定义技能】->【Android App 技能】, 填写技能名称和 APP 包名,如图所示:
一步完成,待开发者 App 自身完成开发后,即可进入 L1 APP 技能的调试阶段。
3.2.2 L2 APP 技能的开发
L2 技能使用了本地自定义交互模型,意思就是用户语音指令和意图匹配关系,定义在本地代码中。
参考示例代码(https://github.com/dueros/AndroidBotSdkDemo) 将 Bot App SDK 集成到开发者的 APP 技能中。
开发者只需要参考代码组装 UIContextPayload 对象,就可以完成本地自定义交互模型的构建,示例代码如下:
// 1.创建UIContextPayload对象开始组装
UiContextPayload payload = new UiContextPayload();
// 2.定义用户语音意图集合(尽可能丰富的收集用户表达,常用同音异字表达都加上,比如“登录”&“登陆”)
String[] loginWords = {"开始","点击开始","开始游戏","启动游戏","进行游戏"};
// 3.可以定义支持的话术
payload.addHyperUtterance(“sdkdemo://startGame”, Arrays.asList(loginWords), null, null);
// 重复步骤2.3 可以添加多个交互组件。比如开始,退出,登录,注册......
BotSdk.getInstance().updateUiContext(payload);
用户语音表达,命中自定义交互组件后,云端匹配匹配成功,并封装 url 为 ClickLink 指令下发到设备端。设备端收到 ClickLink 指令,通过回调方法 onClickLink,把匹配结果分发给 App,示例代码如下:
/**
* 云端返回的UIContext匹配结果
* @param url 自定义交互描述中的url
* @param paramMap 对于系统内建类型,参数列表。参数就是从query中通过分词取得的关键词。这个参数配合type,params字段使用
*/
@Override
public void onClickLink(String url, HashMap<String, String> paramMap) {
if ("sdkdemo://startGame".equals(url)) {
//TODO 执行开始游戏逻辑,比如是startGameBtn.performClick()
}
}
待开发者 app 自身完成开发后,即可进入 L1 APP 技能的调试阶段。
3.2.3 L3 APP 技能的开发
L3 技能使用了 DBP 平台的自定义交互模型,关于如何构建交互模型,可以参考《技能交互模型》。
参考示例代码(https://github.com/dueros/AndroidBotSdkDemo) 将 Bot client SDK 集成到开发者的 APP 技能中。
在客户端 APP 中, 会通过 Bot APP SDK 的 回调方法 handleIntent 在 App 中处理意图内容,示例代码如下:
/***
* 云端意图返回结果
* @param intent 意图内容,参考{@link BotIntent} 包含意图名称和槽位参数结构如下
* {@link BotIntent#name} 意图名称,对应于云端创建意图的 意图标识名
* {@link BotIntent#slots} 槽位列表 对应于云端创建意图的 槽位信息,数量(0~n)
* 槽位信息结构如下:
* {@link com.baidu.duer.botsdk.BotIntent.Slot#name} 槽位名称
* {@link com.baidu.duer.botsdk.BotIntent.Slot#value} 槽位值
* @param customData 自定义数据,暂时不用
*/
@Override
public void handleIntent(BotIntent intent, String customData) {
String intentResult = "\n指令名称:%s\n槽位信息:%s";
Log.i("HandleIntentTAG", "intent result:" + intentResult);
if ("queryWeather".equals(intent.name)) {
String loactionOfWeather;
if (intent.slots != null) {
for (BotIntent.Slot slot : intent.slots) {
// 遍历槽位列表,找到需要的槽位值
if ("sys.city".equals(slot.name)) {
loactionOfWeather = slot.value;
}
}
}
// TODO 使用localtionOfWeather 参数查询天气
}
}
待开发者 App 自身完成开发后,即可进入 L3 APP 技能的调试阶段。
3.2.4 L4 APP 技能的开发
L4 的 APP 技能与自定义技能类似,可以挂接开发者自己的 bot 服务,如下所示:
L4 的 APP 技能使用开发者自己的 bot 服务,通过 DuerOS 开放平台与 App 的客户端进行通信,可以充分利用 DuerOS 的各种能力,为用户提供更好的用户体验。
4. APP 技能调试
目前 APP 技能处于 Preview feature 阶段,APP 技能只能在真机上技能技能调试。
4.1 真机调试开发环境的安装
创建好 APP 技能后,点击【测试验证】 → 点击【真机测试】→ 点击【新增设备 SN】,添加自己的小度设备 SN。
开发者在配置好设备 SN 之后,可以对真机设备说,“小度小度,打开技能开发助手”,根据语音提示进行后续操作即可。
注意:如果以上操作都完成还是提示申请升级失败,请确认设备上的账号和 DBP 平台登录的账号是否一致,要确保使用相同的账号。
4.2 真机调试密钥的获取和使用
在开发环境安装成功之后, 需要下载开发环境的密钥本地。
真机调试密钥的使用方法如下:
1)替换到设备本地的 ~/.android 目录中
2)执行命令重启 adb:
adb kill-server
adb start-server
4.3 在真机上安装目标应用
在真机的调试环境和调试密钥都安装成功后, 就可以使用 ADB 命令安装目标 APP 了。
4.4 在技能 Debug 模式下进行调试
在保持开发者账号和小度设备账号一致的前提下,开启技能调试模式的按钮,对设备说,“开启技能调试”。
在技能调试模式下, 开发者就可以使用语音交互来调试 APP 技能了。
5. APP 技能审核
为了确保用户体验,APP 技能需要通过严格审核才能发布上线。
5.1 技能审核的一般规则
APP 技能申请上线的方式与一般的自定义技能类似,具体可以参考《技能发布》。
APP 技能与一般的自定义技能区别在于要明确客户端 APP 的版本号(形如 a.b.c.d),并上传 APP 的客户端包。
5.2 APP 技能审核的特殊性
APP 技能的审核遵从 DuerOS 技能审核的一般原则,包括技能元数据审核,功能性测试和技能交互信息测试等,具体可以参考《技能审核规范》。
5.3 开发者申请上线审核
APP 技能的审核还包括了客户端的安全检查和性能压测等验证方式。
同时,APP 还涉及权限申请,例如 camera、录音、手势、存储等,在审核的时候会分别给予确认。
5.4 开发者对审核结果的解读
开发者在【发布管理】->【版本管理】中可以看到审核的结果,如果没有通过审核的话,可以查看失败的原因。
另外,开发者也可以在【个人中心】->【消息中心】中查看审核的相关信息。
6. APP 技能上线与升级
技能审核通过后,即处于上线状态,全网上线在 2 个工作日内完成。
6.1 首次上线
APP 技能在首次上线的时候,需要上传客户端的 APP 包,并明确 APP 技能的客户端版本(形如 a.b.c.d), 并明确技能交互的模型的版本,这对 APP 技能的后续升级至关重要。
6.2 APP 技能升级
APP 技能升级一般包括 3 种情况:
- 只升级 APP 客户端
- 只升级技能交互模型
- 既升级 APP 客户端又升级技能交互模型
6.2.1 只升级 APP 客户端
如果只是客户端 APP 的升级,需要重新上传 APP 包,更新版本号,即可申请上线审核。
6.2.2 只升级技能交互模型
如果只升级交互模型,无需重新上传 APP 包,只需要更新交互模型的版本号,即可申请上线审核。
6.2.3 既升级 APP 客户端又升级技能交互模型
对于升级 APP 客户端又升级技能交互模型的情形,需要对 APP 客户端的版本号和交互模型的版本号,同时上传更新的 APP 包,形同初次上线。
综上所述,App 技能的接入与开发流程同样分为 6 个阶段,如果任何阶段遇到问题,都可以联系dueros-bd@baidu.com。