Запускаю GSM-шлюз (зарегистрирован на Asterisk как SIP/201).
Необходимо чтобы исходящие на МТС номера , зарегистрированные в нашей области, шли через него.
В extensions.conf прописываю:
exten => _8910XXXXXXX,1,Dial(SIP/201,1,D(${EXTEN}))
exten => _8915XXXXXXX,1,Dial(SIP/201,1,D(${EXTEN}))
exten => _8916XXXXXXX,1,Dial(SIP/201,1,D(${EXTEN}))
exten => _8917XXXXXXX,1,Dial(SIP/201,1,D(${EXTEN}))
... и так далее для всех кодов МТС.
Вопросы:
1) Где можно узнать закрепленную за МТС нумерацию, действующую на территории моей области? Чтобы звонок не пошел на номер МТС другого региона.
2) Можно ли как-то покороче написать, то что я написал в extensions.conf (может как-то можно ввиде одной строки)?
спасибо.
Определение DEF кода в зоне +7 на сайте МТТ
Определение DEF кода в зоне +7 на сайте Ростелекома
Определение DEF кода в зоне +7 из справочника Компании ТТК
Кто-нибудь может выложить готовый диалплан для звонков по России на МТС, Мегафон и Билайн. Просто по одной области еще можно его руками написать. А вот для всей России, по каждому из операторов, как-то тяжеловато. Нужно автоматически как-то информацию по DEF- кодам парсить.
Спасибо.
2) Проверяется по своей базе, наш ли номер
3) Если номер наш, то маршрутизируем его по своим маршрутам
Как щас:
4) Если номер не наш - маршрутизируем по статически маршрутам
Будет
4) Если номер не наш - делается запрос в координационный центр, который упрощенно выглядит как БД с таблицей номер-провайдер и маршрутизируем по маршруту определенному для данного провайдера
И я чую, что доступ к этой базе будет за большие деньги.
_________________
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru
_________________
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk
_________________
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk
Приветствуется критика моего запроса в mysql. Имя базы сменил только на "codes"
Предположим что входящий звонок приходит сюда:
[incoming-gorod]
exten => 2009XXX,1,NoOp( == входящий звонок с номера == ${CALLERID(number)} == )
exten => 2009XXX,n,GotoIF($[${LEN($CALLERID(number)})} != 10 ]?nesotovik) ; номер не равен 10 знакам ? нафиг его
exten => 2009XXX,n,GotoIF($[${CALLERID(number):0:1} != 9 ]?nesotovik) ; начало номера не на 9 ? это не сотовый
exten => 2009XXX,n,macro(seekmobnumber,${CALLERID(number)})
exten => 2009XXX,n(nesotovik),NoOp( == обработка далее == )
[macro-seekmobnumber]
exten => s,1,Set(sql=SELECT `operator`,`region` FROM `codes` WHERE ${ARG1:3:9} BETWEEN `code_from` AND `code_to` AND `code_abcdef`=${ARG1:0:3})
exten => s,n,NoOp( == номер телефона == ${ARG1:0:3} == ${ARG1:3:9} == )
exten => s,n,MYSQL(Connect connid localhost login password asterisk utf8)
exten => s,n,GotoIf($["${connid}" = ""]?error,1) ;если ошибка то выход
exten => s,n,MYSQL(Query resultid ${connid} ${sql})
exten => s,n,MYSQL(Fetch foundRow ${resultid} operator region)
exten => s,n,MYSQL(Clear ${resultid})
exten => s,n,MYSQL(Disconnect ${connid})
exten => s,n,NoOp( == название == ${operator} == ${region} == )
exten => s,n,Set(CDR(userfield)=${operator},${region}) ;результат запроса сюда
exten => error,1,NoOp( == error ! == )
exten => error,n,MYSQL(Disconnect ${connid})
Структура таблицы
| Код: |
| DROP TABLE IF EXISTS `abc_codes_3`; CREATE TABLE IF NOT EXISTS `abc_codes_3` ( `code_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `code_abcdef` smallint(3) NOT NULL, `code_from` int(11) NOT NULL, `code_to` int(11) NOT NULL, `code_volume` int(11) NOT NULL, `operator` varchar(400) NOT NULL, `region` varchar(400) NOT NULL, UNIQUE KEY `code_id` (`code_id`), KEY `code_abcdef` (`code_abcdef`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=116182 ; |
Заливка таблицы
Внимательно смотрим код (россвязь имеет таблицу за знаком | его необходимо заменить, я заменил на минус)
| Цитата: | |
| #!/bin/bash DOWNFILE='http://www.rossvyaz.ru/docs/articles/ABC-3x.html'; TMPDIR='/tmp'; DB_USER='root'; DB_PASSWORD='ПАРОЛЬ'; DATABASE_NAME='asterisk'; DB_TABLE_NAME='abc_codes_3'; wget -c -q -O - $DOWNFILE | grep "^ | |
| //g' -e 's/ | /;/g' -e 's/|/-/g' | iconv -c -f WINDOWS-1251 -t UTF8 > $TMPDIR/$DB_TABLE_NAME #Имя файла = имя таблицы mysqlimport --user=$DB_USER --password=$DB_PASSWORD --columns "code_abcdef,code_from,code_to,code_volume,operator,region" --local --fields-terminated-by=";" --lines-terminated-by="\\n" $DATABASE_NAME $TMPDIR/$DB_TABLE_NAME |
тоже самое делаем для
http://www.rossvyaz.ru/docs/articles/ABC-4x.html
http://www.rossvyaz.ru/docs/articles/ABC-8x.html
| awsswa @ Fri Jul 13, 2012 4:35 am писал(а): |
| ... Вот тут мой вариант для запроса номера сотового телефона из справочника. Приветствуется критика моего запроса в mysql... |
Я сделал через коннектор OBDC + реалтайм, используя ваши наработки (спасибо вам за это).
Строка запроса func_odbc получилась такой:
| Код: |
| [SEEKAREA] dsn=asterisk readsql=SELECT region FROM codes WHERE ${ARG1:3:9} BETWEEN code_from AND code_to AND code_abcdef=${ARG1:0:3} |
Запрос из диалплана тоже в одну строку:
| Код: |
| ... exten => _X.,n,Set(CDR(userfield)=${ODBC_SEEKAREA(${CALLERID(num):2})}) ... |
Я вообще показываю город/регион операторам в телефончики CALLERID(name), но тут уже дело хозяйское =)
Запрос выполняется гораздо быстрее, да и кода меньше.
_________________
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru
Вот такая есть http://lynks.ru/file_download/9/destinations.sql
В принципе ничего не мешает в обработке исходящих/входящих международных звонков прописать отдельную функцию.
| aven @ Sun Feb 24, 2013 11:31 am писал(а): |
| А есть база для международных номеров? |
| Код: |
| [CHECK_WORLD_NUM] dsn=asterisk readsql=SELECT name FROM destinations WHERE prefix IN ('${ARG1:0:1}', '${ARG1:0:2}', '${ARG1:0:3}', '${ARG1:0:4}', '${ARG1:0:5}', '${ARG1:0:6}', '${ARG1:0:7}') ORDER BY LENGTH (prefix) DESC |
| Код: |
| exten => _X.,1,Set(CDR(userfield)=${ODBC_CHECK_WORLD_NUM(${EXTEN})}) |
Теперь варианты для продвинутых - те же запросы но через AGI
Прежде всего меняем структуры таблиц - запрос с сайта делаем с разделением на города и области
да, бывает кривой запрос, когда город выглядит не верно, когда таблица выглядит как
Правильно выглядящая таблица: city Пермь region Пермский край
Не правильно выглядящая таблица: city Пермский край region пусто
Ну уж так набит справочник - тут или город или регион - и я выбрал поле город город - потому как регион Ханты Мансийский Автономный Округ пришедший на телефон вообще никуда не влезет
AGI возвращает два значения по русски и в транслите по английски city=Пермь и cityeng=perm
можете использовать который вам подходит
| Код: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| root@voip:/var/lib/asterisk/agi-bin# cat callerid3.agi #!/usr/bin/php -q | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Tele2 запустил онлайн-сервис для определения принадлежности номера мобильного телефона к сотовому оператору и региону России. http://mnp.tele2.ru/whois.html . Запрос идет типа http://mnp.tele2.ru/gateway.php?9136502088 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| скормил ему 3 номера. (http://mnp.tele2.ru/gateway.php?) два определил, а на одном обламался. а вот когда вбил на http://mnp.tele2.ru/whois.html то отработал. интересно. а в паблике, будет доступна эта информация? просто лучше это у себя хранить, и обновлять по мере необходимости. _________________ Алексей Милько | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| А у меня ответ такой Connection timed out:110 на http://mnp.tele2.ru/gateway.php?921280**** кстати и через http://mnp.tele2.ru/whois.html тоже не работает видать нагнули сервис )) _________________ FreeBSD X.XX - Asterisk X.XX | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Тут в очередной раз обновил с россвязи данные, и посмотрел статистику звонков один номер не определился +797881662** куда идет звонок. А мнп теле2 отработал мтс краснодарский край. Вот такие пироги у россвязи не все так четко - как-то странно.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Госорган, чего ыв хотите-то от них... Всё становится ясно тогда, когда разок исполнителям их позвонить... Им можно только посочувствовать.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Поднял свою mysql-базу для создания апи, обновляется с сайта россвязи, раз в сутки. Перенесенные не учитывает. Если кому надо - дам доступ, апи простое, ответ в json. Прикручивал клиентам для "расбрасывания" звонков по менеджерам в зависимости от региона. Партнеры дают похожий доступ, 2$ месяц, но учитываются перенесенные номера. Так что вопрос на самом деле прост.. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Не совсем там по крыму есть ???
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| где именно?
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для учета перемещения блоков, создал еще mtt_exceptions куда вкидываются блоки исключенные из правил MTT. То есть номера или блоки номеров, которые не актуальны в основной БД MTT. При запуске определялки региона запрос для начала ныряет в исключения, и только если там получает отлуп, ныряем в основную базу MTT. Код Си впихнут в исходник Астера. На выходе получаем кличку оператора и подсовываем любой свободный канал на него с его же симки или верёвки - в общем гоним по каналам этого ОПСОСа.
Отслеживание изменений такое. Старая БД сравнивается с новой БД. Все отличия кидаются в mtt_exceptions + наши ручные правки. Когда mtt_exceptions станет больше половины можно просто поменять названия mtt_exceptions на mtt и наоборот И цикл замкнется. При такой схеме ежедневные обновления MTT не нужны - они сами не каждый день обновляются. _________________ АВТОМАТИЗАЦИЯ ДИСПЕТЧЕСКИХ ТАКСИ УНИКАЛЬНАЯ ТЕХНОЛОГИЯ "ТАКСИ БЕЗ ДИСПЕТЧЕРОВ" - без Java и/или Интренет (только телефоны) http://tet-a-tet.mobi | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Может я проглядел, в каких-то из скриптов это поправили. В общем, до открытия этой ветки, сам пилил экспорт из csv файла россвязи в Mysql. Потом увидел здесь готовые скрипты, запустил, сверил - "не бьет". Проверил коды ответа сервера - данные по http://www.rossvyaz.ru/docs/num/DEF-9x.html обновлялись последний раз в 2012 году. Свежие данные здесь: http://rossvyaz.ru/docs/articles/DEF-9x.html Себе буду пилить проверку даты изменения файла перед загрузкой данных и уведомлялку об отсутствии обновлений более 3х месяцев. ЗЫ: За скрипты спасибо, еще не все осилил, но явно будет проще, чем пилить все с нуля) UPD: И чет я не понял - либо раньше файлы у них были в 1251, либо непонятно мне зачем вы конвертите кодировки. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Уважаемый. Вы, совсем случайно, не заметили что ГОДЫ-ВЕКА меняются? У них (россвязь) все меняется исключительно по плану: с первого..... и т.д. А скоро .... у них от виндоУз останется что-то национальное..... _________________ P4 3.0 + 1Gb CentOS 5.8 Aster 1.8.16 Не люблю gui-сборки: натуральный продукт вкуснее. И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Убрал перекодировку - разбил скрипт на части DOWNFILE='http://rossvyaz.ru/docs/articles/DEF-9x.html'; TMPDIR='/tmp'; DB_USER='логин'; DB_PASSWORD='пароль'; DATABASE_NAME='имя-базы'; DB_TABLE_NAME='abc_codes_9'; wget -c -q -O - $DOWNFILE > $TMPDIR/DEF-9x.html cat $TMPDIR/DEF-9x.html | grep "^ //g' -e 's/ | /;/g' -e 's/|/;/g' > $TMPDIR/abc_codes_91 | cat $TMPDIR/abc_codes_91 | sed 's/;/;;/5' >> $TMPDIR/abc_codes_92 cat $TMPDIR/abc_codes_92 | sed 's/;//8' | sed 's/;//7' >> $TMPDIR/abc_codes_93 cat $TMPDIR/abc_codes_93 | sed 's/\r//g' >> $TMPDIR/$DB_TABLE_NAME #Имя файла = имя таблицы mysqlimport --user=$DB_USER --password=$DB_PASSWORD --columns "code_abcdef,code_from,code_to,code_volume,operator,city,region" --local --fields-terminated-by=";" --lines-terminated-by="\\n" $DATABASE_NAME $TMPDIR/$DB_TABLE_NAME _________________ платный суппорт по мере возможностей | Заметил, потому и обратил внимание на даты. А написал просто чтобы другие (как я), кто зайдут сюда из гугла, сразу видели в чем может вылезти ошибко) кто может мнп делится, в обмен на что нибудь? | _________________ облачные сервера asterisk/freepbx/a2billing/espocrm с полной техподдержкой, от 1490-мес. skype: whoim2, whoim@asterisk.ru Допустим есть номер МТС с кодом 910. Номера с такими кодами есть и в Московской и в Тульской и наверно в других областях. | Есть ли возможность знать что номер с кодом 910 на который я звоню принадлежит именно Московской области?. Т.е. что бы не получилось так что я купил трафик с дешёвыми звонками на Москву, который в итоге я спущу на номера других областей по гораздо более высокой цене. хороший вопрос | в мтт смотрели? http://mtt.ru/info/def/index.wbp?def=&am ... 1%EA%E2%E0 Added after 16 minutes: прилагаю конвертер вывода mtt в экстеншены * писалось "на скорую руку", так что претензии по качеству кода не принимаются edo1 спасибо за парсилку!
| Низкий поклон от меня, спасибо!
| По хорошему, лучше бы распарсить это http://mtt.ru/info/def/index.wbp?def=&am ... ;operator= в mysql-ную базу данных, и обращаться к ней через AGI
| с ODBC то оно удобней будет
| уже давно все распасили и написали диалплан для работы с mysql. | Ни ODBC ни AGI нетребуется, есть нативный клиент MYSQL() _________________ Gentoo Linux || Asterisk 13.1-cert2 Решения телефонии на базе Asterisk || http://it-need.ru оффтоп: а если Postgres ? | ССЗБ | _________________ Gentoo Linux || Asterisk 13.1-cert2 Решения телефонии на базе Asterisk || http://it-need.ru
Коды кажется были здесь http://mtt.ru/index.wbp _________________ astlock:) всё равно все пользуются справочиником мтт - на сайте ростелекома встречал неактуальную информацию, у ттк пользоваться не так удобно. | если заглянуть на википедию, то находится ещё один неплохой справочник: http://www.rossvyaz.ru/activity/num_resurs/registerNum/ а в чём проблема? берёте скрипт, выложенный ранее в этой теме, страите нужный url - и диалплан для оператора готов. | разве что не забыть, что у одного оператора может быть несколько юридических лиц. Посмотрите тут | и тут def-коды от 2009 года неинтересны - постоянно операторам выделяются новые диапазоны номеров.
| не самые актуальные данные, но готовые к употреблению | http://lynks.ru/blog/trixbox-podstanovka-napravleniya-v-cdr
Мне бы тоже парсилку.... Актуальные Данные
| Парсилка и заливалка в MySQL базу в одном флаконе. Работает на Bash под Linux. Подставляйте свои параметры. При желании все можно повесить в крон. |
Структура таблицы:
Records: 5064 Deleted: 0 Skipped: 0 Warnings: 25320 | не заливает( Сделал маски для роутов Москвы/области. Вдруг кому то пригодится. Актуальны на 22.05.12. | Билайн:
МТС:
Мегафон:
интересно когда отвяжут номера от операторов, что будем делать, каким образом различать привязку номера к области и оператору? | _________________ Jabber конференция сервер: conference.jabber.ru комната: asterisk Интересно, как тарифицировать-то будут? Это ж какой биллинг должен быть...
| | |||||||||||||||||||||||||||||||||||||||||||