AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

как различать принадлежность номера к области?

Asterisk IP PBX 50 сообщений 28.07.2010 14:24 - 30.05.2012 16:29
#1

Добрый день.

Запускаю 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 (может как-то можно ввиде одной строки)?

спасибо.
#3

Подскажите пожалуйста.

Кто-нибудь может выложить готовый диалплан для звонков по России на МТС, Мегафон и Билайн. Просто по одной области еще можно его руками написать. А вот для всей России, по каждому из операторов, как-то тяжеловато. Нужно автоматически как-то информацию по DEF- кодам парсить.

Спасибо.
#4

1) Исходящий звонок на номер A
2) Проверяется по своей базе, наш ли номер
3) Если номер наш, то маршрутизируем его по своим маршрутам

Как щас:
4) Если номер не наш - маршрутизируем по статически маршрутам

Будет
4) Если номер не наш - делается запрос в координационный центр, который упрощенно выглядит как БД с таблицей номер-провайдер и маршрутизируем по маршруту определенному для данного провайдера

И я чую, что доступ к этой базе будет за большие деньги.

_________________
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru
#5

а может РосСвязь также выложит в html формате
_________________
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk
#6

У них сейчас-то оно еле открывается.
#7

нормально открывается, просто там html-ки по 4-е метра, вот и долго сам браузер их открывает.
_________________
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk
#8

Скрипт для заливки в базу mysql был опубликован на страницу раньше. Вот тут мой вариант для запроса номера сотового телефона из справочника.
Приветствуется критика моего запроса в 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})
#9

Поиск операторов начинающихся на 3 (по аналогии на страницу раньше)

Структура таблицы
Код:

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 ;


Заливка таблицы
Внимательно смотрим код (россвязь имеет таблицу за знаком | его необходимо заменить, я заменил на минус)
" | sed -e 's///g' -e 's///g' -e 's///g' -e 's/[\t]//g' -e 's/^
Цитата:

#!/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
#10

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), но тут уже дело хозяйское =)
Запрос выполняется гораздо быстрее, да и кода меньше.
#11

А есть база для международных номеров?
_________________
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru
#12

В таком виде, пожалуй, не будет.
Вот такая есть http://lynks.ru/file_download/9/destinations.sql
В принципе ничего не мешает в обработке исходящих/входящих международных звонков прописать отдельную функцию.
#13

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})})
#14

Ну что продолжаем ?
Теперь варианты для продвинутых - те же запросы но через AGI

Прежде всего меняем структуры таблиц - запрос с сайта делаем с разделением на города и области
да, бывает кривой запрос, когда город выглядит не верно, когда таблица выглядит как
Правильно выглядящая таблица: city Пермь region Пермский край
Не правильно выглядящая таблица: city Пермский край region пусто
Ну уж так набит справочник - тут или город или регион - и я выбрал поле город город - потому как регион Ханты Мансийский Автономный Округ пришедший на телефон вообще никуда не влезет


AGI возвращает два значения по русски и в транслите по английски city=Пермь и cityeng=perm
можете использовать который вам подходит


" | sed -e 's///g' -e 's///g' -e 's///g' -e 's/[\t]//g' -e 's/^
Код:

root@voip:/var/lib/asterisk/agi-bin# cat callerid3.agi
#!/usr/bin/php -q
#15

Tele2 запустил онлайн-сервис для определения принадлежности номера мобильного телефона к сотовому оператору и региону России.
http://mnp.tele2.ru/whois.html . Запрос идет типа http://mnp.tele2.ru/gateway.php?9136502088
#16

скормил ему 3 номера. (http://mnp.tele2.ru/gateway.php?)
два определил, а на одном обламался.
а вот когда вбил на http://mnp.tele2.ru/whois.html
то отработал.

интересно.
а в паблике, будет доступна эта информация?
просто лучше это у себя хранить, и обновлять по мере необходимости.

_________________
Алексей Милько
#17

А у меня ответ такой Connection timed out:110
на
http://mnp.tele2.ru/gateway.php?921280****

кстати и через http://mnp.tele2.ru/whois.html тоже не работает видать нагнули сервис ))

_________________
FreeBSD X.XX - Asterisk X.XX
#18

Тут в очередной раз обновил с россвязи данные, и посмотрел статистику звонков один номер не определился +797881662** куда идет звонок. А мнп теле2 отработал мтс краснодарский край. Вот такие пироги у россвязи не все так четко - как-то странно.
#19

Госорган, чего ыв хотите-то от них... Всё становится ясно тогда, когда разок исполнителям их позвонить... Им можно только посочувствовать.
#20

Поднял свою mysql-базу для создания апи, обновляется с сайта россвязи, раз в сутки. Перенесенные не учитывает.
Если кому надо - дам доступ, апи простое, ответ в json.
Прикручивал клиентам для "расбрасывания" звонков по менеджерам в зависимости от региона.

Партнеры дают похожий доступ, 2$ месяц, но учитываются перенесенные номера.
Так что вопрос на самом деле прост..
#21

Не совсем там по крыму есть ???
#22

где именно?
#23

Для учета перемещения блоков, создал еще mtt_exceptions куда вкидываются блоки исключенные из правил MTT. То есть номера или блоки номеров, которые не актуальны в основной БД MTT.

При запуске определялки региона запрос для начала ныряет в исключения, и только если там получает отлуп, ныряем в основную базу MTT.

Код Си впихнут в исходник Астера. На выходе получаем кличку оператора и подсовываем любой свободный канал на него с его же симки или верёвки - в общем гоним по каналам этого ОПСОСа.

Код:
sprintf(query, "SELECT operators.`name` AS operator FROM `mtt_exceptions` AS ex INNER JOIN `mtt_operators` AS operators ON operators.id = ex.operator WHERE `def` =%s AND %s = `from`",digphone,opcode,opcode);
debug("QUERY = %s",query);
ret = msql_get(query);
debug("Выводим ret=%i в reusable_opsos_separator ",ret);
if (ret < 0)
{
debug("Ошибка запроса SELECT operators.`name` AS operator FROM `mtt_exceptions в reusable_opsos_separator QUERY = %s",query);
return -1;
}

if (ret == 0)
{
sprintf(query, "SELECT operators.`name` AS operator FROM `mtt_codes` AS ex INNER JOIN `mtt_operators` AS operators ON operators.`id` = ex.operator WHERE `def` =%s AND %s = `from`",digphone,opcode,opcode);
debug("QUERY = %s",query);
ret = msql_get(query);

if (ret < 0)
{
debug("Ошибка запроса SELECT operators.`name` AS operator FROM `mtt_codes в reusable_opsos_separator QUERY = %s",query);
return -1;
}


Отслеживание изменений такое. Старая БД сравнивается с новой БД. Все отличия кидаются в mtt_exceptions + наши ручные правки. Когда mtt_exceptions станет больше половины можно просто поменять названия mtt_exceptions на mtt и наоборот И цикл замкнется. При такой схеме ежедневные обновления MTT не нужны - они сами не каждый день обновляются.

_________________
АВТОМАТИЗАЦИЯ ДИСПЕТЧЕСКИХ ТАКСИ

УНИКАЛЬНАЯ ТЕХНОЛОГИЯ "ТАКСИ БЕЗ ДИСПЕТЧЕРОВ" - без Java и/или Интренет (только телефоны) http://tet-a-tet.mobi
#24

Может я проглядел, в каких-то из скриптов это поправили.
В общем, до открытия этой ветки, сам пилил экспорт из csv файла россвязи в Mysql. Потом увидел здесь готовые скрипты, запустил, сверил - "не бьет".
Проверил коды ответа сервера - данные по http://www.rossvyaz.ru/docs/num/DEF-9x.html обновлялись последний раз в 2012 году.

Свежие данные здесь: http://rossvyaz.ru/docs/articles/DEF-9x.html

Себе буду пилить проверку даты изменения файла перед загрузкой данных и уведомлялку об отсутствии обновлений более 3х месяцев.

ЗЫ: За скрипты спасибо, еще не все осилил, но явно будет проще, чем пилить все с нуля)

UPD: И чет я не понял - либо раньше файлы у них были в 1251, либо непонятно мне зачем вы конвертите кодировки.
#25

Уважаемый. Вы, совсем случайно, не заметили что ГОДЫ-ВЕКА меняются? У них (россвязь) все меняется исключительно по плану: с первого..... и т.д.
А скоро .... у них от виндоУз останется что-то национальное..... Smile

_________________
P4 3.0 + 1Gb CentOS 5.8 Aster 1.8.16
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.
#26

Убрал перекодировку - разбил скрипт на части

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
_________________
платный суппорт по мере возможностей
#27

Wapo @ Пн Янв 04, 2016 03:18 писал(а):
Уважаемый. Вы, совсем случайно, не заметили что ГОДЫ-ВЕКА меняются? У них (россвязь) все меняется исключительно по плану: с первого..... и т.д.
А скоро .... у них от виндоУз останется что-то национальное..... Smile


Заметил, потому и обратил внимание на даты. А написал просто чтобы другие (как я), кто зайдут сюда из гугла, сразу видели в чем может вылезти ошибко)
#28

кто может мнп делится, в обмен на что нибудь?
_________________
облачные сервера asterisk/freepbx/a2billing/espocrm с полной техподдержкой, от 1490-мес. skype: whoim2, whoim@asterisk.ru
#29 28.07.2010 14:24

как различать принадлежность номера к области?


Допустим есть номер МТС с кодом 910. Номера с такими кодами есть и в Московской и в Тульской и наверно в других областях.
Есть ли возможность знать что номер с кодом 910 на который я звоню принадлежит именно Московской области?.
Т.е. что бы не получилось так что я купил трафик с дешёвыми звонками на Москву, который в итоге я спущу на номера других областей по гораздо более высокой цене.
#30 28.07.2010 15:33

хороший вопрос Wink

в мтт смотрели?
http://mtt.ru/info/def/index.wbp?def=&am ... 1%EA%E2%E0

Added after 16 minutes:

прилагаю конвертер вывода mtt в экстеншены *

писалось "на скорую руку", так что претензии по качеству кода не принимаются Wink
#31 28.07.2010 15:58

edo1 спасибо за парсилку!
#32 29.07.2010 06:38

Низкий поклон от меня, спасибо!
#33 29.07.2010 06:44

По хорошему, лучше бы распарсить это http://mtt.ru/info/def/index.wbp?def=&am ... ;operator= в mysql-ную базу данных, и обращаться к ней через AGI
#34 29.07.2010 08:00

с ODBC то оно удобней будет
#35 29.07.2010 14:41

уже давно все распасили и написали диалплан для работы с mysql.
Ни ODBC ни AGI нетребуется, есть нативный клиент MYSQL()

_________________
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru
#36 29.07.2010 17:08

оффтоп: а если Postgres ? Smile
#37 30.07.2010 06:20

ССЗБ
_________________
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru
#38 06.08.2010 14:12

Код:
exten => _891XXXXXXXX,1,Dial(SIP/201,1,D(${EXTEN}))


Коды кажется были здесь http://mtt.ru/index.wbp

_________________
astlock:)
#39 07.08.2010 09:32

всё равно все пользуются справочиником мтт - на сайте ростелекома встречал неактуальную информацию, у ттк пользоваться не так удобно.

если заглянуть на википедию, то находится ещё один неплохой справочник:
http://www.rossvyaz.ru/activity/num_resurs/registerNum/
#40 09.08.2010 07:42

а в чём проблема? берёте скрипт, выложенный ранее в этой теме, страите нужный url - и диалплан для оператора готов.
разве что не забыть, что у одного оператора может быть несколько юридических лиц.
#41 11.08.2010 17:48

Посмотрите тут
и тут
#42 11.08.2010 17:58

def-коды от 2009 года неинтересны - постоянно операторам выделяются новые диапазоны номеров.
#43 08.09.2010 20:50

не самые актуальные данные, но готовые к употреблению
http://lynks.ru/blog/trixbox-podstanovka-napravleniya-v-cdr
#44 16.01.2011 11:28

edo1 писал(а):

прилагаю конвертер вывода mtt в экстеншены *



Мне бы тоже парсилку....
#45 20.01.2011 14:14

Актуальные Данные
#46 12.02.2011 22:55

Парсилка и заливалка в MySQL базу в одном флаконе. Работает на Bash под Linux. Подставляйте свои параметры. При желании все можно повесить в крон.

" | sed -e 's///g' -e 's///g' -e 's///g' -e 's/[\t]//g' -e 's/^
Код:

#!/bin/bash

DOWNFILE='http://www.rossvyaz.ru/docs/num/DEF-9x.html';
TMPDIR='/tmp';
DB_USER='root';
DB_PASSWORD='ПАРОЛЬ';
DATABASE_NAME='telnumbers';
DB_TABLE_NAME='codes';

wget -c -q -O - $DOWNFILE | grep "^
//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


Структура таблицы:

Код:

DROP TABLE IF EXISTS `codes`;
CREATE TABLE IF NOT EXISTS `codes` (
`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 ;
#47 14.12.2011 09:23

Records: 5064 Deleted: 0 Skipped: 0 Warnings: 25320
не заливает(
#48 22.05.2012 09:06

Сделал маски для роутов Москвы/области. Вдруг кому то пригодится. Актуальны на 22.05.12.
Билайн:
Код:
79629XXXXXX
796236XXXXX
79637[26]XXXXX
79639[2679]XXXXX
79637[15]XXXXXX
79636XXXXXX
79637[78]XXXXX
7968[45]XXXXXX
79645[0-35-9]XXXXX
79646[2-4]XXXXX
79647[0-26-9]XXXXX
7967[0-2]XXXXXX
79096[2-9]XXXXX
79099XXXXXX
79091[56]XXXXX
7903[1257]XXXXXX
79036[1268]XXXXX
79039[67]XXXXX
7903363XXXX
7905[57]XXXXXX
7906[07]XXXXXX

МТС:
Код:
7985XXXXXXX
79197[267]XXXXX
791978[46]XXXX
79199[69]XXXXX
7919970XXXX
791941[01]XXXX
7919139XXXX
791910XXXXX
791001[593]XXXX
791000[0-589]XXXX
79100[45][890]XXXX
79100120XXX
791008[1-9]XXXX
791006[0-2]XXXX
79104XXXXXX
7916XXXXXXX
79175XXXXXX
7915[0-4]XXXXXX

Мегафон:
Код:
7925XXXXXXX
7929[569]XXXXXX
7926XXXXXXX
7936600XXXX
#49 30.05.2012 16:01

интересно когда отвяжут номера от операторов, что будем делать, каким образом различать привязку номера к области и оператору?
_________________
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk
#50 30.05.2012 16:29

Интересно, как тарифицировать-то будут? Это ж какой биллинг должен быть...