Neonode.cc - Mind space blog
open main menu
Part of series: MarzbanGuide

Webhooks в Marzban

/ 2 min read

Webhooks в Marzban

Если вы используете Marzban и ищете способ автоматизировать обработку событий пользователей, вебхуки помогут вам в этом. Они позволяют получать уведомления о различных событиях, таких как создание, обновление или истечение срока действия пользователя, что может использоваться для интеграции с внешними системами.

Почему использовать вебхуки?

Основные преимущества:

  • Отслеживание событий: Получайте уведомления о действиях пользователей, таких как создание, обновление, ограничения и другие события.
  • Интеграция с внешними системами: Автоматизируйте действия, например, обновление базы данных, отправку уведомлений или выполнение других процессов в ответ на события в Marzban.

Настройка вебхуков

Чтобы начать использовать вебхуки, выполните следующие шаги по настройке и реализации.

Шаг 1: Настройка URL вебхука

Определите URL-адрес, на который вы хотите получать уведомления, в файле .env или через переменные окружения:

WEBHOOK_ADDRESS=https://your-server.com/webhook

Чтобы добавить секретный ключ для проверки запросов, установите переменную WEBHOOK_SECRET:

WEBHOOK_SECRET=ваш-секретный-ключ

Теперь Marzban будет отправлять POST-запросы на этот URL каждый раз, когда произойдет определенное событие.

Шаг 2: Обработка входящих уведомлений

Сервер, который принимает вебхуки, должен обрабатывать POST-запросы с JSON-содержимым. Каждый запрос включает заголовок x-webhook-secret (если настроен) для безопасности, а также детали события в формате JSON. Вот пример JSON-пакета:

{
  "username": "example_user",
  "action": "user_created",
  "enqueued_at": 1680506457.636369,
  "tries": 0
}
  • username: Имя пользователя, связанное с событием.
  • action: Тип события (например, user_created, user_updated).
  • enqueued_at: Временная метка события.
  • tries: Количество повторных попыток, если уведомление не было отправлено.

Типы событий:

Поле action может принимать следующие значения:

  • user_created – Когда пользователь создан.
  • user_updated – Когда обновлены данные пользователя.
  • user_deleted – Когда пользователь удален.
  • user_limited – Когда к пользователю применяются ограничения.
  • user_expired – Когда у пользователя истекает срок действия.
  • user_disabled / user_enabled – Когда пользователь отключен или включен.

Шаг 3: Пример кода для получения вебхука

Вот пример с использованием Python и Flask для настройки сервера, который проверяет и обрабатывает уведомления от Marzban:

from flask import Flask, request, jsonify
import hmac
import hashlib

app = Flask(__name__)
WEBHOOK_SECRET = 'ваш-секретный-ключ'

def verify_signature(data, signature):
    expected_signature = hmac.new(WEBHOOK_SECRET.encode(), data, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected_signature, signature)

@app.route('/webhook', methods=['POST'])
def webhook():
    signature = request.headers.get('x-webhook-secret')
    if not signature or not verify_signature(request.data, signature):
        return jsonify({"error": "Неверная подпись"}), 403

    payload = request.json
    print("Получено событие:", payload['action'], "для пользователя:", payload['username'])
    
    # Обработка события
    if payload['action'] == 'user_created':
        # Код для обработки создания пользователя
        pass
    elif payload['action'] == 'user_updated':
        # Код для обработки обновления пользователя
        pass
    # Дополнительные действия по событиям

    return jsonify({"status": "успех"}), 200

if __name__ == '__main__':
    app.run(port=5000)

В этом примере Flask проверяет заголовок x-webhook-secret с помощью HMAC и обрабатывает события на основе поля action.


Использование вебхуков в Marzban открывает широкие возможности для автоматизации и интеграции. С этим руководством вы сможете оптимизировать рабочие процессы с Marzban. Для получения дополнительных сведений обратитесь к официальной документации Marzban.