Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Занимаюсь разработкой MikoPBX - простой в настойке АТС на базе Asterisk 16.
Недавно решили добавить функционал оповещения о записи разговора. Задачу сформулировали следующим образом:
Оповещение должно срабатывать однократно, сразу после соединения клиента с сотрудником компании. Оповещение должны слышать все участники звонка.
Подключение модулей
Было принято решение использовать функционал приложения ChanSpy.
Для начала следует убедиться, что необходимые модули подгружается при начале работы asterisk. Добавим в modules.conf :
load => app_chanspy.so
load => app_originate.so
Реализация dialplan
Путь к файлу записи оповещения опишем в extensions.conf, в секции global:
[globals]
PBX_REC_ANNONCE=/var/mikopbx/media/custom/alert
Опишем dialplan для оповещений
[annonce-spy]
exten => _.!,1,ExecIf($[ "${EXTEN}" == "h" ]?Hangup()
same => n,Set(chan=PJSIP/${EXTEN})
; Проверка на существование канала.
same => n,ExecIf($["${CHANNELS(${chan})}x" != "x"]?Chanspy(${chan},uBq))
same => n,Hangup()
[annonce-play]
exten => annonce,1,Answer()
; Воспроизведение медиа файла
same => n,Playback(${PBX_REC_ANNONCE})
same => n,Hangup()
Теперь, чтобы запустить оповещения достаточно знать имя канала и выполнить:
Originate(Local/${chan}@annonce-spy,exten,annonce-playback-in,annonce,1,10,a);
опция "a" - указывает на то, что приложение будет выполнено асинхронно
"chan" - в переменной необходимо описать имя канала, без описания технологии.
Local/${chan}@annonce-spy - запускаем приложение Chanspy
"10" - как долго пытаться дозвониться до ${chan}@annonce-spy, в данном примере не имеет значения
exten,annonce-playback-in,annonce,1 - направляем в контекст с приложением Playback
Дополним dialplan входящих. В приложении Dial задействуем опцию "U" для перехвата момента соединения абонентов:
[incoming]
exten => _XXX,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})},60,U(dial-answer))
[dial-answer]
exten => _[0-9*#+]!,1,Set(chan=${CUT(CHANNEL,/,2)})
same => n,Originate(Local/${chan}@annonce-spy,exten,annonce-play,annonce,1,2,a);
same => n,return
Теперь осталось протестировать входящие. Аналогично можно реализовать оповещение и для исходящих звонков.
Заключение
Относительно просто, без использования AGI, только на основе приложений dialplan возможно реализовать оповещение о записи разговоров.
Как ни странно, в сети довольно мало информации на эту тему.
Надеюсь эта статья будет полезна читателю.
Полезные ссылки
wiki.asterisk.org
Application_ChanSpy
Application_Dial
Application_Originate
https://github.com/mikopbx/Core