AstDB является частью Asterisk и устанавливается вместе с ним. Это простая БД (Barkley DB версии 1), без всяких заморочек. Если нужно подключить к Asterisk БД MySQL или PosrgreSQL – это тоже можно сделать, но для несложных задач вполне хватит и AstDB.
Предположим, у нас уже настроен GSM-модем в Asterisk – например, как я описывал здесь для модемов Huawei – и мы хотим звонить на мобильные номера наших абонентов (к примеру, в не рабочее время, когда они находятся вне доступа к SIP телефонам).
Хранится информация в БД с помощью трех понятий – семейство, ключ и значение. Семейство – это аналог таблицы, в которой хранятся пары ключ-значение.
Для начала, нам необходимо наполнить нашу БД номерами. Сделать это можно в процессе диалплана командой вроде:
exten => s,n,Set(DB(mobile/1112)=0991111111)
Здесь мы создаем (или модифицируем, если таковой ключ уже есть) ключ 1112 – SIP-номер для нашего абонента, в моем примере – в семейтве mobile. И присваиваем ему номер мобильного для этого абонента.
Но для большого количества абонентов делать такое не есть хорошо, тем более что БД хранит данные и после перезапуска Asterisk и после перезагрузки сервера. Потому, целесообразнее – для моего примера – заранее заполнить БД данными из командной строки Asterisk.
Добавление/модификация значений:
database put <семейство> <ключ> <значение>
Пример: database put mobile 1112 0991111111
Для просмотра информации имеем команду:
database get <семейство> <ключ>
а также для просмотра всей БД:
database show
В плане набора (dialplan) пишем следующее:
…
; Вызываем макрос для дозвона по GSM, передавая ему SIP номер абонента как аргумент
exten => _1XXX,n,Macro(dial-mobile,${EXTEN})
….
[macro-dial-mobile]
; Вытаскиваем из БД значение номера для нужного абонента
; и помещаем в его переменную MobNumber
exten => 1,1(mobile),Set(MobNumber=${DB(mobile/${ARG1})})
; Звоним через GSM-модем
exten => 1,n,Dial(Dongle/dongle0/${MobNumber},100,dmghHtT)
…
Вот в общем-то и всё.