Начиная с версии 1.2.660 WNAM поддерживает идентификацию абонента через совершение звонка на указанный им номер, с произнесением кода доступа.
Начиная с версии 1.6.2802 также поддерживается сценарий, где кодом доступа являются последние цифры номера входящего звонка от провайдера.
Данный метод похож на идентификацию через СМС. Однако вместо СМС- сообщения абонент получает входящий, бесплатный для него, вызов, где:
- либо механический голос произносит код доступа
- либо необходимо запомнить последние цифры вызывающего номера
которые затем абонент вводит в поле "код" второй стадии процесса идентификации.
Преимущества такого способа очевидны:
- Меньше стоимость идентификации (от 0.25 до 0.46 рублей за вызов против примерно 3 рубля за СМС), а в случае собственного сервера - порядка 10 копеек за звонок с посекундной тарификацией.
- Высокая надежность (СМС доходят не всегда)
- Не надо регистрировать имена отправителя СМС
Потенциальная возможность произнесения рекламной фразы
- ВМЕСТОСМС vmestosms.ru. Внимание! Данный способ работает только для российских номеров (начинающихся на 7). Фиксированный тариф 46 копеек за вызов. Код произносится дважды.
- BitCall sc-tehno.ru (https://bitcall.ru) Тариф зависит от направления и длительности звонка (порядка 25 копеек за вызов). Код произносится один раз.
- SMSЦЕНТР http://smsc.ru Тариф зависит от направления и длительности звонка (порядка 25 копеек за вызов). Код произносится два раза.
- New-Tel http://callpassword.ru (с версии WNAM 1.4)
- Совершение звонка через вашу собственную АТС Asterisk (с версии WNAM 1.6)
и два провайдера с совершением звонка со "случайного" исходящего номера с генерацией 4-5-6-значного кода, соответствующего последним цифрам номера звонящего:
- SMSЦЕНТР smsc.ru (код в номере)
- voicepassword.ru (код в номере) (здесь также произносится код после приёма звонка)
(применимая длина кода определяется вами, в настройках способа идентификации)
- Определиться с провайдером. Зарегистрироваться. Пополнить счёт.
- В настройках метода авторизации в административном интерфейсе WNAM (общего, или для площадки) указать метод "Звонок абоненту", выбрать провайдера, в настройках провайдера:
- Для BitCall зарегистрировать свой номер (номер отправителя звонка). Этот номер будет логином в форме настройки.
Для ВМЕСТОСМС в поле Логин - ничего, в поле Пароль - API ключ - Для BitCall в поле "Логин" ввести зарегистрированный в системе номер телефона, в поле Пароль - API ключ
- Для SMSЦЕНТР (произнесение или код-номер) в полях Логин и Пароль - учетные данные в системе; не забудьте настроить в личном кабинете провайдера допустимые IP
- Для New-Tel Callpassword.ru в поле Логин - ваш ключ_API_для_авторизации_запросов, в поле Пароль - ваш ключ_API_для_подписи_запросов. В поле URL системы опционально можно указать voice - тогда код будет произнесен механическим голосом.
- voicepassword.ru в поле API ключ - тот ключ, который отображен в личном кабинете провайдера
- Для BitCall зарегистрировать свой номер (номер отправителя звонка). Этот номер будет логином в форме настройки.
Провести тестирование путем совершения вызова. В случае успеха в 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.
Настройка собственной АТС
Это трудозатратно, но стоит дешевле.
На стороне WNAM для звонка через собственную АТС - указать провайдера "Локальная АТС Asterisk", и далее в поле URL системы - параметры АТС в формате:
ip_адрес_астериска/имя_контекста/имя_транка, например
172.16.130.13/default/zadarma
Также следует указать логин и пароль для Manager-коннекта до Астериска. Вы можете держать WNAM и Asterisk как на одном сервере, так и на разных. Во втором случае убедитесь в доступности порта TCP:5038 на сервере АТС.
- Размер ответного кода рекомендуется устанавливать в "4 цифры".
- Выберите страницу типа "Звонок абоненту", или её клон.
- Проверить возможность вызова, используя форму http://адрес.вашего.сервера/cp/testsend
Укажите ваш номер телефона, получите вызов с кодом "1234"
Внимание! Чтобы эта проверка работала, включите "Тестовые интерфейсы СМС и шаблонов страниц" в меню "Конфигурация - Общие настройки" - Отредактировать стандартный шаблон страницы типа "Звонок абоненту", или её клон
Вы можете настроить вашу собственную АТС Asterisk на том же сервере, где работает и WNAM, или на другом вашем сервере. Вам в любом случае будет необходимо:
1. Настроить исходящий транк на АТС, ведущий в сторону вашего SIP-провайдера. Как его настроить-смотрите документацию от Asterisk и примеры, выдаваемые вашим провайдером.
2. Настроить Manager-подключение. Для этого сделайте файл /etc/asterisk/manager.d/wnam.conf на основе шаблона такого содержания, указав ваши IP адреса, сети, имя в квадратных скобках (логин) и пароль.:
(путь до этого и последующих файлов может отличаться; это зависит от вашего дистрибутива Linux)
[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
3. Внести изменения в диалплан. Для этого в /etc/asterisk/extensions.conf в нужном контексте пропишите следующий план:
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()
Во второй строке укажите ваш Caller ID, то есть собственный номер телефона.
4. Загрузить языковые звуковые пакеты для поддержки русского языка в Asterisk. Будут использоваться русские звуковые файлы для произнесения цифр. Для ОС Debian поставьте пакеты:
apt-get install asterisk-core-sounds-ru asterisk-core-sounds-ru-gsm asterisk-core-sounds-ru-wav
5. Вам также понадобится файл, который будет произнесен в линию абоненту перед кодом, например некоторое приветствие. В нашем примере используются файлы vash-kod-dostupa.wav и vash-kod-dostupa.gsm, которые можно взять здесь и здесь. После загрузки их необходимо поместить в сюда:
/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
Мы используем оба формата файлов и помещаем их в каталоги с разными языками для большей надежности.
^7|0
-- 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-bad95c46cab520: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)