Как определить регион звонящего в Asterisk?
Для начала скачиваем базу кодов:
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)})});
Ну так смотрите по префиксу и в зависимости от этого направляйте. 
${CALLERID(num):1:4} наверное вполне подойдет чтобы ппроверить префикс, а дальше маршрутизируйте на нужный екстеншн, привязанные к региону. 
Можно префиксы регионов положить в базу и отождествить их с конкретными endpoints. Делать выборку из базы в dialplan, и затем маршрутить как хочется.