首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >星号:如何以URL形式将数组数据传递给AGI脚本?

星号:如何以URL形式将数组数据传递给AGI脚本?
EN

Stack Overflow用户
提问于 2015-03-26 22:04:29
回答 3查看 1.9K关注 0票数 1

花草:

我带着一个问题来到这里,到目前为止,我还无法独自解决这个问题。

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

代码语言:javascript
复制
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param1=value1&param2=value2...&paramN=valueN)

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

代码语言:javascript
复制
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array=value1,value2,value3...,valueN)

我知道AGI脚本可以接收数组作为参数,但是URL形式的AGI脚本的可用文档并没有提到如何将数组数据作为脚本参数来接收;这就是我在这里发布这个问题的原因。

我试验了(结果不成功)以下列方式传递数据:

  1. 逗号分隔: AGI(agi:hostname:port/agi_script.agi?param_array=array_value1,array_value2.,array_valueN)
  2. 管道分离: 排除AGI(agi:hostname:port/agi_script.agi?param_array=array_value1|array_value2...|array_valueN),=> some_exten,优先级
  3. 分号分隔: 排除AGI(agi:hostname:port/agi_script.agi?param_array=array_value1;array_value2...;array_valueN),=> some_exten,优先级

但到目前为止,我只成功地以以下方式传递了数组数据:

代码语言:javascript
复制
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脚本的方式。

如果有人能在这件事上给我一个启发,我会非常感激的,因为我真的不想像我一直以来所做的那样,单独传递每个数组项。

EN

回答 3

Stack Overflow用户

发布于 2015-03-27 07:05:17

我会在后面用引号和逗号分隔( param_array )

代码语言:javascript
复制
exten => some_exten,priority,AGI(agi:hostname:port/agi_script.agi?param_array="a=1,b=2,c=3,d=4") 
票数 1
EN

Stack Overflow用户

发布于 2015-09-16 11:20:38

(星号):

代码语言:javascript
复制
exten => s,n,Read(ZIPCODE,,8,3) ;ZIPCODE is my variable
exten => s,n,AGI(query-database.php|${ZIPCODE})

PHP查询中的-database.php:

代码语言:javascript
复制
$zipcode = $argv[1]; Get the value of first var.
票数 1
EN

Stack Overflow用户

发布于 2019-04-16 02:52:07

不是完全正确的答案,也是延迟,但是我使用agi脚本使用python发送和接收变量的方式如下:

上下文:

代码语言:javascript
复制
[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()

调试日志:

代码语言:javascript
复制
-- 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. 通过发出:python3 fast_agi_server.py启动快速agi服务器,它将开始侦听127.0.0.1:4573
  2. 我的声音文件位于与context同名、格式化为WAV PCM 8Khz 16Bits的目录中,即: /var/lib/asterisk/sounds/agi_demo/i_just_called
  3. 服务器源代码server.py来自[医]脓蛋。
  4. 要使用AGI使用pystrix发送变量,请使用SetVariable方法: agi.execute(pystrix.agi.core.SetVariable("ok","AGI岩石“)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29289743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档