Дмитрий Кайдаш
04.02.2020
2285

Верификация мобильных номеров – часть 1

Описание: в этой статье мы рассмотрим возможность проверки существования мобильного номера и его доступности. Все инструкции тестировались на следующем оборудовании: CentOS Linux release 7.5.1804 Asterisk 13.21.0 PHP 5.6.36 Apache/2.2.15 MySQL/10.1.33-MariaDB Используемые технологии: PHP MySQL Dialplan asterisk Вначале следует сказать, что программные АТС на базе asterisk умеют определять статус звонка и включают в себя следующие значения: […]

Описание: в этой статье мы рассмотрим возможность проверки существования мобильного номера и его доступности.

Все инструкции тестировались на следующем оборудовании:

CentOS Linux release 7.5.1804

  • Asterisk 13.21.0
  • PHP 5.6.36
  • Apache/2.2.15
  • MySQL/10.1.33-MariaDB
Работа на других версиях не гарантируется. Под версию php ниже 5.4 будет произвести некоторые изменения, но работоспособность не пострадает.

Используемые технологии:

  • PHP
  • MySQL
  • Dialplan asterisk

Вначале следует сказать, что программные АТС на базе asterisk умеют определять статус звонка и включают в себя следующие значения:

  • «CANCEL»: Вызов отменен
  • «ANSWER»: На вызов был получен ответ
  • «NOANSWER»: На вызов не ответили
  • «BUSY»: Получен сигнал занято
  • «CONGESTION»: Канал перегружен
  • «CHANUNAVAIL»: Канал недоступен (Для SIP, может быть в случае если пир не зарегистрирован)

Подробнее можете ознакомиться со встроенной отчётностью в нашей статье: https://voxlink.ru/kb/freepbx/statistika-zvonkov-cdr-v-freepbx-13/

Сохранение статуса ответа
Сохранение статуса ответа

Статус можно получить, обработав переменную канала ${DIALSTATUS} или же обратившись после звонка к внутренней базе asteriskcdrdb.cdr.

Статусы ответа во внутренней базе asterisk
Статусы ответа во внутренней базе asterisk

Наша задача заключается в реализации функции дозвона и возврате его статуса, поэтому реализуем небольшое API-которое будет выполнять эту задачу. Примерная логическая схема ниже:

Принцип работы приложения
Принцип работы приложения
  • «Оранжевое» направление
    Получив номер мобильного и  номер договора API вызывает кастомный контекст диалплана asterisk
[phone-verification]
exten => _[87]9X.,1,NoOp( VERIFICATION ${EXTEN} BEGIN )

Разрешили обрабатывать только мобильные номера, начинающиеся с «79…» и «89…»

same => n(repeat),Set(link=http://127.0.0.1/verphone/?revolver=${EXTEN})

same => n,Set(outline=${SHELL(curl ${link})})

Сформировали и выполнили повторное обращение к API-скрипту

same => n,GotoIf($[“${outline}”=””]?exit)

Если полученный результат эквивалентен пустой строке – завершаем обработку

same => n,Set(trunk=${CUT(outline,|,1)})
same => n,Set(cid=${CUT(outline,|,2)})

Иначе разделяем полученный результат и присваиваем его соответствующим переменным.

same => n,NoOp( -------- trunk: ${trunk} , cid: ${cid} -------- )

same => n,Set(CALLERID(all)=${cid})
same => n,Set(TRUNKOUTCID=${cid})

Устанавливаем отображаемый номер (CID) аналогичный городской телефонной линии (транку), через которую будет производиться вызов.

same => n,Set(CDR(userfield)=${idblank})

Записываем номер договора в дополнительное поле базы данных asteriskcdrdb.cdr.userfield

same => n,Dial(SIP/${trunk}/7${EXTEN:1},10/n)

В течении 10 секунд пытаемся осуществить вызов через полученный от API транк.

same => n,NoOp(${DIALSTATUS})
same => n,Gotoif($["${DIALSTATUS}"!="CHANUNAVAIL"]?exit)

Если вызов прошёл корректно, а транк был доступен – завершаем обработку

same => n,Wait(1)
same => n,Goto(repeat)

Иначе, через секунду ожидания, возвращаемся к обращению за получением данных от API. Это необходимо для получения следующего в очереди транка при недоступности текущего.

same => n(exit),Macro(hangupcall,)

exten => h,1,Hangup()

Весь этот контекст должен быть дописан в файл extensions_custom.conf, после чего в консоли CLI выполнить команду:

CLI > dialplan reload
  • «Синее» направление               
    • Возвращает по запросу статус вызова. Требует передачу номеров телефона и договора.
  • «Зелёное» направление
    • Возвращает информацию о звонке во внутреннюю базу данных, в том числе и статус дозвона.

Так же нам для работы понадобится создать собственную таблицу и внести в неё список используемых транков, например как показано ниже:

Пример списка транков и указателя
Пример списка транков и указателя

На этом настройки со стороны АТС завершены в следующей части статьи мы рассмотрим API-скрипт, запросы для обращений к нему извне, а так же предоставим примеры «боевого» запуска.

Верификация мобильных номеров – часть 2

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

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

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

VoIP оборудование

ближайшие курсы

ближайшие Вебинары

ONLINE

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