Задача:
От абонентов приходят вызовы на ECSS-10 на разные В-номера. Софтсвитч обращается в базу данных и:
- если там не находит А-номер звонящего, то добавляет к В-номеру 11 и оправляет вызов в соответствующий транк;
- если А-номер звонящего присутствует, то добавляет к В-номеру 22 и оправляет вызов в соответствующий транк;
База будет содержать 5000-50000 абонентов и наполняться сторонним приложением.
Решение:
В качестве базы номеров будем использовать базу MySQL. Также нам потребуется RADIUS-сервер (например, freeradius), который будет вызывать внешний скрипт для доступа к MySQL и проверки наличия номера. Также RADIUS будет присваивать некий тэг в зависимости от наличия номера. ECSS-10 будет анализировать тэг и маршрутизировать вызов в нужный транк.
Настройки:
Freeradius
- /etc/freeradius/3.0/clients.conf
В конец файла добавить секцию:
client <LISTEN_IP> { secret = <SECRET> shortname = <SHORT_NAME> } client 192.168.0.7 { secret = secret123 shortname = ecss1 }
- /etc/freeradius/3.0/users
В конец файла добавить секцию:
p.city Auth-Type := Accept Exec-Program-Wait = "/usr/local/sbin/check_number %{Calling-Station-Id}"
где p.city - имя домена
- перезапустить freeradius
Создать скрипт для доступа к mysql и проверки наличия номера в таблице по пути /usr/local/sbin/check_number:
#! /bin/sh request="select count(*) > 0 from numbers where number = \"${1}\"" count=`echo ${request} | mysql -ucalls_db -pcalls_db -D ecss_calls_db -sh 10.24.146.180` echo "Eltex-AVpair += \"CallManagement:tag=tag_${count}\""
В БД calls_db создать таблицу numbers:
CREATE TABLE `numbers` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, number varchar(24) NOT NULL, primary key (`id`)) ENGINE=InnoDB; %% Задание номеров: insert into numbers(number) values("799");
Настроить RADIUS сервер в домене на софтсвиче
domain/p.city/aaa/radius/declare ryabkov_home 192.168.0.7 access eltex_secret
Начать использовать этот сервер при маршрутизации.
В ответ RADIUS сервер возвращает два тега: tag_1 - если номер найден в базе. tag_0 - если не найден. Далее этот тег можно использовать при маршрутизации.