Ограничение вызовов на определенные группы внутренних номеров. Разграничение для различных звонящих. Использование AstDB, сервисные коды добавления запретов/разрешений
Зачастую возникает необходимость запретить/разрешить вызовы на определенную группу номеров, стандартный функционал FreePBX не всегда позволяет сделать необходимое, либо это неудобно/долго. В данной статье рассмотрим вариант запрета вызовов на определенные группы внутренних номеров, с возможностью добавлять/удалять новые направления посредством сервисного кода. В статье рассмотрим: Работу с диалпланом Asterisk Работу с MySQL Создание своих сервисных кодов Управление […]
Зачастую возникает необходимость запретить/разрешить вызовы на определенную группу номеров, стандартный функционал FreePBX не всегда позволяет сделать необходимое, либо это неудобно/долго. В данной статье рассмотрим вариант запрета вызовов на определенные группы внутренних номеров, с возможностью добавлять/удалять новые направления посредством сервисного кода.
В статье рассмотрим:
- Работу с диалпланом Asterisk
- Работу с MySQL
- Создание своих сервисных кодов
- Управление базой вручную
- Работу с ODBC и AstDB
Информацию по установке ODBC (если не установлен), можно найти в статье.
Рассмотрим стандартный способ запрета вызовов на группу номеров по маске.
Обычно в стандартные контексты включается и custom контекст, воспользуемся этим, чтобы управлять нужными вызовами. В контекст from-internal-custom пропишем:
exten => _10X/_10X,1,Hangup()
Этой строкой мы просто запретили вызовы между внутренними номерами из пула 100-109.
Но что если ограничение необходимо не на весь пул, а например, на отдельные номера из него. Писать по строке для каждого номера не очень удобно, хоть и не запрещается.
Рассмотрим вариант с базой:
В MySQL добавляем таблицу (добавляем в стандартную базу Asteriskcdrdb):
Create table blcklstin (numto varchar (5) NOT NULL, numfrom varchar(5) NOT NULL);
И добавляем записи (по желанию и для проверки).
Создаем функцию, отдающую номер по номеру направления. В файл «/etc/asterisk/func_odbc.conf» прописываем:
[BLCK_LST]
dsn=asteriskcdrdb
readsql=SELECT numfrom FROM blcklstin WHERE numto='${ARG1}' and numfrom='${ARG2}';
В диалплан для проверки:
exten => _10X,1,Set(blcklst_num=${ODBC_BLCK_LST(${EXTEN},${CALLERID(num)})});Проверяем есть ли такая пара в базе (номер целевой, номер звонящего)
same => n,NoOp(${blcklst_num});Вывод в консоль результата (если есть будет номер целевой, но можете изменить на другое значение)
same => n,GotoIf($["${blcklst_num}" != ""]?end);Если пара есть, отправляем на сброс вызова
same => n,Goto(from-internal-additional,${EXTEN},1);Если пары нет, отправляем далее на вызов внутреннего номера
same => n(end),Hangup()
Блокировку реализовали, необходимо предусмотреть механизм добавления/удаления пар разрешенных/заблокированных. Для этого сначала нужно предусмотреть механизм абсолютного разрешения, в случае, если кто-либо добавит номер из этого пула, вызов все равно должен пройти.
Это проще сделать с помощью AstDB, добавляем запись через консоль CLI:
test*CLI> database put blcklst_accepted 102 yes
И изменяем диалплан:
exten => _10X,1,Set(blcklst_num=${ODBC_BLCK_LST(${EXTEN},${CALLERID(num)})})
same => n,NoOp(${blcklst_num})
same => n,GotoIf($[${DB_EXISTS(blcklst_accepted/${CALLERID(num)})}]?dial);Проверка наличия номера звонящего в разрешенных, если есть, отправка сразу на вызов
same => n,GotoIf($["${blcklst_num}" != ""]?end)
same => n(dial),Goto(from-internal-additional,${EXTEN},1)
same => n(end),Hangup()
Реализуем сервисный код добавления записей в базу, для этого сначала напишем функции в ODBC (добавления и удаления).
exten => _*01*1XX*1XX,1,Set(numto=${CUT(EXTEN,\*,3)})
same => n,Set(numfrom=${CUT(EXTEN,\*,4)})
same => n,NoOp(=${numto}=${numfrom})
same => n,Set(ODBC_BLCK_LST_INS(${numto},${numfrom})=1)
same => n,Hangup()
exten => _*02*1XX*1XX,1,Set(numto=${CUT(EXTEN,\*,3)})
same => n,Set(numfrom=${CUT(EXTEN,\*,4)})
same => n,NoOp(=${numto}=${numfrom})
same => n,Set(ODBC_BLCK_LST_DEL(${numto},${numfrom})=1)
same => n,Hangup()
Также добавляем сервисные коды добавления/удаления разрешений.
exten => _*03*1XX,1,Set(numfrom=${CUT(EXTEN,\*,3)})
same => n,Set(DB(blcklst_accepted/${numfrom})=yes)
same => n,Hangup()
exten => _*04*1XX,1,Set(numfrom=${CUT(EXTEN,\*,3)})
same => n,Set(del_num=${DB_DELETE(blcklst_accepted/${numfrom})})
same => n,Hangup()
exten => _*03*1XX,1,Set(numfrom=${CUT(EXTEN,\*,3)}) same => n,Set(DB(blcklst_accepted/${numfrom})=yes) same => n,Hangup() exten => _*04*1XX,1,Set(numfrom=${CUT(EXTEN,\*,3)}) same => n,Set(del_num=${DB_DELETE(blcklst_accepted/${numfrom})}) same => n,Hangup()
exten => _*03*1XX,1,Set(numfrom=${CUT(EXTEN,\*,3)})
same => n,Set(DB(blcklst_accepted/${numfrom})=yes)
same => n,Hangup()
exten => _*04*1XX,1,Set(numfrom=${CUT(EXTEN,\*,3)})
same => n,Set(del_num=${DB_DELETE(blcklst_accepted/${numfrom})})
same => n,Hangup()
Остались вопросы?
Я - Компаниец Никита, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.