Гаджиев Тамерлан
17.03.2022
3052989

Разграничения вызовов на мобильные телефоны по регионам

В этой статье мы рассмотрим способ разрешить или запретить вызовы на мобильные номера в каких-либо  регионах. Для примера разрешим звонки только на мобильные номера в Москве и Московской области. Установка зависимостей Для начала нам потребуется: python3 (я использую версию 3.6) библиотека asterisk  и pyst2 Для проверки какой версии python у вас стоит, введите: Для установка […]

В этой статье мы рассмотрим способ разрешить или запретить вызовы на мобильные номера в каких-либо  регионах.

Для примера разрешим звонки только на мобильные номера в Москве и Московской области.

  1. Установка зависимостей

Для начала нам потребуется:

  • python3 (я использую версию 3.6)
  • библиотека asterisk  и pyst2

Для проверки какой версии python у вас стоит, введите:

python3 -V
рис. 1

Для установка библиотек Asterisk  и pyst2  выполните следующую команду:

pip3 install asterisk pyst2
рис. 2

(у меня они уже установлены)

Что бы проверить что эти библиотеки поставились можно ввести команду:

pip3 list
рис. 3
  1. Написание кода и dialplan

создаем файл notaccept.sh в папке /var/lib/asterisk/agi-bin/

touch /var/lib/asterisk/agi-bin/notaccept.sh

после чего открываем файл и пишим туда следующее

nvim /var/lib/asterisk/agi-bin/notaccept.sh
#! /usr/bin/env python3.6
# -*- coding: utf-8 -*-

import requests
from asterisk.agi import *

agi = AGI()

num = str(agi.env["agi_callerid"])
phone_number = str(agi.env["agi_extension"])


citys = ['г. Москва и Московская область', 'г. Москва', 'Московская область']

url = "http://num.voxlink.ru/get/"

querystring = {"num":phone_number, "field": "region"}

payload = ""
city = requests.request("GET", url, data=payload, params=querystring)


if city.text in citys:
	agi.set_variable('num', "yes")
else:
	agi.set_variable('num', "no")
рис. 4

Что мы тут написали:

Мы получаем переменную agi_extension которую записываем в переменную phone_number, в ней содержится номер, который набрал пользователь. Далее мы создаем массив citys, в котором содержатся города и регионы, в которые разрешено звонить. После чего мы делаем запрос к api num.voxlink.ru передавая в качестве параметров номер телефона и слово region, для того чтобы нам вернулся только регион. После чего полученный регион мы проверяем  есть ли он в нашем массиве, если есть мы просто в астериск возвращаем переменную “num”  со значением “yes”, а иначе мы вернём переменную “num” со значением “no”.

Далее переходим к dialplan:

открываем файл /etc/asterisk/extensions.conf, либо если у вас freepbx  то  /etc/asterisk/extensions_custom.conf

[not-accept]
exten => _X.,1,AGI(notaccept.sh)
same => n,GotoIf("${num}" = "yes"?yes:no)
same => n(yes),Goto(from-internal,${EXTEN},1)
same => n(no),Hangup()
рис. 5

Что мы сделали:

Мы создали новый контекст, при звонке  в котором будет вызываться наш скрипт и возвращать переменную num. Далее мы проверяем равна ли это переменная слова “yes” и если равно переводим звонок в нормальный режим, а если нет то просто сбрасываем вызов.

  1. Создание контекста и выдача его пользователю

Все что осталось сделать это создать кастомный контекст в админки freepbx и выдать его номеру. 

Переходим во вкладку connectivity -> custom contexts  и создаем новый контекст точно с таким же названием как писали в dialplan

рис. 6

Ставим ALL OUTBOUND ROUTES в состояние Allow и сохраняем.

рис. 7

После этого переходим во вкладку Applications  -> Extensions выбираем номер, которому хотим поставить ограничения.

рис. 8

Переходим в вкладку Advanced

рис. 9

Тут ищем custom context и ставим тот что мы только что создали

рис. 10

Сохраняем все это, и все. Теперь данный номер может звонить только на номера чьи области вы добавите в список разрешенных.

Телефонная книга CallMetrix
Корпоративный телефонный справочник для удобной связи между сотрудниками организации
Скачать описание CallMetrix
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Кондрашин Игорь, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.