مقدمه
اگر با سیستمهای VoIP کار میکنی، بدون شک نام AMI در Asterisk را شنیدهای. AMI یا Asterisk Manager Interface یکی از مهمترین ابزارها برای کنترل، مانیتورینگ و مدیریت تماسها در لحظه است.
در این مقاله یاد میگیری:
- AMI چیست
- چگونه به آن متصل شویم
- چگونه تماس ایجاد کنیم (Originate)
- چگونه وضعیت داخلیها را بگیریم
- و چگونه یک سیستم واقعی VoIP بسازی
AMI چیست؟ (Asterisk Manager Interface)
Asterisk Manager Interface یک رابط مدیریتی مبتنی بر TCP است که به برنامهنویس اجازه میدهد به صورت Real-Time با Asterisk ارتباط برقرار کند.
به زبان ساده:
AMI مثل یک کنترل پنل مخفی است که از طریق آن میتوانی استریسک را برنامهنویسی و کنترل کنی.
کاربردهای AMI در Asterisk
با استفاده از AMI میتوان:
- برقراری تماس (Originate Call)
- قطع تماس (Hangup Call)
- مانیتورینگ تماسها
- دریافت وضعیت داخلیها (Extensions Status)
- ساخت کالسنتر حرفهای
- اتصال به WebSocket و نمایش Real-Time
نحوه اتصال به AMI با PHP
برای اتصال به AMI از پورت 5038 استفاده میشود.
نمونه کد PHP (نسخه ساده و کاربردی)
<?php
$socket = fsockopen("127.0.0.1", 5038, $errno, $errstr, 30);
if (!$socket) {
die("Connection failed: $errstr ($errno)");
}
fputs($socket, "Action: Login\r\n");
fputs($socket, "Username: admin\r\n");
fputs($socket, "Secret: admin123\r\n");
fputs($socket, "Events: on\r\n\r\n");
while (!feof($socket)) {
$response = fgets($socket, 4096);
echo $response;
}
?>
ارسال دستور Originate (برقراری تماس)
یکی از مهمترین قابلیتهای AMI، ایجاد تماس خودکار است.
مثال:
fputs($socket, "Action: Originate\r\n");
fputs($socket, "Channel: SIP/100\r\n");
fputs($socket, "Context: from-internal\r\n");
fputs($socket, "Exten: 200\r\n");
fputs($socket, "Priority: 1\r\n");
fputs($socket, "CallerID: 100\r\n\r\n");
دریافت وضعیت داخلیها در AMI
AMI میتواند وضعیت داخلیها را لحظهای نمایش دهد:
- Idle (آزاد)
- InUse (مشغول)
- Ringing (در حال زنگ خوردن)
- Unavailable (غیرفعال)
این قابلیت در سیستمهای کالسنتر بسیار مهم است، مخصوصاً در پروژههایی مثل Issabel.
معماری واقعی استفاده از AMI
در پروژههای حرفهای VoIP:
کاربر → پنل PHP → AMI → Asterisk → تماس تلفنی
یا در حالت پیشرفتهتر:
- PHP (پنل مدیریت)
- Node.js (Event Listener)
- WebSocket (Real-Time UI)
- AMI (Core Control)
تفاوت AMI و ARI در Asterisk
| ویژگی | AMI | ARI |
|---|---|---|
| سطح کنترل | مدیریتی | عمیق |
| کاربرد | مانیتورینگ + کنترل | Call Flow پیشرفته |
| پیچیدگی | سادهتر | پیچیدهتر |
مشکلات رایج AMI
1. اتصال برقرار نمیشود
- پورت 5038 بسته است
- manager.conf تنظیم نشده
2. Event دریافت نمیشود
- Events = on فعال نیست
3. قطع شدن اتصال
- timeout یا firewall مشکل دارد
کاربرد واقعی AMI در پروژهها
AMI در پروژههای واقعی برای موارد زیر استفاده میشود:
- کالسنترها
- CRM تلفنی
- سیستم تماس خودکار (Auto Dialer)
- مانیتورینگ اپراتورها
- داشبورد Real-Time VoIP
FAQ (سوالات متداول)
AMI در Asterisk چیست؟
AMI یک رابط مدیریتی برای کنترل و مانیتورینگ Asterisk در لحظه است.
آیا AMI برای PHP مناسب است؟
بله، PHP یکی از رایجترین زبانها برای کار با AMI است.
تفاوت AMI و SIP چیست؟
SIP برای برقراری تماس است، AMI برای کنترل و مدیریت تماسها.
پورت AMI چیست؟
پورت پیشفرض AMI عدد 5038 است.
جمعبندی
Asterisk Manager Interface یکی از مهمترین ابزارها در سیستمهای VoIP است که به کمک آن میتوان سیستمهای حرفهای مثل کالسنتر، CRM و پنلهای مدیریتی ساخت.
اگر با Asterisk کار میکنی، یادگیری AMI برایت ضروری است.