2011-09-29 117 views
2

我使用的是用于AGI脚本的PHP的Asterisk 1.8。Asterisk AGI:如何获取或设置全局变量的值?

编辑:

我与设置挣扎,从AGI PHP脚本中获得的全局变量的值。我可以设置通道变量,但不能设置全局变量。使用PHPAGI lib。

尝试:

Set({$varname}={$value},g) 
Set({$varname}=\"{$value}\",g) 
Set(GLOBAL({$varname})={$value}) 

似乎并不是在所有的工作中,从拨号计划中所获得的价值时,它是空的。

有没有人有一个在AGI脚本中设置和获取全局变量的工作示例?

+0

我与Asterisk没有经验,但用PHP你可以从['$ GLOBALS'(http://us2.php.net/manual/en/reserved访问全局变量.variables.globals.php) –

+0

不,我正在谈论一个Asterisk拨号计划全局变量,可以使用Asterisk Gateway Interface(AGI)通过外部程序或脚本进行设置。 –

回答

2

我发现了一个解决方法,使其工作。

首先,全局变量不能在[globals]部分下的拨号计划中声明。而且,您似乎无法从AGI脚本中设置全局变量。但是,您可以设置一个通道变量(本地通道)。因此,要从AGI脚本设置全局变量,首先将该值设置为通道变量,并且当您从脚本返回拨号计划时,将检索通道变量的值并将其分配给全局变量。基本上,您似乎只能从拨号计划中分配全局变量,而不能从AGI脚本中分配全局变量。

示例代码:

//in dial plan 

exten => _XXXX,n,AGI(myagiscript.php) 
exten => _XXXX,n,Set(GLOBAL(someGlobalVariable)=${myLocalVar}) 


// in myagiscript.php 

$agi->set_variable("myLocalVar", "value"); 
0

Asterisk的wiki info about AGI说,关于全局变量不同的事情: ... 全局变量不会传递到以这种方式AGI脚本。您必须使用“获取变量”AGI命令获取它们...

和其他部分:... GET VARIABLE:不适用于全局变量。不能与由模块产生的一些变量工作....

有关设置全局值,你可以执行:

EXEC SetGlobalVar <var_name>=<value> 

为了得到我东西,get_variable应该工作,但在Asterisk中有错误: https://issues.asterisk.org/view.php?id=7609

这个错误是在星号1.2.20中,你使用什么版本的Asterisk?

+0

我正在使用1.8版。不幸的是,SetGlobalVar()在该版本中不存在。 –