HLR-запросы и их использование в Астериск
В современном мире. многие бизнесы используют автоматические информаторы или системы предиктивного обзвона. В списки таких ПО попадают мобильные номера. В момент прозвона система Астериск не может знать доступен мобильный абонент или нет. Особенно в ситуации, когда оператор мобильной сети сообщает о недоступности, и затем направляет вас на голосовую почту. Правда неприятно платить деньги за такие […]
В современном мире. многие бизнесы используют автоматические информаторы или системы предиктивного обзвона. В списки таких ПО попадают мобильные номера. В момент прозвона система Астериск не может знать доступен мобильный абонент или нет. Особенно в ситуации, когда оператор мобильной сети сообщает о недоступности, и затем направляет вас на голосовую почту. Правда неприятно платить деньги за такие минуты.
В данной статье будет рассмотрен функционал определения доступности мобильного абонента. что позволит сократить расходы на связь или снизить процент ненужных вызовов.

Коротко о HLR
HLR (Home Location Register) — это инструмент для быстрой проверки статуса абонента в сетях GSM, TDMA и CDMA. Также эти запросы позволяют определить текущего оператора связи.
Немного опишем систему HLR. Между операторами связи существует единая база данных. в которой хранится информация о GSM устройстве.

Используя sms сервисы, перед отправкой сообщений, необходимо выполнять HLR запросы или sms-PING. Эти две функции позволят вам сэкономить денежные средства. Мобильный абонент может быть заблокирован/ не доступен или занят. А может. как на изображении выше не подключен к сети. При отправке HLR сообщения передается информация в сеть мобильного оператора, где он проверяет информацию о абоненте, получив системную информацию от устройства. если оно в сети. Что HLR, что sms-PING — это сообщения, которые клиентское устройство не видит, но вы получаете информацию о доступности.
Т.е. по сути HLR — этот таже самая SMS’ка, только она сервисная и телефон ее не отображает.
API сервиса smsc.ru
В рамках этой статьи будет рассмотрен функционал сервиса SMSC.ru. Он был выбран не с целью рекламы и сказать о его преимуществах.
Как в прошлом пункте было сказано “HLR — это SMS”. Основываясь на этом будем искать информацию в документации сервиса отправки сообщений, как можно отправить SMS’ку.
В разделе HTTP-протокол сразу видим пример строки для отправки sms.
https://smsc.ru/sys/send.php?login=<login>&psw=<password>&phones=<phones>&mes=<message>
В этой строке видим, что сервис принимает несколько параметров:
- login — ваш логин в системе smsc.ru
- psw — ваш пароль
- phones — список телефонов, которые будем проверять
- mes — текст сообщения
Но как же отправить hlr спросите вы. Тут все просто — к текущим параметрам добавим еще один
&hlr=1
В ответе мы получаем список [<status>, <requestID>]
Для обращения к API и использования этой функции в Астериск я буду использовать ЯП python 3.6.
Скрипт проверки
Готовая библиотека PYTHON для отправки сообщения к API сервисам находится на сайте smsc.ru ее можно скачать по этой ссылке.
Скачаем указанную выше библиотеку в директорию, где будет находится наш скрипт:
# cd /opt/
# mkdir hlr
# cd hlr
# wget https://smsc.ru/doc/api/smsc_api.py
Перед тем, как начать ей пользоваться необходимо ввести учетные данные от вашего личного кабинета sms центра. Открываем любым текстовым редактором скачанный файл и меняем значения двух переменных логина и пароля соответственно
- SMSC_LOGIN = «login»
- SMSC_PASSWORD = «password»

Преднастройки выполнены. Теперь нужно написать свой небольшой скрипт, который будет использовать скачанную библиотеку и отправлять HLR запрос.
В той же директории создаем наш файл
# vim sendhlr.py
Начнем творить. Для начала импортируем нашу библиотеку, добавляем модуль, обеспечивающий доступ к некоторым переменным и функциям, взаимодействующими с интерпретатором python. Вторым шагом создаем объект класса SMSC и объявляем переменную, которая будет принимать передаваемый скрипту аргумент.
from smsc_api import * # импорт библиотеки
import sys
sms = SMSC() # создание объекта класса SMSC
num = sys.argv[1] # Принимаем значение - номер телефона
Объект создан. теперь с ним можно работать. Поэтому занесем в переменную send ответ отправки sms. Процесс выполняется с помощью метода send_sms, он принимает несколько значений:
- Номер, на который отправляем, должно передаваться строкой
- Текст сообщения
- Формат сообщения
Ниже приведу список возможных форматов (запись <значение> — <описание>):
- 0 — обычное sms
- 1 — flash-sms
- 2 — wap-push
- 3 — hlr
- 4 — bin
- 5 — bin-hex
- 6 — ping-sms
- 7 — mms
- 8 — mail
- 9 — call
- 10 — viber
- 11 — soc
Нам необходим формат hlr — поэтому нужно указать в передаваемом значении 3.
send = sms.send_sms(str(num), "ping", format=3)
Данный запрос возвращает нам список со значениями: [<id запроса>, <количество отправленных sms>, <стоимость отправки>, <оставшийся баланс на счете>]. Из ответа мы видим, что статус отправки в ответе не приходит, поэтому воспользуемся вторым методом подключенного модуля — get_status. Этот метод принимает два параметра
- ID запроса
- Номер телефона в строковом виде
В этот метод мы будем передавать ID выполненного ранее запроса send_sms и полученный аргумент
status = sms.get_status(send[0],str(num)) # получаем статус отправленной sms
Данный пункт вернет также список с несколькими значениями:
- <статус>
- <время изменения>
- <код ошибки sms>
- <код IMSI SIM-карты>
- <номер сервис-центра>
- <код страны регистрации>
- <код оператора абонента>
- <название страны регистрации>
- <название оператора абонента>
- <название роуминговой страны>
- <название роумингового оператора>
Нас интересует статус, поэтому выводим первый элемент списка
print (status[0])
Статусы сообщений:
- -1 — Ожидает отправки
- 0 — Передано оператору
- 1 — Доставлено
Листинг скрипта:
# /usr/local/bin/python3.6
from smsc_api import *
import sys
sms = SMSC() # Создаем объект SMSC
num = sys.argv[1] # Принимаем значение - номер телефона
send = sms.send_sms(str(num), "ping", format=3) # отправляем sms
status = sms.get_status(send[0],str(num)) # получаем статус отправленной sms
print (status[0])

Диалплан Астериска
Чтобы мы могли вызывать скрипт из диалплана астериска, необходимо назначить права на скрипт. Если у вас установлен FreePBX пользователя и группу надо указать asterisk:asterisk
# chown asterisk. /opt/hlr/sendhlr.py
Итак, перейдем к диалплану. В начале статьи мы указывали, что скрипт будет работать для мобильных номеров. Поэтому в контекст, где описаны правила исходящих вызовов на мобильные номера добавим строки:
same => n,Set(MOB_STATUS=${SHELL(/opt/hlr/sendhlr.py ${EXTEN})})
same => n,ExecIf($[“${MOB_STATUS}” != “1” ]?Macro(hangupcall,))
Теперь подробнее о добавленных строках. В первой строке мы функцией SHELL консольную команду, в нашем случае — запуск скрипта, и как аргумент мы передаем ему номер, на который мы набираем. Второй строкой мы проверяем статус полученного результата. Если ответ пришел отличный от 1 , т.е. доставлено, то мы просто кладем трубку приложением Hangup, т.к. понимаем что любое другое значение означает, что абонент недоступен.

Заключение
Таким образом в этой статье было дано небольшое понимание о том, что такое HLR запрос и о том. как определить доступность мобильного абонента. Да, оно работает, но есть специфика этого способа, это решение платное по 30 копеек за один запрос.

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