基于Aispeech的智能对话APP(五)--实现触发指定意图,用户词库功能

基于Aispeech的智能对话APP(五)--实现触发指定意图,更新用户词库功能

  • 一.触发指定意图
    • 1.1 更新设备状态
    • 1.2 更新技能配置
    • 1.3 更新配置信息
    • 1.4 更新热词信息
  • 二.更新用户词库
    • 2.1 本地添加词条
    • 2.2 本地清空并添加词条
    • 2.3 本地删除词条
    • 2.4 清空词条
    • 2.5 云端添加词条
    • 2.6 云端清空并添加词条
    • 2.7 云端删除词条
    • 2.8 云端清空词条
    • 2.9 批量更新词库
  • 三.代码下载

本篇博文是我自己在学习Aispeech的过程中,分享我遇到的问题以及如何解决。在文章的最后我会上传其代码。感兴趣的小伙伴,请自行下载。

一.触发指定意图

如果您期望主动触发某个意图的对话,可以在需要的时候调用下面的接口。

参数说明:

1)skill 技能名称,必填。
2)task 任务名称,必填。
3)intent 意图名称,必填。
4)slots 语义槽的key-value Json,可选。

triggerIntent

//跳过识别和语义,直接进入指定的意图对话。即:DDS主动向用户发起一轮对话。
DDS.getInstance().getAgent().triggerIntent("我是技能名称", "我是任务名称", "我是意图名称", new JSONObject().put("语义槽名称一", "语义槽取值一").put("语义槽名称二", "语义槽取值二").toString());

根据skillid触发意图:

SkillIntent skillIntent = new SkillIntent("我是技能id",
        "我是任务名称", "我是意图名称",
        new JSONObject().put("语义槽名称一", "语义槽取值一").put("语义槽名称二", "语义槽取值二").toString());
DDS.getInstance().getAgent().triggerIntent(skillIntent);

1.1 更新设备状态

更新设备状态代码:

//更新结果可以通过sys.upload.result消息来获取
    public void updateProductContext1() {

        //数据上传
        ContextIntent intent2 = new ContextIntent("status","{\"platform\":\"open\"}");
        try {
            DDS.getInstance().getAgent().updateProductContext(intent2);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    //更新结果可以通过sys.upload.result消息来获取
    public void updateProductContext2() {

        //数据上传
        ContextIntent intent2 = new ContextIntent("status","{\"platform\":\"closed\"}");
        try {
            DDS.getInstance().getAgent().updateProductContext(intent2);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }


1.2 更新技能配置

更新技能配置代码:

    public void updateSkillContext1() {

        ContextIntent intent2 = new ContextIntent("status","{\"platform\":\"Android\"}");
        intent2.setSkillId("2019062000000368");
        try {
            DDS.getInstance().getAgent().updateSkillContext(intent2);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void updateSkillContext2() {

        ContextIntent intent2 = new ContextIntent("status","{\"platform\":\"iOS\"}");
        intent2.setSkillId("2019062000000368");
        try {
            DDS.getInstance().getAgent().updateSkillContext(intent2);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

1.3 更新配置信息

更新配置信息代码:

public void getProductContext() {
        try {
            DDS.getInstance().getAgent().getProductContext("status");
            Log.e(TAG,"productContext:"+DDS.getInstance().getAgent().getProductContext("status"));
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void getSkillContext() {
        try {
            DDS.getInstance().getAgent().getSkillContext("2019062000000368", "status");
            Log.d(TAG,"skillContext:"+DDS.getInstance().getAgent().getSkillContext("2019062000000368", "status"));
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

1.4 更新热词信息

更新热词信息代码:

 public void updatePhraseHints() {
        //全双工 只在airobot下支持
        PhraseHintsIntent intent = new PhraseHintsIntent();
        intent.setType("vocab");
        intent.setName("sys.联系人");
        intent.addData("章大樵");
        intent.addData("媛保保");
        try {
            DDS.getInstance().getAgent().updatePhraseHints(intent);
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

    public void clearPhraseHints() {
        try {
            DDS.getInstance().getAgent().updatePhraseHints();
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

二.更新用户词库

如果您期望更新用户的词库,使其能在技能中使用,可以在需要的时候调用下面的接口。上传结果可以通过sys.upload.result消息来获取。

注意:更新的词库仅在该设备下有效,不会影响其他设备。
参数说明:
vocabIntent: 词库intent。包含词库名name,操作action,词条列表contents。
注1:若词库名是sys.联系人,则会自动做分词处理。
注2:若需要上传带同义词的词条,格式如下:" 词 条 取 值 : {词条取值}: :{同义词1},${同义词2}"
返回值:请求ID,用于追踪sys.upload.result。

updateVocabs

//实时更新用户词库
/*
//增加词条
DDS.getInstance().getAgent().updateVocab("设备词库", new String[]{"空调", "电视:电视机", "电灯:电灯泡,灯泡"}, true);
DDS.getInstance().getAgent().updateVocab("sys.联系人", new String[]{"张三", "李四"}, true);
 
 
//删除词条
DDS.getInstance().getAgent().updateVocab("设备词库", new String[]{"空调", "电视:电视机,彩电"}, false);
 
 
//删除所有词条
DDS.getInstance().getAgent().updateVocab("设备词库", null, false);
*/
//向指定词库中添加词条
final String reqId = DDS.getInstance().getAgent().updateVocabs(
        new VocabIntent()
                .setName("应用列表")
                .setAction(VocabIntent.ACTION_INSERT)
                .setContents(Arrays.asList("淘宝", "支付宝:支护宝,付款码"))
);
 
//清空之前上传到该词库的所有词条,然后添加词条
DDS.getInstance().getAgent().updateVocabs(
        new VocabIntent()
                .setName("设备词库")
                .setAction(VocabIntent.ACTION_CLEAR_AND_INSERT)
                .setContents(Arrays.asList("空调", "电视:电视机"))
);
 
//删除该词库的词条
DDS.getInstance().getAgent().updateVocabs(
        new VocabIntent()
                .setName("歌手名")
                .setAction(VocabIntent.ACTION_REMOVE)
                .addContent("刘德华")
);
 
//清空之前上传到该词库的所有词条
DDS.getInstance().getAgent().updateVocabs(
        new VocabIntent()
                .setName("歌曲")
                .setAction(VocabIntent.ACTION_CLEAR_ALL)
);
 
//批量更新词库
DDS.getInstance().getAgent().updateVocabs(
        //向指定词库中添加词条
        new VocabIntent()
                .setName("sys.联系人")
                .setAction(VocabIntent.ACTION_INSERT)
                .addContent("董芳芳")
                .addContent("王强"),
        //清空之前上传到该词库的所有词条,然后添加词条
        new VocabIntent()
                .setName("设备词库")
                .setAction(VocabIntent.ACTION_CLEAR_AND_INSERT)
                .setContents(Arrays.asList("空调", "电视:电视机")),
        //删除该词库的词条
        new VocabIntent()
                .setName("歌手名")
                .setAction(VocabIntent.ACTION_REMOVE)
                .addContent("刘德华"),
        //清空之前上传到该词库的所有词条
        new VocabIntent()
                .setName("歌曲")
                .setAction(VocabIntent.ACTION_CLEAR_ALL)
);
 
 
//关注更新词库的结果
DDS.getInstance().getAgent().subscribe("sys.upload.result", new MessageObserver() {
    @Override
    public void onMessage(String message, String data) {
        Log.e(TAG, message + ":" + data);
        try {
            JSONObject obj = new JSONObject(data);
            if (reqId.equals(obj.optString("reqId", ""))) {
                Log.d(TAG, "updateVocabs result:" + obj.optBoolean("result", false));
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
});

2.1 本地添加词条

本地添加词条代码:

public void addVocabCloud(){
        try {
            final String reqId = DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("伙伴名")
                            .setAction(VocabIntent.ACTION_INSERT)
                            .setContents(Arrays.asList("小明", "小红"))
            );
            Log.e("xlg","reqId:"+reqId);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }

    }

2.2 本地清空并添加词条

本地清空并添加词条代码:

public void clearAndInsertVocab() {

        //清空之前上传到该词库的所有词条,然后添加词条
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("家居")
                            .setAction(VocabIntent.ACTION_CLEAR_AND_INSERT)
                            .setContents(Arrays.asList("电脑", "风扇"))
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.3 本地删除词条

本地删除代码:

public void removeVocab() {
        //删除该词库的词条
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("家居")
                            .setAction(VocabIntent.ACTION_REMOVE)
                            .addContent("电视")
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }

    }


    public void removeVocab1() {
        //删除该词库的词条
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("家居")
                            .setAction(VocabIntent.ACTION_REMOVE)
                            .addContent("电脑")
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }

    }


    public void removeVocab2() {
        //删除该词库的词条
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("家居")
                            .setAction(VocabIntent.ACTION_REMOVE)
                            .addContent("风扇")
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.4 清空词条

本地清空词条代码:

public void clearAllVocab() {
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("家居")
                            .setAction(VocabIntent.ACTION_CLEAR_ALL)
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.5 云端添加词条

云端添加词条代码:

public void addVocabCloud(){
        try {
            final String reqId = DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("伙伴名")
                            .setAction(VocabIntent.ACTION_INSERT)
                            .setContents(Arrays.asList("小明", "小红"))
            );
            Log.e("xlg","reqId:"+reqId);
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.6 云端清空并添加词条

云端清空并添加词条代码:

 public void clearAndInsertVocabCloud() {

        //清空之前上传到该词库的所有词条,然后添加词条
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("伙伴名")
                            .setAction(VocabIntent.ACTION_CLEAR_AND_INSERT)
                            .setContents(Arrays.asList("龙龙"))
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.7 云端删除词条

云端删除词条代码:

public void removeVocabCloud() {
        //删除该词库的词条
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("伙伴名")
                            .setAction(VocabIntent.ACTION_REMOVE)
                            .addContent("小红")
                            .addContent("小明")
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.8 云端清空词条

云端清空词条代码:

public void clearAllVocabCloud() {
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    new VocabIntent()
                            .setName("伙伴名")
                            .setAction(VocabIntent.ACTION_CLEAR_ALL)
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

2.9 批量更新词库

批量更新词库代码:

    public void updateVocabs() {
        //批量更新词库
        try {
            DDS.getInstance().getAgent().updateVocabs(
                    //向指定词库中添加词条
                    new VocabIntent()
                            .setName("sys.联系人")
                            .setAction(VocabIntent.ACTION_INSERT)
                            .addContent("董芳芳")
                            .addContent("王强"),
                    //清空之前上传到该词库的所有词条,然后添加词条
                    new VocabIntent()
                            .setName("sys.地址")
                            .setAction(VocabIntent.ACTION_CLEAR_AND_INSERT)
                            .setContents(Arrays.asList("帝都", "上海:魔都")),
                    //删除该词库的词条
                    new VocabIntent()
                            .setName("家居")
                            .setAction(VocabIntent.ACTION_CLEAR_AND_INSERT)
                            .addContent("风扇"),
                    //清空之前上传到该词库的所有词条
                    new VocabIntent()
                            .setName("家居")
                            .setAction(VocabIntent.ACTION_CLEAR_ALL)
            );
            toMain();
        } catch (DDSNotInitCompleteException e) {
            e.printStackTrace();
        }
    }

三.代码下载

如果有问题无法解决或者对代码有兴趣的小伙伴,可以直接下载DUIdemo2.5.zip。

你可能感兴趣的:(安卓,android,接口,shell,docker)