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

Материал из support.qbpro.ru
imported>Vix
Нет описания правки
imported>Vix
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
   
   
Скрипт отправки sms на заданный почтовый ящик:
==Скрипт отправки sms на заданный почтовый ящик:==


  #!/bin/bash
  #!/bin/bash
Строка 13: Строка 13:
  SENDER_AGENT="mail";
  SENDER_AGENT="mail";
   
   
  ## meka messages
  ## make messages
  function makeMessage() {
  function makeMessage() {
  if sed -e '/^$/ q' < "$MESSAGE" | grep -q "^Alphabet: UCS2";  
  if sed -e '/^$/ q' < "$MESSAGE" | grep -q "^Alphabet: UCS2";  
Строка 45: Строка 45:
  }
  }
   
   
  ## test enable sms mesagges
  ## test enable sms mesages
  if [ ! "$(ls -x $PATHSMS)" ]
  if [ ! "$(ls -x $PATHSMS)" ]
     then  
     then  
     echo "exit"
     exit 0
  fi
  fi
  ## executor
  ## executor
Строка 58: Строка 58:
   ex_index=$(($ex_index-1));
   ex_index=$(($ex_index-1));
  done
  done
  ## delete all sms
  ## delete all sms! - Attention! this option removes your SMS, if you configure script, comment out this command.
  rm -f $PATHSMS/*
  ##rm -f $PATHSMS/*


* скрипт ставим в crontab и дальше все происходит автоматически...
* скрипт ставим в crontab и дальше все происходит автоматически...


==Использование Gammu==
...
Работа с Gammu начинается с настройки. Проще всего это сделать при помощи утилиты, которая запускается командой
gammu-config.
Она поинтересуется «портом» (в нашем случае сюда попадает уже знакомый путь)
/dev/tty.HUAWEIMobile-Pcui
типом и скоростью соединения, моделью (если ничего подходящего нет, стоит выбрать at — в этот тип входит любое устройство, поддерживающее набор команд Hayes) и запросит несколько менее интересных деталей.<br>
Введенная информация будет сохранена в настроечном файле
~/.gammurc,
который при необходимости можно отредактировать в любом текстовом редакторе.<br>
...<br>
Для отправки сообщения служит команда gammu sendsms TEXT <номер телефона>.<br>
Сам текст сообщения нужно направить команде по механизму pipes. Это упрощает отправку по СМС текста, который является результатом работы другой программы.
echo "Привет" | gammu sendsms TEXT +79295556924
В Gammu предусмотрено несколько способов чтения сообщений, но для того, чтобы рассмотреть их все, здесь просто нет места.<br>
Ограничимся одной, самой простой командой. Она выводит все СМС, хранящиеся в памяти устройства.
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
...
* [https://xakep.ru/2015/04/07/195-sms/ взято тут]
'''ИСТОЧНИКИ:'''
<hr>
* [http://mrcat.ru/sms-send-receive полезное по настройке]
* [http://mrcat.ru/sms-send-receive полезное по настройке]
* [https://jpsoft.com/help/sendhtml.htm?anchor=subject для почтовых агентов]
* [https://jpsoft.com/help/sendhtml.htm?anchor=subject для почтовых агентов]
* [http://linuxoidmemos.blogspot.com/2013/04/sms-huawei-e153u-1.html Читаем SMS из модема Huawei E153u-1]

Текущая версия от 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

...

ИСТОЧНИКИ: