ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Проблемы и их решения Asterisk как такового

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

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

Сообщение Wapo » 22 дек 2021, 11:56

Приветствую.
Оказался первый раз в ступоре. Опишу ситуацию.
Астер 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, 18:53

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

Сообщение Wapo » 22 дек 2021, 12:18

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

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

Сообщение Garnish » 22 дек 2021, 13:16

Диалпланчик бы глянуть.
Так могу только предположить что у вас устанавливается переменная в макросе вне которого она и не должна быть видна.
Попробуйте передать через SHARED
Garnish
 
Сообщений: 43
Зарегистрирован: 09 мар 2016, 12:07

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

Сообщение Wapo » 22 дек 2021, 15:24

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

[from-out]
exten => 5555,1,Set(__BIT="")
same => n,Dial(SIP/000,,M(bit.php))
Аватар пользователя
Wapo
 
Сообщений: 795
Зарегистрирован: 02 мар 2011, 18:53

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

Сообщение sasa » 22 дек 2021, 15:58

dialplan show globals
dialplan show chanvars <chan>

до после изучайте
sasa
 
Сообщений: 119
Зарегистрирован: 22 янв 2019, 15:41

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

Сообщение Garnish » 22 дек 2021, 19:52

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})
Garnish
 
Сообщений: 43
Зарегистрирован: 09 мар 2016, 12:07


Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH