SmileyK
@SmileyK
Коротко не как

Как определить регион звонящего в Asterisk?

Доброго времени, подскажите есть желание запустить 8-800..... но т.к мы находимся в разных регионах страны хочется автоматически направлять входящие звонки в регион расположения клиентов. Кто сталкивался ?
  • Вопрос задан
  • 3530 просмотров
Пригласить эксперта
Ответы на вопрос 2
mvlbrn
@mvlbrn
Для начала скачиваем базу кодов:
wget -N www.rossvyaz.ru/docs/articles/DEF-9x.html
wget -N www.rossvyaz.ru/docs/articles/ABC-3x.html
wget -N www.rossvyaz.ru/docs/articles/ABC-4x.html
wget -N www.rossvyaz.ru/docs/articles/ABC-8x.html

Создаем таблицу:
CREATE TABLE `abcdef` (
`def` smallint(6) NOT NULL,
`start` int(11) NOT NULL,
`finish` int(11) NOT NULL,
`count` int(11) NOT NULL,
`operator` varchar(64) NOT NULL DEFAULT '',
`region` varchar(128) NOT NULL DEFAULT '',
`region_last` varchar(64) DEFAULT NULL,
`region_first` varchar(64) DEFAULT NULL,
KEY `a_b` (`def`,`start`),
KEY `a` (`def`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Создаем хранимку:
CREATE DEFINER=`root`@`localhost` FUNCTION `abcdef_region`(n char(10)) RETURNS varchar(64) CHARSET utf8
BEGIN
DECLARE l VARCHAR(3);
DECLARE r VARCHAR(7);
DECLARE tmp VARCHAR(64);
DECLARE tmp2 VARCHAR(64);
DECLARE i INT;

SET l=LEFT(n, 3);
SET r=RIGHT(n, 7);

SELECT region_last INTO tmp FROM abcdef where `def`=l and `start`<=r and `finish`>=r;

IF (length(TRIM(tmp))=0 OR tmp like NULL) THEN
SET tmp='---';
END IF;

RETURN tmp;
END

Парсим скачанные файлы:
Код

Прописываем хп для использования в диалплане через odbc (мой случай):
func_odbc.conf:

[CALLREGION]
dsn=MySQL_asterisk_utf8
readsql=SELECT abcdef_region('${SQL_ESC(${ARG1})}');

Использование:
NoOp(${ODBC_CALLREGION(${CALLERID(num)})});
Ответ написан
Комментировать
Ovoshlook
@Ovoshlook
Ну так смотрите по префиксу и в зависимости от этого направляйте.
${CALLERID(num):1:4} наверное вполне подойдет чтобы ппроверить префикс, а дальше маршрутизируйте на нужный екстеншн, привязанные к региону.
Можно префиксы регионов положить в базу и отождествить их с конкретными endpoints. Делать выборку из базы в dialplan, и затем маршрутить как хочется.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы