unimrcp传递和接受参数

我使用的是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,测试一下吧。

你可能感兴趣的:(unimrcp传递和接受参数)