@froxmox

Маршрутизация в Asterisk через API теле2, куда копать?

Суть проблемы заключается в неправильной маршрутизации исходящих звонков на сотовые номера посредством префиксов операторов. Многие абоненты начали переходить на других операторов с сохранением номера, что привело к проблеме определения оператора, экономии на связи и расчете бюджета на связь для организаций.
Был найден API от теле2 mnp.tele2.ru/gateway.php?XXXXXXXXX, который точно определяет принадлежность номера к оператору, очень нужна помощь спецов по астеру, может какой-то скрипт запилить по работе с API, может подскажите в какую сторону копать?
  • Вопрос задан
  • 1992 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Чтобы не запрашивать каждый раз стоит держать свою базу номеров, тогда алгоритм примерно такой:
1. Запрашиваем из базы данные по номеру, если они не старше N дней (ODBC или MYSQL)
2. Если данных в базе нет (или они старые), то делаем запрос к сайту (CURL)
3. Если данные с сайта получены, разбираем строку, заносим данные в базу с указанием времени запроса
4. Если данных нет - отрабатываем стандартный план звонка или пытаемся определить по префиксам
Дополнительно можно сделать внешний скрипт, который будет периодически небольшими порциями обновлять данные в таблице.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@vm916
Фигней не занимайтесь. берите в первоисточнике .База обновляется ежемесячно в первых числах.

www.rossvyaz.ru/activity/num_resurs/registerNum
Ответ написан
@awsswa59
Вы пользуйтесь поиском. Всё уже сделано давно.
asteriskforum.ru/viewtopic.php?t=6716&start=25

curl mnp.tele2.ru/gateway.php?9814603300 | sed 's/ /-/g' | sed 's/:/ /g' | awk '{print $6}' | sed -r 's/}.+//'
Калининградская-область
Ответ написан
Комментировать
@maddimons
Инженер связи
Первоисточник?
Вот тут есть ручной запрос, номер - оператор.
www.zniis.ru/bdpn/check
Там же есть информация, как получить доступ к базе. Получить его не составляет особого труда.
А дальше уже делаете "еженочную" выгрузку, обрабатываете для вашей системы телефонии как вам удобно/нужно.
Ответ написан
Комментировать
aalexx
@aalexx
Инженер связи
По какой-то причине последнее время часто подглючивает. Пришлось использовать альтернативный вариант с мегафоном.

mnp.sh:

#!/bin/bash
curl -s -X POST "moscow.shop.megafon.ru/get_ajax_page.php?action=ge..." |sed -e :a -e 's/<[^>]*>//g;/;//ba' |iconv -c -f cp1251 -t utf8 |sed 's/\"/\n/g' |awk '{if($0 ~ /tele2/) print "Tele2"; if($0 ~ /МТС/) print "MTS"; if($0 ~ /Билайн/) print "Beeline"; if($0 ~ /МегаФон/) print "Megafon"; }'

На всякий случай напишу как использовать (увы не все знают):
./mnp.sh 79111111111

А в диалплане примерно так (соль и перец по вкусу):
...
same => n(L_check_mnp),NoOP(${ARG1} "Определение оператора по базе MNP - скрипт whois.sh")
same => n,Set(operator_${ARG1}=${SHELL(/my_scripts/mnp.sh 7${ARG1:1:10})})
...

same => n,NoOP(Operator is ${operator_${EXTEN}})
same => n(L_choice),GotoIf($[${operator_${EXTEN}} = Mts]?dial_to_mts,${EXTEN},1)
same => n,GotoIf($[${operator_${EXTEN}} = Other]?dial_to_other_channels,${EXTEN},1)
same => n,GotoIf($[Other${operator_${EXTEN}} = Other]?dial_to_other_channels,${EXTEN},1)
same => n,Set(GLOBAL(D_N_for_h1)=${EXTEN})
same => n,Set(GLOBAL(F_N_for_h1)=${CALLERID(num)})
same => n,GotoIf($[${operator_${EXTEN}} = Megafon]?dial_to_megafon,${EXTEN},1)
same => n,HangUp()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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