研究员stackoverflowers:
我带着一个到目前为止我自己无法解决的问题来到这里。
我希望能够将数据从数组传递到我的Asterisk PBX拨号方案中的AGI脚本,该脚本按以下方式格式化:
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param1=value1¶m2=value2...¶mN=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¶m_array=array_value2...¶m_array=array_valueN)
根据我的阅读,这不是将参数传递给URL的正确方法,这是我用来将数据传递给AGI脚本的方式。
如果有人能够解决这个问题我会非常感激,因为我真的不想像我迄今为止那样单独传递每个数组项目。
答案 0 :(得分:1)
我会使用引号并用逗号分隔支持的
中的param_array
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array="a=1,b=2,c=3,d=4")
答案 1 :(得分:1)
在星号中:
exten => s,n,Read(ZIPCODE,,8,3) ;ZIPCODE is my variable
exten => s,n,AGI(query-database.php|${ZIPCODE})
在PHP脚本中查询-database.php:
$zipcode = $argv[1]; Get the value of first var.
答案 2 :(得分:0)
答案不是很正确,也很晚,但是我使用agi
从python
脚本发送和接收变量的方式如下:
上下文:
[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
注意:
通过发出以下命令来启动快速agi服务器:python3 fast_agi_server.py
,它
将开始在127.0.0.1:4573
我的声音文件位于与
context
并格式化为WAV PCM 8Khz 16Bits
,即:
/var/lib/asterisk/sounds/agi_demo/i_just_called
来自fast_agi_server.py egg的服务器源代码pystrix。
要使用AGI
从pystrix
发送变量,请使用SetVariable
方法:
agi.execute(pystrix.agi.core.SetVariable("ok", "AGI Rocks"))