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

Поиск ключей в AstDB по маске

Добавлено: 05 сен 2013, 19:26
TVMaker
Здравствуйте! Мне двадцать лет, я бородат, живу с мамой, тролль, лжец и девственник. Вот и сейчас... P.S. Извените за неровный почерк.! Имеется в качестве домашней АТС голый астер безо всяких гуевых примочек. В него заведены 5 внешних транков (как на вход, так и на выход), имеются 5 внутренних абонентов (с перспективой увеличения), разнесенных по городам и даже странам :-) В общем, все родственники подцеплены к астеру, дабы общаться между собой нахаляву, а наружу - за счет спонсора (то бишь меня). И хотят они знать, не сильно ли напрягают меня на бабло, стесняясь много звонить наружу. И возникла идея голосового информирования о стоимости звонка.
Проблема в том, что у меня нет жесткой привязки набранных номеров к транкам, ибо реализовано цикличное резервирование по недоступности внешних транков. Таким образом, звонок на мегафон в нормальных условиях стоящий 80 копеек (по транку мультифона) может превратиться в 3 с лишним рубля по транку сипнета.
Как я в розовых снах вижу реализацию задачи: 5 семейств в AstDB, соответствующих внешним транкам. Ключи в каждом семействе - маски номеров, значение ключей - цена направления. Например, YouMagic/84 = 0.99 (то бишь звонки на _84XXXXXXXXX стоят 99 копеек)
Так вот задача в чем: все ключи разной длины, а встроенный функционал работы с AstDB довольно скромен. Можно ли, например, имея введенный номер 849121234567, достучаться до ключей YouMagic/84 или Sipnet/8491 и получить их значения?
Конечно, российские номера - частный случай. Вообще, эта задача актуальна для международных номеров, у которых нет заранее известной длины...
Буду благодарен за идеи. Спасибо.

Re: Поиск ключей в AstDB по маске

Добавлено: 05 сен 2013, 19:36
ded
5 семейств в AstDB, соответствующих внешним транкам. Ключи в каждом семействе - маски номеров, значение ключей - цена направления. Например, YouMagic/84 = 0.99 (то бишь звонки на _84XXXXXXXXX стоят 99 копеек)
Попытка из AstDB сделать биллинг? А менеджировать как? сегодня YouMagic/84 = 0.99, а завтра 1.017?
Командами database del put удалять/добавлять/менять?
Приложения
Ниже приведены функции для работы с этой базой данных, которые Вы можете использовать при конфигурации плана набора extensions.conf:

DBdel: Удаление ключа из базы данных
DBdeltree: Удаление дерева ключей из базы данных
DBget: Получить значение из базы данных
DBput: Сохранить значение в базе данных
Правда они уже устарели малость, сейчас вот что:
*CLI> core show function DB
*CLI>
-= Info about function 'DB' =-

[Syntax]
DB(<family>/<key>)

[Synopsis]
Read from or write to the Asterisk database

[Description]
This function will read from or write a value to the Asterisk database. On a
read, this function returns the corresponding value from the database, or blank
if it does not exist. Reading a database value will also set the variable
DB_RESULT. If you wish to find out if an entry exists, use the DB_EXISTS
function.
exten => _84XXXXXXXXX,1,NoOp(DB(Youmagic/84))
Читайте:
http://asterisk.ru/knowledgebase/Asterisk+database

Re: Поиск ключей в AstDB по маске

Добавлено: 05 сен 2013, 19:55
TVMaker
Привязывать MySQL или что-нить в этом роде для домашнего использования - это имхо из пушки по воробьям палить. Поскольку я довольно активно сам использую АТСку и периодически захожу на сайты соответствующих провайдеров, то мне не влом пару раз в год подправить через CLI соответствующие ключи. Тем паче что у основных моих транков - YouMagic и Multifon тарифы на популярные направления не менялись очень давно. Я ж не собираюсь вбивать всю международку, вполне достаточно пяти-шести стран, куда родня и я потенциально можем звонить. Для остальных вполне подойдет сообщение "Тариф не найден, звоните смело :-)". Тем более что Африка (8102.) и Южная Америка (8105.) жестко забанены на всякий случай, да и до остальных экзотических направлений скоро руки дойдут :-)

Я вижу решение задачи в следующем: берем номер, предназначенный в транк, вычисляем его длину, пытаемся найти в нужном семействе в базе. Нашли - вуаля! Не нашли - отрезаем у номера цифру справа, снова ищем. И так до тех пор, пока не найдем, или пока от кастрируемого номера не останется ничего. Только вот не офигеет ли астер от многочисленных обращений к несуществующим ключам?

Re: Поиск ключей в AstDB по маске

Добавлено: 05 сен 2013, 20:11
TVMaker
ded писал(а):exten => _84XXXXXXXXX,1,NoOp(DB(Youmagic/84))
Так вся беда в том, что номер для транка и экстен могут не совпадать. Есть у меня резервный транк задармы, для которого приходится конвертировать номер в e164. То бишь если выбрана Задарма (и канальная переменная на это указывает), то управление идет на конвертер номера. Конечно, можно отказаться от Задармы, но это в далекой перспективе (баланс там очень не пустой).
Плюс к тому, у меня реализован прямой выбор исходящего провайдера (чисто для меня, остальным это сложно) через трехзначный префикс. И сделан доступ к дальней связи извне через 4-значный префикс. То есть получающийся номер для транка проходит ряд преобразований и может быть весьма далек от первоначального экстена. Конечно, логику диалплана я накрутил знатно, но я хочу построить для себя универсальную систему :-)

Re: Поиск ключей в AstDB по маске

Добавлено: 07 сен 2013, 09:51
virus_net
TVMaker писал(а):Привязывать MySQL или что-нить в этом роде для домашнего использования - это имхо из пушки по воробьям палить
Чёйто ? Для определенных задач созданы определенные решения. Использовать MySQL однозначно.
TVMaker писал(а):Я вижу решение задачи в следующем: берем номер, предназначенный в транк, вычисляем его длину, пытаемся найти в нужном семействе в базе. Нашли - вуаля! Не нашли - отрезаем у номера цифру справа, снова ищем.
А это из пукалки по бегемотам.

Re: Поиск ключей в AstDB по маске

Добавлено: 08 сен 2013, 03:26
TVMaker
Не готов я пока разбираться с MySQL, если честно. Не так много времени свободного, чтоб распыляться. Хочу сначала астер "покрутить" как следует. Сижу, читаю форумы, экспериментирую.