Функція ChanSpy (шпигун) в Elastix (FreePBX) за замовчуванням доступна на номері 555, змінити або відключити її можна в меню Feature Codes (рис.1 і рис.2). За допомогою даної функції можна прослуховувати поточні розмови, для цього набираємо номер 555 і система підключитися до вибраного випадковим чином активному каналу. При цьому ми можемо скористатися наступними доп. функціями:
# - збільшення звуку по колу;
* - перехід до наступного активного каналу, якщо такий є.

Для більшості власників АТС такого функціоналу буде цілком достатньо, хтось і зовсім цим не користується. Однак далеко не всі знають про всі можливості цієї функції, і в цій статті ми не просто опишемо їх, а й докладно розглянемо варіанти налаштувань з прикладами.
Найбільш популярне питання від тих, хто знає про цю функцію - як налаштувати шепіт в Asterisk? Припустимо у вас є менеджер-стажист, що бідує в контролі. Ви хочете засобами АТС організувати підключення до його розмови з потенційним клієнтом більш досвідченого співробітника, який зможе чути переговори, підказувати стажисту, але при цьому клієнт підказки чути не буде. Це, власне, і є шепіт. Щоб реалізувати такий функціонал, необхідно внести корективи в конфігураційний файл extension_custom.conf. Редагувати цей файл можна з командного рядка (версія asterisk повинна бути вище 1.6):
$ nano /etc/asterisk/extension_custom.conf
або в web інтерфейсі Elastix, розділ tools:
Припустимо, що номер у стажиста 101, додамо в файл такий рядок:
exten => 555101,1,ChanSpy(SIP/101,wqv(-1)
після цього зберігаємо файл і робимо reload налаштувань.
Тепер топ-менеджер може набрати номер 555101 і підключитися до лінії 101 в режимі "нашіптування". Підключення відбувається примусово, тобто навіть якщо номер 101 не розмовляє, ми все одно підключаємося і слухаємо "тишу", поки не з'явиться активний дзвінок. Номер 555 101 може бути будь-яким, як ви розумієте, тобто рядок:
exten => *7,1,ChanSpy(SIP/101,wqv(-1)
буде працювати так само, тільки набирати потрібно буде код * 7, тут вже як вашій душі буде завгодно! Таких рядків можна написати кілька, скажімо, у вас 3 стажера з номерами 101,102 і 103, тоді додамо такі рядки:
exten => 555101,1,ChanSpy(SIP/101,wqv(-1)
exten => 555102,1,ChanSpy(SIP/102,wqv(-1)
exten => 555102,1,ChanSpy(SIP/103,wqv(-1)
Як ви помітили, ми використовуємо ключі wqv (-1), вони означають наступне:
w - режим шепоту, ви чуєте обох учасників, вас чує тільки 101;
q - тихий режим, з цим ключем підключення не анонсується звуковим сигналом;
v(+/- n) - гучність шепоту, (-1) означає тихіше на один тон (діапазон від 4 до -4);
Є й інші ключі, їх можна змінювати і комбінувати, наприклад:
W - приватний шепіт, шпигун не чує розмову, але може "прошепотіти" якусь важливу фразу (наприклад офіс менеджер
d - режим ручного перемикання між прослуховуванням: 4 - прослуховування, 5 - шепіт, 6 - обидва канали;
b - можливість прослуховувати канали, які мають двох і більше абонентів, з'єднаних між собою (аудіо-
B - прослуховування та участь в обох каналах;
g - змушує використовувати групу. Читає $ {SPYGROUP} і сканує виклики тільки з цієї групи;
r - дозволяє записувати всю розмову.
Всі інші функції можна вивчити після виведення команди:
*CLI > core show application ChanSpy
А як бути, запитаєте ви, якщо операторів в вашому call центрі 50 або 200, для кожного прописувати рядок досить клопітно, тому ми напишемо свій контекст. Отже, давайте зробимо так, щоб можна було набрати код + номер лінії, яку хочемо слухати. У файлі extensions_custom.conf створимо рядок include => app-custom-chanspy і в кінці запишемо:
[app-custom-chanspy]
exten => _555.,1,Macro(user-callerid,) # определим номер и имя
exten => _555.,n,Answer # ответ
exten => _555.,n,NoCDR # без записи в CDR
exten => _555.,n,Wait(1) # затримка 1 секунда
exten => _555.,n,ChanSpy(SIP/${EXTEN:3},qdv(-1) # опис функції
exten => _555.,n,Hangup # звільняємо лінію
Зберігаємося і робимо reload. Тепер після набору 555 і будь-якого номера, наприклад 101 (тобто набираємо 555 101), система підключить нас до лінії 101 і, завдяки ключу d, ви зможете перемикатися між режимами цифрами 4,5,6.
Якщо необхідно моніторити тільки певні лінії, наприклад номер 200, тоді діалплан буде виглядати так:
[app-custom-chanspy]
exten => _555.,1,Macro(user-callerid,)
exten => _555.,n,Answer
exten => _555.,n,NoCDR
exten => _555.,n,Wait(1)
exten => _555.,n,ChanSpy(SIP/200,qdv(-1)
exten => _555.,n,Hangup
Таким чином, система дозволить підключитися тільки до номера 200, набравши 555200, інші номери будуть нам недоступні.
Щоб дозволити користуватися функцією тільки c певних номерів, необхідно прописати:
[app-custom-chanspy]
exten => _555./_30X,1,Macro(user-callerid,)
exten => _555./_30X,n,Answer
exten => _555./_30X,n,NoCDR
exten => _555./_30X,n,Wait(1)
exten => _555./_30X,n,ChanSpy(SIP/${EXTEN:3},qdv(-1)
exten => _555./_30X,n,Hangup
в такому випадку цей діалплан буде доступний тільки номерами 300-309, іншим же при спробі набору 555 + номер буде програно повідомлення про неможливість набору номера!
Аналогічно можна зробити ще варіанти:
exten => _555./301,1,Macro(user-callerid,) - дозволено підключатися з номера 301
exten => _555./_[23]10,1,Macro(user-callerid,) - дозволено номерами 210 і 310
exten => _555./_[3456789]XX,1,Macro(user-callerid,) - дозволено номерами 300-999
Для безпеки і попередження несанкціонованих "шпигунів" можна встановити пароль на користування функцією ChanSpy:
[app-custom-chanspy]
exten => _555.,1,Macro(user-callerid,)
exten => _555.,n,Authenticate(847596)
exten => _555.,n,Answer
exten => _555.,n,NoCDR
exten => _555.,n,Wait(1)
exten => _555.,n,ChanSpy(SIP/${EXTEN:3},qdv(-1)
exten => _555.,n,Hangup
тепер, щоб скористатися функцією прослуховування, необхідно буде ввести пароль 847596. При цьому необхідно пам'ятати про те, що є стандартний код 555, його необхідно відключити в налаштуваннях Feature Codes, або додати окремо захист на нього в extension_custom.conf:
; Password Protect Channel Spy - захист паролем
exten => 555,1,Authenticate(12121,5)
exten => 555,n,Goto(app-chanspy,${EXTEN},1)
exten => 555,n,Hangup
До речі, при бажанні на різні функції можна призначити різні коди, наприклад:
[app-custom-chanspy]
; просте прослуховування
exten => _550.,1,Macro(user-callerid,)
exten => _550.,n,Answer
exten => _550.,n,NoCDR
exten => _550.,n,Wait(1)
exten => _550.,n,ChanSpy(SIP/${EXTEN:3},qv(-1)
exten => _550.,n,Hangup
; шепот
exten => _551.,1,Macro(user-callerid,)
exten => _551.,n,Answer
exten => _551.,n,NoCDR
exten => _551.,n,Wait(1)
exten => _551.,n,ChanSpy(SIP/${EXTEN:3},wqv(-1)
exten => _551.,n,Hangup
;оба канала
exten => _552.,1,Macro(user-callerid,)
exten => _552.,n,Answer
exten => _552.,n,NoCDR
exten => _552.,n,Wait(1)
exten => _552.,n,ChanSpy(SIP/${EXTEN:3},qBv(-1)
exten => _552.,n,Hangup
; ручний вибір режимів
exten => _553.,1,Macro(user-callerid,)
exten => _553.,n,Answer
exten => _553.,n,NoCDR
exten => _553.,n,Wait(1)
exten => _553.,n,ChanSpy(SIP/${EXTEN:3},qdv(-1)
exten => _553.,n,Hangup
Якщо вам все-таки не вистачає безпеки для налаштованої функції, можна налаштувати повідомлення на e-mail подій користування chanspy. Кожен раз, коли хтось набирає чарівний номер, вам на пошту приходить повідомлення хто дзвонив і коли. Таким чином, ви зможете моніторити використання даної функції. У складений раніше діалплан необхідно додати такий рядок:
exten => 555,n,System(/bin/echo «Номер: ${CALLERID(num)}\nВремя вызова: ${STRFTIME(${EPOCH},,%H:%M:%S)}» | mail -s «Звонок на ChanSpy» [email protected])
На прикладі це буде виглядати так:
[app-custom-chanspy]
exten => _555.,1,Macro(user-callerid,)
exten => _555.,n,Authenticate(847596)
exten => _555.,n,Answer
exten => _555.,n,NoCDR
exten => _555.,n,System(/bin/echo «Номер: ${CALLERID(num)}\nВремя вызова: ${STRFTIME(${EPOCH},,%H:%M:%S)}» | mail -s «Звонок на ChanSpy» [email protected])
exten => _555.,n,Wait(1)
exten => _555.,n,ChanSpy(SIP/${EXTEN:3},qdv(-1)
exten => _555.,n,Hangup
Ну ось, власне, і все! Успіхів!
8 думки про “Asterisk настройка ChanSpy”
Спасибо! Отличная статья, очень помогли!! Успехов 🙂
Спасибо! Статья супер, давно искал подробную статью про chanspy. Спасибо большое!
Спасибо за столь подробное описание!!!
Спасибо за статью!
Единственное чего я не понимаю, так это как пользоваться параметром «g» . Если не сложно, приведите пример.
Владимир, спасибо за отзыв. Использование опции g позволяет нам разбить extensions на группы. Для этого нужно каждому присвоить значение ${SPYGROUP}. Например операторы — группа 1, технический отдел — группа 2, руководители — группа — 3 и т.д. Таким образом мы изолируем группы от сканирования и прослушивания. Это актуально для крупных call центров.
Добрый день, подскажите пожалуйста как необходимо присвоить ${SPYGROUP} для определенных групп? Т.е у меня есть операторы группы 1 и группы 2, в эти группы необходимо назначить определенные extensions. Спасибо Вам заранее!
Как-то так:
;Dialing either 8810, 8820 and 8830 will all match this SIP call
exten => 1000,1,Set(SPYGROUP=10:20:30)
exten => 1000,2,Dial(SIP/1000@somewhere)
exten => _88XX,1,Chanspy(|g(${EXTEN:2}))
g — продолжить выполнение диалплана на следующем приоритете в текущем расширении, если канал назначения вешает трубку.