گاهی اوقات نیاز دارید در طول یک تماس، یک اسکریپت یا دستور خارجی در سیستمعامل اجرا شود. مثلاً ارسال لاگ تماس به یک سیستم دیگر، اجرای یک دستور لینوکسی یا ارسال پیام به نرمافزار مدیریت مشتریان (CRM). برای این کار، برنامهی بسیار کاربردی System()
در استریسک مورد استفاده قرار میگیرد.
در این مقاله، نحوه استفاده از این برنامه را با مثالهای واقعی و کاربردی بررسی خواهیم کرد.
معرفی برنامه System در استریسک
برنامهی System()
به شما این امکان را میدهد که هر دستور لینوکسی را از داخل Dialplan استریسک اجرا کنید. این ابزار بسیار قدرتمند است و اگر به درستی استفاده شود، میتواند یک پل ارتباطی عالی بین Asterisk و سایر سرویسها یا اسکریپتها باشد.
ساختار کلی
exten => 1000,1,System(دستور لینوکس)
مثال ساده: ایجاد فایل هنگام تماس
[voipiran
exten => 1000,1,Answer(
exten => 1000,n,System(touch /tmp/incoming_call_${UNIQUEID}
exten => 1000,n,Playback(hello-world
exten => 1000,n,Hangup()
در این مثال، به محض پاسخ تماس، یک فایل متنی با نام منحصربهفرد در مسیر /tmp
ایجاد میشود. این تکنیک در لاگگذاری یا ردگیری تماسها بسیار مفید است.
مثال کاربردیتر: ثبت اطلاعات تماس در یک فایل
[voipiran]
exten => 2000,1,Answer()
exten => 2000,n,System(echo "تماس از ${CALLERID(num)} به ${EXTEN} در تاریخ ${STRFTIME(${EPOCH},,%Y-%m-%d %H:%M:%S)}" >> /var/log/asterisk/call_log.txt
exten => 2000,n,Playback(vm-goodbye)
exten => 2000,n,Hangup()
در این مثال، اطلاعات تماس در یک فایل متنی به نام call_log.txt
ثبت میشود. با این روش، بهسادگی میتوانید یک سیستم گزارشگیری ساده پیادهسازی کنید.
استفاده از System برای اجرای اسکریپتهای Bash یا PHP
فرض کنید اسکریپتی به نام notify.sh
در مسیر /usr/local/bin
دارید که به شما پیام میدهد.
[voipiran]
exten => 3000,1,Answer()
exten => 3000,n,System(/usr/local/bin/notify.sh ${CALLERID(num)})
exten => 3000,n,Playback(thank-you)
exten => 3000,n,Hangup()
این قابلیت میتواند برای اتصال به سرویسهایی مانند تلگرام، پیامک، ایمیل، یا CRM بسیار مؤثر باشد.
نکات امنیتی مهم
-
هیچگاه اطلاعات حساس را مستقیم به دستور System ارسال نکنید.
-
فایلها و اسکریپتهای اجرایی را از قبل بررسی و محافظت کنید.
-
استفاده از AppArmor یا SELinux برای محدود کردن دسترسی توصیه میشود.
اتصال به کانتکستهای ایزابل
در سیستم ایزابل، برای اجرای این دستور باید کانتکست شما در from-internal-additional
گنجانده شود:
[from-internal-additional]
include => voipiran