Smstools или прием и передача sms на сервере

Материал из support.qbpro.ru

Скрипт отправки sms на заданный почтовый ящик:

#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAIL_FROM=smstools@myhost.ru
MAIL_TO=admin@myhost.ru
PATHSMS="/var/spool/sms/incoming";
LISTSMS=( `ls -x -c $PATHSMS` );
TEXT=;
MESSAGE=;
## default agent mail, else mutt
SENDER_AGENT="mail";

## make messages
function makeMessage() {
if sed -e '/^$/ q' < "$MESSAGE" | grep -q "^Alphabet: UCS2"; 
    then
    TEXT="$(sed -e '/^$/ q' < "$MESSAGE" | sed -e 's/Alphabet: UCS2/Alphabet: UTF-8/g')";
    TEXT="$(echo -e $TEXT"\n"$(sed -e '1,/^$/ d' < "$MESSAGE" | iconv -f UNICODEBIG -t UTF-8))";
    else
    TEXT="$(sed -e '1,/^$/ d' < "$MESSAGE")";
fi
NUM="$(echo $TEXT|grep -E '^From:'|sed -r 's/.*From_SMSC: //; s/S.*//')";
sendMessage
}

## send messages
function sendMessage() {

if [ "$SENDER_AGENT" = "mail" ]
   then
    SUBJECT='Входящее SMS сообщение с номера:'$NUM
    TEXTBODY=$TEXT
    echo -e $TEXTBODY|mailx -a "Content-Type: text/plain; charset=UTF-8" -s "$SUBJECT" $MAIL_TO
fi

if [ "$SENDER_AGENT" = "mutt" ]
   then
  SUBJECT='Входящее SMS сообщение с номера:'$NUM
  TEXTBODY=$TEXT
    echo -e $TEXTBODY|mutt -s "$SUBJECT" $MAIL_TO
fi

}

## test enable sms mesages
if [ ! "$(ls -x $PATHSMS)" ]
    then 
    exit 0
fi
## executor
ex_index=$((${#LISTSMS[@]}-1));
while [ $ex_index -gt -1 ]
 do
   MESSAGE="$PATHSMS"/"${LISTSMS[$ex_index]}";
   makeMessage
 ex_index=$(($ex_index-1));
done
## delete all sms! - Attention! this option removes your SMS, if you configure script, comment out this command.
##rm -f $PATHSMS/*
  • скрипт ставим в crontab и дальше все происходит автоматически...

Использование Gammu

... Работа с Gammu начинается с настройки. Проще всего это сделать при помощи утилиты, которая запускается командой

gammu-config. 

Она поинтересуется «портом» (в нашем случае сюда попадает уже знакомый путь)

/dev/tty.HUAWEIMobile-Pcui 

типом и скоростью соединения, моделью (если ничего подходящего нет, стоит выбрать at — в этот тип входит любое устройство, поддерживающее набор команд Hayes) и запросит несколько менее интересных деталей.
Введенная информация будет сохранена в настроечном файле

~/.gammurc, 

который при необходимости можно отредактировать в любом текстовом редакторе.
...
Для отправки сообщения служит команда gammu sendsms TEXT <номер телефона>.
Сам текст сообщения нужно направить команде по механизму pipes. Это упрощает отправку по СМС текста, который является результатом работы другой программы.

echo "Привет" | gammu sendsms TEXT +79295556924

В Gammu предусмотрено несколько способов чтения сообщений, но для того, чтобы рассмотреть их все, здесь просто нет места.
Ограничимся одной, самой простой командой. Она выводит все СМС, хранящиеся в памяти устройства.

gammu getallsms
   
   Location 1, folder "Inbox", SIM memory, Inbox folder
   SMS message
   SMSC number          : "+79037333332"
   Sent                 : Fri Dec 18 21:17:17 2009 +0300
   Coding               : Unicode (no compression)
   Remote number        : "Beeline"
   Status               : Read
   User Data Header     : Concatenated (linked) message, ID (16 bit) 8444, part 1 of 2
   
   Общее время Ваших разговоров 4 мин.

Нередко вместо выполнения команды Gammu жалуется на проблемы. Ошибка «Error opening device. Unknown, busy or no permissions» может свидетельствовать о том, что соединение с модемом захватила какая-то другая программа. Возможен и другой вариант: GSM-модемы, как оказалось, не отличаются крепкими нервами и под градом команд склонны виснуть. Чтобы привести их в чувство, устройство приходится вытаскивать из порта USB и затем втыкать снова.

Еще один важный компонент Gammu — это SMS Daemon, программа, которая одним махом решает три четверти задачи построения сервера для взаимодействия по СМС. SMS Daemon работает в фоне, поддерживает контакт с модемом и при получении сообщения выполняет заданные действия. К слову, с перезагрузкой подвисшего модема он тоже справляется.

Настройка SMS Daemon — относительно сложная задача, требующая ручного редактирования настроечного файла. В нем должен появиться блок [smsd], содержащий настройки сервиса хранения СМС и, если это необходимо, задающий путь к обработчику получаемых сообщений.

Сервис хранения СМС ценнее всего. SMS Daemon способен автоматически записывать полученные сообщения в базу данных (поддерживаются среди прочего SQLite, MySQL, PostgreSQL и MS SQL) или складывать в виде файлов в специальную папку.

Обработчик представляет собой программу или скрипт пользователя, автоматически запускаемый после приема сообщения. Информация передается обработчику через переменные окружения. Переменная SMS_MESSAGES содержит число полученных сообщений, значение SMS_1_NUMBER соответствует телефонному номеру отправителя, а SMS_1_TEXT — тексту сообщения.

SMS Daemon можно использовать и для отправки сообщений, хотя это несколько выбивается из круга его обязанностей. Это делается при помощи команды gammu-smsd-inject, действующей в точности как gammu send-sms.

echo "Привет" | gammu-smsd-inject TEXT +79295556924

...

ИСТОЧНИКИ: