#P1532
POST /asterisk/call/hangup
Route Info
| Method | Endpoint | Controller | Middleware | Purpose |
| POST | /api/v2/asterisk/call/hangup | AsteriskAmiController@hangupCall | authWithJwt | قطع تماس فعال در سیستم Asterisk با شناسهٔ کانال یا uniqueid |
منطق عملکرد تابع
تابع hangupCall جهت پایان دادن به تماسی است که در حال برقراری است. پارامتر ورودی میتواند channel یا uniqueid باشد. در صورت هماهنگ بودن یکی از این دو، دستور AMI با Action Hangup به سرور ارسال شده و در صورت موفقیت، پیغام تأیید برمیگردد.
- بررسی پارامترهای درخواست (
channelیاuniqueid). - در صورت عدم ورود هیچکدام، پاسخ 400 برگردانده میشود.
- ایجاد Action
Hangupو ارسال به AMI از طریقAmi::sendAction(). - بررسی پاسخ در صورت موفقیت (
Response: Success). - ثبت رویداد در سیستم ممیزی.
پارامترهای ورودی
| نام | محل | نوع | الزامی | توضیح |
| channel | Body | string | خیر* | نام کانال (مثلاً SIP/2001‑0000004e) |
| uniqueid | Body | string | خیر* | شناسه منحصربهفرد تماس |
| reason | Body | string | خیر | متن علت پایان تماس برای لاگ |
* حداقل یکی از دو پارامتر channel یا uniqueid باید ارسال شود.
ساختار خروجی
{
"status": true,
"message": "Call hangup successful",
"data": {
"channel": "SIP/2001-0000004e",
"uniqueid": "1732360572.382",
"terminated_at": "2025-11-23T14:42:58+03:30"
}
}
نکات امنیتی
- فقط کاربران با نقش «telecom_admin» یا «supervisor» حق قطع تماس دارند.
- تمام درخواستها احراز هویت با JWT میشوند.
- تلاشهای ناموفق در
ami_hangup_attemptsثبت میگردند.
عملکرد
- میانگین زمان پاسخ کامل: حدود ۲۰–۵۰ میلیثانیه.
- Timeout در ارتباط با AMI ۴ ثانیه در نظر گرفته شده است.
Dependencies
- use App\Services\Ami;
- use Illuminate\Http\Request;
- use Carbon\Carbon;
- use Exception;
کدهای خطا
| کد | شرح | منبع |
| 400 | نبود پارامتر مورد نیاز: channel یا uniqueid | Validation |
| 401 | توکن JWT نامعتبر | Middleware |
| 403 | مجوز قطع تماس ندارید | Authorization |
| 404 | کانال مورد نظر یافت نشد | AMI Response |
| 504 | Timeout در ارتباط با AMI | AmiClient |
پیشنهادهای امنیتی
- مدیریت ثبت رویداد قطع تماس در سیستم لاگ مرکزی (
KibanaیاELK). - پنهانکردن channel واقعی در پاسخ در محیط production.
پیشنهادهای توسعهای
- امکان قطع گروهی تماسها (
hangup_all=true). - افزودن پارامتر
force=trueبرای قطع تماسهای بلاتکلیف. - ثبت duration در بلاک data در خروجی.
ممیزی و لاگها
- ثبت در
system_logsبا کلیدasterisk_hangup_call. - ذخیره فیلدهای
operator_id،channel،uniqueid،reason.
جمعبندی
hangupCall روشی ایمن و بلادرنگ برای قطع تماس فعال در مرکز تماس است. این تابع هستهٔ اصلی پایان مدیریت تماسها در بخش Call Management بهشمار میرود.