#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) را بازمیگرداند.
- خواندن پارامتر
channel از query string.
- فراخوانی
Ami::sendAction('ChannelStatus', ['Channel' => $channel]).
- در صورت یافتن کانال فعال، پاسخ ساخته میشود با فیلدهای State، CallerID، Duration و Application.
- در صورت نبود کانال یا خطا، پاسخ با 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 است و به ادمینها امکان عیبیابی سریع ارتباطات را میدهد.