Как стать автором
Обновить

Комментарии 14

Извините, если я чего не понял, но, если абонент перешёл к другому оператору со своим номером, то этот скрипт будет выдавать неверные результаты?
Насколько мне известно перенос номера по MNP возможен только внутри одного региона, соответственно область всё равно будет правильно определяться.
К сожалению, да, оператор будет определен неверно, верно определится регион
Почему решили отказаться от хранения в бд? У Вас при каждом звонке читаются все данные. В бд был бы поиск по дереву, индекс, кеширование…
Тоже не понял почему столь странное решение. Даже если не использовать большие продукты типа Postgresql или Mysql всегда можно остановиться на аналогах sqlite. Да и запуск shell скрипта из астера при каждом звонке немного неоптимально. Это только мое мнение. Может и не прав
Как минимум, можно разделить один файл, на кучку по префиксам. Тогда просматривать будем файл меньше -> быстрее. sqlite безусловно будет быстрее, там ведь есть индексация.
Чем CSV не БД?
БД вполне себе, точнее ХД (Хранилище данных), но не СУБД, и думается мне основной посыл именно в отказе от СУБД, хотя мотивация лично мне не понятна. Астериск прекрасно умеет общаться с mysql и postgresql, не исключаю, что и с sqlite тоже. В том же sqlite хранить эти данные не сильно дороже выйдет, а скорости работы добавит ощутимо.
Была такая задача какое-то время назад.
Правда мне дали .xls файл на 66000 строк примерно. Так как его все равно надо было экспортировать я быстренько набросал скрипт фильтранувший это все на предмет одинаковых регионов и дополняющих друг други промежутков, чтобы точно сделать файл с самыми крупными возможными промежутками отличающимися регионами. На удивление вышло 2400 строк в итоге. И отсортировать все эти промежутки как числа по возрастанию.
Поиск в этом файле принимая номер за число (то есть тупо с самого начала пока число не станет меньше начала текущего промежутка, и если оно при этом попало в предыдущий промежуток — значит попал) занимает миллисекунды и имеет сложность O(n).
Тоже обошелся без базы, просто объявляю все это массивом в начале перлового скрипта.
Настроить запросы к базе, даже SQLite, вряд ли заняло бы дольше. А работать будет быстрее.
6 лет работал с asterisk а про "__" не знал. Спасибо большое :)
На практике как используете? Set(CALLERID(name) = ${reg}), а у операторов ip-телефоны показывающие всю информацию из callerid(all)? Или вы это на практике вообще не используете?
На практике — для ведения статистики по регионам, с которых поступил звонок на номер 8800, и для подстановки номера нужного региона при исходящих звонках на самые важные направления клиента.
Это, конечно, перл, но разберётесь :)
Для телефонии обычно интервалы номеров фуфу как неудобно, а префиксы — это самое то.
http://nw-wind.livejournal.com/227076.html
Я когда-то давно написал программу преобразования интервалов в минимальный набор префиксов.
Пользуйтесь!
Спросил у маркетологов и получил ответ о том, что было бы неплохо иметь возможность фиксации региона обращения клиента. А тут и статья освежила суть идеи. Когда то делал проект LCR с использованием информации с сайта Россвязи. Только в тот раз были сформированы таблицы в БД и дополнены колонками с ценами операторов. Думаю в этот раз я опять поработаю с БД, но буду добавлять в CDR кастомное поле. Далее будем просто делать отчёт из CDR и получим то что нужно. Может и какие другие варианты взбредут в голову.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий