Asterisk AGI: Как получить или установить значение глобальной переменной?

Я использую Asterisk 1.8 с PHP для сценариев AGI.

РЕДАКТИРОВАТЬ:

Я борюсь с настройкой и получением значений глобальных переменных из PHP-скрипта AGI. Я могу установить переменные канала, но не глобальные переменные. Используя библиотеку PHPAGI.

Пытался:

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

Кажется, это вообще не работает, при получении значения из абонентской группы оно пусто.

У кого-нибудь есть рабочий пример установки и получения глобальных переменных в сценарии AGI?


person John Volkya    schedule 29.09.2011    source источник
comment
У меня нет опыта работы с Asterisk, но с php вы можете получить доступ к глобальным переменным из $GLOBALS   -  person Mike B    schedule 30.09.2011
comment
Нет, я говорю о глобальной переменной плана нумерации Asterisk, которую можно установить с помощью внешней программы или скрипта с использованием интерфейса шлюза Asterisk (AGI).   -  person John Volkya    schedule 30.09.2011


Ответы (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");
person John Volkya    schedule 30.09.2011

информация вики об 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 вы используете?

person Michał Niklas    schedule 30.09.2011
comment
Я использую версию 1.8. К сожалению, в этой версии больше нет функции SetGlobalVar(). - person John Volkya; 30.09.2011
comment
Я использую 16.9.0, и получение переменных [globals] не работает. - person David Rodecker; 24.05.2021