Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Несохранненые переменные в dialplan после звонка [закрыт]

0

Здраствуйте! Я прошу прощение за мое ламерство, но я не знаю как заставить глобальные переменные сохранить свое значение после звонка. Теоретически я хотел создать что-то вроде 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)

спросил Oct 17 '13

firedark Gravatar firedark
85 4 4

Comments

После изменения констркции на exten => s,n,Goto(tax${I}) вроде работает, кстати инициализация переменной из CLI это шлишком временное решение, как элегантнее сделать инициализацию на "первое выполнение" что-бы дальше не мешал последуищей работе?

firedark (Oct 17 '13)edit

1 Ответ

1

все правильно, так и будет.

но вам явно нехватает навыка в программировании. вы переменную забыли инициалировать(тоесть учесть когда ${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

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

обновил Oct 17 '13

Comments

Опыта в программированние конечно не хватает, но я ведь перед выполнением в CLI инициализировал переменную с помощью dialplan set global I 1. Код расчитан на 1 поток, в конце ведь I=1, так что теоретически при новом звонке он должен начинать с tax1.

firedark (Oct 17 '13)edit

асткриск моежт упасть например. короче, слечай неинициализированной переменной надо определять.

meral (Oct 18 '13)edit

уже убедился что так не следует делать :) как изящнее инициализировать переменную чтобы она потом не мешала при повторном выполнении цикла?

firedark (Oct 18 '13)edit

ну неициализированная она будет пустой. выше написано как изящнее.

meral (Oct 18 '13)edit

Все сделал, спасибо. Исправил кусок кода на: exten => s,2,GotoIf($["${GLOBAL(I)}" = ""]?3:4) exten => s,3,Set(GLOBAL(I)=1) exten => s,4,Goto(taxi${I})

firedark (Oct 18 '13)edit

зачем? достаточно было просто метку tax( бзе индекса) поставить перед любым из выборов. когда переменная неопределена будет прыгать на tax

meral (Oct 18 '13)edit

Спасибо, не знал что и так можно, учту. Кстати как увидеть в астериске какой код Q.931 получает GSM шлюз от мобильного телефона?

firedark (Oct 18 '13)edit

если chan_dongle - включить дебаг. а еси сип - то спросите у производителя шлюза

meral (Oct 19 '13)edit

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: Oct 17 '13

Просмотрен: 509 раз

Обновлен: Oct 18 '13

Похожие вопросы:

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.