Skip to main content
#P1531

POST /asterisk/call/make

Route Info

Method Endpoint Controller Middleware Purpose
POST /api/v2/asterisk/call/make AsteriskAmiController@makeCall authWithJwt برقراری تماس خروجی از طریق سرور Asterisk AMI به یک شماره تلفن

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

تابع makeCall یک درخواست خروجی به AMI ارسال می‌کند تا میان «داخلی اپراتور» و «شماره مقصد» تماس ایجاد شود. با Action Originate و پارامترهای Channel، Exten، Context و Priority، سیستم تماس را آغاز می‌کند. در صورت موفقیت، داده uniqueid و اطلاعات پایه تماس برگردانده می‌شود.

  1. دریافت پارامترهای source (داخلی مبدأ)، destination (شماره مقصد)، context، priority.
  2. اعتبارسنجی ورودی‌ها و بررسی فرمت شماره تلفن.
  3. ایجاد Action به‌صورت:
    Originate Channel=SIP/{source}, Exten={destination}, Context=from-internal, Priority=1, CallerID={cid}
  4. ارسال به AMI از طریق Ami::sendAction().
  5. بررسی پاسخ و بازگرداندن وضعیت تماس با کد ۲۰۰ در صورت موفقیت.

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

نام محل نوع الزامی توضیح
source Body string بله شماره داخلی مبدأ (مثلاً 2001)
destination Body string بله شماره مقصد جهت تماس (مانند 09132223344)
context Body string خیر Context Asterisk (پیش‌فرض: from‑internal)
priority Body integer خیر اولویت دستور در Dial Plan (پیش‌فرض: 1)
caller_id Body string خیر شناسه نمایش تماس CallerID

ساختار خروجی

{
  "status": true,
  "message": "Call initiated successfully",
  "data": {
    "uniqueid": "1732360572.382",
    "source": "SIP/2001",
    "destination": "09132223344",
    "context": "from-internal",
    "channel_state": "Ring"
  }
}

نکات امنیتی

  • احراز هویت JWT و مجوز role «telecom_operator» اجباری است.
  • شماره‌های غیرمجاز (خارج از pattern داخلی یا لیست سفید) Rejected می‌شوند.
  • برای هر Operator حداکثر ۳ تماس هم‌زمان مجاز است.

عملکرد سیستم

  • میانگین زمان ایجاد تماس موفق: ۵۰ تا ۹۰ میلی‌ثانیه.
  • Timeout در ارسال Action به AMI : ۵ ثانیه.
  • در صورت Fail، Log در ami_outbound_failures.log ثبت می‌شود.

Dependencies

  • use App\Services\Ami;
  • use Illuminate\Http\Request;
  • use Illuminate\Support\Facades\Validator;
  • use Exception;

کدهای خطا

کد شرح منبع
400 ورودی نامعتبر (شماره داخلی یا تلفن) Validator
403 دسترسی مجاز برای برقراری تماس ندارید Middleware
504 Timeout در AMI یا عدم پاسخ AmiClient
500 خطای نامشخص در ارسال Originate Exception

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

  • تماس‌های خارجی را با Prefix اختصاصی (مثلاً 90XX) محدود کنید.
  • درخواستی از IPهای غیرمجاز Rejected شود.
  • JWT را در AccessLog ثبت نکنید.

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

  • پشتیبانی از queue خودکار در صورت مشغول بودن Channel.
  • ارسال webhook به اپلیکیشن CRM پس از اتصال کامل.
  • افزودن پارامتر record=true برای ضبط تماس.

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

  • ثبت دستور در جداول ami_calls با فیلدهای operator_id, source, destination, uniqueid, timestamp.
  • تاریخچه در system_logs با کلید asterisk_make_call ذخیره می‌شود.

جمع‌بندی

متد makeCall رابطی امن و بلادرنگ برای شروع تماس‌های خروجی از داخلی اپراتور به شماره‌های بیرونی از طریق AMI است و به‌عنوان هستهٔ ماژول Call Management نقش اصلی دارد.