我使用的是unimrcp1.5版本,传递参数如下:
session:execute("play_and_detect_speech",menu .. "detect:unimrcp {start-input-timers=false,no-input-timeout=" .. no_input_timeout .. ",recognition-timeout=" .. recognition_timeout .. ",agentId=123}" .. grammar)
上面是一段luc脚本,当然你也可以使用javascript脚本或者 xml 里面配置呼叫规则,注意这里面的字符串: agentId=123 ,你可以动态给agentId赋值,我这里为了方便大家理解写死了。这个agentId就是你额外传的参数,当然如果还有其他参数,可以在后面接着写,注意用逗号隔开。
接受参数怎么弄呢?
在mrcp 的示例 demo recog plugin里面有个方法如下:
static apt_bool_t demo_recog_channel_recognize(mrcp_engine_channel_t *channel, mrcp_message_t *request, mrcp_message_t *response)
在这个方法里面添加如下代码:
if(mrcp_generic_header_property_check(request,GENERIC_HEADER_VENDOR_SPECIFIC_PARAMS) == TRUE) {
mrcp_generic_header_t *generic_header = mrcp_generic_header_get(request);
if(generic_header && generic_header->vendor_specific_params){
recog_channel->vendor_params = apt_pair_array_copy(generic_header->vendor_specific_params, request->pool);
apt_log(RECOG_LOG_MARK,APT_PRIO_WARNING,"[demolog] agentId:%s",vendor_param_find(recog_channel->vendor_params, "agentId");
}
}
else{
apt_log(RECOG_LOG_MARK,APT_PRIO_WARNING," 没有传递供应商参数!");
}
上面的代码中,我把接受到的agentId给打印出来了。
还有一个方法如下:
static char const* vendor_param_find(apt_pair_arr_t* vendor_specific_params, char const* name)
{
apt_str_t sname;
if (!name) return "";
if (!vendor_specific_params) return "";
apt_string_set(&sname, name);
apt_pair_t const* p = apt_pair_array_find(vendor_specific_params, &sname);
if (!p) return "";
return p->value.buf;
}
ok ,重新编译部署你的plugin,测试一下吧。
网友评论