Webhook
اگر به روشی برای مدیریت خودکار رویدادهای کاربران نیاز دارید، وبهوکها یک راهحل منعطف را فراهم میکنند. وبهوک به شما این امکان را میدهد که در مورد رویدادهای مختلف، مانند ایجاد کاربر، بهروزرسانیها یا انقضا، اعلانهایی دریافت کنید که میتواند برای ادغام با سیستمهای خارجی استفاده شود.
پیگیری رویدادها: دریافت اعلانها در مورد رویدادهای کاربر مانند ایجاد کاربر، بهروزرسانی، محدودیتها و غیره.
ادغام با سیستمهای خارجی: خودکار کردن اقداماتی مانند بهروزرسانی یک دیتابیس، ارسال هشدارها یا انجام فرآیندهای دیگر در پاسخ به رویدادها در مرزبان.
نکته
اگر شما یک کاربر ساده هستید، به این بخش نیازی نخواهید نداشت.
مرحله اول: پیکربندی URL وبهوک
- اول
URLجایی که میخواهید اعلانها را دریافت کنید را در فایلenvتعیین کنید.
WEBHOOK_ADDRESS = "http://127.0.0.1:9000/,http://127.0.0.1:9001/"- برای افزودن یک کلید مخفی برای تأیید درخواست،
WEBHOOK_SECRETرا تنظیم کنید.
WEBHOOK_SECRET = "something-very-very-secret"حالا، مرزبان زمانی که یک رویداد خاص برای کاربر اتفاق بیفتد درخواستها را به این
URLارسال خواهد کرد.با استفاده از متغیر زیر هر
30ثانیه صف نوتیفیکیشنها چک میشه بعد برای وبهوک ارسال میشود.
JOB_SEND_NOTIFICATIONS_INTERVAL = 30- با استفاده از متغیر زیر میتوانید
URLدیسکورد برای وبهوک تعیین کنید.
DISCORD_WEBHOOK_URL = "https://discord.com/api/webhooks/xxxxxxx"مرحله دوم: پردازش اعلانهای دریافتی
- سرور شما که وبهوکها را دریافت میکند باید درخواستها با محتوای
JSONرا مدیریت کند. هر درخواست شامل یک هدرx-webhook-secret(در صورت تنظیم) برای امنیت و همچنین جزئیات مربوط به رویداد درpayloadاست. در اینجا یک نمونهpayload 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: زمانی که یک کاربر غیرفعال یا فعال میشود.
مرحله سوم: کد نمونه برای دریافت یک وبهوک
- در اینجا یک مثال با استفاده از
PythonوFlaskبرای راهاندازی یک سرور که اعلانهای وبهوک مرزبان را تأیید میکند آورده شده است.
کد نمونه
from flask import Flask, request, jsonify
import hmac
import hashlib
app = Flask(__name__)
WEBHOOK_SECRET = 'your-secret-key'
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": "Invalid signature"}), 403
payload = request.json
print("Received event:", payload['action'], "for user:", payload['username'])
# Process the event
if payload['action'] == 'user_created':
# Code to handle user creation
pass
elif payload['action'] == 'user_updated':
# Code to handle user update
pass
# Additional event actions
return jsonify({"status": "success"}), 200
if __name__ == '__main__':
app.run(port=5000)نمونهای از درخواست ارسال شده از مرزبان:
نمونه درخواست
Headers:
Host: 0.0.0.0:9000
User-Agent: python-requests/2.28.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
x-webhook-secret: something-very-very-secret
Content-Length: 107
Content-Type: application/json
Body:
{"username": "marzban_test_user", "action": "user_updated", "enqueued_at": 1680506457.636369, "tries": 0}