Начиная с версии 1.1.510 WNAM позволяет осуществлять идентификацию абонентов беспроводной сети не только путём отправки им СМС-сообщений, но и при помощи приёма сообщений, отправленных абонентами. Таким образом вы, как владелец системы, экономите на отправке идентификационных сообщений. Оплата за отправляемые сообщения перекладывается непосредственно на абонента, по тарифу его сотового оператора.
Внимание! В качестве допустимых способов получения сообщений в настоящий момент поддерживаются два:
Для включения приёма сообщений вы должны:
Предварительно, настроить сам модем (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>
Вам необходимо заменить шаблонный номер на свой собственный.
Вы должны указать HTTP-путь до вашего сервера WNAM формате http://имя_вашего_сервера:порт/cp/smsc_recv
Ваш сервер должен быть доступен из сети Интернет (напрямую, или через публикацию на межсетевом экране) для серверов компании SMSC. Подробное описание механизма работы SMSC API приведено здесь.
Для приёма сообщений вы можете использовать три варианта:
Пусть выбранный номер телефона SMSC +7 (916) 887-77-77. Вы должны соответствующим образом отредактировать шаблон формы sms_recv (или её клона) для того, чтобы пользователь имел возможность отправить вам сообщение прямо с телефона. Найдите и отредактируйте следующие строки:
<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), если вы выбрали использование публичных номеров. Внимание! будет ли использоваться этот параметр или нет, зависит от операционной системы абонентского устройства!
Независимо от выбранного вами способа приёма сообщений с точки зрения абонента механизм работы авторизации будет одинаковым: