Arrays 星号:如何将数组数据以URL形式传递给AGI脚本?
其他飞越者: 我带着一个问题来到这里,到目前为止,我还没能独自解决这个问题 我希望能够将数据从阵列传递到Asterisk PBX拨号计划中的AGI脚本,该拨号计划的格式如下:Arrays 星号:如何将数组数据以URL形式传递给AGI脚本?,arrays,url,asterisk,agi,Arrays,Url,Asterisk,Agi,其他飞越者: 我带着一个问题来到这里,到目前为止,我还没能独自解决这个问题 我希望能够将数据从阵列传递到Asterisk PBX拨号计划中的AGI脚本,该拨号计划的格式如下: exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param1=value1¶m2=value2...¶mN=valueN) exten => some_exten,priority,AGI(ag
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param1=value1¶m2=value2...¶mN=valueN)
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1¶m_array=array_value2...¶m_array=array_valueN)
但其中一个参数必须接收数组数据,就像它是CGI脚本中的URL参数一样,如:
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=value1,value2,value3...,valueN)
我知道AGI脚本能够接收数组作为参数,但是URL形式的AGI脚本的可用文档没有说明如何接收数组数据作为脚本参数;这就是为什么我把这个问题贴在这里
我尝试过(结果不成功)通过以下方式传递数据:
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1,array_value2...,array_valueN)
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1;array_value2...;array_valueN)
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1|array_value2...|array_valueN)
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1,array_value2...,array_valueN)
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1;array_value2...;array_valueN)
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param1=value1¶m2=value2...¶mN=valueN)
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1¶m_array=array_value2...¶m_array=array_valueN)
据我所知,这不是将参数传递到URL的正确方法,而URL正是我用来将数据传递到AGI脚本的方法
如果有人能告诉我这件事,我将不胜感激,因为我真的不想像我到目前为止所做的那样逐个传递每个数组项。我会使用引号并用逗号分隔后面的
参数数组
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array="a=1,b=2,c=3,d=4")
星号:
exten => s,n,Read(ZIPCODE,,8,3) ;ZIPCODE is my variable
exten => s,n,AGI(query-database.php|${ZIPCODE})
$zipcode = $argv[1]; Get the value of first var.
在PHP脚本查询数据库中。PHP:
exten => s,n,Read(ZIPCODE,,8,3) ;ZIPCODE is my variable
exten => s,n,AGI(query-database.php|${ZIPCODE})
$zipcode = $argv[1]; Get the value of first var.
答案不完全正确,也很晚,但我使用python
从agi
脚本发送和接收变量的方式如下:
背景:
[agi_demo]
exten => s,1,NoOp()
exten => s,n,AGI(agi://127.0.0.1:4573/demo2,1,2,3,4,5) ; send args 1 2 3 4 5 to demo2
exten => s,n,Verbose(OK = ${ok}) ; receive variable 'ok' from agi
exten => s,n,Hangup()
调试日志:
-- Executing [s@agi_demo:2] AGI("SIP/trunk-00000016", "agi://127.0.0.1:4573/demo2,1,2,3,4,5") in new stack
-- <SIP/trunk-00000016> Playing 'agi_demo/i_just_called.slin' (escape_digits=12)
-- <SIP/trunk-00000016>AGI Script agi://127.0.0.1:4573/demo2 completed, returning 0
-- Executing [s@agi_demo:3] Verbose("SIP/trunk-00000016", "OK = AGI Rocks") in new stack
OK = AGI Ricks
-- Executing [s@agi_demo:4] Hangup("SIP/trunk-00000016", "") in new stack
来自egg的服务器源代码
要使用pystrix
从AGI
发送变量,请使用SetVariable
方法:
agi.execute(pystrix.agi.core.SetVariable("ok", "AGI Rocks"))
afaik星号仅支持在拨号计划中作为简单变量写入。因此,我想知道拨号计划中有哪个数组,它来自哪里?您可以向agi发送任何值。如果您的任何表单不起作用,您总是可以在脚本中使用BASE64编码和解码。我在dialplan中的数组是一个单独变量的集合。但是,对于我的AGI请求,它们的值需要全部以以下形式存在于单个数组中:param_数组=variable1_值,variable2_值…,variableN_值
这不是我要寻找的,而是param_数组是一个数组。所以我会寻找类似的东西:param_array=1,2,3,4