Skip to main content
#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 به سرور ارسال شده و در صورت موفقیت، پیغام تأیید برمی‌گردد.

  1. بررسی پارامترهای درخواست (channel یا uniqueid).
  2. در صورت عدم ورود هیچکدام، پاسخ 400 برگردانده می‌شود.
  3. ایجاد Action Hangup و ارسال به AMI از طریق Ami::sendAction().
  4. بررسی پاسخ در صورت موفقیت (Response: Success).
  5. ثبت رویداد در سیستم ممیزی.

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

نام محل نوع الزامی توضیح
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 به‌شمار می‌رود.