Возможно, изобретаю колесо, есть рабочий код по выдергиванию данных из базы 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();
;