Skip to main content
#P1529

GET /asterisk/channels/active

Route Info

Method Endpoint Controller Middleware Purpose
GET /api/v2/asterisk/channels/active AsteriskAmiController@getActiveChannels authWithJwt دریافت فهرست کانال‌های فعال در سرور Asterisk AMI

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

تابع getActiveChannels با استفاده از کلاس AmiClient به سرویس AMI متصل شده و با فرمان CoreShowChannels فهرست تمام کانال‌های فعال در حال مکالمه را واکشی می‌کند. هر کانال دارای اطلاعاتی از قبیل نام کانال، CallerID، Context، Duration و State است. نتیجه در قالب JSON بازگردانده می‌شود.

  1. برقراری کانکشن با AMI از طریق Ami::getConnection().
  2. ارسال دستور CoreShowChannels و دریافت پاسخ.
  3. پارْس داده‌ها و ساخت لیستی از channel های فعال (Active Call Sessions).
  4. بازگرداندن پاسخ با فرمت JSON و فیلد های channel، caller، context، state، duration.

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

درخواست فاقد پارامتر بدنه است. احراز هویت JWT در هدر Authorization الزامی می‌باشد.

ساختار خروجی

{
  "status": true,
  "count": 2,
  "channels": [
    {
      "channel": "SIP/2001-0000004e",
      "caller": "09132223344",
      "context": "from-internal",
      "state": "Up",
      "duration": "00:02:34"
    },
    {
      "channel": "SIP/2002-0000004f",
      "caller": "02133112233",
      "context": "from-outgoing",
      "state": "Ring",
      "duration": "00:00:15"
    }
  ]
}

نکات امنیتی

  • اطلاعات تماس‌ها فقط برای کاربران دارای نقش مدیر قابل مشاهده است.
  • خروجی محدود به ۳۰ کانال اول برای جلوگیری از overload.
  • هیچ اطلاعات صوتی یا Recording در خروجی وجود ندارد.

نکات عملکردی

  • میانگین زمان پاسخ در شبکه‌های محلی: ۴۵ میلی‌ثانیه.
  • در سرورهای پرترافیک، نتیجه از cache Redis (کلید ami:channels:active) با اعتبار ۵ ثانیه برگردانده می‌شود.

Dependencies

  • use App\Services\Ami;
  • use Illuminate\Support\Facades\Cache;
  • use Illuminate\Http\JsonResponse;

کدهای خطا

کد شرح منبع
401 توکن JWT نامعتبر Middleware
504 Timeout در پاسخ AMI AmiClient
500 خطای داخلی سرور Asterisk Exception

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

  • در محیط production اطلاعات تماس را mask کنید (مثلاً فقط ۴ رقم آخر).
  • دسترسی endpoint را به Role "telecom_admin" محدود کنید.

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

  • افزودن پارامتر ?filter=state:Up برای فیلتر بر اساس وضعیت تماس.
  • نمایش مدت مکالمه با فرمت Jalali در پاسخ.

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

  • ثبت در system_logs با فیلد های operator_id، count، timestamp
  • در صورت خطا، ثبت در asterisk_errors.log

جمع‌بندی

تابع getActiveChannels برای نمایش بلادرنگ لیست تماس‌های جاری در سیستم است و یکی از پایه‌ای‌ترین API‌ های مانیتورینگ مرکز تماس به‌شمار می‌رود.