Здраствуйте! Я прошу прощение за мое ламерство, но я не знаю как заставить глобальные переменные сохранить свое значение после звонка. Теоретически я хотел создать что-то вроде rrmemory. В CLI поставил значение dialplan set global I 1 , далее по задумке после окончания звонка переменная I приобретает значение 2 и при новом звонке свисток должен набрать следующий номер и записать новое значение для I и.т.д. Если решение не удачна, можете посоветовать что-нибудь похожее без использования рандома?
[from-phone] exten => s,1,Answer() exten => s,n,GotoIf($[${I}=1]:tax1) exten => s,n,GotoIf($[${I}=2]:tax2) exten => s,n,GotoIf($[${I}=3]:tax3) exten => s,n,GotoIf($[${I}=4]:tax4) exten => s,n(tax1),Set(GLOBAL(I)=2) same => n,Dial(Dongle/dongle0/111) exten => s,n(tax2),Set(GLOBAL(I)=3) same => n,Dial(Dongle/dongle0/222) exten => s,n(tax3),Set(GLOBAL(I)=4) same => n,Dial(Dongle/dongle0/333) exten => s,n(tax4),Set(GLOBAL(I)=1) same => n,Dial(Dongle/dongle0/333)
все правильно, так и будет.
но вам явно нехватает навыка в программировании. вы переменную забыли инициалировать(тоесть учесть когда ${I} пустое)
а также вам надо ${GLOBAL(I)} наверно брать.
еще можно asterisk db использовать
и да, еще подумайте что будет в случае одновременного выполнения потоков и в случае когда до конца дойдет.
кстати конструкцию выше можно переписать вмнесто
exten => s,n,GotoIf($[${I}=1]:tax1)
exten => s,n,GotoIf($[${I}=2]:tax2)
exten => s,n,GotoIf($[${I}=3]:tax3)
exten => s,n,GotoIf($[${I}=4]:tax4)
еквивалент
exten => s,n,Goto(tax${I})
Задан: Oct 17 '13
Просмотрен: 509 раз
Обновлен: Oct 18 '13
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
После изменения констркции на exten => s,n,Goto(tax${I}) вроде работает, кстати инициализация переменной из CLI это шлишком временное решение, как элегантнее сделать инициализацию на "первое выполнение" что-бы дальше не мешал последуищей работе?
firedark (Oct 17 '13)edit