function 'DB_EXISTS'
Функция диалплана Asterisk - DB_EXISTS: проверяет существует ли искомая запись во внутренней БД Asterisk (astdb).
Описание
Данная функция проверяет существует ли <key> в базе данных Asterisk.
Если существует возвращает '1', если не, то '0'.
Также возвращает переменную ${DB_RESULT} со значением, если оно задано
синтаксис
DB_EXISTS(family/key)
пример
Запретим более одного конкурентного вызова в заданном направлении (в примере 810).
Несколько умозрительный пример
( проще реализовать при помощи функции GROUP_COUNT ),
но хорошо иллюстрирует применение функций DB_EXISTS() и DB() для чтения и записи в astdb,
а также функции MATH() и приложения GotoIf
для манипуляций с данными и маршрутизации в диалплане.
exten => _810X.,1,set(long=${EXTEN:0:3}) ;Сохраним три первых символа екстеншена в переменной. same => n,gotoif($[${DB_EXISTS(LONGDIAL/${long})} = 0]?new:exists) ;Проверим существует ли запись LONGDIAL/810 в БД same => n(new),set(DB(LONGDIAL/${long})=0) ;Если не существует создадим, присвоив значение = 0. same => n(exists),set(DB(LONGDIAL/${long})=${MATH(${DB(LONGDIAL/${long})}+1,int)});Если существует, выполним инкремент ; прибавив наш вызов к счетчику. same => n,gotoif($[${DB(LONGDIAL/${long})} > 1]?fail);Выполним сравнение, если счетчик > 1, отправим вызов ;в приоритет fail. same => n,Dial(PJSIP/${EXTEN}@siptrunk,60,tr);Если счетчик < или = 1, произведем вызов. same => n(fail),set(DB(LONGDIAL/${long})=${MATH(${DB(LONGDIAL/${long})}-1,int)}) ;Приоритет fail для отброшенных вызовов ;- декремент счетчика и отбой. exten => h,1,gotoif($[${DB(LONGDIAL/${long})} = 0]?hangup) ;Процедура завершения для разрешенных вызовов ;если счетчик = 0 то сразу отбой. exten => h,n,set(DB(LONGDIAL/${long})=${MATH(${DB(LONGDIAL/${long})}-1,int)}) ;Если счетчик больше 0 - декремент и отбой. exten => h,n(hangup),hangup
*CLI> database show LONGDIAL /LONGDIAL/810 : 0
см. также
Freeswitch Core DB в Postgresql
Freeswitch: mod_dptools: group
~~socialite~~