AMI چیست؟

AMI چیست؟ معرفی Asterisk Manager Interface و نحوه اتصال به Asterisk

AMI چیست؟ AMI یا Asterisk Manager Interface رابط مدیریتی Asterisk برای برقراری ارتباط میان سرور و نرم‌افزارهای خارجی است. از طریق این رابط می‌توان وضعیت تماس‌ها، داخلی‌ها و صف‌های تماس را دریافت و مانیتور کرد. همچنین امکان اجرای برخی عملیات مانند ایجاد یا قطع تماس نیز وجود دارد. رویدادهای مرتبط با تماس و تغییرات سیستم هم تقریباً به‌صورت لحظه‌ای برای نرم‌افزار متصل ارسال می‌شوند.

بنابراین برخلاف تصور رایج، AMI یک رابط گرافیکی برای Asterisk نیست. نرم‌افزارهایی مانند CRM، داشبوردهای مانیتورینگ، سیستم‌های Click-to-Call یا نرم‌افزارهای مدیریت مرکز تماس می‌توانند از AMI برای ارتباط با Asterisk استفاده کنند. خود Asterisk نیز برای کار کردن الزامی به داشتن GUI یا AMI ندارد.

مشخصه توضیح
نام کامل Asterisk Manager Interface
کاربرد اصلی مدیریت و مانیتورینگ Asterisk از نرم‌افزارهای خارجی
پورت پیش‌فرض TCP 5038
فایل تنظیمات /etc/asterisk/manager.conf
نوع ارتباط TCP/TLS و در برخی سناریوها HTTP/HTTPS
پیام‌های اصلی Action، Response و Event
وضعیت پیش‌فرض AMI به‌صورت پیش‌فرض غیرفعال است
کاربرد سازمانی CRM، مرکز تماس، مانیتورینگ اپراتورها، Click-to-Call و گزارش تماس

AMI چیست و چه کاری در Asterisk انجام می‌دهد؟

برای درک بهتر اینکه AMI چیست؟ ابتدا باید نقش Asterisk را بشناسیم. Asterisk یک پلتفرم متن‌باز ارتباطی است که می‌تواند به‌عنوان هسته یک IP PBX، سیستم تلفنی یا زیرساخت مرکز تماس مورد استفاده قرار گیرد. اگر با این سیستم آشنایی ندارید، ابتدا مقاله Asterisk چیست؟ را مطالعه کنید.

Asterisk در حالت عادی بسیاری از اطلاعات مربوط به تماس، Channel، Queue، Endpoint و وضعیت داخلی‌ها را در اختیار دارد. زمانی که یک نرم‌افزار خارجی بخواهد این اطلاعات را دریافت یا بخشی از Asterisk را کنترل کند، AMI یکی از مهم‌ترین رابط‌های در دسترس است.

در مستندات رسمی Asterisk درباره AMI آمده است:

“AMI is the standard management interface into your Asterisk server.”

ترجمه: «AMI رابط استاندارد مدیریتی برای ارتباط با سرور Asterisk است.»

 

برای مثال یک نرم‌افزار مدیریت تماس می‌تواند از طریق AMI متوجه شود چه زمانی تماس جدیدی ایجاد شده، کدام داخلی در حال زنگ خوردن است، چه زمانی تماس پاسخ داده شده و چه زمانی Channel تماس بسته شده است.

AMI چگونه کار می‌کند؟

ارتباط در AMI بر پایه مدل Client/Server انجام می‌شود. Asterisk نقش Server را دارد و نرم‌افزار خارجی به‌عنوان Client به آن متصل می‌شود.

پیام‌های AMI به شکل متنی و ساختار Header: Value ارسال می‌شوند و سه نوع اصلی دارند: Action، Response و Event. این ساختار باعث شده توسعه‌دهندگان بتوانند AMI را با زبان‌های برنامه‌نویسی مختلف پیاده‌سازی کنند.

AMI چگونه کار می‌کند؟

Action در AMI چیست؟

Action دستوری است که Client برای Asterisk ارسال می‌کند. برای مثال نرم‌افزار می‌تواند درخواست Login، دریافت وضعیت Channelها، Hangup یا ایجاد تماس جدید را ارسال کند.

یک درخواست ساده برای Login به شکل زیر است:

Action: Login
Username: mahan_ami
Secret: YOUR_STRONG_SECRET
Events: on

برای دنبال کردن درخواست‌ها نیز بهتر است از ActionID استفاده شود. در این حالت اگر چند Action به Asterisk ارسال شود، نرم‌افزار راحت‌تر می‌تواند Response یا Event مربوط به هر درخواست را شناسایی کند.

Response چیست؟

بعد از ارسال بسیاری از Actionها، Asterisk یک Response برمی‌گرداند. این پاسخ مشخص می‌کند دستور موردنظر پذیرفته شده، با خطا مواجه شده یا برای تکمیل آن باید منتظر Eventهای بعدی بود.

برای نمونه نتیجه Login موفق ممکن است شامل Response: Success باشد.

البته نباید فرض کرد هر Action فقط یک پیام برمی‌گرداند. برخی Actionها یک Response اولیه دارند و سپس مجموعه‌ای از Eventها را تولید می‌کنند.

Response چیست؟

Event در AMI چیست؟

Event رویدادی است که از سمت Asterisk برای Client ارسال می‌شود. این بخش یکی از مهم‌ترین قابلیت‌های AMI برای نرم‌افزارهای مرکز تماس است.

برای مثال با Eventهای مختلف می‌توان ایجاد Channel، تغییر وضعیت تماس، شروع شماره‌گیری، پاسخ تماس، ورود اپراتور، تغییر وضعیت Queue و پایان تماس را شناسایی کرد.

در نسخه‌های جدید Asterisk برای تغییر وضعیت Channel از Eventهایی مانند Newstate استفاده می‌شود. این Event می‌تواند فیلدهایی مانند موارد زیر داشته باشد:

Event: Newstate
Channel: PJSIP/101-0000012a
ChannelState: 5
ChannelStateDesc: Ringing
CallerIDNum: 101
CallerIDName: Operator 101
ConnectedLineNum: 021XXXXXXXX
Uniqueid: 1787654321.123
Linkedid: 1787654321.120

مقادیر ChannelStateDesc فقط به Down، Ringing و Up محدود نیستند و وضعیت‌هایی مانند Busy، Dialing، Ring و OffHook نیز ممکن است مشاهده شوند.

بنابراین برای طراحی یک Popup تماس یا داشبورد حرفه‌ای نباید تنها به یک Event وابسته بود. معمولاً لازم است Eventهایی مانند Newchannel، DialBegin، Newstate، Eventهای Bridge و Hangup با استفاده از Uniqueid و Linkedid با یکدیگر مرتبط شوند.

Event در AMI چیست؟

کاربرد AMI در مرکز تماس و نرم‌افزارهای سازمانی

یکی از مهم‌ترین دلایل استفاده از AMI، اتصال سیستم تلفنی به نرم‌افزارهای سازمانی است.

برای مثال در یک مرکز تماس، نرم‌افزار می‌تواند Eventهای مربوط به تماس را دریافت کند و وضعیت اپراتورها را روی Dashboard نمایش دهد. همچنین امکان نمایش Popup مشخصات مشتری هنگام تماس، ایجاد Click-to-Call، کنترل برخی عملیات تماس و جمع‌آوری داده برای گزارش‌گیری وجود دارد.

در اتصال سیستم تلفنی به نرم افزار CRM نیز AMI کاربرد زیادی دارد. زمانی که تماس وارد می‌شود، شماره تماس‌گیرنده می‌تواند از Eventهای Asterisk استخراج و به CRM ارسال شود تا پرونده مشتری برای اپراتور نمایش داده شود.

در برخی سناریوها نیز نرم‌افزار می‌تواند با Actionهایی مانند Originate از Asterisk درخواست برقراری تماس کند. Action رسمی Originate برای ایجاد تماس خروجی در Asterisk طراحی شده است.

این نوع یکپارچه‌سازی یکی از اجزای مهم راهکارهای ارتباط سازمانی محسوب می‌شود؛ زیرا ارتباط میان سیستم تلفنی، CRM، داشبورد مدیریتی و سایر نرم‌افزارهای سازمان را امکان‌پذیر می‌کند.

نحوه اتصال به Asterisk از طریق AMI

رایج‌ترین روش استفاده از AMI، اتصال مستقیم TCP به Asterisk است. در صورت فعال بودن AMI، پورت پیش‌فرض این سرویس 5038 است. همچنین امکان استفاده از TLS برای رمزنگاری ارتباط وجود دارد.

برای تست در محیط Local می‌توان با ابزارهایی مانند Telnet یا Netcat به پورت AMI متصل شد:

telnet 127.0.0.1 5038

یا:

nc 127.0.0.1 5038

استفاده از Telnet برای ارتباط Remote یا محیط Production توصیه نمی‌شود، زیرا ارتباط عادی TCP رمزنگاری‌شده نیست.

Asterisk از AMI روی HTTP/HTTPS نیز پشتیبانی کرده است، اما بخش موسوم به AJAM یا Asynchronous JavaScript Asterisk Manager در مستندات فعلی Asterisk با وضعیت Unsupported مشخص شده و خود Asterisk توصیه می‌کند در صورت امکان از AMI استاندارد مبتنی بر TCP استفاده شود.

نحوه فعال کردن AMI در Asterisk

تنظیمات اصلی AMI در فایل زیر قرار دارد:

/etc/asterisk/manager.conf

برای ویرایش فایل می‌توان از یکی از ویرایشگرهای لینوکس استفاده کرد:

vim /etc/asterisk/manager.conf

یا:

nano /etc/asterisk/manager.conf

در متن قدیمی این مقاله مسیر manager.com نوشته شده بود که صحیح نیست؛ نام درست فایل manager.conf است.

برای فعال‌سازی اولیه AMI می‌توان بخش General را به شکل زیر تنظیم کرد:

[general]
enabled = yes
port = 5038
bindaddr = 127.0.0.1

در این نمونه AMI تنها روی localhost در دسترس است. اگر نرم‌افزار Client روی سرور دیگری قرار دارد، باید Bind Address و تنظیمات Firewall متناسب با معماری شبکه تنظیم شوند.

برای تعریف کاربر نیز می‌توان یک Section اختصاصی ایجاد کرد:

[mahan_ami]
secret = YOUR_LONG_RANDOM_PASSWORD
deny = 0.0.0.0/0.0.0.0
permit = 10.10.20.15/255.255.255.255
read = system,call,agent
write = call,originate

مقادیر بالا صرفاً نمونه هستند و سطح read و write باید دقیقاً متناسب با نیاز نرم‌افزار تعیین شود.

دادن read = all و write = all به هر نرم‌افزار متصل به AMI، مخصوصاً در محیط عملیاتی، تصمیم مناسبی نیست. مستندات Asterisk امکان تعریف ACL با deny و permit و محدود کردن Class Authorizationهای هر کاربر را فراهم کرده‌اند.

مشاهده Actionها و Eventهای AMI در Asterisk

ابتدا وارد CLI استریسک شوید:

asterisk -rvvv

برای مشاهده Actionهای AMI می‌توانید دستور زیر را اجرا کنید:

manager show commands

برای مشاهده اطلاعات یک Action خاص نیز از این دستور استفاده می‌شود:

manager show command Originate

توجه کنید که دستور صحیح برای نمایش فهرست Actionها manager show commands به‌صورت جمع است.

برای مشاهده Eventهای مستندشده نیز می‌توان از دستور زیر استفاده کرد:

manager show events

و برای بررسی یک Event مشخص:

manager show event Newstate

تنظیم Event Filter در AMI

یکی از مشکلاتی که در سیستم‌های پرترافیک ایجاد می‌شود، دریافت تعداد بسیار زیادی Event است. اگر نرم‌افزار تنها به چند Event مشخص نیاز داشته باشد، ارسال همه رویدادها باعث مصرف بی‌دلیل منابع و پیچیده‌تر شدن پردازش می‌شود.

Asterisk قابلیت eventfilter را برای محدود کردن Eventهای دریافتی فراهم کرده است. برای مثال می‌توان فقط Eventهای موردنیاز نرم‌افزار را دریافت کرد.

در نسخه‌های جدید Asterisk، Advanced Event Filtering نسبت به روش Regex قدیمی توصیه شده است؛ زیرا پردازش بهینه‌تری دارد.

این قابلیت به‌ویژه برای سیستم‌های مانیتورینگ، Wallboardها و نرم‌افزارهای مرکز تماس با تعداد Channel بالا اهمیت دارد.

امنیت AMI؛ پورت 5038 را روی اینترنت باز نکنید

یکی از مهم‌ترین قسمت‌های پاسخ به سؤال AMI چیست؟ توجه به امنیت آن است. AMI امکان کنترل قسمت‌هایی از Asterisk را فراهم می‌کند؛ بنابراین دسترسی غیرمجاز به آن می‌تواند خطر جدی ایجاد کند.

در فایل نمونه رسمی manager.conf پروژه Asterisk صراحتاً توصیه شده است که AMI روی IP عمومی اینترنت در دسترس قرار نگیرد. برای ارتباط از راه دور بهتر است دسترسی با Firewall محدود شود و در صورت نیاز از TLS، VPN یا تونل امن استفاده شود.

همچنین باید برای هر نرم‌افزار AMI یک حساب مجزا با رمز عبور قوی ایجاد کرد، IPهای مجاز را با ACL محدود کرد و فقط Permissionهای موردنیاز را در اختیار آن قرار داد.

قرار دادن bindaddr = 0.0.0.0 همراه با پورت باز 5038 و یک حساب دارای read = all و write = all روی سروری که مستقیماً از اینترنت قابل دسترسی است، ریسک امنیتی بالایی ایجاد می‌کند.

تفاوت AMI با AGI و ARI چیست؟

Asterisk چند Interface مختلف دارد و انتخاب رابط مناسب به نوع پروژه بستگی دارد.

AMI بیشتر برای مانیتورینگ، مدیریت Asterisk، دریافت Eventها، کنترل Channelها، Originate تماس و اتصال سیستم تلفنی به نرم‌افزارهای خارجی مناسب است.

AGI یا Asterisk Gateway Interface معمولاً زمانی استفاده می‌شود که یک برنامه خارجی باید هنگام اجرای Dialplan منطق خاصی را روی تماس اجرا کند.

ARI یا Asterisk REST Interface برای ساخت برنامه‌های ارتباطی سفارشی با کنترل عمیق‌تر روی Channel، Bridge، Endpoint و سایر اجزای Asterisk طراحی شده است.

بنابراین AMI و ARI جایگزین کامل یکدیگر نیستند و انتخاب آن‌ها باید براساس معماری نرم‌افزار انجام شود. مستندات رسمی Asterisk نیز AMI را عمدتاً رابطی برای مدیریت Asterisk و Channelهای آن معرفی می‌کنند، در حالی که ARI برای ساخت Communication Applicationهای سفارشی طراحی شده است.

تفاوت AMI با AGI و ARI چیست؟

ارتباط FreePBX و Elastix با AMI

Asterisk به‌خودی‌خود یک محیط مدیریتی گرافیکی کامل برای کاربران نهایی ارائه نمی‌دهد و به همین دلیل در طول سال‌ها ابزارها و Distributionهای مختلفی برای ساده‌تر کردن مدیریت سیستم‌های مبتنی بر Asterisk ایجاد شده‌اند.

FreePBX یکی از شناخته‌شده‌ترین رابط‌های مدیریتی برای سیستم‌های مبتنی بر Asterisk است. همچنین Elastix در نسخه‌های قدیمی خود یک Distribution ارتباطی مبتنی بر Asterisk و ابزارهایی مانند FreePBX بود.

اما این موضوع به آن معنا نیست که هر GUI تلفنی از AMI برای تمام تنظیمات خود استفاده می‌کند. AMI بیشتر برای کنترل Runtime، اجرای Actionها و دریافت Eventها کاربرد دارد و بسیاری از تنظیمات Asterisk همچنان از طریق فایل‌های Configuration، Dialplan و Interfaceهای دیگر انجام می‌شوند.

همچنین 3CX را نباید GUI مخصوص Asterisk دانست؛ 3CX یک پلتفرم تلفنی مستقل است و این بخش در نسخه قدیمی مقاله به‌درستی بیان نشده بود.

استفاده از AMI در نرم افزارهای مدیریت تماس

یکی از کاربردهای واقعی AMI، ایجاد لایه ارتباطی بین هسته تلفنی Asterisk و نرم‌افزار مدیریت تماس است.

برای مثال نرم‌افزار می‌تواند Eventهای تماس را دریافت کند، شماره تماس‌گیرنده را شناسایی کند، اطلاعات مشتری را از CRM بازیابی کند، وضعیت اپراتورها را نمایش دهد و داده‌های موردنیاز برای گزارش تماس را جمع‌آوری کند.

در برخی قابلیت‌های نرم‌افزاری ماهان ویپ نیز ارتباط میان سیستم مدیریت تماس و زیرساخت Asterisk می‌تواند از Interfaceهایی مانند AMI برای دریافت Event و اجرای عملیات موردنیاز استفاده کند. در نتیجه کاربر به‌جای کار مستقیم با محیط فنی Asterisk، اطلاعات تماس و وضعیت اپراتورها را از طریق یک محیط مدیریتی قابل استفاده مشاهده می‌کند.

جمع‌بندی

اگر نرم‌افزار شما باید وضعیت Asterisk را مانیتور کند، Eventهای تماس و Queue را دریافت کند، وضعیت داخلی‌ها را بررسی کند یا Actionهایی مانند Originate را برای سیستم تلفنی ارسال کند، AMI یکی از مهم‌ترین Interfaceهای Asterisk است.

AMI به‌خصوص در توسعه CRM Integration، Click-to-Call، داشبورد مرکز تماس، Popup تماس، مانیتورینگ اپراتورها و سیستم‌های گزارش‌گیری کاربرد دارد. در مقابل، برای ساخت یک برنامه ارتباطی با کنترل عمیق روی Media و Bridge ممکن است ARI انتخاب مناسب‌تری باشد.

در پروژه‌های سازمانی، انتخاب Interface مناسب تنها بخشی از معماری سیستم تلفنی است. اگر هدف شما یکپارچه‌سازی Asterisk، CRM، سیستم تلفنی و ابزارهای مدیریت تماس است، استفاده از یک راهکار جامع ارتباط سازمانی می‌تواند مدیریت این اجزا را ساده‌تر و ساختار ارتباطات سازمان را یکپارچه‌تر کند.

سوالات متداول درباره AMI

AMI چیست؟

AMI مخفف Asterisk Manager Interface و رابط مدیریتی Asterisk برای ارتباط با نرم‌افزارهای خارجی است. از طریق آن می‌توان Eventهای Asterisk را دریافت و Actionهای مدیریتی برای سرور ارسال کرد.

پورت AMI چیست؟

پورت پیش‌فرض AMI در اتصال TCP برابر 5038 است. این پورت را نباید بدون محدودیت امنیتی روی اینترنت عمومی باز کرد.

آیا AMI به‌صورت پیش‌فرض فعال است؟

خیر. براساس تنظیمات پیش‌فرض Asterisk، AMI غیرفعال است و برای استفاده از آن باید enabled = yes در فایل manager.conf تنظیم شود.

تفاوت AMI و ARI چیست؟

AMI بیشتر برای مدیریت، مانیتورینگ، دریافت Eventها و اجرای Action روی Asterisk استفاده می‌شود. ARI برای ساخت برنامه‌های ارتباطی سفارشی و کنترل سطح پایین‌تری از Channelها، Bridgeها و Media طراحی شده است.

آیا می‌توان CRM را به Asterisk متصل کرد؟

بله. AMI یکی از روش‌های متداول برای دریافت Eventهای تماس و ایجاد قابلیت‌هایی مانند Popup مشتری، Click-to-Call و همگام‌سازی اطلاعات تماس با CRM است.

آیا استفاده از Telnet برای AMI امن است؟

برای تست Local ممکن است از Telnet استفاده شود، اما برای ارتباط روی شبکه ناامن مناسب نیست؛ زیرا ارتباط Telnet رمزنگاری نمی‌شود. در محیط Production بهتر است دسترسی AMI محدود شده و در صورت نیاز از TLS، VPN یا شبکه خصوصی استفاده شود.

icon
×
جهت گفتگو در واتساپ کلیک کنید. Whatsapp chat
جهت گفتگو در بله کلیک کنید. Whatsapp chat
پیمایش به بالا