Smstools или прием и передача sms на сервере: различия между версиями

Материал из support.qbpro.ru
imported>Vix
imported>Vix
 
Строка 73: Строка 73:
Введенная информация будет сохранена в настроечном файле  
Введенная информация будет сохранена в настроечном файле  
  ~/.gammurc,  
  ~/.gammurc,  
который при необходимости можно отредактировать в любом текстовом редакторе.
который при необходимости можно отредактировать в любом текстовом редакторе.<br>
...
...<br>
Для отправки сообщения служит команда gammu sendsms TEXT <номер телефона>.<br>  
Для отправки сообщения служит команда gammu sendsms TEXT <номер телефона>.<br>  
Сам текст сообщения нужно направить команде по механизму pipes. Это упрощает отправку по СМС текста, который является результатом работы другой программы.
Сам текст сообщения нужно направить команде по механизму pipes. Это упрощает отправку по СМС текста, который является результатом работы другой программы.
Строка 80: Строка 80:
  echo "Привет" | gammu sendsms TEXT +79295556924
  echo "Привет" | gammu sendsms TEXT +79295556924


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


  gammu getallsms
  gammu getallsms

Текущая версия от 18:02, 5 декабря 2018

Скрипт отправки 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

...

ИСТОЧНИКИ: