VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

php-AGI и переменные

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

php-AGI и переменные

Сообщение Wapo »

Приветствую.
Оказался первый раз в ступоре. Опишу ситуацию.
Астер 11. Используется PHP-AGI.
(описание упрощено)

Итак. Приходит внешний звонок на который я выславляю переменную __BIT="".
Далее идет Dial(SIP/111,,M(bit))

[macro-bit]
exten => s,1,AGI(bit.php) - вызов AGI-скрипта типа

Код: Выделить всё

<?php
require_once('phpagi-asmanager.php');
require_once('phpagi.php');
$agi= new AGI();
$agi->verbose("--------BIT is started------------");
$agi->set_variable('BIT',"11111111111111111");
?>
т.е. скрипт ДОЛЖЕН вывести в консоль сообщение (появляется) и установить переменную в значение 1111111111.
same => n,DumpChan

Вижу в дампе что все ок и переменная выставилась.

Далее идет разговор. После завершения разговора снова снимаю дамп и вижу что переменная __BIT как была пустой так и осталась.

Наигрался кучей варианто в подчеркиванием и без - все без толку.

Может кто сталкивался с таким?
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: php-AGI и переменные

Сообщение Wapo »

Еще прикол странный.
Делаю 2 дампа - до запуска AGI, после запуска
В первом переменная BIT="" во втором BIT=111111
А при окончании разговора она снова BIT=""
Garnish
Сообщения: 43
Зарегистрирован: 09 мар 2016, 11:07

Re: php-AGI и переменные

Сообщение Garnish »

Диалпланчик бы глянуть.
Так могу только предположить что у вас устанавливается переменная в макросе вне которого она и не должна быть видна.
Попробуйте передать через SHARED
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: php-AGI и переменные

Сообщение Wapo »

Я же написал, что переменная устанавливается в момент прихода внешнего звонка ДО макроса + имеет имя с двумя подчеркиваниями, что должно свидетельствовать о наследовании.
Ну а так:

[from-out]
exten => 5555,1,Set(__BIT="")
same => n,Dial(SIP/000,,M(bit.php))
sasa
Сообщения: 119
Зарегистрирован: 22 янв 2019, 14:41

Re: php-AGI и переменные

Сообщение sasa »

dialplan show globals
dialplan show chanvars <chan>

до после изучайте
Garnish
Сообщения: 43
Зарегистрирован: 09 мар 2016, 11:07

Re: php-AGI и переменные

Сообщение Garnish »

Wapo писал(а):Я же написал, что переменная устанавливается в момент прихода внешнего звонка ДО макроса + имеет имя с двумя подчеркиваниями, что должно свидетельствовать о наследовании.
Ну а так:

[from-out]
exten => 5555,1,Set(__BIT="")
same => n,Dial(SIP/000,,M(bit.php))
Ваша переменная в from-out и в макросе по сути две разные переменные. С помощью наследования вы можете увидеть в макросе значение переменной, но не можете в макросе ее обновить (обновляется только локальная переменная). Собственно в программировании это называется область видимости переменной.
Поэтому ничего удивительного в том, что в макросе в дампчане вы видите переменную, а где-нибудь в h ее уже нет.

Работающий пример с SHARED:
[test]
exten => _X.,1,Set(__MY_CHANNEL=${CDR(channel)})
exten => _X.,n,Dial(SIP/${RECIPIENT}@beeline,,M(billing))
....
exten => h,1,Set(START=${SHARED(START,${MY_CHANNEL})})

[macro-billing]
exten => s,1,Set(SHARED(START,${MY_CHANNEL})=${EPOCH})
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH