美文网首页
unimrcp传递和接受参数

unimrcp传递和接受参数

作者: 我不是机器猫 | 来源:发表于2018-12-29 19:16 被阅读55次

    我使用的是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传递和接受参数

          本文链接:https://www.haomeiwen.com/subject/thvplqtx.html