Запрос ЦеныЗапрос Цены
Онлайн ЧатОнлайн Чат
Зона КлиентовЗона Клиентов
КонтактыКонтакты
Скрыть
Live Support
Sales department
Technical Support
Процедура блокировки общих шаблонов при помощи FreePBX и asterisk

Краткое содержание:

Чего мы хотим достичь: блокировать все звонки с мобильных телефонов местного оператора, а также каждый раз когда на нашим DID звонят с telco.network, необходимо отсылать сообщение об этом на электронную почту.

Что у нас есть на нашей АТС: Asterisk 1.6.2.X и FreePBX 2.8 установленные с основными модулями; поискав в интернете модули для asterisk, мы нашли только один связанный модуль, который позволяет заносить в чёрный список, но он не поддерживает блокировку звонков по шаблону CallerID, в этом случае пришлось бы добавлять каждый номер индивидуально, это был бы большой список, и на это ушло бы много времени.

Что мы сделали: мы решили изменить модуль Blacklist (чёрный список) на уровне Asterisk, попросту говоря, мы использовали его возможность (логику модуля), чтобы он работал до всех других контекстов на входящих звонках в [app-blacklist-check]. Мы изменили только этот контекст, без того, чтобы изменить что-либо на уровне веб-скриптов, поэтому его можно легко изменить или убрать в случае необходимости.

Как это работает: мы полностью переписали контекст [app-blacklist-check]. Мы фактически добавили проверку CallerID, в случае если CallerID совпадал с нашим шаблоном, мы вызываем скрипт, который затем отошлёт сообщение о событии, с информацией о том, кому и когда звонили, и на какой DID был совершён звонок.

Шаг за шагом:

  • Первый шаг, который необходимо совершить, когда мы работаем с входящим звонком [app-blacklist-check] это проверить, если определённый номер соответствует шаблону, и даже если он соответствует, то нам необходимо проверить заранее определённый список разрешённых звонков, так как у нас может в данном случае быть исключение.
  • Для того чтобы проверить вышеупомянутую ситуацию, мы можем написать для нас простой скрипт, /root/bin/did_test.sh, который возвращает 1 в случае когда CallerID НЕ доступен в списке и должен быть заблокирован, и 0 для других случаев. В случае, когда этот номер должен быть заблокирован, мы проведём процедуру следующим образом: мы перейдём на приоритет n (Blacklist) и в этот момент скрипт /root/bin/send_block_notify будет запущен, что приведёт к тому, что создастся сообщение с информацией о том, что DID был заблокирован, дата и время звонка и номер абонента.
  • После этого в дело вступит приложение Zapateller, чьё предназначение заключается в том, чтобы блокировать телемаркетеров, послав специальный звук, СИТ-тон (специальный информационный тон). В нашем случае он применяется для сообщения о том, что звонок не был принят.
  • Для того чтобы переписать часть модуля asterisk, вам необходимо вставить весь контекст в файл /etc/asterisk/extensions_override_freepbx.conf. Последующий пример заблокирует все звонки, которые соответствуют следующему шаблону: 3737[89]XXXXXX. Если вам необходимо заблокировать больше шаблонов, советуем вам добавлять те же приставки для каждого шаблона, который необходимо проверить.

 


exten => s/_3737[89]XXXXXX,1,Answer()                                                                                           
exten => s/_3737[89]XXXXXX,n,Wait(1)                                                                                            
;
;Проверка DID на случай, если мы должны проверить его или нет
;
exten => s/_3737[89]XXXXXX,n,Set(result=${SHELL(/root/bin/did_test.sh ${CALLERID(dnid)} ${CALLERID(num)} ) }  )
;
;Проверка если надо заблокировать звонок.
;
exten => s/_3737[89]XXXXXX,n,GotoIf($["${result}" = "1"]?blacklist)                                                             
exten => s/_3737[89]XXXXXX,n(noblock),Return()                                                                                  
;
; Блокировка звонящего 
;
exten => s/_3737[89]XXXXXX,n(blacklist),System(/root/bin/send_block_notify.sh support@example.com ${CALLERID(dnid)} ${CALLERID(num)})  
;
;Закомментируйте это, если вы не хотите, чтоб ваши звонки были заблокированы 
;
exten => s/_3737[89]XXXXXX,n,Zapateller()                                                                            
exten => s/_3737[89]XXXXXX,n,Playback(ss-noservice)                                                                             
exten => s/_3737[89]XXXXXX,n,Hangup

 

  • Пример полезен в плане того, что скрипт /root/bin/send_block_notify.sh, который должен отослать сообщение о DID получит три аргумента: первый аргумент это адрес электронной почты, на который надо отослать сообщение, второй это ${CALLERID(dnid)} – то, что это переменная позволит нам увидеть набранный номер, и наконец ${CALLERID(num)}), который определяет сам номер звонящего.

В заключение: можно смело сказать, что FreePBX является мощным и очень хорошо настраиваемым продуктом, даже если мы не потрудились написать новый модуль, мы можем легко изменить модуль с похожим функционалом, чтобы обеспечить необходимое поведение, все действия были проведены на уровне asterisk, без какого-либо опыта в программировании модулей и структуры.

Запросить цену
Заполните форму и мы свяжемся с Вами в ближайшее время
Вход для клиентов
Система запросов и другие полезные сервисы для наших клиентов
Свяжитесь с нами
Мы с удовольствием ответим на все ваши вопросы