...

افزونه، آموزش کامل شنود تماس‌ با حالت‌های حرفه‌ای در Asterisk و Issabel

شنود در ایزابل و استریسک و

فهرست مطالب

زمان مطالعه: 2 دقیقه

آخرین ویرایش خرداد 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

  1. دو داخلی ایجاد کنید (مثلاً 1001 و 1002).

  2. با داخلی 1001 به 1002 تماس بگیرید.

  3. با داخلی مدیر شماره‌گیری کنید: 301001 یا 321001.

  4. حالت شنود موردنظر فعال می‌شود.


📌 نکات مهم و حرفه‌ای

  • استفاده از پیشوندهای 30 تا 35 برای انواع شنود

  • امکان اضافه کردن شرط‌های بیشتر مثل محدودیت زمان، سطح دسترسی و…

  • استفاده از Hangup() در پایان برای قطع خودکار شنود


🔁 مقالات مرتبط


❓ FAQ – سوالات متداول

🔹 آیا این روش فقط روی SIP کار می‌کند؟

خیر، با تغییر SIP/ به PJSIP/ در صورتی که داخلی‌ها روی PJSIP باشند، قابل استفاده است.

🔹 آیا می‌توان به جای شماره داخلی از Channel ID استفاده کرد؟

بله، ولی باید ChanSpy را برای کانال خاصی با فیلتر دقیق اجرا کرد که پیچیده‌تر است.

🔹 آیا امکان محدودسازی شنود به ادمین وجود دارد؟

بله، با استفاده از تابع CallerID یا CheckGroup می‌توان سطح دسترسی ایجاد کرد.


🧩 نتیجه‌گیری

این مقاله یک ابزار شنود کامل و حرفه‌ای در Asterisk و Issabel ارائه کرد که می‌توان آن را در پروژه‌های واقعی استفاده کرد. پیشنهاد می‌کنم آن را تست کرده و در سناریوهای واقعی‌تان پیاده‌سازی کنید.