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

выборка из mysql базы dialplan

Добавлено: 06 дек 2019, 19:28
janetland
Доброго вечера всем, коллеги.
Возможно, изобретаю колесо, есть рабочий код по выдергиванию данных из базы mysql. Не нравится статус deprecated в модулях, но и только.
Код соответственно усложняется, если необходимо проверять 2 поля, скажем, из 4х значений. А если их там будет больше?...

Задача: есть группа звонков, у нее ряд номеров, номера в группе и их кол-во могут меняться юзерами (все в базе). Номера в группе могут быть мобильные и локальные и на другой атс(признак транка), группы от дня недели - номерами меняются. Как можно логично управлять всем этим, не выстраивая дикие конструкции через GotoIf.. ?

Конфиг рабочий, для базы мобильных в базе

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

;
;;; connect to mysql database of mobile numbers ;;;
;
exten => _XXX,1,MySQL(Connect connid 192.168.1.1 asterisk Q1W2e# asterisk);
exten => _XXX,n,GotoIf($["${connid}" = ""]?error);
exten => _XXX,n,MySQL(Query resultid ${connid} SELECT location1, mobile1, mobile2, mobile3, timeout1, timeout2, timeout3 timeout4 FROM numbers WHERE phone=${EXTEN});
exten => _XXX,n,MYSQL(Fetch fetchid ${resultid} location1 mobile1 mobile2 mobile3 timeout1 timeout2 timeout3 timeout4);
exten => _XXX,n,MYSQL(Clear ${resultid});
exten => _XXX,n,MYSQL(Disconnect ${connid});
;
;;; record phone call
;
exten => _XXX,n(call),Set(filename=${UNIQUEID});
exten => _XXX,n,MixMonitor(/usr/rec/${filename}.wav,a);
exten => _XXX,n,Set(AUDIOHOOK_INHERIT(MixMonitor)=yes);
;
;;;mobile number (1,2,3) verification
;
exten => _XXX,n,GotoIf(${LEN(${mobile1})}>0?yes1:local);
exten => _XXX,n(yes1),GotoIf(${LEN(${mobile2})}>0?yes2:localmobile1dial);
exten => _XXX,n(yes2),GotoIf(${LEN(${mobile3})}>0?:localmobile2dial);
;
;;;call to local & 3 mobile numbers
;
exten => _XXX,n,Dial(SIP/${EXTEN},${timeout1},Tt);
exten => _XXX,n,Dial(SIP/asteriskcallcenter/9${mobile1},${timeout2},Tt);
exten => _XXX,n,Dial(SIP/asteriskcallcenter/9${mobile2},${timeout3},Tt);
exten => _XXX,n,Dial(SIP/asteriskcallcenter/9${mobile3},${timeout3},Tt);
exten => _XXX,n,HangUP();
exten => _XXX,n(busy),Playback(en/allbusy);
exten => _XXX,n,HangUP();
;
;;;call to only local (mobile 1,2,3 are empty)
;
exten => _XXX,n(local),Dial(SIP/${EXTEN},${timeout1},Tt);
exten => _XXX,n,HangUP();
;
;;;call to local & mobile 1
;
exten => _XXX,n(localmobile1dial),Dial(SIP/${EXTEN},${timeout1},Tt);
exten => _XXX,n,Dial(SIP/asteriskcallcenter/9${mobile1},${timeout2},Tt);
exten => _XXX,n,HangUP();
;
;;;call to local & mobile 1,2
;
exten => _XXX,n(localmobile2dial),Dial(SIP/${EXTEN},${timeout1},Tt);
exten => _XXX,n,Dial(SIP/asteriskcallcenter/9${mobile1},${timeout2},Tt);
exten => _XXX,n,Dial(SIP/asteriskcallcenter/9${mobile2},${timeout3},Tt);
exten => _XXX,n,HangUP();
;
exten => _XXX,n,Dial(SIP/${EXTEN},,Tt);
exten => _XXX,n,HangUP();
; 

Re: выборка из mysql базы dialplan

Добавлено: 06 дек 2019, 19:51
ded
Вам надо не в диалплан встраивать MySQL(Connect connid
а написать внешний скрипт на РНР, и вызывать его в диалплане через AGI
exten => _XXX,1,AGI(myscript.php)

Re: выборка из mysql базы dialplan

Добавлено: 09 дек 2019, 10:42
1g0r
Судя по SQL запросу... табличка то оч избыточна... но это к теме не относится )