Asterisk и IP-телефония

Как легко и просто научить ваш Asterisk звонить через нужного оператора / Хабр

Материал перенесён из старой базы знаний ATC-IP и оформлен в едином стиле нового сайта.

Хабр
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

Материал сокращён при переносе в новую базу знаний. Полная версия сохранена в архиве старого сайта.

Позвонить +7 (343) 382-33-16