Weblines Cloudمستندات

هشدار (Webhook)

هشدارهایِ سازمان — کانالِ کنسول، webhook، Bale، ایمیل و پیامک؛ آستانه‌های CPU، RAM، دیسک، SSL و کیف پول، و فرمتِ payload.

آخرین به‌روزرسانی:

پلتفرم در موارد مهمِ سازمانِ شما هشدار می‌دهد: سرویسی در ERROR، کرَش یا کمبودِ RAM، آپتایمِ آدرسِ عمومی، پر شدنِ منابع، نزدیکی انقضای SSL، و اتمام موجودی یا بدهی. هشدارها در چند کانال می‌آیند.

کانال‌ها#

کانالکجا می‌آید
کنسولصندوقِ هشدار داخلِ پنل، همیشه فعال
Webhookیک POST با JSON به آدرسِ شما
Baleپیام در بله
ایمیلایمیل به یک آدرس، از no-reply@weblines.ir
پیامکفقط برای رویدادهای مالی مثلِ اتمام موجودی و بدهی
ایمیلِ owner و adminهمان رویدادهای مالیِ پیامک، به ایمیلِ حسابِ همه‌ی owner و adminها، همیشه فعال

owner و admin کانال‌ها را در SETTINGS → MONITOR تنظیم می‌کنند. هر کانال را می‌توانید موقتاً خاموش کنید یا پاک کنید.

ایمیل#

آدرس را وارد کنید و SEND A CODE را بزنید. یک کدِ تأیید به همان آدرس ایمیل می‌شود. کد را در ردیفِ تازه وارد کنید تا هشدارها شروع شوند. تا وقتی کد وارد نشده، هیچ هشداری به آن آدرس نمی‌رود. کد یک ساعت اعتبار دارد.

اگر ایمیل نرسید، پوشه‌ی اسپم را هم ببینید و no-reply@weblines.ir را به مخاطب‌ها اضافه کنید.

آستانه‌ها#

در همان صفحه، آستانه‌ها را عوض کنید:

هشدارپیش‌فرض
CPU۹۰٪
RAM۹۰٪
دیسک۸۵٪
انقضای SSL۱۴ روز مانده
موجودی کیف پول۳ روز مانده به تمام‌شدن

webhook#

هر رویداد یک درخواستِ POST با بدنه‌ی JSON به آدرسِ شما می‌فرستد. موقعِ ساختِ کانال می‌توانید گروه‌های رویداد را انتخاب کنید (دیپلوی، سلامتِ سرویس، بکاپ، کیف پول، تیم و امنیت)؛ اگر هیچ گروهی انتخاب نشود، همه می‌آیند.

json
{
  "id": "cmv…",
  "type": "deploy.failed",
  "severity": "warning",
  "title": "Deploy failed: shop",
  "body": "…",
  "link": "https://console.weblines.ir/dashboard/services/cmv…",
  "organizationId": "cmv…",
  "resourceId": "cmv…",
  "data": {},
  "createdAt": "2026-10-20T08:00:00.000Z"
}

severity یکی از info، warning یا critical است. بعضی از typeها:

گروهنمونه‌ی type
دیپلویdeploy.succeeded، deploy.failed
سلامتِ سرویسresource.failed، resource.recovered، resource.crash_loop، resource.oom، uptime.down، uptime.up، metrics.cpu_high، domain.ssl_expiring، cron.failed
بکاپdatabase.job_succeeded، database.job_failed
کیف پولbilling.wallet_low، billing.budget_exceeded، billing.debt_started
تیم و امنیتsecurity.member_added، security.login_new_device، security.api_key_created

دکمه‌ی TEST ِ هر کانال یک رویدادِ channel.test می‌فرستد.

هدرها#

هدرمقدار
X-Weblines-Eventهمان type
X-Weblines-Deliveryشناسه‌ی این ارسال؛ برای حذفِ تکراری‌ها
X-Weblines-Timestampزمانِ ارسال، ثانیه‌ی یونیکس
X-Weblines-Signature-V2sha256= و HMAC-SHA256 ِ رشته‌ی <timestamp>.<body> با secret ِ کانال
X-Weblines-Signature(قدیمی) sha256= و HMAC-SHA256 ِ خودِ body؛ برای سازگاری می‌ماند

secret ِ کانال (با پیشوندِ whsec_) فقط یک بار، موقعِ ساختِ کانال، نشان داده می‌شود.

بررسیِ امضا#

از V2 استفاده کنید: امضا را روی بدنه‌ی خامِ درخواست (قبل از parse) دوباره بسازید، در زمانِ ثابت مقایسه کنید، و درخواستی را که timestamp ِ آن بیش از ۵ دقیقه با ساعتِ شما فاصله دارد رد کنید تا درخواستِ شنودشده دوباره پذیرفته نشود.

js
// Node.js
import { createHmac, timingSafeEqual } from "node:crypto";

function verify(rawBody, headers, secret) {
  const ts = headers["x-weblines-timestamp"];
  const given = headers["x-weblines-signature-v2"] ?? "";
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
  const expected = "sha256=" + createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex");
  return given.length === expected.length && timingSafeEqual(Buffer.from(given), Buffer.from(expected));
}
python
# Python
import hmac, hashlib, time

def verify(raw_body: bytes, headers, secret: str) -> bool:
    ts = headers.get("X-Weblines-Timestamp", "")
    given = headers.get("X-Weblines-Signature-V2", "")
    if not ts.isdigit() or abs(time.time() - int(ts)) > 300:
        return False
    mac = hmac.new(secret.encode(), f"{ts}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(given, "sha256=" + mac)

تحویل، تلاشِ دوباره و Redeliver#

  • جوابِ 2xx در کمتر از ۸ ثانیه یعنی تحویل شد. redirect دنبال نمی‌شود.
  • اگر نشد، دوباره تلاش می‌شود: ۱، ۵، ۱۵ و ۶۰ دقیقه بعد. بعد از آن «failed» می‌شود.
  • ممکن است یک رویداد بیش از یک بار برسد؛ با X-Weblines-Delivery یا id تکراری‌ها را کنار بگذارید.
  • در RECENT SENDS ِ همان صفحه، وضعیتِ ۲۰ ارسالِ آخر و خطای هر کدام دیده می‌شود. owner و admin با Redeliver یک ارسالِ webhook یا Bale را همان لحظه دوباره می‌فرستند.
  • آدرس باید عمومی باشد (https توصیه می‌شود؛ http هم پذیرفته است)؛ آدرس‌های شبکه‌ی خصوصی پذیرفته نمی‌شوند.

اتصال به تلگرام، Slack یا ابزارِ دیگر#

payload را یک واسطه‌ی کوچک به پیام تبدیل کند — مثلاً یک workflow در n8n با گره‌ی Webhook که پیام را به تلگرام یا Slack می‌فرستد. آدرسِ همان گره‌ی Webhook را به‌عنوانِ کانالِ webhook بگذارید.

جزئیاتِ بیشتر#

بعد از هشدار#

کارتِ سرویس را باز کنید و لاگ را ببینید: وضعیت، لاگ و شِل و خطای دیپلوی.

جوابت را پیدا نکردی؟

تیکت از پنل یا تماس در ساعاتِ کاری: ۰۲۱-۸۸۷۱۷۴۵۱

ثبتِ تیکت