Хабр Geektimes Тостер Мой круг Фрилансим Мегапосты: Магазин инноваций Стикер-тест Тест-драйв VPS Публикации Пользователи Хабы Компании Песочница 13 Написать djsergminyar Профиль Публикации Диалоги Закладки Бета-тестирование Настройки Выйти Amalgamm 25 ноября 2014 в 15:18 Как легко и просто научить ваш Asterisk звонить через нужного оператора Разработка систем связи Asterisk Из песочницы Приветствую тебя, %username%! Сегодня мне хотелось бы поделиться решением, позволяющим научить ваш Asterisk автоматически маршрутизировать звонки по соответствующим направлениям, не прибегая к громоздким регулярным выражениям. Практика показывает, что все больше и больше компаний начинают задумываться о своих расходах на связь. Львиную часть расходов при этом составляют вызовы на мобильные номера. Отсюда и родилась задача обрабатывать исходящие вызовы и направлять через ту линию, где звонок будет совершен бесплатно или за наименьшую стоимость. В моем случае, необходимо было маршутизировать звонки на домашний регион операторов большой тройки через соответствующие сим-карты, вставленные в GSM-шлюз. Вместо выбранных операторов можно использовать любые другие направления по аналогии с сабжем. В качестве шлюза выступал OpenVox VoxStack VS-GW1202-4G, в который предварительно были вставлены сим-карты известных вам операторов и настроены 3 транка до Asterisk. Безусловно, путей решения проблемы великое множество, но мне хотелось бы остановиться на решении, которое я счел оптимальным: автоматическая сверка номеров из базы MySQL и дальнейшее перенаправление на нужную линию. Реализация довольно проста, хотя местами может показаться неказистой. Разбить все работы можно на несколько этапов: Создать и заполнить базу данных Подготовить Asterisk к работе с БД Написать диалплан для обработки исходящих вызовов Подготовка базы Для начала необходимо создать отдельную базу (опционально): CREATE DATABASE telcodes; Рутовый доступ в нашей ситуации лучше не давать, т.к. в этом нет необходимости, да и дырка в безопасности в виде рутового логина и пароля к MySQL в открытом виде в конфигурационном файле никому не нужна. Поэтому даем доступ произвольному пользователю только к нашей БД (в моем случае пользователь: «mobile», пароль: «heavypass») CREATE DATABASE telcodes; GRANT ALL ON telcodes.* TO mobile@localhost IDENTIFIED BY 'mobile' FLUSH PRIVILEGES SET PASSWORD FOR 'mobile' 'localhost' PASSWORD 'heavypass' ); Создаем таблицу: Скрытый текст CREATE TABLE telcodes ( code smallint NOT NULL begin int 11 NOT NULL end int 11 NOT NULL ammount int 11 NOT NULL operator varchar 100 NOT NULL region varchar 100 NOT NULL DEFAULT CHARSET =utf8; А теперь можно перейти непосредственно к заполнению. Каждый волен сам выбирать для себя способ, я остановлюсь на следующем: wget http://www.rossvyaz.ru/docs/articles/Kody_DEF-9kh.csv cat Kody_DEF-9kh.csv | iconv -f pt154 -t utf8 >> telcodes.csv mysqlimport -umobile -p telcodes /usr/src/telcodes.csv --fields-terminated-by= ';' --lines-terminated-by= "\r\n" Выкачиваем список кодов мобильных операторов с сайта Россвязи, преобразуем кодировку и заливаем в нашу базу. Путь до файла опционален. База заполнена, но чтобы избежать проблем с кодировками внесем небольшие изменения: т.к. мне необходимо отбирать номера большой тройки для звонков в домашнем регионе, то я меняю только их, регион помечаю как home , а названия меняю на beeline mts
Материал сокращён при переносе в новую базу знаний. Полная версия сохранена в архиве старого сайта.