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

см. также

agi 'database del'

agi 'database deltree'

agi 'database get'

agi 'database put'

Asterisk: res_odbc.conf

function 'BLACKLIST'

function 'DB'

function 'DB_DELETE'

Freeswitch Core DB в Postgresql

Asterisk: функции диалплана

~~socialite~~

Только авторизованные участники могут оставлять комментарии.
  • asterisk/func/db_exists.txt
  • Последние изменения: 2016/12/17