1

同胞stackoverflowers:

我来这里是带着一个到目前为止我自己无法解决的问题。

我希望能够将数组中的数据传递到我的 Asterisk PBX 拨号计划中的 AGI 脚本,该拨号计划的格式如下:

exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param1=value1&param2=value2...&paramN=valueN)

但是其中一个参数必须像接收 CGI 脚本中的 URL 参数一样接收数组数据,例如:

exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=value1,value2,value3...,valueN)

我知道 AGI 脚本能够接收数组作为参数,但是 URL 形式的 AGI 脚本的可用文档并没有说明如何接收数组数据作为脚本参数;这就是为什么我在这里发布这个问题。

我已经尝试通过以下方式传递数据(结果不成功):

  1. 逗号分隔:

    exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1,array_value2...,array_valueN)
    
  2. 管道分离:

    exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=array_value1|array_value2...|array_valueN)
    
  3. 分号分隔:

    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&param_array=array_value2...&param_array=array_valueN)

根据我的阅读,这不是将参数传递给 URL 的正确方法,这是我用来将数据传递给我的 AGI 脚本的方式。

如果有人能对此事有所了解,我将不胜感激,因为我真的不想像迄今为止所做的那样单独传递每个数组项。

4

3 回答 3

1

我会使用引号并用逗号分隔param_array支持的

exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array="a=1,b=2,c=3,d=4") 
于 2015-03-27T07:05:17.700 回答
1

在星号中:

exten => s,n,Read(ZIPCODE,,8,3) ;ZIPCODE is my variable
exten => s,n,AGI(query-database.php|${ZIPCODE})

在 PHP 脚本 query-database.php 中:

$zipcode = $argv[1]; Get the value of first var.
于 2015-09-16T11:20:38.850 回答
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

笔记:

  1. 通过发出: 启动快速 agi 服务器python3 fast_agi_server.py,它将开始监听127.0.0.1:4573

  2. 我的声音文件位于与 同名 context且格式为的目录中WAV PCM 8Khz 16Bits,即:

    /var/lib/asterisk/sounds/agi_demo/i_just_called
    
  3. 服务器源代码 fast_agi_server.py来自pystrix egg。

  4. AGI要使用pystrix以下方法发送变量SetVariable

    agi.execute(pystrix.agi.core.SetVariable("ok", "AGI Rocks"))
    
于 2019-04-16T02:52:07.650 回答