使用Asterisk-Java AGI调用MRCPRecog时无法获取RECOG_INSTANCE()值
如何在Asterisk-Java AGI中正确获取MRCPRecog的RECOG_INSTANCE()值?
正确获取方式
要在Asterisk-Java AGI中获取RECOG_INSTANCE()的值,调用getVariable时直接传入不带空括号的函数名即可:
String recogInstance = channel.getVariable("RECOG_INSTANCE");
如果是多解释项场景,需要指定索引(索引从1开始),则传入带参数的完整函数名:
// 获取第一个解释项的instance值 String recogInstance = channel.getVariable("RECOG_INSTANCE(1)");
之前的调用方式无效原因
- 空括号解析问题:Asterisk-Java的
getVariable方法不支持带空括号的函数名传递,"RECOG_INSTANCE()"这种格式会被Asterisk判定为无效请求,返回null。 - 参数格式错误:你尝试的
"RECOG_INSTANCE(1/1)"或"RECOG_INSTANCE(0/1)"参数格式不符合RECOG_INSTANCE函数的要求,该函数仅接受单个索引数值(从1起始)。
顺带解决RECOG_CONFIDENCE返回null的问题
针对你提到的RECOG_CONFIDENCE()返回null的问题,同样采用不带空括号的调用方式:
String recogConfidence = channel.getVariable("RECOG_CONFIDENCE"); // 或指定索引获取对应解释项的置信度 String recogConfidence = channel.getVariable("RECOG_CONFIDENCE(1)");
验证建议
获取值后可以添加输出逻辑确认结果:
System.out.println("识别结果实例值: " + recogInstance); System.out.println("识别置信度: " + recogConfidence);
内容的提问来源于stack exchange,提问作者Mustafa
相关产品推荐
相关产品推荐

