Начиная с версии 1.1.510 WNAM позволяет осуществлять идентификацию абонентов беспроводной сети не только путём отправки им СМС-сообщений, но и при помощи приёма сообщений, отправленных абонентами. Таким образом вы, как владелец системы, экономите на отправке идентификационных сообщений. Оплата за отправляемые сообщения перекладывается непосредственно на абонента, по тарифу его сотового оператора.
Внимание! В качестве допустимых способов получения сообщений в настоящий момент поддерживаются три:
Для включения приёма сообщений вы должны:
При этом все выбранные ниже настройки СМС игнорируются, кроме
Поле выбора провайдера также игнорируется, потому что оба способа приёма (gammu и smsc) активны одновременно.
Предварительно, настроить сам модем (usb_modeswitch), проброс физического USB-устройства в виртуальную машину вы должны выполнить самостоятельно.
Необходимо настроить сервис smsd, отредактировав файл /etc/gammu-smsdrc:
# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB0
connection = at9600
# Debugging
logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = syslog
# Increase for debugging information
debuglevel = 0
RunOnReceive = /usr/local/bin/wnam-gammu-smsd-bridge.pl
CommTimeout = 5
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/
При этом вы должны указать путь до исполняемого файла скрипта, который будет осуществлять передачу принятых СМС сообщений в сервер WNAM (wnam-gammu-smsd-bridge.pl). В режиме настройки укажите debuglevel = 2
Текст скрипта приведен ниже, также он содержится в каталоге со вспомогательными файлами на сервере (http://www.netams.com/files/wnam/misc/wnam-gammu-smsd-bridge.pl)
#!/usr/bin/perl
#
# wnam-gammu-smsd-bridge.pl
# http://www.netams.com/
# see http://wammu.eu/docs/manual/smsd/run.html
#
use constant WNAM_HOST => "127.0.0.1";
use IO::Socket::INET;
$| = 1;
my $sock = new IO::Socket::INET(PeerAddr => WNAM_HOST, PeerPort => 20001, Proto => 'tcp', Timeout => 0.5) or undef $sock;
if (defined $sock) {
my $msgs=$ENV{"SMS_MESSAGES"};
if (defined $msgs) {
for (my $i=1; $i<=$msgs; $i++) {
my $tel = $ENV{"SMS_".$i."_NUMBER"};
my $code = $ENV{"SMS_".$i."_TEXT"};
print $sock "SMSRECV PHONE=$tel TEXT=$code\n";
print "SMSRECV PHONE=$tel TEXT=$code\n";
}
}
$sock->close;
}
После окончания настроек перезапустите gammu и убедитесь, что в лог-файле /var/log/daemon.log отображаются нормальные события обмена данными с модемом.
/etc/init.d/gammu-smsd restart
Пусть номер телефона на SIM-карте +7 (910) 012-34-56. Вы должны соответствующим образом отредактировать шаблон формы sms_recv (или её клона) для того, чтобы пользователь имел возможность отправить вам сообщение прямо с телефона. Найдите и отредактируйте следующие строки:
<p>Отправьте СМС с любым текстом на номер:</p>
<!-- Form Inputs -->
<div class="form-group">
<a href="sms:+79100123456"><button type="button" class="btn btn-success btn-lg btn-block">+7 910 012-34-56</button></a>
Вам необходимо заменить шаблонный номер на свой собственный.
Вручную эмулировать доставку входящего СМС сообщения в WNAM можно путем запуска такой команды:
echo "SMSRECV PHONE=79991234567 TEXT=0000" | nc -w 1 wnam_ip_address 20001
Код в сообщении не важен и игнорируется.
Вы должны указать HTTP-путь до вашего сервера WNAM формате http://имя_вашего_сервера:порт/cp/smsc_recv Внимание! Это специальная статическая ссылка сервиса WNAM, не имеет отношение к форме sms_recv, не путайте!
Ваш сервер должен быть доступен из сети Интернет (напрямую, или через публикацию на межсетевом экране) для серверов компании SMSC. Подробное описание механизма работы SMSC API приведено здесь.
Для приёма сообщений вы можете использовать три варианта:
Пусть выбранный номер телефона SMSC +7 (916) 887-77-77. Вы должны соответствующим образом отредактировать шаблон формы sms_recv (или её клона) для того, чтобы пользователь имел возможность отправить вам сообщение прямо с телефона (реализуется переход на приложение отправки СМС по ссылке вида sms://+79168877777). Найдите и отредактируйте следующие строки:
<p>Отправьте СМС с любым текстом на номер:</p>
<!-- Form Inputs -->
<div class="form-group">
<a href="sms:+79168877777&body=vasyapupkin:%20$(smscode)"><button type="button" class="btn btn-success btn-lg btn-block">+7 (916) 887-77-77</button></a>
При этом вы должны вписать в параметр body префикс (ваш логин в smsc.ru), если вы выбрали использование публичных номеров. Внимание! будет ли в действительности использоваться этот параметр или нет, зависит от версии операционной системы абонентского устройства!
Вам необходимо установить и настроить утилиту kannel так, как описано в разделе Отправка СМС по протоколу SMPP. Необходимо дополнительно включить приём сообщений и пересылку их в WNAM в конфигурационном файле /etc/kannel/kannel.conf:
group = sms-service
keyword = default
catch-all = yes
max-messages = 0
post-url = "http://127.0.0.1:8080/cp/kannel_recv?phone=%p&to=%P&mes=%a"
В качестве ссылки вы должны указать IP-адрес и порт сервиса веб-интерфейса WNAM.
Настройки формы авторизации соответствуют предыдущему варианту (как для SMSC), с учётом требований вашего провайдера.
4. Проверить работу системы
Независимо от выбранного вами способа приёма сообщений с точки зрения абонента механизм работы авторизации будет одинаковым:
CP SMSRECV phase 1: mac=87:A5:1C:EC:3B:AF, ip=10.130.3.218, phone=79159993322
Абонент нажимает на зелёную кнопку, переходит в свой приложение отправки СМС, отправляет сообщение (в принципе, текст сообщения не важен):
при получении сообщения в лог-файле /var/log/tomcat7/wnam.log появляется такая запись:
SMS_RECV from 79168877777, confirmed phone 79159993322, MAC=87:A5:1C:EC:3B:AF, CODE=3469