Функция 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 не разговаривает, мы все равно подключаемся и слушаем “тишину”, пока не появится активный звонок. Номер 555101 может быть любым, как вы понимаете, т.е. строка:
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 (т.е. набираем 555101), система подключит нас к линии 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 — продолжить выполнение диалплана на следующем приоритете в текущем расширении, если канал назначения вешает трубку.