Skip to content

نمای کلی API ​

API اویرا یک رابط HTTP با خروجی JSON به پنل است. با آن می‌توانید ربات فروش یا پشتیبانی بسازید، ابزار نمایندگی بنویسید، ترافیک و اتصال‌ها را از سامانهٔ دیگری ببینید، یا کارهایی را که در پنل تکرار می‌کنید با اسکریپت انجام دهید. این صفحه آدرس پایه، ورود، شکل درخواست و خطا، و کارهایی را که یک توکن نمی‌تواند انجام دهد توضیح می‌دهد.

توکن‌های API از اویرا v0.9.9-beta.6 در دسترس‌اند. این قابلیت بتاست؛ نسخهٔ پایدار v0.9.8 و بتاهای قبلی v0.9.9 زبانهٔ تنظیمات → API را ندارند.

چه چیزی می‌توانید بسازید ​

  • ربات فروشی که برای هر سفارش کاربر می‌سازد، لینک اشتراک و کد QR را می‌فرستد، بعداً تمدید می‌کند و در پایان سفارش کاربر را خاموش یا حذف می‌کند.
  • ابزار نمایندگی که فقط در حساب یک نماینده و سهمیهٔ ترافیک آن کار می‌کند.
  • پایشی که کاربران، اتصال‌های زنده، وضعیت نودها و تاریخچهٔ ترافیک را می‌خواند.
  • اسکریپتی که کاربران را گروهی می‌سازد، به گروه‌ها می‌افزاید، یا CRM بیرونی را هم‌گام نگه می‌دارد.

API همان کاری را می‌کند که حساب واردشده در پنل می‌تواند، با دو محدودیت: هرگز به کارهای مخصوص نشست مرورگر نمی‌رسد، و توکن سفارشی فقط دسترسی‌هایی را دارد که برایش انتخاب شده.

آدرس پایه ​

API زیر آدرس پنل، مسیر مخفی آن و api/ قرار دارد:

text
https://panel.example.com/<secret-path>/api/

آدرس دقیق در تنظیمات → API و در آدرس پایه API است و دکمهٔ کپی دارد. همان را پایه بگذارید و پیشوند /api را که در مرجع می‌آید حذف کنید؛ $BASE پایین از قبل آن را دارد. مثال‌ها آن را با $BASE کوتاه می‌کنند:

bash
export BASE="https://panel.example.com/ovira-7f3c/api"
export OVIRA_TOKEN="ovk_..."

پراکسی معکوس جلوی پنل، scheme و host عمومی را عوض می‌کند، نه بخش بعد از <secret-path> را. اگر پنل پشت پراکسی است، آدرس HTTPS عمومی پراکسی را بگذارید.

ورود با توکن ​

توکن را در تنظیمات → API بسازید. کلید آن را در هدر Authorization بفرستید:

bash
curl -sS \
  -H "Authorization: Bearer $OVIRA_TOKEN" \
  "$BASE/auth/me"

درخواست با توکن به هدر CSRF نیاز ندارد. وقتی این هدر حاضر باشد، پنل کوکی مرورگر را نادیده می‌گیرد؛ توکن اشتباه نمی‌تواند به نشست واردشده تکیه کند.

توکن مانند حسابی عمل می‌کند که آن را ساخته. توکن دسترسی کامل حقوق حساب را همان‌طور که در آن لحظه هست به کار می‌برد. توکن سفارشی فقط دسترسی‌هایی را دارد که هنگام ساخت انتخاب شده‌اند و هرگز بیش از دسترسی فعلی حساب نیست. اگر حساب بعداً دسترسی‌ای را از دست بدهد، توکن هم آن را از دست می‌دهد.

توکن سفارشی هرگز مالک حساب نیست، حتی اگر مالک آن را ساخته باشد، و نمی‌تواند مسیرهای مخصوص مالک را صدا بزند. توکن کاملِ مالک حقوق مالک را نگه می‌دارد، جز کارهای مخصوص نشست که در ادامه آمده.

درخواست و پاسخ ​

JSON بفرستید و JSON بگیرید. هنگام فرستادن بدنه Content-Type: application/json بگذارید. مسیرها و نام فیلدها به بزرگی و کوچکی حرف حساس‌اند.

دو واحد همه‌جا تکرار می‌شوند:

  • ترافیک با بایت: trafficLimit، usedUp، usedDown، bytes.
  • زمان با ثانیهٔ یونیکس: expireAt، createdAt، lastOnlineAt، from، to، t.

سقف ترافیک 0 یعنی بدون محدودیت. تاریخ پایان 0 یعنی بدون تاریخ پایان.

خطاها ​

درخواست ناموفق یک شیء JSON برمی‌گرداند:

json
{
  "error": "a client with this name already exists",
  "field": "name"
}

error یک جمله برای اپراتور است. field فیلد اشتباه درخواست را می‌گوید. code وقتی می‌آید که برنامه بتواند بر اساس آن تصمیم بگیرد، و params جزئیات آن را دارد:

json
{
  "error": "this API token is not allowed from your address",
  "code": "token_ip",
  "params": { "ip": "203.0.113.9" }
}
وضعیتمعنی
200درخواست انجام شد.
201چیزی ساخته شد.
202کاری شروع شد؛ نتیجه را از همان منبع یا فهرست بخوانید.
204درخواست انجام شد و بدنه ندارد.
400بدنه یا یکی از فیلدها معتبر نیست. field را ببینید.
401نشست یا توکن معتبر نیست.
402لایسنس، سهمیهٔ ترافیک یا محدودیت حساب تغییر را رد می‌کند.
403حساب یا توکن اجازهٔ این کار را ندارد.
404چنین رکوردی نیست، یا خارج از دسترس حساب است.
409تعارض، مثل نام تکراری یا برگشت نسخهٔ پشتیبانی‌نشده.
429تلاش‌های ناموفق زیاد بوده؛ صبر کنید و دوباره بفرستید.
500پنل نتوانست درخواست را تمام کند.
502در درخواست پشتیبان، Telegram در دسترس نبود.

کدهای خطای توکن ​

codeمعنیکار شما
token_invalidهدر Bearer ندارد، کلید با ovk_ شروع نمی‌شود، یا توکنی با آن پیدا نشد.کلید را بررسی کنید و ببینید توکن لغو نشده باشد.
token_expiredتاریخ انقضای توکن گذشته.توکن تازه بسازید.
token_ipدرخواست از آدرسی خارج از آی‌پی‌های مجاز آمده. params.ip آدرسی است که پنل دیده.از آدرس مجاز بفرستید، یا توکن تازه با فهرست درست بسازید.
token_forbiddenاین مسیر مخصوص نشست است.در پنل وارد شوید و از برنامهٔ وب استفاده کنید.
account_blockedحساب پشت توکن خاموش، منقضی یا بدون ترافیک است. params.reason می‌گوید کدام.از مالک پنل بخواهید حساب را شارژ یا تمدید کند.
token_limitحساب هم‌اکنون ۲۵ توکن API دارد.اول یک توکن را لغو کنید.

درخواست با توکنی که حساب دیگر آن دسترسی را ندارد، 403 بدون code می‌گیرد. توکن سفارشی که آن دسترسی را ندارد هم همین پاسخ را می‌گیرد.

توکن چه کاری نمی‌تواند بکند ​

این مسیرها روی خود پنل یا مرورگر واردشده کار می‌کنند و هر توکنی را با 403 و token_forbidden رد می‌کنند:

  • خروج از پنل (POST auth/logout).
  • همهٔ account/: رمز عبور، راه‌اندازی و بازیابی ورود دومرحله‌ای، نشست‌های واردشده و توکن‌های خودتان.
  • اینکه مالک توکن‌های حساب دیگری را ببیند یا لغو کند، رمز حساب دیگری را بگذارد، یا ورود دومرحله‌ای او را بازنشانی کند.
  • حذف بستهٔ یک پروتکل از نود (DELETE nodes/{id}/protocols/{kind}).
  • تغییر آدرس شنود، مسیر مخفی یا فایل‌های TLS پنل، و تغییر گواهی آن.
  • بازگردانی پشتیبان، از فایل آپلودی یا از Telegram.

توکن سفارشی به مسیرهای مخصوص مالک هم نمی‌رسد: تنظیمات، حساب‌ها، نقش‌ها، دانلود پشتیبان و بقیهٔ مدیریت خود پنل. فقط توکن کاملِ مالک این حقوق را نگه می‌دارد.

از HTTPS استفاده کنید ​

توکن را روی HTTPS بفرستید. توکن رمز حساب است: هر کس آن را در مسیر بخواند تا وقتی لغو یا منقضی شود می‌تواند از آن استفاده کند. اگر پنل روی HTTP ساده است، پیش از وصل کردن رباتی از بیرون سرور، آن را پشت پراکسی معکوس HTTPS بگذارید.

سند OpenAPI ​

همین API در یک سند OpenAPI 3.1 توصیف شده:

  • نسخه‌ای که همراه این مستندات است: openapi.json.
  • نسخهٔ دقیق یک پنل در حال اجرا: <base>/api/openapi.json، که <base> آدرس پنل و مسیر مخفی آن است.

برای آوردن آن در Postman، Insomnia یا Bruno و ساختن کلاینت، سند OpenAPI را ببینید.

صفحه‌های مرتبط ​

نرم‌افزار انحصاری · مستندات آزاد برای اشتراک