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

    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)})});
    Ответ написан
    Комментировать