Начиная с версии 1.2.660 WNAM поддерживает идентификацию абонента через совершение звонка на указанный им номер, с произнесением кода доступа.

С версии 1.6.2802 WNAM поддерживается сценарий двухфакторной авторизации, где кодом доступа являются последние цифры номера входящего звонка от провайдера или последовательность цифр, произнесенная механическим голосом при ответе на звонок. Входящий звонок является для абонента бесплатным. Код доступа необходимо ввести в соответствующее поле страницы идентификации – «код».

Преимущества идентификации посредством входящего звонка:

В настоящий момент поддерживается четыре сторонних провайдера для совершения звонков с произнесением кода доступа и один собственный провайдер:

и провайдеры с совершением звонка со "случайного" исходящего номера с генерацией 4-5-6-значного кода, соответствующего последним цифрам номера звонящего:


Услуга провайдера ВМЕСТОСМС доступна только для российских операторов, номера которых начинаются с цифры 7.

Услуга провайдера New-Tel доступна с версии WNAM 1.4.

Использование собственной АТС доступно с версии WNAM 1.6.


Также система поддерживает пять провайдеров с совершением звонка со «случайного» исходящего номера с генерацией 4-5-6-значного кода доступа, соответствующего последним цифрам номера:  


Услуга провайдеров Telediscount и I-digital доступна с версии WNAM 1.6.3038.

Услуга провайдера Obit доступна с версии WNAM 1.6.3092.

1. Настройка идентификации при использовании сторонних провайдеров

Для настройки данного метода необходимо:

После ввода необходимых данных следует нажать кнопку "Сохранить изменения" и произвести тестирование путем совершения вызова через конструктор страниц, или имя_сервера/cp/testform. В случае успешного применения настроек, в файле регистрации событий «wnam.log» будут произведены подобные записи:

DEBUG [com.netams.wnam.web.cp.SmsHandler:174] - CP CALL phase 1: mac=00:01:02:03:04:05, ip=1.2.3.4, phone=7915xxxxxxx, code=1524 ! система присвоила временный код
DEBUG [c.n.w.s.sms.providers.VoicePassword:36] - voicepassword call_to: +7915xxxxxxx return 'CodeResponse{result='ok', code='4922', price=0.30, errorCode='null'}'
DEBUG [c.n.w.web.cp.CaptivePortalController:941] - postSms: site_id=8, username=00:01:02:03:04:05, phone=7915xxxxxxx, smscode=4922, ci.key=... ! реальный код 4922; этот звонок пришел с +7 (961) 342-49-22
DEBUG [c.n.w.web.cp.CaptivePortalController:1076] - postSmsPhase2 phone=7915xxxxxxx, code=4922, r={ ip=1.2.3.4, mac=00:01:02:03:04:05, phone=7915xxxxxxx, code=4922, attempts=0 }, r_ir=false, ap_m=CALL
DEBUG [c.n.w.web.cp.CaptivePortalController:1101] - CP CALL phase 2: mac=00:01:02:03:04:05, ip=1.2.3.4, phone=7915xxxxxxx, smscode=4922 CORRECT in 14546 ms.

2. Настройка собственной АТС 

При использовании собственной АТС администратору необходимо выполнить следующие действия:

172.16.130.13/default/zadarma


Существует возможность настроить собственную АТС Asterisk на том же сервере, где работает WNAM, или на другом сервере. В обоих случаях необходимо:

[wnam]
secret=password
deny=0.0.0.0/0.0.0.0
permit=172.16.130.0/24,172.16.135.0/24
read = all
write = all
exten => _7NXXXXXXXXX,1,NoOp(Исходящий звонок в транк)
same => n,Set(CALLERID(all)="74993467660"<74993467660>)
same => n,Set(CHANNEL(language)=ru)
same => n,Playback(vash-kod-dostupa)
same => n,SayDigits(${CODE})
same => n,Hangup()

Во второй строке CALLERID необходимо указать собственный номер телефона.

apt-get install asterisk-core-sounds-ru asterisk-core-sounds-ru-gsm asterisk-core-sounds-ru-wav 

Дополнительно понадобится файл, который отвечает за приветствие абонента перед сообщением кода доступа. В качестве примера используются файлы «vash-kod-dostupa.wav» и «vash-kod-dostupa.gsm», которые можно получить по ссылкам https://www.netams.com/files/wnam/misc/vash-kod-dostupa.gsm и https://www.netams.com/files/wnam/misc/vash-kod-dostupa.wav соответственно. После загрузки выбранных файлов, их необходимо переместить в следующие директории:

/usr/share/asterisk/sounds/en_US_f_Allison/vash-kod-dostupa.gsm
/usr/share/asterisk/sounds/en_US_f_Allison/vash-kod-dostupa.wav
/usr/share/asterisk/sounds/ru_RU_f_IvrvoiceRU/vash-kod-dostupa.gsm
/usr/share/asterisk/sounds/ru_RU_f_IvrvoiceRU/vash-kod-dostupa.wav

Можно использовать оба формата файла и помещать их в каталоги с разными языками для большей надежности. Аналогичные файлы приветствия можно сделать самостоятельно с помощью программы «Yandex Speech Kit», конвертировав их онлайн-конвертерами (рекомендуемые настройки конвертации: 8000 Гц, моно, 16 бит).

^7|0

Это означает замену ведущей семерки в номере на ноль. При этом требуется поменять шаблон (pattern) в номерной плане:  (exten => _7NXXXXXXXXX на exten => _0NXXXXXXXXX).


После настройки АТС Asterinsk следует перезапустить сервис, и сделать проверку работы авторизации. После ввода абонентом своего телефонного номера через несколько секунд ему поступит вызов, в котором будет произнесено, например, следующее: «Ваш код доступа семь четыре три девять», после чего звонок завершится автоматически. Такой звонок занимает около десяти секунд. Далее следует перейти в консоль настройки АТС Asterisk и включить отладку, набрав команду «core set debug 10 и sip set debug on», после чего в консоли АТС Asterisk будет следующая информация:

-- SIP/zadarma-0000000f answered
-- Executing [79996771111@default:1] NoOp("SIP/zadarma-0000000f", "Исходящий звонок в транк") in new stack
 -- Executing [79996771111@default:2] Set("SIP/zadarma-0000000f", "CALLERID(all)="74993467660"<74993467660>") in new stack
 -- Executing [79996771111@default:3] Set("SIP/zadarma-0000000f", "CHANNEL(language)=ru") in new stack
 -- Executing [79996771111@default:4] Playback("SIP/zadarma-0000000f", "vash-kod-dostupa") in new stack
 -- <SIP/zadarma-0000000f> Playing 'vash-kod-dostupa.slin' (language 'ru')
-- Executing [79996771111@default:5] SayDigits("SIP/zadarma-0000000f", "7439") in new stack
 -- <SIP/zadarma-0000000f> Playing 'digits/7.slin' (language 'ru')
-- <SIP/zadarma-0000000f> Playing 'digits/4.slin' (language 'ru')
-- <SIP/zadarma-0000000f> Playing 'digits/3.slin' (language 'ru')
-- <SIP/zadarma-0000000f> Playing 'digits/9.slin' (language 'ru')

В лог-файле wnam.log появятся такие записи:

20:45:38.916 DEBUG [c.n.w.web.cp.CaptivePortalController:1241] - postSms: site_id=101, username=AE:9E:AF:32:3F:11, phone=79996771111, smscode=null, ci.key=e4bbe1da-8473-42b5-b097-bad95c46cab5

20:45:38.930 DEBUG [com.netams.wnam.web.cp.SmsHandler:147] - CP CALL phase 1: mac=AE:9E:AF:32:3F:11, ip=10.130.129.99, phone=79996771111, code=7439

20:45:38.944 INFO [o.a.live.internal.AsteriskServerImpl:322] - Initializing done
20:45:38.944 DEBUG [c.n.w.s.sms.providers.Asterisk:67] - Create Scenario Call: phone '79996771111',chanel 'SIP/zadarma/79996771111',context 'default',extension '79996771111'

20:45:38.949 INFO [o.a.live.internal.AsteriskServerImpl:1247] - Initializing done
20:45:38.949 INFO [o.a.live.internal.ChannelManager:213] - Adding channel SIP/zadarma-00000012(1586713540.31)

С версии WNAM 1.6.3231 поддерживается переопределение имени исходящего канала при совершении звонка через management-интерфейс АТС Asterisk. Стандартное наименование канала «SIP/имя_транка/номер_абонента» можно изменить. Следует воспользоваться такой возможностью, если администратору АТС требуется видеть в SIP-заголовках дополнительные параметры. Для этого в разделе «Конфигурация" → "Дополнительная настройка» необходимо отредактировать параметр «asterisk_trunk_pattern», представляющий собой строку, в которой задается имя канала с возможностью «на лету» изменять переменные вида: %переменная% реальными значениями.

Изменение параметра «asterisk_trunk_pattern» требует перезапуска сервиса WNAM.

Например, стандартная конфигурация параметра имеет вид:

SIP/%TRUNK%/%PHONE%

При совершении вызова будет сформировано имя канала:

SIP/zadarma/79998887766

Для использования доступны следующие переменные: %TRUNK%, %PHONE%, %CONTEXT%, %CODE%.

Например, если АТС требуется видеть в имени контекста значение, такое как: 

zadarma/79998887766@default

,то переменная «asterisk_trunk_pattern» должна иметь вид:

%TRUNK%/%PHONE%@%CONTEXT%