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