Начиная с версии 1.2.685 WNAM поддерживает идентификацию абонента через приём звонка от абонента на указанный номер.
Данный метод похож на идентификацию через получение СМС. Однако вместо отправки СМС-сообщения абонент совершает за свой счёт исходящий вызов на ваш номер телефона. Номер, на который должны поступать звонки от абонентов, необходимо приобрести у любого провайдера и завести на шлюз (программную АТС) Asterisk под вашим управлением. Длительность входящего вызова минимальна: звонок сразу сбрасывается. Для WNAM важно определить входящий номер вызывающего абонента, который проводит авторизацию.
Такой способ идентификации имеет ряд преимуществ:
- минимальные операционные затраты - при использовании SIP-провайдеров стоимость входящих вызовов нулевая, а стоимость аренды номера близка к нулевой;
существует возможность произнесения абоненту рекламного сообщения, которое он обязан дослушать до конца.
Для настройки данного метода необходимо произвести следующие действия:
1. Настройка входящей телефонной линии
Необходимо создать учётную запись у используемого VoIP провайдера, арендовать (получить, купить) телефонный номер.
В приведенном примере используется провайдер zadarma.com, где общий внешний номер провайдера +7 495 777 66 75, а внутренний номер 454498 (то есть получение вызова будет требовать донабора). Для удобства использования рекомендуется получить выделенный номер.
Установка и настройка АТС Asterisk, настройка взаимодействия с провайдером должна быть проведена самостоятельно при помощи соответствующих инструкций провайдера. Если используется АТС другого типа, то необходимо реализовать какое-либо действие (например, вызов скрипта), которое АТС выполнит при поступлении звонка. В случае возникновения проблем с реализацией данного способа следует обратиться в техническую поддержку за помощью на support@netams.com.
По умолчанию предполагается, что входящие вызовы поступают в контекст [default].
2. Настройка уведомления со стороны АТС Asterisk в сторону WNAM о входящем звонке
В конфигурационном файле /etc/asterisk/extensions.conf в контексте [default] необходимо создать правила вызова скрипта-уведомителя при помощи интерфейса AGI:
[default]
;include => demoexten => 454498,1,NoOp(Входящий звонок с номера ${CALLERID(num)})
same => n,AGI(wnam-asterisk-bridge.pl,${CALLERID(num)})
same => n,Hangup()
В поле exten указать ваш внешний номер телефона.
Далее необходимо скачать скрипт взаимодействия wnam-asterisk-bridge [используйте бинарную утилиту, см. ниже] из репозитория http://www.netams.com/files/wnam/misc/ , поместив его в каталог скриптов /usr/share/asterisk/agi-bin/ и сделать его исполняемым:
chmod +x /usr/share/asterisk/agi-bin/wnam-asterisk-bridge.pl
При необходимости, если АТС Asterisk и WNAM работают на разных серверах, следует отредактировать скрипт, прописав адрес сервера WNAM. Затем необходимо проверить работоспособность взаимодействия, запустив скрипт:
/usr/share/asterisk/agi-bin/wnam-asterisk-bridge.pl 1234
При этом в лог-файле wnam.log должны появиться следующие две записи:
12:18:37.192 DEBUG [c.n.wnam.services.WnamCmdService:230] - Start handling client connection
12:18:37.192 DEBUG [c.n.wnam.services.WnamCmdService:249] - Finish handling client connection
Начиная с версий WNAM 1.3.1339 и 1.4.1499 рекомендуемым способом идентификации по звонку является использование не Perl, а бинарного (двоичного) скрипта wnam-asterisk-bridge, который находится в том же репозитории http://www.netams.com/files/wnam/misc/ с его исходными текстами. Параметры вызова скрипта (командной строки) дополнительно указывают на IP адрес сервера WNAM и пароль взаимодействия. Также для авторизации через пул номеров необходимо передавать номер, на который пришёл вызов. Пример использования скрипта:
[default]
;include => demoexten => 454498,1,NoOp(Входящий звонок с номера ${CALLERID(num)})
same => n,AGI(wnam-asterisk-bridge,127.0.0.1,password,${CALLERID(num)},${CALLERID(dnid)})
same => n,Hangup()
3. Настройка WNAM
Со стороны административного интерфейса WNAM в разделе "Конфигурация" → "Площадки" требуется только выбрать новый метод идентификации "Получение звонка от абонента". Он может быть общим (по умолчанию, для всех площадок), и индивидуально выбранным для заданной площадки:
Параметр "провайдер звонка" значения не имеет и может быть не заполнен.
Необходимо выбрать страницу шаблона в поле "Имя страницы", отображаемую абонентов при идентификации. В дистрибутиве представлена шаблонная страница call_recv.
4. Модификация страницы авторизации
Далее необходимо отредактировать шаблон страницы call_recv из меню "Конфигурация" → "Гостевая конфигурация" → "Конструктор страниц" на вкладке "Авторизация". Как минимум, необходимо необходимо указать входящий номер телефона вашего шлюза АТС Asterisk.
Номер указывается в виде текста, отображаемого на зеленой кнопке абонента при совершении авторизации, а также в параметрах ссылки в формате:
<a href="tel:+74957776675,454498#">...
или
<a href="tel:+74951234567">...
5. Проверка идентификации
При подключении к сети абонент, открыв браузер и перейдя по ссылке, попадает на стандартную процедуру идентификации, где первым шагом должен указать свой номер телефона, а вторым шагом должен совершить идентификационный звонок:
При нажатии на зеленую кнопку (при её работоспособности) абоненту будет предложено открыть телефонное приложение и сделать вызов:
После совершения вызова произойдет автоматическое перенаправление браузера на окно redirect, либо иное действие, определенное в разделе "Перенаправление". По умолчанию, проверка выполненного звонка и идентификации производится раз в 5 секунд (таймер задается в js-коде страницы call_recv).
При корректной идентификации в лог-файле wnam.log будет отображена следующая цепочку событий:
12:17:14.068 DEBUG [c.n.w.web.cp.CaptivePortalController:288] - CP mikrotik clicked: username=AA:56:14:DD:38:58, ip=10.130.3.235, dst='http://www.ru/', server_address=10.130.3.1:80, server_name='mk1-hs'
12:17:14.199 DEBUG [c.n.w.web.cp.CaptivePortalController:1020] - processAuthRequest MIKROTIK: username=AA:56:14:DD:38:58, ip=10.130.3.235, server=10.130.3.1:80, site_id=55, dst='http://www.ru/'
12:17:14.209 DEBUG [c.n.w.web.cp.CaptivePortalController:1052] - captive portal redirected to SMS page, username=AA:56:14:DD:38:58, cust=null, form='call_recv'
12:17:24.292 DEBUG [c.n.w.web.cp.CaptivePortalController:752] - CP CALLRECV phase 1: mac=AA:56:14:DD:38:58, ip=10.130.3.235, phone=79153446712
12:17:29.854 DEBUG [c.n.w.web.cp.CaptivePortalController:816] - CP CALLRECV phase 2: mac=AA:56:14:DD:38:58, ip=10.130.3.235, phone=79153446712, smscode=1617 UNVERIFIED
12:18:36.091 DEBUG [c.n.w.web.cp.CaptivePortalController:816] - CP CALLRECV phase 2: mac=AA:56:14:DD:38:58, ip=10.130.3.235, phone=79153446712, smscode=1617 UNVERIFIED
12:18:37.192 DEBUG [c.n.wnam.services.WnamCmdService:230] - Start handling client connection
12:18:37.192 DEBUG [c.n.wnam.services.WnamCmdService:714] - CALL-RECV confirmed phone 79153446712, MAC=AA:56:14:DD:38:58, CODE=1617
12:18:37.192 DEBUG [c.n.wnam.services.WnamCmdService:249] - Finish handling client connection
12:18:41.625 DEBUG [c.n.w.web.cp.CaptivePortalController:791] - CP SMSRECV phase 2: mac=AA:56:14:DD:38:58, ip=10.130.3.235, phone=79153446712, smscode=1617 VERIFIED
12:18:41.635 DEBUG [c.n.w.web.cp.CaptivePortalController:1092] - processRedirectRequest username=AA:56:14:DD:38:58, method=FORM
12:18:43.729 DEBUG [c.n.w.web.cp.CaptivePortalController:850] - Redirect login: site_id=55, username=AA:56:14:DD:38:58, dst='http://bash.im'
12:18:43.729 DEBUG [c.n.w.web.cp.CaptivePortalController:1221] - loginAtNas MIKROTIK username=AA:56:14:DD:38:58, ip=10.130.3.235, server=10.130.3.1:80, dst='http://bash.im'
12:18:43.739 DEBUG [com.netams.wnam.web.cp.Mikrotik:37] - backToMikrotik login len=531, server='10.130.3.1:80', username=AA:56:14:DD:38:58, password=password, dst='http://bash.im'
12:18:44.200 DEBUG [c.n.wnam.services.WnamCmdService:230] - Start handling client connection
12:18:44.220 INFO [WnamRadius:451] - AUTH for new session ID=8050007e-9b3858, request MAC=AA:56:14:DD:38:58, IP=10.130.3.235, cust_clientid=null
12:18:44.240 DEBUG [c.n.wnam.services.WnamCmdService:230] - Start handling client connection
12:18:44.240 INFO [WnamRadius:550] - ACCT Start existing (8050007e-9b3858) session ID=8050007e-9b3858, MAC=AA:56:14:DD:38:58, IP=10.130.3.235, NAS=172.16.130.9