Регион и оператор по номеру телефона

— Ваш номер не отвечает!
— Что, совсем?
— Нет, первые две цифры ответили, а остальные молчат!

© народный фольклор

Определить оператора, регион, часовой пояс
по номеру телефона

Информация о номерах и операторах берётся с официальных ресурсов Россвязи и её актуальность проверяется раз в сутки в 4:00 по Москве ежедневно! В базе почти 2000 операторов фиксированной, сотовой, спутниковой связи, а также VoIP-операторов.

Определить по номеру телефона

Номер телефона:
Последняя проверка: 03.11.2024 06:00:43
Актуальность данных: 03.11.2024 05:10:03
Лимит через форму на сайте: 100 запросов в сутки.

НЕ ДЛЯ КОММЕРЧЕСКОГО ИСПОЛЬЗОВАНИЯ

Данный сервис не предназначен для коммерческого использования. Он является бесплатным, но имеет некоторые ограничения, предоставляется AS IS и является тестовым со всеми вытекающими последствиями.
Для коммерческого использования сервис предоставляется на других ресурсах. По вопросам платного использования обращаться по контактам внизу страницы. Бесплатная версия имеет ограничения.


Чат-бот определения региона и оператора по номеру телефона для Telegram

API для определения оператора и региона
по номеру телефона

Чтобы использовать данный API по определению оператора и региона по номеру телефона, надо отправить вот такой запрос:
https://api.regius.name/iface/phone-number.php?phone=9123332211&token=xxxxxxxxxx,
где 9123332211 - 10-ти значный номер телефона, xxxxxxxxxx - токен, который генерируется при регистрации. За запросы без регистрации блокировка от суток.
В ответ сервер отдаст ответ в JSON-формате:
{"phone":"9123332211","company":"ПАО \"Мобильные ТелеСистемы\"","brand":"МТС","mnc":"01","region":"Кировская обл.","kladr":"43","gibdd":"43","utc":"+3","qty":48,"limit":2000,"answer":"ok"}, где
phone - нормализованный номер телефона по которому происходит поиск
company - оператор связи
region - регион, где выдан этот номер
brand - бренд оператора связи (если есть)
mnc - код мобильной сети (только для сотовых операторов)
kladr - код КЛАДР
gibdd - код региона ГБДД
utc - часовой пояс (смещение относительно UTC)
qty - количество запросов за сегодня
limit - лимит количества запросов в день
answer - ответ сервера "ok" или текст ошибки
.

Пример определения оператора и региона на PHP

Данный скрипт тестировался на FreeBSD 12.1, PHP 7.2.33, cURL 7.72.0:
// Устанавливаем переменные
$url = "https://api.regius.name/iface/phone-number.php";
$params = array(
    "phone" => "9123332211",
    "token" => "**********************************"
);

// Запрос
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$query = http_build_query($params);
curl_setopt($ch, CURLOPT_URL, $url.'?'.$query);
$output = curl_exec($ch);
//$info = curl_getinfo($ch);
$errno = curl_errno($ch);
curl_close($ch);

// Обработка ответа сервера
if( $output === false || $errno != 0 ){
    // Оработать ошибку
} else {
    $data = json_decode($output,true);
    if ($data['answer']!='ok'){
        // Обработать ошибку
        echo $data['answer']."\r\n";
    }else{
        print_r($data);
    }
}

Определение оператора и региона по номеру телефона в Asterisk

Для работы астериска со скриптами существуют библиотеки pyagi, phpagi, Perl Asterisk::AGI. Можно использовать их.
Но для простой записи в базу данных это всё лишнее. Приведу небольшой пример, который записывает код региона и мобильного оператора (если звонок с сотового) звонящего в БД.
Нам необходимо создать таблицу, где будут храниться уникальный код звонка, код региона и код оператора. Нужен скрипт, который будет записывать данные. И надо настроить вызов скрипта с нужными параметрами в Астериске. Скрипт будем вызывать после завершения звонка.
Данная конфигурация тестировалась на FreeBSD 12.1, Asterisk 16.13.0, Python 3.7.9

Создаём таблицу в базе данных:
CREATE TABLE `asterisk`.`callingregion`
(`uid` VARCHAR(32) NOT NULL , `region` VARCHAR(2) NOT NULL , `mnc` VARCHAR(2) NOT NULL, INDEX(`region`), INDEX(`mnc`), UNIQUE (`uid`))
ENGINE = InnoDB;

скрипт /usr/local/share/asterisk/agi-bin/callregion.py:
#!/usr/local/bin/python3
import urllib.request, json, sys, pymysql
token ='98yasdfysa8y8lnkn$27sdskldsk'
    data = json.loads(url.read().decode())
if data['answer'] == 'ok':
    con = pymysql.connect('localhost', 'user', 'password', 'database')
    cur = con.cursor()
    cur.execute("INSERT INTO callingregion (uid, region, mnc) VALUES ('"+sys.argv[2]+"', '"+data['kladr']+"', '"+data['mnc']+"')")
    con.commit()
    cur.close()

в конце нужных екстеншенов добавляем строку:
exten => h,1,AGI(callregion.py,${CALLERID(num)},${UNIQUEID})

Выбрать поля "Время звонка", "от кого", "кому", "регион" можно этим запросом:
SELECT DATE_FORMAT(`cdr`.`calldate`,'%d.%m.%Y %h:%i:%s') AS dt, `cdr`.`src`, `cdr`.`dst`, `callingregion`.`region` FROM `cdr`
LEFT JOIN  `callingregion` ON `callingregion`.`uid` = `cdr`.`uniqueid`
ORDER BY `dt`  ASC LIMIT 1,50

Отправить сообщение оператору о звонящем

Asterisk не умеет работать с данными в формате JSON, поэтому и здесь придётся использовать сторонний скрипт /usr/local/share/asterisk/agi-bin/getregion.py
#!/usr/local/bin/python3
import urllib.request, json, sys, pymysql
token ='98yysa8y8lnkn$27sdskldsk'
with urllib.request.urlopen("https://api.regius.name/iface/phone-number.php?phone="+sys.argv[1]+"&token="+token) as url:
    data = json.loads(url.read().decode())
if data['answer'] == 'ok':
    print('EXEC SET message="Calling UTC'+str(data['utc'])+' region '+str(data['kladr'])+' '+str(data['region'])+' '+str(data['brand'])+'"')
else:
    print('EXEC SET message='+data['answer'])

В астериске в план дозвона после Answer необходимо добавить
exten => s,n,AGI(getregion.py,${CALLERID(num)})
exten => s,n,JabberSend(asterisk,operator@domen.name,${message})

Использовать ли сторонние библиотеки (pyagi, phpagi и т.п.) решать вам. Многие библиотеки давно уже не обновляются и возможно, что настанет момент, когда вы обновите своё ПО или систему, и у вас всё перестанет работать. Так что, на мой взгляд лучше использовать стандартные средства.
Если возникнут какие-то сложности с интеграцией, пишите (в комментариях или на e-mail).

Ограничения

Ограничения в бесплатной версии

С авторизацией (используя токен)* - 100 запросов в день. Не более 5 запросов в секунду.
Через форму на сайте - 100 запросов в день с одного IP-адреса. Не более 1 запроса в 5 секунд.
Telegram бот - без ограничений. Блокируются запросы от других ботов
* - без токена использовать API недопустимо (считается попыткой взлома сервиса, DDoS-атакой и т.п.).

Ограничения в платной версии

Не более 5 запросов в секунду.
Блокировки не производятся. Пользователю предоставляется статистика нарушений, для принятия мер по их устранению.

Блокировки за нарушения в бесплатной версии

За злостные попытки нарушения правил происходит блокировка:
- российские IP-адреса - по IP-адресу
- зарубежные IP-адреса - блокировка всей подсети провайдера
Блокировки происходят автоматически. В первый раз на 24 часа, во второй раз на 48 часов и т.д.
Чтобы избежать блокировку всегда проверяйте значение "answer", если оно не равно "ok", отправляйте себе уведомление со значением переменной "answer". В нём содержатся ошибки, которые приведут к блокировке. Если ошибки не устраняются, происходит автоматическая блокировка.

Стоимость

Возможны тестовый период, индивидуальные договорённости и помощь в интеграции с вашими системами. Контакты внизу страницы.

Запросов в день до 100 до 500 до 1500 до 5000 до 10000 до 30000
Запросов в мес* 3000 15000 45000 150000 300000 900000
Цена, руб/мес бесплатно 1 000 2 000 5 000 7 500 10 000
Цена, коп/запрос* бесплатно 6,7 4,4 3,3 2,5 1,1
* - справочные величины для удобства. Лимиты определяются по количеству запросов в день, чтобы была равномерная нагрузка на ресурсы. Оплата за календарный месяц.

Поделиться в соцсетях


Комментарии (1)

Авторизируйтесь, чтобы добавить комментарий.

2023-02-04 05:50:49
На Вашем сайте/боте реализована возможность пробива региона абонента по номеру телефона. Скажите, пожалуйста, есть ли возможность подтянуть контакты списком в эксель большие объёмы ?