آخرین ویرایش خرداد 17, 1404 حامد کوه فلاح
🧭 مقدمه
در پروژههای VoIP بهخصوص مراکز تماس، نیاز به شنود تماسها (مانیتورینگ) وجود دارد.
مدیران، سرپرستان یا ناظرین کیفیت تماس، باید بتوانند تماسها را با انواع روشها شنود کنند:
-
فقط شنود (Listen)
-
صحبت فقط با یکی از طرفین (Whisper)
-
ورود کامل به تماس (Barge-in)
در این آموزش، با استفاده از برنامه قدرتمند ChanSpy() در Asterisk، چندین حالت هوشمند شنود تماس را پیادهسازی میکنیم.
🔧 ابزار اصلی: برنامه ChanSpy در Asterisk
ChanSpy() برنامهای داخلی در Asterisk است که امکان مانیتور کردن کانالهای فعال را با ویژگیهای مختلف فراهم میکند:
| پارامتر | عملکرد |
|---|---|
q | بدون صدا هنگام شروع شنود |
w | نجوا به یک سمت تماس |
W | نجوا بدون شنیدن صدای طرف مقابل |
B | ورود کامل به تماس |
d | تغییر حالت شنود با DTMF |
o | شنود یکطرفه فقط صدای خروجی |
E | فیلتر فقط کانالهای خاص مانند SIP |
🛠 سناریو و شمارهگیری
ما چندین داخلی خاص ایجاد میکنیم که مدیر میتواند با شمارهگیری آنها تماسها را شنود کند:
| شمارهگیری | حالت شنود | مثال |
|---|---|---|
301001 | شنود کامل | شنود تماس داخلی 1001 |
311001 | فقط صدای خروجی | شنود فقط صدای خروجی داخلی 1001 |
321001 | Whisper | صحبت فقط با یکی از طرفین تماس |
331001 | Private Whisper | صحبت بدون شنیدن صدا |
341001 | Barge-in | ورود به تماس دو طرفه |
351001 | تغییر حالت شنود با DTMF | 4:شنود، 5: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
-
دو داخلی ایجاد کنید (مثلاً 1001 و 1002).
-
با داخلی 1001 به 1002 تماس بگیرید.
-
با داخلی مدیر شمارهگیری کنید:
301001یا321001. -
حالت شنود موردنظر فعال میشود.
📌 نکات مهم و حرفهای
-
استفاده از پیشوندهای 30 تا 35 برای انواع شنود
-
امکان اضافه کردن شرطهای بیشتر مثل محدودیت زمان، سطح دسترسی و…
-
استفاده از
Hangup()در پایان برای قطع خودکار شنود
🔁 مقالات مرتبط
❓ FAQ – سوالات متداول
🔹 آیا این روش فقط روی SIP کار میکند؟
خیر، با تغییر SIP/ به PJSIP/ در صورتی که داخلیها روی PJSIP باشند، قابل استفاده است.
🔹 آیا میتوان به جای شماره داخلی از Channel ID استفاده کرد؟
بله، ولی باید ChanSpy را برای کانال خاصی با فیلتر دقیق اجرا کرد که پیچیدهتر است.
🔹 آیا امکان محدودسازی شنود به ادمین وجود دارد؟
بله، با استفاده از تابع CallerID یا CheckGroup میتوان سطح دسترسی ایجاد کرد.
🧩 نتیجهگیری
این مقاله یک ابزار شنود کامل و حرفهای در Asterisk و Issabel ارائه کرد که میتوان آن را در پروژههای واقعی استفاده کرد. پیشنهاد میکنم آن را تست کرده و در سناریوهای واقعیتان پیادهسازی کنید.










