Skip to main content
#P1530

GET /asterisk/channel/status

Route Info

Method Endpoint Controller Middleware Purpose
GET /api/v2/asterisk/channel/status AsteriskAmiController@getChannelStatus authWithJwt بررسی وضعیت یک کانال مشخص در Asterisk AMI براساس نام کانال

منطق عملکرد تابع

تابع getChannelStatus به سرور AMI وصل می‌شود و وضعیت دقیق یک Channel مشخص را برمی‌گرداند. درخواست، نام کانال در حال برقراری تماس (مثل SIP/2001‑0000004e) را دریافت کرده و با ارسال دستور ChannelStatus به AMI، اطلاعات فعلی (نظیر CallerID، state، context، application و duration) را بازمی‌گرداند.

  1. خواندن پارامتر channel از query string.
  2. فراخوانی Ami::sendAction('ChannelStatus', ['Channel' => $channel]).
  3. در صورت یافتن کانال فعال، پاسخ ساخته می‌شود با فیلدهای State، CallerID، Duration و Application.
  4. در صورت نبود کانال یا خطا، پاسخ با status=false و کد ۴۰۴ بازگردانده می‌شود.

پارامترهای ورودی

نام محل نوع الزامی توضیح
channel Query string بله نام کانال مثلاً SIP/2001‑0000004e

ساختار خروجی موفق

{
  "status": true,
  "message": "Channel found",
  "data": {
    "channel": "SIP/2001-0000004e",
    "caller": "09132223344",
    "context": "from-internal",
    "state": "Up",
    "application": "Dial",
    "duration": "00:02:34"
  }
}

ساختار خروجی خطا

{
  "status": false,
  "code": 404,
  "error": "Channel not found or inactive"
}

نکات امنیتی

  • دسترسی به این مسیر فقط برای کاربران دارای نقش مدیریت تلفنی فعال می‌باشد.
  • در پاسخ هیچ دادهٔ حساس مثل authkey یا secret خطوط نمایش داده نمی‌شود.
  • درخواست‌های بیش از ۳ در هر ۵ ثانیه rate‑limit می‌شوند.

نکات عملکردی

  • میانگین تأخیر پاسخ: ~۴۰ میلی‌ثانیه.
  • در صورت Load بالا، از cache با TTL=2 ثانیه برای کانال استفاده می‌شود.

Dependencies

  • use App\Services\Ami;
  • use Illuminate\Http\Request;
  • use Exception;

کدهای خطا

کد شرح منبع
401 توکن JWT نامعتبر Middleware
404 کانال پیدا نشد AMI Response
500 خطای ارتباط با AMI Exception

پیشنهادهای امنیتی

  • پارامتر channel را ورودی user‑validated قرار دهید تا از injection در AMI Action جلوگیری شود.
  • فقط در محیط داخلی به AMI دسترسی دهید.

پیشنهادهای توسعه‌ای

  • افزودن پارامتر ?fields=state,duration برای واکنش سریع‌تر.
  • اتصال real‑time با socket برای به‌روزرسانی‌های وضعیت کانال.

ممیزی و لاگ‌ها

  • ثبت در جدول system_logs با کلید ami_channel_status.
  • فیلدها: operator_id, channel, result, timestamp.

جمع‌بندی

getChannelStatus ابزار پایش دقیق و بلادرنگ هر کانال در سیستم تماس VoIP است و به ادمین‌ها امکان عیب‌یابی سریع ارتباطات را می‌دهد.