Asterisk AGI:如何获取或设置全局变量的值?

时间:2011-09-29 22:50:16

标签: php asterisk telephony agi

我正在使用Asterisk 1.8和PHP进行AGI脚本编写。

编辑:

我正在努力设置并从AGI PHP脚本中获取全局变量的值。我可以设置通道变量但不能设置全局变量。使用PHPAGI lib。

尝试:

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

这似乎根本不起作用,当从拨号计划中获取值时,它是空的。

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

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

Asterisk wiki info about AGI说明全局变量的不同之处: ... 全局变量不会以这种方式传递给AGI脚本。你必须使用“get variable”AGI命令...

来获取它们

和其他部分: ... GET VARIABLE:不适用于全局变量。不适用于模块生成的某些变量....

要设置全局值,您可以执行:

EXEC SetGlobalVar <var_name>=<value>

为了获得get_variable应该有效但是Asterisk中存在错误:https://issues.asterisk.org/view.php?id=7609

这个错误发生在Asterisk 1.2.20中,您使用的是什么版本的Asterisk?