🧭 مقدمه
در پروژههای VoIP بهخصوص مراکز تماس، نیاز به شنود تماسها (مانیتورینگ) وجود دارد.
مدیران، سرپرستان یا ناظرین کیفیت تماس، باید بتوانند تماسها را با انواع روشها شنود کنند:
-
فقط شنود (Listen)
-
صحبت فقط با یکی از طرفین (Whisper)
-
ورود کامل به تماس (Barge-in)
در این آموزش، با استفاده از برنامه قدرتمند ChanSpy()
در Asterisk، چندین حالت هوشمند شنود تماس را پیادهسازی میکنیم.
🔧 ابزار اصلی: برنامه ChanSpy در Asterisk
ChanSpy()
برنامهای داخلی در Asterisk است که امکان مانیتور کردن کانالهای فعال را با ویژگیهای مختلف فراهم میکند:
پارامتر | عملکرد |
---|---|
q | بدون صدا هنگام شروع شنود |
w | نجوا به یک سمت تماس |
W | نجوا بدون شنیدن صدای طرف مقابل |
B | ورود کامل به تماس |
d | تغییر حالت شنود با DTMF |
o | شنود یکطرفه فقط صدای خروجی |
E | فیلتر فقط کانالهای خاص مانند SIP |
🛠 سناریو و شمارهگیری
ما چندین داخلی خاص ایجاد میکنیم که مدیر میتواند با شمارهگیری آنها تماسها را شنود کند:
شمارهگیری | حالت شنود | مثال |
---|---|---|
۳۰۱۰۰۱ | شنود کامل | شنود تماس داخلی ۱۰۰۱ |
۳۱۱۰۰۱ | فقط صدای خروجی | شنود فقط صدای خروجی داخلی ۱۰۰۱ |
۳۲۱۰۰۱ | Whisper | صحبت فقط با یکی از طرفین تماس |
۳۳۱۰۰۱ | Private Whisper | صحبت بدون شنیدن صدا |
۳۴۱۰۰۱ | Barge-in | ورود به تماس دو طرفه |
۳۵۱۰۰۱ | تغییر حالت شنود با DTMF | ۴:شنود، ۵:Whisper و… |
📄 پیادهسازی گامبهگام در Issabel
🔹 ۱. ویرایش فایل Dialplan
nano /etc/asterisk/extensions_custom.conf
🔹 ۲. اضافه کردن include در بخش اصلی
[from-internal-custom]
include => voipiran-monitor
🔹 ۳. اضافه کردن Dialplan شنود حرفهای
[voipiran-monitor]
; شنود کامل تماس
exten => _30X.,1,ChanSpy(SIP/${EXTEN:2},Eq)
exten => _30X.,n,Hangup()
; شنود فقط خروجی تماس (یکطرفه)
exten => _31X.,1,ChanSpy(SIP/${EXTEN:2},Eqo)
exten => _31X.,n,Hangup()
; Whisper (صحبت با یکی از طرفین)
exten => _32X.,1,ChanSpy(SIP/${EXTEN:2},Eqw)
exten => _32X.,n,Hangup()
; Private Whisper (نجوا بدون شنود صدای طرف)
exten => _33X.,1,ChanSpy(SIP/${EXTEN:2},EqW)
exten => _33X.,n,Hangup()
; Barge-in (ورود کامل به تماس)
exten => _34X.,1,ChanSpy(SIP/${EXTEN:2},EqB)
exten => _34X.,n,Hangup()
; تغییر حالت در حین شنود با DTMF
exten => _35X.,1,ChanSpy(SIP/${EXTEN:2},Eqd)
exten => _35X.,n,Hangup()
✅ اگر از PJSIP استفاده میکنید: SIP/
را با PJSIP/
جایگزین کنید.
▶️ تست نهایی در Issabel
-
دو داخلی ایجاد کنید (مثلاً ۱۰۰۱ و ۱۰۰۲).
-
با داخلی ۱۰۰۱ به ۱۰۰۲ تماس بگیرید.
-
با داخلی مدیر شمارهگیری کنید:
۳۰۱۰۰۱
یا۳۲۱۰۰۱
. -
حالت شنود موردنظر فعال میشود.
📌 نکات مهم و حرفهای
-
استفاده از پیشوندهای ۳۰ تا ۳۵ برای انواع شنود
-
امکان اضافه کردن شرطهای بیشتر مثل محدودیت زمان، سطح دسترسی و…
-
استفاده از
Hangup()
در پایان برای قطع خودکار شنود
🔁 مقالات مرتبط
❓ FAQ – سوالات متداول
🔹 آیا این روش فقط روی SIP کار میکند؟
خیر، با تغییر SIP/
به PJSIP/
در صورتی که داخلیها روی PJSIP باشند، قابل استفاده است.
🔹 آیا میتوان به جای شماره داخلی از Channel ID استفاده کرد؟
بله، ولی باید ChanSpy را برای کانال خاصی با فیلتر دقیق اجرا کرد که پیچیدهتر است.
🔹 آیا امکان محدودسازی شنود به ادمین وجود دارد؟
بله، با استفاده از تابع CallerID
یا CheckGroup
میتوان سطح دسترسی ایجاد کرد.
🧩 نتیجهگیری
این مقاله یک ابزار شنود کامل و حرفهای در Asterisk و Issabel ارائه کرد که میتوان آن را در پروژههای واقعی استفاده کرد. پیشنهاد میکنم آن را تست کرده و در سناریوهای واقعیتان پیادهسازی کنید.