Мы собираем файлы cookie и применяемрекомендательные технологии

Проверка активности мобильных номеров с использованием МТС Exolve HLR API - 587 - МТС Exolve

Проверка активности мобильных номеров с использованием МТС Exolve HLR API

HLR (Home Location Register) — это центральная база данных в сетях мобильных операторов, которая содержит подробную информацию о каждом зарегистрированном пользователе. HLR-запросы используются для получения данных о статусе и местоположении абонента, а также для проверки активности мобильного номера. Важность HLR-запросов особенно велика в бизнесе, телекоммуникациях и сервисах, работающих с мобильными пользователями.

Основные причины, почему HLR-запросы важны:

  1. Проверка активности номера – позволяет узнать, активен ли номер, чтобы не тратить ресурсы на неактивные контакты.
  2. Актуализация базы данных – поддерживает базу контактов в актуальном состоянии.
  3. Снижение затрат на SMS и звонки – экономит на отправке сообщений и звонков на недействительные номера.
  4. Определение местоположения и роуминга – помогает узнать, находится ли клиент в роуминге, и понять его регион.
  5. Защита от мошенничества – помогает выявить потенциальные подозрительные номера и предотвратить мошеннические действия.

В этой статье мы рассмотрим процесс создания и настройки простого веб-приложения для проверки активности мобильных номеров с использованием Flask и Exolve HLR API. Наше приложение предоставляет пользователю интерфейс для ввода номера телефона и получения информации о статусе абонента, владельце и коде региона через HLR-запрос. Мы также настроим Docker для автоматического запуска приложения, что позволит легко развернуть его на сервере.

Использованные ресурсы:

Перед использованием HLR, нужно переключить соответствующий тумблер в настройках уже созданного приложения:


Первый шаг — организация структуры проекта для нашего Flask-приложения. Мы создаем корневую папку, в которой будем хранить основной файл приложения, файл конфигурации и другие ресурсы.
Код
hlr_test_7007/
├── app.py               # Основной файл приложения Flask
├── config.json          # Файл конфигурации для хранения Bearer токена и порта
├── Dockerfile           # Файл для Docker сборки
├── requirements.txt     # Зависимости проекта
├── templates/           # Папка для HTML-шаблонов
│   └── index.html
└── static/              # Папка для CSS-файлов
    └── styles.css

Чтобы облегчить настройку и обеспечить безопасность конфиденциальных данных, мы создаем файл config.json. Этот файл будет хранить Bearer токен, URL API и порт, на котором будет запущено приложение.
Код
{
    "bearer_token": "ваш_bearer_token",
    "api_url": "https://api.exolve.ru/hlr/v1/GetActivityScore",
    "port": 7007
}

Основной файл приложения app.py написан на Python с использованием Flask. Приложение загружает конфигурацию из config.json, создает маршруты и отправляет запросы к Exolve HLR API для получения данных.
Код
from flask import Flask, request, jsonify, render_template
import requests
import json

app = Flask(__name__)

# Загрузка конфигурации
try:
    with open("config.json") as config_file:
        config = json.load(config_file)
        BEARER_TOKEN = config.get("bearer_token")
        EXOLVE_HLR_URL = config.get("api_url")
        PORT = config.get("port", 7007)
        if not BEARER_TOKEN:
            raise ValueError("Bearer токен не найден в config.json")
except (FileNotFoundError, ValueError) as e:
    print(f"Ошибка при загрузке конфигурации: {e}")
    BEARER_TOKEN = None
    EXOLVE_HLR_URL = None
    PORT = 7007

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/check_number', methods=['POST'])
def check_number():
    if not BEARER_TOKEN:
        return jsonify({"error": "Токен доступа отсутствует"}), 500

    number = request.json.get('number')
    if not number:
        return jsonify({"error": "Номер не указан"}), 400

    headers = {
        "Authorization": f"Bearer {BEARER_TOKEN}",
        "Content-Type": "application/json"
    }

    data = {
        "number": number
    }

    try:
        response = requests.post(EXOLVE_HLR_URL, headers=headers, json=data)
        response.raise_for_status()
        result = response.json()

        status_message = "Номер активен" if result.get("result") else "Номер неактивен"

        return jsonify({
            "number": result.get("number"),
            "owner_id": result.get("owner_id"),
            "region_code": result.get("region_code"),
            "status_message": status_message
        })
    except requests.exceptions.RequestException as e:
        return jsonify({"error": f"Ошибка запроса к API: {str(e)}"}), 500

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=PORT)

Мы создаем HTML-шаблон для страницы, где пользователи смогут ввести номер телефона и просмотреть результаты HLR-запроса templates/index.html
Код
<!DO CTYPE html>
<ht ml lang="ru">
<head>
    <met a charset="UTF-8">
    <met a name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HLR проверка активности номера</title>
    <li nk rel="stylesheet" href="static/styles.css">
</head>
<body>
    <div class="container">
        <h1>HLR проверка активности номера</h1>
        <p class="description">
            Вы можете проверить любой мобильный номер, узнать оператора, статус абонента и другую информацию HLR-запросом только в целях тестирования.
        </p>
        
        <fo rm id="checkForm">
            <label for="number">Номер телефона:</label>
            <div class="phone-input">
                <span class="country-code">+7</span>
                <input type="text" id="number" name="number" maxlength="10" required placeholder="1234567890">
            </div>
            <button type="submit">Проверить</button>
        </form>

        <div id="result" style="display: none;" class="card">
            <div class="card-title" id="result-number"></div>
            <div class="card-description">
                Владелец: <span id="result-owner"></span><br>
                Код региона: <span id="result-region"></span>
            </div>
            <div class="status" id="result-status"></div>
        </div>
    </div>
</body>
</html>

CSS-стили styles.css
Код
/* Общие стили */
body {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    margin: 0;
    font-family: Arial, sans-serif;
    background-color: #f9f9f9;
    flex-direction: column;
}

.container {
    width: 100%;
    max-width: 600px;
    padding: 20px;
    background-color: #ffffff;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    text-align: center;
    box-sizing: border-box;
}

/* Заголовок */
h1 {
    font-size: 1.8em;
    margin-bottom: 10px;
    color: #333333;
}

/* Описание */
.description {
    font-size: 0.95em;
    color: #666666;
    margin-bottom: 20px;
    line-height: 1.5;
}

/* Форма */
form {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 15px;
}

/* Поле для ввода номера */
.phone-input {
    display: flex;
    align-items: center;
    margin-bottom: 15px;
}

.country-code {
    font-size: 1em;
    padding: 8px;
    background-color: #f1f1f1;
    border: 1px solid #cccccc;
    border-radius: 5px 0 0 5px;
    color: #333333;
}

input[type="text"] {
    width: 100%;
    max-width: 260px;
    padding: 10px;
    font-size: 1em;
    border: 1px solid #cccccc;
    border-radius: 0 5px 5px 0;
    box-sizing: border-box;
    outline: none;
}

/* Кнопка */
button {
    padding: 10px 20px;
    font-size: 1em;
    color: #ffffff;
    background-color: #007bff;
    border: none;
    border-radius: 5px;
    cursor: pointer;
    transition: background-color 0.3s ease;
}

button:hover {
    background-color: #0056b3;
}

/* Карточка с результатом */
.card {
    width: 100%;
    max-width: 400px;
    margin: 20px auto 0;
    padding: 16px;
    background-color: #ffffff;
    border: 1px solid #dddddd;
    border-radius: 8px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    box-sizing: border-box;
    text-align: left;
}

.card-title {
    font-size: 1.1em;
    font-weight: bold;
    color: #333333;
    margin-bottom: 8px;
}

.card-description {
    font-size: 0.9em;
    color: #555555;
    margin-bottom: 12px;
}

/* Статус проверки */
.status {
    font-size: 0.9em;
    font-weight: bold;
    margin-top: 10px;
}

.status.active {
    color: green;
}

.status.inactive {
    color: red;
}

/* Ссылка на страницу приложений */
.app-page-button {
    display: inline-block;
    margin-top: 15px;
    padding: 10px 20px;
    font-size: 1em;
    color: #ffffff;
    background-color: #007bff;
    border-radius: 5px;
    text-decoration: none;
    transition: background-color 0.3s ease;
}

.app-page-button:hover {
    background-color: #0056b3;
}

/* Адаптивные стили для мобильных устройств */
@media (max-width: 768px) {
    .container {
        padding: 15px;
    }
    input[type="text"] {
        max-width: 100%;
    }
    .card {
        max-width: 100%;
    }
    h1 {
        font-size: 1.5em;
    }
}

Мы используем Docker для удобного развертывания приложения и настройки автоматического перезапуска.

Dockerfile:

Код
# Базовый образ Python
FROM python:3.10-slim

# Установка рабочей директории
WORKDIR /app

# Копируем файлы проекта в контейнер
COPY . /app

# Установка зависимостей
RUN pip install --no-cache-dir -r requirements.txt

# Открываем порт 7007
EXPOSE 7007

# Запуск приложения
CMD ["python", "app.py"]

Добавьте актуальные версии Flask и requests в requirements.txt:

Код
Flask==3.0.3
requests==2.31.0

Сборка Docker-образа:
Код
docker build -t hlr_check_app .

Запуск Docker-контейнера с политикой автоматического перезапуска:
Код
docker run -d -p 7007:7007 --name hlr_check_container --restart always hlr_check_app

После запуска контейнера приложение будет доступно на порту 7007. Откройте браузер и перейдите по адресу:
Код
http://<ваш_IP>:7007


Мы успешно создали и развернули Flask-приложение для проверки активности мобильных номеров с использованием Exolve HLR API. Это приложение имеет интуитивный веб-интерфейс, поддерживает Docker для легкого разворачивания и настройки перезапуска контейнера.
3
149
Открытая тема
0 баллов

Для того, чтобы оставлять комментарии, необходимо пройти авторизацию

Авторизоваться
Поздравляю с публикацией статьи! Отлично получилось  :like:  
moderator
moderator
0 баллов
05 ноября 2024 в 12:12
И конечно, понимаю, редактор пока далек от совершенства, но мы активно работаем в сторону улучшения.
moderator
moderator
0 баллов
05 ноября 2024 в 12:13
да клевая  штука, жаль что пока только с мтс можно такое провернуть
kali
kali
0 баллов
07 ноября 2024 в 23:49