Страница 1 из 1

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

Добавлено: 22 дек 2021, 10:56
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 как была пустой так и осталась.

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

Может кто сталкивался с таким?

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

Добавлено: 22 дек 2021, 11:18
Wapo
Еще прикол странный.
Делаю 2 дампа - до запуска AGI, после запуска
В первом переменная BIT="" во втором BIT=111111
А при окончании разговора она снова BIT=""

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

Добавлено: 22 дек 2021, 12:16
Garnish
Диалпланчик бы глянуть.
Так могу только предположить что у вас устанавливается переменная в макросе вне которого она и не должна быть видна.
Попробуйте передать через SHARED

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

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

[from-out]
exten => 5555,1,Set(__BIT="")
same => n,Dial(SIP/000,,M(bit.php))

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

Добавлено: 22 дек 2021, 14:58
sasa
dialplan show globals
dialplan show chanvars <chan>

до после изучайте

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

Добавлено: 22 дек 2021, 18:52
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})