Smstools или прием и передача sms на сервере
Скрипт отправки 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
...
ИСТОЧНИКИ: