Записи с меткой ‘sms’
Собственный SMS шлюз
Сначала подготовим сервер. Я ставил это на Fedora 18 и Debian 7, на x86, amd64 и arm в исполнении Raspberry Pi. Разница только в способе установки пакетов.
Сначала инструменты для работы с sms через 3g/4g модемы Huawei, которые создают /dev/ttyUSB* устройства при подключении.
Huawei выбран потому что эти модемы работают очень стабильно в отличие от ZTE. Прочие производители не тестировались ввиду отсутствия в свободной продаже в Самаре.
При подключении 3G модема в USB должны появиться три устройства:
/dev/ttyUSB0
/dev/ttyUSB1
/dev/ttyUSB2
Обычно нулевое устройство — основное для передачи данных. Оно же занимается для подключения по GPRS и производным протоколам. Если модем не используется для этого, то 0 устройство можно использовать для SMS. А вот если используется, что для разных модемов для отправки SMS придётся подбирать экспериментальным путём либо 1 либо 2 устройство.
Приступим.
apt-get install gammu gammu-smsd
В связи с особенностью используемых мной шлюзов хранить всё это будем в /home/sms
mkdir -p /home/sms
cd /home/sms
rm -f /etc/gammu-smsdrc
ln -s /etc/gammu-smsdrc /home/sms/gammu-smsdrc
Конфиг /home/sms/gammu-smsdrc:
[smsd]
Service = files
PIN = 0000
LogFile = syslog
InboxPath = /home/sms/inbox/
OutboxPath = /home/sms/outbox/
SentSMSPath = /home/sms/sent/
ErrorSMSPath = /home/sms/error/debuglevel = 1
logfile = /home/sms/smsd.log[gammu]
port = /dev/ttyUSB0
model = at
connection = at19200
synchronizetime = yes
logfile = /home/sms/gammu.log
logformat = textalldate
use_locking = yes
;gammuloc =
;gammucoding = utf8
Файл запуска/перезапуска сервиса /home/sms/restart:
#!/bin/bashkillall -q gammu-smsd && sleep 10
cd /home/sms
>smsd.log
touch smrsh.log
chmod 1660 smsd.log smrsh.log
mkdir -p error inbox outbox sent
chmod 1770 error inbox outbox sent
chgrp mail smsd.log smrsh.log error inbox outbox sentgammu-smsd -c /home/sms/gammu-smsdrc -d
С учётом того под каким юзером будем запускать этого домена нужно сделать:
chown -R user:group /home/sms
Нужно учесть, что юзер должен принадлежать группе, которая может писать в /dev/ttyUSB0.
Ну и запускаем:
/home/sms/start
Для автоматического запуска в /etc/rc.local вписываем эту же команду.
Проверить работу можно так, заменив телефон на свой:
gammu-smsd-inject -c gammu-smsdrc TEXT "+79020000000" -textutf8 "дата/date `date`" -unicode
Теперь создаём отдельный поддомен для отправки sms через e-mail. В sendmail добавляем его в /etc/mail/local-host-names и прописываем в virtusertable:
@subdomain.domain.tld smsg
а в aliases:
smsg: "|/etc/mail/smrsh/smsg"
smsg может выглядеть так:
#!/bin/bash LOG=/tmp/smsg BF='' SMS='' MOB='' date >> $LOG set >> $LOG env >> $LOG while read L; do echo $L >> $LOG if [ -z "$L" ]; then BF=1 continue fi if [ -z "$BF" ]; then if [ "${L:0:4}" == "To: " ]; then TO=${L:4} TO=${TO# *} TO=${TO%@*} if [ ${#TO} != 10 ] || [ "${TO:0:1}" != "9" ]; then echo "BAD TO" >> $LOG exit 403 fi MOB="+7"$TO fi else if [ -z "$SMS" ]; then SMS=$L else SMS=$SMS$'\n'$L fi fi done if [ -n "$MOB" ] && [ -n "$SMS" ]; then echo "--- SMS ---" >> $LOG echo "$MOB" >> $LOG echo "$SMS" >> $LOG echo "=== === ===" >> $LOG gammu-smsd-inject -c /home/sms/gammu-smsdrc TEXT "$MOB" -textutf8 "$SMS" -unicode -len 319 1>>$LOG 2>&1 fi