如果您期望主动触发某个意图的对话,可以在需要的时候调用下面的接口。
参数说明:
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);
更新设备状态代码:
//更新结果可以通过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();
}
}
更新技能配置代码:
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();
}
}
更新配置信息代码:
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();
}
}
更新热词信息代码:
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();
}
}
});
本地添加词条代码:
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();
}
}
本地清空并添加词条代码:
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();
}
}
本地删除代码:
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();
}
}
本地清空词条代码:
public void clearAllVocab() {
try {
DDS.getInstance().getAgent().updateVocabs(
new VocabIntent()
.setName("家居")
.setAction(VocabIntent.ACTION_CLEAR_ALL)
);
toMain();
} catch (DDSNotInitCompleteException e) {
e.printStackTrace();
}
}
云端添加词条代码:
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();
}
}
云端清空并添加词条代码:
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();
}
}
云端删除词条代码:
public void removeVocabCloud() {
//删除该词库的词条
try {
DDS.getInstance().getAgent().updateVocabs(
new VocabIntent()
.setName("伙伴名")
.setAction(VocabIntent.ACTION_REMOVE)
.addContent("小红")
.addContent("小明")
);
toMain();
} catch (DDSNotInitCompleteException e) {
e.printStackTrace();
}
}
云端清空词条代码:
public void clearAllVocabCloud() {
try {
DDS.getInstance().getAgent().updateVocabs(
new VocabIntent()
.setName("伙伴名")
.setAction(VocabIntent.ACTION_CLEAR_ALL)
);
toMain();
} catch (DDSNotInitCompleteException e) {
e.printStackTrace();
}
}
批量更新词库代码:
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。