【度客creator】使用Java SDK开发自定义技能-入门贴
153******86 发布于2018-10-11 14:12 浏览:341 回复:0
1
收藏

因为工作原因,有幸开发了Dueros的自定义技能,感谢公司提供了一台小度在家给我测试用。本人是9月才接触Dueros开放平台,开门见山的说一下到目前为止的开发经验吧,算是个小白入门贴,有错误不足还请各位看官指正。

我开发的技能是属于信息查询类,前期功能比较简单,后期还会加入更多功能。

第零步:试用技能

看看其他已经开发好的技能有哪些用途特点,在小度在家APP的技能分类下,多使用一些已有的技能,学习他们的功能,设计,布局,交互,反馈等要素。

第一步:阅读文档

通读资源中心的文档中心和技术课程,这里只需要大概了解即可,需要知道技能开发能实现哪些功能,免的构想个大飞机,最后发现API只能开发个自行车。后续开发过程中才需要重点阅读文档。

第二步:技能设计

设计技能就如同设计个APP一样,要设计出技能有哪些功能模块,每个模块的交互流程如何,每个界面如何布局展示。美工需要根据文档中提供的图片尺寸设计号技能中用到的图片。

第三步:技能开发

  • 选择合适的SDK,这里说一下,我的后端使用的是Spring Cloud,所以在PHP、Node.js、Java中我选择Java SDK,https://github.com/dueros/bot-sdk-java,git下载SDK,导入module到idea,微服务工程添加依赖bot-sdk。
  • Java-sdk的源码真的很容易读,建议可以读一下源码。根据sdk的samples/tax/TaxAction改造一下,成RestController,就可以启动工程接收请求了。
  • @RestController
    @RequestMapping("/dueros")
    public class HomeController {
        @Autowired
        private HttpUtil httpUtil;
    
        @RequestMapping("/home")
        public void home(HttpServletRequest request, HttpServletResponse response) {
            try {
                // 根据request创建Bot
                HomeBot bot = new HomeBot(request);
                bot.setHttpUtil(httpUtil);
                // 打开签名验证
                // bot.enableVerify();
    
                // 线下调试时,可以关闭签名验证
                bot.disableVerify();
                // 调用bot的run方法
                String responseJson = bot.run();
                // 设置response的编码UTF-8
                response.setCharacterEncoding("UTF-8");
                // 返回response
                response.getWriter().append(responseJson);
            } catch (Exception e) {
                e.printStackTrace();
                try {
                    response.getWriter().append("{\"status\":1,\"msg\":\"\"}");
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
  • 根据技能业务需求重写onLaunch,onInent,onSessionEnded。这里还需要在Dueros开放平台中创建自定义技能,添加意图,词典,配置服务,上传资源(图片,视频)。意图需要跟onInent中的代码内容对应。

第四步:技能调试

由于本机开发,技能调试必须要填写本地的服务地址,我使用natapp建立个免费的隧道(不是广告,真的挺方便使用,但是免费不支持HTTPS,后面调试账户授权就不行了)

然后就可以使用模拟测试了,模拟测试可以看到所有的请求报文和响应报文还是比较方便。

我由于有个小度在家,用手机号注册了关联成管理员,保证技能开发账号和设备登录账号一致,就可以真机测试了。由于技能未上架,真机测试需要先说“开启技能调试模式”。

 

在用java sdk开发过程中目前也遇到了一些奇怪的现象:

  • Hint没有反应,按照SDK的例子使用都没有显示Hint,模拟测试和真机测试都没有。
  • 模拟测试的时候,图片都能显示,但在真机开启调试模式时,onLaunch后的图片显示不了,声音可以播放,onInent后的图片可以显示。
  • 授权信息配置的回调地址是https://xiaodu.baidu.com。。。,而我实际收到的请求URL中的redirect_uri=https://xiaodu-dbp.baidu.com,多了-dbp。
  • 帐号关联卡片LinkAccountCard在模拟测试中没有显示界面,只有OutputSpeech语音播放,但在真机测试中有显示界面:

 

一些建议:

  • 增加位置信息的API,增加百度地图API,其实小度在家内置了百度地图(说查看附近的XXX就能知道),可以适度开放给开发者。
  • 槽位内容如果需要通配类型的,比如用户随便说出一个XXXX的名称,我想让小度在家把这个名称传到后台,目前只能使用缺省意图,很不方便。

 

后续开发心得有机会再来写吧

收藏
点赞
1
个赞
TOP