【问题标题】:Asterisk AGI: How to get or set the value of a global variable?Asterisk AGI:如何获取或设置全局变量的值?
【发布时间】:2011-09-29 22:50:16
【问题描述】:

我将 Asterisk 1.8 与 PHP 一起用于 AGI 脚本。

编辑:

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

试过了:

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

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

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

【问题讨论】:

  • 我没有使用 Asterisk 的经验,但是使用 php 你可以从$GLOBALS访问全局变量
  • 不,我说的是 Asterisk 拨号计划全局变量,可以使用 Asterisk 网关接口 (AGI) 通过外部程序或脚本进行设置。

标签: php asterisk telephony agi


【解决方案1】:

我找到了一种解决方法来让它工作。

首先,全局变量不能在拨号计划的 [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");

【讨论】:

    【解决方案2】:

    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

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

    【讨论】:

    • 我使用的是 1.8 版。不幸的是,该版本中不再存在 SetGlobalVar()。
    • 我使用的是 16.9.0,但无法获取 [globals] 变量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多