freeswitch如何向嵌入式脚本传递参数

Song1918 次浏览0个评论2018年09月21日

freeswitch中我们在开发的时候常常会用到内置脚本,但是如何给内置脚本传值官方文档一直没有介绍,这里我总结了一些方法,给他家参考:

一、通过APP来传值

freeswitch在内连模式内置脚本有一个handler(session, args)方法来接受参数,但是楼主想要给内置脚本传递参数一直没有方法:在lua中还可以通过如下方法传递: 参数以空格分隔的值传递:

luarun arg1 arg2 arg3

使用argv访问参数,如下所示:

my_first_var = argv[1];
my_next_var = argv[2];

但是在python中使用argv就不行了,出现Message: 'module' object has no attribute 'argv';楼主找遍了各大网站都没有结果,后来在官网文档获得启发:mod_python

1、解决方法

handler(session, args)中的args就是接受参数的,我们这样写就可以传递参数了:

<action application="python" data="baidu parma1 parma2"/>

二、通过API方式传值

如果通过ESL等方式传值,你会发现上面的方法就没有用了,为什么使用api方式呢?比如你要实现群呼,实现智能客服,如下面这行命令:

originate user/1005 &python(baidu wsonh)

你会发现你的args不能获取到wsonh这个值了,如何解决呢?我们使用例外一种方法。

1、解决办法

内置脚本sesson有一个session.getVariable()方法可以获取通道变量,但是他的参数和ESL的参数名称不一样,坑爹呀!而且你不能想ESL一样使用serialize来打印所有参数,我弄了一天,终于搞定了,再次强调坑爹:

originate {parma1=1,parma2=2}user/1005 &python(baidu wsonh)

然后如何接收呢?简单:

parma1 = session.getVariable("parma1")
parma2 = session.getVariable("parma2")

传啥取啥,但是你在ESL中明明是variable_parma1呀,害我一直以为不能用这种方法,找遍了google!

提交评论

请登录后评论

用户评论

    当前暂无评价,快来发表您的观点吧...

更多相关好文

    当前暂无更多相关好文推荐...